[PATCH] graphmod: shorten graph

Pierre-Yves David pierre-yves.david at ens-lyon.org
Wed Apr 13 02:01:20 EDT 2016


This is apprently a resent, please use --flag V2 when doing so. (well, 
next will V3)

On 04/08/2016 09:17 AM, Santiago PayĆ  i Miralta wrote:
> # HG changeset patch
> # User santiagopim <santiagopim at gmail.com>
> # Date 1460126563 -7200
> #      Fri Apr 08 16:42:43 2016 +0200
> # Node ID ebd9500be4d4cfc132e5e33a30bb30be1a0ae3d8
> # Parent  c5565fc8848dd084d104ca40c33d1acdfcff8bc6
> 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 -r c5565fc8848d -r ebd9500be4d4 mercurial/cmdutil.py
> --- a/mercurial/cmdutil.py	Wed Apr 06 22:26:47 2016 -0400
> +++ b/mercurial/cmdutil.py	Fri Apr 08 16:42:43 2016 +0200
> @@ -2244,6 +2244,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
> diff -r c5565fc8848d -r ebd9500be4d4 mercurial/graphmod.py
> --- a/mercurial/graphmod.py	Wed Apr 06 22:26:47 2016 -0400
> +++ 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
> diff -r c5565fc8848d -r ebd9500be4d4 tests/test-glog.t
> --- a/tests/test-glog.t	Wed Apr 06 22:26:47 2016 -0400
> +++ 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 ..
> _______________________________________________
> Mercurial-devel mailing list
> Mercurial-devel at mercurial-scm.org
> https://www.mercurial-scm.org/mailman/listinfo/mercurial-devel



More information about the Mercurial-devel mailing list