|
|
#!/bin/sh
|
|
|
|
|
|
mkdir t
|
|
|
cd t
|
|
|
hg init
|
|
|
hg id
|
|
|
echo a > a
|
|
|
hg add a
|
|
|
hg commit -m "test" -d "1000000 0"
|
|
|
hg co
|
|
|
hg identify
|
|
|
T=`hg tip --debug | head -n 1 | cut -d : -f 3`
|
|
|
hg tag -l "This is a local tag with a really long name!"
|
|
|
hg tags
|
|
|
rm .hg/localtags
|
|
|
echo "$T first" > .hgtags
|
|
|
cat .hgtags
|
|
|
hg add .hgtags
|
|
|
hg commit -m "add tags" -d "1000000 0"
|
|
|
hg tags
|
|
|
hg identify
|
|
|
echo bb > a
|
|
|
hg status
|
|
|
hg identify
|
|
|
hg co first
|
|
|
hg id
|
|
|
hg -v id
|
|
|
hg status
|
|
|
echo 1 > b
|
|
|
hg add b
|
|
|
hg commit -m "branch" -d "1000000 0"
|
|
|
hg id
|
|
|
hg merge 1
|
|
|
hg id
|
|
|
hg status
|
|
|
|
|
|
hg commit -m "merge" -d "1000000 0"
|
|
|
|
|
|
# create fake head, make sure tag not visible afterwards
|
|
|
cp .hgtags tags
|
|
|
hg tag -d "1000000 0" last
|
|
|
hg rm .hgtags
|
|
|
hg commit -m "remove" -d "1000000 0"
|
|
|
|
|
|
mv tags .hgtags
|
|
|
hg add .hgtags
|
|
|
hg commit -m "readd" -d "1000000 0"
|
|
|
|
|
|
hg tags
|
|
|
|
|
|
# invalid tags
|
|
|
echo "spam" >> .hgtags
|
|
|
echo >> .hgtags
|
|
|
echo "foo bar" >> .hgtags
|
|
|
echo "$T invalid" | sed "s/..../a5a5/" >> .hg/localtags
|
|
|
hg commit -m "tags" -d "1000000 0"
|
|
|
|
|
|
# report tag parse error on other head
|
|
|
hg up 3
|
|
|
echo 'x y' >> .hgtags
|
|
|
hg commit -m "head" -d "1000000 0"
|
|
|
|
|
|
hg tags
|
|
|
hg tip
|
|
|
|
|
|
# test tag precedence rules
|
|
|
cd ..
|
|
|
hg init t2
|
|
|
cd t2
|
|
|
echo foo > foo
|
|
|
hg add foo
|
|
|
hg ci -m 'add foo' -d '1000000 0' # rev 0
|
|
|
hg tag -d '1000000 0' bar # rev 1
|
|
|
echo >> foo
|
|
|
hg ci -m 'change foo 1' -d '1000000 0' # rev 2
|
|
|
hg up -C 1
|
|
|
hg tag -r 1 -d '1000000 0' -f bar # rev 3
|
|
|
hg up -C 1
|
|
|
echo >> foo
|
|
|
hg ci -m 'change foo 2' -d '1000000 0' # rev 4
|
|
|
hg tags
|
|
|
|
|
|
# test tag removal
|
|
|
hg tag --remove -d '1000000 0' bar
|
|
|
hg tip
|
|
|
hg tags
|
|
|
|
|
|
echo '% remove nonexistent tag'
|
|
|
hg tag --remove -d '1000000 0' foobar
|
|
|
hg tip
|
|
|
|
|
|
# test tag rank
|
|
|
cd ..
|
|
|
hg init t3
|
|
|
cd t3
|
|
|
echo foo > foo
|
|
|
hg add foo
|
|
|
hg ci -m 'add foo' -d '1000000 0' # rev 0
|
|
|
hg tag -d '1000000 0' -f bar # rev 1 bar -> 0
|
|
|
hg tag -d '1000000 0' -f bar # rev 2 bar -> 1
|
|
|
hg tag -d '1000000 0' -fr 0 bar # rev 3 bar -> 0
|
|
|
hg tag -d '1000000 0' -fr 1 bar # rev 3 bar -> 1
|
|
|
hg tag -d '1000000 0' -fr 0 bar # rev 4 bar -> 0
|
|
|
hg tags
|
|
|
hg co 3
|
|
|
echo barbar > foo
|
|
|
hg ci -m 'change foo' -d '1000000 0' # rev 0
|
|
|
hg tags
|
|
|
|
|
|
hg tag -d '1000000 0' -r 3 bar # should complain
|
|
|
hg tags
|
|
|
|
|
|
# test tag rank with 3 heads
|
|
|
cd ..
|
|
|
hg init t4
|
|
|
cd t4
|
|
|
echo foo > foo
|
|
|
hg add
|
|
|
hg ci -m 'add foo' # rev 0
|
|
|
hg tag bar # rev 1 bar -> 0
|
|
|
hg tag -f bar # rev 2 bar -> 1
|
|
|
hg up -qC 0
|
|
|
hg tag -fr 2 bar # rev 3 bar -> 2
|
|
|
hg tags
|
|
|
hg up -qC 0
|
|
|
hg tag -m 'retag rev 0' -fr 0 bar # rev 4 bar -> 0, but bar stays at 2
|
|
|
echo % bar should still point to rev 2
|
|
|
hg tags
|
|
|
|
|
|
|
|
|
# test that removing global/local tags does not get confused when trying
|
|
|
# to remove a tag of type X which actually only exists as a type Y
|
|
|
cd ..
|
|
|
hg init t5
|
|
|
cd t5
|
|
|
echo foo > foo
|
|
|
hg add
|
|
|
hg ci -m 'add foo' # rev 0
|
|
|
|
|
|
hg tag -r 0 -l localtag
|
|
|
hg tag --remove localtag
|
|
|
|
|
|
hg tag -r 0 globaltag
|
|
|
hg tag --remove -l globaltag
|
|
|
hg tags -v
|
|
|
exit 0
|
|
|
|