Mercurial > hg-stable
view tests/test-command-template @ 9536:f04d17912441
cmdutil: templating keywords latesttag and latesttagdistance
This can be used for referring to revisions in a reasonable
meaningful, stable and monotonically increasing way, suitable for
releases or builds directly from a repository.
The latest tag is found by searching through untagged ancestors and
finding the latest tagged ancestor based on tag date. The distance is
found from the length of the longest path to the tagged revision.
For example:
hg log -l1 --template '{latesttag}+{latesttagdistance}\n'
can return
1.3.1+197
This is mostly work by Gilles Moris <gilles.moris@free.fr>
author | Mads Kiilerich <mads@kiilerich.com> |
---|---|
date | Sat, 03 Oct 2009 18:31:20 +0200 |
parents | 829ac0af66a4 |
children | 0aa1a632262b 8ebb34b0f6f7 |
line wrap: on
line source
#!/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 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 \ files manifest node parents rev tags diffstat; 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'