py3: fix sorting of obsolete markers in obsutil (
issue6217)
This is similar to
01e8eefd9434 and others. We move the sortedmarkers()
function from exchange module to obsutil.
--- a/mercurial/exchange.py Wed Nov 06 16:54:34 2019 +0100
+++ b/mercurial/exchange.py Sat Nov 09 10:31:58 2019 +0100
@@ -28,6 +28,7 @@
logexchange,
narrowspec,
obsolete,
+ obsutil,
phases,
pushkey,
pycompat,
@@ -99,11 +100,6 @@
contentopts = attr.ib()
-def _sortedmarkers(markers):
- # last item of marker tuple ('parents') may be None or a tuple
- return sorted(markers, key=lambda m: m[:-1] + (m[-1] or (),))
-
-
def parsebundlespec(repo, spec, strict=True):
"""Parse a bundle string specification into parts.
@@ -1140,7 +1136,7 @@
return
pushop.stepsdone.add(b'obsmarkers')
if pushop.outobsmarkers:
- markers = _sortedmarkers(pushop.outobsmarkers)
+ markers = obsutil.sortedmarkers(pushop.outobsmarkers)
bundle2.buildobsmarkerspart(bundler, markers)
@@ -1475,7 +1471,7 @@
if pushop.outobsmarkers:
pushop.ui.debug(b'try to push obsolete markers to remote\n')
rslts = []
- markers = _sortedmarkers(pushop.outobsmarkers)
+ markers = obsutil.sortedmarkers(pushop.outobsmarkers)
remotedata = obsolete._pushkeyescape(markers)
for key in sorted(remotedata, reverse=True):
# reverse sort to ensure we end with dump0
@@ -2573,7 +2569,7 @@
heads = repo.heads()
subset = [c.node() for c in repo.set(b'::%ln', heads)]
markers = repo.obsstore.relevantmarkers(subset)
- markers = _sortedmarkers(markers)
+ markers = obsutil.sortedmarkers(markers)
bundle2.buildobsmarkerspart(bundler, markers)
--- a/mercurial/obsutil.py Wed Nov 06 16:54:34 2019 +0100
+++ b/mercurial/obsutil.py Sat Nov 09 10:31:58 2019 +0100
@@ -112,6 +112,11 @@
yield marker(repo, markerdata)
+def sortedmarkers(markers):
+ # last item of marker tuple ('parents') may be None or a tuple
+ return sorted(markers, key=lambda m: m[:-1] + (m[-1] or (),))
+
+
def closestpredecessors(repo, nodeid):
"""yield the list of next predecessors pointing on visible changectx nodes
@@ -675,7 +680,7 @@
# Having none means pruned node, multiple successors means split,
# single successors are standard replacement.
#
- for mark in sorted(succmarkers[current]):
+ for mark in sortedmarkers(succmarkers[current]):
for suc in mark[1]:
if suc not in cache:
if suc in stackedset:
@@ -712,7 +717,7 @@
# duplicated entry and successors set that are strict subset of
# another one.
succssets = []
- for mark in sorted(succmarkers[current]):
+ for mark in sortedmarkers(succmarkers[current]):
# successors sets contributed by this marker
base = _succs()
base.markers.add(mark)