graphlog: add a way to test the 'groupbranchiter' function
We add an experimental config option to use the topological sorting. I first
tried to hook the 'groupbranchiter' function in the 'sort' revset but this was useless
because graphlog enforces 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.
--- a/mercurial/graphmod.py Thu Sep 04 18:19:32 2014 +0200
+++ b/mercurial/graphmod.py Fri Nov 14 17:37:59 2014 +0000
@@ -199,6 +199,9 @@
lowestrev = revs.min()
gpcache = {}
+ if repo.ui.configbool('experimental', 'graph-topological', False):
+ revs = list(groupbranchiter(revs, repo.changelog.parentrevs))
+
for rev in revs:
ctx = repo[rev]
parents = sorted(set([p.rev() for p in ctx.parents()
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/tests/test-glog-topological.t Fri Nov 14 17:37:59 2014 +0000
@@ -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
+ adding changesets
+ adding manifests
+ adding file changes
+ added 9 changesets with 7 changes to 4 files (+1 heads)
+ (run 'hg heads' to see heads, 'hg merge' to merge)
+
+ $ 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
+