graphmod: shorten graph
authorsantiagopim <santiagopim@gmail.com>
Fri, 08 Apr 2016 16:42:43 +0200
changeset 28891 ac30adb260ea
parent 28890 468339891670
child 28892 0c135f37c6f8
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 | ~
mercurial/cmdutil.py
mercurial/graphmod.py
tests/test-glog.t
--- a/mercurial/cmdutil.py	Mon Apr 11 12:06:18 2016 -0700
+++ b/mercurial/cmdutil.py	Fri Apr 08 16:42:43 2016 +0200
@@ -2240,6 +2240,10 @@
                                 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
--- a/mercurial/graphmod.py	Mon Apr 11 12:06:18 2016 -0700
+++ b/mercurial/graphmod.py	Fri Apr 08 16:42:43 2016 +0200
@@ -543,6 +543,7 @@
         'lastcoldiff': 0,
         'lastindex': 0,
         'styles': EDGES.copy(),
+        'graphshorten': False,
     }
 
 def ascii(ui, state, type, char, text, coldata):
@@ -630,7 +631,15 @@
     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
--- a/tests/test-glog.t	Mon Apr 11 12:06:18 2016 -0700
+++ b/tests/test-glog.t	Fri Apr 08 16:42:43 2016 +0200
@@ -2634,3 +2634,105 @@
   
 
   $ 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 ..