diff -r 66a913cc53af -r 0329246c70f3 hgext3rd/evolve/obshistory.py --- 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):