--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/src/topic/topicmap.py Sat Mar 12 15:36:17 2016 +0000
@@ -0,0 +1,61 @@
+from mercurial import branchmap
+
+def _filename(repo):
+ """name of a branchcache file for a given repo or repoview"""
+ filename = "cache/topicmap"
+ if repo.filtername:
+ filename = '%s-%s' % (filename, repo.filtername)
+ return filename
+
+oldbranchcache = branchmap.branchcache
+
+class topiccache(oldbranchcache):
+
+ def __init__(self, *args, **kwargs):
+ otherbranchcache = branchmap.branchcache
+ try:
+ # super() call may fail otherwise
+ branchmap.branchcache = oldbranchcache
+ return super(topiccache, self).__init__(*args, **kwargs)
+ finally:
+ branchmap.branchcache = otherbranchcache
+
+ def branchtip(self, branch, topic=''):
+ '''Return the tipmost open head on branch head, otherwise return the
+ tipmost closed head on branch.
+ Raise KeyError for unknown branch.'''
+ if topic:
+ branch = '%s:%s' % (branch, topic)
+ return super(topiccache, self).branchtip(branch)
+
+ def branchheads(self, branch, closed=False, topic=''):
+ if topic:
+ branch = '%s:%s' % (branch, topic)
+ return super(topiccache, self).branchheads(branch, closed=closed)
+
+ def write(self, repo):
+ # The cache key needs to take phase root in account because change to
+ # what is public affect topics. We can't write on disk until we have this.
+ return
+
+ def update(self, repo, revgen):
+ """Given a branchhead cache, self, that may have extra nodes or be
+ missing heads, and a generator of nodes that are strictly a superset of
+ heads missing, this function updates self to be correct.
+ """
+ oldgetbranchinfo = repo.revbranchcache().branchinfo
+ try:
+ def branchinfo(r):
+ info = oldgetbranchinfo(r)
+ topic = ''
+ ctx = repo[r]
+ if ctx.mutable():
+ topic = ctx.topic()
+ branch = info[0]
+ if topic:
+ branch = '%s:%s' % (branch, topic)
+ return (branch, info[1])
+ repo.revbranchcache().branchinfo = branchinfo
+ return super(topiccache, self).update(repo, revgen)
+ finally:
+ repo.revbranchcache().branchinfo = oldgetbranchinfo