|
|
#!/bin/sh
|
|
|
|
|
|
cat <<EOF >> $HGRCPATH
|
|
|
[extensions]
|
|
|
keyword =
|
|
|
mq =
|
|
|
notify =
|
|
|
record =
|
|
|
transplant =
|
|
|
[ui]
|
|
|
interactive = true
|
|
|
EOF
|
|
|
|
|
|
# demo before [keyword] files are set up
|
|
|
# would succeed without uisetup otherwise
|
|
|
echo % hg kwdemo
|
|
|
hg --quiet kwdemo \
|
|
|
| sed -e 's![^ ][^ ]*demo.txt,v!/TMP/demo.txt,v!' \
|
|
|
-e 's/,v [a-z0-9][a-z0-9]* /,v xxxxxxxxxxxx /' \
|
|
|
-e '/[$]Revision/ s/: [a-z0-9][a-z0-9]* /: xxxxxxxxxxxx /' \
|
|
|
-e 's! 20[0-9][0-9]/[01][0-9]/[0-3][0-9] [0-2][0-9]:[0-6][0-9]:[0-6][0-9]! 2000/00/00 00:00:00!'
|
|
|
|
|
|
hg --quiet kwdemo "Branch = {branches}"
|
|
|
|
|
|
cat <<EOF >> $HGRCPATH
|
|
|
[keyword]
|
|
|
** =
|
|
|
b = ignore
|
|
|
[hooks]
|
|
|
commit=
|
|
|
commit.test=cp a hooktest
|
|
|
EOF
|
|
|
|
|
|
hg init Test-bndl
|
|
|
cd Test-bndl
|
|
|
|
|
|
echo % kwshrink should exit silently in empty/invalid repo
|
|
|
hg kwshrink
|
|
|
|
|
|
# Symlinks cannot be created on Windows. The bundle was made with:
|
|
|
#
|
|
|
# hg init t
|
|
|
# cd t
|
|
|
# echo a > a
|
|
|
# ln -s a sym
|
|
|
# hg add sym
|
|
|
# hg ci -m addsym -u mercurial
|
|
|
# hg bundle --base null ../test-keyword.hg
|
|
|
#
|
|
|
hg pull -u "$TESTDIR/test-keyword.hg" \
|
|
|
| sed 's/pulling from.*test-keyword.hg/pulling from test-keyword.hg/'
|
|
|
|
|
|
echo 'expand $Id$' > a
|
|
|
echo 'do not process $Id:' >> a
|
|
|
echo 'xxx $' >> a
|
|
|
echo 'ignore $Id$' > b
|
|
|
echo % cat
|
|
|
cat a b
|
|
|
|
|
|
echo % no kwfiles
|
|
|
hg kwfiles
|
|
|
echo % untracked candidates
|
|
|
hg -v kwfiles --unknown
|
|
|
|
|
|
echo % addremove
|
|
|
hg addremove
|
|
|
echo % status
|
|
|
hg status
|
|
|
|
|
|
echo % default keyword expansion including commit hook
|
|
|
echo % interrupted commit should not change state or run commit hook
|
|
|
hg --debug commit
|
|
|
echo % status
|
|
|
hg status
|
|
|
|
|
|
echo % commit
|
|
|
hg --debug commit -mabsym -u 'User Name <user@example.com>'
|
|
|
echo % status
|
|
|
hg status
|
|
|
echo % identify
|
|
|
hg debugrebuildstate
|
|
|
hg --quiet identify
|
|
|
echo % cat
|
|
|
cat a b
|
|
|
echo % hg cat
|
|
|
hg cat sym a b
|
|
|
|
|
|
echo
|
|
|
echo % diff a hooktest
|
|
|
diff a hooktest
|
|
|
|
|
|
echo % removing commit hook from config
|
|
|
sed -e '/\[hooks\]/,$ d' "$HGRCPATH" > $HGRCPATH.nohook
|
|
|
mv "$HGRCPATH".nohook "$HGRCPATH"
|
|
|
rm hooktest
|
|
|
|
|
|
echo % bundle
|
|
|
hg bundle --base null ../kw.hg
|
|
|
|
|
|
cd ..
|
|
|
hg init Test
|
|
|
cd Test
|
|
|
|
|
|
echo % notify on pull to check whether keywords stay as is in email
|
|
|
echo % ie. if patch.diff wrapper acts as it should
|
|
|
|
|
|
cat <<EOF >> $HGRCPATH
|
|
|
[hooks]
|
|
|
incoming.notify = python:hgext.notify.hook
|
|
|
[notify]
|
|
|
sources = pull
|
|
|
diffstat = False
|
|
|
[reposubs]
|
|
|
* = Test
|
|
|
EOF
|
|
|
|
|
|
echo % pull from bundle
|
|
|
hg pull -u ../kw.hg 2>&1 | sed -e '/^Content-Type:/,/^diffs (/ d'
|
|
|
|
|
|
echo % remove notify config
|
|
|
sed -e '/\[hooks\]/,$ d' "$HGRCPATH" > $HGRCPATH.nonotify
|
|
|
mv "$HGRCPATH".nonotify "$HGRCPATH"
|
|
|
|
|
|
echo % touch
|
|
|
touch a b
|
|
|
echo % status
|
|
|
hg status
|
|
|
|
|
|
rm sym a b
|
|
|
echo % update
|
|
|
hg update -C
|
|
|
echo % cat
|
|
|
cat a b
|
|
|
|
|
|
echo % check whether expansion is filewise
|
|
|
echo '$Id$' > c
|
|
|
echo 'tests for different changenodes' >> c
|
|
|
echo % commit c
|
|
|
hg commit -A -mcndiff -d '1 0' -u 'User Name <user@example.com>'
|
|
|
echo % force expansion
|
|
|
hg -v kwexpand
|
|
|
echo % compare changenodes in a c
|
|
|
cat a c
|
|
|
|
|
|
echo % record chunk
|
|
|
python -c \
|
|
|
'l=open("a").readlines();l.insert(1,"foo\n");l.append("bar\n");open("a","w").writelines(l);'
|
|
|
hg record -d '1 10' -m rectest<<EOF
|
|
|
y
|
|
|
y
|
|
|
n
|
|
|
EOF
|
|
|
echo
|
|
|
hg identify
|
|
|
hg status
|
|
|
echo % cat modified file
|
|
|
cat a
|
|
|
hg diff | grep -v 'b/a'
|
|
|
hg rollback
|
|
|
|
|
|
echo % record file
|
|
|
echo foo > msg
|
|
|
# do not use "hg record -m" here!
|
|
|
hg record -l msg -d '1 11'<<EOF
|
|
|
y
|
|
|
y
|
|
|
y
|
|
|
EOF
|
|
|
echo % a should be clean
|
|
|
hg status -A a
|
|
|
rm msg
|
|
|
hg rollback
|
|
|
hg update -C
|
|
|
|
|
|
echo % init --mq
|
|
|
hg init --mq
|
|
|
echo % qimport
|
|
|
hg qimport -r tip -n mqtest.diff
|
|
|
echo % commit --mq
|
|
|
hg commit --mq -m mqtest
|
|
|
echo % keywords should not be expanded in patch
|
|
|
cat .hg/patches/mqtest.diff
|
|
|
echo % qpop
|
|
|
hg qpop
|
|
|
echo % qgoto - should imply qpush
|
|
|
hg qgoto mqtest.diff
|
|
|
echo % cat
|
|
|
cat c
|
|
|
echo % hg cat
|
|
|
hg cat c
|
|
|
echo % keyword should not be expanded in filelog
|
|
|
hg --config 'extensions.keyword=!' cat c
|
|
|
echo % qpop and move on
|
|
|
hg qpop
|
|
|
|
|
|
echo % copy
|
|
|
hg cp a c
|
|
|
|
|
|
echo % kwfiles added
|
|
|
hg kwfiles
|
|
|
|
|
|
echo % commit
|
|
|
hg --debug commit -ma2c -d '1 0' -u 'User Name <user@example.com>'
|
|
|
echo % cat a c
|
|
|
cat a c
|
|
|
echo % touch copied c
|
|
|
touch c
|
|
|
echo % status
|
|
|
hg status
|
|
|
|
|
|
echo % kwfiles
|
|
|
hg kwfiles
|
|
|
echo % ignored files
|
|
|
hg -v kwfiles --ignore
|
|
|
echo % all files
|
|
|
hg kwfiles --all
|
|
|
|
|
|
echo % diff --rev
|
|
|
hg diff --rev 1 | grep -v 'b/c'
|
|
|
|
|
|
echo % rollback
|
|
|
hg rollback
|
|
|
echo % status
|
|
|
hg status
|
|
|
echo % update -C
|
|
|
hg update --clean
|
|
|
|
|
|
echo % custom keyword expansion
|
|
|
echo % try with kwdemo
|
|
|
hg --quiet kwdemo "Xinfo = {author}: {desc}"
|
|
|
|
|
|
cat <<EOF >>$HGRCPATH
|
|
|
[keywordmaps]
|
|
|
Id = {file} {node|short} {date|rfc822date} {author|user}
|
|
|
Xinfo = {author}: {desc}
|
|
|
EOF
|
|
|
|
|
|
echo % cat
|
|
|
cat a b
|
|
|
echo % hg cat
|
|
|
hg cat sym a b
|
|
|
|
|
|
echo
|
|
|
echo '$Xinfo$' >> a
|
|
|
cat <<EOF >> log
|
|
|
firstline
|
|
|
secondline
|
|
|
EOF
|
|
|
|
|
|
echo % interrupted commit should not change state
|
|
|
hg commit
|
|
|
echo % status
|
|
|
hg status
|
|
|
|
|
|
echo % commit
|
|
|
hg --debug commit -l log -d '2 0' -u 'User Name <user@example.com>'
|
|
|
rm log
|
|
|
echo % status
|
|
|
hg status
|
|
|
echo % verify
|
|
|
hg verify
|
|
|
|
|
|
echo % cat
|
|
|
cat a b
|
|
|
echo % hg cat
|
|
|
hg cat sym a b
|
|
|
echo
|
|
|
echo % annotate
|
|
|
hg annotate a
|
|
|
|
|
|
echo % remove
|
|
|
hg debugrebuildstate
|
|
|
hg remove a
|
|
|
hg --debug commit -m rma
|
|
|
echo % status
|
|
|
hg status
|
|
|
echo % rollback
|
|
|
hg rollback
|
|
|
echo % status
|
|
|
hg status
|
|
|
echo % revert a
|
|
|
hg revert --no-backup --rev tip a
|
|
|
echo % cat a
|
|
|
cat a
|
|
|
|
|
|
echo % clone to test incoming
|
|
|
cd ..
|
|
|
hg clone -r1 Test Test-a
|
|
|
cd Test-a
|
|
|
cat <<EOF >> .hg/hgrc
|
|
|
[paths]
|
|
|
default = ../Test
|
|
|
EOF
|
|
|
echo % incoming
|
|
|
# remove path to temp dir
|
|
|
hg incoming | sed -e 's/^\(comparing with \).*\(test-keyword.*\)/\1\2/'
|
|
|
|
|
|
sed -e 's/Id.*/& rejecttest/' a > a.new
|
|
|
mv a.new a
|
|
|
echo % commit rejecttest
|
|
|
hg --debug commit -m'rejects?' -d '3 0' -u 'User Name <user@example.com>'
|
|
|
echo % export
|
|
|
hg export -o ../rejecttest.diff tip
|
|
|
|
|
|
cd ../Test
|
|
|
echo % import
|
|
|
hg import ../rejecttest.diff
|
|
|
echo % cat
|
|
|
cat a b
|
|
|
echo
|
|
|
echo % rollback
|
|
|
hg rollback
|
|
|
echo % clean update
|
|
|
hg update --clean
|
|
|
|
|
|
echo % kwexpand/kwshrink on selected files
|
|
|
mkdir x
|
|
|
echo % copy a x/a
|
|
|
hg copy a x/a
|
|
|
echo % kwexpand a
|
|
|
hg --verbose kwexpand a
|
|
|
echo % kwexpand x/a should abort
|
|
|
hg --verbose kwexpand x/a
|
|
|
cd x
|
|
|
hg --debug commit -m xa -d '3 0' -u 'User Name <user@example.com>'
|
|
|
echo % cat a
|
|
|
cat a
|
|
|
echo % kwshrink a inside directory x
|
|
|
hg --verbose kwshrink a
|
|
|
echo % cat a
|
|
|
cat a
|
|
|
cd ..
|
|
|
|
|
|
echo % kwexpand nonexistent
|
|
|
hg kwexpand nonexistent 2>&1 | sed 's/nonexistent:.*/nonexistent:/'
|
|
|
|
|
|
echo % hg serve
|
|
|
hg serve -p $HGPORT -d --pid-file=hg.pid -A access.log -E errors.log
|
|
|
cat hg.pid >> $DAEMON_PIDS
|
|
|
echo % expansion
|
|
|
echo % hgweb file
|
|
|
("$TESTDIR/get-with-headers.py" localhost:$HGPORT '/file/tip/a/?style=raw')
|
|
|
echo % no expansion
|
|
|
echo % hgweb annotate
|
|
|
("$TESTDIR/get-with-headers.py" localhost:$HGPORT '/annotate/tip/a/?style=raw')
|
|
|
echo % hgweb changeset
|
|
|
("$TESTDIR/get-with-headers.py" localhost:$HGPORT '/rev/tip/?style=raw')
|
|
|
echo % hgweb filediff
|
|
|
("$TESTDIR/get-with-headers.py" localhost:$HGPORT '/diff/bb948857c743/a?style=raw')
|
|
|
echo % errors encountered
|
|
|
cat errors.log
|
|
|
|
|
|
echo % merge/resolve
|
|
|
echo '$Id$' > m
|
|
|
hg add m
|
|
|
hg commit -m 4kw
|
|
|
echo foo >> m
|
|
|
hg commit -m 5foo
|
|
|
echo % simplemerge
|
|
|
hg update 4
|
|
|
echo foo >> m
|
|
|
hg commit -m 6foo
|
|
|
hg merge
|
|
|
hg commit -m simplemerge
|
|
|
cat m
|
|
|
echo % conflict
|
|
|
hg update 4
|
|
|
echo bar >> m
|
|
|
hg commit -m 8bar
|
|
|
hg merge
|
|
|
echo % keyword stays outside conflict zone
|
|
|
cat m
|
|
|
echo % resolve to local
|
|
|
HGMERGE=internal:local hg resolve -a
|
|
|
hg commit -m localresolve
|
|
|
cat m
|
|
|
|
|
|
echo % test restricted mode with transplant -b
|
|
|
hg update 6
|
|
|
hg branch foo
|
|
|
mv a a.bak
|
|
|
echo foobranch > a
|
|
|
cat a.bak >> a
|
|
|
rm a.bak
|
|
|
hg commit -m 9foobranch
|
|
|
hg update default
|
|
|
hg -y transplant -b foo tip
|
|
|
echo % no expansion in changeset
|
|
|
hg tip -p
|
|
|
echo % expansion in file
|
|
|
head -n 2 a
|
|
|
hg -q rollback
|
|
|
hg -q update -C
|
|
|
|
|
|
echo % switch off expansion
|
|
|
echo % kwshrink with unknown file u
|
|
|
cp a u
|
|
|
hg --verbose kwshrink
|
|
|
echo % cat
|
|
|
cat a b
|
|
|
echo % hg cat
|
|
|
hg cat sym a b
|
|
|
echo
|
|
|
rm "$HGRCPATH"
|
|
|
echo % cat
|
|
|
cat a b
|
|
|
echo % hg cat
|
|
|
hg cat sym a b
|
|
|
echo
|
|
|
|