Mercurial > public > mercurial-scm > hg
comparison mercurial/cmdutil.py @ 28600:0d6137891114
graphmod: allow for different styles for different edge types
Rather than draw all edges as solid lines, allow for using different styles for
different edge types. For example you could use dotted lines for edges that
do not connect to a parent, and dashed lines when connecting to a grandparent
(implying missing nodes in between).
For example, setting the following configuration:
[ui]
graphstyle.grandparent = :
graphstyle.missing = .
would result in a graph like this:
o changeset: 32:d06dffa21a31
|\ parent: 27:886ed638191b
| : parent: 31:621d83e11f67
| :
o : changeset: 31:621d83e11f67
|\: parent: 21:d42a756af44d
| : parent: 30:6e11cd4b648f
| :
o : changeset: 30:6e11cd4b648f
|\ \ parent: 28:44ecd0b9ae99
| . : parent: 29:cd9bb2be7593
| . :
o . : changeset: 28:44ecd0b9ae99
|\ \ \ parent: 1:6db2ef61d156
| . . : parent: 26:7f25b6c2f0b9
| . . :
o . . : changeset: 26:7f25b6c2f0b9
|\ \ \ \ parent: 18:1aa84d96232a
| | . . : parent: 25:91da8ed57247
| | . . :
| o-----+ changeset: 25:91da8ed57247
| | . . : parent: 21:d42a756af44d
| | . . : parent: 24:a9c19a3d96b7
| | . . :
| o . . : changeset: 24:a9c19a3d96b7
| |\ \ \ \ parent: 0:e6eb3150255d
| | . . . : parent: 23:a01cddf0766d
| | . . . :
| o---+ . : changeset: 23:a01cddf0766d
| | . . . : parent: 1:6db2ef61d156
| | . . . : parent: 22:e0d9cccacb5d
| | . . . :
| o-------+ changeset: 22:e0d9cccacb5d
| . . . . : parent: 18:1aa84d96232a
|/ / / / / parent: 21:d42a756af44d
| . . . :
| . . . o changeset: 21:d42a756af44d
| . . . |\ parent: 19:31ddc2c1573b
| . . . | | parent: 20:d30ed6450e32
| . . . | |
+-+-------o changeset: 20:d30ed6450e32
| . . . | parent: 0:e6eb3150255d
| . . . | parent: 18:1aa84d96232a
| . . . |
| . . . o changeset: 19:31ddc2c1573b
| . . . .\ parent: 15:1dda3f72782d
| . . . . | parent: 17:44765d7c06e0
| . . . . |
o---+---+ | changeset: 18:1aa84d96232a
. . . . | parent: 1:6db2ef61d156
/ / / / / parent: 15:1dda3f72782d
. . . . .
Edge styles can be altered by setting the following one-character config options::
[ui]
graphstyle.parent = |
graphstyle.grandparent = :
graphstyle.missing = .
The default configuration leaves all 3 types set to |, leaving graph styles
unaffected.
This is part of the work towards moving smartlog upstream; currently smartlog
injects extra nodes into the graph to indicate grandparent relationships (nodes
elided).
author | Martijn Pieters <mjpieters@fb.com> |
---|---|
date | Sat, 19 Mar 2016 16:46:15 -0700 |
parents | 5508cf9a52fe |
children | cd10171d6c71 |
comparison
equal
deleted
inserted
replaced
28599:0e7a929754aa | 28600:0d6137891114 |
---|---|
2216 | 2216 |
2217 def displaygraph(ui, repo, dag, displayer, edgefn, getrenamed=None, | 2217 def displaygraph(ui, repo, dag, displayer, edgefn, getrenamed=None, |
2218 filematcher=None): | 2218 filematcher=None): |
2219 formatnode = _graphnodeformatter(ui, displayer) | 2219 formatnode = _graphnodeformatter(ui, displayer) |
2220 state = graphmod.asciistate() | 2220 state = graphmod.asciistate() |
2221 styles = state['styles'] | |
2222 edgetypes = { | |
2223 'parent': graphmod.PARENT, | |
2224 'grandparent': graphmod.GRANDPARENT, | |
2225 'missing': graphmod.MISSINGPARENT | |
2226 } | |
2227 for name, key in edgetypes.items(): | |
2228 # experimental config: ui.graphstyle.* | |
2229 styles[key] = ui.config('ui', 'graphstyle.%s' % name, styles[key]) | |
2221 for rev, type, ctx, parents in dag: | 2230 for rev, type, ctx, parents in dag: |
2222 char = formatnode(repo, ctx) | 2231 char = formatnode(repo, ctx) |
2223 copies = None | 2232 copies = None |
2224 if getrenamed and ctx.rev(): | 2233 if getrenamed and ctx.rev(): |
2225 copies = [] | 2234 copies = [] |