# HG changeset patch # User Boris Feld # Date 1504017760 -7200 # Node ID 1b4c92621e23b5f8f0fd2ba8a9e34b965f6093c9 # Parent 9345b2eeeef3f1601be051141aedc08f964afeba doc: integrate graphviz graphs in tutorials Use the mercurial-graphviz extension (https://bitbucket.org/octobus/mercurial_graphviz) in tutorials in order to have some dot graphs in the tutorials .t files. In order to run the tests, export the GRAPHVIZ_EXTENSION variable which points to your copy of the extension. Please be aware that pygraphviz should be installed in your environment. That should be sufficient for generating dot graphs in text format. Then generate the doc as usual, the sphinx-graphviz extension (http://www .sphinx-doc.org/en/stable/ext/graphviz.html) has been added and it should handle the generation of the graphs. Please be aware that you need the dot binary installed in your system. Please refer to the extension documentation for more configuration. diff -r 9345b2eeeef3 -r 1b4c92621e23 docs/conf.py --- a/docs/conf.py Tue Sep 19 12:52:22 2017 +0200 +++ b/docs/conf.py Tue Aug 29 16:42:40 2017 +0200 @@ -1,6 +1,6 @@ # Add any Sphinx extension module names here, as strings. They can be extensions # coming with Sphinx (named 'sphinx.ext.*') or your custom ones. -extensions = [] +extensions = ["sphinx.ext.graphviz"] # autoclass_content = 'both' # Add any paths that contain templates here, relative to this directory. # templates_path = [] @@ -122,3 +122,6 @@ # Output file base name for HTML help builder. # htmlhelp_basename = '' + + +graphviz_output_format = "svg" diff -r 9345b2eeeef3 -r 1b4c92621e23 docs/test2rst.py --- a/docs/test2rst.py Tue Sep 19 12:52:22 2017 +0200 +++ b/docs/test2rst.py Tue Aug 29 16:42:40 2017 +0200 @@ -17,22 +17,38 @@ newlines = [] code_block_mode = False + sphinx_directive_mode = False for line in orig.splitlines(): # Emtpy lines doesn't change output if not line: newlines.append(line) + code_block_mode = False + sphinx_directive_mode = False + continue + + # Ignore line + if line.endswith('#ignore'): continue + # Sphinx directives mode + if line.startswith(' .. '): + + # Insert a empty line to makes sphinx happy + newlines.append("") + + # And unindent the directive + line = line[2:] + sphinx_directive_mode = True + + # Code mode codeline = line.startswith(' ') - if codeline: + if codeline and not sphinx_directive_mode: if code_block_mode is False: newlines.extend(['::', '']) code_block_mode = True - else: - code_block_mode = False newlines.append(line) diff -r 9345b2eeeef3 -r 1b4c92621e23 tests/test-topic-tutorial.t --- a/tests/test-topic-tutorial.t Tue Sep 19 12:52:22 2017 +0200 +++ b/tests/test-topic-tutorial.t Tue Aug 29 16:42:40 2017 +0200 @@ -45,6 +45,7 @@ > [ui] > user= Tutorial User > EOF + $ . "$TESTDIR/testlib/graphviz_setup.sh" #ignore Topic branches are lightweight branches which disappear when changes are finalized (moved to the public phase). They can help users to organize and share @@ -62,6 +63,25 @@ date: Thu Jan 01 00:00:00 1970 +0000 summary: Shopping list + $ hg graphviz -r "all()" --sphinx-directive --rankdir LR #ignore + .. graphviz:: + + strict digraph { + graph [rankdir=LR, + splines=polyline + ]; + node [label="\N"]; + 0 [fillcolor="#7F7FFF", + fixedsize=true, + group=default, + height=2, + label="0: 38da43f0a2ea", + pin=true, + pos="1,0!", + shape=circle, + style=filled, + width=2]; + } We are about to make some additions to this list and would like to do them within a topic. Creating a new topic is done using the ``topic`` command: @@ -90,6 +110,26 @@ summary: Shopping list + $ hg graphviz -r "all()" --sphinx-directive --rankdir LR #ignore + .. graphviz:: + + strict digraph { + graph [rankdir=LR, + splines=polyline + ]; + node [label="\N"]; + 0 [fillcolor="#7F7FFF", + fixedsize=true, + group=default, + height=2, + label="0: 38da43f0a2ea", + pin=true, + pos="1,0!", + shape=circle, + style=filled, + width=2]; + } + Our next commit will be part of the active topic: $ cat >> shopping << EOF @@ -110,6 +150,26 @@ summary: adding condiments + $ hg graphviz -r "topic("food")" --sphinx-directive --rankdir LR #ignore + .. graphviz:: + + strict digraph { + graph [rankdir=LR, + splines=polyline + ]; + node [label="\N"]; + 1 [fillcolor="#7F7FFF", + fixedsize=true, + group=default, + height=2, + label="1: 13900241408b", + pin=true, + pos="1,1!", + shape=pentagon, + style=filled, + width=2]; + } + And future commits will be part of that topic too: $ cat >> shopping << EOF @@ -135,6 +195,37 @@ summary: adding condiments + $ hg graphviz -r "topic("food")" --sphinx-directive --rankdir LR #ignore + .. graphviz:: + + strict digraph { + graph [rankdir=LR, + splines=polyline + ]; + node [label="\N"]; + 1 [fillcolor="#7F7FFF", + fixedsize=true, + group=default, + height=2, + label="1: 13900241408b", + pin=true, + pos="1,1!", + shape=pentagon, + style=filled, + width=2]; + 2 [fillcolor="#7F7FFF", + fixedsize=true, + group=default, + height=2, + label="2: 287de11b401f", + pin=true, + pos="1,2!", + shape=pentagon, + style=filled, + width=2]; + 1 -> 2; + } + We can get a compact view of the content of our topic using the ``stack`` command: @@ -175,6 +266,48 @@ date: Thu Jan 01 00:00:00 1970 +0000 summary: Shopping list + + $ hg graphviz -r "all()" --sphinx-directive --rankdir LR #ignore + .. graphviz:: + + strict digraph { + graph [rankdir=LR, + splines=polyline + ]; + node [label="\N"]; + 0 [fillcolor="#7F7FFF", + fixedsize=true, + group=default, + height=2, + label="0: 38da43f0a2ea", + pin=true, + pos="1,0!", + shape=circle, + style=filled, + width=2]; + 1 [fillcolor="#7F7FFF", + fixedsize=true, + group=default, + height=2, + label="1: 13900241408b", + pin=true, + pos="1,1!", + shape=pentagon, + style=filled, + width=2]; + 0 -> 1; + 2 [fillcolor="#7F7FFF", + fixedsize=true, + group=default, + height=2, + label="2: 287de11b401f", + pin=true, + pos="1,2!", + shape=pentagon, + style=filled, + width=2]; + 1 -> 2; + } And updating back to the topic reactivates it: $ hg update food @@ -253,6 +386,58 @@ date: Thu Jan 01 00:00:00 1970 +0000 summary: Shopping list + $ hg graphviz -r "all()" --sphinx-directive --rankdir LR #ignore + .. graphviz:: + + strict digraph { + graph [rankdir=LR, + splines=polyline + ]; + node [label="\N"]; + 0 [fillcolor="#7F7FFF", + fixedsize=true, + group=default, + height=2, + label="0: 38da43f0a2ea", + pin=true, + pos="1,0!", + shape=circle, + style=filled, + width=2]; + 1 [fillcolor="#7F7FFF", + fixedsize=true, + group=default, + height=2, + label="1: 13900241408b", + pin=true, + pos="1,1!", + shape=pentagon, + style=filled, + width=2]; + 0 -> 1; + 3 [fillcolor="#7F7FFF", + fixedsize=true, + group=default, + height=2, + label="3: 6104862e8b84", + pin=true, + pos="1,3!", + shape=circle, + style=filled, + width=2]; + 0 -> 3; + 2 [fillcolor="#7F7FFF", + fixedsize=true, + group=default, + height=2, + label="2: 287de11b401f", + pin=true, + pos="1,2!", + shape=pentagon, + style=filled, + width=2]; + 1 -> 2; + } The topic head will not be considered when merging from the new head of the branch: @@ -303,6 +488,58 @@ date: Thu Jan 01 00:00:00 1970 +0000 summary: Shopping list + $ hg graphviz -r "all()" --sphinx-directive --rankdir LR #ignore + .. graphviz:: + + strict digraph { + graph [rankdir=LR, + splines=polyline + ]; + node [label="\N"]; + 0 [fillcolor="#7F7FFF", + fixedsize=true, + group=default, + height=2, + label="0: 38da43f0a2ea", + pin=true, + pos="1,0!", + shape=circle, + style=filled, + width=2]; + 3 [fillcolor="#7F7FFF", + fixedsize=true, + group=default, + height=2, + label="3: 6104862e8b84", + pin=true, + pos="1,3!", + shape=circle, + style=filled, + width=2]; + 0 -> 3; + 4 [fillcolor="#7F7FFF", + fixedsize=true, + group=default, + height=2, + label="4: 4011b46eeb33", + pin=true, + pos="1,4!", + shape=pentagon, + style=filled, + width=2]; + 3 -> 4; + 5 [fillcolor="#7F7FFF", + fixedsize=true, + group=default, + height=2, + label="5: 2d50db8b5b4c", + pin=true, + pos="1,5!", + shape=pentagon, + style=filled, + width=2]; + 4 -> 5; + } The topic information will disappear when we publish the changesets: @@ -344,6 +581,59 @@ date: Thu Jan 01 00:00:00 1970 +0000 summary: Shopping list + $ hg graphviz -r "all()" --sphinx-directive --rankdir LR #ignore + .. graphviz:: + + strict digraph { + graph [rankdir=LR, + splines=polyline + ]; + node [label="\N"]; + 0 [fillcolor="#7F7FFF", + fixedsize=true, + group=default, + height=2, + label="0: 38da43f0a2ea", + pin=true, + pos="1,0!", + shape=circle, + style=filled, + width=2]; + 3 [fillcolor="#7F7FFF", + fixedsize=true, + group=default, + height=2, + label="3: 6104862e8b84", + pin=true, + pos="1,3!", + shape=circle, + style=filled, + width=2]; + 0 -> 3; + 4 [fillcolor="#7F7FFF", + fixedsize=true, + group=default, + height=2, + label="4: 4011b46eeb33", + pin=true, + pos="1,4!", + shape=circle, + style=filled, + width=2]; + 3 -> 4; + 5 [fillcolor="#7F7FFF", + fixedsize=true, + group=default, + height=2, + label="5: 2d50db8b5b4c", + pin=true, + pos="1,5!", + shape=circle, + style=filled, + width=2]; + 4 -> 5; + } + $ hg update default 0 files updated, 0 files merged, 0 files removed, 0 files unresolved @@ -510,6 +800,136 @@ date: Thu Jan 01 00:00:00 1970 +0000 summary: Shopping list + $ hg graphviz -r "all()" --sphinx-directive --rankdir LR #ignore + .. graphviz:: + + strict digraph { + graph [rankdir=LR, + splines=polyline + ]; + node [label="\N"]; + 0 [fillcolor="#7F7FFF", + fixedsize=true, + group=default, + height=2, + label="0: 38da43f0a2ea", + pin=true, + pos="1,0!", + shape=circle, + style=filled, + width=2]; + 3 [fillcolor="#7F7FFF", + fixedsize=true, + group=default, + height=2, + label="3: 6104862e8b84", + pin=true, + pos="1,3!", + shape=circle, + style=filled, + width=2]; + 0 -> 3; + 4 [fillcolor="#7F7FFF", + fixedsize=true, + group=default, + height=2, + label="4: 4011b46eeb33", + pin=true, + pos="1,4!", + shape=circle, + style=filled, + width=2]; + 3 -> 4; + 5 [fillcolor="#7F7FFF", + fixedsize=true, + group=default, + height=2, + label="5: 2d50db8b5b4c", + pin=true, + pos="1,5!", + shape=circle, + style=filled, + width=2]; + 4 -> 5; + 6 [fillcolor="#7F7FFF", + fixedsize=true, + group=default, + height=2, + label="6: 183984ef46d1", + pin=true, + pos="1,6!", + shape=pentagon, + style=filled, + width=2]; + 5 -> 6; + 9 [fillcolor="#7F7FFF", + fixedsize=true, + group=default, + height=2, + label="9: 8dfa45bd5e0c", + pin=true, + pos="1,9!", + shape=pentagon, + style=filled, + width=2]; + 5 -> 9; + 11 [fillcolor="#7F7FFF", + fixedsize=true, + group=default, + height=2, + label="11: f2d6cacc6115", + pin=true, + pos="1,11!", + shape=circle, + style=filled, + width=2]; + 5 -> 11; + 7 [fillcolor="#7F7FFF", + fixedsize=true, + group=default, + height=2, + label="7: cffff85af537", + pin=true, + pos="1,7!", + shape=pentagon, + style=filled, + width=2]; + 6 -> 7; + 8 [fillcolor="#7F7FFF", + fixedsize=true, + group=default, + height=2, + label="8: 34255b455dac", + pin=true, + pos="1,8!", + shape=pentagon, + style=filled, + width=2]; + 7 -> 8; + 10 [fillcolor="#7F7FFF", + fixedsize=true, + group=default, + height=2, + label="10: 70dfa201ed73", + pin=true, + pos="1,10!", + shape=pentagon, + style=filled, + width=2]; + 9 -> 10; + 12 [fillcolor="#7F7FFF", + fixedsize=true, + group=default, + height=2, + label="12: fbff9bc37a43", + pin=true, + pos="1,12!", + shape=circle, + style=filled, + width=2]; + 11 -> 12; + } + $ hg rebase rebasing 6:183984ef46d1 "Adding hammer" merging shopping @@ -708,6 +1128,97 @@ ~ date: Thu Jan 01 00:00:00 1970 +0000 summary: add a pair of shoes + + $ hg graphviz -r "t0::" --sphinx-directive --rankdir LR #ignore + .. graphviz:: + + strict digraph { + graph [rankdir=LR, + splines=polyline + ]; + node [label="\N"]; + 12 [fillcolor="#7F7FFF", + fixedsize=true, + group=default, + height=2, + label="12: fbff9bc37a43", + pin=true, + pos="1,12!", + shape=circle, + style=filled, + width=2]; + 13 [fillcolor="#DFDFFF", + fixedsize=true, + group=default_alt, + height=2, + label="13: a8ab3599d53d", + pin=true, + pos="2,13!", + shape=pentagon, + style="dotted, filled", + width=2]; + 12 -> 13; + 18 [fillcolor="#7F7FFF", + fixedsize=true, + group=default, + height=2, + label="18: b7509bd417f8", + pin=true, + pos="1,18!", + shape=pentagon, + style=filled, + width=2]; + 12 -> 18; + 16 [fillcolor="#7F7FFF", + fixedsize=true, + group=default, + height=2, + label="16: 20759cb47ff8", + pin=true, + pos="1,16!", + shape=circle, + style=filled, + width=2]; + 12 -> 16; + 13 -> 18 [arrowtail=dot, + dir=back, + minlen=0, + style=dotted]; + 14 [fillcolor="#FF3535", + fixedsize=true, + group=default_alt, + height=2, + label="14: d4f97f32f8a1", + pin=true, + pos="2,14!", + shape=pentagon, + style=filled, + width=2]; + 13 -> 14; + 15 [fillcolor="#FF3535", + fixedsize=true, + group=default_alt, + height=2, + label="15: bb1e6254f532", + pin=true, + pos="2,15!", + shape=pentagon, + style=filled, + width=2]; + 14 -> 15; + 17 [fillcolor="#7F7FFF", + fixedsize=true, + group=default, + height=2, + label="17: 4cd7c1591a67", + pin=true, + pos="1,17!", + shape=circle, + style=filled, + width=2]; + 16 -> 17; + } + Fortunately stack shows you a better visualization: $ hg stack @@ -787,6 +1298,81 @@ ~ date: Thu Jan 01 00:00:00 1970 +0000 summary: add a pair of shoes + + $ hg graphviz -r "t0::" --sphinx-directive --rankdir LR #ignore + .. graphviz:: + + strict digraph { + graph [rankdir=LR, + splines=polyline + ]; + node [label="\N"]; + 12 [fillcolor="#7F7FFF", + fixedsize=true, + group=default, + height=2, + label="12: fbff9bc37a43", + pin=true, + pos="1,12!", + shape=circle, + style=filled, + width=2]; + 16 [fillcolor="#7F7FFF", + fixedsize=true, + group=default, + height=2, + label="16: 20759cb47ff8", + pin=true, + pos="1,16!", + shape=circle, + style=filled, + width=2]; + 12 -> 16; + 18 [fillcolor="#7F7FFF", + fixedsize=true, + group=default, + height=2, + label="18: b7509bd417f8", + pin=true, + pos="1,18!", + shape=pentagon, + style=filled, + width=2]; + 12 -> 18; + 17 [fillcolor="#7F7FFF", + fixedsize=true, + group=default, + height=2, + label="17: 4cd7c1591a67", + pin=true, + pos="1,17!", + shape=circle, + style=filled, + width=2]; + 16 -> 17; + 19 [fillcolor="#7F7FFF", + fixedsize=true, + group=default, + height=2, + label="19: d5c51ee5762a", + pin=true, + pos="1,19!", + shape=pentagon, + style=filled, + width=2]; + 18 -> 19; + 20 [fillcolor="#7F7FFF", + fixedsize=true, + group=default, + height=2, + label="20: bae3758e46bf", + pin=true, + pos="1,20!", + shape=pentagon, + style=filled, + width=2]; + 19 -> 20; + } Multi-headed stack ------------------ @@ -887,6 +1473,147 @@ summary: Shopping list + $ hg graphviz -r "all()" --sphinx-directive --rankdir LR #ignore + .. graphviz:: + + strict digraph { + graph [rankdir=LR, + splines=polyline + ]; + node [label="\N"]; + 0 [fillcolor="#7F7FFF", + fixedsize=true, + group=default, + height=2, + label="0: 38da43f0a2ea", + pin=true, + pos="1,0!", + shape=circle, + style=filled, + width=2]; + 3 [fillcolor="#7F7FFF", + fixedsize=true, + group=default, + height=2, + label="3: 6104862e8b84", + pin=true, + pos="1,3!", + shape=circle, + style=filled, + width=2]; + 0 -> 3; + 4 [fillcolor="#7F7FFF", + fixedsize=true, + group=default, + height=2, + label="4: 4011b46eeb33", + pin=true, + pos="1,4!", + shape=circle, + style=filled, + width=2]; + 3 -> 4; + 5 [fillcolor="#7F7FFF", + fixedsize=true, + group=default, + height=2, + label="5: 2d50db8b5b4c", + pin=true, + pos="1,5!", + shape=circle, + style=filled, + width=2]; + 4 -> 5; + 11 [fillcolor="#7F7FFF", + fixedsize=true, + group=default, + height=2, + label="11: f2d6cacc6115", + pin=true, + pos="1,11!", + shape=circle, + style=filled, + width=2]; + 5 -> 11; + 12 [fillcolor="#7F7FFF", + fixedsize=true, + group=default, + height=2, + label="12: fbff9bc37a43", + pin=true, + pos="1,12!", + shape=circle, + style=filled, + width=2]; + 11 -> 12; + 16 [fillcolor="#7F7FFF", + fixedsize=true, + group=default, + height=2, + label="16: 20759cb47ff8", + pin=true, + pos="1,16!", + shape=circle, + style=filled, + width=2]; + 12 -> 16; + 18 [fillcolor="#7F7FFF", + fixedsize=true, + group=default, + height=2, + label="18: b7509bd417f8", + pin=true, + pos="1,18!", + shape=pentagon, + style=filled, + width=2]; + 12 -> 18; + 17 [fillcolor="#7F7FFF", + fixedsize=true, + group=default, + height=2, + label="17: 4cd7c1591a67", + pin=true, + pos="1,17!", + shape=circle, + style=filled, + width=2]; + 16 -> 17; + 19 [fillcolor="#7F7FFF", + fixedsize=true, + group=default, + height=2, + label="19: d5c51ee5762a", + pin=true, + pos="1,19!", + shape=pentagon, + style=filled, + width=2]; + 18 -> 19; + 21 [fillcolor="#7F7FFF", + fixedsize=true, + group=default, + height=2, + label="21: f936c6da9d61", + pin=true, + pos="1,21!", + shape=pentagon, + style=filled, + width=2]; + 18 -> 21; + 20 [fillcolor="#7F7FFF", + fixedsize=true, + group=default, + height=2, + label="20: bae3758e46bf", + pin=true, + pos="1,20!", + shape=pentagon, + style=filled, + width=2]; + 19 -> 20; + } + $ hg up t4 1 files updated, 0 files merged, 0 files removed, 0 files unresolved diff -r 9345b2eeeef3 -r 1b4c92621e23 tests/test-tutorial.t --- a/tests/test-tutorial.t Tue Sep 19 12:52:22 2017 +0200 +++ b/tests/test-tutorial.t Tue Aug 29 16:42:40 2017 +0200 @@ -65,6 +65,8 @@ > rebase = > EOF + $ . "$TESTDIR/testlib/graphviz_setup.sh" #ignore + ----------------------- Single Developer Usage ----------------------- @@ -125,6 +127,47 @@ | o 7e82d3f3c2cb (public): Monthy Python Shopping list + $ hg graphviz -r "all()" --sphinx-directive --rankdir LR #ignore + .. graphviz:: + + strict digraph { + graph [rankdir=LR, + splines=polyline + ]; + node [label="\N"]; + 0 [fillcolor="#7F7FFF", + fixedsize=true, + group=default, + height=2, + label="0: 7e82d3f3c2cb", + pin=true, + pos="1,0!", + shape=circle, + style=filled, + width=2]; + 1 [fillcolor="#7F7FFF", + fixedsize=true, + group=default, + height=2, + label="1: 4d5dc8187023", + pin=true, + pos="1,1!", + shape=pentagon, + style=filled, + width=2]; + 0 -> 1; + 2 [fillcolor="#7F7FFF", + fixedsize=true, + group=default, + height=2, + label="2: d85de4546133", + pin=true, + pos="1,2!", + shape=pentagon, + style=filled, + width=2]; + 1 -> 2; + } But a typo was made in Babanas! @@ -159,6 +202,48 @@ o 7e82d3f3c2cb (public): Monthy Python Shopping list + $ hg graphviz -r "all()" --sphinx-directive --rankdir LR #ignore + .. graphviz:: + + strict digraph { + graph [rankdir=LR, + splines=polyline + ]; + node [label="\N"]; + 0 [fillcolor="#7F7FFF", + fixedsize=true, + group=default, + height=2, + label="0: 7e82d3f3c2cb", + pin=true, + pos="1,0!", + shape=circle, + style=filled, + width=2]; + 1 [fillcolor="#7F7FFF", + fixedsize=true, + group=default, + height=2, + label="1: 4d5dc8187023", + pin=true, + pos="1,1!", + shape=pentagon, + style=filled, + width=2]; + 0 -> 1; + 2 [fillcolor="#7F7FFF", + fixedsize=true, + group=default, + height=2, + label="2: d85de4546133", + pin=true, + pos="1,2!", + shape=pentagon, + style=filled, + width=2]; + 1 -> 2; + } + Hopefully. I can use `hg commit --amend` to rewrite my faulty changeset! $ sed -i'' -e s/Bananos/Banana/ shopping @@ -185,6 +270,48 @@ | o 7e82d3f3c2cb (public): Monthy Python Shopping list + $ hg graphviz -r "all()" --sphinx-directive --rankdir LR #ignore + .. graphviz:: + + strict digraph { + graph [rankdir=LR, + splines=polyline + ]; + node [label="\N"]; + 0 [fillcolor="#7F7FFF", + fixedsize=true, + group=default, + height=2, + label="0: 7e82d3f3c2cb", + pin=true, + pos="1,0!", + shape=circle, + style=filled, + width=2]; + 1 [fillcolor="#7F7FFF", + fixedsize=true, + group=default, + height=2, + label="1: 4d5dc8187023", + pin=true, + pos="1,1!", + shape=pentagon, + style=filled, + width=2]; + 0 -> 1; + 4 [fillcolor="#7F7FFF", + fixedsize=true, + group=default, + height=2, + label="4: 9d0363b81950", + pin=true, + pos="1,4!", + shape=pentagon, + style=filled, + width=2]; + 1 -> 4; + } + $ hg export tip # HG changeset patch # User test @@ -239,6 +366,59 @@ o 7e82d3f3c2cb (public): Monthy Python Shopping list + $ hg graphviz -r "all()" --sphinx-directive --rankdir LR #ignore + .. graphviz:: + + strict digraph { + graph [rankdir=LR, + splines=polyline + ]; + node [label="\N"]; + 0 [fillcolor="#7F7FFF", + fixedsize=true, + group=default, + height=2, + label="0: 7e82d3f3c2cb", + pin=true, + pos="1,0!", + shape=circle, + style=filled, + width=2]; + 1 [fillcolor="#7F7FFF", + fixedsize=true, + group=default, + height=2, + label="1: 4d5dc8187023", + pin=true, + pos="1,1!", + shape=pentagon, + style=filled, + width=2]; + 0 -> 1; + 5 [fillcolor="#7F7FFF", + fixedsize=true, + group=default, + height=2, + label="5: 9ca060c80d74", + pin=true, + pos="1,5!", + shape=circle, + style=filled, + width=2]; + 0 -> 5; + 4 [fillcolor="#7F7FFF", + fixedsize=true, + group=default, + height=2, + label="4: 9d0363b81950", + pin=true, + pos="1,4!", + shape=pentagon, + style=filled, + width=2]; + 1 -> 4; + } + Instead of merging my head with the new one. I'm going to rebase my work $ hg diff @@ -260,6 +440,58 @@ | o 7e82d3f3c2cb (public): Monthy Python Shopping list + $ hg graphviz -r "all()" --sphinx-directive --rankdir LR #ignore + .. graphviz:: + + strict digraph { + graph [rankdir=LR, + splines=polyline + ]; + node [label="\N"]; + 0 [fillcolor="#7F7FFF", + fixedsize=true, + group=default, + height=2, + label="0: 7e82d3f3c2cb", + pin=true, + pos="1,0!", + shape=circle, + style=filled, + width=2]; + 5 [fillcolor="#7F7FFF", + fixedsize=true, + group=default, + height=2, + label="5: 9ca060c80d74", + pin=true, + pos="1,5!", + shape=circle, + style=filled, + width=2]; + 0 -> 5; + 6 [fillcolor="#7F7FFF", + fixedsize=true, + group=default, + height=2, + label="6: dfd3a2d7691e", + pin=true, + pos="1,6!", + shape=pentagon, + style=filled, + width=2]; + 5 -> 6; + 7 [fillcolor="#7F7FFF", + fixedsize=true, + group=default, + height=2, + label="7: 41aff6a42b75", + pin=true, + pos="1,7!", + shape=pentagon, + style=filled, + width=2]; + 6 -> 7; + } Removing changesets ------------------------ @@ -305,6 +537,59 @@ o 7e82d3f3c2cb (public): Monthy Python Shopping list + $ hg graphviz -r "all()" --sphinx-directive --rankdir LR #ignore + .. graphviz:: + + strict digraph { + graph [rankdir=LR, + splines=polyline + ]; + node [label="\N"]; + 0 [fillcolor="#7F7FFF", + fixedsize=true, + group=default, + height=2, + label="0: 7e82d3f3c2cb", + pin=true, + pos="1,0!", + shape=circle, + style=filled, + width=2]; + 5 [fillcolor="#7F7FFF", + fixedsize=true, + group=default, + height=2, + label="5: 9ca060c80d74", + pin=true, + pos="1,5!", + shape=circle, + style=filled, + width=2]; + 0 -> 5; + 6 [fillcolor="#7F7FFF", + fixedsize=true, + group=default, + height=2, + label="6: dfd3a2d7691e", + pin=true, + pos="1,6!", + shape=pentagon, + style=filled, + width=2]; + 5 -> 6; + 7 [fillcolor="#7F7FFF", + fixedsize=true, + group=default, + height=2, + label="7: 41aff6a42b75", + pin=true, + pos="1,7!", + shape=pentagon, + style=filled, + width=2]; + 6 -> 7; + } + Reordering changesets ------------------------ @@ -367,6 +652,81 @@ o 7e82d3f3c2cb (public): Monthy Python Shopping list + $ hg graphviz -r "all()" --sphinx-directive --rankdir LR #ignore + .. graphviz:: + + strict digraph { + graph [rankdir=LR, + splines=polyline + ]; + node [label="\N"]; + 0 [fillcolor="#7F7FFF", + fixedsize=true, + group=default, + height=2, + label="0: 7e82d3f3c2cb", + pin=true, + pos="1,0!", + shape=circle, + style=filled, + width=2]; + 5 [fillcolor="#7F7FFF", + fixedsize=true, + group=default, + height=2, + label="5: 9ca060c80d74", + pin=true, + pos="1,5!", + shape=circle, + style=filled, + width=2]; + 0 -> 5; + 6 [fillcolor="#7F7FFF", + fixedsize=true, + group=default, + height=2, + label="6: dfd3a2d7691e", + pin=true, + pos="1,6!", + shape=pentagon, + style=filled, + width=2]; + 5 -> 6; + 7 [fillcolor="#7F7FFF", + fixedsize=true, + group=default, + height=2, + label="7: 41aff6a42b75", + pin=true, + pos="1,7!", + shape=pentagon, + style=filled, + width=2]; + 6 -> 7; + 9 [fillcolor="#7F7FFF", + fixedsize=true, + group=default, + height=2, + label="9: 10b8aeaa8cc8", + pin=true, + pos="1,9!", + shape=pentagon, + style=filled, + width=2]; + 7 -> 9; + 11 [fillcolor="#7F7FFF", + fixedsize=true, + group=default, + height=2, + label="11: a224f2a4fb9f", + pin=true, + pos="1,11!", + shape=pentagon, + style=filled, + width=2]; + 7 -> 11; + } + We have a new SPAM SPAM version without the bathroom stuff $ grep Spam shopping # enough spam @@ -429,7 +789,80 @@ o 7e82d3f3c2cb (public): Monthy Python Shopping list - + $ hg graphviz -r "all()" --sphinx-directive --rankdir LR #ignore + .. graphviz:: + + strict digraph { + graph [rankdir=LR, + splines=polyline + ]; + node [label="\N"]; + 0 [fillcolor="#7F7FFF", + fixedsize=true, + group=default, + height=2, + label="0: 7e82d3f3c2cb", + pin=true, + pos="1,0!", + shape=circle, + style=filled, + width=2]; + 5 [fillcolor="#7F7FFF", + fixedsize=true, + group=default, + height=2, + label="5: 9ca060c80d74", + pin=true, + pos="1,5!", + shape=circle, + style=filled, + width=2]; + 0 -> 5; + 6 [fillcolor="#7F7FFF", + fixedsize=true, + group=default, + height=2, + label="6: dfd3a2d7691e", + pin=true, + pos="1,6!", + shape=circle, + style=filled, + width=2]; + 5 -> 6; + 7 [fillcolor="#7F7FFF", + fixedsize=true, + group=default, + height=2, + label="7: 41aff6a42b75", + pin=true, + pos="1,7!", + shape=circle, + style=filled, + width=2]; + 6 -> 7; + 11 [fillcolor="#7F7FFF", + fixedsize=true, + group=default, + height=2, + label="11: a224f2a4fb9f", + pin=true, + pos="1,11!", + shape=circle, + style=filled, + width=2]; + 7 -> 11; + 12 [fillcolor="#7F7FFF", + fixedsize=true, + group=default, + height=2, + label="12: 75954b8cd933", + pin=true, + pos="1,12!", + shape=pentagon, + style=filled, + width=2]; + 11 -> 12; + } Splitting change ------------------ @@ -640,6 +1073,81 @@ o 7e82d3f3c2cb (public): Monthy Python Shopping list + $ hg graphviz -r "all()" --sphinx-directive --rankdir LR #ignore + .. graphviz:: + + strict digraph { + graph [rankdir=LR, + splines=polyline + ]; + node [label="\N"]; + 0 [fillcolor="#7F7FFF", + fixedsize=true, + group=default, + height=2, + label="0: 7e82d3f3c2cb", + pin=true, + pos="1,0!", + shape=circle, + style=filled, + width=2]; + 5 [fillcolor="#7F7FFF", + fixedsize=true, + group=default, + height=2, + label="5: 9ca060c80d74", + pin=true, + pos="1,5!", + shape=circle, + style=filled, + width=2]; + 0 -> 5; + 6 [fillcolor="#7F7FFF", + fixedsize=true, + group=default, + height=2, + label="6: dfd3a2d7691e", + pin=true, + pos="1,6!", + shape=circle, + style=filled, + width=2]; + 5 -> 6; + 7 [fillcolor="#7F7FFF", + fixedsize=true, + group=default, + height=2, + label="7: 41aff6a42b75", + pin=true, + pos="1,7!", + shape=circle, + style=filled, + width=2]; + 6 -> 7; + 11 [fillcolor="#7F7FFF", + fixedsize=true, + group=default, + height=2, + label="11: a224f2a4fb9f", + pin=true, + pos="1,11!", + shape=circle, + style=filled, + width=2]; + 7 -> 11; + 14 [fillcolor="#7F7FFF", + fixedsize=true, + group=default, + height=2, + label="14: a44c85f957d3", + pin=true, + pos="1,14!", + shape=pentagon, + style=filled, + width=2]; + 11 -> 14; + } + When we pull from remote again we get an unstable state! $ hg pull remote @@ -674,6 +1182,107 @@ o 7e82d3f3c2cb (public): Monthy Python Shopping list + $ hg graphviz -r "all()" --sphinx-directive --rankdir LR #ignore + .. graphviz:: + + strict digraph { + graph [rankdir=LR, + splines=polyline + ]; + node [label="\N"]; + 0 [fillcolor="#7F7FFF", + fixedsize=true, + group=default, + height=2, + label="0: 7e82d3f3c2cb", + pin=true, + pos="1,0!", + shape=circle, + style=filled, + width=2]; + 5 [fillcolor="#7F7FFF", + fixedsize=true, + group=default, + height=2, + label="5: 9ca060c80d74", + pin=true, + pos="1,5!", + shape=circle, + style=filled, + width=2]; + 0 -> 5; + 6 [fillcolor="#7F7FFF", + fixedsize=true, + group=default, + height=2, + label="6: dfd3a2d7691e", + pin=true, + pos="1,6!", + shape=circle, + style=filled, + width=2]; + 5 -> 6; + 7 [fillcolor="#7F7FFF", + fixedsize=true, + group=default, + height=2, + label="7: 41aff6a42b75", + pin=true, + pos="1,7!", + shape=circle, + style=filled, + width=2]; + 6 -> 7; + 11 [fillcolor="#7F7FFF", + fixedsize=true, + group=default, + height=2, + label="11: a224f2a4fb9f", + pin=true, + pos="1,11!", + shape=circle, + style=filled, + width=2]; + 7 -> 11; + 12 [fillcolor="#DFDFFF", + fixedsize=true, + group=default_alt, + height=2, + label="12: 75954b8cd933", + pin=true, + pos="2,12!", + shape=pentagon, + style="dotted, filled", + width=2]; + 11 -> 12; + 14 [fillcolor="#7F7FFF", + fixedsize=true, + group=default, + height=2, + label="14: a44c85f957d3", + pin=true, + pos="1,14!", + shape=pentagon, + style=filled, + width=2]; + 11 -> 14; + 12 -> 14 [arrowtail=dot, + dir=back, + minlen=0, + style=dotted]; + 15 [fillcolor="#FF3535", + fixedsize=true, + group=default_alt, + height=2, + label="15: bf1b0d202029", + pin=true, + pos="2,15!", + shape=pentagon, + style=filled, + width=2]; + 12 -> 15; + } + The older version 75954b8cd933 never ceased to exist in the local repo. It was just hidden and excluded from pull and push. @@ -726,6 +1335,92 @@ o 7e82d3f3c2cb (public): Monthy Python Shopping list + $ hg graphviz -r "all()" --sphinx-directive --rankdir LR #ignore + .. graphviz:: + + strict digraph { + graph [rankdir=LR, + splines=polyline + ]; + node [label="\N"]; + 0 [fillcolor="#7F7FFF", + fixedsize=true, + group=default, + height=2, + label="0: 7e82d3f3c2cb", + pin=true, + pos="1,0!", + shape=circle, + style=filled, + width=2]; + 5 [fillcolor="#7F7FFF", + fixedsize=true, + group=default, + height=2, + label="5: 9ca060c80d74", + pin=true, + pos="1,5!", + shape=circle, + style=filled, + width=2]; + 0 -> 5; + 6 [fillcolor="#7F7FFF", + fixedsize=true, + group=default, + height=2, + label="6: dfd3a2d7691e", + pin=true, + pos="1,6!", + shape=circle, + style=filled, + width=2]; + 5 -> 6; + 7 [fillcolor="#7F7FFF", + fixedsize=true, + group=default, + height=2, + label="7: 41aff6a42b75", + pin=true, + pos="1,7!", + shape=circle, + style=filled, + width=2]; + 6 -> 7; + 11 [fillcolor="#7F7FFF", + fixedsize=true, + group=default, + height=2, + label="11: a224f2a4fb9f", + pin=true, + pos="1,11!", + shape=circle, + style=filled, + width=2]; + 7 -> 11; + 14 [fillcolor="#7F7FFF", + fixedsize=true, + group=default, + height=2, + label="14: a44c85f957d3", + pin=true, + pos="1,14!", + shape=pentagon, + style=filled, + width=2]; + 11 -> 14; + 16 [fillcolor="#7F7FFF", + fixedsize=true, + group=default, + height=2, + label="16: ee942144f952", + pin=true, + pos="1,16!", + shape=pentagon, + style=filled, + width=2]; + 14 -> 16; + } + We can push this evolution to remote. $ hg push remote @@ -797,6 +1492,103 @@ o 7e82d3f3c2cb (public): Monthy Python Shopping list + $ hg graphviz -r "all()" --sphinx-directive --rankdir LR #ignore + .. graphviz:: + + strict digraph { + graph [rankdir=LR, + splines=polyline + ]; + node [label="\N"]; + 0 [fillcolor="#7F7FFF", + fixedsize=true, + group=default, + height=2, + label="0: 7e82d3f3c2cb", + pin=true, + pos="1,0!", + shape=circle, + style=filled, + width=2]; + 5 [fillcolor="#7F7FFF", + fixedsize=true, + group=default, + height=2, + label="5: 9ca060c80d74", + pin=true, + pos="1,5!", + shape=circle, + style=filled, + width=2]; + 0 -> 5; + 6 [fillcolor="#7F7FFF", + fixedsize=true, + group=default, + height=2, + label="6: dfd3a2d7691e", + pin=true, + pos="1,6!", + shape=circle, + style=filled, + width=2]; + 5 -> 6; + 7 [fillcolor="#7F7FFF", + fixedsize=true, + group=default, + height=2, + label="7: 41aff6a42b75", + pin=true, + pos="1,7!", + shape=circle, + style=filled, + width=2]; + 6 -> 7; + 11 [fillcolor="#7F7FFF", + fixedsize=true, + group=default, + height=2, + label="11: a224f2a4fb9f", + pin=true, + pos="1,11!", + shape=circle, + style=filled, + width=2]; + 7 -> 11; + 14 [fillcolor="#7F7FFF", + fixedsize=true, + group=default, + height=2, + label="14: a44c85f957d3", + pin=true, + pos="1,14!", + shape=pentagon, + style=filled, + width=2]; + 11 -> 14; + 16 [fillcolor="#7F7FFF", + fixedsize=true, + group=default, + height=2, + label="16: ee942144f952", + pin=true, + pos="1,16!", + shape=pentagon, + style=filled, + width=2]; + 14 -> 16; + 17 [fillcolor="#7F7FFF", + fixedsize=true, + group=default, + height=2, + label="17: 99f039c5ec9e", + pin=true, + pos="1,17!", + shape=pentagon, + style=filled, + width=2]; + 16 -> 17; + } + In the mean time I noticed you can't buy animals in a super market and I prune the animal changeset: $ hg prune ee942144f952 @@ -826,9 +1618,127 @@ | o 7e82d3f3c2cb (public): Monthy Python Shopping list + + $ hg graphviz -r "all()" --sphinx-directive --rankdir LR #ignore + .. graphviz:: + + strict digraph { + graph [rankdir=LR, + splines=polyline + ]; + node [label="\N"]; + 0 [fillcolor="#7F7FFF", + fixedsize=true, + group=default, + height=2, + label="0: 7e82d3f3c2cb", + pin=true, + pos="1,0!", + shape=circle, + style=filled, + width=2]; + 5 [fillcolor="#7F7FFF", + fixedsize=true, + group=default, + height=2, + label="5: 9ca060c80d74", + pin=true, + pos="1,5!", + shape=circle, + style=filled, + width=2]; + 0 -> 5; + 6 [fillcolor="#7F7FFF", + fixedsize=true, + group=default, + height=2, + label="6: dfd3a2d7691e", + pin=true, + pos="1,6!", + shape=circle, + style=filled, + width=2]; + 5 -> 6; + 7 [fillcolor="#7F7FFF", + fixedsize=true, + group=default, + height=2, + label="7: 41aff6a42b75", + pin=true, + pos="1,7!", + shape=circle, + style=filled, + width=2]; + 6 -> 7; + 11 [fillcolor="#7F7FFF", + fixedsize=true, + group=default, + height=2, + label="11: a224f2a4fb9f", + pin=true, + pos="1,11!", + shape=circle, + style=filled, + width=2]; + 7 -> 11; + 14 [fillcolor="#7F7FFF", + fixedsize=true, + group=default, + height=2, + label="14: a44c85f957d3", + pin=true, + pos="1,14!", + shape=pentagon, + style=filled, + width=2]; + 11 -> 14; + 16 [fillcolor="#DFDFFF", + fixedsize=true, + group=default_alt, + height=2, + label="16: ee942144f952", + pin=true, + pos="2,16!", + shape=pentagon, + style="dotted, filled", + width=2]; + 14 -> 16; + 17 [fillcolor="#FF3535", + fixedsize=true, + group=default_alt, + height=2, + label="17: 99f039c5ec9e", + pin=true, + pos="2,17!", + shape=pentagon, + style=filled, + width=2]; + 16 -> 17; + } + $ hg log -r "orphan()" 99f039c5ec9e (draft): SPAM SPAM SPAM + $ hg graphviz -r "orphan()" --sphinx-directive --rankdir LR #ignore + .. graphviz:: + + strict digraph { + graph [rankdir=LR, + splines=polyline + ]; + node [label="\N"]; + 17 [fillcolor="#FF3535", + fixedsize=true, + group=default_alt, + height=2, + label="17: 99f039c5ec9e", + pin=true, + pos="1,17!", + shape=pentagon, + style=filled, + width=2]; + } + $ hg evolve move:[15] SPAM SPAM SPAM atop:[12] bathroom stuff @@ -850,6 +1760,93 @@ | o 7e82d3f3c2cb (public): Monthy Python Shopping list + + $ hg graphviz -r "all()" --sphinx-directive --rankdir LR #ignore + .. graphviz:: + + strict digraph { + graph [rankdir=LR, + splines=polyline + ]; + node [label="\N"]; + 0 [fillcolor="#7F7FFF", + fixedsize=true, + group=default, + height=2, + label="0: 7e82d3f3c2cb", + pin=true, + pos="1,0!", + shape=circle, + style=filled, + width=2]; + 5 [fillcolor="#7F7FFF", + fixedsize=true, + group=default, + height=2, + label="5: 9ca060c80d74", + pin=true, + pos="1,5!", + shape=circle, + style=filled, + width=2]; + 0 -> 5; + 6 [fillcolor="#7F7FFF", + fixedsize=true, + group=default, + height=2, + label="6: dfd3a2d7691e", + pin=true, + pos="1,6!", + shape=circle, + style=filled, + width=2]; + 5 -> 6; + 7 [fillcolor="#7F7FFF", + fixedsize=true, + group=default, + height=2, + label="7: 41aff6a42b75", + pin=true, + pos="1,7!", + shape=circle, + style=filled, + width=2]; + 6 -> 7; + 11 [fillcolor="#7F7FFF", + fixedsize=true, + group=default, + height=2, + label="11: a224f2a4fb9f", + pin=true, + pos="1,11!", + shape=circle, + style=filled, + width=2]; + 7 -> 11; + 14 [fillcolor="#7F7FFF", + fixedsize=true, + group=default, + height=2, + label="14: a44c85f957d3", + pin=true, + pos="1,14!", + shape=pentagon, + style=filled, + width=2]; + 11 -> 14; + 18 [fillcolor="#7F7FFF", + fixedsize=true, + group=default, + height=2, + label="18: 40aa40daeefb", + pin=true, + pos="1,18!", + shape=pentagon, + style=filled, + width=2]; + 14 -> 18; + } + Handling Divergent amend ---------------------------------------------- diff -r 9345b2eeeef3 -r 1b4c92621e23 tests/testlib/graphviz_setup.sh --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/tests/testlib/graphviz_setup.sh Tue Aug 29 16:42:40 2017 +0200 @@ -0,0 +1,17 @@ +. $TESTDIR/testlib/pythonpath.sh + +if ! test -z "${GRAPHVIZ_EXTENSION}"; then + +cat >> $HGRCPATH << EOF +[extensions] +graphviz=${GRAPHVIZ_EXTENSION}/hgext3rd/graphviz.py +EOF + +else + +cat >> $HGRCPATH << EOF +[alias] +graphviz=log -r "0" -Tt +EOF + +fi