test-bookmarks.t
1261 lines
| 34.5 KiB
| text/troff
|
Tads3Lexer
/ tests / test-bookmarks.t
|
r34709 | |||
|
r31051 | $ hg init repo | ||
$ cd repo | ||||
|
r11861 | |||
|
r34939 | $ cat > $TESTTMP/hook.sh <<'EOF' | ||
> echo "test-hook-bookmark: $HG_BOOKMARK: $HG_OLDNODE -> $HG_NODE" | ||||
> EOF | ||||
$ TESTHOOK="hooks.txnclose-bookmark.test=sh $TESTTMP/hook.sh" | ||||
|
r34709 | |||
|
r11861 | no bookmarks | ||
$ hg bookmarks | ||||
no bookmarks set | ||||
|
r22776 | $ hg bookmarks -Tjson | ||
[ | ||||
] | ||||
|
r11861 | bookmark rev -1 | ||
|
r34709 | $ hg bookmark X --config "$TESTHOOK" | ||
test-hook-bookmark: X: -> 0000000000000000000000000000000000000000 | ||||
|
r11861 | |||
list bookmarks | ||||
$ hg bookmarks | ||||
* X -1:000000000000 | ||||
list bookmarks with color | ||||
$ hg --config extensions.color= --config color.mode=ansi \ | ||||
> bookmarks --color=always | ||||
|
r22775 | \x1b[0;32m * \x1b[0m\x1b[0;32mX\x1b[0m\x1b[0;32m -1:000000000000\x1b[0m (esc) | ||
|
r11861 | |||
$ echo a > a | ||||
$ hg add a | ||||
|
r34709 | $ hg commit -m 0 --config "$TESTHOOK" | ||
test-hook-bookmark: X: 0000000000000000000000000000000000000000 -> f7b1eb17ad24730a1651fccd46c43826d1bbc2ac | ||||
|
r11861 | |||
bookmark X moved to rev 0 | ||||
$ hg bookmarks | ||||
* X 0:f7b1eb17ad24 | ||||
look up bookmark | ||||
$ hg log -r X | ||||
changeset: 0:f7b1eb17ad24 | ||||
|
r13386 | bookmark: X | ||
|
r11861 | tag: tip | ||
user: test | ||||
date: Thu Jan 01 00:00:00 1970 +0000 | ||||
summary: 0 | ||||
|
r18075 | second bookmark for rev 0, command should work even with ui.strict on | ||
|
r11861 | |||
|
r34709 | $ hg --config ui.strict=1 bookmark X2 --config "$TESTHOOK" | ||
test-hook-bookmark: X2: -> f7b1eb17ad24730a1651fccd46c43826d1bbc2ac | ||||
|
r11861 | |||
bookmark rev -1 again | ||||
$ hg bookmark -r null Y | ||||
list bookmarks | ||||
$ hg bookmarks | ||||
|
r13416 | X 0:f7b1eb17ad24 | ||
|
r13448 | * X2 0:f7b1eb17ad24 | ||
|
r11861 | Y -1:000000000000 | ||
|
r39789 | $ hg bookmarks -l | ||
X 0:f7b1eb17ad24 | ||||
* X2 0:f7b1eb17ad24 | ||||
Y -1:000000000000 | ||||
$ hg bookmarks -l X Y | ||||
X 0:f7b1eb17ad24 | ||||
Y -1:000000000000 | ||||
$ hg bookmarks -l . | ||||
* X2 0:f7b1eb17ad24 | ||||
$ hg bookmarks -l X A Y | ||||
abort: bookmark 'A' does not exist | ||||
|
r46525 | [10] | ||
|
r39789 | $ hg bookmarks -l -r0 | ||
|
r44353 | abort: cannot specify both --list and --rev | ||
|
r46431 | [10] | ||
|
r39789 | $ hg bookmarks -l --inactive | ||
|
r44354 | abort: cannot specify both --inactive and --list | ||
|
r46431 | [10] | ||
|
r39789 | |||
|
r37869 | $ hg log -T '{bookmarks % "{rev} {bookmark}\n"}' | ||
0 X | ||||
0 X2 | ||||
|
r11861 | |||
$ echo b > b | ||||
$ hg add b | ||||
|
r34709 | $ hg commit -m 1 --config "$TESTHOOK" | ||
test-hook-bookmark: X2: f7b1eb17ad24730a1651fccd46c43826d1bbc2ac -> 925d80f479bb026b0fb3deb27503780b13f74123 | ||||
|
r11861 | |||
|
r38556 | $ hg bookmarks -T '{rev}:{node|shortest} {bookmark} {desc|firstline}\n' | ||
0:f7b1 X 0 | ||||
1:925d X2 1 | ||||
-1:0000 Y | ||||
|
r22776 | $ hg bookmarks -Tjson | ||
[ | ||||
{ | ||||
"active": false, | ||||
"bookmark": "X", | ||||
"node": "f7b1eb17ad24730a1651fccd46c43826d1bbc2ac", | ||||
"rev": 0 | ||||
}, | ||||
{ | ||||
"active": true, | ||||
"bookmark": "X2", | ||||
"node": "925d80f479bb026b0fb3deb27503780b13f74123", | ||||
"rev": 1 | ||||
}, | ||||
{ | ||||
"active": false, | ||||
"bookmark": "Y", | ||||
"node": "0000000000000000000000000000000000000000", | ||||
"rev": -1 | ||||
} | ||||
] | ||||
|
r12714 | bookmarks revset | ||
$ hg log -r 'bookmark()' | ||||
|
r13416 | changeset: 0:f7b1eb17ad24 | ||
|
r13386 | bookmark: X | ||
|
r12714 | user: test | ||
date: Thu Jan 01 00:00:00 1970 +0000 | ||||
|
r13416 | summary: 0 | ||
|
r12714 | |||
|
r13448 | changeset: 1:925d80f479bb | ||
bookmark: X2 | ||||
tag: tip | ||||
user: test | ||||
date: Thu Jan 01 00:00:00 1970 +0000 | ||||
summary: 1 | ||||
|
r12714 | $ hg log -r 'bookmark(Y)' | ||
$ hg log -r 'bookmark(X2)' | ||||
|
r13448 | changeset: 1:925d80f479bb | ||
|
r13386 | bookmark: X2 | ||
|
r13448 | tag: tip | ||
|
r12714 | user: test | ||
date: Thu Jan 01 00:00:00 1970 +0000 | ||||
|
r13448 | summary: 1 | ||
|
r12714 | |||
|
r16822 | $ hg log -r 'bookmark("re:X")' | ||
changeset: 0:f7b1eb17ad24 | ||||
bookmark: X | ||||
user: test | ||||
date: Thu Jan 01 00:00:00 1970 +0000 | ||||
summary: 0 | ||||
changeset: 1:925d80f479bb | ||||
bookmark: X2 | ||||
tag: tip | ||||
user: test | ||||
date: Thu Jan 01 00:00:00 1970 +0000 | ||||
summary: 1 | ||||
|
r22105 | $ hg log -r 'bookmark("literal:X")' | ||
changeset: 0:f7b1eb17ad24 | ||||
bookmark: X | ||||
user: test | ||||
date: Thu Jan 01 00:00:00 1970 +0000 | ||||
summary: 0 | ||||
|
r39339 | "." is expanded to the active bookmark: | ||
$ hg log -r 'bookmark(.)' | ||||
changeset: 1:925d80f479bb | ||||
bookmark: X2 | ||||
tag: tip | ||||
user: test | ||||
date: Thu Jan 01 00:00:00 1970 +0000 | ||||
summary: 1 | ||||
but "literal:." is not since "." seems not a literal bookmark: | ||||
$ hg log -r 'bookmark("literal:.")' | ||||
|
r46518 | abort: bookmark '.' does not exist | ||
|
r39339 | [255] | ||
"." should fail if there's no active bookmark: | ||||
$ hg bookmark --inactive | ||||
$ hg log -r 'bookmark(.)' | ||||
|
r46518 | abort: no active bookmark | ||
|
r39339 | [255] | ||
$ hg log -r 'present(bookmark(.))' | ||||
|
r13925 | $ hg log -r 'bookmark(unknown)' | ||
|
r46518 | abort: bookmark 'unknown' does not exist | ||
|
r13925 | [255] | ||
|
r26538 | $ hg log -r 'bookmark("literal:unknown")' | ||
|
r46518 | abort: bookmark 'unknown' does not exist | ||
|
r26538 | [255] | ||
|
r23978 | $ hg log -r 'bookmark("re:unknown")' | ||
$ hg log -r 'present(bookmark("literal:unknown"))' | ||||
$ hg log -r 'present(bookmark("re:unknown"))' | ||||
|
r13925 | |||
|
r12822 | $ hg help revsets | grep 'bookmark(' | ||
"bookmark([name])" | ||||
|
r12714 | |||
|
r39339 | reactivate "X2" | ||
$ hg update X2 | ||||
0 files updated, 0 files merged, 0 files removed, 0 files unresolved | ||||
(activating bookmark X2) | ||||
|
r11861 | bookmarks X and X2 moved to rev 1, Y at rev -1 | ||
$ hg bookmarks | ||||
|
r13416 | X 0:f7b1eb17ad24 | ||
|
r13448 | * X2 1:925d80f479bb | ||
|
r11861 | Y -1:000000000000 | ||
bookmark rev 0 again | ||||
$ hg bookmark -r 0 Z | ||||
|
r13416 | $ hg update X | ||
0 files updated, 0 files merged, 1 files removed, 0 files unresolved | ||||
|
r21503 | (activating bookmark X) | ||
|
r11861 | $ echo c > c | ||
$ hg add c | ||||
$ hg commit -m 2 | ||||
|
r13416 | created new head | ||
|
r11861 | |||
|
r13416 | bookmarks X moved to rev 2, Y at rev -1, Z at rev 0 | ||
|
r11861 | |||
$ hg bookmarks | ||||
|
r13416 | * X 2:db815d6d32e6 | ||
|
r13448 | X2 1:925d80f479bb | ||
|
r13388 | Y -1:000000000000 | ||
|
r11861 | Z 0:f7b1eb17ad24 | ||
rename nonexistent bookmark | ||||
$ hg bookmark -m A B | ||||
|
r13911 | abort: bookmark 'A' does not exist | ||
|
r46525 | [10] | ||
|
r11861 | |||
rename to existent bookmark | ||||
$ hg bookmark -m X Y | ||||
|
r13911 | abort: bookmark 'Y' already exists (use -f to force) | ||
|
r12316 | [255] | ||
|
r11861 | |||
force rename to existent bookmark | ||||
$ hg bookmark -f -m X Y | ||||
|
r33901 | rename bookmark using . | ||
$ hg book rename-me | ||||
|
r34709 | $ hg book -m . renamed --config "$TESTHOOK" | ||
test-hook-bookmark: rename-me: db815d6d32e69058eadefc8cffbad37675707975 -> | ||||
test-hook-bookmark: renamed: -> db815d6d32e69058eadefc8cffbad37675707975 | ||||
|
r33901 | $ hg bookmark | ||
X2 1:925d80f479bb | ||||
Y 2:db815d6d32e6 | ||||
Z 0:f7b1eb17ad24 | ||||
* renamed 2:db815d6d32e6 | ||||
$ hg up -q Y | ||||
|
r34709 | $ hg book -d renamed --config "$TESTHOOK" | ||
test-hook-bookmark: renamed: db815d6d32e69058eadefc8cffbad37675707975 -> | ||||
|
r33901 | |||
rename bookmark using . with no active bookmark | ||||
$ hg book rename-me | ||||
$ hg book -i rename-me | ||||
$ hg book -m . renamed | ||||
|
r46518 | abort: no active bookmark | ||
|
r33901 | [255] | ||
$ hg up -q Y | ||||
$ hg book -d rename-me | ||||
|
r33914 | delete bookmark using . | ||
$ hg book delete-me | ||||
$ hg book -d . | ||||
$ hg bookmark | ||||
X2 1:925d80f479bb | ||||
Y 2:db815d6d32e6 | ||||
Z 0:f7b1eb17ad24 | ||||
$ hg up -q Y | ||||
delete bookmark using . with no active bookmark | ||||
$ hg book delete-me | ||||
$ hg book -i delete-me | ||||
$ hg book -d . | ||||
|
r46518 | abort: no active bookmark | ||
|
r33914 | [255] | ||
$ hg up -q Y | ||||
$ hg book -d delete-me | ||||
|
r11861 | list bookmarks | ||
$ hg bookmark | ||||
|
r13448 | X2 1:925d80f479bb | ||
|
r13416 | * Y 2:db815d6d32e6 | ||
|
r11861 | Z 0:f7b1eb17ad24 | ||
|
r17686 | bookmarks from a revset | ||
$ hg bookmark -r '.^1' REVSET | ||||
$ hg bookmark -r ':tip' TIP | ||||
|
r19112 | $ hg up -q TIP | ||
|
r17686 | $ hg bookmarks | ||
REVSET 0:f7b1eb17ad24 | ||||
* TIP 2:db815d6d32e6 | ||||
X2 1:925d80f479bb | ||||
Y 2:db815d6d32e6 | ||||
Z 0:f7b1eb17ad24 | ||||
$ hg bookmark -d REVSET | ||||
$ hg bookmark -d TIP | ||||
|
r19147 | rename without new name or multiple names | ||
|
r11861 | |||
$ hg bookmark -m Y | ||||
abort: new bookmark name required | ||||
|
r46431 | [10] | ||
|
r19147 | $ hg bookmark -m Y Y2 Y3 | ||
abort: only one new bookmark name allowed | ||||
|
r46431 | [10] | ||
|
r11861 | |||
delete without name | ||||
$ hg bookmark -d | ||||
abort: bookmark name required | ||||
|
r46431 | [10] | ||
|
r11861 | |||
delete nonexistent bookmark | ||||
$ hg bookmark -d A | ||||
|
r13911 | abort: bookmark 'A' does not exist | ||
|
r46525 | [10] | ||
|
r11861 | |||
|
r39788 | delete with --inactive | ||
$ hg bookmark -d --inactive Y | ||||
|
r44354 | abort: cannot specify both --inactive and --delete | ||
|
r46431 | [10] | ||
|
r39788 | |||
|
r11861 | bookmark name with spaces should be stripped | ||
$ hg bookmark ' x y ' | ||||
list bookmarks | ||||
$ hg bookmarks | ||||
|
r13448 | X2 1:925d80f479bb | ||
|
r13416 | Y 2:db815d6d32e6 | ||
|
r11861 | Z 0:f7b1eb17ad24 | ||
|
r13416 | * x y 2:db815d6d32e6 | ||
|
r37869 | $ hg log -T '{bookmarks % "{rev} {bookmark}\n"}' | ||
2 Y | ||||
2 x y | ||||
1 X2 | ||||
0 Z | ||||
|
r11861 | |||
look up stripped bookmark name | ||||
$ hg log -r '"x y"' | ||||
|
r13416 | changeset: 2:db815d6d32e6 | ||
|
r13386 | bookmark: Y | ||
bookmark: x y | ||||
|
r11861 | tag: tip | ||
|
r13416 | parent: 0:f7b1eb17ad24 | ||
|
r11861 | user: test | ||
date: Thu Jan 01 00:00:00 1970 +0000 | ||||
summary: 2 | ||||
reject bookmark name with newline | ||||
$ hg bookmark ' | ||||
> ' | ||||
|
r17814 | abort: bookmark names cannot consist entirely of whitespace | ||
|
r46525 | [10] | ||
|
r11861 | |||
|
r17789 | $ hg bookmark -m Z ' | ||
> ' | ||||
|
r17814 | abort: bookmark names cannot consist entirely of whitespace | ||
|
r46525 | [10] | ||
|
r17789 | |||
|
r17816 | bookmark with reserved name | ||
$ hg bookmark tip | ||||
abort: the name 'tip' is reserved | ||||
|
r46449 | [10] | ||
|
r17816 | |||
$ hg bookmark . | ||||
abort: the name '.' is reserved | ||||
|
r46449 | [10] | ||
|
r17816 | |||
$ hg bookmark null | ||||
abort: the name 'null' is reserved | ||||
|
r46449 | [10] | ||
|
r17816 | |||
|
r11861 | bookmark with existing name | ||
|
r18773 | $ hg bookmark X2 | ||
abort: bookmark 'X2' already exists (use -f to force) | ||||
|
r12316 | [255] | ||
|
r11861 | |||
|
r17789 | $ hg bookmark -m Y Z | ||
abort: bookmark 'Z' already exists (use -f to force) | ||||
[255] | ||||
bookmark with name of branch | ||||
$ hg bookmark default | ||||
abort: a bookmark cannot have the name of an existing branch | ||||
[255] | ||||
$ hg bookmark -m Y default | ||||
abort: a bookmark cannot have the name of an existing branch | ||||
[255] | ||||
|
r18566 | bookmark with integer name | ||
$ hg bookmark 10 | ||||
|
r19070 | abort: cannot use an integer as a name | ||
|
r46449 | [10] | ||
|
r18566 | |||
|
r32451 | bookmark with a name that matches a node id | ||
|
r34709 | $ hg bookmark 925d80f479bb db815d6d32e6 --config "$TESTHOOK" | ||
|
r32451 | bookmark 925d80f479bb matches a changeset hash | ||
(did you leave a -r out of an 'hg bookmark' command?) | ||||
bookmark db815d6d32e6 matches a changeset hash | ||||
(did you leave a -r out of an 'hg bookmark' command?) | ||||
|
r34709 | test-hook-bookmark: 925d80f479bb: -> db815d6d32e69058eadefc8cffbad37675707975 | ||
test-hook-bookmark: db815d6d32e6: -> db815d6d32e69058eadefc8cffbad37675707975 | ||||
|
r32451 | $ hg bookmark -d 925d80f479bb | ||
$ hg bookmark -d db815d6d32e6 | ||||
|
r32482 | $ cd .. | ||
bookmark with a name that matches an ambiguous node id | ||||
$ hg init ambiguous | ||||
$ cd ambiguous | ||||
$ echo 0 > a | ||||
$ hg ci -qAm 0 | ||||
$ for i in 1057 2857 4025; do | ||||
> hg up -q 0 | ||||
> echo $i > a | ||||
> hg ci -qm $i | ||||
> done | ||||
$ hg up -q null | ||||
$ hg log -r0: -T '{rev}:{node}\n' | ||||
0:b4e73ffab476aa0ee32ed81ca51e07169844bc6a | ||||
1:c56256a09cd28e5764f32e8e2810d0f01e2e357a | ||||
2:c5623987d205cd6d9d8389bfc40fff9dbb670b48 | ||||
3:c562ddd9c94164376c20b86b0b4991636a3bf84f | ||||
$ hg bookmark -r0 c562 | ||||
$ hg bookmarks | ||||
c562 0:b4e73ffab476 | ||||
$ cd .. | ||||
|
r17790 | incompatible options | ||
|
r32482 | $ cd repo | ||
|
r17790 | $ hg bookmark -m Y -d Z | ||
|
r44352 | abort: cannot specify both --delete and --rename | ||
|
r46431 | [10] | ||
|
r17790 | |||
$ hg bookmark -r 1 -d Z | ||||
|
r44353 | abort: cannot specify both --delete and --rev | ||
|
r46431 | [10] | ||
|
r17790 | |||
$ hg bookmark -r 1 -m Z Y | ||||
|
r44353 | abort: cannot specify both --rename and --rev | ||
|
r46431 | [10] | ||
|
r17790 | |||
|
r11861 | force bookmark with existing name | ||
|
r34709 | $ hg bookmark -f X2 --config "$TESTHOOK" | ||
test-hook-bookmark: X2: 925d80f479bb026b0fb3deb27503780b13f74123 -> db815d6d32e69058eadefc8cffbad37675707975 | ||||
|
r18782 | |||
force bookmark back to where it was, should deactivate it | ||||
|
r18773 | $ hg bookmark -fr1 X2 | ||
|
r18782 | $ hg bookmarks | ||
X2 1:925d80f479bb | ||||
Y 2:db815d6d32e6 | ||||
Z 0:f7b1eb17ad24 | ||||
x y 2:db815d6d32e6 | ||||
|
r18773 | |||
forward bookmark to descendant without --force | ||||
$ hg bookmark Z | ||||
|
r18774 | moving bookmark 'Z' forward from f7b1eb17ad24 | ||
|
r11861 | |||
list bookmarks | ||||
$ hg bookmark | ||||
|
r13448 | X2 1:925d80f479bb | ||
|
r13416 | Y 2:db815d6d32e6 | ||
* Z 2:db815d6d32e6 | ||||
x y 2:db815d6d32e6 | ||||
|
r37869 | $ hg log -T '{bookmarks % "{rev} {bookmark}\n"}' | ||
2 Y | ||||
2 Z | ||||
2 x y | ||||
1 X2 | ||||
|
r11861 | |||
revision but no bookmark name | ||||
$ hg bookmark -r . | ||||
abort: bookmark name required | ||||
|
r46431 | [10] | ||
|
r11861 | |||
bookmark name with whitespace only | ||||
$ hg bookmark ' ' | ||||
abort: bookmark names cannot consist entirely of whitespace | ||||
|
r46525 | [10] | ||
|
r13425 | |||
|
r17789 | $ hg bookmark -m Y ' ' | ||
abort: bookmark names cannot consist entirely of whitespace | ||||
|
r46525 | [10] | ||
|
r17789 | |||
|
r13425 | invalid bookmark | ||
$ hg bookmark 'foo:bar' | ||||
|
r17850 | abort: ':' cannot be used in a name | ||
|
r46449 | [10] | ||
|
r17821 | |||
$ hg bookmark 'foo | ||||
> bar' | ||||
|
r17850 | abort: '\n' cannot be used in a name | ||
|
r46449 | [10] | ||
|
r13425 | |||
|
r13474 | the bookmark extension should be ignored now that it is part of core | ||
$ echo "[extensions]" >> $HGRCPATH | ||||
$ echo "bookmarks=" >> $HGRCPATH | ||||
$ hg bookmarks | ||||
X2 1:925d80f479bb | ||||
Y 2:db815d6d32e6 | ||||
* Z 2:db815d6d32e6 | ||||
x y 2:db815d6d32e6 | ||||
|
r14266 | |||
|
r13454 | test summary | ||
$ hg summary | ||||
|
r14906 | parent: 2:db815d6d32e6 tip | ||
|
r13454 | 2 | ||
branch: default | ||||
|
r14906 | bookmarks: *Z Y x y | ||
|
r13454 | commit: (clean) | ||
update: 1 new changesets, 2 branch heads (merge) | ||||
|
r25382 | phases: 3 draft | ||
|
r13454 | |||
|
r13477 | test id | ||
$ hg id | ||||
db815d6d32e6 tip Y/Z/x y | ||||
|
r14266 | |||
test rollback | ||||
|
r14268 | $ echo foo > f1 | ||
|
r25744 | $ hg bookmark tmp-rollback | ||
|
r14268 | $ hg ci -Amr | ||
adding f1 | ||||
|
r25744 | $ hg bookmarks | ||
X2 1:925d80f479bb | ||||
Y 2:db815d6d32e6 | ||||
Z 2:db815d6d32e6 | ||||
* tmp-rollback 3:2bf5cfec5864 | ||||
x y 2:db815d6d32e6 | ||||
|
r14266 | $ hg rollback | ||
|
r14268 | repository tip rolled back to revision 2 (undo commit) | ||
working directory now based on revision 2 | ||||
$ hg bookmarks | ||||
X2 1:925d80f479bb | ||||
Y 2:db815d6d32e6 | ||||
|
r18782 | Z 2:db815d6d32e6 | ||
|
r25744 | * tmp-rollback 2:db815d6d32e6 | ||
|
r14268 | x y 2:db815d6d32e6 | ||
|
r25744 | $ hg bookmark -f Z -r 1 | ||
$ hg rollback | ||||
repository tip rolled back to revision 2 (undo bookmark) | ||||
$ hg bookmarks | ||||
X2 1:925d80f479bb | ||||
Y 2:db815d6d32e6 | ||||
Z 2:db815d6d32e6 | ||||
* tmp-rollback 2:db815d6d32e6 | ||||
x y 2:db815d6d32e6 | ||||
$ hg bookmark -d tmp-rollback | ||||
|
r14268 | |||
|
r18781 | activate bookmark on working dir parent without --force | ||
$ hg bookmark --inactive Z | ||||
$ hg bookmark Z | ||||
|
r43996 | deactivate current 'Z', but also add 'Y' | ||
$ hg bookmark -d Y | ||||
$ hg bookmark --inactive Z Y | ||||
$ hg bookmark -l | ||||
X2 1:925d80f479bb | ||||
Y 2:db815d6d32e6 | ||||
Z 2:db815d6d32e6 | ||||
x y 2:db815d6d32e6 | ||||
$ hg bookmark Z | ||||
|
r43999 | bookmark wdir to activate it (issue6218) | ||
$ hg bookmark -d Z | ||||
$ hg bookmark -r 'wdir()' Z | ||||
$ hg bookmark -l | ||||
X2 1:925d80f479bb | ||||
Y 2:db815d6d32e6 | ||||
* Z 2:db815d6d32e6 | ||||
x y 2:db815d6d32e6 | ||||
|
r13604 | test clone | ||
|
r16276 | $ hg bookmark -r 2 -i @ | ||
$ hg bookmark -r 2 -i a@ | ||||
|
r14266 | $ hg bookmarks | ||
|
r16276 | @ 2:db815d6d32e6 | ||
|
r13604 | X2 1:925d80f479bb | ||
Y 2:db815d6d32e6 | ||||
* Z 2:db815d6d32e6 | ||||
|
r16276 | a@ 2:db815d6d32e6 | ||
|
r13604 | x y 2:db815d6d32e6 | ||
$ hg clone . cloned-bookmarks | ||||
|
r17882 | updating to bookmark @ | ||
|
r13604 | 2 files updated, 0 files merged, 0 files removed, 0 files unresolved | ||
$ hg -R cloned-bookmarks bookmarks | ||||
|
r17870 | * @ 2:db815d6d32e6 | ||
|
r13604 | X2 1:925d80f479bb | ||
Y 2:db815d6d32e6 | ||||
Z 2:db815d6d32e6 | ||||
|
r16276 | a@ 2:db815d6d32e6 | ||
|
r13604 | x y 2:db815d6d32e6 | ||
test clone with pull protocol | ||||
$ hg clone --pull . cloned-bookmarks-pull | ||||
requesting all changes | ||||
adding changesets | ||||
adding manifests | ||||
adding file changes | ||||
added 3 changesets with 3 changes to 3 files (+1 heads) | ||||
|
r34662 | new changesets f7b1eb17ad24:db815d6d32e6 | ||
|
r17882 | updating to bookmark @ | ||
|
r13604 | 2 files updated, 0 files merged, 0 files removed, 0 files unresolved | ||
$ hg -R cloned-bookmarks-pull bookmarks | ||||
|
r17870 | * @ 2:db815d6d32e6 | ||
|
r14266 | X2 1:925d80f479bb | ||
|
r13604 | Y 2:db815d6d32e6 | ||
Z 2:db815d6d32e6 | ||||
|
r16276 | a@ 2:db815d6d32e6 | ||
|
r13604 | x y 2:db815d6d32e6 | ||
|
r19147 | delete multiple bookmarks at once | ||
$ hg bookmark -d @ a@ | ||||
|
r16276 | |||
|
r17868 | test clone with a bookmark named "default" (issue3677) | ||
$ hg bookmark -r 1 -f -i default | ||||
$ hg clone . cloned-bookmark-default | ||||
updating to branch default | ||||
2 files updated, 0 files merged, 0 files removed, 0 files unresolved | ||||
$ hg -R cloned-bookmark-default bookmarks | ||||
X2 1:925d80f479bb | ||||
Y 2:db815d6d32e6 | ||||
Z 2:db815d6d32e6 | ||||
default 1:925d80f479bb | ||||
x y 2:db815d6d32e6 | ||||
$ hg -R cloned-bookmark-default parents -q | ||||
2:db815d6d32e6 | ||||
$ hg bookmark -d default | ||||
|
r13604 | test clone with a specific revision | ||
$ hg clone -r 925d80 . cloned-bookmarks-rev | ||||
adding changesets | ||||
adding manifests | ||||
adding file changes | ||||
added 2 changesets with 2 changes to 2 files | ||||
|
r34662 | new changesets f7b1eb17ad24:925d80f479bb | ||
|
r13604 | updating to branch default | ||
2 files updated, 0 files merged, 0 files removed, 0 files unresolved | ||||
$ hg -R cloned-bookmarks-rev bookmarks | ||||
X2 1:925d80f479bb | ||||
|
r13663 | |||
|
r17703 | test clone with update to a bookmark | ||
|
r25893 | $ hg clone -u Z . ../cloned-bookmarks-update | ||
|
r17703 | updating to branch default | ||
2 files updated, 0 files merged, 0 files removed, 0 files unresolved | ||||
|
r25893 | $ hg -R ../cloned-bookmarks-update bookmarks | ||
|
r17703 | X2 1:925d80f479bb | ||
Y 2:db815d6d32e6 | ||||
* Z 2:db815d6d32e6 | ||||
x y 2:db815d6d32e6 | ||||
|
r13663 | create bundle with two heads | ||
$ hg clone . tobundle | ||||
updating to branch default | ||||
2 files updated, 0 files merged, 0 files removed, 0 files unresolved | ||||
$ echo x > tobundle/x | ||||
$ hg -R tobundle add tobundle/x | ||||
$ hg -R tobundle commit -m'x' | ||||
$ hg -R tobundle update -r -2 | ||||
0 files updated, 0 files merged, 1 files removed, 0 files unresolved | ||||
$ echo y > tobundle/y | ||||
$ hg -R tobundle branch test | ||||
marked working directory as branch test | ||||
|
r15615 | (branches are permanent and global, did you want a bookmark?) | ||
|
r13663 | $ hg -R tobundle add tobundle/y | ||
$ hg -R tobundle commit -m'y' | ||||
$ hg -R tobundle bundle tobundle.hg | ||||
searching for changes | ||||
2 changesets found | ||||
$ hg unbundle tobundle.hg | ||||
adding changesets | ||||
adding manifests | ||||
adding file changes | ||||
added 2 changesets with 2 changes to 2 files (+1 heads) | ||||
|
r39516 | new changesets 125c9a1d6df6:9ba5f110a0b3 (2 drafts) | ||
|
r13663 | (run 'hg heads' to see heads, 'hg merge' to merge) | ||
|
r18471 | |||
|
r25349 | update to active bookmark if it's not the parent | ||
|
r18471 | |||
|
r33210 | (it is known issue that fsmonitor can't handle nested repositories. In | ||
this test scenario, cloned-bookmark-default and tobundle exist in the | ||||
working directory of current repository) | ||||
|
r18620 | $ hg summary | ||
parent: 2:db815d6d32e6 | ||||
2 | ||||
branch: default | ||||
|
r22091 | bookmarks: *Z Y x y | ||
|
r33210 | commit: 1 added, 1 unknown (new branch head) (no-fsmonitor !) | ||
commit: 1 added, * unknown (new branch head) (glob) (fsmonitor !) | ||||
|
r18620 | update: 2 new changesets (update) | ||
|
r25382 | phases: 5 draft | ||
|
r13663 | $ hg update | ||
1 files updated, 0 files merged, 0 files removed, 0 files unresolved | ||||
|
r22091 | updating bookmark Z | ||
|
r13663 | $ hg bookmarks | ||
X2 1:925d80f479bb | ||||
Y 2:db815d6d32e6 | ||||
* Z 3:125c9a1d6df6 | ||||
x y 2:db815d6d32e6 | ||||
|
r19523 | pull --update works the same as pull && update | ||
$ hg bookmark -r3 Y | ||||
moving bookmark 'Y' forward from db815d6d32e6 | ||||
|
r30556 | $ cp -R ../cloned-bookmarks-update ../cloned-bookmarks-manual-update | ||
$ cp -R ../cloned-bookmarks-update ../cloned-bookmarks-manual-update-with-divergence | ||||
|
r26285 | |||
(manual version) | ||||
$ hg -R ../cloned-bookmarks-manual-update update Y | ||||
0 files updated, 0 files merged, 0 files removed, 0 files unresolved | ||||
(activating bookmark Y) | ||||
$ hg -R ../cloned-bookmarks-manual-update pull . | ||||
pulling from . | ||||
searching for changes | ||||
adding changesets | ||||
adding manifests | ||||
adding file changes | ||||
updating bookmark Y | ||||
updating bookmark Z | ||||
r43167 | added 2 changesets with 2 changes to 2 files (+1 heads) | |||
|
r34662 | new changesets 125c9a1d6df6:9ba5f110a0b3 | ||
|
r26285 | (run 'hg heads' to see heads, 'hg merge' to merge) | ||
|
r26286 | |||
(# tests strange but with --date crashing when bookmark have to move) | ||||
$ hg -R ../cloned-bookmarks-manual-update update -d 1986 | ||||
abort: revision matching date not found | ||||
|
r46431 | [10] | ||
|
r26285 | $ hg -R ../cloned-bookmarks-manual-update update | ||
updating to active bookmark Y | ||||
1 files updated, 0 files merged, 0 files removed, 0 files unresolved | ||||
(all in one version) | ||||
|
r25893 | $ hg -R ../cloned-bookmarks-update update Y | ||
|
r19523 | 0 files updated, 0 files merged, 0 files removed, 0 files unresolved | ||
|
r21503 | (activating bookmark Y) | ||
|
r25893 | $ hg -R ../cloned-bookmarks-update pull --update . | ||
|
r19523 | pulling from . | ||
searching for changes | ||||
adding changesets | ||||
adding manifests | ||||
adding file changes | ||||
updating bookmark Y | ||||
updating bookmark Z | ||||
r43167 | added 2 changesets with 2 changes to 2 files (+1 heads) | |||
|
r34662 | new changesets 125c9a1d6df6:9ba5f110a0b3 | ||
|
r19523 | updating to active bookmark Y | ||
1 files updated, 0 files merged, 0 files removed, 0 files unresolved | ||||
|
r28029 | We warn about divergent during bare update to the active bookmark | ||
$ hg -R ../cloned-bookmarks-manual-update-with-divergence update Y | ||||
0 files updated, 0 files merged, 0 files removed, 0 files unresolved | ||||
(activating bookmark Y) | ||||
$ hg -R ../cloned-bookmarks-manual-update-with-divergence bookmarks -r X2 Y@1 | ||||
$ hg -R ../cloned-bookmarks-manual-update-with-divergence bookmarks | ||||
X2 1:925d80f479bb | ||||
* Y 2:db815d6d32e6 | ||||
Y@1 1:925d80f479bb | ||||
Z 2:db815d6d32e6 | ||||
x y 2:db815d6d32e6 | ||||
$ hg -R ../cloned-bookmarks-manual-update-with-divergence pull | ||||
|
r35394 | pulling from $TESTTMP/repo | ||
|
r28029 | searching for changes | ||
adding changesets | ||||
adding manifests | ||||
adding file changes | ||||
updating bookmark Y | ||||
updating bookmark Z | ||||
r43167 | added 2 changesets with 2 changes to 2 files (+1 heads) | |||
|
r34662 | new changesets 125c9a1d6df6:9ba5f110a0b3 | ||
|
r28029 | (run 'hg heads' to see heads, 'hg merge' to merge) | ||
$ hg -R ../cloned-bookmarks-manual-update-with-divergence update | ||||
updating to active bookmark Y | ||||
1 files updated, 0 files merged, 0 files removed, 0 files unresolved | ||||
1 other divergent bookmarks for "Y" | ||||
|
r14845 | test wrongly formated bookmark | ||
$ echo '' >> .hg/bookmarks | ||||
$ hg bookmarks | ||||
X2 1:925d80f479bb | ||||
|
r19523 | Y 3:125c9a1d6df6 | ||
|
r14845 | * Z 3:125c9a1d6df6 | ||
x y 2:db815d6d32e6 | ||||
|
r14846 | $ echo "Ican'thasformatedlines" >> .hg/bookmarks | ||
$ hg bookmarks | ||||
malformed line in .hg/bookmarks: "Ican'thasformatedlines" | ||||
X2 1:925d80f479bb | ||||
|
r19523 | Y 3:125c9a1d6df6 | ||
|
r14846 | * Z 3:125c9a1d6df6 | ||
x y 2:db815d6d32e6 | ||||
|
r16573 | test missing revisions | ||
r32735 | $ echo "925d80f479b925d80f479bc925d80f479bccabab z" > .hg/bookmarks | |||
|
r16573 | $ hg book | ||
no bookmarks set | ||||
|
r17264 | |||
test stripping a non-checked-out but bookmarked revision | ||||
|
r20117 | $ hg log --graph | ||
|
r17264 | o changeset: 4:9ba5f110a0b3 | ||
| branch: test | ||||
| tag: tip | ||||
| parent: 2:db815d6d32e6 | ||||
| user: test | ||||
| date: Thu Jan 01 00:00:00 1970 +0000 | ||||
| summary: y | ||||
| | ||||
| @ changeset: 3:125c9a1d6df6 | ||||
|/ user: test | ||||
| date: Thu Jan 01 00:00:00 1970 +0000 | ||||
| summary: x | ||||
| | ||||
o changeset: 2:db815d6d32e6 | ||||
| parent: 0:f7b1eb17ad24 | ||||
| user: test | ||||
| date: Thu Jan 01 00:00:00 1970 +0000 | ||||
| summary: 2 | ||||
| | ||||
| o changeset: 1:925d80f479bb | ||||
|/ user: test | ||||
| date: Thu Jan 01 00:00:00 1970 +0000 | ||||
| summary: 1 | ||||
| | ||||
o changeset: 0:f7b1eb17ad24 | ||||
user: test | ||||
date: Thu Jan 01 00:00:00 1970 +0000 | ||||
summary: 0 | ||||
$ hg book should-end-on-two | ||||
$ hg co --clean 4 | ||||
1 files updated, 0 files merged, 1 files removed, 0 files unresolved | ||||
|
r21404 | (leaving bookmark should-end-on-two) | ||
|
r17264 | $ hg book four | ||
$ hg --config extensions.mq= strip 3 | ||||
saved backup bundle to * (glob) | ||||
should-end-on-two should end up pointing to revision 2, as that's the | ||||
tipmost surviving ancestor of the stripped revision. | ||||
|
r20117 | $ hg log --graph | ||
|
r17264 | @ changeset: 3:9ba5f110a0b3 | ||
| branch: test | ||||
| bookmark: four | ||||
| tag: tip | ||||
| user: test | ||||
| date: Thu Jan 01 00:00:00 1970 +0000 | ||||
| summary: y | ||||
| | ||||
o changeset: 2:db815d6d32e6 | ||||
| bookmark: should-end-on-two | ||||
| parent: 0:f7b1eb17ad24 | ||||
| user: test | ||||
| date: Thu Jan 01 00:00:00 1970 +0000 | ||||
| summary: 2 | ||||
| | ||||
| o changeset: 1:925d80f479bb | ||||
|/ user: test | ||||
| date: Thu Jan 01 00:00:00 1970 +0000 | ||||
| summary: 1 | ||||
| | ||||
o changeset: 0:f7b1eb17ad24 | ||||
user: test | ||||
date: Thu Jan 01 00:00:00 1970 +0000 | ||||
summary: 0 | ||||
|
r19109 | |||
|
r30332 | no-op update doesn't deactivate bookmarks | ||
|
r26676 | |||
|
r33210 | (it is known issue that fsmonitor can't handle nested repositories. In | ||
this test scenario, cloned-bookmark-default and tobundle exist in the | ||||
working directory of current repository) | ||||
|
r28500 | $ hg bookmarks | ||
* four 3:9ba5f110a0b3 | ||||
should-end-on-two 2:db815d6d32e6 | ||||
|
r28065 | $ hg up four | ||
0 files updated, 0 files merged, 0 files removed, 0 files unresolved | ||||
|
r26676 | $ hg up | ||
0 files updated, 0 files merged, 0 files removed, 0 files unresolved | ||||
$ hg sum | ||||
parent: 3:9ba5f110a0b3 tip | ||||
y | ||||
branch: test | ||||
bookmarks: *four | ||||
|
r33210 | commit: 2 unknown (clean) (no-fsmonitor !) | ||
commit: * unknown (clean) (glob) (fsmonitor !) | ||||
|
r26676 | update: (current) | ||
phases: 4 draft | ||||
|
r19109 | test clearing divergent bookmarks of linear ancestors | ||
$ hg bookmark Z -r 0 | ||||
$ hg bookmark Z@1 -r 1 | ||||
$ hg bookmark Z@2 -r 2 | ||||
$ hg bookmark Z@3 -r 3 | ||||
$ hg book | ||||
Z 0:f7b1eb17ad24 | ||||
Z@1 1:925d80f479bb | ||||
Z@2 2:db815d6d32e6 | ||||
|
r19112 | Z@3 3:9ba5f110a0b3 | ||
* four 3:9ba5f110a0b3 | ||||
|
r19109 | should-end-on-two 2:db815d6d32e6 | ||
$ hg bookmark Z | ||||
moving bookmark 'Z' forward from f7b1eb17ad24 | ||||
$ hg book | ||||
* Z 3:9ba5f110a0b3 | ||||
Z@1 1:925d80f479bb | ||||
four 3:9ba5f110a0b3 | ||||
should-end-on-two 2:db815d6d32e6 | ||||
|
r19111 | |||
test clearing only a single divergent bookmark across branches | ||||
$ hg book foo -r 1 | ||||
$ hg book foo@1 -r 0 | ||||
$ hg book foo@2 -r 2 | ||||
$ hg book foo@3 -r 3 | ||||
$ hg book foo -r foo@3 | ||||
$ hg book | ||||
|
r19112 | * Z 3:9ba5f110a0b3 | ||
|
r19111 | Z@1 1:925d80f479bb | ||
|
r19112 | foo 3:9ba5f110a0b3 | ||
|
r19111 | foo@1 0:f7b1eb17ad24 | ||
foo@2 2:db815d6d32e6 | ||||
four 3:9ba5f110a0b3 | ||||
should-end-on-two 2:db815d6d32e6 | ||||
|
r27948 | |||
pull --update works the same as pull && update (case #2) | ||||
It is assumed that "hg pull" itself doesn't update current active | ||||
bookmark ('Y' in tests below). | ||||
$ hg pull -q ../cloned-bookmarks-update | ||||
divergent bookmark Z stored as Z@2 | ||||
(pulling revision on another named branch with --update updates | ||||
neither the working directory nor current active bookmark: "no-op" | ||||
case) | ||||
$ echo yy >> y | ||||
$ hg commit -m yy | ||||
$ hg -R ../cloned-bookmarks-update bookmarks | grep ' Y ' | ||||
* Y 3:125c9a1d6df6 | ||||
r48381 | $ hg -R ../cloned-bookmarks-update path | |||
default = $TESTTMP/repo | ||||
$ pwd | ||||
$TESTTMP/repo | ||||
|
r27948 | $ hg -R ../cloned-bookmarks-update pull . --update | ||
pulling from . | ||||
searching for changes | ||||
adding changesets | ||||
adding manifests | ||||
adding file changes | ||||
divergent bookmark Z stored as Z@default | ||||
adding remote bookmark foo | ||||
adding remote bookmark four | ||||
adding remote bookmark should-end-on-two | ||||
r43167 | added 1 changesets with 1 changes to 1 files | |||
|
r34662 | new changesets 5fb12f0f2d51 | ||
|
r27948 | 0 files updated, 0 files merged, 0 files removed, 0 files unresolved | ||
$ hg -R ../cloned-bookmarks-update parents -T "{rev}:{node|short}\n" | ||||
3:125c9a1d6df6 | ||||
$ hg -R ../cloned-bookmarks-update bookmarks | grep ' Y ' | ||||
* Y 3:125c9a1d6df6 | ||||
(pulling revision on current named/topological branch with --update | ||||
updates the working directory and current active bookmark) | ||||
$ hg update -C -q 125c9a1d6df6 | ||||
$ echo xx >> x | ||||
$ hg commit -m xx | ||||
$ hg -R ../cloned-bookmarks-update bookmarks | grep ' Y ' | ||||
* Y 3:125c9a1d6df6 | ||||
$ hg -R ../cloned-bookmarks-update pull . --update | ||||
pulling from . | ||||
searching for changes | ||||
adding changesets | ||||
adding manifests | ||||
adding file changes | ||||
r43167 | divergent bookmark Z stored as Z@default | |||
|
r27948 | added 1 changesets with 1 changes to 1 files | ||
|
r34662 | new changesets 81dcce76aa0b | ||
|
r27948 | 1 files updated, 0 files merged, 0 files removed, 0 files unresolved | ||
updating bookmark Y | ||||
$ hg -R ../cloned-bookmarks-update parents -T "{rev}:{node|short}\n" | ||||
6:81dcce76aa0b | ||||
$ hg -R ../cloned-bookmarks-update bookmarks | grep ' Y ' | ||||
* Y 6:81dcce76aa0b | ||||
|
r28830 | |||
$ cd .. | ||||
ensure changelog is written before bookmarks | ||||
$ hg init orderrepo | ||||
$ cd orderrepo | ||||
$ touch a | ||||
$ hg commit -Aqm one | ||||
$ hg book mybook | ||||
$ echo a > a | ||||
$ cat > $TESTTMP/pausefinalize.py <<EOF | ||||
|
r33948 | > from __future__ import absolute_import | ||
> import os | ||||
> import time | ||||
|
r28830 | > from mercurial import extensions, localrepo | ||
> def transaction(orig, self, desc, report=None): | ||||
> tr = orig(self, desc, report) | ||||
> def sleep(*args, **kwargs): | ||||
> retry = 20 | ||||
|
r36588 | > while retry > 0 and not os.path.exists(b"$TESTTMP/unpause"): | ||
|
r28830 | > retry -= 1 | ||
> time.sleep(0.5) | ||||
|
r36588 | > if os.path.exists(b"$TESTTMP/unpause"): | ||
> os.remove(b"$TESTTMP/unpause") | ||||
|
r28830 | > # It is important that this finalizer start with 'a', so it runs before | ||
> # the changelog finalizer appends to the changelog. | ||||
|
r36588 | > tr.addfinalize(b'a-sleep', sleep) | ||
|
r28830 | > return tr | ||
> | ||||
> def extsetup(ui): | ||||
> # This extension inserts an artifical pause during the transaction | ||||
> # finalizer, so we can run commands mid-transaction-close. | ||||
> extensions.wrapfunction(localrepo.localrepository, 'transaction', | ||||
> transaction) | ||||
> EOF | ||||
$ hg commit -qm two --config extensions.pausefinalize=$TESTTMP/pausefinalize.py & | ||||
$ sleep 2 | ||||
$ hg log -r . | ||||
changeset: 0:867bc5792c8c | ||||
bookmark: mybook | ||||
tag: tip | ||||
user: test | ||||
date: Thu Jan 01 00:00:00 1970 +0000 | ||||
summary: one | ||||
$ hg bookmarks | ||||
* mybook 0:867bc5792c8c | ||||
$ touch $TESTTMP/unpause | ||||
$ cd .. | ||||
|
r31052 | |||
check whether HG_PENDING makes pending changes only in related | ||||
repositories visible to an external hook. | ||||
(emulate a transaction running concurrently by copied | ||||
.hg/bookmarks.pending in subsequent test) | ||||
$ cat > $TESTTMP/savepending.sh <<EOF | ||||
> cp .hg/bookmarks.pending .hg/bookmarks.pending.saved | ||||
> exit 1 # to avoid adding new bookmark for subsequent tests | ||||
> EOF | ||||
$ hg init unrelated | ||||
$ cd unrelated | ||||
$ echo a > a | ||||
$ hg add a | ||||
$ hg commit -m '#0' | ||||
$ hg --config hooks.pretxnclose="sh $TESTTMP/savepending.sh" bookmarks INVISIBLE | ||||
transaction abort! | ||||
rollback completed | ||||
abort: pretxnclose hook exited with status 1 | ||||
|
r47145 | [40] | ||
|
r31052 | $ cp .hg/bookmarks.pending.saved .hg/bookmarks.pending | ||
(check visible bookmarks while transaction running in repo) | ||||
$ cat > $TESTTMP/checkpending.sh <<EOF | ||||
> echo "@repo" | ||||
|
r31767 | > hg -R "$TESTTMP/repo" bookmarks | ||
|
r31052 | > echo "@unrelated" | ||
|
r31767 | > hg -R "$TESTTMP/unrelated" bookmarks | ||
|
r31052 | > exit 1 # to avoid adding new bookmark for subsequent tests | ||
> EOF | ||||
$ cd ../repo | ||||
$ hg --config hooks.pretxnclose="sh $TESTTMP/checkpending.sh" bookmarks NEW | ||||
@repo | ||||
* NEW 6:81dcce76aa0b | ||||
X2 1:925d80f479bb | ||||
Y 4:125c9a1d6df6 | ||||
Z 5:5fb12f0f2d51 | ||||
Z@1 1:925d80f479bb | ||||
Z@2 4:125c9a1d6df6 | ||||
foo 3:9ba5f110a0b3 | ||||
foo@1 0:f7b1eb17ad24 | ||||
foo@2 2:db815d6d32e6 | ||||
four 3:9ba5f110a0b3 | ||||
should-end-on-two 2:db815d6d32e6 | ||||
x y 2:db815d6d32e6 | ||||
@unrelated | ||||
no bookmarks set | ||||
transaction abort! | ||||
rollback completed | ||||
abort: pretxnclose hook exited with status 1 | ||||
|
r47145 | [40] | ||
|
r34710 | |||
Check pretxnclose-bookmark can abort a transaction | ||||
-------------------------------------------------- | ||||
add hooks: | ||||
* to prevent NEW bookmark on a non-public changeset | ||||
* to prevent non-forward move of NEW bookmark | ||||
$ cat << EOF >> .hg/hgrc | ||||
> [hooks] | ||||
|
r34939 | > pretxnclose-bookmark.force-public = sh -c "(echo \$HG_BOOKMARK| grep -v NEW > /dev/null) || [ -z \"\$HG_NODE\" ] || (hg log -r \"\$HG_NODE\" -T '{phase}' | grep public > /dev/null)" | ||
> pretxnclose-bookmark.force-forward = sh -c "(echo \$HG_BOOKMARK| grep -v NEW > /dev/null) || [ -z \"\$HG_NODE\" ] || (hg log -r \"max(\$HG_OLDNODE::\$HG_NODE)\" -T 'MATCH' | grep MATCH > /dev/null)" | ||||
|
r34710 | > EOF | ||
$ hg log -G -T phases | ||||
@ changeset: 6:81dcce76aa0b | ||||
| tag: tip | ||||
| phase: draft | ||||
| parent: 4:125c9a1d6df6 | ||||
| user: test | ||||
| date: Thu Jan 01 00:00:00 1970 +0000 | ||||
| summary: xx | ||||
| | ||||
| o changeset: 5:5fb12f0f2d51 | ||||
| | branch: test | ||||
| | bookmark: Z | ||||
| | phase: draft | ||||
| | parent: 3:9ba5f110a0b3 | ||||
| | user: test | ||||
| | date: Thu Jan 01 00:00:00 1970 +0000 | ||||
| | summary: yy | ||||
| | | ||||
o | changeset: 4:125c9a1d6df6 | ||||
| | bookmark: Y | ||||
| | bookmark: Z@2 | ||||
| | phase: public | ||||
| | parent: 2:db815d6d32e6 | ||||
| | user: test | ||||
| | date: Thu Jan 01 00:00:00 1970 +0000 | ||||
| | summary: x | ||||
| | | ||||
| o changeset: 3:9ba5f110a0b3 | ||||
|/ branch: test | ||||
| bookmark: foo | ||||
| bookmark: four | ||||
| phase: public | ||||
| user: test | ||||
| date: Thu Jan 01 00:00:00 1970 +0000 | ||||
| summary: y | ||||
| | ||||
o changeset: 2:db815d6d32e6 | ||||
| bookmark: foo@2 | ||||
| bookmark: should-end-on-two | ||||
| bookmark: x y | ||||
| phase: public | ||||
| parent: 0:f7b1eb17ad24 | ||||
| user: test | ||||
| date: Thu Jan 01 00:00:00 1970 +0000 | ||||
| summary: 2 | ||||
| | ||||
| o changeset: 1:925d80f479bb | ||||
|/ bookmark: X2 | ||||
| bookmark: Z@1 | ||||
| phase: public | ||||
| user: test | ||||
| date: Thu Jan 01 00:00:00 1970 +0000 | ||||
| summary: 1 | ||||
| | ||||
o changeset: 0:f7b1eb17ad24 | ||||
bookmark: foo@1 | ||||
phase: public | ||||
user: test | ||||
date: Thu Jan 01 00:00:00 1970 +0000 | ||||
summary: 0 | ||||
attempt to create on a default changeset | ||||
$ hg bookmark -r 81dcce76aa0b NEW | ||||
transaction abort! | ||||
rollback completed | ||||
abort: pretxnclose-bookmark.force-public hook exited with status 1 | ||||
|
r47145 | [40] | ||
|
r34710 | |||
create on a public changeset | ||||
$ hg bookmark -r 9ba5f110a0b3 NEW | ||||
move to the other branch | ||||
$ hg bookmark -f -r 125c9a1d6df6 NEW | ||||
transaction abort! | ||||
rollback completed | ||||
abort: pretxnclose-bookmark.force-forward hook exited with status 1 | ||||
|
r47145 | [40] | ||