##// END OF EJS Templates
tests: collect all branch creation in one place in test-copies-chain-merge.t...
Martin von Zweigbergk -
r45168:4e2845d9 default
parent child Browse files
Show More
@@ -1,869 +1,868 b''
1 =====================================================
1 =====================================================
2 Test Copy tracing for chain of copies involving merge
2 Test Copy tracing for chain of copies involving merge
3 =====================================================
3 =====================================================
4
4
5 This test files covers copies/rename case for a chains of commit where merges
5 This test files covers copies/rename case for a chains of commit where merges
6 are involved. It cheks we do not have unwanted update of behavior and that the
6 are involved. It cheks we do not have unwanted update of behavior and that the
7 different options to retrieve copies behave correctly.
7 different options to retrieve copies behave correctly.
8
8
9 Setup
9 Setup
10 =====
10 =====
11
11
12 use git diff to see rename
12 use git diff to see rename
13
13
14 $ cat << EOF >> $HGRCPATH
14 $ cat << EOF >> $HGRCPATH
15 > [diff]
15 > [diff]
16 > git=yes
16 > git=yes
17 > [ui]
17 > [ui]
18 > logtemplate={rev} {desc}\n
18 > logtemplate={rev} {desc}\n
19 > EOF
19 > EOF
20
20
21 $ hg init repo-chain
21 $ hg init repo-chain
22 $ cd repo-chain
22 $ cd repo-chain
23
23
24 Add some linear rename initialy
24 Add some linear rename initialy
25
25
26 $ touch a b h
26 $ touch a b h
27 $ hg ci -Am 'i-0 initial commit: a b h'
27 $ hg ci -Am 'i-0 initial commit: a b h'
28 adding a
28 adding a
29 adding b
29 adding b
30 adding h
30 adding h
31 $ hg mv a c
31 $ hg mv a c
32 $ hg ci -Am 'i-1: a -move-> c'
32 $ hg ci -Am 'i-1: a -move-> c'
33 $ hg mv c d
33 $ hg mv c d
34 $ hg ci -Am 'i-2: c -move-> d'
34 $ hg ci -Am 'i-2: c -move-> d'
35 $ hg log -G
35 $ hg log -G
36 @ 2 i-2: c -move-> d
36 @ 2 i-2: c -move-> d
37 |
37 |
38 o 1 i-1: a -move-> c
38 o 1 i-1: a -move-> c
39 |
39 |
40 o 0 i-0 initial commit: a b h
40 o 0 i-0 initial commit: a b h
41
41
42
42
43 And having another branch with renames on the other side
43 And having another branch with renames on the other side
44
44
45 $ hg mv d e
45 $ hg mv d e
46 $ hg ci -Am 'a-1: d -move-> e'
46 $ hg ci -Am 'a-1: d -move-> e'
47 $ hg mv e f
47 $ hg mv e f
48 $ hg ci -Am 'a-2: e -move-> f'
48 $ hg ci -Am 'a-2: e -move-> f'
49 $ hg log -G --rev '::.'
49 $ hg log -G --rev '::.'
50 @ 4 a-2: e -move-> f
50 @ 4 a-2: e -move-> f
51 |
51 |
52 o 3 a-1: d -move-> e
52 o 3 a-1: d -move-> e
53 |
53 |
54 o 2 i-2: c -move-> d
54 o 2 i-2: c -move-> d
55 |
55 |
56 o 1 i-1: a -move-> c
56 o 1 i-1: a -move-> c
57 |
57 |
58 o 0 i-0 initial commit: a b h
58 o 0 i-0 initial commit: a b h
59
59
60
60
61 Have a branching with nothing on one side
61 Have a branching with nothing on one side
62
62
63 $ hg up 'desc("i-2")'
63 $ hg up 'desc("i-2")'
64 1 files updated, 0 files merged, 1 files removed, 0 files unresolved
64 1 files updated, 0 files merged, 1 files removed, 0 files unresolved
65 $ echo foo > b
65 $ echo foo > b
66 $ hg ci -m 'b-1: b update'
66 $ hg ci -m 'b-1: b update'
67 created new head
67 created new head
68 $ hg log -G --rev '::.'
68 $ hg log -G --rev '::.'
69 @ 5 b-1: b update
69 @ 5 b-1: b update
70 |
70 |
71 o 2 i-2: c -move-> d
71 o 2 i-2: c -move-> d
72 |
72 |
73 o 1 i-1: a -move-> c
73 o 1 i-1: a -move-> c
74 |
74 |
75 o 0 i-0 initial commit: a b h
75 o 0 i-0 initial commit: a b h
76
76
77
77
78 Create a branch that delete a file previous renamed
79
80 $ hg up 'desc("i-2")'
81 1 files updated, 0 files merged, 0 files removed, 0 files unresolved
82 $ hg rm d
83 $ hg ci -m 'c-1 delete d'
84 created new head
85 $ hg log -G --rev '::.'
86 @ 6 c-1 delete d
87 |
88 o 2 i-2: c -move-> d
89 |
90 o 1 i-1: a -move-> c
91 |
92 o 0 i-0 initial commit: a b h
93
94
95 Create a branch that delete a file previous renamed and recreate it
96
97 $ hg up 'desc("i-2")'
98 1 files updated, 0 files merged, 0 files removed, 0 files unresolved
99 $ hg rm d
100 $ hg ci -m 'd-1 delete d'
101 created new head
102 $ echo bar > d
103 $ hg add d
104 $ hg ci -m 'd-2 re-add d'
105 $ hg log -G --rev '::.'
106 @ 8 d-2 re-add d
107 |
108 o 7 d-1 delete d
109 |
110 o 2 i-2: c -move-> d
111 |
112 o 1 i-1: a -move-> c
113 |
114 o 0 i-0 initial commit: a b h
115
116
117 Having another branch renaming a different file to the same filename as another
118
119 $ hg up 'desc("i-2")'
120 1 files updated, 0 files merged, 0 files removed, 0 files unresolved
121 $ hg mv b g
122 $ hg ci -m 'e-1 b -move-> g'
123 created new head
124 $ hg mv g f
125 $ hg ci -m 'e-2 g -move-> f'
126 $ hg log -G --rev '::.'
127 @ 10 e-2 g -move-> f
128 |
129 o 9 e-1 b -move-> g
130 |
131 o 2 i-2: c -move-> d
132 |
133 o 1 i-1: a -move-> c
134 |
135 o 0 i-0 initial commit: a b h
136
78
137
79 Merge the two branches we just defined (in both directions)
138 Merge the two branches we just defined (in both directions)
80 - one with change to an unrelated file
139 - one with change to an unrelated file
81 - one with renames in them
140 - one with renames in them
82
141
83 $ hg up 'desc("b-1")'
142 $ hg up 'desc("b-1")'
84 0 files updated, 0 files merged, 0 files removed, 0 files unresolved
143 1 files updated, 0 files merged, 1 files removed, 0 files unresolved
85 $ hg merge 'desc("a-2")'
144 $ hg merge 'desc("a-2")'
86 1 files updated, 0 files merged, 1 files removed, 0 files unresolved
145 1 files updated, 0 files merged, 1 files removed, 0 files unresolved
87 (branch merge, don't forget to commit)
146 (branch merge, don't forget to commit)
88 $ hg ci -m 'mBAm-0 simple merge - one way'
147 $ hg ci -m 'mBAm-0 simple merge - one way'
89 $ hg up 'desc("a-2")'
148 $ hg up 'desc("a-2")'
90 1 files updated, 0 files merged, 0 files removed, 0 files unresolved
149 1 files updated, 0 files merged, 0 files removed, 0 files unresolved
91 $ hg merge 'desc("b-1")'
150 $ hg merge 'desc("b-1")'
92 1 files updated, 0 files merged, 0 files removed, 0 files unresolved
151 1 files updated, 0 files merged, 0 files removed, 0 files unresolved
93 (branch merge, don't forget to commit)
152 (branch merge, don't forget to commit)
94 $ hg ci -m 'mABm-0 simple merge - the other way'
153 $ hg ci -m 'mABm-0 simple merge - the other way'
95 created new head
154 created new head
96 $ hg log -G --rev '::(desc("mABm")+desc("mBAm"))'
155 $ hg log -G --rev '::(desc("mABm")+desc("mBAm"))'
97 @ 7 mABm-0 simple merge - the other way
156 @ 12 mABm-0 simple merge - the other way
98 |\
157 |\
99 +---o 6 mBAm-0 simple merge - one way
158 +---o 11 mBAm-0 simple merge - one way
100 | |/
159 | |/
101 | o 5 b-1: b update
160 | o 5 b-1: b update
102 | |
161 | |
103 o | 4 a-2: e -move-> f
162 o | 4 a-2: e -move-> f
104 | |
163 | |
105 o | 3 a-1: d -move-> e
164 o | 3 a-1: d -move-> e
106 |/
165 |/
107 o 2 i-2: c -move-> d
166 o 2 i-2: c -move-> d
108 |
167 |
109 o 1 i-1: a -move-> c
168 o 1 i-1: a -move-> c
110 |
169 |
111 o 0 i-0 initial commit: a b h
170 o 0 i-0 initial commit: a b h
112
171
113
172
114 Create a branch that delete a file previous renamed
115
116 $ hg up 'desc("i-2")'
117 2 files updated, 0 files merged, 1 files removed, 0 files unresolved
118 $ hg rm d
119 $ hg ci -m 'c-1 delete d'
120 created new head
121 $ hg log -G --rev '::.'
122 @ 8 c-1 delete d
123 |
124 o 2 i-2: c -move-> d
125 |
126 o 1 i-1: a -move-> c
127 |
128 o 0 i-0 initial commit: a b h
129
130
131 Merge:
173 Merge:
132 - one with change to an unrelated file
174 - one with change to an unrelated file
133 - one deleting the change
175 - one deleting the change
134 and recreate an unrelated file after the merge
176 and recreate an unrelated file after the merge
135
177
136 $ hg up 'desc("b-1")'
178 $ hg up 'desc("b-1")'
137 2 files updated, 0 files merged, 0 files removed, 0 files unresolved
179 1 files updated, 0 files merged, 1 files removed, 0 files unresolved
138 $ hg merge 'desc("c-1")'
180 $ hg merge 'desc("c-1")'
139 0 files updated, 0 files merged, 1 files removed, 0 files unresolved
181 0 files updated, 0 files merged, 1 files removed, 0 files unresolved
140 (branch merge, don't forget to commit)
182 (branch merge, don't forget to commit)
141 $ hg ci -m 'mBCm-0 simple merge - one way'
183 $ hg ci -m 'mBCm-0 simple merge - one way'
142 $ echo bar > d
184 $ echo bar > d
143 $ hg add d
185 $ hg add d
144 $ hg ci -m 'mBCm-1 re-add d'
186 $ hg ci -m 'mBCm-1 re-add d'
145 $ hg up 'desc("c-1")'
187 $ hg up 'desc("c-1")'
146 1 files updated, 0 files merged, 1 files removed, 0 files unresolved
188 1 files updated, 0 files merged, 1 files removed, 0 files unresolved
147 $ hg merge 'desc("b-1")'
189 $ hg merge 'desc("b-1")'
148 1 files updated, 0 files merged, 0 files removed, 0 files unresolved
190 1 files updated, 0 files merged, 0 files removed, 0 files unresolved
149 (branch merge, don't forget to commit)
191 (branch merge, don't forget to commit)
150 $ hg ci -m 'mCBm-0 simple merge - the other way'
192 $ hg ci -m 'mCBm-0 simple merge - the other way'
151 created new head
193 created new head
152 $ echo bar > d
194 $ echo bar > d
153 $ hg add d
195 $ hg add d
154 $ hg ci -m 'mCBm-1 re-add d'
196 $ hg ci -m 'mCBm-1 re-add d'
155 $ hg log -G --rev '::(desc("mCBm")+desc("mBCm"))'
197 $ hg log -G --rev '::(desc("mCBm")+desc("mBCm"))'
156 @ 12 mCBm-1 re-add d
198 @ 16 mCBm-1 re-add d
157 |
199 |
158 o 11 mCBm-0 simple merge - the other way
200 o 15 mCBm-0 simple merge - the other way
159 |\
201 |\
160 | | o 10 mBCm-1 re-add d
202 | | o 14 mBCm-1 re-add d
161 | | |
203 | | |
162 +---o 9 mBCm-0 simple merge - one way
204 +---o 13 mBCm-0 simple merge - one way
163 | |/
205 | |/
164 | o 8 c-1 delete d
206 | o 6 c-1 delete d
165 | |
207 | |
166 o | 5 b-1: b update
208 o | 5 b-1: b update
167 |/
209 |/
168 o 2 i-2: c -move-> d
210 o 2 i-2: c -move-> d
169 |
211 |
170 o 1 i-1: a -move-> c
212 o 1 i-1: a -move-> c
171 |
213 |
172 o 0 i-0 initial commit: a b h
214 o 0 i-0 initial commit: a b h
173
215
174
216
175 Create a branch that delete a file previous renamed and recreate it
176
177 $ hg up 'desc("i-2")'
178 2 files updated, 0 files merged, 0 files removed, 0 files unresolved
179 $ hg rm d
180 $ hg ci -m 'd-1 delete d'
181 created new head
182 $ echo bar > d
183 $ hg add d
184 $ hg ci -m 'd-2 re-add d'
185 $ hg log -G --rev '::.'
186 @ 14 d-2 re-add d
187 |
188 o 13 d-1 delete d
189 |
190 o 2 i-2: c -move-> d
191 |
192 o 1 i-1: a -move-> c
193 |
194 o 0 i-0 initial commit: a b h
195
196
197 Merge:
217 Merge:
198 - one with change to an unrelated file
218 - one with change to an unrelated file
199 - one deleting and recreating the file
219 - one deleting and recreating the file
200
220
201 Note:
221 Note:
202 | In this case, the merge get conflicting information since on one side we have
222 | In this case, the merge get conflicting information since on one side we have
203 | a "brand new" d. and one the other one we have "d renamed from c (itself
223 | a "brand new" d. and one the other one we have "d renamed from c (itself
204 | renamed from c)".
224 | renamed from c)".
205 |
225 |
206 | The current code arbitrarily pick one side
226 | The current code arbitrarily pick one side
207
227
208 $ hg up 'desc("b-1")'
228 $ hg up 'desc("b-1")'
209 2 files updated, 0 files merged, 0 files removed, 0 files unresolved
229 1 files updated, 0 files merged, 0 files removed, 0 files unresolved
210 $ hg merge 'desc("d-2")'
230 $ hg merge 'desc("d-2")'
211 1 files updated, 0 files merged, 0 files removed, 0 files unresolved
231 1 files updated, 0 files merged, 0 files removed, 0 files unresolved
212 (branch merge, don't forget to commit)
232 (branch merge, don't forget to commit)
213 $ hg ci -m 'mBDm-0 simple merge - one way'
233 $ hg ci -m 'mBDm-0 simple merge - one way'
214 $ hg up 'desc("d-2")'
234 $ hg up 'desc("d-2")'
215 2 files updated, 0 files merged, 0 files removed, 0 files unresolved
235 2 files updated, 0 files merged, 0 files removed, 0 files unresolved
216 $ hg merge 'desc("b-1")'
236 $ hg merge 'desc("b-1")'
217 1 files updated, 0 files merged, 0 files removed, 0 files unresolved
237 1 files updated, 0 files merged, 0 files removed, 0 files unresolved
218 (branch merge, don't forget to commit)
238 (branch merge, don't forget to commit)
219 $ hg ci -m 'mDBm-0 simple merge - the other way'
239 $ hg ci -m 'mDBm-0 simple merge - the other way'
220 created new head
240 created new head
221 $ hg log -G --rev '::(desc("mDBm")+desc("mBDm"))'
241 $ hg log -G --rev '::(desc("mDBm")+desc("mBDm"))'
222 @ 16 mDBm-0 simple merge - the other way
242 @ 18 mDBm-0 simple merge - the other way
223 |\
243 |\
224 +---o 15 mBDm-0 simple merge - one way
244 +---o 17 mBDm-0 simple merge - one way
225 | |/
245 | |/
226 | o 14 d-2 re-add d
246 | o 8 d-2 re-add d
227 | |
247 | |
228 | o 13 d-1 delete d
248 | o 7 d-1 delete d
229 | |
249 | |
230 o | 5 b-1: b update
250 o | 5 b-1: b update
231 |/
251 |/
232 o 2 i-2: c -move-> d
252 o 2 i-2: c -move-> d
233 |
253 |
234 o 1 i-1: a -move-> c
254 o 1 i-1: a -move-> c
235 |
255 |
236 o 0 i-0 initial commit: a b h
256 o 0 i-0 initial commit: a b h
237
257
238
258
239 Having another branch renaming a different file to the same filename as another
240
241 $ hg up 'desc("i-2")'
242 2 files updated, 0 files merged, 0 files removed, 0 files unresolved
243 $ hg mv b g
244 $ hg ci -m 'e-1 b -move-> g'
245 created new head
246 $ hg mv g f
247 $ hg ci -m 'e-2 g -move-> f'
248 $ hg log -G --rev '::.'
249 @ 18 e-2 g -move-> f
250 |
251 o 17 e-1 b -move-> g
252 |
253 o 2 i-2: c -move-> d
254 |
255 o 1 i-1: a -move-> c
256 |
257 o 0 i-0 initial commit: a b h
258
259
260 Merge:
259 Merge:
261 - the "e-" branch renaming b to f (through 'g')
260 - the "e-" branch renaming b to f (through 'g')
262 - the "a-" branch renaming d to f (through e)
261 - the "a-" branch renaming d to f (through e)
263
262
264 $ hg up 'desc("a-2")'
263 $ hg up 'desc("a-2")'
265 2 files updated, 0 files merged, 1 files removed, 0 files unresolved
264 2 files updated, 0 files merged, 1 files removed, 0 files unresolved
266 $ hg merge 'desc("e-2")'
265 $ hg merge 'desc("e-2")'
267 1 files updated, 0 files merged, 1 files removed, 0 files unresolved
266 1 files updated, 0 files merged, 1 files removed, 0 files unresolved
268 (branch merge, don't forget to commit)
267 (branch merge, don't forget to commit)
269 $ hg ci -m 'mAEm-0 simple merge - one way'
268 $ hg ci -m 'mAEm-0 simple merge - one way'
270 $ hg up 'desc("e-2")'
269 $ hg up 'desc("e-2")'
271 2 files updated, 0 files merged, 0 files removed, 0 files unresolved
270 2 files updated, 0 files merged, 0 files removed, 0 files unresolved
272 $ hg merge 'desc("a-2")'
271 $ hg merge 'desc("a-2")'
273 1 files updated, 0 files merged, 1 files removed, 0 files unresolved
272 1 files updated, 0 files merged, 1 files removed, 0 files unresolved
274 (branch merge, don't forget to commit)
273 (branch merge, don't forget to commit)
275 $ hg ci -m 'mEAm-0 simple merge - the other way'
274 $ hg ci -m 'mEAm-0 simple merge - the other way'
276 created new head
275 created new head
277 $ hg log -G --rev '::(desc("mAEm")+desc("mEAm"))'
276 $ hg log -G --rev '::(desc("mAEm")+desc("mEAm"))'
278 @ 20 mEAm-0 simple merge - the other way
277 @ 20 mEAm-0 simple merge - the other way
279 |\
278 |\
280 +---o 19 mAEm-0 simple merge - one way
279 +---o 19 mAEm-0 simple merge - one way
281 | |/
280 | |/
282 | o 18 e-2 g -move-> f
281 | o 10 e-2 g -move-> f
283 | |
282 | |
284 | o 17 e-1 b -move-> g
283 | o 9 e-1 b -move-> g
285 | |
284 | |
286 o | 4 a-2: e -move-> f
285 o | 4 a-2: e -move-> f
287 | |
286 | |
288 o | 3 a-1: d -move-> e
287 o | 3 a-1: d -move-> e
289 |/
288 |/
290 o 2 i-2: c -move-> d
289 o 2 i-2: c -move-> d
291 |
290 |
292 o 1 i-1: a -move-> c
291 o 1 i-1: a -move-> c
293 |
292 |
294 o 0 i-0 initial commit: a b h
293 o 0 i-0 initial commit: a b h
295
294
296
295
297 Note:
296 Note:
298 | In this case, one of the merge wrongly record a merge while there is none.
297 | In this case, one of the merge wrongly record a merge while there is none.
299 | This lead to bad copy tracing information to be dug up.
298 | This lead to bad copy tracing information to be dug up.
300
299
301
300
302 Merge:
301 Merge:
303 - one with change to an unrelated file (b)
302 - one with change to an unrelated file (b)
304 - one overwriting a file (d) with a rename (from h to i to d)
303 - one overwriting a file (d) with a rename (from h to i to d)
305
304
306 $ hg up 'desc("i-2")'
305 $ hg up 'desc("i-2")'
307 2 files updated, 0 files merged, 1 files removed, 0 files unresolved
306 2 files updated, 0 files merged, 1 files removed, 0 files unresolved
308 $ hg mv h i
307 $ hg mv h i
309 $ hg commit -m "f-1: rename h -> i"
308 $ hg commit -m "f-1: rename h -> i"
310 created new head
309 created new head
311 $ hg mv --force i d
310 $ hg mv --force i d
312 $ hg commit -m "f-2: rename i -> d"
311 $ hg commit -m "f-2: rename i -> d"
313 $ hg debugindex d
312 $ hg debugindex d
314 rev linkrev nodeid p1 p2
313 rev linkrev nodeid p1 p2
315 0 2 01c2f5eabdc4 000000000000 000000000000
314 0 2 01c2f5eabdc4 000000000000 000000000000
316 1 10 b004912a8510 000000000000 000000000000
315 1 8 b004912a8510 000000000000 000000000000
317 2 15 0bb5445dc4d0 01c2f5eabdc4 b004912a8510
316 2 17 0bb5445dc4d0 01c2f5eabdc4 b004912a8510
318 3 22 c72365ee036f 000000000000 000000000000
317 3 22 c72365ee036f 000000000000 000000000000
319 $ hg up 'desc("b-1")'
318 $ hg up 'desc("b-1")'
320 3 files updated, 0 files merged, 0 files removed, 0 files unresolved
319 3 files updated, 0 files merged, 0 files removed, 0 files unresolved
321 $ hg merge 'desc("f-2")'
320 $ hg merge 'desc("f-2")'
322 1 files updated, 0 files merged, 1 files removed, 0 files unresolved
321 1 files updated, 0 files merged, 1 files removed, 0 files unresolved
323 (branch merge, don't forget to commit)
322 (branch merge, don't forget to commit)
324 $ hg ci -m 'mBFm-0 simple merge - one way'
323 $ hg ci -m 'mBFm-0 simple merge - one way'
325 $ hg up 'desc("f-2")'
324 $ hg up 'desc("f-2")'
326 2 files updated, 0 files merged, 0 files removed, 0 files unresolved
325 2 files updated, 0 files merged, 0 files removed, 0 files unresolved
327 $ hg merge 'desc("b-1")'
326 $ hg merge 'desc("b-1")'
328 1 files updated, 0 files merged, 0 files removed, 0 files unresolved
327 1 files updated, 0 files merged, 0 files removed, 0 files unresolved
329 (branch merge, don't forget to commit)
328 (branch merge, don't forget to commit)
330 $ hg ci -m 'mFBm-0 simple merge - the other way'
329 $ hg ci -m 'mFBm-0 simple merge - the other way'
331 created new head
330 created new head
332 $ hg log -G --rev '::(desc("mBFm")+desc("mFBm"))'
331 $ hg log -G --rev '::(desc("mBFm")+desc("mFBm"))'
333 @ 24 mFBm-0 simple merge - the other way
332 @ 24 mFBm-0 simple merge - the other way
334 |\
333 |\
335 +---o 23 mBFm-0 simple merge - one way
334 +---o 23 mBFm-0 simple merge - one way
336 | |/
335 | |/
337 | o 22 f-2: rename i -> d
336 | o 22 f-2: rename i -> d
338 | |
337 | |
339 | o 21 f-1: rename h -> i
338 | o 21 f-1: rename h -> i
340 | |
339 | |
341 o | 5 b-1: b update
340 o | 5 b-1: b update
342 |/
341 |/
343 o 2 i-2: c -move-> d
342 o 2 i-2: c -move-> d
344 |
343 |
345 o 1 i-1: a -move-> c
344 o 1 i-1: a -move-> c
346 |
345 |
347 o 0 i-0 initial commit: a b h
346 o 0 i-0 initial commit: a b h
348
347
349
348
350 Merge:
349 Merge:
351 - one with change to a file
350 - one with change to a file
352 - one deleting and recreating the file
351 - one deleting and recreating the file
353
352
354 $ hg up 'desc("i-2")'
353 $ hg up 'desc("i-2")'
355 3 files updated, 0 files merged, 0 files removed, 0 files unresolved
354 3 files updated, 0 files merged, 0 files removed, 0 files unresolved
356 $ echo "some update" >> d
355 $ echo "some update" >> d
357 $ hg commit -m "g-1: update d"
356 $ hg commit -m "g-1: update d"
358 created new head
357 created new head
359 $ hg up 'desc("d-2")'
358 $ hg up 'desc("d-2")'
360 1 files updated, 0 files merged, 0 files removed, 0 files unresolved
359 1 files updated, 0 files merged, 0 files removed, 0 files unresolved
361 $ hg merge 'desc("g-1")' --tool :union
360 $ hg merge 'desc("g-1")' --tool :union
362 merging d
361 merging d
363 1 files updated, 0 files merged, 0 files removed, 0 files unresolved
362 1 files updated, 0 files merged, 0 files removed, 0 files unresolved
364 (branch merge, don't forget to commit)
363 (branch merge, don't forget to commit)
365 $ hg ci -m 'mDGm-0 simple merge - one way'
364 $ hg ci -m 'mDGm-0 simple merge - one way'
366 $ hg up 'desc("g-1")'
365 $ hg up 'desc("g-1")'
367 1 files updated, 0 files merged, 0 files removed, 0 files unresolved
366 1 files updated, 0 files merged, 0 files removed, 0 files unresolved
368 $ hg merge 'desc("d-2")' --tool :union
367 $ hg merge 'desc("d-2")' --tool :union
369 merging d
368 merging d
370 1 files updated, 0 files merged, 0 files removed, 0 files unresolved
369 1 files updated, 0 files merged, 0 files removed, 0 files unresolved
371 (branch merge, don't forget to commit)
370 (branch merge, don't forget to commit)
372 $ hg ci -m 'mGDm-0 simple merge - the other way'
371 $ hg ci -m 'mGDm-0 simple merge - the other way'
373 created new head
372 created new head
374 $ hg log -G --rev '::(desc("mDGm")+desc("mGDm"))'
373 $ hg log -G --rev '::(desc("mDGm")+desc("mGDm"))'
375 @ 27 mGDm-0 simple merge - the other way
374 @ 27 mGDm-0 simple merge - the other way
376 |\
375 |\
377 +---o 26 mDGm-0 simple merge - one way
376 +---o 26 mDGm-0 simple merge - one way
378 | |/
377 | |/
379 | o 25 g-1: update d
378 | o 25 g-1: update d
380 | |
379 | |
381 o | 14 d-2 re-add d
380 o | 8 d-2 re-add d
382 | |
381 | |
383 o | 13 d-1 delete d
382 o | 7 d-1 delete d
384 |/
383 |/
385 o 2 i-2: c -move-> d
384 o 2 i-2: c -move-> d
386 |
385 |
387 o 1 i-1: a -move-> c
386 o 1 i-1: a -move-> c
388 |
387 |
389 o 0 i-0 initial commit: a b h
388 o 0 i-0 initial commit: a b h
390
389
391
390
392
391
393 Merge:
392 Merge:
394 - one with change to a file (d)
393 - one with change to a file (d)
395 - one overwriting that file with a rename (from h to i, to d)
394 - one overwriting that file with a rename (from h to i, to d)
396
395
397 $ hg up 'desc("f-2")'
396 $ hg up 'desc("f-2")'
398 1 files updated, 0 files merged, 1 files removed, 0 files unresolved
397 1 files updated, 0 files merged, 1 files removed, 0 files unresolved
399 $ hg merge 'desc("g-1")' --tool :union
398 $ hg merge 'desc("g-1")' --tool :union
400 merging d
399 merging d
401 0 files updated, 1 files merged, 0 files removed, 0 files unresolved
400 0 files updated, 1 files merged, 0 files removed, 0 files unresolved
402 (branch merge, don't forget to commit)
401 (branch merge, don't forget to commit)
403 $ hg ci -m 'mFGm-0 simple merge - one way'
402 $ hg ci -m 'mFGm-0 simple merge - one way'
404 created new head
403 created new head
405 $ hg up 'desc("g-1")'
404 $ hg up 'desc("g-1")'
406 2 files updated, 0 files merged, 0 files removed, 0 files unresolved
405 2 files updated, 0 files merged, 0 files removed, 0 files unresolved
407 $ hg merge 'desc("f-2")' --tool :union
406 $ hg merge 'desc("f-2")' --tool :union
408 merging d
407 merging d
409 0 files updated, 1 files merged, 1 files removed, 0 files unresolved
408 0 files updated, 1 files merged, 1 files removed, 0 files unresolved
410 (branch merge, don't forget to commit)
409 (branch merge, don't forget to commit)
411 $ hg ci -m 'mGFm-0 simple merge - the other way'
410 $ hg ci -m 'mGFm-0 simple merge - the other way'
412 created new head
411 created new head
413 $ hg log -G --rev '::(desc("mGFm")+desc("mFGm"))'
412 $ hg log -G --rev '::(desc("mGFm")+desc("mFGm"))'
414 @ 29 mGFm-0 simple merge - the other way
413 @ 29 mGFm-0 simple merge - the other way
415 |\
414 |\
416 +---o 28 mFGm-0 simple merge - one way
415 +---o 28 mFGm-0 simple merge - one way
417 | |/
416 | |/
418 | o 25 g-1: update d
417 | o 25 g-1: update d
419 | |
418 | |
420 o | 22 f-2: rename i -> d
419 o | 22 f-2: rename i -> d
421 | |
420 | |
422 o | 21 f-1: rename h -> i
421 o | 21 f-1: rename h -> i
423 |/
422 |/
424 o 2 i-2: c -move-> d
423 o 2 i-2: c -move-> d
425 |
424 |
426 o 1 i-1: a -move-> c
425 o 1 i-1: a -move-> c
427 |
426 |
428 o 0 i-0 initial commit: a b h
427 o 0 i-0 initial commit: a b h
429
428
430
429
431
430
432 Check results
431 Check results
433 =============
432 =============
434
433
435 merging with unrelated change does not interfer wit the renames
434 merging with unrelated change does not interfer wit the renames
436 ---------------------------------------------------------------
435 ---------------------------------------------------------------
437
436
438 - rename on one side
437 - rename on one side
439 - unrelated change on the other side
438 - unrelated change on the other side
440
439
441 $ hg status --copies --rev 'desc("b-1")' --rev 'desc("mABm")'
440 $ hg status --copies --rev 'desc("b-1")' --rev 'desc("mABm")'
442 A f
441 A f
443 d
442 d
444 R d
443 R d
445 $ hg status --copies --rev 'desc("b-1")' --rev 'desc("mBAm")'
444 $ hg status --copies --rev 'desc("b-1")' --rev 'desc("mBAm")'
446 A f
445 A f
447 d
446 d
448 R d
447 R d
449 $ hg status --copies --rev 'desc("a-2")' --rev 'desc("mABm")'
448 $ hg status --copies --rev 'desc("a-2")' --rev 'desc("mABm")'
450 M b
449 M b
451 $ hg status --copies --rev 'desc("a-2")' --rev 'desc("mBAm")'
450 $ hg status --copies --rev 'desc("a-2")' --rev 'desc("mBAm")'
452 M b
451 M b
453 $ hg status --copies --rev 'desc("i-2")' --rev 'desc("mABm")'
452 $ hg status --copies --rev 'desc("i-2")' --rev 'desc("mABm")'
454 M b
453 M b
455 A f
454 A f
456 d
455 d
457 R d
456 R d
458 $ hg status --copies --rev 'desc("i-2")' --rev 'desc("mBAm")'
457 $ hg status --copies --rev 'desc("i-2")' --rev 'desc("mBAm")'
459 M b
458 M b
460 A f
459 A f
461 d
460 d
462 R d
461 R d
463 $ hg status --copies --rev 'desc("i-0")' --rev 'desc("mABm")'
462 $ hg status --copies --rev 'desc("i-0")' --rev 'desc("mABm")'
464 M b
463 M b
465 A f
464 A f
466 a
465 a
467 R a
466 R a
468 $ hg status --copies --rev 'desc("i-0")' --rev 'desc("mBAm")'
467 $ hg status --copies --rev 'desc("i-0")' --rev 'desc("mBAm")'
469 M b
468 M b
470 A f
469 A f
471 a
470 a
472 R a
471 R a
473
472
474 merging with the side having a delete
473 merging with the side having a delete
475 -------------------------------------
474 -------------------------------------
476
475
477 case summary:
476 case summary:
478 - one with change to an unrelated file
477 - one with change to an unrelated file
479 - one deleting the change
478 - one deleting the change
480 and recreate an unrelated file after the merge
479 and recreate an unrelated file after the merge
481
480
482 checks:
481 checks:
483 - comparing from the merge
482 - comparing from the merge
484
483
485 $ hg status --copies --rev 'desc("b-1")' --rev 'desc("mBCm-0")'
484 $ hg status --copies --rev 'desc("b-1")' --rev 'desc("mBCm-0")'
486 R d
485 R d
487 $ hg status --copies --rev 'desc("b-1")' --rev 'desc("mCBm-0")'
486 $ hg status --copies --rev 'desc("b-1")' --rev 'desc("mCBm-0")'
488 R d
487 R d
489 $ hg status --copies --rev 'desc("c-1")' --rev 'desc("mBCm-0")'
488 $ hg status --copies --rev 'desc("c-1")' --rev 'desc("mBCm-0")'
490 M b
489 M b
491 $ hg status --copies --rev 'desc("c-1")' --rev 'desc("mCBm-0")'
490 $ hg status --copies --rev 'desc("c-1")' --rev 'desc("mCBm-0")'
492 M b
491 M b
493 $ hg status --copies --rev 'desc("i-2")' --rev 'desc("mBCm-0")'
492 $ hg status --copies --rev 'desc("i-2")' --rev 'desc("mBCm-0")'
494 M b
493 M b
495 R d
494 R d
496 $ hg status --copies --rev 'desc("i-2")' --rev 'desc("mCBm-0")'
495 $ hg status --copies --rev 'desc("i-2")' --rev 'desc("mCBm-0")'
497 M b
496 M b
498 R d
497 R d
499 $ hg status --copies --rev 'desc("i-0")' --rev 'desc("mBCm-0")'
498 $ hg status --copies --rev 'desc("i-0")' --rev 'desc("mBCm-0")'
500 M b
499 M b
501 R a
500 R a
502 $ hg status --copies --rev 'desc("i-0")' --rev 'desc("mCBm-0")'
501 $ hg status --copies --rev 'desc("i-0")' --rev 'desc("mCBm-0")'
503 M b
502 M b
504 R a
503 R a
505
504
506 - comparing with the merge children re-adding the file
505 - comparing with the merge children re-adding the file
507
506
508 $ hg status --copies --rev 'desc("b-1")' --rev 'desc("mBCm-1")'
507 $ hg status --copies --rev 'desc("b-1")' --rev 'desc("mBCm-1")'
509 M d
508 M d
510 $ hg status --copies --rev 'desc("b-1")' --rev 'desc("mCBm-1")'
509 $ hg status --copies --rev 'desc("b-1")' --rev 'desc("mCBm-1")'
511 M d
510 M d
512 $ hg status --copies --rev 'desc("c-1")' --rev 'desc("mBCm-1")'
511 $ hg status --copies --rev 'desc("c-1")' --rev 'desc("mBCm-1")'
513 M b
512 M b
514 A d
513 A d
515 $ hg status --copies --rev 'desc("c-1")' --rev 'desc("mCBm-1")'
514 $ hg status --copies --rev 'desc("c-1")' --rev 'desc("mCBm-1")'
516 M b
515 M b
517 A d
516 A d
518 $ hg status --copies --rev 'desc("i-2")' --rev 'desc("mBCm-1")'
517 $ hg status --copies --rev 'desc("i-2")' --rev 'desc("mBCm-1")'
519 M b
518 M b
520 M d
519 M d
521 $ hg status --copies --rev 'desc("i-2")' --rev 'desc("mCBm-1")'
520 $ hg status --copies --rev 'desc("i-2")' --rev 'desc("mCBm-1")'
522 M b
521 M b
523 M d
522 M d
524 $ hg status --copies --rev 'desc("i-0")' --rev 'desc("mBCm-1")'
523 $ hg status --copies --rev 'desc("i-0")' --rev 'desc("mBCm-1")'
525 M b
524 M b
526 A d
525 A d
527 R a
526 R a
528 $ hg status --copies --rev 'desc("i-0")' --rev 'desc("mCBm-1")'
527 $ hg status --copies --rev 'desc("i-0")' --rev 'desc("mCBm-1")'
529 M b
528 M b
530 A d
529 A d
531 R a
530 R a
532
531
533 Comparing with a merge re-adding the file afterward
532 Comparing with a merge re-adding the file afterward
534 ---------------------------------------------------
533 ---------------------------------------------------
535
534
536 Merge:
535 Merge:
537 - one with change to an unrelated file
536 - one with change to an unrelated file
538 - one deleting and recreating the change
537 - one deleting and recreating the change
539
538
540 Note:
539 Note:
541 | In this case, one of the merge wrongly record a merge while there is none.
540 | In this case, one of the merge wrongly record a merge while there is none.
542 | This lead to bad copy tracing information to be dug up.
541 | This lead to bad copy tracing information to be dug up.
543
542
544 $ hg status --copies --rev 'desc("b-1")' --rev 'desc("mBDm-0")'
543 $ hg status --copies --rev 'desc("b-1")' --rev 'desc("mBDm-0")'
545 M d
544 M d
546 $ hg status --copies --rev 'desc("b-1")' --rev 'desc("mDBm-0")'
545 $ hg status --copies --rev 'desc("b-1")' --rev 'desc("mDBm-0")'
547 M d
546 M d
548 $ hg status --copies --rev 'desc("d-2")' --rev 'desc("mBDm-0")'
547 $ hg status --copies --rev 'desc("d-2")' --rev 'desc("mBDm-0")'
549 M b
548 M b
550 M d
549 M d
551 $ hg status --copies --rev 'desc("d-2")' --rev 'desc("mDBm-0")'
550 $ hg status --copies --rev 'desc("d-2")' --rev 'desc("mDBm-0")'
552 M b
551 M b
553 $ hg status --copies --rev 'desc("i-2")' --rev 'desc("mBDm-0")'
552 $ hg status --copies --rev 'desc("i-2")' --rev 'desc("mBDm-0")'
554 M b
553 M b
555 M d
554 M d
556 $ hg status --copies --rev 'desc("i-2")' --rev 'desc("mDBm-0")'
555 $ hg status --copies --rev 'desc("i-2")' --rev 'desc("mDBm-0")'
557 M b
556 M b
558 M d
557 M d
559
558
560 The bugs makes recorded copy is different depending of where we started the merge from since
559 The bugs makes recorded copy is different depending of where we started the merge from since
561
560
562 $ hg manifest --debug --rev 'desc("mBDm-0")' | grep '644 d'
561 $ hg manifest --debug --rev 'desc("mBDm-0")' | grep '644 d'
563 0bb5445dc4d02f4e0d86cf16f9f3a411d0f17744 644 d
562 0bb5445dc4d02f4e0d86cf16f9f3a411d0f17744 644 d
564 $ hg manifest --debug --rev 'desc("mDBm-0")' | grep '644 d'
563 $ hg manifest --debug --rev 'desc("mDBm-0")' | grep '644 d'
565 b004912a8510032a0350a74daa2803dadfb00e12 644 d
564 b004912a8510032a0350a74daa2803dadfb00e12 644 d
566
565
567 The 0bb5445dc4d02f4e0d86cf16f9f3a411d0f17744 entry is wrong, since the file was
566 The 0bb5445dc4d02f4e0d86cf16f9f3a411d0f17744 entry is wrong, since the file was
568 deleted on one side (then recreate) and untouched on the other side, no "merge"
567 deleted on one side (then recreate) and untouched on the other side, no "merge"
569 has happened. The resulting `d` file is the untouched version from branch `D`,
568 has happened. The resulting `d` file is the untouched version from branch `D`,
570 not a merge.
569 not a merge.
571
570
572 $ hg manifest --debug --rev 'desc("d-2")' | grep '644 d'
571 $ hg manifest --debug --rev 'desc("d-2")' | grep '644 d'
573 b004912a8510032a0350a74daa2803dadfb00e12 644 d
572 b004912a8510032a0350a74daa2803dadfb00e12 644 d
574 $ hg manifest --debug --rev 'desc("b-1")' | grep '644 d'
573 $ hg manifest --debug --rev 'desc("b-1")' | grep '644 d'
575 01c2f5eabdc4ce2bdee42b5f86311955e6c8f573 644 d
574 01c2f5eabdc4ce2bdee42b5f86311955e6c8f573 644 d
576 $ hg debugindex d
575 $ hg debugindex d
577 rev linkrev nodeid p1 p2
576 rev linkrev nodeid p1 p2
578 0 2 01c2f5eabdc4 000000000000 000000000000
577 0 2 01c2f5eabdc4 000000000000 000000000000
579 1 10 b004912a8510 000000000000 000000000000
578 1 8 b004912a8510 000000000000 000000000000
580 2 15 0bb5445dc4d0 01c2f5eabdc4 b004912a8510
579 2 17 0bb5445dc4d0 01c2f5eabdc4 b004912a8510
581 3 22 c72365ee036f 000000000000 000000000000
580 3 22 c72365ee036f 000000000000 000000000000
582 4 23 863d9bc49190 01c2f5eabdc4 c72365ee036f
581 4 23 863d9bc49190 01c2f5eabdc4 c72365ee036f
583 5 25 7bded9d9da1f 01c2f5eabdc4 000000000000
582 5 25 7bded9d9da1f 01c2f5eabdc4 000000000000
584 6 26 f04cac32d703 b004912a8510 7bded9d9da1f
583 6 26 f04cac32d703 b004912a8510 7bded9d9da1f
585 7 27 d7a5eafb9322 7bded9d9da1f b004912a8510
584 7 27 d7a5eafb9322 7bded9d9da1f b004912a8510
586 8 28 2ed7a51aed47 c72365ee036f 7bded9d9da1f
585 8 28 2ed7a51aed47 c72365ee036f 7bded9d9da1f
587
586
588 (This `hg log` output if wrong, since no merge actually happened).
587 (This `hg log` output if wrong, since no merge actually happened).
589
588
590 $ hg log -Gfr 'desc("mBDm-0")' d
589 $ hg log -Gfr 'desc("mBDm-0")' d
591 o 15 mBDm-0 simple merge - one way
590 o 17 mBDm-0 simple merge - one way
592 |\
591 |\
593 o : 14 d-2 re-add d
592 o : 8 d-2 re-add d
594 :/
593 :/
595 o 2 i-2: c -move-> d
594 o 2 i-2: c -move-> d
596 |
595 |
597 o 1 i-1: a -move-> c
596 o 1 i-1: a -move-> c
598 |
597 |
599 o 0 i-0 initial commit: a b h
598 o 0 i-0 initial commit: a b h
600
599
601
600
602 This `hg log` output is correct
601 This `hg log` output is correct
603
602
604 $ hg log -Gfr 'desc("mDBm-0")' d
603 $ hg log -Gfr 'desc("mDBm-0")' d
605 o 14 d-2 re-add d
604 o 8 d-2 re-add d
606 |
605 |
607 ~
606 ~
608
607
609 $ hg status --copies --rev 'desc("i-0")' --rev 'desc("mBDm-0")'
608 $ hg status --copies --rev 'desc("i-0")' --rev 'desc("mBDm-0")'
610 M b
609 M b
611 A d
610 A d
612 a
611 a
613 R a
612 R a
614 $ hg status --copies --rev 'desc("i-0")' --rev 'desc("mDBm-0")'
613 $ hg status --copies --rev 'desc("i-0")' --rev 'desc("mDBm-0")'
615 M b
614 M b
616 A d
615 A d
617 R a
616 R a
618
617
619 Comparing with a merge with colliding rename
618 Comparing with a merge with colliding rename
620 --------------------------------------------
619 --------------------------------------------
621
620
622 - the "e-" branch renaming b to f (through 'g')
621 - the "e-" branch renaming b to f (through 'g')
623 - the "a-" branch renaming d to f (through e)
622 - the "a-" branch renaming d to f (through e)
624
623
625 $ hg manifest --debug --rev 'desc("mAEm-0")' | grep '644 f'
624 $ hg manifest --debug --rev 'desc("mAEm-0")' | grep '644 f'
626 eb806e34ef6be4c264effd5933d31004ad15a793 644 f
625 eb806e34ef6be4c264effd5933d31004ad15a793 644 f
627 $ hg manifest --debug --rev 'desc("mEAm-0")' | grep '644 f'
626 $ hg manifest --debug --rev 'desc("mEAm-0")' | grep '644 f'
628 eb806e34ef6be4c264effd5933d31004ad15a793 644 f
627 eb806e34ef6be4c264effd5933d31004ad15a793 644 f
629 $ hg manifest --debug --rev 'desc("a-2")' | grep '644 f'
628 $ hg manifest --debug --rev 'desc("a-2")' | grep '644 f'
630 0dd616bc7ab1a111921d95d76f69cda5c2ac539c 644 f
629 0dd616bc7ab1a111921d95d76f69cda5c2ac539c 644 f
631 $ hg manifest --debug --rev 'desc("e-2")' | grep '644 f'
630 $ hg manifest --debug --rev 'desc("e-2")' | grep '644 f'
632 6da5a2eecb9c833f830b67a4972366d49a9a142c 644 f
631 6da5a2eecb9c833f830b67a4972366d49a9a142c 644 f
633 $ hg debugindex f
632 $ hg debugindex f
634 rev linkrev nodeid p1 p2
633 rev linkrev nodeid p1 p2
635 0 4 0dd616bc7ab1 000000000000 000000000000
634 0 4 0dd616bc7ab1 000000000000 000000000000
636 1 18 6da5a2eecb9c 000000000000 000000000000
635 1 10 6da5a2eecb9c 000000000000 000000000000
637 2 19 eb806e34ef6b 0dd616bc7ab1 6da5a2eecb9c
636 2 19 eb806e34ef6b 0dd616bc7ab1 6da5a2eecb9c
638 $ hg status --copies --rev 'desc("a-2")' --rev 'desc("mAEm-0")'
637 $ hg status --copies --rev 'desc("a-2")' --rev 'desc("mAEm-0")'
639 M f
638 M f
640 R b
639 R b
641 $ hg status --copies --rev 'desc("a-2")' --rev 'desc("mEAm-0")'
640 $ hg status --copies --rev 'desc("a-2")' --rev 'desc("mEAm-0")'
642 M f
641 M f
643 R b
642 R b
644 $ hg status --copies --rev 'desc("e-2")' --rev 'desc("mAEm-0")'
643 $ hg status --copies --rev 'desc("e-2")' --rev 'desc("mAEm-0")'
645 M f
644 M f
646 R d
645 R d
647 $ hg status --copies --rev 'desc("e-2")' --rev 'desc("mEAm-0")'
646 $ hg status --copies --rev 'desc("e-2")' --rev 'desc("mEAm-0")'
648 M f
647 M f
649 R d
648 R d
650 $ hg status --copies --rev 'desc("i-2")' --rev 'desc("a-2")'
649 $ hg status --copies --rev 'desc("i-2")' --rev 'desc("a-2")'
651 A f
650 A f
652 d
651 d
653 R d
652 R d
654 $ hg status --copies --rev 'desc("i-2")' --rev 'desc("e-2")'
653 $ hg status --copies --rev 'desc("i-2")' --rev 'desc("e-2")'
655 A f
654 A f
656 b
655 b
657 R b
656 R b
658 $ hg status --copies --rev 'desc("i-2")' --rev 'desc("mAEm-0")'
657 $ hg status --copies --rev 'desc("i-2")' --rev 'desc("mAEm-0")'
659 A f
658 A f
660 d
659 d
661 R b
660 R b
662 R d
661 R d
663 $ hg status --copies --rev 'desc("i-2")' --rev 'desc("mEAm-0")'
662 $ hg status --copies --rev 'desc("i-2")' --rev 'desc("mEAm-0")'
664 A f
663 A f
665 d
664 d
666 R b
665 R b
667 R d
666 R d
668 $ hg status --copies --rev 'desc("i-0")' --rev 'desc("mAEm-0")'
667 $ hg status --copies --rev 'desc("i-0")' --rev 'desc("mAEm-0")'
669 A f
668 A f
670 a
669 a
671 R a
670 R a
672 R b
671 R b
673 $ hg status --copies --rev 'desc("i-0")' --rev 'desc("mEAm-0")'
672 $ hg status --copies --rev 'desc("i-0")' --rev 'desc("mEAm-0")'
674 A f
673 A f
675 a
674 a
676 R a
675 R a
677 R b
676 R b
678
677
679 Merge:
678 Merge:
680 - one with change to an unrelated file (b)
679 - one with change to an unrelated file (b)
681 - one overwriting a file (d) with a rename (from h to i to d)
680 - one overwriting a file (d) with a rename (from h to i to d)
682
681
683 The overwriting should take over. However, the behavior is currently buggy
682 The overwriting should take over. However, the behavior is currently buggy
684
683
685 $ hg status --copies --rev 'desc("i-0")' --rev 'desc("mBFm-0")'
684 $ hg status --copies --rev 'desc("i-0")' --rev 'desc("mBFm-0")'
686 M b
685 M b
687 A d
686 A d
688 a (true !)
687 a (true !)
689 h (false !)
688 h (false !)
690 R a
689 R a
691 R h
690 R h
692 $ hg status --copies --rev 'desc("i-0")' --rev 'desc("mFBm-0")'
691 $ hg status --copies --rev 'desc("i-0")' --rev 'desc("mFBm-0")'
693 M b
692 M b
694 A d
693 A d
695 h
694 h
696 R a
695 R a
697 R h
696 R h
698 $ hg status --copies --rev 'desc("b-1")' --rev 'desc("mBFm-0")'
697 $ hg status --copies --rev 'desc("b-1")' --rev 'desc("mBFm-0")'
699 M d
698 M d
700 R h
699 R h
701 $ hg status --copies --rev 'desc("f-2")' --rev 'desc("mBFm-0")'
700 $ hg status --copies --rev 'desc("f-2")' --rev 'desc("mBFm-0")'
702 M b
701 M b
703 M d
702 M d
704 $ hg status --copies --rev 'desc("f-1")' --rev 'desc("mBFm-0")'
703 $ hg status --copies --rev 'desc("f-1")' --rev 'desc("mBFm-0")'
705 M b
704 M b
706 M d
705 M d
707 R i
706 R i
708 $ hg status --copies --rev 'desc("b-1")' --rev 'desc("mFBm-0")'
707 $ hg status --copies --rev 'desc("b-1")' --rev 'desc("mFBm-0")'
709 M d
708 M d
710 R h
709 R h
711 $ hg status --copies --rev 'desc("f-2")' --rev 'desc("mFBm-0")'
710 $ hg status --copies --rev 'desc("f-2")' --rev 'desc("mFBm-0")'
712 M b
711 M b
713 $ hg status --copies --rev 'desc("f-1")' --rev 'desc("mFBm-0")'
712 $ hg status --copies --rev 'desc("f-1")' --rev 'desc("mFBm-0")'
714 M b
713 M b
715 M d
714 M d
716 R i
715 R i
717
716
718 The following graphlog is wrong, the "a -> c -> d" chain was overwritten and should not appear.
717 The following graphlog is wrong, the "a -> c -> d" chain was overwritten and should not appear.
719
718
720 $ hg log -Gfr 'desc("mBFm-0")' d
719 $ hg log -Gfr 'desc("mBFm-0")' d
721 o 23 mBFm-0 simple merge - one way
720 o 23 mBFm-0 simple merge - one way
722 |\
721 |\
723 o : 22 f-2: rename i -> d
722 o : 22 f-2: rename i -> d
724 | :
723 | :
725 o : 21 f-1: rename h -> i
724 o : 21 f-1: rename h -> i
726 :/
725 :/
727 o 2 i-2: c -move-> d
726 o 2 i-2: c -move-> d
728 |
727 |
729 o 1 i-1: a -move-> c
728 o 1 i-1: a -move-> c
730 |
729 |
731 o 0 i-0 initial commit: a b h
730 o 0 i-0 initial commit: a b h
732
731
733
732
734 The following output is correct.
733 The following output is correct.
735
734
736 $ hg log -Gfr 'desc("mFBm-0")' d
735 $ hg log -Gfr 'desc("mFBm-0")' d
737 o 22 f-2: rename i -> d
736 o 22 f-2: rename i -> d
738 |
737 |
739 o 21 f-1: rename h -> i
738 o 21 f-1: rename h -> i
740 :
739 :
741 o 0 i-0 initial commit: a b h
740 o 0 i-0 initial commit: a b h
742
741
743
742
744 Merge:
743 Merge:
745 - one with change to a file
744 - one with change to a file
746 - one deleting and recreating the file
745 - one deleting and recreating the file
747
746
748 Unlike in the 'BD/DB' cases, an actuall merge happened here. So we should
747 Unlike in the 'BD/DB' cases, an actuall merge happened here. So we should
749 consider history and rename on both branch of the merge.
748 consider history and rename on both branch of the merge.
750
749
751 $ hg status --copies --rev 'desc("i-0")' --rev 'desc("mDGm-0")'
750 $ hg status --copies --rev 'desc("i-0")' --rev 'desc("mDGm-0")'
752 A d
751 A d
753 a
752 a
754 R a
753 R a
755 $ hg status --copies --rev 'desc("i-0")' --rev 'desc("mGDm-0")'
754 $ hg status --copies --rev 'desc("i-0")' --rev 'desc("mGDm-0")'
756 A d
755 A d
757 a
756 a
758 R a
757 R a
759 $ hg status --copies --rev 'desc("d-2")' --rev 'desc("mDGm-0")'
758 $ hg status --copies --rev 'desc("d-2")' --rev 'desc("mDGm-0")'
760 M d
759 M d
761 $ hg status --copies --rev 'desc("d-2")' --rev 'desc("mGDm-0")'
760 $ hg status --copies --rev 'desc("d-2")' --rev 'desc("mGDm-0")'
762 M d
761 M d
763 $ hg status --copies --rev 'desc("g-1")' --rev 'desc("mDGm-0")'
762 $ hg status --copies --rev 'desc("g-1")' --rev 'desc("mDGm-0")'
764 M d
763 M d
765 $ hg status --copies --rev 'desc("g-1")' --rev 'desc("mGDm-0")'
764 $ hg status --copies --rev 'desc("g-1")' --rev 'desc("mGDm-0")'
766 M d
765 M d
767
766
768 $ hg log -Gfr 'desc("mDGm-0")' d
767 $ hg log -Gfr 'desc("mDGm-0")' d
769 o 26 mDGm-0 simple merge - one way
768 o 26 mDGm-0 simple merge - one way
770 |\
769 |\
771 | o 25 g-1: update d
770 | o 25 g-1: update d
772 | |
771 | |
773 o | 14 d-2 re-add d
772 o | 8 d-2 re-add d
774 |/
773 |/
775 o 2 i-2: c -move-> d
774 o 2 i-2: c -move-> d
776 |
775 |
777 o 1 i-1: a -move-> c
776 o 1 i-1: a -move-> c
778 |
777 |
779 o 0 i-0 initial commit: a b h
778 o 0 i-0 initial commit: a b h
780
779
781
780
782
781
783 $ hg log -Gfr 'desc("mDGm-0")' d
782 $ hg log -Gfr 'desc("mDGm-0")' d
784 o 26 mDGm-0 simple merge - one way
783 o 26 mDGm-0 simple merge - one way
785 |\
784 |\
786 | o 25 g-1: update d
785 | o 25 g-1: update d
787 | |
786 | |
788 o | 14 d-2 re-add d
787 o | 8 d-2 re-add d
789 |/
788 |/
790 o 2 i-2: c -move-> d
789 o 2 i-2: c -move-> d
791 |
790 |
792 o 1 i-1: a -move-> c
791 o 1 i-1: a -move-> c
793 |
792 |
794 o 0 i-0 initial commit: a b h
793 o 0 i-0 initial commit: a b h
795
794
796
795
797
796
798 Merge:
797 Merge:
799 - one with change to a file (d)
798 - one with change to a file (d)
800 - one overwriting that file with a rename (from h to i, to d)
799 - one overwriting that file with a rename (from h to i, to d)
801
800
802 This case is similar to BF/FB, but an actual merge happens, so both side of the
801 This case is similar to BF/FB, but an actual merge happens, so both side of the
803 history are relevant.
802 history are relevant.
804
803
805 Note:
804 Note:
806 | In this case, the merge get conflicting information since on one side we have
805 | In this case, the merge get conflicting information since on one side we have
807 | "a -> c -> d". and one the other one we have "h -> i -> d".
806 | "a -> c -> d". and one the other one we have "h -> i -> d".
808 |
807 |
809 | The current code arbitrarily pick one side
808 | The current code arbitrarily pick one side
810
809
811 $ hg status --copies --rev 'desc("i-0")' --rev 'desc("mFGm-0")'
810 $ hg status --copies --rev 'desc("i-0")' --rev 'desc("mFGm-0")'
812 A d
811 A d
813 a
812 a
814 R a
813 R a
815 R h
814 R h
816 $ hg status --copies --rev 'desc("i-0")' --rev 'desc("mGFm-0")'
815 $ hg status --copies --rev 'desc("i-0")' --rev 'desc("mGFm-0")'
817 A d
816 A d
818 a
817 a
819 R a
818 R a
820 R h
819 R h
821 $ hg status --copies --rev 'desc("f-2")' --rev 'desc("mFGm-0")'
820 $ hg status --copies --rev 'desc("f-2")' --rev 'desc("mFGm-0")'
822 M d
821 M d
823 $ hg status --copies --rev 'desc("f-2")' --rev 'desc("mGFm-0")'
822 $ hg status --copies --rev 'desc("f-2")' --rev 'desc("mGFm-0")'
824 M d
823 M d
825 $ hg status --copies --rev 'desc("f-1")' --rev 'desc("mFGm-0")'
824 $ hg status --copies --rev 'desc("f-1")' --rev 'desc("mFGm-0")'
826 M d
825 M d
827 R i
826 R i
828 $ hg status --copies --rev 'desc("f-1")' --rev 'desc("mGFm-0")'
827 $ hg status --copies --rev 'desc("f-1")' --rev 'desc("mGFm-0")'
829 M d
828 M d
830 R i
829 R i
831 $ hg status --copies --rev 'desc("g-1")' --rev 'desc("mFGm-0")'
830 $ hg status --copies --rev 'desc("g-1")' --rev 'desc("mFGm-0")'
832 M d
831 M d
833 R h
832 R h
834 $ hg status --copies --rev 'desc("g-1")' --rev 'desc("mGFm-0")'
833 $ hg status --copies --rev 'desc("g-1")' --rev 'desc("mGFm-0")'
835 M d
834 M d
836 R h
835 R h
837
836
838 $ hg log -Gfr 'desc("mFGm-0")' d
837 $ hg log -Gfr 'desc("mFGm-0")' d
839 o 28 mFGm-0 simple merge - one way
838 o 28 mFGm-0 simple merge - one way
840 |\
839 |\
841 | o 25 g-1: update d
840 | o 25 g-1: update d
842 | |
841 | |
843 o | 22 f-2: rename i -> d
842 o | 22 f-2: rename i -> d
844 | |
843 | |
845 o | 21 f-1: rename h -> i
844 o | 21 f-1: rename h -> i
846 |/
845 |/
847 o 2 i-2: c -move-> d
846 o 2 i-2: c -move-> d
848 |
847 |
849 o 1 i-1: a -move-> c
848 o 1 i-1: a -move-> c
850 |
849 |
851 o 0 i-0 initial commit: a b h
850 o 0 i-0 initial commit: a b h
852
851
853
852
854
853
855 $ hg log -Gfr 'desc("mGFm-0")' d
854 $ hg log -Gfr 'desc("mGFm-0")' d
856 @ 29 mGFm-0 simple merge - the other way
855 @ 29 mGFm-0 simple merge - the other way
857 |\
856 |\
858 | o 25 g-1: update d
857 | o 25 g-1: update d
859 | |
858 | |
860 o | 22 f-2: rename i -> d
859 o | 22 f-2: rename i -> d
861 | |
860 | |
862 o | 21 f-1: rename h -> i
861 o | 21 f-1: rename h -> i
863 |/
862 |/
864 o 2 i-2: c -move-> d
863 o 2 i-2: c -move-> d
865 |
864 |
866 o 1 i-1: a -move-> c
865 o 1 i-1: a -move-> c
867 |
866 |
868 o 0 i-0 initial commit: a b h
867 o 0 i-0 initial commit: a b h
869
868
General Comments 0
You need to be logged in to leave comments. Login now