# HG changeset patch # User Ryan McElroy # Date 1500468704 25200 # Node ID 078c3912afce7513ddc82321aa6f49fde8d42434 # Parent 78959c8e5e607a00f23e0991760439923bf30dfb bookmarks: compatibility with new applychanges api Recent versions of mercuiral issue a devel-warn if the old recordchange api is used, but we want to remain backwards-compatible, so this patch refactors things to be forward-compatible and backwards-compatible. diff -r 78959c8e5e60 -r 078c3912afce hggit/git_handler.py --- a/hggit/git_handler.py Mon Jul 17 05:49:23 2017 -0700 +++ b/hggit/git_handler.py Wed Jul 19 05:51:44 2017 -0700 @@ -300,8 +300,8 @@ # make sure the bookmark exists; at the point the remote # branches has already been set up suffix = self.branch_bookmark_suffix or '' - self.repo._bookmarks[rhead + suffix] = rnode - util.recordbookmarks(self.repo, self.repo._bookmarks) + changes = [(rhead + suffix, rnode)] + util.updatebookmarks(self.repo, changes) bms = [rhead + suffix] if bms: @@ -1372,6 +1372,7 @@ if ref.startswith('refs/heads/')]) suffix = self.branch_bookmark_suffix or '' + changes = [] for head, sha in heads.iteritems(): # refs contains all the refs in the server, not just # the ones we are pulling @@ -1381,15 +1382,15 @@ hgsha = bin(hgsha) if head not in bms: # new branch - bms[head + suffix] = hgsha + changes.append((head + suffix, hgsha)) else: bm = self.repo[bms[head]] if bm.ancestor(self.repo[hgsha]) == bm: # fast forward - bms[head + suffix] = hgsha + changes.append((head + suffix, hgsha)) if heads: - util.recordbookmarks(self.repo, bms) + util.updatebookmarks(self.repo, changes) except AttributeError: self.ui.warn(_('creating bookmarks failed, do you have' diff -r 78959c8e5e60 -r 078c3912afce hggit/util.py --- a/hggit/util.py Mon Jul 17 05:49:23 2017 -0700 +++ b/hggit/util.py Wed Jul 19 05:51:44 2017 -0700 @@ -94,18 +94,28 @@ return True return False -def recordbookmarks(repo, bms, name='git_handler'): +def updatebookmarks(repo, changes, name='git_handler'): """abstract writing bookmarks for backwards compatibility""" + bms = repo._bookmarks tr = lock = wlock = None try: wlock = repo.wlock() lock = repo.lock() tr = repo.transaction(name) - if hgutil.safehasattr(bms, 'recordchange'): - # recordchange was added in mercurial 3.2 - bms.recordchange(tr) + if hgutil.safehasattr(bms, 'applychanges'): + # applychanges was added in mercurial 4.3 + bms.applychanges(repo, tr, changes) else: - bms.write() + for name, node in changes: + if node is None: + del bms[name] + else: + bms[name] = node + if hgutil.safehasattr(bms, 'recordchange'): + # recordchange was added in mercurial 3.2 + bms.recordchange(tr) + else: + bms.write() tr.close() finally: lockmod.release(tr, lock, wlock)