tests/test-tags
author Emanuele Aina <em@nerd.ocracy.org>
Wed, 28 Mar 2007 21:34:12 +0200
changeset 4307 c8919eb0f315
parent 4273 8185a1ca8628
child 4494 99f411ba0380
permissions -rwxr-xr-x
purge: abort with missing files avoiding problems with name-mangling fs In a name mangling filesystem (e.g. a case insensitive one) dirstate.walk() can yield filenames different from the ones stored in the dirstate. This already confuses the status and add commands, but with purge this may cause data loss. To prevent this purge refuses to work if there are missing files and has a 'force' option if the user knows it is safe. Even with the force option purge checks if any of the missing files is still available in the working dir: if so there may be some problem with the underlying filesystem, so it unconditionally aborts.

#!/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

# 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