--- a/hgext3rd/evolve/obshistory.py Wed Mar 18 19:20:17 2020 +0700
+++ b/hgext3rd/evolve/obshistory.py Sun Mar 29 17:21:56 2020 +0700
@@ -446,27 +446,23 @@
"""
fm = ui.formatter(b'debugobshistory', pycompat.byteskwargs(opts))
predecessors = repo.obsstore.predecessors
- successors = repo.obsstore.successors
nodec = repo.changelog.node
unfi = repo.unfiltered()
nodes = [nodec(r) for r in revs]
+ seen = set(nodes)
+ toshow = []
- seen = set(nodes)
+ filternonlocal = opts and opts.get('filternonlocal')
+ includediff = opts and opts.get('patch')
while nodes:
ctxnode = nodes.pop()
- displaynode(fm, unfi, ctxnode)
-
- succs = successors.get(ctxnode, ())
-
- markerfm = fm.nested(b"markers")
- for successor in sorted(succs):
- includediff = opts and opts.get("patch")
- displaymarkers(ui, markerfm, successor[1], [successor], ctxnode,
- unfi, includediff)
- markerfm.end()
- fm.plain(b'\n')
+ if ctxnode in unfi:
+ toshow.append(unfi[ctxnode])
+ else:
+ if filternonlocal is False:
+ toshow.append(missingchangectx(unfi, ctxnode))
preds = predecessors.get(ctxnode, ())
for p in sorted(preds):
@@ -474,6 +470,21 @@
if p[0] not in seen:
seen.add(p[0])
nodes.append(p[0])
+
+ for ctx in toshow:
+ displaynode(fm, unfi, ctx.node())
+
+ markerfm = fm.nested(b"markers")
+
+ data = _nodesandmarkers(repo, ctx, filternonlocal)
+ for nodes_, markers in data:
+ displaymarkers(ui, markerfm, nodes_, markers, ctx.node(), unfi,
+ includediff)
+
+ markerfm.end()
+
+ fm.plain(b'\n')
+
fm.end()
def displaynode(fm, repo, node):