Mercurial > hg
view tests/test-tag.t @ 19646:335a558f81dc stable 2.7.1
tags: write tag overwriting history also into tag cache file (issue3911)
Before this patch, tag overwriting history is not written into tag
cache file ".hg/cache/tags".
This may give higher priority to local tag than global one, even if
the former is overwritten by the latter, because tag overwriting
history is used to compare priorities of them (as "rank").
In such cases, "hg tags" invocations using tag cache file shows
incorrect tag information.
This patch writes tag overwriting history also into tag cache file.
author | FUJIWARA Katsunori <foozy@lares.dti.ne.jp> |
---|---|
date | Wed, 28 Aug 2013 22:09:53 +0900 |
parents | a91894c8064a |
children | bcfc4f625e57 |
line wrap: on
line source
$ hg init test $ cd test $ echo a > a $ hg add a $ hg commit -m "test" $ hg history changeset: 0:acb14030fe0a tag: tip user: test date: Thu Jan 01 00:00:00 1970 +0000 summary: test $ hg tag ' ' abort: tag names cannot consist entirely of whitespace [255] $ hg tag "bleah" $ hg history changeset: 1:d4f0d2909abc tag: tip user: test date: Thu Jan 01 00:00:00 1970 +0000 summary: Added tag bleah for changeset acb14030fe0a changeset: 0:acb14030fe0a tag: bleah user: test date: Thu Jan 01 00:00:00 1970 +0000 summary: test $ echo foo >> .hgtags $ hg tag "bleah2" abort: working copy of .hgtags is changed (please commit .hgtags manually) [255] $ hg revert .hgtags $ hg tag -r 0 x y z y y z abort: tag names must be unique [255] $ hg tag tap nada dot tip abort: the name 'tip' is reserved [255] $ hg tag . abort: the name '.' is reserved [255] $ hg tag null abort: the name 'null' is reserved [255] $ hg tag "bleah" abort: tag 'bleah' already exists (use -f to force) [255] $ hg tag "blecch" "bleah" abort: tag 'bleah' already exists (use -f to force) [255] $ hg tag --remove "blecch" abort: tag 'blecch' does not exist [255] $ hg tag --remove "bleah" "blecch" "blough" abort: tag 'blecch' does not exist [255] $ hg tag -r 0 "bleah0" $ hg tag -l -r 1 "bleah1" $ hg tag gack gawk gorp $ hg tag -f gack $ hg tag --remove gack gorp $ hg tag "bleah " abort: tag 'bleah' already exists (use -f to force) [255] $ hg tag " bleah" abort: tag 'bleah' already exists (use -f to force) [255] $ hg tag " bleah" abort: tag 'bleah' already exists (use -f to force) [255] $ hg tag -r 0 " bleahbleah " $ hg tag -r 0 " bleah bleah " $ cat .hgtags acb14030fe0a21b60322c440ad2d20cf7685a376 bleah acb14030fe0a21b60322c440ad2d20cf7685a376 bleah0 336fccc858a4eb69609a291105009e484a6b6b8d gack 336fccc858a4eb69609a291105009e484a6b6b8d gawk 336fccc858a4eb69609a291105009e484a6b6b8d gorp 336fccc858a4eb69609a291105009e484a6b6b8d gack 799667b6f2d9b957f73fa644a918c2df22bab58f gack 799667b6f2d9b957f73fa644a918c2df22bab58f gack 0000000000000000000000000000000000000000 gack 336fccc858a4eb69609a291105009e484a6b6b8d gorp 0000000000000000000000000000000000000000 gorp acb14030fe0a21b60322c440ad2d20cf7685a376 bleahbleah acb14030fe0a21b60322c440ad2d20cf7685a376 bleah bleah $ cat .hg/localtags d4f0d2909abc9290e2773c08837d70c1794e3f5a bleah1 tagging on a non-head revision $ hg update 0 0 files updated, 0 files merged, 1 files removed, 0 files unresolved $ hg tag -l localblah $ hg tag "foobar" abort: not at a branch head (use -f to force) [255] $ hg tag -f "foobar" $ cat .hgtags acb14030fe0a21b60322c440ad2d20cf7685a376 foobar $ cat .hg/localtags d4f0d2909abc9290e2773c08837d70c1794e3f5a bleah1 acb14030fe0a21b60322c440ad2d20cf7685a376 localblah $ hg tag -l 'xx > newline' abort: '\n' cannot be used in a name [255] $ hg tag -l 'xx:xx' abort: ':' cannot be used in a name [255] cloning local tags $ cd .. $ hg -R test log -r0:5 changeset: 0:acb14030fe0a tag: bleah tag: bleah bleah tag: bleah0 tag: bleahbleah tag: foobar tag: localblah user: test date: Thu Jan 01 00:00:00 1970 +0000 summary: test changeset: 1:d4f0d2909abc tag: bleah1 user: test date: Thu Jan 01 00:00:00 1970 +0000 summary: Added tag bleah for changeset acb14030fe0a changeset: 2:336fccc858a4 tag: gawk user: test date: Thu Jan 01 00:00:00 1970 +0000 summary: Added tag bleah0 for changeset acb14030fe0a changeset: 3:799667b6f2d9 user: test date: Thu Jan 01 00:00:00 1970 +0000 summary: Added tag gack, gawk, gorp for changeset 336fccc858a4 changeset: 4:154eeb7c0138 user: test date: Thu Jan 01 00:00:00 1970 +0000 summary: Added tag gack for changeset 799667b6f2d9 changeset: 5:b4bb47aaff09 user: test date: Thu Jan 01 00:00:00 1970 +0000 summary: Removed tag gack, gorp $ hg clone -q -rbleah1 test test1 $ hg -R test1 parents --style=compact 1[tip] d4f0d2909abc 1970-01-01 00:00 +0000 test Added tag bleah for changeset acb14030fe0a $ hg clone -q -r5 test#bleah1 test2 $ hg -R test2 parents --style=compact 5[tip] b4bb47aaff09 1970-01-01 00:00 +0000 test Removed tag gack, gorp $ hg clone -q -U test#bleah1 test3 $ hg -R test3 parents --style=compact $ cd test Issue601: hg tag doesn't do the right thing if .hgtags or localtags doesn't end with EOL $ python << EOF > f = file('.hg/localtags'); last = f.readlines()[-1][:-1]; f.close() > f = file('.hg/localtags', 'w'); f.write(last); f.close() > EOF $ cat .hg/localtags; echo acb14030fe0a21b60322c440ad2d20cf7685a376 localblah $ hg tag -l localnewline $ cat .hg/localtags; echo acb14030fe0a21b60322c440ad2d20cf7685a376 localblah c2899151f4e76890c602a2597a650a72666681bf localnewline $ python << EOF > f = file('.hgtags'); last = f.readlines()[-1][:-1]; f.close() > f = file('.hgtags', 'w'); f.write(last); f.close() > EOF $ hg ci -m'broken manual edit of .hgtags' $ cat .hgtags; echo acb14030fe0a21b60322c440ad2d20cf7685a376 foobar $ hg tag newline $ cat .hgtags; echo acb14030fe0a21b60322c440ad2d20cf7685a376 foobar a0eea09de1eeec777b46f2085260a373b2fbc293 newline tag and branch using same name $ hg branch tag-and-branch-same-name marked working directory as branch tag-and-branch-same-name (branches are permanent and global, did you want a bookmark?) $ hg ci -m"discouraged" $ hg tag tag-and-branch-same-name warning: tag tag-and-branch-same-name conflicts with existing branch name test custom commit messages $ cat > editor.sh << '__EOF__' > echo "custom tag message" > "$1" > echo "second line" >> "$1" > __EOF__ $ HGEDITOR="\"sh\" \"`pwd`/editor.sh\"" hg tag custom-tag -e $ hg log -l1 --template "{desc}\n" custom tag message second line local tag with .hgtags modified $ hg tag hgtags-modified $ hg rollback repository tip rolled back to revision 13 (undo commit) working directory now based on revision 13 $ hg st M .hgtags ? .hgtags.orig ? editor.sh $ hg tag --local baz $ hg revert --no-backup .hgtags tagging when at named-branch-head that's not a topo-head $ hg up default 1 files updated, 0 files merged, 0 files removed, 0 files unresolved $ hg merge -t internal:local 0 files updated, 1 files merged, 0 files removed, 0 files unresolved (branch merge, don't forget to commit) $ hg ci -m 'merge named branch' $ hg up 13 1 files updated, 0 files merged, 0 files removed, 0 files unresolved $ hg tag new-topo-head tagging on null rev $ hg up null 0 files updated, 0 files merged, 2 files removed, 0 files unresolved $ hg tag nullrev abort: not at a branch head (use -f to force) [255] $ hg init empty $ hg tag -R empty nullrev abort: cannot tag null revision [255] $ hg tag -R empty -r 00000000000 -f nulltag abort: cannot tag null revision [255] $ cd .. tagging on an uncommitted merge (issue2542) $ hg init repo-tag-uncommitted-merge $ cd repo-tag-uncommitted-merge $ echo c1 > f1 $ hg ci -Am0 adding f1 $ echo c2 > f2 $ hg ci -Am1 adding f2 $ hg co -q 0 $ hg branch b1 marked working directory as branch b1 (branches are permanent and global, did you want a bookmark?) $ hg ci -m2 $ hg up default 1 files updated, 0 files merged, 0 files removed, 0 files unresolved $ hg merge b1 0 files updated, 0 files merged, 0 files removed, 0 files unresolved (branch merge, don't forget to commit) $ hg tag t1 abort: uncommitted merge [255] $ hg status $ hg tag --rev 1 t2 abort: uncommitted merge [255] $ hg tag --rev 1 --local t3 $ hg tags -v tip 2:2a156e8887cc t3 1:c3adabd1a5f4 local $ cd .. commit hook on tag used to be run without write lock - issue3344 $ hg init repo-tag $ touch repo-tag/test $ hg -R repo-tag commit -A -m "test" adding test $ hg init repo-tag-target $ hg -R repo-tag --config hooks.commit="\"hg\" push \"`pwd`/repo-tag-target\"" tag tag pushing to $TESTTMP/repo-tag-target (glob) searching for changes adding changesets adding manifests adding file changes added 2 changesets with 2 changes to 2 files