Patchwork [2,of,2,STABLE] hooks: fix hooks not firing if prechangegroup was set (issue4934)

login
register
mail settings
Submitter Durham Goode
Date Nov. 4, 2015, 1:19 a.m.
Message ID <50eea7d186fb9695dfee.1446599978@dev2000.prn2.facebook.com>
Download mbox | patch
Permalink /patch/11283/
State Accepted
Headers show

Comments

Durham Goode - Nov. 4, 2015, 1:19 a.m.
# HG changeset patch
# User Durham Goode <durham@fb.com>
# Date 1446599607 28800
#      Tue Nov 03 17:13:27 2015 -0800
# Branch stable
# Node ID 50eea7d186fb9695dfeee57fe79010b56d83ac8e
# Parent  0a772553285d61aeea3226f74698223b09fae7ac
hooks: fix hooks not firing if prechangegroup was set (issue4934)

We need to call delayupdate after writing to the changelog instead of before it.
Otherwise the prechangegroup hook consumes the delayupdate subscription and
future hooks don't see the pending changes (see issue 4934 for more details).

Adds a test that triggers the prechangegroup hook before the pretxnchangegroup
hook and verifies that the output of pretxnchangegroup doesn't change.
Matt Mackall - Nov. 4, 2015, 8:53 p.m.
On Tue, 2015-11-03 at 17:19 -0800, Durham Goode wrote:
> # HG changeset patch
> # User Durham Goode <durham@fb.com>
> # Date 1446599607 28800
> #      Tue Nov 03 17:13:27 2015 -0800
> # Branch stable
> # Node ID 50eea7d186fb9695dfeee57fe79010b56d83ac8e
> # Parent  0a772553285d61aeea3226f74698223b09fae7ac
> hooks: fix hooks not firing if prechangegroup was set (issue4934)

These are queued for stable, thanks.

Patch

diff --git a/mercurial/changegroup.py b/mercurial/changegroup.py
--- a/mercurial/changegroup.py
+++ b/mercurial/changegroup.py
@@ -406,6 +406,10 @@  class cg1unpacker(object):
                              % (changesets, revisions, files, htext))
             repo.invalidatevolatilesets()
 
+            # Call delayupdate again to ensure the transaction writepending
+            # subscriptions are still in place.
+            cl.delayupdate(tr)
+
             if changesets > 0:
                 if 'node' not in tr.hookargs:
                     tr.hookargs['node'] = hex(cl.node(clstart))
diff --git a/tests/test-hook.t b/tests/test-hook.t
--- a/tests/test-hook.t
+++ b/tests/test-hook.t
@@ -686,6 +686,7 @@  new commits must be visible in pretxncha
   $ cd ..
   $ hg init to
   $ echo '[hooks]' >> to/.hg/hgrc
+  $ echo 'prechangegroup = hg --traceback tip' >> to/.hg/hgrc
   $ echo 'pretxnchangegroup = hg --traceback tip' >> to/.hg/hgrc
   $ echo a >> to/a
   $ hg --cwd to ci -Ama
@@ -698,6 +699,12 @@  new commits must be visible in pretxncha
   $ hg --cwd from push
   pushing to $TESTTMP/to (glob)
   searching for changes
+  changeset:   0:cb9a9f314b8b
+  tag:         tip
+  user:        test
+  date:        Thu Jan 01 00:00:00 1970 +0000
+  summary:     a
+  
   adding changesets
   adding manifests
   adding file changes