hgext3rd/evolve/__init__.py
changeset 2350 ea816b5c1cf6
parent 2349 521a18a10a06
child 2396 c1485ebdd6b9
--- a/hgext3rd/evolve/__init__.py	Fri May 12 11:39:41 2017 +0200
+++ b/hgext3rd/evolve/__init__.py	Fri May 12 18:34:37 2017 +0200
@@ -3267,22 +3267,25 @@
     revs = scmutil.revrange(repo, revs)
     fm = ui.formatter('debugobshistory', opts)
 
-    for rev in revs:
-        _debugobshistorysingle(ui, fm, repo, rev)
+    revs.reverse()
+    _debugobshistorysingle(fm, repo, revs)
 
     fm.end()
 
-def _debugobshistorysingle(ui, fm, repo, rev):
+def _debugobshistorysingle(fm, repo, revs):
     """ Display the obsolescence history for a single revision
     """
     precursors = repo.obsstore.precursors
     successors = repo.obsstore.successors
     nodec = repo.changelog.node
-    nodes = [nodec(rev)]
+    nodes = [nodec(r) for r in revs]
+
+    seen = set(nodes)
 
     while nodes:
         ctxnode = nodes.pop()
-        _debugobshistorydisplaynode(ui, fm, repo, ctxnode)
+
+        _debugobshistorydisplaynode(fm, repo, ctxnode)
 
         succs = successors.get(ctxnode, ())
 
@@ -3292,9 +3295,13 @@
         markerfm.end()
 
         precs = precursors.get(ctxnode, ())
-        nodes.extend(precursor[0] for precursor in sorted(precs))
-
-def _debugobshistorydisplaynode(ui, fm, repo, node):
+        for p in sorted(precs):
+            # Only show nodes once
+            if p[0] not in seen:
+                seen.add(p[0])
+                nodes.append(p[0])
+
+def _debugobshistorydisplaynode(fm, repo, node):
     if node in repo.unfiltered():
         _debugobshistorydisplayctx(fm, repo.unfiltered()[node])
     else: