# HG changeset patch # User Gregory Szorc # Date 1414172437 25200 # Node ID e62c330a044fb77c158804b16121af65268ad53d # Parent c586cb50872bb2b863519e1cc2cb7252ab510a54 bookmarks: explicitly track identical bookmarks bookmarks.compare() previously lumped identical bookmarks in the "invalid" bucket. This patch adds a "same" bucket. An 8-tuple for holding this state is pretty gnarly. The return value should probably be converted into a class to increase readability. But that is beyond the scope of a patch intended to be a late arrival to stable. diff -r c586cb50872b -r e62c330a044f mercurial/bookmarks.py --- a/mercurial/bookmarks.py Fri Oct 24 15:52:20 2014 -0500 +++ b/mercurial/bookmarks.py Fri Oct 24 10:40:37 2014 -0700 @@ -271,6 +271,7 @@ :diverge: diverge :differ: changed, but changeset referred on src is unknown on dst :invalid: unknown on both side + :same: same on both side Each elements of lists in result tuple is tuple "(bookmark name, changeset ID on source side, changeset ID on destination @@ -299,12 +300,9 @@ else: srcmarkset = set(srcmarks) dstmarkset = set(dstmarks) - bset = srcmarkset ^ dstmarkset - for b in srcmarkset & dstmarkset: - if srchex(srcmarks[b]) != dsthex(dstmarks[b]): - bset.add(b) + bset = srcmarkset | dstmarkset - results = ([], [], [], [], [], [], []) + results = ([], [], [], [], [], [], [], []) addsrc = results[0].append adddst = results[1].append advsrc = results[2].append @@ -312,6 +310,7 @@ diverge = results[4].append differ = results[5].append invalid = results[6].append + same = results[7].append for b in sorted(bset): if b not in srcmarks: @@ -324,7 +323,9 @@ else: scid = srchex(srcmarks[b]) dcid = dsthex(dstmarks[b]) - if scid in repo and dcid in repo: + if scid == dcid: + same((b, scid, dcid)) + elif scid in repo and dcid in repo: sctx = repo[scid] dctx = repo[dcid] if sctx.rev() < dctx.rev(): @@ -365,7 +366,7 @@ 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 + (addsrc, adddst, advsrc, advdst, diverge, differ, invalid, same ) = compare(repo, remotemarks, localmarks, dsthex=hex) status = ui.status diff -r c586cb50872b -r e62c330a044f mercurial/exchange.py --- a/mercurial/exchange.py Fri Oct 24 15:52:20 2014 -0500 +++ b/mercurial/exchange.py Fri Oct 24 10:40:37 2014 -0700 @@ -333,7 +333,7 @@ explicit = set(pushop.bookmarks) comp = bookmod.compare(repo, repo._bookmarks, remotebookmark, srchex=hex) - addsrc, adddst, advsrc, advdst, diverge, differ, invalid = comp + addsrc, adddst, advsrc, advdst, diverge, differ, invalid, same = comp for b, scid, dcid in advsrc: if b in explicit: explicit.remove(b)