##// END OF EJS Templates
copies: add config option for writing copy metadata to file and/or changset...
copies: add config option for writing copy metadata to file and/or changset This introduces a config option that lets you choose to write copy metadata to the changeset extras instead of to filelog. There's also an option to write it to both places. I imagine that may possibly be useful when transitioning an existing repo. The copy metadata is stored as two fields in extras: one for copies since p1 and one for copies since p2. I may need to add more information later in order to make copy tracing faster. Specifically, I'm thinking out recording which files were added or removed so that copies._chaincopies() doesn't have to look at the manifest for that. But that would just be an optimization and that can be added once we know if it's necessary. I have also considered saving space by using replacing the destination file path by an index into the "files" list, but that can also be changed later (but before the feature is ready to release). Differential Revision: https://phab.mercurial-scm.org/D6183

File last commit:

r33936:8e472f3b default
r42317:0e41f40b default
Show More
test-casecollision-merge.t
346 lines | 6.8 KiB | text/troff | Tads3Lexer
/ tests / test-casecollision-merge.t
Matt Mackall
tests: replace exit 80 with #require
r22046 #require icasefs
FUJIWARA Katsunori
merge: check filename case collision between changesets for branch merging...
r15673
################################
test for branch merging
################################
FUJIWARA Katsunori
icasefs: make case-folding collision detection as rename aware (issue3370)...
r16478 test for rename awareness of case-folding collision check:
FUJIWARA Katsunori
merge: check filename case collision between changesets for branch merging...
r15673
FUJIWARA Katsunori
icasefs: make case-folding collision detection as rename aware (issue3370)...
r16478 (1) colliding file is one renamed from collided file:
this is also case for issue3370.
FUJIWARA Katsunori
merge: check filename case collision between changesets for branch merging...
r15673
FUJIWARA Katsunori
icasefs: make case-folding collision detection as deletion aware (issue3648)...
r17889 $ hg init branch_merge_renaming
$ cd branch_merge_renaming
FUJIWARA Katsunori
merge: check filename case collision between changesets for branch merging...
r15673
FUJIWARA Katsunori
icasefs: make case-folding collision detection as rename aware (issue3370)...
r16478 $ echo a > a
$ hg add a
FUJIWARA Katsunori
icasefs: enhance test to prevent regression by changes in the future...
r19106 $ echo b > b
$ hg add b
FUJIWARA Katsunori
icasefs: make case-folding collision detection as rename aware (issue3370)...
r16478 $ hg commit -m '#0'
FUJIWARA Katsunori
icasefs: rewrite case-folding collision detection (issue3452)...
r19105 $ hg tag -l A
FUJIWARA Katsunori
icasefs: make case-folding collision detection as rename aware (issue3370)...
r16478 $ hg rename a tmp
$ hg rename tmp A
$ hg commit -m '#1'
FUJIWARA Katsunori
icasefs: rewrite case-folding collision detection (issue3452)...
r19105 $ hg tag -l B
FUJIWARA Katsunori
icasefs: refactor "test-casecollision-merge.t" to reuse in succeeding fixes...
r19104 $ hg update -q 0
$ touch x
$ hg add x
FUJIWARA Katsunori
icasefs: make case-folding collision detection as rename aware (issue3370)...
r16478 $ hg commit -m '#2'
FUJIWARA Katsunori
merge: check filename case collision between changesets for branch merging...
r15673 created new head
FUJIWARA Katsunori
icasefs: rewrite case-folding collision detection (issue3452)...
r19105 $ hg tag -l C
FUJIWARA Katsunori
merge: check filename case collision between changesets for branch merging...
r15673
FUJIWARA Katsunori
icasefs: refactor "test-casecollision-merge.t" to reuse in succeeding fixes...
r19104 $ hg merge -q
FUJIWARA Katsunori
icasefs: make case-folding collision detection as rename aware (issue3370)...
r16478 $ hg status -A
M A
R a
FUJIWARA Katsunori
icasefs: enhance test to prevent regression by changes in the future...
r19106 C b
FUJIWARA Katsunori
icasefs: refactor "test-casecollision-merge.t" to reuse in succeeding fixes...
r19104 C x
FUJIWARA Katsunori
icasefs: make case-folding collision detection as rename aware (issue3370)...
r16478
FUJIWARA Katsunori
icasefs: refactor "test-casecollision-merge.t" to reuse in succeeding fixes...
r19104 $ hg update -q --clean 1
$ hg merge -q
FUJIWARA Katsunori
icasefs: make case-folding collision detection as rename aware (issue3370)...
r16478 $ hg status -A
FUJIWARA Katsunori
icasefs: refactor "test-casecollision-merge.t" to reuse in succeeding fixes...
r19104 M x
C A
FUJIWARA Katsunori
icasefs: enhance test to prevent regression by changes in the future...
r19106 C b
FUJIWARA Katsunori
icasefs: rewrite case-folding collision detection (issue3452)...
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
icasefs: enhance test to prevent regression by changes in the future...
r19106 $ echo "modify 'b' at (E)" > b
FUJIWARA Katsunori
icasefs: rewrite case-folding collision detection (issue3452)...
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
icasefs: enhance test to prevent regression by changes in the future...
r19106 M b
FUJIWARA Katsunori
icasefs: rewrite case-folding collision detection (issue3452)...
r19105 C x
$ cat A
modify 'a' at (E)
FUJIWARA Katsunori
icasefs: make case-folding collision detection as rename aware (issue3370)...
r16478
FUJIWARA Katsunori
icasefs: enhance test to prevent regression by changes in the future...
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
icasefs: make case-folding collision detection as rename aware (issue3370)...
r16478 $ cd ..
(2) colliding file is not related to collided file
FUJIWARA Katsunori
icasefs: make case-folding collision detection as deletion aware (issue3648)...
r17889 $ hg init branch_merge_collding
$ cd branch_merge_collding
FUJIWARA Katsunori
icasefs: make case-folding collision detection as rename aware (issue3370)...
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
icasefs: make case-folding collision detection as deletion aware (issue3648)...
r17889 $ echo x > x
$ hg add x
FUJIWARA Katsunori
icasefs: make case-folding collision detection as rename aware (issue3370)...
r16478 $ hg commit -m '#3'
created new head
FUJIWARA Katsunori
icasefs: make case-folding collision detection as deletion aware (issue3648)...
r17889 $ echo 'modified at #4' > a
$ hg commit -m '#4'
FUJIWARA Katsunori
merge: check filename case collision between changesets for branch merging...
r15673
$ hg merge
Jun Wu
test-casecollision-merge: fix the test...
r33936 abort: case-folding collision between [aA] and [Aa] (re)
FUJIWARA Katsunori
merge: check filename case collision between changesets for branch merging...
r15673 [255]
FUJIWARA Katsunori
icasefs: make case-folding collision detection as rename aware (issue3370)...
r16478 $ hg parents --template '{rev}\n'
FUJIWARA Katsunori
icasefs: make case-folding collision detection as deletion aware (issue3648)...
r17889 4
FUJIWARA Katsunori
icasefs: make case-folding collision detection as rename aware (issue3370)...
r16478 $ hg status -A
C a
FUJIWARA Katsunori
icasefs: make case-folding collision detection as deletion aware (issue3648)...
r17889 C x
FUJIWARA Katsunori
icasefs: make case-folding collision detection as rename aware (issue3370)...
r16478 $ cat a
FUJIWARA Katsunori
icasefs: make case-folding collision detection as deletion aware (issue3648)...
r17889 modified at #4
FUJIWARA Katsunori
merge: check filename case collision between changesets for branch merging...
r15673
FUJIWARA Katsunori
icasefs: make case-folding collision detection as rename aware (issue3370)...
r16478 $ hg update --clean 2
FUJIWARA Katsunori
icasefs: make case-folding collision detection as deletion aware (issue3648)...
r17889 1 files updated, 0 files merged, 2 files removed, 0 files unresolved
FUJIWARA Katsunori
icasefs: make case-folding collision detection as rename aware (issue3370)...
r16478 $ hg merge
Jun Wu
test-casecollision-merge: fix the test...
r33936 abort: case-folding collision between [aA] and [Aa] (re)
FUJIWARA Katsunori
icasefs: make case-folding collision detection as rename aware (issue3370)...
r16478 [255]
FUJIWARA Katsunori
merge: check filename case collision between changesets for branch merging...
r15673 $ hg parents --template '{rev}\n'
2
FUJIWARA Katsunori
icasefs: make case-folding collision detection as rename aware (issue3370)...
r16478 $ hg status -A
C A
$ cat A
A
FUJIWARA Katsunori
icasefs: make case-folding collision detection as deletion aware (issue3648)...
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
merge: check filename case collision between changesets for branch merging...
r15673 $ cd ..
Mads Kiilerich
tests: test of case-folding merge collisions
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
merge: abort on file/directory case folding collisions (issue4892)...
r26661 abort: case-folding collision between Aa and directory of aA/a
Mads Kiilerich
tests: test of case-folding merge collisions
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
icasefs: make case-folding collision detection as rename aware (issue3370)...
r16478
FUJIWARA Katsunori
merge: check filename case collision between changesets for branch merging...
r15673 ################################
test for linear updates
################################
FUJIWARA Katsunori
icasefs: make case-folding collision detection as rename aware (issue3370)...
r16478 test for rename awareness of case-folding collision check:
FUJIWARA Katsunori
merge: check filename case collision between changesets for branch merging...
r15673
FUJIWARA Katsunori
icasefs: make case-folding collision detection as rename aware (issue3370)...
r16478 (1) colliding file is one renamed from collided file
$ hg init linearupdate_renameaware_1
$ cd linearupdate_renameaware_1
FUJIWARA Katsunori
merge: check filename case collision between changesets for branch merging...
r15673
FUJIWARA Katsunori
icasefs: make case-folding collision detection as rename aware (issue3370)...
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
merge: check filename case collision between changesets for branch merging...
r15673
$ hg update 0
FUJIWARA Katsunori
icasefs: make case-folding collision detection as rename aware (issue3370)...
r16478 1 files updated, 0 files merged, 1 files removed, 0 files unresolved
FUJIWARA Katsunori
merge: check filename case collision between changesets for branch merging...
r15673
FUJIWARA Katsunori
icasefs: make case-folding collision detection as rename aware (issue3370)...
r16478 $ echo 'this is added line' >> a
FUJIWARA Katsunori
merge: check filename case collision between changesets for branch merging...
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
icasefs: make case-folding collision detection as rename aware (issue3370)...
r16478 a
FUJIWARA Katsunori
merge: check filename case collision between changesets for branch merging...
r15673 this is added line
FUJIWARA Katsunori
icasefs: make case-folding collision detection as rename aware (issue3370)...
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
update: fix case-collision with a clean wd and no --clean...
r16492 1 files updated, 0 files merged, 1 files removed, 0 files unresolved
FUJIWARA Katsunori
icasefs: make case-folding collision detection as rename aware (issue3370)...
r16478 $ hg parents --template '{rev}\n'
Patrick Mezard
update: fix case-collision with a clean wd and no --clean...
r16492 0
FUJIWARA Katsunori
icasefs: make case-folding collision detection as rename aware (issue3370)...
r16478 $ hg status -A
Patrick Mezard
update: fix case-collision with a clean wd and no --clean...
r16492 C a
FUJIWARA Katsunori
icasefs: make case-folding collision detection as rename aware (issue3370)...
r16478 $ cat A
Patrick Mezard
update: fix case-collision with a clean wd and no --clean...
r16492 a
$ hg up -qC 2
FUJIWARA Katsunori
icasefs: make case-folding collision detection as rename aware (issue3370)...
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
Jun Wu
test-casecollision-merge: fix the test...
r33936 abort: case-folding collision between [bB] and [Bb] (re)
FUJIWARA Katsunori
icasefs: make case-folding collision detection as rename aware (issue3370)...
r16478 [255]
$ hg update --check
Siddharth Agarwal
update: standardize error message for dirty update --check...
r19801 abort: uncommitted changes
FUJIWARA Katsunori
icasefs: make case-folding collision detection as rename aware (issue3370)...
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 ..