--- a/hgext3rd/topic/discovery.py Thu Jun 22 09:47:14 2017 +0200
+++ b/hgext3rd/topic/discovery.py Thu Jun 22 10:13:29 2017 +0200
@@ -4,7 +4,6 @@
from mercurial.i18n import _
from mercurial import (
- branchmap,
bundle2,
discovery,
error,
@@ -13,15 +12,15 @@
wireproto,
)
-from . import topicmap
-
def _headssummary(orig, *args):
# In mercurial < 4.2, we receive repo, remote and outgoing as arguments
if len(args) == 3:
+ pushoparg = False
repo, remote, outgoing = args
# In mercurial > 4.3, we receive the pushop as arguments
elif len(args) == 1:
+ pushoparg = True
pushop = args[0]
repo = pushop.repo.unfiltered()
remote = pushop.remote
@@ -33,38 +32,44 @@
or bool(remote.listkeys('phases').get('publishing', False)))
if publishing or not remote.capable('topics'):
return orig(*args)
- oldrepo = repo.__class__
- oldbranchcache = branchmap.branchcache
- oldfilename = branchmap._filename
- try:
- class repocls(repo.__class__):
- def __getitem__(self, key):
- ctx = super(repocls, self).__getitem__(key)
- oldbranch = ctx.branch
+
+ class repocls(repo.__class__):
+ def __getitem__(self, key):
+ ctx = super(repocls, self).__getitem__(key)
+ oldbranch = ctx.branch
+
+ def branch():
+ branch = oldbranch()
+ topic = ctx.topic()
+ if topic:
+ branch = "%s:%s" % (branch, topic)
+ return branch
- def branch():
- branch = oldbranch()
- topic = ctx.topic()
- if topic:
- branch = "%s:%s" % (branch, topic)
- return branch
+ ctx.branch = branch
+ return ctx
- ctx.branch = branch
- return ctx
-
+ oldrepo = repo.__class__
+ try:
repo.__class__ = repocls
- branchmap.branchcache = topicmap.topiccache
- branchmap._filename = topicmap._filename
- summary = orig(*args)
+ unxx = repo.filtered('unfiltered-topic')
+ repo.unfiltered = lambda: unxx
+ if pushoparg:
+ try:
+ pushop.repo = repo
+ summary = orig(pushop)
+ finally:
+ pushop.repo = repo
+ else:
+ summary = orig(repo, remote, outgoing)
for key, value in summary.iteritems():
if ':' in key: # This is a topic
if value[0] is None and value[1]:
summary[key] = ([value[1].pop(0)], ) + value[1:]
return summary
finally:
+ if 'unfiltered' in vars(repo):
+ del repo.unfiltered
repo.__class__ = oldrepo
- branchmap.branchcache = oldbranchcache
- branchmap._filename = oldfilename
def wireprotobranchmap(orig, repo, proto):
oldrepo = repo.__class__