test-branches.t
703 lines
| 23.3 KiB
| text/troff
|
Tads3Lexer
/ tests / test-branches.t
|
r11868 | $ hg init a | ||
$ cd a | ||||
$ echo 'root' >root | ||||
$ hg add root | ||||
$ hg commit -d '0 0' -m "Adding root node" | ||||
$ echo 'a' >a | ||||
$ hg add a | ||||
$ hg branch a | ||||
marked working directory as branch a | ||||
|
r15615 | (branches are permanent and global, did you want a bookmark?) | ||
|
r11868 | $ hg commit -d '1 0' -m "Adding a branch" | ||
$ hg branch q | ||||
marked working directory as branch q | ||||
$ echo 'aa' >a | ||||
$ hg branch -C | ||||
reset working directory to branch a | ||||
$ hg commit -d '2 0' -m "Adding to a branch" | ||||
$ hg update -C 0 | ||||
0 files updated, 0 files merged, 1 files removed, 0 files unresolved | ||||
$ echo 'b' >b | ||||
$ hg add b | ||||
$ hg branch b | ||||
marked working directory as branch b | ||||
$ hg commit -d '2 0' -m "Adding b branch" | ||||
$ echo 'bh1' >bh1 | ||||
$ hg add bh1 | ||||
$ hg commit -d '3 0' -m "Adding b branch head 1" | ||||
$ hg update -C 2 | ||||
1 files updated, 0 files merged, 2 files removed, 0 files unresolved | ||||
$ echo 'bh2' >bh2 | ||||
$ hg add bh2 | ||||
$ hg commit -d '4 0' -m "Adding b branch head 2" | ||||
$ echo 'c' >c | ||||
$ hg add c | ||||
$ hg branch c | ||||
marked working directory as branch c | ||||
$ hg commit -d '5 0' -m "Adding c branch" | ||||
|
r17821 | reserved names | ||
|
r11868 | $ hg branch tip | ||
abort: the name 'tip' is reserved | ||||
|
r12316 | [255] | ||
|
r11868 | $ hg branch null | ||
abort: the name 'null' is reserved | ||||
|
r12316 | [255] | ||
|
r11868 | $ hg branch . | ||
abort: the name '.' is reserved | ||||
|
r12316 | [255] | ||
|
r11868 | |||
|
r17821 | invalid characters | ||
$ hg branch 'foo:bar' | ||||
|
r17850 | abort: ':' cannot be used in a name | ||
|
r17821 | [255] | ||
$ hg branch 'foo | ||||
> bar' | ||||
|
r17850 | abort: '\n' cannot be used in a name | ||
|
r17821 | [255] | ||
|
r19180 | trailing or leading spaces should be stripped before testing duplicates | ||
$ hg branch 'b ' | ||||
abort: a branch of the same name already exists | ||||
(use 'hg update' to switch to it) | ||||
[255] | ||||
$ hg branch ' b' | ||||
abort: a branch of the same name already exists | ||||
(use 'hg update' to switch to it) | ||||
[255] | ||||
|
r17984 | verify update will accept invalid legacy branch names | ||
$ hg init test-invalid-branch-name | ||||
$ cd test-invalid-branch-name | ||||
$ hg pull -u "$TESTDIR"/bundles/test-invalid-branch-name.hg | ||||
pulling from *test-invalid-branch-name.hg (glob) | ||||
requesting all changes | ||||
adding changesets | ||||
adding manifests | ||||
adding file changes | ||||
added 3 changesets with 3 changes to 2 files | ||||
1 files updated, 0 files merged, 0 files removed, 0 files unresolved | ||||
$ hg update '"colon:test"' | ||||
1 files updated, 0 files merged, 0 files removed, 0 files unresolved | ||||
$ cd .. | ||||
|
r11868 | $ echo 'd' >d | ||
$ hg add d | ||||
$ hg branch 'a branch name much longer than the default justification used by branches' | ||||
marked working directory as branch a branch name much longer than the default justification used by branches | ||||
$ hg commit -d '6 0' -m "Adding d branch" | ||||
$ hg branches | ||||
a branch name much longer than the default justification used by branches 7:10ff5895aa57 | ||||
b 4:aee39cd168d0 | ||||
c 6:589736a22561 (inactive) | ||||
a 5:d8cbc61dbaa6 (inactive) | ||||
default 0:19709c5a4e75 (inactive) | ||||
------- | ||||
$ hg branches -a | ||||
a branch name much longer than the default justification used by branches 7:10ff5895aa57 | ||||
b 4:aee39cd168d0 | ||||
--- Branch a | ||||
$ hg log -b a | ||||
changeset: 5:d8cbc61dbaa6 | ||||
branch: a | ||||
parent: 2:881fe2b92ad0 | ||||
user: test | ||||
date: Thu Jan 01 00:00:04 1970 +0000 | ||||
summary: Adding b branch head 2 | ||||
changeset: 2:881fe2b92ad0 | ||||
branch: a | ||||
user: test | ||||
date: Thu Jan 01 00:00:02 1970 +0000 | ||||
summary: Adding to a branch | ||||
changeset: 1:dd6b440dd85a | ||||
branch: a | ||||
user: test | ||||
date: Thu Jan 01 00:00:01 1970 +0000 | ||||
summary: Adding a branch | ||||
---- Branch b | ||||
$ hg log -b b | ||||
changeset: 4:aee39cd168d0 | ||||
branch: b | ||||
user: test | ||||
date: Thu Jan 01 00:00:03 1970 +0000 | ||||
summary: Adding b branch head 1 | ||||
changeset: 3:ac22033332d1 | ||||
branch: b | ||||
parent: 0:19709c5a4e75 | ||||
user: test | ||||
date: Thu Jan 01 00:00:02 1970 +0000 | ||||
summary: Adding b branch | ||||
---- going to test branch closing | ||||
$ hg branches | ||||
a branch name much longer than the default justification used by branches 7:10ff5895aa57 | ||||
b 4:aee39cd168d0 | ||||
c 6:589736a22561 (inactive) | ||||
a 5:d8cbc61dbaa6 (inactive) | ||||
default 0:19709c5a4e75 (inactive) | ||||
$ hg up -C b | ||||
2 files updated, 0 files merged, 4 files removed, 0 files unresolved | ||||
$ echo 'xxx1' >> b | ||||
$ hg commit -d '7 0' -m 'adding cset to branch b' | ||||
$ hg up -C aee39cd168d0 | ||||
1 files updated, 0 files merged, 0 files removed, 0 files unresolved | ||||
$ echo 'xxx2' >> b | ||||
$ hg commit -d '8 0' -m 'adding head to branch b' | ||||
created new head | ||||
$ echo 'xxx3' >> b | ||||
$ hg commit -d '9 0' -m 'adding another cset to branch b' | ||||
$ hg branches | ||||
b 10:bfbe841b666e | ||||
a branch name much longer than the default justification used by branches 7:10ff5895aa57 | ||||
c 6:589736a22561 (inactive) | ||||
a 5:d8cbc61dbaa6 (inactive) | ||||
default 0:19709c5a4e75 (inactive) | ||||
$ hg heads --closed | ||||
changeset: 10:bfbe841b666e | ||||
branch: b | ||||
tag: tip | ||||
user: test | ||||
date: Thu Jan 01 00:00:09 1970 +0000 | ||||
summary: adding another cset to branch b | ||||
changeset: 8:eebb944467c9 | ||||
branch: b | ||||
parent: 4:aee39cd168d0 | ||||
user: test | ||||
date: Thu Jan 01 00:00:07 1970 +0000 | ||||
summary: adding cset to branch b | ||||
changeset: 7:10ff5895aa57 | ||||
branch: a branch name much longer than the default justification used by branches | ||||
user: test | ||||
date: Thu Jan 01 00:00:06 1970 +0000 | ||||
summary: Adding d branch | ||||
changeset: 6:589736a22561 | ||||
branch: c | ||||
user: test | ||||
date: Thu Jan 01 00:00:05 1970 +0000 | ||||
summary: Adding c branch | ||||
changeset: 5:d8cbc61dbaa6 | ||||
branch: a | ||||
parent: 2:881fe2b92ad0 | ||||
user: test | ||||
date: Thu Jan 01 00:00:04 1970 +0000 | ||||
summary: Adding b branch head 2 | ||||
changeset: 0:19709c5a4e75 | ||||
user: test | ||||
date: Thu Jan 01 00:00:00 1970 +0000 | ||||
summary: Adding root node | ||||
$ hg heads | ||||
changeset: 10:bfbe841b666e | ||||
branch: b | ||||
tag: tip | ||||
user: test | ||||
date: Thu Jan 01 00:00:09 1970 +0000 | ||||
summary: adding another cset to branch b | ||||
changeset: 8:eebb944467c9 | ||||
branch: b | ||||
parent: 4:aee39cd168d0 | ||||
user: test | ||||
date: Thu Jan 01 00:00:07 1970 +0000 | ||||
summary: adding cset to branch b | ||||
changeset: 7:10ff5895aa57 | ||||
branch: a branch name much longer than the default justification used by branches | ||||
user: test | ||||
date: Thu Jan 01 00:00:06 1970 +0000 | ||||
summary: Adding d branch | ||||
changeset: 6:589736a22561 | ||||
branch: c | ||||
user: test | ||||
date: Thu Jan 01 00:00:05 1970 +0000 | ||||
summary: Adding c branch | ||||
changeset: 5:d8cbc61dbaa6 | ||||
branch: a | ||||
parent: 2:881fe2b92ad0 | ||||
user: test | ||||
date: Thu Jan 01 00:00:04 1970 +0000 | ||||
summary: Adding b branch head 2 | ||||
changeset: 0:19709c5a4e75 | ||||
user: test | ||||
date: Thu Jan 01 00:00:00 1970 +0000 | ||||
summary: Adding root node | ||||
$ hg commit -d '9 0' --close-branch -m 'prune bad branch' | ||||
$ hg branches -a | ||||
b 8:eebb944467c9 | ||||
a branch name much longer than the default justification used by branches 7:10ff5895aa57 | ||||
$ hg up -C b | ||||
1 files updated, 0 files merged, 0 files removed, 0 files unresolved | ||||
$ hg commit -d '9 0' --close-branch -m 'close this part branch too' | ||||
|
r19305 | $ hg commit -d '9 0' --close-branch -m 're-closing this branch' | ||
abort: can only close branch heads | ||||
[255] | ||||
|
r11868 | |||
|
r18955 | $ hg log -r tip --debug | ||
|
r19305 | changeset: 12:e3d49c0575d8fc2cb1cd6859c747c14f5f6d499f | ||
|
r18955 | branch: b | ||
tag: tip | ||||
phase: draft | ||||
|
r19305 | parent: 8:eebb944467c9fb9651ed232aeaf31b3c0a7fc6c1 | ||
|
r18955 | parent: -1:0000000000000000000000000000000000000000 | ||
manifest: 8:6f9ed32d2b310e391a4f107d5f0f071df785bfee | ||||
user: test | ||||
date: Thu Jan 01 00:00:09 1970 +0000 | ||||
extra: branch=b | ||||
extra: close=1 | ||||
description: | ||||
|
r19305 | close this part branch too | ||
|
r18955 | |||
|
r11868 | --- b branch should be inactive | ||
$ hg branches | ||||
a branch name much longer than the default justification used by branches 7:10ff5895aa57 | ||||
c 6:589736a22561 (inactive) | ||||
a 5:d8cbc61dbaa6 (inactive) | ||||
default 0:19709c5a4e75 (inactive) | ||||
$ hg branches -c | ||||
a branch name much longer than the default justification used by branches 7:10ff5895aa57 | ||||
|
r14162 | b 12:e3d49c0575d8 (closed) | ||
|
r11868 | c 6:589736a22561 (inactive) | ||
a 5:d8cbc61dbaa6 (inactive) | ||||
default 0:19709c5a4e75 (inactive) | ||||
$ hg branches -a | ||||
a branch name much longer than the default justification used by branches 7:10ff5895aa57 | ||||
|
r16612 | $ hg branches -q | ||
a branch name much longer than the default justification used by branches | ||||
c | ||||
a | ||||
default | ||||
|
r11868 | $ hg heads b | ||
no open branch heads found on branches b | ||||
|
r12316 | [1] | ||
|
r11868 | $ hg heads --closed b | ||
|
r14162 | changeset: 12:e3d49c0575d8 | ||
|
r11868 | branch: b | ||
tag: tip | ||||
parent: 8:eebb944467c9 | ||||
user: test | ||||
date: Thu Jan 01 00:00:09 1970 +0000 | ||||
summary: close this part branch too | ||||
|
r14162 | changeset: 11:d3f163457ebf | ||
|
r11868 | branch: b | ||
user: test | ||||
date: Thu Jan 01 00:00:09 1970 +0000 | ||||
summary: prune bad branch | ||||
$ echo 'xxx4' >> b | ||||
$ hg commit -d '9 0' -m 'reopen branch with a change' | ||||
reopening closed branch head 12 | ||||
--- branch b is back in action | ||||
$ hg branches -a | ||||
|
r14162 | b 13:e23b5505d1ad | ||
|
r11868 | a branch name much longer than the default justification used by branches 7:10ff5895aa57 | ||
---- test heads listings | ||||
$ hg heads | ||||
|
r14162 | changeset: 13:e23b5505d1ad | ||
|
r11868 | branch: b | ||
tag: tip | ||||
user: test | ||||
date: Thu Jan 01 00:00:09 1970 +0000 | ||||
summary: reopen branch with a change | ||||
changeset: 7:10ff5895aa57 | ||||
branch: a branch name much longer than the default justification used by branches | ||||
user: test | ||||
date: Thu Jan 01 00:00:06 1970 +0000 | ||||
summary: Adding d branch | ||||
changeset: 6:589736a22561 | ||||
branch: c | ||||
user: test | ||||
date: Thu Jan 01 00:00:05 1970 +0000 | ||||
summary: Adding c branch | ||||
changeset: 5:d8cbc61dbaa6 | ||||
branch: a | ||||
parent: 2:881fe2b92ad0 | ||||
user: test | ||||
date: Thu Jan 01 00:00:04 1970 +0000 | ||||
summary: Adding b branch head 2 | ||||
changeset: 0:19709c5a4e75 | ||||
user: test | ||||
date: Thu Jan 01 00:00:00 1970 +0000 | ||||
summary: Adding root node | ||||
branch default | ||||
$ hg heads default | ||||
changeset: 0:19709c5a4e75 | ||||
user: test | ||||
date: Thu Jan 01 00:00:00 1970 +0000 | ||||
summary: Adding root node | ||||
branch a | ||||
$ hg heads a | ||||
changeset: 5:d8cbc61dbaa6 | ||||
branch: a | ||||
parent: 2:881fe2b92ad0 | ||||
user: test | ||||
date: Thu Jan 01 00:00:04 1970 +0000 | ||||
summary: Adding b branch head 2 | ||||
$ hg heads --active a | ||||
no open branch heads found on branches a | ||||
|
r12316 | [1] | ||
|
r11868 | |||
branch b | ||||
$ hg heads b | ||||
|
r14162 | changeset: 13:e23b5505d1ad | ||
|
r11868 | branch: b | ||
tag: tip | ||||
user: test | ||||
date: Thu Jan 01 00:00:09 1970 +0000 | ||||
summary: reopen branch with a change | ||||
$ hg heads --closed b | ||||
|
r14162 | changeset: 13:e23b5505d1ad | ||
|
r11868 | branch: b | ||
tag: tip | ||||
user: test | ||||
date: Thu Jan 01 00:00:09 1970 +0000 | ||||
summary: reopen branch with a change | ||||
|
r14162 | changeset: 11:d3f163457ebf | ||
|
r11868 | branch: b | ||
user: test | ||||
date: Thu Jan 01 00:00:09 1970 +0000 | ||||
summary: prune bad branch | ||||
|
r11969 | default branch colors: | ||
|
r23172 | $ cat <<EOF >> $HGRCPATH | ||
> [extensions] | ||||
> color = | ||||
> [color] | ||||
> mode = ansi | ||||
> EOF | ||||
|
r11969 | |||
$ hg up -C c | ||||
3 files updated, 0 files merged, 2 files removed, 0 files unresolved | ||||
$ hg commit -d '9 0' --close-branch -m 'reclosing this branch' | ||||
$ hg up -C b | ||||
2 files updated, 0 files merged, 3 files removed, 0 files unresolved | ||||
$ hg branches --color=always | ||||
|
r22704 | \x1b[0;32mb\x1b[0m\x1b[0;33m 13:e23b5505d1ad\x1b[0m (esc) | ||
\x1b[0;0ma branch name much longer than the default justification used by branches\x1b[0m\x1b[0;33m 7:10ff5895aa57\x1b[0m (esc) | ||||
\x1b[0;0ma\x1b[0m\x1b[0;33m 5:d8cbc61dbaa6\x1b[0m (inactive) (esc) | ||||
\x1b[0;0mdefault\x1b[0m\x1b[0;33m 0:19709c5a4e75\x1b[0m (inactive) (esc) | ||||
|
r11969 | |||
default closed branch color: | ||||
$ hg branches --color=always --closed | ||||
|
r22704 | \x1b[0;32mb\x1b[0m\x1b[0;33m 13:e23b5505d1ad\x1b[0m (esc) | ||
\x1b[0;0ma branch name much longer than the default justification used by branches\x1b[0m\x1b[0;33m 7:10ff5895aa57\x1b[0m (esc) | ||||
\x1b[0;30;1mc\x1b[0m\x1b[0;33m 14:f894c25619d3\x1b[0m (closed) (esc) | ||||
\x1b[0;0ma\x1b[0m\x1b[0;33m 5:d8cbc61dbaa6\x1b[0m (inactive) (esc) | ||||
\x1b[0;0mdefault\x1b[0m\x1b[0;33m 0:19709c5a4e75\x1b[0m (inactive) (esc) | ||||
|
r11969 | |||
|
r23172 | $ cat <<EOF >> $HGRCPATH | ||
> [extensions] | ||||
> color = | ||||
> [color] | ||||
> branches.active = green | ||||
> branches.closed = blue | ||||
> branches.current = red | ||||
> branches.inactive = magenta | ||||
> log.changeset = cyan | ||||
> EOF | ||||
|
r11969 | |||
custom branch colors: | ||||
$ hg branches --color=always | ||||
|
r22704 | \x1b[0;31mb\x1b[0m\x1b[0;36m 13:e23b5505d1ad\x1b[0m (esc) | ||
\x1b[0;32ma branch name much longer than the default justification used by branches\x1b[0m\x1b[0;36m 7:10ff5895aa57\x1b[0m (esc) | ||||
\x1b[0;35ma\x1b[0m\x1b[0;36m 5:d8cbc61dbaa6\x1b[0m (inactive) (esc) | ||||
\x1b[0;35mdefault\x1b[0m\x1b[0;36m 0:19709c5a4e75\x1b[0m (inactive) (esc) | ||||
|
r11969 | |||
custom closed branch color: | ||||
$ hg branches --color=always --closed | ||||
|
r22704 | \x1b[0;31mb\x1b[0m\x1b[0;36m 13:e23b5505d1ad\x1b[0m (esc) | ||
\x1b[0;32ma branch name much longer than the default justification used by branches\x1b[0m\x1b[0;36m 7:10ff5895aa57\x1b[0m (esc) | ||||
\x1b[0;34mc\x1b[0m\x1b[0;36m 14:f894c25619d3\x1b[0m (closed) (esc) | ||||
\x1b[0;35ma\x1b[0m\x1b[0;36m 5:d8cbc61dbaa6\x1b[0m (inactive) (esc) | ||||
\x1b[0;35mdefault\x1b[0m\x1b[0;36m 0:19709c5a4e75\x1b[0m (inactive) (esc) | ||||
|
r16913 | |||
|
r22703 | template output: | ||
$ hg branches -Tjson --closed | ||||
[ | ||||
{ | ||||
|
r22705 | "active": true, | ||
|
r22703 | "branch": "b", | ||
|
r22705 | "closed": false, | ||
"current": true, | ||||
|
r22703 | "node": "e23b5505d1ad24aab6f84fd8c7cb8cd8e5e93be0", | ||
"rev": 13 | ||||
}, | ||||
{ | ||||
|
r22705 | "active": true, | ||
|
r22703 | "branch": "a branch name much longer than the default justification used by branches", | ||
|
r22705 | "closed": false, | ||
"current": false, | ||||
|
r22703 | "node": "10ff5895aa5793bd378da574af8cec8ea408d831", | ||
"rev": 7 | ||||
}, | ||||
{ | ||||
|
r22705 | "active": false, | ||
|
r22703 | "branch": "c", | ||
|
r22705 | "closed": true, | ||
"current": false, | ||||
|
r22703 | "node": "f894c25619d3f1484639d81be950e0a07bc6f1f6", | ||
"rev": 14 | ||||
}, | ||||
{ | ||||
|
r22705 | "active": false, | ||
|
r22703 | "branch": "a", | ||
|
r22705 | "closed": false, | ||
"current": false, | ||||
|
r22703 | "node": "d8cbc61dbaa6dc817175d1e301eecb863f280832", | ||
"rev": 5 | ||||
}, | ||||
{ | ||||
|
r22705 | "active": false, | ||
|
r22703 | "branch": "default", | ||
|
r22705 | "closed": false, | ||
"current": false, | ||||
|
r22703 | "node": "19709c5a4e75bf938f8e349aff97438539bb729e", | ||
"rev": 0 | ||||
} | ||||
] | ||||
|
r23861 | |||
Tests of revision branch name caching | ||||
We rev branch cache is updated automatically. In these tests we use a trick to | ||||
trigger rebuilds. We remove the branch head cache and run 'hg head' to cause a | ||||
rebuild that also will populate the rev branch cache. | ||||
|
r23787 | |||
|
r23861 | revision branch cache is created when building the branch head cache | ||
$ rm -rf .hg/cache; hg head a -T '{rev}\n' | ||||
5 | ||||
$ f --hexdump --size .hg/cache/rbc-* | ||||
.hg/cache/rbc-names-v1: size=87 | ||||
0000: 64 65 66 61 75 6c 74 00 61 00 62 00 63 00 61 20 |default.a.b.c.a | | ||||
0010: 62 72 61 6e 63 68 20 6e 61 6d 65 20 6d 75 63 68 |branch name much| | ||||
0020: 20 6c 6f 6e 67 65 72 20 74 68 61 6e 20 74 68 65 | longer than the| | ||||
0030: 20 64 65 66 61 75 6c 74 20 6a 75 73 74 69 66 69 | default justifi| | ||||
0040: 63 61 74 69 6f 6e 20 75 73 65 64 20 62 79 20 62 |cation used by b| | ||||
0050: 72 61 6e 63 68 65 73 |ranches| | ||||
.hg/cache/rbc-revs-v1: size=120 | ||||
0000: 19 70 9c 5a 00 00 00 00 dd 6b 44 0d 00 00 00 01 |.p.Z.....kD.....| | ||||
0010: 88 1f e2 b9 00 00 00 01 ac 22 03 33 00 00 00 02 |.........".3....| | ||||
0020: ae e3 9c d1 00 00 00 02 d8 cb c6 1d 00 00 00 01 |................| | ||||
0030: 58 97 36 a2 00 00 00 03 10 ff 58 95 00 00 00 04 |X.6.......X.....| | ||||
0040: ee bb 94 44 00 00 00 02 5f 40 61 bb 00 00 00 02 |...D...._@a.....| | ||||
0050: bf be 84 1b 00 00 00 02 d3 f1 63 45 80 00 00 02 |..........cE....| | ||||
0060: e3 d4 9c 05 80 00 00 02 e2 3b 55 05 00 00 00 02 |.........;U.....| | ||||
0070: f8 94 c2 56 80 00 00 03 |...V....| | ||||
|
r24372 | |||
no errors when revbranchcache is not writable | ||||
$ echo >> .hg/cache/rbc-revs-v1 | ||||
|
r28145 | $ mv .hg/cache/rbc-revs-v1 .hg/cache/rbc-revs-v1_ | ||
$ mkdir .hg/cache/rbc-revs-v1 | ||||
|
r24372 | $ rm -f .hg/cache/branch* && hg head a -T '{rev}\n' | ||
5 | ||||
|
r28145 | $ rmdir .hg/cache/rbc-revs-v1 | ||
$ mv .hg/cache/rbc-revs-v1_ .hg/cache/rbc-revs-v1 | ||||
|
r24372 | |||
|
r23861 | recovery from invalid cache revs file with trailing data | ||
|
r23787 | $ echo >> .hg/cache/rbc-revs-v1 | ||
|
r23861 | $ rm -f .hg/cache/branch* && hg head a -T '{rev}\n' --debug | ||
|
r24378 | 5 | ||
|
r23862 | truncating cache/rbc-revs-v1 to 120 | ||
|
r23861 | $ f --size .hg/cache/rbc-revs* | ||
.hg/cache/rbc-revs-v1: size=120 | ||||
recovery from invalid cache file with partial last record | ||||
$ mv .hg/cache/rbc-revs-v1 . | ||||
$ f -qDB 119 rbc-revs-v1 > .hg/cache/rbc-revs-v1 | ||||
$ f --size .hg/cache/rbc-revs* | ||||
.hg/cache/rbc-revs-v1: size=119 | ||||
$ rm -f .hg/cache/branch* && hg head a -T '{rev}\n' --debug | ||||
|
r24378 | 5 | ||
|
r23862 | truncating cache/rbc-revs-v1 to 112 | ||
|
r23861 | $ f --size .hg/cache/rbc-revs* | ||
.hg/cache/rbc-revs-v1: size=120 | ||||
recovery from invalid cache file with missing record - no truncation | ||||
$ mv .hg/cache/rbc-revs-v1 . | ||||
$ f -qDB 112 rbc-revs-v1 > .hg/cache/rbc-revs-v1 | ||||
$ rm -f .hg/cache/branch* && hg head a -T '{rev}\n' --debug | ||||
5 | ||||
$ f --size .hg/cache/rbc-revs* | ||||
.hg/cache/rbc-revs-v1: size=120 | ||||
recovery from invalid cache file with some bad records | ||||
$ mv .hg/cache/rbc-revs-v1 . | ||||
$ f -qDB 8 rbc-revs-v1 > .hg/cache/rbc-revs-v1 | ||||
$ f --size .hg/cache/rbc-revs* | ||||
.hg/cache/rbc-revs-v1: size=8 | ||||
$ f -qDB 112 rbc-revs-v1 >> .hg/cache/rbc-revs-v1 | ||||
$ f --size .hg/cache/rbc-revs* | ||||
.hg/cache/rbc-revs-v1: size=120 | ||||
|
r24378 | $ hg log -r 'branch(.)' -T '{rev} ' --debug | ||
3 4 8 9 10 11 12 13 truncating cache/rbc-revs-v1 to 8 | ||||
|
r23861 | $ rm -f .hg/cache/branch* && hg head a -T '{rev}\n' --debug | ||
5 | ||||
|
r24378 | truncating cache/rbc-revs-v1 to 104 | ||
|
r23861 | $ f --size --hexdump --bytes=16 .hg/cache/rbc-revs* | ||
.hg/cache/rbc-revs-v1: size=120 | ||||
0000: 19 70 9c 5a 00 00 00 00 dd 6b 44 0d 00 00 00 01 |.p.Z.....kD.....| | ||||
cache is updated when committing | ||||
$ hg branch i-will-regret-this | ||||
marked working directory as branch i-will-regret-this | ||||
$ hg ci -m regrets | ||||
$ f --size .hg/cache/rbc-* | ||||
.hg/cache/rbc-names-v1: size=106 | ||||
.hg/cache/rbc-revs-v1: size=128 | ||||
update after rollback - the cache will be correct but rbc-names will will still | ||||
contain the branch name even though it no longer is used | ||||
|
r23787 | $ hg up -qr '.^' | ||
$ hg rollback -qf | ||||
|
r23861 | $ f --size --hexdump .hg/cache/rbc-* | ||
.hg/cache/rbc-names-v1: size=106 | ||||
0000: 64 65 66 61 75 6c 74 00 61 00 62 00 63 00 61 20 |default.a.b.c.a | | ||||
0010: 62 72 61 6e 63 68 20 6e 61 6d 65 20 6d 75 63 68 |branch name much| | ||||
0020: 20 6c 6f 6e 67 65 72 20 74 68 61 6e 20 74 68 65 | longer than the| | ||||
0030: 20 64 65 66 61 75 6c 74 20 6a 75 73 74 69 66 69 | default justifi| | ||||
0040: 63 61 74 69 6f 6e 20 75 73 65 64 20 62 79 20 62 |cation used by b| | ||||
0050: 72 61 6e 63 68 65 73 00 69 2d 77 69 6c 6c 2d 72 |ranches.i-will-r| | ||||
0060: 65 67 72 65 74 2d 74 68 69 73 |egret-this| | ||||
.hg/cache/rbc-revs-v1: size=120 | ||||
0000: 19 70 9c 5a 00 00 00 00 dd 6b 44 0d 00 00 00 01 |.p.Z.....kD.....| | ||||
0010: 88 1f e2 b9 00 00 00 01 ac 22 03 33 00 00 00 02 |.........".3....| | ||||
0020: ae e3 9c d1 00 00 00 02 d8 cb c6 1d 00 00 00 01 |................| | ||||
0030: 58 97 36 a2 00 00 00 03 10 ff 58 95 00 00 00 04 |X.6.......X.....| | ||||
0040: ee bb 94 44 00 00 00 02 5f 40 61 bb 00 00 00 02 |...D...._@a.....| | ||||
0050: bf be 84 1b 00 00 00 02 d3 f1 63 45 80 00 00 02 |..........cE....| | ||||
0060: e3 d4 9c 05 80 00 00 02 e2 3b 55 05 00 00 00 02 |.........;U.....| | ||||
0070: f8 94 c2 56 80 00 00 03 |...V....| | ||||
cache is updated/truncated when stripping - it is thus very hard to get in a | ||||
situation where the cache is out of sync and the hash check detects it | ||||
$ hg --config extensions.strip= strip -r tip --nob | ||||
$ f --size .hg/cache/rbc-revs* | ||||
.hg/cache/rbc-revs-v1: size=112 | ||||
|
r23787 | |||
|
r28558 | cache is rebuilt when corruption is detected | ||
$ echo > .hg/cache/rbc-names-v1 | ||||
$ hg log -r '5:&branch(.)' -T '{rev} ' --debug | ||||
rebuilding corrupted revision branch cache | ||||
8 9 10 11 12 13 truncating cache/rbc-revs-v1 to 40 | ||||
$ f --size --hexdump .hg/cache/rbc-* | ||||
.hg/cache/rbc-names-v1: size=79 | ||||
0000: 62 00 61 00 63 00 61 20 62 72 61 6e 63 68 20 6e |b.a.c.a branch n| | ||||
0010: 61 6d 65 20 6d 75 63 68 20 6c 6f 6e 67 65 72 20 |ame much longer | | ||||
0020: 74 68 61 6e 20 74 68 65 20 64 65 66 61 75 6c 74 |than the default| | ||||
0030: 20 6a 75 73 74 69 66 69 63 61 74 69 6f 6e 20 75 | justification u| | ||||
0040: 73 65 64 20 62 79 20 62 72 61 6e 63 68 65 73 |sed by branches| | ||||
.hg/cache/rbc-revs-v1: size=112 | ||||
0000: 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 |................| | ||||
0010: 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 |................| | ||||
0020: 00 00 00 00 00 00 00 00 d8 cb c6 1d 00 00 00 01 |................| | ||||
0030: 58 97 36 a2 00 00 00 02 10 ff 58 95 00 00 00 03 |X.6.......X.....| | ||||
0040: ee bb 94 44 00 00 00 00 5f 40 61 bb 00 00 00 00 |...D...._@a.....| | ||||
0050: bf be 84 1b 00 00 00 00 d3 f1 63 45 80 00 00 00 |..........cE....| | ||||
0060: e3 d4 9c 05 80 00 00 00 e2 3b 55 05 00 00 00 00 |.........;U.....| | ||||
|
r29603 | Test that cache files are created and grows correctly: | ||
$ rm .hg/cache/rbc* | ||||
$ hg log -r "5 & branch(5)" -T "{rev}\n" | ||||
5 | ||||
$ f --size --hexdump .hg/cache/rbc-* | ||||
.hg/cache/rbc-names-v1: size=1 | ||||
0000: 61 |a| | ||||
|
r29604 | .hg/cache/rbc-revs-v1: size=112 | ||
0000: 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 |................| | ||||
0010: 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 |................| | ||||
0020: 00 00 00 00 00 00 00 00 d8 cb c6 1d 00 00 00 00 |................| | ||||
0030: 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 |................| | ||||
0040: 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 |................| | ||||
0050: 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 |................| | ||||
0060: 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 |................| | ||||
|
r29603 | |||
|
r16913 | $ cd .. | ||
|
r29614 | |||
Test for multiple incorrect branch cache entries: | ||||
$ hg init b | ||||
$ cd b | ||||
$ touch f | ||||
$ hg ci -Aqmf | ||||
$ echo >> f | ||||
$ hg ci -Amf | ||||
$ hg branch -q branch | ||||
$ hg ci -Amf | ||||
$ f --size --hexdump .hg/cache/rbc-* | ||||
.hg/cache/rbc-names-v1: size=14 | ||||
0000: 64 65 66 61 75 6c 74 00 62 72 61 6e 63 68 |default.branch| | ||||
.hg/cache/rbc-revs-v1: size=24 | ||||
0000: 66 e5 f5 aa 00 00 00 00 fa 4c 04 e5 00 00 00 00 |f........L......| | ||||
0010: 56 46 78 69 00 00 00 01 |VFxi....| | ||||
$ : > .hg/cache/rbc-revs-v1 | ||||
$ hg log -r "branch(null)&branch(branch)" --debug | ||||
rebuilding corrupted revision branch cache | ||||
rebuilding corrupted revision branch cache | ||||
truncating cache/rbc-revs-v1 to 8 | ||||
BUG: the cache was declared corrupt multiple times and not fully rebuilt: | ||||
$ f --size --hexdump .hg/cache/rbc-* | ||||
.hg/cache/rbc-names-v1: size=14 | ||||
0000: 64 65 66 61 75 6c 74 00 62 72 61 6e 63 68 |default.branch| | ||||
.hg/cache/rbc-revs-v1: size=24 | ||||
0000: 00 00 00 00 00 00 00 00 fa 4c 04 e5 00 00 00 00 |.........L......| | ||||
0010: 56 46 78 69 00 00 00 01 |VFxi....| | ||||
$ cd .. | ||||