addchangegroup: use a postrelease callback to call changegroup hook
authorPierre-Yves David <pierre-yves.david@ens-lyon.org>
Mon, 28 Nov 2011 01:18:15 +0100
changeset 15584 9df9444e96ec
parent 15583 926a06f7a353
child 15585 a348739da8f0
addchangegroup: use a postrelease callback to call changegroup hook This is will allow addchangegroup to drop lock related code.
mercurial/localrepo.py
--- a/mercurial/localrepo.py	Mon Nov 28 15:05:26 2011 +0100
+++ b/mercurial/localrepo.py	Mon Nov 28 01:18:15 2011 +0100
@@ -2003,21 +2003,24 @@
             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