color: colorize based on output labels instead of parsing output
By overriding ui.write(), ui.write_err(), ui.popbuffer(), and ui.label(),
the color extension can avoid parsing command output and simply colorize
output based on labels.
As before, the color extension provides a list of default colors for
core commands/labels. Other extensions can provide their own defaults by
specifying a colortable dict (similar to cmdtable).
In this process, --color is promoted to a global option and the deprecated
--no-color option is removed.
#!/bin/sh
# Construct the following history tree:
#
# @ 5:e1bb631146ca b1
# |
# o 4:a4fdb3b883c4 0:b608b9236435 b1
# |
# | o 3:4b57d2520816 1:44592833ba9f
# | |
# | | o 2:063f31070f65
# | |/
# | o 1:44592833ba9f
# |/
# o 0:b608b9236435
hg init
echo foo > foo
echo zero > a
hg ci -qAm0
echo one > a ; hg ci -m1
echo two > a ; hg ci -m2
hg up -q 1
echo three > a ; hg ci -qm3
hg up -q 0
hg branch -q b1
echo four > a ; hg ci -qm4
echo five > a ; hg ci -qm5
echo % initial repo state
echo
hg --config 'extensions.graphlog=' \
glog --template '{rev}:{node|short} {parents} {branches}\n'
# Test helper functions.
revtest () {
msg=$1
dirtyflag=$2 # 'clean' or 'dirty'
startrev=$3
targetrev=$4
opt=$5
echo % revtest $msg $startrev $targetrev
hg up -qC $startrev
test $dirtyflag = dirty && echo dirty > foo
hg up $opt $targetrev
hg parent --template 'parent={rev}\n'
hg stat
}
norevtest () {
msg=$1
dirtyflag=$2 # 'clean' or 'dirty'
startrev=$3
opt=$4
echo % norevtest $msg $startrev
hg up -qC $startrev
test $dirtyflag = dirty && echo dirty > foo
hg up $opt
hg parent --template 'parent={rev}\n'
hg stat
}
# Test cases are documented in a table in the update function of merge.py.
# Cases are run as shown in that table, row by row.
norevtest 'none clean linear' clean 4
norevtest 'none clean same' clean 2
revtest 'none clean linear' clean 1 2
revtest 'none clean same' clean 2 3
revtest 'none clean cross' clean 3 4
revtest 'none dirty linear' dirty 1 2
revtest 'none dirty same' dirty 2 3
revtest 'none dirty cross' dirty 3 4
revtest '-C dirty linear' dirty 1 2 -C
revtest '-c dirty linear' dirty 1 2 -c
norevtest '-c clean same' clean 2 -c
revtest '-cC dirty linear' dirty 1 2 -cC