diff -r 839c2879edcc -r 13313d0cab71 hgext3rd/topic/discovery.py --- 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__