# Patchwork [2,of,5] graphlog: add a way to test the 'topotier' function

Submitter Pierre-Yves David Nov. 18, 2014, 11:56 p.m. <7dd889a1feade2740949.1416354968@marginatus.alto.octopoid.net> mbox | patch /patch/6780/ Superseded show

Pierre-Yves David - Nov. 18, 2014, 11:56 p.m.
```# HG changeset patch
# User Pierre-Yves David <pierre-yves.david@fb.com>
# Date 1415986679 0
#      Fri Nov 14 17:37:59 2014 +0000
# Parent  06767ea27aca31cd1e65ccd32c22c45c1ebab83d
graphlog: add a way to test the 'topotier' function

We add an experimental config option to use the topological sorting. I first
tried to hook the 'topoiter' function in the 'sort' revset but this was useless
because graphlog enforce revision number sorting :(

As the goal is to advance on the topological iteration logic, I see this
experimental option as a good way to move forward.

We have to use turn the iterator into a list because the graphlog is apparently
not ready for pure iterator input yet.
```

## Patch

```diff --git a/mercurial/graphmod.py b/mercurial/graphmod.py
--- a/mercurial/graphmod.py
+++ b/mercurial/graphmod.py
@@ -185,10 +185,13 @@  def dagwalker(repo, revs):

cl = repo.changelog
lowestrev = revs.min()
gpcache = {}

+    if repo.ui.configbool('experimental', 'graph-topological', False):
+        revs = list(topoiter(revs, repo.changelog.parentrevs))
+
for rev in revs:
ctx = repo[rev]
parents = sorted(set([p.rev() for p in ctx.parents()
if p.rev() in revs]))
mpars = [p.rev() for p in ctx.parents() if
diff --git a/tests/test-glog-topological.t b/tests/test-glog-topological.t
new file mode 100644
--- /dev/null
+++ b/tests/test-glog-topological.t
@@ -0,0 +1,58 @@
+This test file aims at test topological iteration and the various configuration it can has.
+
+  \$ cat >> \$HGRCPATH << EOF
+  > [ui]
+  > logtemplate={rev}\n
+  > EOF
+
+On this simple example, all topological branch are displayed in turn until we
+can finally display 0. this implies skipping from 8 to 3 and coming back to 7
+later.
+
+  \$ hg init test01
+  \$ cd test01
+  \$ hg unbundle \$TESTDIR/bundles/remote.hg
+  added 9 changesets with 7 changes to 4 files (+1 heads)
+
+  \$ hg log -G
+  o  8
+  |
+  | o  7
+  | |
+  | o  6
+  | |
+  | o  5
+  | |
+  | o  4
+  | |
+  o |  3
+  | |
+  o |  2
+  | |
+  o |  1
+  |/
+  o  0
+
+  \$ hg --config experimental.graph-topological=1 log -G
+  o  8
+  |
+  o  3
+  |
+  o  2
+  |
+  o  1
+  |
+  | o  7
+  | |
+  | o  6
+  | |
+  | o  5
+  | |
+  | o  4
+  |/
+  o  0
+

```