# HG changeset patch # User FUJIWARA Katsunori # Date 1383882352 -32400 # Node ID 4b06b2a445a1cc6a1efd774b774bb58e68ac334a # Parent 84905561ad41b919bd4c587b7856b53c6d42add5 bookmarks: rewrite pushing bookmarks in "localrepository.push()" by "compare()" This patch adds "updateremote()", which uses "compare()" to compare bookmarks between the local and the remote repositories, to replace pushing local bookmarks in "localrepository.push()". diff -r 84905561ad41 -r 4b06b2a445a1 mercurial/bookmarks.py --- a/mercurial/bookmarks.py Fri Nov 08 12:45:52 2013 +0900 +++ b/mercurial/bookmarks.py Fri Nov 08 12:45:52 2013 +0900 @@ -364,6 +364,22 @@ writer(msg) localmarks.write() +def updateremote(ui, repo, remote, revs): + ui.debug("checking for updated bookmarks\n") + revnums = map(repo.changelog.rev, revs or []) + ancestors = [a for a in repo.changelog.ancestors(revnums, inclusive=True)] + (addsrc, adddst, advsrc, advdst, diverge, differ, invalid + ) = compare(repo, repo._bookmarks, remote.listkeys('bookmarks'), + srchex=hex) + + for b, scid, dcid in advsrc: + if ancestors and repo[scid].rev() not in ancestors: + continue + if remote.pushkey('bookmarks', b, dcid, scid): + ui.status(_("updating bookmark %s\n") % b) + else: + ui.warn(_('updating bookmark %s failed!\n') % b) + def pushtoremote(ui, repo, remote, targets): (addsrc, adddst, advsrc, advdst, diverge, differ, invalid ) = compare(repo, repo._bookmarks, remote.listkeys('bookmarks'), diff -r 84905561ad41 -r 4b06b2a445a1 mercurial/localrepo.py --- a/mercurial/localrepo.py Fri Nov 08 12:45:52 2013 +0900 +++ b/mercurial/localrepo.py Fri Nov 08 12:45:52 2013 +0900 @@ -1976,27 +1976,7 @@ if locallock is not None: locallock.release() - self.ui.debug("checking for updated bookmarks\n") - rb = remote.listkeys('bookmarks') - revnums = map(unfi.changelog.rev, revs or []) - ancestors = [ - a for a in unfi.changelog.ancestors(revnums, inclusive=True)] - for k in rb.keys(): - if k in unfi._bookmarks: - nr, nl = rb[k], hex(self._bookmarks[k]) - if nr in unfi: - cr = unfi[nr] - cl = unfi[nl] - if bookmarks.validdest(unfi, cr, cl): - if ancestors and cl.rev() not in ancestors: - continue - r = remote.pushkey('bookmarks', k, nr, nl) - if r: - self.ui.status(_("updating bookmark %s\n") % k) - else: - self.ui.warn(_('updating bookmark %s' - ' failed!\n') % k) - + bookmarks.updateremote(self.ui, unfi, remote, revs) return ret def changegroupinfo(self, nodes, source):