# HG changeset patch # User santiagopim # Date 2016-04-08 14:42:43 # Node ID ac30adb260eac42aa8049f12301007d81ffe0154 # Parent 4683398916702dd5d2c6ce334d225a8ae9261663 graphmod: shorten graph Shorten the graph, cutting the all vertical (not oblique) edges rows. Activate with 'graphshorten = true' in [experimental] section. Example graph with deactivated option: $ hg log --graph --template '{rev} {desc|firstline}' --rev 1035:1015 o 1035 Merge with BOS |\ | o 1034 Fix help output, and a few broken tests. | | | o 1033 Merge with MPM. | |\ | | o 1032 Get patchbomb working with tip again. | | | | | o 1031 Rewrite log command. New version is faster and more featureful. | | | | | o 1030 Merge with MPM. | | |\ | | | o 1029 Emacs: implement hg-incoming, hg-outgoing and hg-push. | | | | | | | o 1028 Add commands.debugconfig. | | | | | | | o 1027 Emacs: fix up hg-log and hg-diff to operate more uniformly. | | | | | | | o 1026 Merge with MPM. | | | |\ | | | | o 1025 Merge with MPM. | | | | | | | | | ~ | | | o 1024 Sync buffers prior to doing a diff. | | | | | | | ~ o | | 1023 Minor tweak to the revgen algorithm |/ / o | 1022 Minor hgwebdir tweaks | | o | 1021 Add Makefile to the manifest | | o | 1020 Add default make rule | | o | 1019 Create helper functions for I/O to files in the working directory | | o | 1018 Add some aliases | | o | 1017 Fix up help for binary options |/ o 1016 Teach annotate about binary files | o 1015 Add automatic binary file detection to diff and export | ~ Example graph with activated option: $ hg log --graph --template '{rev} {desc|firstline}' --rev 1035:1015 o 1035 Merge with BOS |\ | o 1034 Fix help output, and a few broken tests. | o 1033 Merge with MPM. | |\ | | o 1032 Get patchbomb working with tip again. | | o 1031 Rewrite log command. New version is faster and more featureful. | | o 1030 Merge with MPM. | | |\ | | | o 1029 Emacs: implement hg-incoming, hg-outgoing and hg-push. | | | o 1028 Add commands.debugconfig. | | | o 1027 Emacs: fix up hg-log and hg-diff to operate more uniformly. | | | o 1026 Merge with MPM. | | | |\ | | | | o 1025 Merge with MPM. | | | | | | | | | ~ | | | o 1024 Sync buffers prior to doing a diff. | | | | | | | ~ o | | 1023 Minor tweak to the revgen algorithm |/ / o | 1022 Minor hgwebdir tweaks o | 1021 Add Makefile to the manifest o | 1020 Add default make rule o | 1019 Create helper functions for I/O to files in the working directory o | 1018 Add some aliases o | 1017 Fix up help for binary options |/ o 1016 Teach annotate about binary files o 1015 Add automatic binary file detection to diff and export | ~ diff --git a/mercurial/cmdutil.py b/mercurial/cmdutil.py --- a/mercurial/cmdutil.py +++ b/mercurial/cmdutil.py @@ -2240,6 +2240,10 @@ def displaygraph(ui, repo, dag, displaye styles[key]) if not styles[key]: styles[key] = None + + # experimental config: experimental.graphshorten + state['graphshorten'] = ui.configbool('experimental', 'graphshorten') + for rev, type, ctx, parents in dag: char = formatnode(repo, ctx) copies = None diff --git a/mercurial/graphmod.py b/mercurial/graphmod.py --- a/mercurial/graphmod.py +++ b/mercurial/graphmod.py @@ -543,6 +543,7 @@ def asciistate(): 'lastcoldiff': 0, 'lastindex': 0, 'styles': EDGES.copy(), + 'graphshorten': False, } def ascii(ui, state, type, char, text, coldata): @@ -630,7 +631,15 @@ def ascii(ui, state, type, char, text, c lines = [nodeline] if add_padding_line: lines.append(_getpaddingline(echars, idx, ncols, edges)) - lines.append(shift_interline) + + # If 'graphshorten' config, only draw shift_interline + # when there is any non vertical flow in graph. + if state['graphshorten']: + if any(c in '\/' for c in shift_interline if c): + lines.append(shift_interline) + # Else, no 'graphshorten' config so draw shift_interline. + else: + lines.append(shift_interline) # make sure that there are as many graph lines as there are # log strings diff --git a/tests/test-glog.t b/tests/test-glog.t --- a/tests/test-glog.t +++ b/tests/test-glog.t @@ -2634,3 +2634,105 @@ change graph edge styling $ cd .. + +Change graph shorten, test better with graphstyle.missing not none + + $ cd repo + $ cat << EOF >> $HGRCPATH + > [experimental] + > graphstyle.parent = | + > graphstyle.grandparent = : + > graphstyle.missing = ' + > graphshorten = true + > EOF + $ hg log -G -r 'file("a")' -m -T '{rev} {desc}' + @ 36 (36) buggy merge: identical parents + o 32 (32) expand + |\ + o : 31 (31) expand + |\: + o : 30 (30) expand + |\ \ + o \ \ 28 (28) merge zero known + |\ \ \ + o \ \ \ 26 (26) merge one known; far right + |\ \ \ \ + | o-----+ 25 (25) merge one known; far left + | o ' ' : 24 (24) merge one known; immediate right + | |\ \ \ \ + | o---+ ' : 23 (23) merge one known; immediate left + | o-------+ 22 (22) merge two known; one far left, one far right + |/ / / / / + | ' ' ' o 21 (21) expand + | ' ' ' |\ + +-+-------o 20 (20) merge two known; two far right + | ' ' ' o 19 (19) expand + | ' ' ' |\ + o---+---+ | 18 (18) merge two known; two far left + / / / / / + ' ' ' | o 17 (17) expand + ' ' ' | |\ + +-+-------o 16 (16) merge two known; one immediate right, one near right + ' ' ' o | 15 (15) expand + ' ' ' |\ \ + +-------o | 14 (14) merge two known; one immediate right, one far right + ' ' ' | |/ + ' ' ' o | 13 (13) expand + ' ' ' |\ \ + ' +---+---o 12 (12) merge two known; one immediate right, one far left + ' ' ' | o 11 (11) expand + ' ' ' | |\ + +---------o 10 (10) merge two known; one immediate left, one near right + ' ' ' | |/ + ' ' ' o | 9 (9) expand + ' ' ' |\ \ + +-------o | 8 (8) merge two known; one immediate left, one far right + ' ' ' |/ / + ' ' ' o | 7 (7) expand + ' ' ' |\ \ + ' ' ' +---o 6 (6) merge two known; one immediate left, one far left + ' ' ' | '/ + ' ' ' o ' 5 (5) expand + ' ' ' |\ \ + ' +---o ' ' 4 (4) merge two known; one immediate left, one immediate right + ' ' ' '/ / + +behavior with newlines + + $ hg log -G -r ::2 -T '{rev} {desc}' + o 2 (2) collapse + o 1 (1) collapse + o 0 (0) root + + $ hg log -G -r ::2 -T '{rev} {desc}\n' + o 2 (2) collapse + o 1 (1) collapse + o 0 (0) root + + $ hg log -G -r ::2 -T '{rev} {desc}\n\n' + o 2 (2) collapse + | + o 1 (1) collapse + | + o 0 (0) root + + + $ hg log -G -r ::2 -T '\n{rev} {desc}' + o + | 2 (2) collapse + o + | 1 (1) collapse + o + 0 (0) root + + $ hg log -G -r ::2 -T '{rev} {desc}\n\n\n' + o 2 (2) collapse + | + | + o 1 (1) collapse + | + | + o 0 (0) root + + + $ cd ..