# HG changeset patch
# User Pierre-Yves David <pierre-yves.david@ens-lyon.org>
# Date 2011-11-28 00:18:15
# Node ID 9df9444e96ec6df9f870cdcfb338e33c025841cd
# Parent  926a06f7a353c82a0bfb9416440857a06a9c9535

addchangegroup: use a postrelease callback to call changegroup hook

This is will allow addchangegroup to drop lock related code.

diff --git a/mercurial/localrepo.py b/mercurial/localrepo.py
--- a/mercurial/localrepo.py
+++ b/mercurial/localrepo.py
@@ -2003,21 +2003,24 @@ class localrepository(repo.repository):
             cl.finalize(trp)
 
             tr.close()
+
+            def postaddchangegroup():
+                if changesets > 0:
+                    # forcefully update the on-disk branch cache
+                    self.ui.debug("updating the branch cache\n")
+                    self.updatebranchcache()
+                    self.hook("changegroup", node=hex(cl.node(clstart)),
+                              source=srctype, url=url)
+
+                    for n in added:
+                        self.hook("incoming", node=hex(n), source=srctype,
+                                  url=url)
+            self._postrelease(postaddchangegroup)
+
         finally:
             tr.release()
             if lock:
                 lock.release()
-
-        if changesets > 0:
-            # forcefully update the on-disk branch cache
-            self.ui.debug("updating the branch cache\n")
-            self.updatebranchcache()
-            self.hook("changegroup", node=hex(cl.node(clstart)),
-                      source=srctype, url=url)
-
-            for n in added:
-                self.hook("incoming", node=hex(n), source=srctype, url=url)
-
         # never return 0 here:
         if dh < 0:
             return dh - 1