topic: make topics compatible with branchmap refactor
See https://phab.mercurial-scm.org/D5290
--- a/hgext3rd/serverminitopic.py Wed Jan 30 10:03:00 2019 -0800
+++ b/hgext3rd/serverminitopic.py Wed Nov 21 12:00:46 2018 +0000
@@ -146,6 +146,10 @@
return hasminitopic(repo) and repo.filtername not in _publiconly
class _topiccache(branchmap.branchcache): # combine me with branchmap.branchcache
+ @classmethod
+ def fromfile(cls, repo):
+ orig = super(_topiccache, cls).fromfile
+ return wrapread(orig, repo)
def __init__(self, *args, **kwargs):
# super() call may fail otherwise
@@ -226,6 +230,12 @@
def uisetup(ui):
wrapclass(branchmap, 'branchcache', _topiccache)
- extensions.wrapfunction(branchmap, 'read', wrapread)
+ try:
+ # Mercurial 4.8 and older
+ extensions.wrapfunction(branchmap, 'read', wrapread)
+ except AttributeError:
+ # Mercurial 4.9; branchcache.fromfile now takes care of this
+ # which is alredy defined on _topiccache
+ pass
extensions.wrapfunction(wireproto, '_capabilities', wireprotocaps)
extensions.wrapfunction(context.changectx, 'branch', topicbranch)
--- a/hgext3rd/topic/topicmap.py Wed Jan 30 10:03:00 2019 -0800
+++ b/hgext3rd/topic/topicmap.py Wed Nov 21 12:00:46 2018 +0000
@@ -117,7 +117,21 @@
class topiccache(_topiccache, branchmap.branchcache):
pass
branchmap.branchcache = topiccache
- extensions.wrapfunction(branchmap, 'updatecache', _wrapupdatebmcache)
+
+ try:
+ # Mercurial 4.9
+ class remotetopiccache(_topiccache, branchmap.remotebranchcache):
+ pass
+ branchmap.remotebranchcache = remotetopiccache
+
+ def _wrapupdatebmcachemethod(orig, self, repo):
+ # pass in the bound method as the original
+ return _wrapupdatebmcache(orig.__get__(self), repo)
+ extensions.wrapfunction(branchmap.BranchMapCache, 'updatecache', _wrapupdatebmcachemethod)
+ except AttributeError:
+ # Mercurial 4.8 and before
+ extensions.wrapfunction(branchmap, 'updatecache', _wrapupdatebmcache)
+
def _wrapupdatebmcache(orig, repo):
previous = getattr(repo, '_autobranchmaptopic', False)