D5102: beautifygraph: add configs for customizing the characters
hooper (Danny Hooper)
phabricator at mercurial-scm.org
Sun Oct 14 14:18:03 UTC 2018
hooper updated this revision to Diff 12138.
REPOSITORY
rHG Mercurial
CHANGES SINCE LAST UPDATE
https://phab.mercurial-scm.org/D5102?vs=12130&id=12138
REVISION DETAIL
https://phab.mercurial-scm.org/D5102
AFFECTED FILES
hgext/beautifygraph.py
tests/test-glog-beautifygraph.t
CHANGE DETAILS
diff --git a/tests/test-glog-beautifygraph.t b/tests/test-glog-beautifygraph.t
--- a/tests/test-glog-beautifygraph.t
+++ b/tests/test-glog-beautifygraph.t
@@ -1,3 +1,29 @@
+ $ hg help beautifygraph
+ beautifygraph extension - beautify log -G output by using Unicode characters
+ (EXPERIMENTAL)
+
+ A terminal with UTF-8 support and monospace narrow text are required.
+
+ The character substitutions used in the graph can be customized with
+ variables in the [beautifygraph] section:
+
+ / ``beautifygraph.edge.diagonal1``
+ \ ``beautifygraph.edge.diagonal2``
+ - ``beautifygraph.edge.horizontal``
+ | ``beautifygraph.edge.vertical``
+ : ``beautifygraph.edge.verticaldotted``
+ -+- ``beautifygraph.edge.cross``
+ -+ ``beautifygraph.edge.verticalleft``
+ +- ``beautifygraph.edge.verticalright``
+ ~ ``beautifygraph.edge.verticalstop``
+ _ ``beautifygraph.node.closesbranch``
+ @ ``beautifygraph.node.current``
+ x ``beautifygraph.node.obsolete``
+ o ``beautifygraph.node.other``
+ * ``beautifygraph.node.unstable``
+
+ (use 'hg help extensions' for information on enabling extensions)
+
@ (34) head
|
| o (33) head
@@ -3112,3 +3138,84 @@
$ cd ..
+
+Construct a magical repo whose ascii graph log contains all the possible symbols.
+
+ $ hg init configuration
+ $ cd configuration
+
+ $ touch file0
+ $ hg commit -Aqm revision0
+ $ touch file1
+ $ hg commit -Aqm revision1
+ $ touch file2
+ $ hg commit -Aqm revision2
+ $ touch file3
+ $ hg commit -Aqm revision3
+ $ hg update -q null
+ $ touch file4
+ $ hg commit -Aqm revision4
+ $ hg update -q 3
+ $ hg merge -q 4
+ $ touch file5
+ $ hg commit -Aqm revision5
+ $ hg update -q null
+ $ touch file6
+ $ hg branch -q foo
+ $ hg commit -Aqm revision6
+ $ hg merge -q 3
+ $ touch file7
+ $ hg commit -Aqm revision7 --close-branch
+ $ hg update -q 4
+ $ hg merge -q 3
+ $ touch file8
+ $ hg commit -Aqm revision8
+ $ hg update -q 6
+ $ hg merge -q 5
+ $ touch file9
+ $ hg commit -Aqm revision9
+ $ touch file10
+ $ hg commit -Aqm revision10
+ $ hg debugobsolete `hg log -r 9 -T '{node}'`
+ obsoleted 1 changesets
+ 1 new orphan changesets
+ $ hg update -q 8
+
+All symbols should be configurable.
+
+ $ hg log -G -q -r '(1:)-2' \
+ > --config beautifygraph.edge.diagonal1=a \
+ > --config beautifygraph.edge.diagonal2=b \
+ > --config beautifygraph.edge.cross=c \
+ > --config beautifygraph.edge.horizontal=d \
+ > --config beautifygraph.edge.vertical=e \
+ > --config beautifygraph.edge.verticaldotted=f \
+ > --config beautifygraph.edge.verticalleft=g \
+ > --config beautifygraph.edge.verticalright=h \
+ > --config beautifygraph.edge.verticalstop=i \
+ > --config beautifygraph.node.closesbranch=j \
+ > --config beautifygraph.node.current=📎 \
+ > --config beautifygraph.node.obsolete=l \
+ > --config beautifygraph.node.other=m \
+ > --config beautifygraph.node.unstable=n
+ n 10:3bf4adf1e513
+ e
+ l 9:a4d281932d8a
+ eb
+ e e 📎 8:b9029cea3597 (esc)
+ e e eb
+ e hdcdddj 7:12cd82bb4409
+ e e e e
+ e m e e 6:11bb041c7deb
+ e a a
+ mdddg 5:0b61ae539b30
+ ea a
+ e m 4:f2e786cf2f3d
+ e
+ m 3:561d8244024e
+ f
+ m 1:388ecb15405b
+ e
+ i
+
+ $ cd ..
diff --git a/hgext/beautifygraph.py b/hgext/beautifygraph.py
--- a/hgext/beautifygraph.py
+++ b/hgext/beautifygraph.py
@@ -9,6 +9,24 @@
'''beautify log -G output by using Unicode characters (EXPERIMENTAL)
A terminal with UTF-8 support and monospace narrow text are required.
+
+ The character substitutions used in the graph can be customized with
+ variables in the [beautifygraph] section::
+
+ / ``beautifygraph.edge.diagonal1``
+ \ ``beautifygraph.edge.diagonal2``
+ - ``beautifygraph.edge.horizontal``
+ | ``beautifygraph.edge.vertical``
+ : ``beautifygraph.edge.verticaldotted``
+ -+- ``beautifygraph.edge.cross``
+ -+ ``beautifygraph.edge.verticalleft``
+ +- ``beautifygraph.edge.verticalright``
+ ~ ``beautifygraph.edge.verticalstop``
+ _ ``beautifygraph.node.closesbranch``
+ @ ``beautifygraph.node.current``
+ x ``beautifygraph.node.obsolete``
+ o ``beautifygraph.node.other``
+ * ``beautifygraph.node.unstable``
'''
from __future__ import absolute_import
@@ -19,6 +37,7 @@
extensions,
graphmod,
pycompat,
+ registrar,
templatekw,
)
@@ -28,53 +47,69 @@
# leave the attribute unspecified.
testedwith = 'ships-with-hg-core'
-def prettyedge(before, edge, after):
- if edge == '~':
- return '\xE2\x95\xA7' # U+2567 ╧
- if edge == '/':
- return '\xE2\x95\xB1' # U+2571 ╱
- if edge == '-':
- return '\xE2\x94\x80' # U+2500 ─
- if edge == '|':
- return '\xE2\x94\x82' # U+2502 │
- if edge == ':':
- return '\xE2\x94\x86' # U+2506 ┆
- if edge == '\\':
- return '\xE2\x95\xB2' # U+2572 ╲
+configtable = {}
+configitem = registrar.configitem(configtable)
+
+configitem('beautifygraph', 'edge.verticalstop', '\xE2\x95\xA7') # U+2567 ╧
+configitem('beautifygraph', 'edge.diagonalcross', '\xE2\x95\xB3') # U+2573 ╳
+configitem('beautifygraph', 'edge.diagonal1', '\xE2\x95\xB1') # U+2571 ╱
+configitem('beautifygraph', 'edge.horizontal', '\xE2\x94\x80') # U+2500 ─
+configitem('beautifygraph', 'edge.vertical', '\xE2\x94\x82') # U+2502 │
+configitem('beautifygraph', 'edge.verticaldotted', '\xE2\x94\x86') # U+2506 ┆
+configitem('beautifygraph', 'edge.diagonal2', '\xE2\x95\xB2') # U+2572 ╲
+configitem('beautifygraph', 'edge.verticalright', '\xE2\x94\x9C') # U+251C ├
+configitem('beautifygraph', 'edge.verticalleft', '\xE2\x94\xA4') # U+2524 ┤
+configitem('beautifygraph', 'edge.cross', '\xE2\x94\xBC') # U+253C ┼
+configitem('beautifygraph', 'node.other', '\xE2\x97\x8B') # U+25CB ○
+configitem('beautifygraph', 'node.current', '\xE2\x97\x8D') # U+25CD ◍
+configitem('beautifygraph', 'node.unstable', '\xE2\x88\x97') # U+2217 ∗
+configitem('beautifygraph', 'node.obsolete', '\xE2\x97\x8C') # U+25CC ◌
+configitem('beautifygraph', 'node.closesbranch', '\xE2\x95\xA4') # U+2564 ╤
+
+def getsubstitutions(ui):
+ return {
+ '~': ui.config('beautifygraph', 'edge.verticalstop'),
+ '/': ui.config('beautifygraph', 'edge.diagonal1'),
+ '-': ui.config('beautifygraph', 'edge.horizontal'),
+ '|': ui.config('beautifygraph', 'edge.vertical'),
+ ':': ui.config('beautifygraph', 'edge.verticaldotted'),
+ '\\': ui.config('beautifygraph', 'edge.diagonal2'),
+ '+-': ui.config('beautifygraph', 'edge.verticalright'),
+ '-+': ui.config('beautifygraph', 'edge.verticalleft'),
+ '+': ui.config('beautifygraph', 'edge.cross'),
+ 'o': ui.config('beautifygraph', 'node.other'),
+ '@': ui.config('beautifygraph', 'node.current'),
+ '*': ui.config('beautifygraph', 'node.unstable'),
+ 'x': ui.config('beautifygraph', 'node.obsolete'),
+ '_': ui.config('beautifygraph', 'node.closesbranch'),
+ }
+
+def prettyedge(substitutions, before, edge, after):
if edge == '+':
if before == ' ' and not after == ' ':
- return '\xE2\x94\x9C' # U+251C ├
+ return substitutions.get('+-', edge)
if after == ' ' and not before == ' ':
- return '\xE2\x94\xA4' # U+2524 ┤
- return '\xE2\x94\xBC' # U+253C ┼
- return edge
+ return substitutions.get('-+', edge)
+ return substitutions.get(edge, edge)
-def convertedges(line):
+def convertedges(substitutions, line):
line = ' %s ' % line
pretty = []
for idx in pycompat.xrange(len(line) - 2):
- pretty.append(prettyedge(line[idx:idx + 1],
+ pretty.append(prettyedge(substitutions,
+ line[idx:idx + 1],
line[idx + 1:idx + 2],
line[idx + 2:idx + 3]))
return ''.join(pretty)
-def getprettygraphnode(orig, *args, **kwargs):
- node = orig(*args, **kwargs)
- if node == 'o':
- return '\xE2\x97\x8B' # U+25CB ○
- if node == '@':
- return '\xE2\x97\x8D' # U+25CD ◍
- if node == '*':
- return '\xE2\x88\x97' # U+2217 ∗
- if node == 'x':
- return '\xE2\x97\x8C' # U+25CC ◌
- if node == '_':
- return '\xE2\x95\xA4' # U+2564 ╤
- return node
+def getprettygraphnode(orig, repo, *args, **kwargs):
+ node = orig(repo, *args, **kwargs)
+ return getsubstitutions(repo.ui).get(node, node)
def outputprettygraph(orig, ui, graph, *args, **kwargs):
+ substitutions = getsubstitutions(ui)
(edges, text) = zip(*graph)
- graph = zip([convertedges(e) for e in edges], text)
+ graph = zip([convertedges(substitutions, e) for e in edges], text)
return orig(ui, graph, *args, **kwargs)
def extsetup(ui):
To: hooper, #hg-reviewers
Cc: spectral, mercurial-devel
More information about the Mercurial-devel
mailing list