minirst: improve layout of field lists
Before, we used the padding following the key to compute where to wrap
the text. Long keys would thus give a big indentation. It also
required careful alignment of the source text, making it cumbersome to
items to the list.
We now compute the maximum key length and use that for all items in
the list. We also put a cap on the indentation: keys longer than 10
characters are put on their own line. This is similar to how rst2html
handles large keys: it uses 14 as the cutoff point, but I felt that 10
was better for monospaced text in the console.
#!/bin/sh
hg init a
cd a
echo a > a
hg add a
echo line 1 > b
echo line 2 >> b
hg commit -l b -d '1000000 0' -u 'User Name <user@hostname>'
hg add b
echo other 1 > c
echo other 2 >> c
echo >> c
echo other 3 >> c
hg commit -l c -d '1100000 0' -u 'A. N. Other <other@place>'
hg add c
hg commit -m 'no person' -d '1200000 0' -u 'other@place'
echo c >> c
hg commit -m 'no user, no domain' -d '1300000 0' -u 'person'
echo foo > .hg/branch
hg commit -m 'new branch' -d '1400000 0' -u 'person'
hg co -q 3
echo other 4 >> d
hg add d
hg commit -m 'new head' -d '1500000 0' -u 'person'
hg merge -q foo
hg commit -m 'merge' -d '1500001 0' -u 'person'
# second branch starting at nullrev
hg update null
echo second > second
hg add second
hg commit -m second -d '1000000 0' -u 'User Name <user@hostname>'
echo third > third
hg add third
hg mv second fourth
hg commit -m third -d "2020-01-01 10:01"
# make sure user/global hgrc does not affect tests
echo '[ui]' > .hg/hgrc
echo 'logtemplate =' >> .hg/hgrc
echo 'style =' >> .hg/hgrc
echo '# default style is like normal output'
echo '# normal'
hg log > log.out
hg log --style default > style.out
cmp log.out style.out || diff -u log.out style.out
echo '# verbose'
hg log -v > log.out
hg log -v --style default > style.out
cmp log.out style.out || diff -u log.out style.out
echo '# debug'
hg log --debug > log.out
hg log --debug --style default > style.out
cmp log.out style.out || diff -u log.out style.out
echo '# revision with no copies (used to print a traceback)'
hg tip -v --template '\n'
echo '# compact style works'
hg log --style compact
hg log -v --style compact
hg log --debug --style compact
echo '# error if style not readable'
touch q
chmod 0 q
hg log --style ./q
echo '# error if no style'
hg log --style notexist
echo '# error if style missing key'
echo 'q = q' > t
hg log --style ./t
echo '# error if include fails'
echo 'changeset = q' >> t
hg log --style ./t
echo '# include works'
rm q
echo '{rev}' > q
hg log --style ./t
echo '# ui.style works'
echo '[ui]' > .hg/hgrc
echo 'style = t' >> .hg/hgrc
hg log
echo '# issue338'
hg log --style=changelog > changelog
cat changelog
echo "# keys work"
for key in author branches date desc file_adds file_dels file_mods \
file_copies file_copies_switch files \
manifest node parents rev tags diffstat extras; do
for mode in '' --verbose --debug; do
hg log $mode --template "$key$mode: {$key}\n"
done
done
echo '# filters work'
hg log --template '{author|domain}\n'
hg log --template '{author|person}\n'
hg log --template '{author|user}\n'
hg log --template '{date|age}\n' > /dev/null || exit 1
hg log -l1 --template '{date|age}\n'
hg log --template '{date|date}\n'
hg log --template '{date|isodate}\n'
hg log --template '{date|isodatesec}\n'
hg log --template '{date|rfc822date}\n'
hg log --template '{desc|firstline}\n'
hg log --template '{node|short}\n'
hg log --template '<changeset author="{author|xmlescape}"/>\n'
echo '# formatnode filter works'
echo '# quiet'
hg -q log -r 0 --template '{node|formatnode}\n'
echo '# normal'
hg log -r 0 --template '{node|formatnode}\n'
echo '# verbose'
hg -v log -r 0 --template '{node|formatnode}\n'
echo '# debug'
hg --debug log -r 0 --template '{node|formatnode}\n'
echo '# error on syntax'
echo 'x = "f' >> t
hg log
cd ..
echo '# latesttag'
hg init latesttag
cd latesttag
echo a > file
hg ci -Am a -d '0 0'
echo b >> file
hg ci -m b -d '1 0'
echo c >> head1
hg ci -Am h1c -d '2 0'
hg update -q 1
echo d >> head2
hg ci -Am h2d -d '3 0'
echo e >> head2
hg ci -m h2e -d '4 0'
hg merge -q
hg ci -m merge -d '5 0'
echo '# No tag set'
hg log --template '{rev}: {latesttag}+{latesttagdistance}\n'
echo '# one common tag: longuest path wins'
hg tag -r 1 -m t1 -d '6 0' t1
hg log --template '{rev}: {latesttag}+{latesttagdistance}\n'
echo '# one ancestor tag: more recent wins'
hg tag -r 2 -m t2 -d '7 0' t2
hg log --template '{rev}: {latesttag}+{latesttagdistance}\n'
echo '# two branch tags: more recent wins'
hg tag -r 3 -m t3 -d '8 0' t3
hg log --template '{rev}: {latesttag}+{latesttagdistance}\n'
echo '# merged tag overrides'
hg tag -r 5 -m t5 -d '9 0' t5
hg tag -r 3 -m at3 -d '10 0' at3
hg log --template '{rev}: {latesttag}+{latesttagdistance}\n'
echo '# done'