test-tags.t
382 lines
| 9.7 KiB
| text/troff
|
Tads3Lexer
/ tests / test-tags.t
Mads Kiilerich
|
r15443 | $ "$TESTDIR/hghave" unix-permissions || exit 80 | ||
Matt Mackall
|
r11744 | Helper functions: | ||
$ cacheexists() { | ||||
jfh
|
r13272 | > [ -f .hg/cache/tags ] && echo "tag cache exists" || echo "no tag cache" | ||
Matt Mackall
|
r11744 | > } | ||
$ dumptags() { | ||||
> rev=$1 | ||||
> echo "rev $rev: .hgtags:" | ||||
> hg cat -r$rev .hgtags | ||||
> } | ||||
# XXX need to test that the tag cache works when we strip an old head | ||||
# and add a new one rooted off non-tip: i.e. node and rev of tip are the | ||||
# same, but stuff has changed behind tip. | ||||
Setup: | ||||
$ hg init t | ||||
$ cd t | ||||
$ cacheexists | ||||
no tag cache | ||||
$ hg id | ||||
000000000000 tip | ||||
$ cacheexists | ||||
no tag cache | ||||
$ echo a > a | ||||
$ hg add a | ||||
$ hg commit -m "test" | ||||
$ hg co | ||||
0 files updated, 0 files merged, 0 files removed, 0 files unresolved | ||||
$ hg identify | ||||
acb14030fe0a tip | ||||
$ cacheexists | ||||
tag cache exists | ||||
Nicolas Dumazet
|
r12758 | Try corrupting the cache | ||
jfh
|
r13272 | $ printf 'a b' > .hg/cache/tags | ||
Nicolas Dumazet
|
r12758 | $ hg identify | ||
jfh
|
r13272 | .hg/cache/tags is corrupt, rebuilding it | ||
Nicolas Dumazet
|
r12758 | acb14030fe0a tip | ||
$ cacheexists | ||||
tag cache exists | ||||
$ hg identify | ||||
acb14030fe0a tip | ||||
Matt Mackall
|
r11744 | Create local tag with long name: | ||
$ T=`hg identify --debug --id` | ||||
$ hg tag -l "This is a local tag with a really long name!" | ||||
$ hg tags | ||||
tip 0:acb14030fe0a | ||||
This is a local tag with a really long name! 0:acb14030fe0a | ||||
$ rm .hg/localtags | ||||
Create a tag behind hg's back: | ||||
$ echo "$T first" > .hgtags | ||||
$ cat .hgtags | ||||
acb14030fe0a21b60322c440ad2d20cf7685a376 first | ||||
$ hg add .hgtags | ||||
$ hg commit -m "add tags" | ||||
$ hg tags | ||||
tip 1:b9154636be93 | ||||
first 0:acb14030fe0a | ||||
$ hg identify | ||||
b9154636be93 tip | ||||
Repeat with cold tag cache: | ||||
jfh
|
r13272 | $ rm -f .hg/cache/tags | ||
Matt Mackall
|
r11744 | $ hg identify | ||
b9154636be93 tip | ||||
And again, but now unable to write tag cache: | ||||
jfh
|
r13272 | $ rm -f .hg/cache/tags | ||
Matt Mackall
|
r11744 | $ chmod 555 .hg | ||
$ hg identify | ||||
b9154636be93 tip | ||||
$ chmod 755 .hg | ||||
Create a branch: | ||||
$ echo bb > a | ||||
$ hg status | ||||
M a | ||||
$ hg identify | ||||
b9154636be93+ tip | ||||
$ hg co first | ||||
0 files updated, 0 files merged, 1 files removed, 0 files unresolved | ||||
$ hg id | ||||
acb14030fe0a+ first | ||||
$ hg -v id | ||||
acb14030fe0a+ first | ||||
$ hg status | ||||
M a | ||||
$ echo 1 > b | ||||
$ hg add b | ||||
$ hg commit -m "branch" | ||||
created new head | ||||
$ hg id | ||||
c8edf04160c7 tip | ||||
Merge the two heads: | ||||
$ hg merge 1 | ||||
1 files updated, 0 files merged, 0 files removed, 0 files unresolved | ||||
(branch merge, don't forget to commit) | ||||
$ hg id | ||||
c8edf04160c7+b9154636be93+ tip | ||||
$ hg status | ||||
M .hgtags | ||||
$ hg commit -m "merge" | ||||
Create a fake head, make sure tag not visible afterwards: | ||||
$ cp .hgtags tags | ||||
$ hg tag last | ||||
$ hg rm .hgtags | ||||
$ hg commit -m "remove" | ||||
$ mv tags .hgtags | ||||
$ hg add .hgtags | ||||
$ hg commit -m "readd" | ||||
$ | ||||
$ hg tags | ||||
tip 6:35ff301afafe | ||||
first 0:acb14030fe0a | ||||
Add invalid tags: | ||||
$ echo "spam" >> .hgtags | ||||
$ echo >> .hgtags | ||||
$ echo "foo bar" >> .hgtags | ||||
Matt Mackall
|
r12366 | $ echo "a5a5 invalid" >> .hg/localtags | ||
Matt Mackall
|
r11744 | $ cat .hgtags | ||
acb14030fe0a21b60322c440ad2d20cf7685a376 first | ||||
spam | ||||
foo bar | ||||
$ hg commit -m "tags" | ||||
Report tag parse error on other head: | ||||
$ hg up 3 | ||||
1 files updated, 0 files merged, 0 files removed, 0 files unresolved | ||||
$ echo 'x y' >> .hgtags | ||||
$ hg commit -m "head" | ||||
created new head | ||||
$ hg tags | ||||
.hgtags@75d9f02dfe28, line 2: cannot parse entry | ||||
.hgtags@75d9f02dfe28, line 4: node 'foo' is not well formed | ||||
.hgtags@c4be69a18c11, line 2: node 'x' is not well formed | ||||
tip 8:c4be69a18c11 | ||||
first 0:acb14030fe0a | ||||
$ hg tip | ||||
changeset: 8:c4be69a18c11 | ||||
tag: tip | ||||
parent: 3:ac5e980c4dc0 | ||||
user: test | ||||
date: Thu Jan 01 00:00:00 1970 +0000 | ||||
summary: head | ||||
Test tag precedence rules: | ||||
$ cd .. | ||||
$ hg init t2 | ||||
$ cd t2 | ||||
$ echo foo > foo | ||||
$ hg add foo | ||||
$ hg ci -m 'add foo' # rev 0 | ||||
$ hg tag bar # rev 1 | ||||
$ echo >> foo | ||||
$ hg ci -m 'change foo 1' # rev 2 | ||||
$ hg up -C 1 | ||||
1 files updated, 0 files merged, 0 files removed, 0 files unresolved | ||||
$ hg tag -r 1 -f bar # rev 3 | ||||
$ hg up -C 1 | ||||
1 files updated, 0 files merged, 0 files removed, 0 files unresolved | ||||
$ echo >> foo | ||||
$ hg ci -m 'change foo 2' # rev 4 | ||||
created new head | ||||
$ hg tags | ||||
tip 4:0c192d7d5e6b | ||||
bar 1:78391a272241 | ||||
Repeat in case of cache effects: | ||||
$ hg tags | ||||
tip 4:0c192d7d5e6b | ||||
bar 1:78391a272241 | ||||
Detailed dump of tag info: | ||||
$ hg heads -q # expect 4, 3, 2 | ||||
4:0c192d7d5e6b | ||||
3:6fa450212aeb | ||||
2:7a94127795a3 | ||||
$ dumptags 2 | ||||
rev 2: .hgtags: | ||||
bbd179dfa0a71671c253b3ae0aa1513b60d199fa bar | ||||
$ dumptags 3 | ||||
rev 3: .hgtags: | ||||
bbd179dfa0a71671c253b3ae0aa1513b60d199fa bar | ||||
bbd179dfa0a71671c253b3ae0aa1513b60d199fa bar | ||||
78391a272241d70354aa14c874552cad6b51bb42 bar | ||||
$ dumptags 4 | ||||
rev 4: .hgtags: | ||||
bbd179dfa0a71671c253b3ae0aa1513b60d199fa bar | ||||
Dump cache: | ||||
jfh
|
r13272 | $ cat .hg/cache/tags | ||
Matt Mackall
|
r11744 | 4 0c192d7d5e6b78a714de54a2e9627952a877e25a 0c04f2a8af31de17fab7422878ee5a2dadbc943d | ||
3 6fa450212aeb2a21ed616a54aea39a4a27894cd7 7d3b718c964ef37b89e550ebdafd5789e76ce1b0 | ||||
2 7a94127795a33c10a370c93f731fd9fea0b79af6 0c04f2a8af31de17fab7422878ee5a2dadbc943d | ||||
78391a272241d70354aa14c874552cad6b51bb42 bar | ||||
Test tag removal: | ||||
$ hg tag --remove bar # rev 5 | ||||
$ hg tip -vp | ||||
changeset: 5:5f6e8655b1c7 | ||||
tag: tip | ||||
user: test | ||||
date: Thu Jan 01 00:00:00 1970 +0000 | ||||
files: .hgtags | ||||
description: | ||||
Removed tag bar | ||||
diff -r 0c192d7d5e6b -r 5f6e8655b1c7 .hgtags | ||||
--- a/.hgtags Thu Jan 01 00:00:00 1970 +0000 | ||||
+++ b/.hgtags Thu Jan 01 00:00:00 1970 +0000 | ||||
@@ -1,1 +1,3 @@ | ||||
bbd179dfa0a71671c253b3ae0aa1513b60d199fa bar | ||||
+78391a272241d70354aa14c874552cad6b51bb42 bar | ||||
+0000000000000000000000000000000000000000 bar | ||||
$ hg tags | ||||
tip 5:5f6e8655b1c7 | ||||
$ hg tags # again, try to expose cache bugs | ||||
tip 5:5f6e8655b1c7 | ||||
Remove nonexistent tag: | ||||
$ hg tag --remove foobar | ||||
abort: tag 'foobar' does not exist | ||||
Matt Mackall
|
r12316 | [255] | ||
Matt Mackall
|
r11744 | $ hg tip | ||
changeset: 5:5f6e8655b1c7 | ||||
tag: tip | ||||
user: test | ||||
date: Thu Jan 01 00:00:00 1970 +0000 | ||||
summary: Removed tag bar | ||||
Undo a tag with rollback: | ||||
$ hg rollback # destroy rev 5 (restore bar) | ||||
Gilles Moris
|
r13446 | repository tip rolled back to revision 4 (undo commit) | ||
working directory now based on revision 4 | ||||
Matt Mackall
|
r11744 | $ hg tags | ||
tip 4:0c192d7d5e6b | ||||
bar 1:78391a272241 | ||||
$ hg tags | ||||
tip 4:0c192d7d5e6b | ||||
bar 1:78391a272241 | ||||
Test tag rank: | ||||
$ cd .. | ||||
$ hg init t3 | ||||
$ cd t3 | ||||
$ echo foo > foo | ||||
$ hg add foo | ||||
$ hg ci -m 'add foo' # rev 0 | ||||
$ hg tag -f bar # rev 1 bar -> 0 | ||||
$ hg tag -f bar # rev 2 bar -> 1 | ||||
$ hg tag -fr 0 bar # rev 3 bar -> 0 | ||||
$ hg tag -fr 1 bar # rev 4 bar -> 1 | ||||
$ hg tag -fr 0 bar # rev 5 bar -> 0 | ||||
$ hg tags | ||||
tip 5:85f05169d91d | ||||
bar 0:bbd179dfa0a7 | ||||
$ hg co 3 | ||||
1 files updated, 0 files merged, 0 files removed, 0 files unresolved | ||||
$ echo barbar > foo | ||||
$ hg ci -m 'change foo' # rev 6 | ||||
created new head | ||||
$ hg tags | ||||
tip 6:735c3ca72986 | ||||
bar 0:bbd179dfa0a7 | ||||
Don't allow moving tag without -f: | ||||
$ hg tag -r 3 bar | ||||
abort: tag 'bar' already exists (use -f to force) | ||||
Matt Mackall
|
r12316 | [255] | ||
Matt Mackall
|
r11744 | $ hg tags | ||
tip 6:735c3ca72986 | ||||
bar 0:bbd179dfa0a7 | ||||
Strip 1: expose an old head: | ||||
$ hg --config extensions.mq= strip 5 | ||||
Mads Kiilerich
|
r12640 | saved backup bundle to $TESTTMP/t3/.hg/strip-backup/*-backup.hg (glob) | ||
Matt Mackall
|
r11744 | $ hg tags # partly stale cache | ||
tip 5:735c3ca72986 | ||||
bar 1:78391a272241 | ||||
$ hg tags # up-to-date cache | ||||
tip 5:735c3ca72986 | ||||
bar 1:78391a272241 | ||||
Strip 2: destroy whole branch, no old head exposed | ||||
$ hg --config extensions.mq= strip 4 | ||||
Mads Kiilerich
|
r12640 | saved backup bundle to $TESTTMP/t3/.hg/strip-backup/*-backup.hg (glob) | ||
Matt Mackall
|
r11744 | $ hg tags # partly stale | ||
tip 4:735c3ca72986 | ||||
bar 0:bbd179dfa0a7 | ||||
jfh
|
r13272 | $ rm -f .hg/cache/tags | ||
Matt Mackall
|
r11744 | $ hg tags # cold cache | ||
tip 4:735c3ca72986 | ||||
bar 0:bbd179dfa0a7 | ||||
Test tag rank with 3 heads: | ||||
$ cd .. | ||||
$ hg init t4 | ||||
$ cd t4 | ||||
$ echo foo > foo | ||||
$ hg add | ||||
adding foo | ||||
$ 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 | ||||
tip 3:197c21bbbf2c | ||||
bar 2:6fa450212aeb | ||||
$ hg up -qC 0 | ||||
$ hg tag -m 'retag rev 0' -fr 0 bar # rev 4 bar -> 0, but bar stays at 2 | ||||
Bar should still point to rev 2: | ||||
$ hg tags | ||||
tip 4:3b4b14ed0202 | ||||
bar 2:6fa450212aeb | ||||
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 | ||||
adding foo | ||||
$ hg ci -m 'add foo' # rev 0 | ||||
$ hg tag -r 0 -l localtag | ||||
$ hg tag --remove localtag | ||||
abort: tag 'localtag' is not a global tag | ||||
Matt Mackall
|
r12316 | [255] | ||
Matt Mackall
|
r11744 | $ | ||
$ hg tag -r 0 globaltag | ||||
$ hg tag --remove -l globaltag | ||||
abort: tag 'globaltag' is not a local tag | ||||
Matt Mackall
|
r12316 | [255] | ||
Matt Mackall
|
r11744 | $ hg tags -v | ||
tip 1:a0b6fe111088 | ||||
localtag 0:bbd179dfa0a7 local | ||||
globaltag 0:bbd179dfa0a7 | ||||