changeset 1889:d9b929bcc3ad

topicmap: ensure that 'served' view is updated with topicmap There is multiple place that explicitly update the 'served' branchmap to ensure it stay up to date. We ensure it use the proper topicmap in this case.
author Pierre-Yves David <pierre-yves.david@fb.com>
date Mon, 14 Mar 2016 00:15:54 +0000
parents dfaf0de6f4d8
children e846b8f402d0
files src/topic/__init__.py
diffstat 1 files changed, 12 insertions(+), 1 deletions(-) [+]
line wrap: on
line diff
--- a/src/topic/__init__.py	Mon Mar 14 00:12:22 2016 +0000
+++ b/src/topic/__init__.py	Mon Mar 14 00:15:54 2016 +0000
@@ -16,6 +16,7 @@
 from mercurial.i18n import _
 from mercurial import branchmap
 from mercurial import bundle2
+from mercurial import changegroup
 from mercurial import cmdutil
 from mercurial import commands
 from mercurial import context
@@ -80,6 +81,10 @@
         branchmap.branchcache = oldbranchcache
         branchmap._filename = oldfilename
 
+def cgapply(orig, repo, *args, **kwargs):
+    with usetopicmap(repo):
+        return orig(repo, *args, **kwargs)
+
 def reposetup(ui, repo):
     orig = repo.__class__
     if not isinstance(repo, localrepo.localrepository):
@@ -106,7 +111,8 @@
                 not self.currenttopic):
                 # we are amending and need to remove a topic
                 del ctx.extra()[constants.extrakey]
-            return orig.commitctx(self, ctx, error=error)
+            with usetopicmap(self):
+                return orig.commitctx(self, ctx, error=error)
 
         @property
         def topics(self):
@@ -127,6 +133,10 @@
                 branchmap.updatecache(self)
             return self._topiccaches[self.filtername]
 
+        def destroyed(self, *args, **kwargs):
+            with usetopicmap(self):
+                return super(topicrepo, self).destroyed(*args, **kwargs)
+
         def invalidatecaches(self):
             super(topicrepo, self).invalidatecaches()
             if '_topiccaches' in vars(self.unfiltered()):
@@ -308,6 +318,7 @@
 bundle2.handlecheckheads.params = frozenset() # we need a proper wrape b2 part stuff
 bundle2.parthandlermapping['check:heads'] = bundle2.handlecheckheads
 extensions.wrapfunction(exchange, '_pushb2phases', discovery._pushb2phases)
+extensions.wrapfunction(changegroup.cg1unpacker, 'apply', cgapply)
 exchange.b2partsgenmapping['phase'] = exchange._pushb2phases
 topicrevset.modsetup()
 cmdutil.summaryhooks.add('topic', summaryhook)