[PATCH 3 of 4 V2] graphmod: use different styles for different edge types

Martijn Pieters mj at zopatista.com
Tue Mar 8 09:03:44 EST 2016


On 8 March 2016 at 08:16, Durham Goode <durham at fb.com> wrote:
> Could you provide some examples in the commit message, or an additional
> email with a link to a paste so we can see what the results look like?  It's
> hard to give feedback on the output with only the test patches to go by.
> I'm worried that in smartlog all the lines will be dotted, which will make
> their presence distracting and less informative.
>
> For the smartlog functionality that injects extra nodes, what's the plan
> there?

Smartlog will no longer inject extra nodes. Instead of

o  9974b8  danek  remote/@
|  tests: Solaris grep doesn't add a trailing newline when it's missing
|
.
.
|
o  158bdc  timeless  @ stable
|  shelve: lowercase flag description
|

smartlog would show

o  9974b8  danek  remote/@
:  tests: Solaris grep doesn't add a trailing newline when it's missing
:
o  158bdc  timeless  @  stable
|  shelve: lowercase flag description
~

(actual output from a hg sl command in my mercurial working copy, just
the last two entries). The above shows both a grandparent relationship
(where smartlog injected an extra node to render the two dots) and a
missing parent relationship (where smartlog and hg log -G draw a line
that just peters out).

As for a larger example, this is a cut-down version of the test in
test-glog.t; as it was originally before my changes:

  o    changeset:   32:d06dffa21a31
  |\   parent:      27:886ed638191b
  | |  parent:      31:621d83e11f67
  | |  user:        test
  | |  date:        Thu Jan 01 00:00:32 1970 +0000
  | |  summary:     (32) expand
  | |
  o |  changeset:   31:621d83e11f67
  |\|  parent:      21:d42a756af44d
  | |  parent:      30:6e11cd4b648f
  | |  user:        test
  | |  date:        Thu Jan 01 00:00:31 1970 +0000
  | |  summary:     (31) expand
  | |
  o |    changeset:   30:6e11cd4b648f
  |\ \   parent:      28:44ecd0b9ae99
  | | |  parent:      29:cd9bb2be7593
  | | |  user:        test
  | | |  date:        Thu Jan 01 00:00:30 1970 +0000
  | | |  summary:     (30) expand
  | | |
  o | |    changeset:   28:44ecd0b9ae99
  |\ \ \   parent:      1:6db2ef61d156
  | | | |  parent:      26:7f25b6c2f0b9
  | | | |  user:        test
  | | | |  date:        Thu Jan 01 00:00:28 1970 +0000
  | | | |  summary:     (28) merge zero known
  | | | |
  o | | |    changeset:   26:7f25b6c2f0b9
  |\ \ \ \   parent:      18:1aa84d96232a
  | | | | |  parent:      25:91da8ed57247
  | | | | |  user:        test
  | | | | |  date:        Thu Jan 01 00:00:26 1970 +0000
  | | | | |  summary:     (26) merge one known; far right
  | | | | |
  | o-----+  changeset:   25:91da8ed57247
  | | | | |  parent:      21:d42a756af44d
  | | | | |  parent:      24:a9c19a3d96b7
  | | | | |  user:        test
  | | | | |  date:        Thu Jan 01 00:00:25 1970 +0000
  | | | | |  summary:     (25) merge one known; far left
  | | | | |
  | o | | |    changeset:   24:a9c19a3d96b7
  | |\ \ \ \   parent:      0:e6eb3150255d
  | | | | | |  parent:      23:a01cddf0766d
  | | | | | |  user:        test
  | | | | | |  date:        Thu Jan 01 00:00:24 1970 +0000
  | | | | | |  summary:     (24) merge one known; immediate right
  | | | | | |
  | o---+ | |  changeset:   23:a01cddf0766d
  | | | | | |  parent:      1:6db2ef61d156
  | | | | | |  parent:      22:e0d9cccacb5d
  | | | | | |  user:        test
  | | | | | |  date:        Thu Jan 01 00:00:23 1970 +0000
  | | | | | |  summary:     (23) merge one known; immediate left
  | | | | | |
  | o-------+  changeset:   22:e0d9cccacb5d
  | | | | | |  parent:      18:1aa84d96232a
  |/ / / / /   parent:      21:d42a756af44d
  | | | | |    user:        test
  | | | | |    date:        Thu Jan 01 00:00:22 1970 +0000
  | | | | |    summary:     (22) merge two known; one far left, one far right
  | | | | |
  | | | | o    changeset:   21:d42a756af44d
  | | | | |\   parent:      19:31ddc2c1573b
  | | | | | |  parent:      20:d30ed6450e32
  | | | | | |  user:        test
  | | | | | |  date:        Thu Jan 01 00:00:21 1970 +0000
  | | | | | |  summary:     (21) expand
  | | | | | |
  +-+-------o  changeset:   20:d30ed6450e32
  | | | | |    parent:      0:e6eb3150255d
  | | | | |    parent:      18:1aa84d96232a
  | | | | |    user:        test
  | | | | |    date:        Thu Jan 01 00:00:20 1970 +0000
  | | | | |    summary:     (20) merge two known; two far right
  | | | | |
  | | | | o    changeset:   19:31ddc2c1573b
  | | | | |\   parent:      15:1dda3f72782d
  | | | | | |  parent:      17:44765d7c06e0
  | | | | | |  user:        test
  | | | | | |  date:        Thu Jan 01 00:00:19 1970 +0000
  | | | | | |  summary:     (19) expand
  | | | | | |
  o---+---+ |  changeset:   18:1aa84d96232a
    | | | | |  parent:      1:6db2ef61d156
   / / / / /   parent:      15:1dda3f72782d
  | | | | |    user:        test
  | | | | |    date:        Thu Jan 01 00:00:18 1970 +0000
  | | | | |    summary:     (18) merge two known; two far left
  | | | | |

Changing the style of edge lines based on the relationship turns that into:

  o    changeset:   32:d06dffa21a31
  |\   parent:      27:886ed638191b
  | :  parent:      31:621d83e11f67
  | :  user:        test
  | :  date:        Thu Jan 01 00:00:32 1970 +0000
  | :  summary:     (32) expand
  | :
  o :  changeset:   31:621d83e11f67
  |\:  parent:      21:d42a756af44d
  | :  parent:      30:6e11cd4b648f
  | :  user:        test
  | :  date:        Thu Jan 01 00:00:31 1970 +0000
  | :  summary:     (31) expand
  | :
  o :    changeset:   30:6e11cd4b648f
  |\ \   parent:      28:44ecd0b9ae99
  | . :  parent:      29:cd9bb2be7593
  | . :  user:        test
  | . :  date:        Thu Jan 01 00:00:30 1970 +0000
  | . :  summary:     (30) expand
  | . :
  o . :    changeset:   28:44ecd0b9ae99
  |\ \ \   parent:      1:6db2ef61d156
  | . . :  parent:      26:7f25b6c2f0b9
  | . . :  user:        test
  | . . :  date:        Thu Jan 01 00:00:28 1970 +0000
  | . . :  summary:     (28) merge zero known
  | . . :
  o . . :    changeset:   26:7f25b6c2f0b9
  |\ \ \ \   parent:      18:1aa84d96232a
  | | . . :  parent:      25:91da8ed57247
  | | . . :  user:        test
  | | . . :  date:        Thu Jan 01 00:00:26 1970 +0000
  | | . . :  summary:     (26) merge one known; far right
  | | . . :
  | o-----+  changeset:   25:91da8ed57247
  | | . . :  parent:      21:d42a756af44d
  | | . . :  parent:      24:a9c19a3d96b7
  | | . . :  user:        test
  | | . . :  date:        Thu Jan 01 00:00:25 1970 +0000
  | | . . :  summary:     (25) merge one known; far left
  | | . . :
  | o . . :    changeset:   24:a9c19a3d96b7
  | |\ \ \ \   parent:      0:e6eb3150255d
  | | . . . :  parent:      23:a01cddf0766d
  | | . . . :  user:        test
  | | . . . :  date:        Thu Jan 01 00:00:24 1970 +0000
  | | . . . :  summary:     (24) merge one known; immediate right
  | | . . . :
  | o---+ . :  changeset:   23:a01cddf0766d
  | | . . . :  parent:      1:6db2ef61d156
  | | . . . :  parent:      22:e0d9cccacb5d
  | | . . . :  user:        test
  | | . . . :  date:        Thu Jan 01 00:00:23 1970 +0000
  | | . . . :  summary:     (23) merge one known; immediate left
  | | . . . :
  | o-------+  changeset:   22:e0d9cccacb5d
  | . . . . :  parent:      18:1aa84d96232a
  |/ / / / /   parent:      21:d42a756af44d
  | . . . :    user:        test
  | . . . :    date:        Thu Jan 01 00:00:22 1970 +0000
  | . . . :    summary:     (22) merge two known; one far left, one far right
  | . . . :
  | . . . o    changeset:   21:d42a756af44d
  | . . . |\   parent:      19:31ddc2c1573b
  | . . . | |  parent:      20:d30ed6450e32
  | . . . | |  user:        test
  | . . . | |  date:        Thu Jan 01 00:00:21 1970 +0000
  | . . . | |  summary:     (21) expand
  | . . . | |
  +-+-------o  changeset:   20:d30ed6450e32
  | . . . |    parent:      0:e6eb3150255d
  | . . . |    parent:      18:1aa84d96232a
  | . . . |    user:        test
  | . . . |    date:        Thu Jan 01 00:00:20 1970 +0000
  | . . . |    summary:     (20) merge two known; two far right
  | . . . |
  | . . . o    changeset:   19:31ddc2c1573b
  | . . . .\   parent:      15:1dda3f72782d
  | . . . . |  parent:      17:44765d7c06e0
  | . . . . |  user:        test
  | . . . . |  date:        Thu Jan 01 00:00:19 1970 +0000
  | . . . . |  summary:     (19) expand
  | . . . . |
  o---+---+ |  changeset:   18:1aa84d96232a
    . . . . |  parent:      1:6db2ef61d156
   / / / / /   parent:      15:1dda3f72782d
  . . . . .    user:        test
  . . . . .    date:        Thu Jan 01 00:00:18 1970 +0000
  . . . . .    summary:     (18) merge two known; two far left
  . . . . .

So edges that lead to a grandparent (intermediate nodes are missing)
are depicted using : lines. Edges to nodes that are not part of the
graph at all are depicted as . lines. For example, node 27 is not part
of the graph, but 21, an ancestor to 27, is, so the edge between 32
and 21 is drawn as a : dotted line. The same applies for node 18
between 21 and 22. Nodes 0, 1, 15, 17 and 29, are all missing from the
graph, edges that try to connect to those are drawn as . dotted lines.

The big win comes from then terminating missing-parent edges early:

  o    changeset:   32:d06dffa21a31
  |\   parent:      27:886ed638191b
  | :  parent:      31:621d83e11f67
  | :  user:        test
  | :  date:        Thu Jan 01 00:00:32 1970 +0000
  | :  summary:     (32) expand
  | :
  o :  changeset:   31:621d83e11f67
  |\:  parent:      21:d42a756af44d
  | :  parent:      30:6e11cd4b648f
  | :  user:        test
  | :  date:        Thu Jan 01 00:00:31 1970 +0000
  | :  summary:     (31) expand
  | :
  o :    changeset:   30:6e11cd4b648f
  |\ \   parent:      28:44ecd0b9ae99
  | ~ :  parent:      29:cd9bb2be7593
  |   :  user:        test
  |   :  date:        Thu Jan 01 00:00:30 1970 +0000
  |   :  summary:     (30) expand
  |  /
  o :    changeset:   28:44ecd0b9ae99
  |\ \   parent:      1:6db2ef61d156
  | ~ :  parent:      26:7f25b6c2f0b9
  |   :  user:        test
  |   :  date:        Thu Jan 01 00:00:28 1970 +0000
  |   :  summary:     (28) merge zero known
  |  /
  o :    changeset:   26:7f25b6c2f0b9
  |\ \   parent:      18:1aa84d96232a
  | | :  parent:      25:91da8ed57247
  | | :  user:        test
  | | :  date:        Thu Jan 01 00:00:26 1970 +0000
  | | :  summary:     (26) merge one known; far right
  | | :
  | o :  changeset:   25:91da8ed57247
  | |\:  parent:      21:d42a756af44d
  | | :  parent:      24:a9c19a3d96b7
  | | :  user:        test
  | | :  date:        Thu Jan 01 00:00:25 1970 +0000
  | | :  summary:     (25) merge one known; far left
  | | :
  | o :    changeset:   24:a9c19a3d96b7
  | |\ \   parent:      0:e6eb3150255d
  | | ~ :  parent:      23:a01cddf0766d
  | |   :  user:        test
  | |   :  date:        Thu Jan 01 00:00:24 1970 +0000
  | |   :  summary:     (24) merge one known; immediate right
  | |  /
  | o :    changeset:   23:a01cddf0766d
  | |\ \   parent:      1:6db2ef61d156
  | | ~ :  parent:      22:e0d9cccacb5d
  | |   :  user:        test
  | |   :  date:        Thu Jan 01 00:00:23 1970 +0000
  | |   :  summary:     (23) merge one known; immediate left
  | |  /
  | o :  changeset:   22:e0d9cccacb5d
  |/:/   parent:      18:1aa84d96232a
  | :    parent:      21:d42a756af44d
  | :    user:        test
  | :    date:        Thu Jan 01 00:00:22 1970 +0000
  | :    summary:     (22) merge two known; one far left, one far right
  | :
  | o    changeset:   21:d42a756af44d
  | |\   parent:      19:31ddc2c1573b
  | | |  parent:      20:d30ed6450e32
  | | |  user:        test
  | | |  date:        Thu Jan 01 00:00:21 1970 +0000
  | | |  summary:     (21) expand
  | | |
  +---o  changeset:   20:d30ed6450e32
  | | |  parent:      0:e6eb3150255d
  | | ~  parent:      18:1aa84d96232a
  | |    user:        test
  | |    date:        Thu Jan 01 00:00:20 1970 +0000
  | |    summary:     (20) merge two known; two far right
  | |
  | o    changeset:   19:31ddc2c1573b
  | |\   parent:      15:1dda3f72782d
  | ~ ~  parent:      17:44765d7c06e0
  |      user:        test
  |      date:        Thu Jan 01 00:00:19 1970 +0000
  |      summary:     (19) expand
  |
  o    changeset:   18:1aa84d96232a
  |\   parent:      1:6db2ef61d156
  ~ ~  parent:      15:1dda3f72782d
       user:        test
       date:        Thu Jan 01 00:00:18 1970 +0000
       summary:     (18) merge two known; two far left


-- 
Martijn Pieters


More information about the Mercurial-devel mailing list