mirror of
https://github.com/facebook/sapling.git
synced 2024-10-10 00:45:18 +03:00
8ff24147fd
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>
176 lines
4.1 KiB
Bash
Executable File
176 lines
4.1 KiB
Bash
Executable File
#!/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'
|