--- a/hgext3rd/evolve/stablerange.py Sat Dec 09 22:49:07 2017 +0100
+++ b/hgext3rd/evolve/stablerange.py Sun Dec 10 00:20:06 2017 +0100
@@ -570,7 +570,6 @@
def _slicesrangeatmerge(self, repo, rangeid, globalindex):
localindex = globalindex - rangeid[1]
- cl = repo.changelog
result = []
allrevs = self.revsfromrange(repo, rangeid)
@@ -581,19 +580,24 @@
# revision we needs
result.append((bottomrevs[-1], rangeid[1]))
else:
- parentrevs = cl.parentrevs
- parents = self._parents
- bheads = set(bottomrevs)
- du = bheads.difference_update
- for r in bottomrevs:
- du(parents(r, parentrevs))
- seen = 0
- for r in bottomrevs:
- seen += 1
- # XXX bheads might not be a good enough criteria
- if r in bheads:
- result.append((r, self.depthrev(repo, r) - seen))
- seen = 0
+ head = None
+ headrange = None
+ skip = None
+ for rev in bottomrevs[::-1]:
+ if head is None:
+ head = rev
+ headrange = self.revsfromrange(repo, (head, 0))
+ skip = self.depthrev(repo, rev) - 1
+ elif rev != headrange[skip - 1]:
+ result.append((head, skip))
+ head = rev
+ headrange = self.revsfromrange(repo, (head, 0))
+ skip = self.depthrev(repo, rev) - 1
+ else:
+ skip -= 1
+ result.append((head, skip))
+
+ result.reverse()
# top part is trivial
top = (rangeid[0], globalindex)