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

Durham Goode durham at fb.com
Tue Nov 3 19:19:38 CST 2015


# HG changeset patch
# User Durham Goode <durham at 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.

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


More information about the Mercurial-devel mailing list