comparison tests/test-casecollision-merge.t @ 17889:ce7bc04d863b stable

icasefs: make case-folding collision detection as deletion aware (issue3648) Before this patch, case-folding collision is checked simply between manifests of each merged revisions. So, files may be considered as colliding each other, even though one of them is already deleted on one of merged branches: in such case, merge causes deleting it, so case-folding collision doesn't occur. This patch checks whether both of files colliding each other still remain after merge or not, and ignores collision if at least one of them is deleted by merge. In the case that one of colliding files is deleted on one of merged branches and changed on another, file is considered to still remain after merge, even though it may be deleted by merge, if "deleting" of it is chosen in "manifestmerge()". This avoids fail to merge by case-folding collisions after choices from "changing" and "deleting" of files. This patch adds only tests for "removed remotely" code paths in "_remains()", because other ones are tested by existing tests in "test-casecollision-merge.t".
author FUJIWARA Katsunori <foozy@lares.dti.ne.jp>
date Wed, 31 Oct 2012 16:50:22 +0900
parents 774e2dcd0a65
children 370d9ea027b1
comparison
equal deleted inserted replaced
17888:39b7052b217b 17889:ce7bc04d863b
9 test for rename awareness of case-folding collision check: 9 test for rename awareness of case-folding collision check:
10 10
11 (1) colliding file is one renamed from collided file: 11 (1) colliding file is one renamed from collided file:
12 this is also case for issue3370. 12 this is also case for issue3370.
13 13
14 $ hg init merge_renameaware_1 14 $ hg init branch_merge_renaming
15 $ cd merge_renameaware_1 15 $ cd branch_merge_renaming
16 16
17 $ echo a > a 17 $ echo a > a
18 $ hg add a 18 $ hg add a
19 $ hg commit -m '#0' 19 $ hg commit -m '#0'
20 $ hg rename a tmp 20 $ hg rename a tmp
51 51
52 $ cd .. 52 $ cd ..
53 53
54 (2) colliding file is not related to collided file 54 (2) colliding file is not related to collided file
55 55
56 $ hg init merge_renameaware_2 56 $ hg init branch_merge_collding
57 $ cd merge_renameaware_2 57 $ cd branch_merge_collding
58 58
59 $ echo a > a 59 $ echo a > a
60 $ hg add a 60 $ hg add a
61 $ hg commit -m '#0' 61 $ hg commit -m '#0'
62 $ hg remove a 62 $ hg remove a
64 $ echo A > A 64 $ echo A > A
65 $ hg add A 65 $ hg add A
66 $ hg commit -m '#2' 66 $ hg commit -m '#2'
67 $ hg update --clean 0 67 $ hg update --clean 0
68 1 files updated, 0 files merged, 1 files removed, 0 files unresolved 68 1 files updated, 0 files merged, 1 files removed, 0 files unresolved
69 $ echo 'modified at #3' > a 69 $ echo x > x
70 $ hg add x
70 $ hg commit -m '#3' 71 $ hg commit -m '#3'
71 created new head 72 created new head
73 $ echo 'modified at #4' > a
74 $ hg commit -m '#4'
72 75
73 $ hg merge 76 $ hg merge
74 abort: case-folding collision between A and a 77 abort: case-folding collision between A and a
75 [255] 78 [255]
76 $ hg parents --template '{rev}\n' 79 $ hg parents --template '{rev}\n'
77 3 80 4
78 $ hg status -A 81 $ hg status -A
79 C a 82 C a
83 C x
80 $ cat a 84 $ cat a
81 modified at #3 85 modified at #4
82 86
83 $ hg update --clean 2 87 $ hg update --clean 2
84 1 files updated, 0 files merged, 1 files removed, 0 files unresolved 88 1 files updated, 0 files merged, 2 files removed, 0 files unresolved
85 $ hg merge 89 $ hg merge
86 abort: case-folding collision between a and A 90 abort: case-folding collision between a and A
87 [255] 91 [255]
88 $ hg parents --template '{rev}\n' 92 $ hg parents --template '{rev}\n'
89 2 93 2
90 $ hg status -A 94 $ hg status -A
91 C A 95 C A
92 $ cat A 96 $ cat A
93 A 97 A
98
99 test for deletion awareness of case-folding collision check (issue3648):
100 revision '#3' doesn't change 'a', so 'a' should be recognized as
101 safely removed in merging between #2 and #3.
102
103 $ hg update --clean 3
104 2 files updated, 0 files merged, 1 files removed, 0 files unresolved
105 $ hg merge 2
106 1 files updated, 0 files merged, 1 files removed, 0 files unresolved
107 (branch merge, don't forget to commit)
108 $ hg status -A
109 M A
110 R a
111 C x
112
113 $ hg update --clean 2
114 1 files updated, 0 files merged, 1 files removed, 0 files unresolved
115 $ hg merge 3
116 1 files updated, 0 files merged, 0 files removed, 0 files unresolved
117 (branch merge, don't forget to commit)
118 $ hg status -A
119 M x
120 C A
94 121
95 $ cd .. 122 $ cd ..
96 123
97 124
98 ################################ 125 ################################