test-casecollision-merge.t
346 lines
| 6.8 KiB
| text/troff
|
Tads3Lexer
/ tests / test-casecollision-merge.t
Matt Mackall
|
r22046 | #require icasefs | ||
FUJIWARA Katsunori
|
r15673 | |||
################################ | ||||
test for branch merging | ||||
################################ | ||||
FUJIWARA Katsunori
|
r16478 | test for rename awareness of case-folding collision check: | ||
FUJIWARA Katsunori
|
r15673 | |||
FUJIWARA Katsunori
|
r16478 | (1) colliding file is one renamed from collided file: | ||
this is also case for issue3370. | ||||
FUJIWARA Katsunori
|
r15673 | |||
FUJIWARA Katsunori
|
r17889 | $ hg init branch_merge_renaming | ||
$ cd branch_merge_renaming | ||||
FUJIWARA Katsunori
|
r15673 | |||
FUJIWARA Katsunori
|
r16478 | $ echo a > a | ||
$ hg add a | ||||
FUJIWARA Katsunori
|
r19106 | $ echo b > b | ||
$ hg add b | ||||
FUJIWARA Katsunori
|
r16478 | $ hg commit -m '#0' | ||
FUJIWARA Katsunori
|
r19105 | $ hg tag -l A | ||
FUJIWARA Katsunori
|
r16478 | $ hg rename a tmp | ||
$ hg rename tmp A | ||||
$ hg commit -m '#1' | ||||
FUJIWARA Katsunori
|
r19105 | $ hg tag -l B | ||
FUJIWARA Katsunori
|
r19104 | $ hg update -q 0 | ||
$ touch x | ||||
$ hg add x | ||||
FUJIWARA Katsunori
|
r16478 | $ hg commit -m '#2' | ||
FUJIWARA Katsunori
|
r15673 | created new head | ||
FUJIWARA Katsunori
|
r19105 | $ hg tag -l C | ||
FUJIWARA Katsunori
|
r15673 | |||
FUJIWARA Katsunori
|
r19104 | $ hg merge -q | ||
FUJIWARA Katsunori
|
r16478 | $ hg status -A | ||
M A | ||||
R a | ||||
FUJIWARA Katsunori
|
r19106 | C b | ||
FUJIWARA Katsunori
|
r19104 | C x | ||
FUJIWARA Katsunori
|
r16478 | |||
FUJIWARA Katsunori
|
r19104 | $ hg update -q --clean 1 | ||
$ hg merge -q | ||||
FUJIWARA Katsunori
|
r16478 | $ hg status -A | ||
FUJIWARA Katsunori
|
r19104 | M x | ||
C A | ||||
FUJIWARA Katsunori
|
r19106 | C b | ||
FUJIWARA Katsunori
|
r19105 | $ hg commit -m '(D)' | ||
$ hg tag -l D | ||||
additional test for issue3452: | ||||
| this assumes the history below. | ||||
| | ||||
| (A) -- (C) -- (E) ------- | ||||
| \ \ \ | ||||
| \ \ \ | ||||
| (B) -- (D) -- (F) -- (G) | ||||
| | ||||
| A: add file 'a' | ||||
| B: rename from 'a' to 'A' | ||||
| C: add 'x' (or operation other than modification of 'a') | ||||
| D: merge C into B | ||||
| E: modify 'a' | ||||
| F: modify 'A' | ||||
| G: merge E into F | ||||
| | ||||
| issue3452 occurs when (B) is recorded before (C) | ||||
$ hg update -q --clean C | ||||
$ echo "modify 'a' at (E)" > a | ||||
FUJIWARA Katsunori
|
r19106 | $ echo "modify 'b' at (E)" > b | ||
FUJIWARA Katsunori
|
r19105 | $ hg commit -m '(E)' | ||
created new head | ||||
$ hg tag -l E | ||||
$ hg update -q --clean D | ||||
$ echo "modify 'A' at (F)" > A | ||||
$ hg commit -m '(F)' | ||||
$ hg tag -l F | ||||
$ hg merge -q --tool internal:other E | ||||
$ hg status -A | ||||
M A | ||||
a | ||||
FUJIWARA Katsunori
|
r19106 | M b | ||
FUJIWARA Katsunori
|
r19105 | C x | ||
$ cat A | ||||
modify 'a' at (E) | ||||
FUJIWARA Katsunori
|
r16478 | |||
FUJIWARA Katsunori
|
r19106 | test also the case that (B) is recorded after (C), to prevent | ||
regression by changes in the future. | ||||
to avoid unexpected (successful) behavior by filelog unification, | ||||
target file is not 'a'/'A' but 'b'/'B' in this case. | ||||
$ hg update -q --clean A | ||||
$ hg rename b tmp | ||||
$ hg rename tmp B | ||||
$ hg commit -m '(B1)' | ||||
created new head | ||||
$ hg tag -l B1 | ||||
$ hg merge -q C | ||||
$ hg status -A | ||||
M x | ||||
C B | ||||
C a | ||||
$ hg commit -m '(D1)' | ||||
$ hg tag -l D1 | ||||
$ echo "modify 'B' at (F1)" > B | ||||
$ hg commit -m '(F1)' | ||||
$ hg tag -l F1 | ||||
$ hg merge -q --tool internal:other E | ||||
$ hg status -A | ||||
M B | ||||
b | ||||
M a | ||||
C x | ||||
$ cat B | ||||
modify 'b' at (E) | ||||
FUJIWARA Katsunori
|
r16478 | $ cd .. | ||
(2) colliding file is not related to collided file | ||||
FUJIWARA Katsunori
|
r17889 | $ hg init branch_merge_collding | ||
$ cd branch_merge_collding | ||||
FUJIWARA Katsunori
|
r16478 | |||
$ echo a > a | ||||
$ hg add a | ||||
$ hg commit -m '#0' | ||||
$ hg remove a | ||||
$ hg commit -m '#1' | ||||
$ echo A > A | ||||
$ hg add A | ||||
$ hg commit -m '#2' | ||||
$ hg update --clean 0 | ||||
1 files updated, 0 files merged, 1 files removed, 0 files unresolved | ||||
FUJIWARA Katsunori
|
r17889 | $ echo x > x | ||
$ hg add x | ||||
FUJIWARA Katsunori
|
r16478 | $ hg commit -m '#3' | ||
created new head | ||||
FUJIWARA Katsunori
|
r17889 | $ echo 'modified at #4' > a | ||
$ hg commit -m '#4' | ||||
FUJIWARA Katsunori
|
r15673 | |||
$ hg merge | ||||
FUJIWARA Katsunori
|
r19105 | abort: case-folding collision between a and A | ||
FUJIWARA Katsunori
|
r15673 | [255] | ||
FUJIWARA Katsunori
|
r16478 | $ hg parents --template '{rev}\n' | ||
FUJIWARA Katsunori
|
r17889 | 4 | ||
FUJIWARA Katsunori
|
r16478 | $ hg status -A | ||
C a | ||||
FUJIWARA Katsunori
|
r17889 | C x | ||
FUJIWARA Katsunori
|
r16478 | $ cat a | ||
FUJIWARA Katsunori
|
r17889 | modified at #4 | ||
FUJIWARA Katsunori
|
r15673 | |||
FUJIWARA Katsunori
|
r16478 | $ hg update --clean 2 | ||
FUJIWARA Katsunori
|
r17889 | 1 files updated, 0 files merged, 2 files removed, 0 files unresolved | ||
FUJIWARA Katsunori
|
r16478 | $ hg merge | ||
abort: case-folding collision between a and A | ||||
[255] | ||||
FUJIWARA Katsunori
|
r15673 | $ hg parents --template '{rev}\n' | ||
2 | ||||
FUJIWARA Katsunori
|
r16478 | $ hg status -A | ||
C A | ||||
$ cat A | ||||
A | ||||
FUJIWARA Katsunori
|
r17889 | test for deletion awareness of case-folding collision check (issue3648): | ||
revision '#3' doesn't change 'a', so 'a' should be recognized as | ||||
safely removed in merging between #2 and #3. | ||||
$ hg update --clean 3 | ||||
2 files updated, 0 files merged, 1 files removed, 0 files unresolved | ||||
$ hg merge 2 | ||||
1 files updated, 0 files merged, 1 files removed, 0 files unresolved | ||||
(branch merge, don't forget to commit) | ||||
$ hg status -A | ||||
M A | ||||
R a | ||||
C x | ||||
$ hg update --clean 2 | ||||
1 files updated, 0 files merged, 1 files removed, 0 files unresolved | ||||
$ hg merge 3 | ||||
1 files updated, 0 files merged, 0 files removed, 0 files unresolved | ||||
(branch merge, don't forget to commit) | ||||
$ hg status -A | ||||
M x | ||||
C A | ||||
FUJIWARA Katsunori
|
r15673 | $ cd .. | ||
Mads Kiilerich
|
r26660 | Prepare for tests of directory case-folding collisions | ||
$ hg init directory-casing | ||||
$ cd directory-casing | ||||
$ touch 0 # test: file without directory | ||||
$ mkdir 0a | ||||
$ touch 0a/f | ||||
$ mkdir aA | ||||
$ touch aA/a | ||||
$ hg ci -Aqm0 | ||||
Directory/file case-folding collision: | ||||
$ hg up -q null | ||||
$ touch 00 # test: starts as '0' | ||||
$ mkdir 000 # test: starts as '0' | ||||
$ touch 000/f | ||||
$ touch Aa # test: collision with 'aA/a' | ||||
$ hg ci -Aqm1 | ||||
$ hg merge 0 | ||||
Mads Kiilerich
|
r26661 | abort: case-folding collision between Aa and directory of aA/a | ||
Mads Kiilerich
|
r26660 | [255] | ||
(note: no collision between 0 and 00 or 000/f) | ||||
Directory case-folding collision: | ||||
$ hg up -qC null | ||||
$ hg --config extensions.purge= purge | ||||
$ mkdir 0A0 | ||||
$ touch 0A0/f # test: starts as '0a' | ||||
$ mkdir Aa | ||||
$ touch Aa/b # test: collision with 'aA/a' | ||||
$ hg ci -Aqm2 | ||||
$ hg merge 0 | ||||
3 files updated, 0 files merged, 0 files removed, 0 files unresolved | ||||
(branch merge, don't forget to commit) | ||||
$ cd .. | ||||
FUJIWARA Katsunori
|
r16478 | |||
FUJIWARA Katsunori
|
r15673 | ################################ | ||
test for linear updates | ||||
################################ | ||||
FUJIWARA Katsunori
|
r16478 | test for rename awareness of case-folding collision check: | ||
FUJIWARA Katsunori
|
r15673 | |||
FUJIWARA Katsunori
|
r16478 | (1) colliding file is one renamed from collided file | ||
$ hg init linearupdate_renameaware_1 | ||||
$ cd linearupdate_renameaware_1 | ||||
FUJIWARA Katsunori
|
r15673 | |||
FUJIWARA Katsunori
|
r16478 | $ echo a > a | ||
$ hg add a | ||||
$ hg commit -m '#0' | ||||
$ hg rename a tmp | ||||
$ hg rename tmp A | ||||
$ hg commit -m '#1' | ||||
FUJIWARA Katsunori
|
r15673 | |||
$ hg update 0 | ||||
FUJIWARA Katsunori
|
r16478 | 1 files updated, 0 files merged, 1 files removed, 0 files unresolved | ||
FUJIWARA Katsunori
|
r15673 | |||
FUJIWARA Katsunori
|
r16478 | $ echo 'this is added line' >> a | ||
FUJIWARA Katsunori
|
r15673 | $ hg update 1 | ||
merging a and A to A | ||||
0 files updated, 1 files merged, 0 files removed, 0 files unresolved | ||||
$ hg status -A | ||||
M A | ||||
$ cat A | ||||
FUJIWARA Katsunori
|
r16478 | a | ||
FUJIWARA Katsunori
|
r15673 | this is added line | ||
FUJIWARA Katsunori
|
r16478 | |||
$ cd .. | ||||
(2) colliding file is not related to collided file | ||||
$ hg init linearupdate_renameaware_2 | ||||
$ cd linearupdate_renameaware_2 | ||||
$ echo a > a | ||||
$ hg add a | ||||
$ hg commit -m '#0' | ||||
$ hg remove a | ||||
$ hg commit -m '#1' | ||||
$ echo A > A | ||||
$ hg add A | ||||
$ hg commit -m '#2' | ||||
$ hg update 0 | ||||
Patrick Mezard
|
r16492 | 1 files updated, 0 files merged, 1 files removed, 0 files unresolved | ||
FUJIWARA Katsunori
|
r16478 | $ hg parents --template '{rev}\n' | ||
Patrick Mezard
|
r16492 | 0 | ||
FUJIWARA Katsunori
|
r16478 | $ hg status -A | ||
Patrick Mezard
|
r16492 | C a | ||
FUJIWARA Katsunori
|
r16478 | $ cat A | ||
Patrick Mezard
|
r16492 | a | ||
$ hg up -qC 2 | ||||
FUJIWARA Katsunori
|
r16478 | |||
$ hg update --check 0 | ||||
1 files updated, 0 files merged, 1 files removed, 0 files unresolved | ||||
$ hg parents --template '{rev}\n' | ||||
0 | ||||
$ hg status -A | ||||
C a | ||||
$ cat a | ||||
a | ||||
$ hg update --clean 2 | ||||
1 files updated, 0 files merged, 1 files removed, 0 files unresolved | ||||
$ hg parents --template '{rev}\n' | ||||
2 | ||||
$ hg status -A | ||||
C A | ||||
$ cat A | ||||
A | ||||
$ cd .. | ||||
(3) colliding file is not related to collided file: added in working dir | ||||
$ hg init linearupdate_renameaware_3 | ||||
$ cd linearupdate_renameaware_3 | ||||
$ echo a > a | ||||
$ hg add a | ||||
$ hg commit -m '#0' | ||||
$ hg rename a b | ||||
$ hg commit -m '#1' | ||||
$ hg update 0 | ||||
1 files updated, 0 files merged, 1 files removed, 0 files unresolved | ||||
$ echo B > B | ||||
$ hg add B | ||||
$ hg status | ||||
A B | ||||
$ hg update | ||||
abort: case-folding collision between b and B | ||||
[255] | ||||
$ hg update --check | ||||
Siddharth Agarwal
|
r19801 | abort: uncommitted changes | ||
FUJIWARA Katsunori
|
r16478 | [255] | ||
$ hg update --clean | ||||
1 files updated, 0 files merged, 1 files removed, 0 files unresolved | ||||
$ hg parents --template '{rev}\n' | ||||
1 | ||||
$ hg status -A | ||||
C b | ||||
$ cat b | ||||
a | ||||
$ cd .. | ||||