--- a/mercurial/bookmarks.py Tue Nov 22 01:33:31 2016 -0800
+++ b/mercurial/bookmarks.py Fri Dec 09 03:22:26 2016 -0800
@@ -323,8 +323,7 @@
finally:
lockmod.release(tr, l, w)
-def comparebookmarks(repo, srcmarks, dstmarks,
- srchex=None, dsthex=None, targets=None):
+def comparebookmarks(repo, srcmarks, dstmarks, targets=None):
'''Compare bookmarks between srcmarks and dstmarks
This returns tuple "(addsrc, adddst, advsrc, advdst, diverge,
@@ -347,19 +346,9 @@
Changeset IDs of tuples in "addsrc", "adddst", "differ" or
"invalid" list may be unknown for repo.
- This function expects that "srcmarks" and "dstmarks" return
- changeset ID in 40 hexadecimal digit string for specified
- bookmark. If not so (e.g. bmstore "repo._bookmarks" returning
- binary value), "srchex" or "dsthex" should be specified to convert
- into such form.
-
If "targets" is specified, only bookmarks listed in it are
examined.
'''
- if not srchex:
- srchex = lambda x: x
- if not dsthex:
- dsthex = lambda x: x
if targets:
bset = set(targets)
@@ -381,14 +370,14 @@
for b in sorted(bset):
if b not in srcmarks:
if b in dstmarks:
- adddst((b, None, dsthex(dstmarks[b])))
+ adddst((b, None, dstmarks[b]))
else:
invalid((b, None, None))
elif b not in dstmarks:
- addsrc((b, srchex(srcmarks[b]), None))
+ addsrc((b, srcmarks[b], None))
else:
- scid = srchex(srcmarks[b])
- dcid = dsthex(dstmarks[b])
+ scid = srcmarks[b]
+ dcid = dstmarks[b]
if scid == dcid:
same((b, scid, dcid))
elif scid in repo and dcid in repo:
@@ -439,11 +428,17 @@
return None
+def unhexlifybookmarks(marks):
+ binremotemarks = {}
+ for name, node in marks.items():
+ binremotemarks[name] = bin(node)
+ return binremotemarks
+
def updatefromremote(ui, repo, remotemarks, path, trfunc, explicit=()):
ui.debug("checking for updated bookmarks\n")
localmarks = repo._bookmarks
(addsrc, adddst, advsrc, advdst, diverge, differ, invalid, same
- ) = comparebookmarks(repo, remotemarks, localmarks, dsthex=hex)
+ ) = comparebookmarks(repo, remotemarks, localmarks)
status = ui.status
warn = ui.warn
@@ -454,15 +449,15 @@
changed = []
for b, scid, dcid in addsrc:
if scid in repo: # add remote bookmarks for changes we already have
- changed.append((b, bin(scid), status,
+ changed.append((b, scid, status,
_("adding remote bookmark %s\n") % (b)))
elif b in explicit:
explicit.remove(b)
ui.warn(_("remote bookmark %s points to locally missing %s\n")
- % (b, scid[:12]))
+ % (b, hex(scid)[:12]))
for b, scid, dcid in advsrc:
- changed.append((b, bin(scid), status,
+ changed.append((b, scid, status,
_("updating bookmark %s\n") % (b)))
# remove normal movement from explicit set
explicit.difference_update(d[0] for d in changed)
@@ -470,13 +465,12 @@
for b, scid, dcid in diverge:
if b in explicit:
explicit.discard(b)
- changed.append((b, bin(scid), status,
+ changed.append((b, scid, status,
_("importing bookmark %s\n") % (b)))
else:
- snode = bin(scid)
- db = _diverge(ui, b, path, localmarks, snode)
+ db = _diverge(ui, b, path, localmarks, scid)
if db:
- changed.append((db, snode, warn,
+ changed.append((db, scid, warn,
_("divergent bookmark %s stored as %s\n") %
(b, db)))
else:
@@ -485,13 +479,13 @@
for b, scid, dcid in adddst + advdst:
if b in explicit:
explicit.discard(b)
- changed.append((b, bin(scid), status,
+ changed.append((b, scid, status,
_("importing bookmark %s\n") % (b)))
for b, scid, dcid in differ:
if b in explicit:
explicit.remove(b)
ui.warn(_("remote bookmark %s points to locally missing %s\n")
- % (b, scid[:12]))
+ % (b, hex(scid)[:12]))
if changed:
tr = trfunc()
@@ -505,8 +499,8 @@
'''
ui.status(_("searching for changed bookmarks\n"))
- r = comparebookmarks(repo, other.listkeys('bookmarks'), repo._bookmarks,
- dsthex=hex)
+ remotemarks = unhexlifybookmarks(other.listkeys('bookmarks'))
+ r = comparebookmarks(repo, remotemarks, repo._bookmarks)
addsrc, adddst, advsrc, advdst, diverge, differ, invalid, same = r
incomings = []
@@ -522,16 +516,16 @@
incomings.append(" %-25s %s\n" % (b, getid(id)))
for b, scid, dcid in addsrc:
# i18n: "added" refers to a bookmark
- add(b, scid, _('added'))
+ add(b, hex(scid), _('added'))
for b, scid, dcid in advsrc:
# i18n: "advanced" refers to a bookmark
- add(b, scid, _('advanced'))
+ add(b, hex(scid), _('advanced'))
for b, scid, dcid in diverge:
# i18n: "diverged" refers to a bookmark
- add(b, scid, _('diverged'))
+ add(b, hex(scid), _('diverged'))
for b, scid, dcid in differ:
# i18n: "changed" refers to a bookmark
- add(b, scid, _('changed'))
+ add(b, hex(scid), _('changed'))
if not incomings:
ui.status(_("no changed bookmarks found\n"))
@@ -547,8 +541,8 @@
'''
ui.status(_("searching for changed bookmarks\n"))
- r = comparebookmarks(repo, repo._bookmarks, other.listkeys('bookmarks'),
- srchex=hex)
+ remotemarks = unhexlifybookmarks(other.listkeys('bookmarks'))
+ r = comparebookmarks(repo, repo._bookmarks, remotemarks)
addsrc, adddst, advsrc, advdst, diverge, differ, invalid, same = r
outgoings = []
@@ -564,19 +558,19 @@
outgoings.append(" %-25s %s\n" % (b, getid(id)))
for b, scid, dcid in addsrc:
# i18n: "added refers to a bookmark
- add(b, scid, _('added'))
+ add(b, hex(scid), _('added'))
for b, scid, dcid in adddst:
# i18n: "deleted" refers to a bookmark
add(b, ' ' * 40, _('deleted'))
for b, scid, dcid in advsrc:
# i18n: "advanced" refers to a bookmark
- add(b, scid, _('advanced'))
+ add(b, hex(scid), _('advanced'))
for b, scid, dcid in diverge:
# i18n: "diverged" refers to a bookmark
- add(b, scid, _('diverged'))
+ add(b, hex(scid), _('diverged'))
for b, scid, dcid in differ:
# i18n: "changed" refers to a bookmark
- add(b, scid, _('changed'))
+ add(b, hex(scid), _('changed'))
if not outgoings:
ui.status(_("no changed bookmarks found\n"))
@@ -592,8 +586,8 @@
This returns "(# of incoming, # of outgoing)" tuple.
'''
- r = comparebookmarks(repo, other.listkeys('bookmarks'), repo._bookmarks,
- dsthex=hex)
+ remotemarks = unhexlifybookmarks(other.listkeys('bookmarks'))
+ r = comparebookmarks(repo, remotemarks, repo._bookmarks)
addsrc, adddst, advsrc, advdst, diverge, differ, invalid, same = r
return (len(addsrc), len(adddst))
--- a/mercurial/exchange.py Tue Nov 22 01:33:31 2016 -0800
+++ b/mercurial/exchange.py Fri Dec 09 03:22:26 2016 -0800
@@ -603,9 +603,21 @@
explicit = set([repo._bookmarks.expandname(bookmark)
for bookmark in pushop.bookmarks])
- comp = bookmod.comparebookmarks(repo, repo._bookmarks,
- remotebookmark, srchex=hex)
+ remotebookmark = bookmod.unhexlifybookmarks(remotebookmark)
+ comp = bookmod.comparebookmarks(repo, repo._bookmarks, remotebookmark)
+
+ def safehex(x):
+ if x is None:
+ return x
+ return hex(x)
+
+ def hexifycompbookmarks(bookmarks):
+ for b, scid, dcid in bookmarks:
+ yield b, safehex(scid), safehex(dcid)
+
+ comp = [hexifycompbookmarks(marks) for marks in comp]
addsrc, adddst, advsrc, advdst, diverge, differ, invalid, same = comp
+
for b, scid, dcid in advsrc:
if b in explicit:
explicit.remove(b)
@@ -617,7 +629,7 @@
explicit.remove(b)
pushop.outbookmarks.append((b, '', scid))
# search for overwritten bookmark
- for b, scid, dcid in advdst + diverge + differ:
+ for b, scid, dcid in list(advdst) + list(diverge) + list(differ):
if b in explicit:
explicit.remove(b)
pushop.outbookmarks.append((b, dcid, scid))
@@ -1456,6 +1468,7 @@
pullop.stepsdone.add('bookmarks')
repo = pullop.repo
remotebookmarks = pullop.remotebookmarks
+ remotebookmarks = bookmod.unhexlifybookmarks(remotebookmarks)
bookmod.updatefromremote(repo.ui, repo, remotebookmarks,
pullop.remote.url(),
pullop.gettransaction,