inotify: modular architecture for inotify clients
Put the socket init, query generation and response analysis in
a more generic client class.
#!/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
diff -u log.out style.out
echo '# verbose'
hg log -v > log.out
hg log -v --style default > style.out
diff -u log.out style.out
echo '# debug'
hg log --debug > log.out
hg log --debug --style default > 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
echo '# done'