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()".
This commit is contained in:
FUJIWARA Katsunori 2013-11-08 12:45:52 +09:00
parent 22784f4191
commit f4da0cbf73
2 changed files with 17 additions and 21 deletions

View File

@ -364,6 +364,22 @@ def updatefromremote(ui, repo, remotemarks, path):
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'),

View File

@ -1976,27 +1976,7 @@ class localrepository(object):
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):