src/topic/discovery.py
changeset 1886 0504e76bfbd9
child 1887 68125d026b07
equal deleted inserted replaced
1885:d49f75eab6a3 1886:0504e76bfbd9
       
     1 from mercurial import branchmap
       
     2 from . import topicmap
       
     3 
       
     4 def _headssummary(orig, repo, remote, outgoing):
       
     5     publishing = ('phases' not in remote.listkeys('namespaces')
       
     6                   or bool(remote.listkeys('phases').get('publishing', False)))
       
     7     if publishing:
       
     8         return orig(repo, remote, outgoing)
       
     9     oldgetitem = repo.__getitem__
       
    10     oldrepo = repo.__class__
       
    11     oldbranchcache = branchmap.branchcache
       
    12     oldfilename = branchmap._filename
       
    13     try:
       
    14         class repocls(repo.__class__):
       
    15             def __getitem__(self, key):
       
    16                 ctx = super(repocls, self).__getitem__(key)
       
    17                 oldbranch = ctx.branch
       
    18                 def branch():
       
    19                     branch = oldbranch()
       
    20                     topic = ctx.topic()
       
    21                     if topic:
       
    22                         branch = "%s:%s" % (branch, topic)
       
    23                     return branch
       
    24                 ctx.branch = branch
       
    25                 return ctx
       
    26         repo.__class__ = repocls
       
    27         branchmap.branchcache = topicmap.topiccache
       
    28         branchmap._filename = topicmap._filename
       
    29         summary = orig(repo, remote, outgoing)
       
    30         for key, value in summary.iteritems():
       
    31             if ':' in key: # This is a topic
       
    32                 if value[0] is None and value[1]:
       
    33                     summary[key] = ([value[1].pop(0)], ) + value[1:]
       
    34         return summary
       
    35     finally:
       
    36         repo.__class__ = oldrepo
       
    37         branchmap.branchcache = oldbranchcache
       
    38         branchmap._filename = oldfilename
       
    39 
       
    40 def wireprotobranchmap(orig, repo, proto):
       
    41     oldrepo = repo.__class__
       
    42     print repo
       
    43     try:
       
    44         class repocls(repo.__class__):
       
    45             def branchmap(self):
       
    46                 usetopic = not self.publishing()
       
    47                 return super(repocls, self).branchmap(topic=usetopic)
       
    48         repo.__class__ = repocls
       
    49         return orig(repo, proto)
       
    50     finally:
       
    51         repo.__class__ = oldrepo