##// END OF EJS Templates
test-copies: add a case involving the `b` and a new `r` branch...
marmoute -
r47307:c7baff95 default
parent child Browse files
Show More
@@ -1,3085 +1,3261 b''
1 #testcases filelog compatibility changeset sidedata upgraded
1 #testcases filelog compatibility changeset sidedata upgraded
2
2
3 =====================================================
3 =====================================================
4 Test Copy tracing for chain of copies involving merge
4 Test Copy tracing for chain of copies involving merge
5 =====================================================
5 =====================================================
6
6
7 This test files covers copies/rename case for a chains of commit where merges
7 This test files covers copies/rename case for a chains of commit where merges
8 are involved. It cheks we do not have unwanted update of behavior and that the
8 are involved. It cheks we do not have unwanted update of behavior and that the
9 different options to retrieve copies behave correctly.
9 different options to retrieve copies behave correctly.
10
10
11
11
12 Setup
12 Setup
13 =====
13 =====
14
14
15 use git diff to see rename
15 use git diff to see rename
16
16
17 $ cat << EOF >> ./no-linkrev
17 $ cat << EOF >> ./no-linkrev
18 > #!$PYTHON
18 > #!$PYTHON
19 > # filter out linkrev part of the debugindex command
19 > # filter out linkrev part of the debugindex command
20 > import sys
20 > import sys
21 > for line in sys.stdin:
21 > for line in sys.stdin:
22 > if " linkrev " in line:
22 > if " linkrev " in line:
23 > print(line.rstrip())
23 > print(line.rstrip())
24 > else:
24 > else:
25 > l = "%s *%s" % (line[:6], line[14:].rstrip())
25 > l = "%s *%s" % (line[:6], line[14:].rstrip())
26 > print(l)
26 > print(l)
27 > EOF
27 > EOF
28 $ chmod +x no-linkrev
28 $ chmod +x no-linkrev
29
29
30 $ cat << EOF >> $HGRCPATH
30 $ cat << EOF >> $HGRCPATH
31 > [diff]
31 > [diff]
32 > git=yes
32 > git=yes
33 > [command-templates]
33 > [command-templates]
34 > log={desc}\n
34 > log={desc}\n
35 > EOF
35 > EOF
36
36
37 #if compatibility
37 #if compatibility
38 $ cat >> $HGRCPATH << EOF
38 $ cat >> $HGRCPATH << EOF
39 > [experimental]
39 > [experimental]
40 > copies.read-from = compatibility
40 > copies.read-from = compatibility
41 > EOF
41 > EOF
42 #endif
42 #endif
43
43
44 #if changeset
44 #if changeset
45 $ cat >> $HGRCPATH << EOF
45 $ cat >> $HGRCPATH << EOF
46 > [experimental]
46 > [experimental]
47 > copies.read-from = changeset-only
47 > copies.read-from = changeset-only
48 > copies.write-to = changeset-only
48 > copies.write-to = changeset-only
49 > EOF
49 > EOF
50 #endif
50 #endif
51
51
52 #if sidedata
52 #if sidedata
53 $ cat >> $HGRCPATH << EOF
53 $ cat >> $HGRCPATH << EOF
54 > [format]
54 > [format]
55 > exp-use-side-data = yes
55 > exp-use-side-data = yes
56 > exp-use-copies-side-data-changeset = yes
56 > exp-use-copies-side-data-changeset = yes
57 > EOF
57 > EOF
58 #endif
58 #endif
59
59
60
60
61 $ cat > same-content.txt << EOF
61 $ cat > same-content.txt << EOF
62 > Here is some content that will be the same accros multiple file.
62 > Here is some content that will be the same accros multiple file.
63 >
63 >
64 > This is done on purpose so that we end up in some merge situation, were the
64 > This is done on purpose so that we end up in some merge situation, were the
65 > resulting content is the same as in the parent(s), but a new filenodes still
65 > resulting content is the same as in the parent(s), but a new filenodes still
66 > need to be created to record some file history information (especially
66 > need to be created to record some file history information (especially
67 > about copies).
67 > about copies).
68 > EOF
68 > EOF
69
69
70 $ hg init repo-chain
70 $ hg init repo-chain
71 $ cd repo-chain
71 $ cd repo-chain
72
72
73 Add some linear rename initialy
73 Add some linear rename initialy
74
74
75 $ cp ../same-content.txt a
75 $ cp ../same-content.txt a
76 $ cp ../same-content.txt b
76 $ cp ../same-content.txt b
77 $ cp ../same-content.txt h
77 $ cp ../same-content.txt h
78 $ echo "original content for P" > p
78 $ echo "original content for P" > p
79 $ echo "original content for Q" > q
79 $ echo "original content for Q" > q
80 $ echo "original content for R" > r
80 $ echo "original content for R" > r
81 $ hg ci -Am 'i-0 initial commit: a b h'
81 $ hg ci -Am 'i-0 initial commit: a b h'
82 adding a
82 adding a
83 adding b
83 adding b
84 adding h
84 adding h
85 adding p
85 adding p
86 adding q
86 adding q
87 adding r
87 adding r
88 $ hg mv a c
88 $ hg mv a c
89 $ hg mv p s
89 $ hg mv p s
90 $ hg ci -Am 'i-1: a -move-> c, p -move-> s'
90 $ hg ci -Am 'i-1: a -move-> c, p -move-> s'
91 $ hg mv c d
91 $ hg mv c d
92 $ hg mv s t
92 $ hg mv s t
93 $ hg ci -Am 'i-2: c -move-> d, s -move-> t'
93 $ hg ci -Am 'i-2: c -move-> d, s -move-> t'
94 $ hg log -G
94 $ hg log -G
95 @ i-2: c -move-> d, s -move-> t
95 @ i-2: c -move-> d, s -move-> t
96 |
96 |
97 o i-1: a -move-> c, p -move-> s
97 o i-1: a -move-> c, p -move-> s
98 |
98 |
99 o i-0 initial commit: a b h
99 o i-0 initial commit: a b h
100
100
101
101
102 And having another branch with renames on the other side
102 And having another branch with renames on the other side
103
103
104 $ hg mv d e
104 $ hg mv d e
105 $ hg ci -Am 'a-1: d -move-> e'
105 $ hg ci -Am 'a-1: d -move-> e'
106 $ hg mv e f
106 $ hg mv e f
107 $ hg ci -Am 'a-2: e -move-> f'
107 $ hg ci -Am 'a-2: e -move-> f'
108 $ hg log -G --rev '::.'
108 $ hg log -G --rev '::.'
109 @ a-2: e -move-> f
109 @ a-2: e -move-> f
110 |
110 |
111 o a-1: d -move-> e
111 o a-1: d -move-> e
112 |
112 |
113 o i-2: c -move-> d, s -move-> t
113 o i-2: c -move-> d, s -move-> t
114 |
114 |
115 o i-1: a -move-> c, p -move-> s
115 o i-1: a -move-> c, p -move-> s
116 |
116 |
117 o i-0 initial commit: a b h
117 o i-0 initial commit: a b h
118
118
119
119
120 Have a branching with nothing on one side
120 Have a branching with nothing on one side
121
121
122 $ hg up 'desc("i-2")'
122 $ hg up 'desc("i-2")'
123 1 files updated, 0 files merged, 1 files removed, 0 files unresolved
123 1 files updated, 0 files merged, 1 files removed, 0 files unresolved
124 $ echo foo > b
124 $ echo foo > b
125 $ hg ci -m 'b-1: b update'
125 $ hg ci -m 'b-1: b update'
126 created new head
126 created new head
127 $ hg log -G --rev '::.'
127 $ hg log -G --rev '::.'
128 @ b-1: b update
128 @ b-1: b update
129 |
129 |
130 o i-2: c -move-> d, s -move-> t
130 o i-2: c -move-> d, s -move-> t
131 |
131 |
132 o i-1: a -move-> c, p -move-> s
132 o i-1: a -move-> c, p -move-> s
133 |
133 |
134 o i-0 initial commit: a b h
134 o i-0 initial commit: a b h
135
135
136
136
137 Create a branch that delete a file previous renamed
137 Create a branch that delete a file previous renamed
138
138
139 $ hg up 'desc("i-2")'
139 $ hg up 'desc("i-2")'
140 1 files updated, 0 files merged, 0 files removed, 0 files unresolved
140 1 files updated, 0 files merged, 0 files removed, 0 files unresolved
141 $ hg rm d
141 $ hg rm d
142 $ hg ci -m 'c-1 delete d'
142 $ hg ci -m 'c-1 delete d'
143 created new head
143 created new head
144 $ hg log -G --rev '::.'
144 $ hg log -G --rev '::.'
145 @ c-1 delete d
145 @ c-1 delete d
146 |
146 |
147 o i-2: c -move-> d, s -move-> t
147 o i-2: c -move-> d, s -move-> t
148 |
148 |
149 o i-1: a -move-> c, p -move-> s
149 o i-1: a -move-> c, p -move-> s
150 |
150 |
151 o i-0 initial commit: a b h
151 o i-0 initial commit: a b h
152
152
153
153
154 Create a branch that delete a file previous renamed and recreate it
154 Create a branch that delete a file previous renamed and recreate it
155
155
156 $ hg up 'desc("i-2")'
156 $ hg up 'desc("i-2")'
157 1 files updated, 0 files merged, 0 files removed, 0 files unresolved
157 1 files updated, 0 files merged, 0 files removed, 0 files unresolved
158 $ hg rm d
158 $ hg rm d
159 $ hg ci -m 'd-1 delete d'
159 $ hg ci -m 'd-1 delete d'
160 created new head
160 created new head
161 $ echo bar > d
161 $ echo bar > d
162 $ hg add d
162 $ hg add d
163 $ hg ci -m 'd-2 re-add d'
163 $ hg ci -m 'd-2 re-add d'
164 $ hg log -G --rev '::.'
164 $ hg log -G --rev '::.'
165 @ d-2 re-add d
165 @ d-2 re-add d
166 |
166 |
167 o d-1 delete d
167 o d-1 delete d
168 |
168 |
169 o i-2: c -move-> d, s -move-> t
169 o i-2: c -move-> d, s -move-> t
170 |
170 |
171 o i-1: a -move-> c, p -move-> s
171 o i-1: a -move-> c, p -move-> s
172 |
172 |
173 o i-0 initial commit: a b h
173 o i-0 initial commit: a b h
174
174
175
175
176 Having another branch renaming a different file to the same filename as another
176 Having another branch renaming a different file to the same filename as another
177
177
178 $ hg up 'desc("i-2")'
178 $ hg up 'desc("i-2")'
179 1 files updated, 0 files merged, 0 files removed, 0 files unresolved
179 1 files updated, 0 files merged, 0 files removed, 0 files unresolved
180 $ hg mv b g
180 $ hg mv b g
181 $ hg ci -m 'e-1 b -move-> g'
181 $ hg ci -m 'e-1 b -move-> g'
182 created new head
182 created new head
183 $ hg mv g f
183 $ hg mv g f
184 $ hg ci -m 'e-2 g -move-> f'
184 $ hg ci -m 'e-2 g -move-> f'
185 $ hg log -G --rev '::.'
185 $ hg log -G --rev '::.'
186 @ e-2 g -move-> f
186 @ e-2 g -move-> f
187 |
187 |
188 o e-1 b -move-> g
188 o e-1 b -move-> g
189 |
189 |
190 o i-2: c -move-> d, s -move-> t
190 o i-2: c -move-> d, s -move-> t
191 |
191 |
192 o i-1: a -move-> c, p -move-> s
192 o i-1: a -move-> c, p -move-> s
193 |
193 |
194 o i-0 initial commit: a b h
194 o i-0 initial commit: a b h
195
195
196 $ hg up -q null
196 $ hg up -q null
197
197
198 Having a branch similar to the 'a' one, but moving the 'p' file around.
198 Having a branch similar to the 'a' one, but moving the 'p' file around.
199
199
200 $ hg up 'desc("i-2")'
200 $ hg up 'desc("i-2")'
201 6 files updated, 0 files merged, 0 files removed, 0 files unresolved
201 6 files updated, 0 files merged, 0 files removed, 0 files unresolved
202 $ hg mv t u
202 $ hg mv t u
203 $ hg ci -Am 'p-1: t -move-> u'
203 $ hg ci -Am 'p-1: t -move-> u'
204 created new head
204 created new head
205 $ hg mv u v
205 $ hg mv u v
206 $ hg ci -Am 'p-2: u -move-> v'
206 $ hg ci -Am 'p-2: u -move-> v'
207 $ hg log -G --rev '::.'
207 $ hg log -G --rev '::.'
208 @ p-2: u -move-> v
208 @ p-2: u -move-> v
209 |
209 |
210 o p-1: t -move-> u
210 o p-1: t -move-> u
211 |
211 |
212 o i-2: c -move-> d, s -move-> t
212 o i-2: c -move-> d, s -move-> t
213 |
213 |
214 o i-1: a -move-> c, p -move-> s
214 o i-1: a -move-> c, p -move-> s
215 |
215 |
216 o i-0 initial commit: a b h
216 o i-0 initial commit: a b h
217
217
218 $ hg up -q null
218 $ hg up -q null
219
219
220 Having another branch renaming a different file to the same filename as another
220 Having another branch renaming a different file to the same filename as another
221
221
222 $ hg up 'desc("i-2")'
222 $ hg up 'desc("i-2")'
223 6 files updated, 0 files merged, 0 files removed, 0 files unresolved
223 6 files updated, 0 files merged, 0 files removed, 0 files unresolved
224 $ hg mv r w
224 $ hg mv r w
225 $ hg ci -m 'q-1 r -move-> w'
225 $ hg ci -m 'q-1 r -move-> w'
226 created new head
226 created new head
227 $ hg mv w v
227 $ hg mv w v
228 $ hg ci -m 'q-2 w -move-> v'
228 $ hg ci -m 'q-2 w -move-> v'
229 $ hg log -G --rev '::.'
229 $ hg log -G --rev '::.'
230 @ q-2 w -move-> v
230 @ q-2 w -move-> v
231 |
231 |
232 o q-1 r -move-> w
232 o q-1 r -move-> w
233 |
233 |
234 o i-2: c -move-> d, s -move-> t
234 o i-2: c -move-> d, s -move-> t
235 |
235 |
236 o i-1: a -move-> c, p -move-> s
236 o i-1: a -move-> c, p -move-> s
237 |
237 |
238 o i-0 initial commit: a b h
238 o i-0 initial commit: a b h
239
239
240 $ hg up -q null
240 $ hg up -q null
241
241
242 Setup all merge
242 Setup all merge
243 ===============
243 ===============
244
244
245 This is done beforehand to validate that the upgrade process creates valid copy
245 This is done beforehand to validate that the upgrade process creates valid copy
246 information.
246 information.
247
247
248 merging with unrelated change does not interfere with the renames
248 merging with unrelated change does not interfere with the renames
249 ---------------------------------------------------------------
249 ---------------------------------------------------------------
250
250
251 - rename on one side
251 - rename on one side
252 - unrelated change on the other side
252 - unrelated change on the other side
253
253
254 $ case_desc="simple merge - A side: multiple renames, B side: unrelated update"
254 $ case_desc="simple merge - A side: multiple renames, B side: unrelated update"
255
255
256 $ hg up 'desc("b-1")'
256 $ hg up 'desc("b-1")'
257 6 files updated, 0 files merged, 0 files removed, 0 files unresolved
257 6 files updated, 0 files merged, 0 files removed, 0 files unresolved
258 $ hg merge 'desc("a-2")'
258 $ hg merge 'desc("a-2")'
259 1 files updated, 0 files merged, 1 files removed, 0 files unresolved
259 1 files updated, 0 files merged, 1 files removed, 0 files unresolved
260 (branch merge, don't forget to commit)
260 (branch merge, don't forget to commit)
261 $ hg ci -m "mBAm-0 $case_desc - one way"
261 $ hg ci -m "mBAm-0 $case_desc - one way"
262 $ hg up 'desc("a-2")'
262 $ hg up 'desc("a-2")'
263 1 files updated, 0 files merged, 0 files removed, 0 files unresolved
263 1 files updated, 0 files merged, 0 files removed, 0 files unresolved
264 $ hg merge 'desc("b-1")'
264 $ hg merge 'desc("b-1")'
265 1 files updated, 0 files merged, 0 files removed, 0 files unresolved
265 1 files updated, 0 files merged, 0 files removed, 0 files unresolved
266 (branch merge, don't forget to commit)
266 (branch merge, don't forget to commit)
267 $ hg ci -m "mABm-0 $case_desc - the other way"
267 $ hg ci -m "mABm-0 $case_desc - the other way"
268 created new head
268 created new head
269 $ hg log -G --rev '::(desc("mABm")+desc("mBAm"))'
269 $ hg log -G --rev '::(desc("mABm")+desc("mBAm"))'
270 @ mABm-0 simple merge - A side: multiple renames, B side: unrelated update - the other way
270 @ mABm-0 simple merge - A side: multiple renames, B side: unrelated update - the other way
271 |\
271 |\
272 +---o mBAm-0 simple merge - A side: multiple renames, B side: unrelated update - one way
272 +---o mBAm-0 simple merge - A side: multiple renames, B side: unrelated update - one way
273 | |/
273 | |/
274 | o b-1: b update
274 | o b-1: b update
275 | |
275 | |
276 o | a-2: e -move-> f
276 o | a-2: e -move-> f
277 | |
277 | |
278 o | a-1: d -move-> e
278 o | a-1: d -move-> e
279 |/
279 |/
280 o i-2: c -move-> d, s -move-> t
280 o i-2: c -move-> d, s -move-> t
281 |
281 |
282 o i-1: a -move-> c, p -move-> s
282 o i-1: a -move-> c, p -move-> s
283 |
283 |
284 o i-0 initial commit: a b h
284 o i-0 initial commit: a b h
285
285
286
286
287
287
288 merging with the side having a delete
288 merging with the side having a delete
289 -------------------------------------
289 -------------------------------------
290
290
291 case summary:
291 case summary:
292 - one with change to an unrelated file
292 - one with change to an unrelated file
293 - one deleting the change
293 - one deleting the change
294 and recreate an unrelated file after the merge
294 and recreate an unrelated file after the merge
295
295
296 $ case_desc="simple merge - C side: delete a file with copies history , B side: unrelated update"
296 $ case_desc="simple merge - C side: delete a file with copies history , B side: unrelated update"
297
297
298 $ hg up 'desc("b-1")'
298 $ hg up 'desc("b-1")'
299 1 files updated, 0 files merged, 1 files removed, 0 files unresolved
299 1 files updated, 0 files merged, 1 files removed, 0 files unresolved
300 $ hg merge 'desc("c-1")'
300 $ hg merge 'desc("c-1")'
301 0 files updated, 0 files merged, 1 files removed, 0 files unresolved
301 0 files updated, 0 files merged, 1 files removed, 0 files unresolved
302 (branch merge, don't forget to commit)
302 (branch merge, don't forget to commit)
303 $ hg ci -m "mBCm-0 $case_desc - one way"
303 $ hg ci -m "mBCm-0 $case_desc - one way"
304 $ echo bar > d
304 $ echo bar > d
305 $ hg add d
305 $ hg add d
306 $ hg ci -m 'mBCm-1 re-add d'
306 $ hg ci -m 'mBCm-1 re-add d'
307 $ hg up 'desc("c-1")'
307 $ hg up 'desc("c-1")'
308 1 files updated, 0 files merged, 1 files removed, 0 files unresolved
308 1 files updated, 0 files merged, 1 files removed, 0 files unresolved
309 $ hg merge 'desc("b-1")'
309 $ hg merge 'desc("b-1")'
310 1 files updated, 0 files merged, 0 files removed, 0 files unresolved
310 1 files updated, 0 files merged, 0 files removed, 0 files unresolved
311 (branch merge, don't forget to commit)
311 (branch merge, don't forget to commit)
312 $ hg ci -m "mCBm-0 $case_desc - the other way"
312 $ hg ci -m "mCBm-0 $case_desc - the other way"
313 created new head
313 created new head
314 $ echo bar > d
314 $ echo bar > d
315 $ hg add d
315 $ hg add d
316 $ hg ci -m 'mCBm-1 re-add d'
316 $ hg ci -m 'mCBm-1 re-add d'
317 $ hg log -G --rev '::(desc("mCBm")+desc("mBCm"))'
317 $ hg log -G --rev '::(desc("mCBm")+desc("mBCm"))'
318 @ mCBm-1 re-add d
318 @ mCBm-1 re-add d
319 |
319 |
320 o mCBm-0 simple merge - C side: delete a file with copies history , B side: unrelated update - the other way
320 o mCBm-0 simple merge - C side: delete a file with copies history , B side: unrelated update - the other way
321 |\
321 |\
322 | | o mBCm-1 re-add d
322 | | o mBCm-1 re-add d
323 | | |
323 | | |
324 +---o mBCm-0 simple merge - C side: delete a file with copies history , B side: unrelated update - one way
324 +---o mBCm-0 simple merge - C side: delete a file with copies history , B side: unrelated update - one way
325 | |/
325 | |/
326 | o c-1 delete d
326 | o c-1 delete d
327 | |
327 | |
328 o | b-1: b update
328 o | b-1: b update
329 |/
329 |/
330 o i-2: c -move-> d, s -move-> t
330 o i-2: c -move-> d, s -move-> t
331 |
331 |
332 o i-1: a -move-> c, p -move-> s
332 o i-1: a -move-> c, p -move-> s
333 |
333 |
334 o i-0 initial commit: a b h
334 o i-0 initial commit: a b h
335
335
336
336
337 Comparing with a merge re-adding the file afterward
337 Comparing with a merge re-adding the file afterward
338 ---------------------------------------------------
338 ---------------------------------------------------
339
339
340 Merge:
340 Merge:
341 - one with change to an unrelated file
341 - one with change to an unrelated file
342 - one deleting and recreating the change
342 - one deleting and recreating the change
343
343
344 $ case_desc="simple merge - B side: unrelated update, D side: delete and recreate a file (with different content)"
344 $ case_desc="simple merge - B side: unrelated update, D side: delete and recreate a file (with different content)"
345
345
346 $ hg up 'desc("b-1")'
346 $ hg up 'desc("b-1")'
347 1 files updated, 0 files merged, 0 files removed, 0 files unresolved
347 1 files updated, 0 files merged, 0 files removed, 0 files unresolved
348 $ hg merge 'desc("d-2")'
348 $ hg merge 'desc("d-2")'
349 1 files updated, 0 files merged, 0 files removed, 0 files unresolved
349 1 files updated, 0 files merged, 0 files removed, 0 files unresolved
350 (branch merge, don't forget to commit)
350 (branch merge, don't forget to commit)
351 $ hg ci -m "mBDm-0 $case_desc - one way"
351 $ hg ci -m "mBDm-0 $case_desc - one way"
352 $ hg up 'desc("d-2")'
352 $ hg up 'desc("d-2")'
353 1 files updated, 0 files merged, 0 files removed, 0 files unresolved
353 1 files updated, 0 files merged, 0 files removed, 0 files unresolved
354 $ hg merge 'desc("b-1")'
354 $ hg merge 'desc("b-1")'
355 1 files updated, 0 files merged, 0 files removed, 0 files unresolved
355 1 files updated, 0 files merged, 0 files removed, 0 files unresolved
356 (branch merge, don't forget to commit)
356 (branch merge, don't forget to commit)
357 $ hg ci -m "mDBm-0 $case_desc - the other way"
357 $ hg ci -m "mDBm-0 $case_desc - the other way"
358 created new head
358 created new head
359 $ hg log -G --rev '::(desc("mDBm")+desc("mBDm"))'
359 $ hg log -G --rev '::(desc("mDBm")+desc("mBDm"))'
360 @ mDBm-0 simple merge - B side: unrelated update, D side: delete and recreate a file (with different content) - the other way
360 @ mDBm-0 simple merge - B side: unrelated update, D side: delete and recreate a file (with different content) - the other way
361 |\
361 |\
362 +---o mBDm-0 simple merge - B side: unrelated update, D side: delete and recreate a file (with different content) - one way
362 +---o mBDm-0 simple merge - B side: unrelated update, D side: delete and recreate a file (with different content) - one way
363 | |/
363 | |/
364 | o d-2 re-add d
364 | o d-2 re-add d
365 | |
365 | |
366 | o d-1 delete d
366 | o d-1 delete d
367 | |
367 | |
368 o | b-1: b update
368 o | b-1: b update
369 |/
369 |/
370 o i-2: c -move-> d, s -move-> t
370 o i-2: c -move-> d, s -move-> t
371 |
371 |
372 o i-1: a -move-> c, p -move-> s
372 o i-1: a -move-> c, p -move-> s
373 |
373 |
374 o i-0 initial commit: a b h
374 o i-0 initial commit: a b h
375
375
376
376
377
377
378 Comparing with a merge with colliding rename
378 Comparing with a merge with colliding rename
379 --------------------------------------------
379 --------------------------------------------
380
380
381 Subcase: new copy information on both side
381 Subcase: new copy information on both side
382 ``````````````````````````````````````````
382 ``````````````````````````````````````````
383
383
384 - the "e-" branch renaming b to f (through 'g')
384 - the "e-" branch renaming b to f (through 'g')
385 - the "a-" branch renaming d to f (through e)
385 - the "a-" branch renaming d to f (through e)
386
386
387 $ case_desc="merge with copies info on both side - A side: rename d to f, E side: b to f, (same content for f)"
387 $ case_desc="merge with copies info on both side - A side: rename d to f, E side: b to f, (same content for f)"
388
388
389 $ hg up 'desc("a-2")'
389 $ hg up 'desc("a-2")'
390 2 files updated, 0 files merged, 1 files removed, 0 files unresolved
390 2 files updated, 0 files merged, 1 files removed, 0 files unresolved
391 $ hg merge 'desc("e-2")'
391 $ hg merge 'desc("e-2")'
392 1 files updated, 0 files merged, 1 files removed, 0 files unresolved (no-changeset !)
392 1 files updated, 0 files merged, 1 files removed, 0 files unresolved (no-changeset !)
393 0 files updated, 0 files merged, 1 files removed, 0 files unresolved (changeset !)
393 0 files updated, 0 files merged, 1 files removed, 0 files unresolved (changeset !)
394 (branch merge, don't forget to commit)
394 (branch merge, don't forget to commit)
395 $ hg ci -m "mAEm-0 $case_desc - one way"
395 $ hg ci -m "mAEm-0 $case_desc - one way"
396 $ hg up 'desc("e-2")'
396 $ hg up 'desc("e-2")'
397 2 files updated, 0 files merged, 0 files removed, 0 files unresolved (no-changeset !)
397 2 files updated, 0 files merged, 0 files removed, 0 files unresolved (no-changeset !)
398 1 files updated, 0 files merged, 0 files removed, 0 files unresolved (changeset !)
398 1 files updated, 0 files merged, 0 files removed, 0 files unresolved (changeset !)
399 $ hg merge 'desc("a-2")'
399 $ hg merge 'desc("a-2")'
400 1 files updated, 0 files merged, 1 files removed, 0 files unresolved (no-changeset !)
400 1 files updated, 0 files merged, 1 files removed, 0 files unresolved (no-changeset !)
401 0 files updated, 0 files merged, 1 files removed, 0 files unresolved (changeset !)
401 0 files updated, 0 files merged, 1 files removed, 0 files unresolved (changeset !)
402 (branch merge, don't forget to commit)
402 (branch merge, don't forget to commit)
403 $ hg ci -m "mEAm-0 $case_desc - the other way"
403 $ hg ci -m "mEAm-0 $case_desc - the other way"
404 created new head
404 created new head
405 $ hg log -G --rev '::(desc("mAEm")+desc("mEAm"))'
405 $ hg log -G --rev '::(desc("mAEm")+desc("mEAm"))'
406 @ mEAm-0 merge with copies info on both side - A side: rename d to f, E side: b to f, (same content for f) - the other way
406 @ mEAm-0 merge with copies info on both side - A side: rename d to f, E side: b to f, (same content for f) - the other way
407 |\
407 |\
408 +---o mAEm-0 merge with copies info on both side - A side: rename d to f, E side: b to f, (same content for f) - one way
408 +---o mAEm-0 merge with copies info on both side - A side: rename d to f, E side: b to f, (same content for f) - one way
409 | |/
409 | |/
410 | o e-2 g -move-> f
410 | o e-2 g -move-> f
411 | |
411 | |
412 | o e-1 b -move-> g
412 | o e-1 b -move-> g
413 | |
413 | |
414 o | a-2: e -move-> f
414 o | a-2: e -move-> f
415 | |
415 | |
416 o | a-1: d -move-> e
416 o | a-1: d -move-> e
417 |/
417 |/
418 o i-2: c -move-> d, s -move-> t
418 o i-2: c -move-> d, s -move-> t
419 |
419 |
420 o i-1: a -move-> c, p -move-> s
420 o i-1: a -move-> c, p -move-> s
421 |
421 |
422 o i-0 initial commit: a b h
422 o i-0 initial commit: a b h
423
423
424
424
425 Subcase: new copy information on both side with an actual merge happening
425 Subcase: new copy information on both side with an actual merge happening
426 `````````````````````````````````````````````````````````````````````````
426 `````````````````````````````````````````````````````````````````````````
427
427
428 - the "p-" branch renaming 't' to 'v' (through 'u')
428 - the "p-" branch renaming 't' to 'v' (through 'u')
429 - the "q-" branch renaming 'r' to 'v' (through 'w')
429 - the "q-" branch renaming 'r' to 'v' (through 'w')
430
430
431 $ case_desc="merge with copies info on both side - P side: rename t to v, Q side: r to v, (different content)"
431 $ case_desc="merge with copies info on both side - P side: rename t to v, Q side: r to v, (different content)"
432
432
433 $ hg up 'desc("p-2")'
433 $ hg up 'desc("p-2")'
434 3 files updated, 0 files merged, 2 files removed, 0 files unresolved
434 3 files updated, 0 files merged, 2 files removed, 0 files unresolved
435 $ hg merge 'desc("q-2")' --tool ':union'
435 $ hg merge 'desc("q-2")' --tool ':union'
436 merging v
436 merging v
437 1 files updated, 0 files merged, 1 files removed, 0 files unresolved
437 1 files updated, 0 files merged, 1 files removed, 0 files unresolved
438 (branch merge, don't forget to commit)
438 (branch merge, don't forget to commit)
439 $ hg ci -m "mPQm-0 $case_desc - one way"
439 $ hg ci -m "mPQm-0 $case_desc - one way"
440 $ hg up 'desc("q-2")'
440 $ hg up 'desc("q-2")'
441 2 files updated, 0 files merged, 0 files removed, 0 files unresolved
441 2 files updated, 0 files merged, 0 files removed, 0 files unresolved
442 $ hg merge 'desc("p-2")' --tool ':union'
442 $ hg merge 'desc("p-2")' --tool ':union'
443 merging v
443 merging v
444 1 files updated, 0 files merged, 1 files removed, 0 files unresolved
444 1 files updated, 0 files merged, 1 files removed, 0 files unresolved
445 (branch merge, don't forget to commit)
445 (branch merge, don't forget to commit)
446 $ hg ci -m "mQPm-0 $case_desc - the other way"
446 $ hg ci -m "mQPm-0 $case_desc - the other way"
447 created new head
447 created new head
448 $ hg log -G --rev '::(desc("mAEm")+desc("mEAm"))'
448 $ hg log -G --rev '::(desc("mAEm")+desc("mEAm"))'
449 o mEAm-0 merge with copies info on both side - A side: rename d to f, E side: b to f, (same content for f) - the other way
449 o mEAm-0 merge with copies info on both side - A side: rename d to f, E side: b to f, (same content for f) - the other way
450 |\
450 |\
451 +---o mAEm-0 merge with copies info on both side - A side: rename d to f, E side: b to f, (same content for f) - one way
451 +---o mAEm-0 merge with copies info on both side - A side: rename d to f, E side: b to f, (same content for f) - one way
452 | |/
452 | |/
453 | o e-2 g -move-> f
453 | o e-2 g -move-> f
454 | |
454 | |
455 | o e-1 b -move-> g
455 | o e-1 b -move-> g
456 | |
456 | |
457 o | a-2: e -move-> f
457 o | a-2: e -move-> f
458 | |
458 | |
459 o | a-1: d -move-> e
459 o | a-1: d -move-> e
460 |/
460 |/
461 o i-2: c -move-> d, s -move-> t
461 o i-2: c -move-> d, s -move-> t
462 |
462 |
463 o i-1: a -move-> c, p -move-> s
463 o i-1: a -move-> c, p -move-> s
464 |
464 |
465 o i-0 initial commit: a b h
465 o i-0 initial commit: a b h
466
466
467
467
468 Subcase: existing copy information overwritten on one branch
468 Subcase: existing copy information overwritten on one branch
469 ````````````````````````````````````````````````````````````
469 ````````````````````````````````````````````````````````````
470
470
471 Merge:
471 Merge:
472 - one with change to an unrelated file (b)
472 - one with change to an unrelated file (b)
473 - one overwriting a file (d) with a rename (from h to i to d)
473 - one overwriting a file (d) with a rename (from h to i to d)
474
474
475 $ case_desc="simple merge - B side: unrelated change, F side: overwrite d with a copy (from h->i->d)"
475 $ case_desc="simple merge - B side: unrelated change, F side: overwrite d with a copy (from h->i->d)"
476
476
477 $ hg up 'desc("i-2")'
477 $ hg up 'desc("i-2")'
478 2 files updated, 0 files merged, 1 files removed, 0 files unresolved
478 2 files updated, 0 files merged, 1 files removed, 0 files unresolved
479 $ hg mv h i
479 $ hg mv h i
480 $ hg commit -m "f-1: rename h -> i"
480 $ hg commit -m "f-1: rename h -> i"
481 created new head
481 created new head
482 $ hg mv --force i d
482 $ hg mv --force i d
483 $ hg commit -m "f-2: rename i -> d"
483 $ hg commit -m "f-2: rename i -> d"
484 $ hg debugindex d | ../no-linkrev
484 $ hg debugindex d | ../no-linkrev
485 rev linkrev nodeid p1 p2
485 rev linkrev nodeid p1 p2
486 0 * d8252ab2e760 000000000000 000000000000 (no-changeset !)
486 0 * d8252ab2e760 000000000000 000000000000 (no-changeset !)
487 0 * ae258f702dfe 000000000000 000000000000 (changeset !)
487 0 * ae258f702dfe 000000000000 000000000000 (changeset !)
488 1 * b004912a8510 000000000000 000000000000
488 1 * b004912a8510 000000000000 000000000000
489 2 * 7b79e2fe0c89 000000000000 000000000000 (no-changeset !)
489 2 * 7b79e2fe0c89 000000000000 000000000000 (no-changeset !)
490 $ hg up 'desc("b-1")'
490 $ hg up 'desc("b-1")'
491 3 files updated, 0 files merged, 0 files removed, 0 files unresolved (no-changeset !)
491 3 files updated, 0 files merged, 0 files removed, 0 files unresolved (no-changeset !)
492 2 files updated, 0 files merged, 0 files removed, 0 files unresolved (changeset !)
492 2 files updated, 0 files merged, 0 files removed, 0 files unresolved (changeset !)
493 $ hg merge 'desc("f-2")'
493 $ hg merge 'desc("f-2")'
494 1 files updated, 0 files merged, 1 files removed, 0 files unresolved (no-changeset !)
494 1 files updated, 0 files merged, 1 files removed, 0 files unresolved (no-changeset !)
495 0 files updated, 0 files merged, 1 files removed, 0 files unresolved (changeset !)
495 0 files updated, 0 files merged, 1 files removed, 0 files unresolved (changeset !)
496 (branch merge, don't forget to commit)
496 (branch merge, don't forget to commit)
497 $ hg ci -m "mBFm-0 $case_desc - one way"
497 $ hg ci -m "mBFm-0 $case_desc - one way"
498 $ hg up 'desc("f-2")'
498 $ hg up 'desc("f-2")'
499 1 files updated, 0 files merged, 0 files removed, 0 files unresolved
499 1 files updated, 0 files merged, 0 files removed, 0 files unresolved
500 $ hg merge 'desc("b-1")'
500 $ hg merge 'desc("b-1")'
501 1 files updated, 0 files merged, 0 files removed, 0 files unresolved
501 1 files updated, 0 files merged, 0 files removed, 0 files unresolved
502 (branch merge, don't forget to commit)
502 (branch merge, don't forget to commit)
503 $ hg ci -m "mFBm-0 $case_desc - the other way"
503 $ hg ci -m "mFBm-0 $case_desc - the other way"
504 created new head
504 created new head
505 $ hg up null --quiet
505 $ hg up null --quiet
506 $ hg log -G --rev '::(desc("mBFm")+desc("mFBm"))'
506 $ hg log -G --rev '::(desc("mBFm")+desc("mFBm"))'
507 o mFBm-0 simple merge - B side: unrelated change, F side: overwrite d with a copy (from h->i->d) - the other way
507 o mFBm-0 simple merge - B side: unrelated change, F side: overwrite d with a copy (from h->i->d) - the other way
508 |\
508 |\
509 +---o mBFm-0 simple merge - B side: unrelated change, F side: overwrite d with a copy (from h->i->d) - one way
509 +---o mBFm-0 simple merge - B side: unrelated change, F side: overwrite d with a copy (from h->i->d) - one way
510 | |/
510 | |/
511 | o f-2: rename i -> d
511 | o f-2: rename i -> d
512 | |
512 | |
513 | o f-1: rename h -> i
513 | o f-1: rename h -> i
514 | |
514 | |
515 o | b-1: b update
515 o | b-1: b update
516 |/
516 |/
517 o i-2: c -move-> d, s -move-> t
517 o i-2: c -move-> d, s -move-> t
518 |
518 |
519 o i-1: a -move-> c, p -move-> s
519 o i-1: a -move-> c, p -move-> s
520 |
520 |
521 o i-0 initial commit: a b h
521 o i-0 initial commit: a b h
522
522
523
523
524 Subcase: existing copy information overwritten on one branch, with different content)
525 `````````````````````````````````````````````````````````````````````````````````````
526
527 Merge:
528 - one with change to an unrelated file (b)
529 - one overwriting a file (t) with a rename (from r to x to t), v content is not the same as on the other branch
530
531 $ case_desc="simple merge - B side: unrelated change, R side: overwrite d with a copy (from r->x->t) different content"
532
533 $ hg up 'desc("i-2")'
534 6 files updated, 0 files merged, 0 files removed, 0 files unresolved
535 $ hg mv r x
536 $ hg commit -m "r-1: rename r -> x"
537 created new head
538 $ hg mv --force x t
539 $ hg commit -m "r-2: rename t -> x"
540 $ hg debugindex t | ../no-linkrev
541 rev linkrev nodeid p1 p2
542 0 * d74efbf65309 000000000000 000000000000 (no-changeset !)
543 1 * 02a930b9d7ad 000000000000 000000000000 (no-changeset !)
544 0 * 5aed6a8dbff0 000000000000 000000000000 (changeset !)
545 1 * a38b2fa17021 000000000000 000000000000 (changeset !)
546 $ hg up 'desc("b-1")'
547 3 files updated, 0 files merged, 0 files removed, 0 files unresolved
548 $ hg merge 'desc("r-2")'
549 1 files updated, 0 files merged, 1 files removed, 0 files unresolved
550 (branch merge, don't forget to commit)
551 $ hg ci -m "mBRm-0 $case_desc - one way"
552 $ hg up 'desc("r-2")'
553 1 files updated, 0 files merged, 0 files removed, 0 files unresolved
554 $ hg merge 'desc("b-1")'
555 1 files updated, 0 files merged, 0 files removed, 0 files unresolved
556 (branch merge, don't forget to commit)
557 $ hg ci -m "mRBm-0 $case_desc - the other way"
558 created new head
559 $ hg up null --quiet
560 $ hg log -G --rev '::(desc("mBRm")+desc("mRBm"))'
561 o mRBm-0 simple merge - B side: unrelated change, R side: overwrite d with a copy (from r->x->t) different content - the other way
562 |\
563 +---o mBRm-0 simple merge - B side: unrelated change, R side: overwrite d with a copy (from r->x->t) different content - one way
564 | |/
565 | o r-2: rename t -> x
566 | |
567 | o r-1: rename r -> x
568 | |
569 o | b-1: b update
570 |/
571 o i-2: c -move-> d, s -move-> t
572 |
573 o i-1: a -move-> c, p -move-> s
574 |
575 o i-0 initial commit: a b h
576
577
524
578
525 Subcase: reset of the copy history on one side
579 Subcase: reset of the copy history on one side
526 ``````````````````````````````````````````````
580 ``````````````````````````````````````````````
527
581
528 Merge:
582 Merge:
529 - one with change to a file
583 - one with change to a file
530 - one deleting and recreating the file
584 - one deleting and recreating the file
531
585
532 Unlike in the 'BD/DB' cases, an actual merge happened here. So we should
586 Unlike in the 'BD/DB' cases, an actual merge happened here. So we should
533 consider history and rename on both branch of the merge.
587 consider history and rename on both branch of the merge.
534
588
535 $ case_desc="actual content merge, copies on one side - D side: delete and re-add (different content), G side: update content"
589 $ case_desc="actual content merge, copies on one side - D side: delete and re-add (different content), G side: update content"
536
590
537 $ hg up 'desc("i-2")'
591 $ hg up 'desc("i-2")'
538 6 files updated, 0 files merged, 0 files removed, 0 files unresolved
592 6 files updated, 0 files merged, 0 files removed, 0 files unresolved
539 $ echo "some update" >> d
593 $ echo "some update" >> d
540 $ hg commit -m "g-1: update d"
594 $ hg commit -m "g-1: update d"
541 created new head
595 created new head
542 $ hg up 'desc("d-2")'
596 $ hg up 'desc("d-2")'
543 1 files updated, 0 files merged, 0 files removed, 0 files unresolved
597 1 files updated, 0 files merged, 0 files removed, 0 files unresolved
544 $ hg merge 'desc("g-1")' --tool :union
598 $ hg merge 'desc("g-1")' --tool :union
545 merging d
599 merging d
546 1 files updated, 0 files merged, 0 files removed, 0 files unresolved
600 1 files updated, 0 files merged, 0 files removed, 0 files unresolved
547 (branch merge, don't forget to commit)
601 (branch merge, don't forget to commit)
548 $ hg ci -m "mDGm-0 $case_desc - one way"
602 $ hg ci -m "mDGm-0 $case_desc - one way"
549 $ hg up 'desc("g-1")'
603 $ hg up 'desc("g-1")'
550 1 files updated, 0 files merged, 0 files removed, 0 files unresolved
604 1 files updated, 0 files merged, 0 files removed, 0 files unresolved
551 $ hg merge 'desc("d-2")' --tool :union
605 $ hg merge 'desc("d-2")' --tool :union
552 merging d
606 merging d
553 1 files updated, 0 files merged, 0 files removed, 0 files unresolved
607 1 files updated, 0 files merged, 0 files removed, 0 files unresolved
554 (branch merge, don't forget to commit)
608 (branch merge, don't forget to commit)
555 $ hg ci -m "mGDm-0 $case_desc - the other way"
609 $ hg ci -m "mGDm-0 $case_desc - the other way"
556 created new head
610 created new head
557 $ hg log -G --rev '::(desc("mDGm")+desc("mGDm"))'
611 $ hg log -G --rev '::(desc("mDGm")+desc("mGDm"))'
558 @ mGDm-0 actual content merge, copies on one side - D side: delete and re-add (different content), G side: update content - the other way
612 @ mGDm-0 actual content merge, copies on one side - D side: delete and re-add (different content), G side: update content - the other way
559 |\
613 |\
560 +---o mDGm-0 actual content merge, copies on one side - D side: delete and re-add (different content), G side: update content - one way
614 +---o mDGm-0 actual content merge, copies on one side - D side: delete and re-add (different content), G side: update content - one way
561 | |/
615 | |/
562 | o g-1: update d
616 | o g-1: update d
563 | |
617 | |
564 o | d-2 re-add d
618 o | d-2 re-add d
565 | |
619 | |
566 o | d-1 delete d
620 o | d-1 delete d
567 |/
621 |/
568 o i-2: c -move-> d, s -move-> t
622 o i-2: c -move-> d, s -move-> t
569 |
623 |
570 o i-1: a -move-> c, p -move-> s
624 o i-1: a -move-> c, p -move-> s
571 |
625 |
572 o i-0 initial commit: a b h
626 o i-0 initial commit: a b h
573
627
574
628
575 Subcase: merging a change to a file with a "copy overwrite" to that file from another branch
629 Subcase: merging a change to a file with a "copy overwrite" to that file from another branch
576 ````````````````````````````````````````````````````````````````````````````````````````````
630 ````````````````````````````````````````````````````````````````````````````````````````````
577
631
578 Merge:
632 Merge:
579 - one with change to a file (d)
633 - one with change to a file (d)
580 - one overwriting that file with a rename (from h to i, to d)
634 - one overwriting that file with a rename (from h to i, to d)
581
635
582 This case is similar to BF/FB, but an actual merge happens, so both side of the
636 This case is similar to BF/FB, but an actual merge happens, so both side of the
583 history are relevant.
637 history are relevant.
584
638
585 Note:
639 Note:
586 | In this case, the merge get conflicting information since on one side we have
640 | In this case, the merge get conflicting information since on one side we have
587 | "a -> c -> d". and one the other one we have "h -> i -> d".
641 | "a -> c -> d". and one the other one we have "h -> i -> d".
588 |
642 |
589 | The current code arbitrarily pick one side
643 | The current code arbitrarily pick one side
590
644
591 $ case_desc="merge - G side: content change, F side: copy overwrite, no content change"
645 $ case_desc="merge - G side: content change, F side: copy overwrite, no content change"
592
646
593 $ hg up 'desc("f-2")'
647 $ hg up 'desc("f-2")'
594 1 files updated, 0 files merged, 1 files removed, 0 files unresolved
648 1 files updated, 0 files merged, 1 files removed, 0 files unresolved
595 $ hg merge 'desc("g-1")' --tool :union
649 $ hg merge 'desc("g-1")' --tool :union
596 merging d (no-changeset !)
650 merging d (no-changeset !)
597 0 files updated, 1 files merged, 0 files removed, 0 files unresolved (no-changeset !)
651 0 files updated, 1 files merged, 0 files removed, 0 files unresolved (no-changeset !)
598 1 files updated, 0 files merged, 0 files removed, 0 files unresolved (changeset !)
652 1 files updated, 0 files merged, 0 files removed, 0 files unresolved (changeset !)
599 (branch merge, don't forget to commit)
653 (branch merge, don't forget to commit)
600 $ hg ci -m "mFGm-0 $case_desc - one way"
654 $ hg ci -m "mFGm-0 $case_desc - one way"
601 created new head
655 created new head
602 $ hg up 'desc("g-1")'
656 $ hg up 'desc("g-1")'
603 2 files updated, 0 files merged, 0 files removed, 0 files unresolved (no-changeset !)
657 2 files updated, 0 files merged, 0 files removed, 0 files unresolved (no-changeset !)
604 1 files updated, 0 files merged, 0 files removed, 0 files unresolved (changeset !)
658 1 files updated, 0 files merged, 0 files removed, 0 files unresolved (changeset !)
605 $ hg merge 'desc("f-2")' --tool :union
659 $ hg merge 'desc("f-2")' --tool :union
606 merging d (no-changeset !)
660 merging d (no-changeset !)
607 0 files updated, 1 files merged, 1 files removed, 0 files unresolved (no-changeset !)
661 0 files updated, 1 files merged, 1 files removed, 0 files unresolved (no-changeset !)
608 0 files updated, 0 files merged, 1 files removed, 0 files unresolved (changeset !)
662 0 files updated, 0 files merged, 1 files removed, 0 files unresolved (changeset !)
609 (branch merge, don't forget to commit)
663 (branch merge, don't forget to commit)
610 $ hg ci -m "mGFm-0 $case_desc - the other way"
664 $ hg ci -m "mGFm-0 $case_desc - the other way"
611 created new head
665 created new head
612 $ hg log -G --rev '::(desc("mGFm")+desc("mFGm"))'
666 $ hg log -G --rev '::(desc("mGFm")+desc("mFGm"))'
613 @ mGFm-0 merge - G side: content change, F side: copy overwrite, no content change - the other way
667 @ mGFm-0 merge - G side: content change, F side: copy overwrite, no content change - the other way
614 |\
668 |\
615 +---o mFGm-0 merge - G side: content change, F side: copy overwrite, no content change - one way
669 +---o mFGm-0 merge - G side: content change, F side: copy overwrite, no content change - one way
616 | |/
670 | |/
617 | o g-1: update d
671 | o g-1: update d
618 | |
672 | |
619 o | f-2: rename i -> d
673 o | f-2: rename i -> d
620 | |
674 | |
621 o | f-1: rename h -> i
675 o | f-1: rename h -> i
622 |/
676 |/
623 o i-2: c -move-> d, s -move-> t
677 o i-2: c -move-> d, s -move-> t
624 |
678 |
625 o i-1: a -move-> c, p -move-> s
679 o i-1: a -move-> c, p -move-> s
626 |
680 |
627 o i-0 initial commit: a b h
681 o i-0 initial commit: a b h
628
682
629
683
630
684
631 Comparing with merging with a deletion (and keeping the file)
685 Comparing with merging with a deletion (and keeping the file)
632 -------------------------------------------------------------
686 -------------------------------------------------------------
633
687
634 Merge:
688 Merge:
635 - one removing a file (d)
689 - one removing a file (d)
636 - one updating that file
690 - one updating that file
637 - the merge keep the modified version of the file (canceling the delete)
691 - the merge keep the modified version of the file (canceling the delete)
638
692
639 In this case, the file keep on living after the merge. So we should not drop its
693 In this case, the file keep on living after the merge. So we should not drop its
640 copy tracing chain.
694 copy tracing chain.
641
695
642 $ case_desc="merge updated/deleted - revive the file (updated content)"
696 $ case_desc="merge updated/deleted - revive the file (updated content)"
643
697
644 $ hg up 'desc("c-1")'
698 $ hg up 'desc("c-1")'
645 1 files updated, 0 files merged, 1 files removed, 0 files unresolved
699 1 files updated, 0 files merged, 1 files removed, 0 files unresolved
646 $ hg merge 'desc("g-1")'
700 $ hg merge 'desc("g-1")'
647 file 'd' was deleted in local [working copy] but was modified in other [merge rev].
701 file 'd' was deleted in local [working copy] but was modified in other [merge rev].
648 You can use (c)hanged version, leave (d)eleted, or leave (u)nresolved.
702 You can use (c)hanged version, leave (d)eleted, or leave (u)nresolved.
649 What do you want to do? u
703 What do you want to do? u
650 0 files updated, 0 files merged, 0 files removed, 1 files unresolved
704 0 files updated, 0 files merged, 0 files removed, 1 files unresolved
651 use 'hg resolve' to retry unresolved file merges or 'hg merge --abort' to abandon
705 use 'hg resolve' to retry unresolved file merges or 'hg merge --abort' to abandon
652 [1]
706 [1]
653 $ hg resolve -t :other d
707 $ hg resolve -t :other d
654 (no more unresolved files)
708 (no more unresolved files)
655 $ hg ci -m "mCGm-0 $case_desc - one way"
709 $ hg ci -m "mCGm-0 $case_desc - one way"
656 created new head
710 created new head
657
711
658 $ hg up 'desc("g-1")'
712 $ hg up 'desc("g-1")'
659 0 files updated, 0 files merged, 0 files removed, 0 files unresolved
713 0 files updated, 0 files merged, 0 files removed, 0 files unresolved
660 $ hg merge 'desc("c-1")'
714 $ hg merge 'desc("c-1")'
661 file 'd' was deleted in other [merge rev] but was modified in local [working copy].
715 file 'd' was deleted in other [merge rev] but was modified in local [working copy].
662 You can use (c)hanged version, (d)elete, or leave (u)nresolved.
716 You can use (c)hanged version, (d)elete, or leave (u)nresolved.
663 What do you want to do? u
717 What do you want to do? u
664 0 files updated, 0 files merged, 0 files removed, 1 files unresolved
718 0 files updated, 0 files merged, 0 files removed, 1 files unresolved
665 use 'hg resolve' to retry unresolved file merges or 'hg merge --abort' to abandon
719 use 'hg resolve' to retry unresolved file merges or 'hg merge --abort' to abandon
666 [1]
720 [1]
667 $ hg resolve -t :local d
721 $ hg resolve -t :local d
668 (no more unresolved files)
722 (no more unresolved files)
669 $ hg ci -m "mGCm-0 $case_desc - the other way"
723 $ hg ci -m "mGCm-0 $case_desc - the other way"
670 created new head
724 created new head
671
725
672 $ hg log -G --rev '::(desc("mCGm")+desc("mGCm"))'
726 $ hg log -G --rev '::(desc("mCGm")+desc("mGCm"))'
673 @ mGCm-0 merge updated/deleted - revive the file (updated content) - the other way
727 @ mGCm-0 merge updated/deleted - revive the file (updated content) - the other way
674 |\
728 |\
675 +---o mCGm-0 merge updated/deleted - revive the file (updated content) - one way
729 +---o mCGm-0 merge updated/deleted - revive the file (updated content) - one way
676 | |/
730 | |/
677 | o g-1: update d
731 | o g-1: update d
678 | |
732 | |
679 o | c-1 delete d
733 o | c-1 delete d
680 |/
734 |/
681 o i-2: c -move-> d, s -move-> t
735 o i-2: c -move-> d, s -move-> t
682 |
736 |
683 o i-1: a -move-> c, p -move-> s
737 o i-1: a -move-> c, p -move-> s
684 |
738 |
685 o i-0 initial commit: a b h
739 o i-0 initial commit: a b h
686
740
687
741
688
742
689
743
690 Comparing with merge restoring an untouched deleted file
744 Comparing with merge restoring an untouched deleted file
691 --------------------------------------------------------
745 --------------------------------------------------------
692
746
693 Merge:
747 Merge:
694 - one removing a file (d)
748 - one removing a file (d)
695 - one leaving the file untouched
749 - one leaving the file untouched
696 - the merge actively restore the file to the same content.
750 - the merge actively restore the file to the same content.
697
751
698 In this case, the file keep on living after the merge. So we should not drop its
752 In this case, the file keep on living after the merge. So we should not drop its
699 copy tracing chain.
753 copy tracing chain.
700
754
701 $ case_desc="merge explicitely revive deleted file - B side: unrelated change, C side: delete d (restored by merge)"
755 $ case_desc="merge explicitely revive deleted file - B side: unrelated change, C side: delete d (restored by merge)"
702
756
703 $ hg up 'desc("c-1")'
757 $ hg up 'desc("c-1")'
704 0 files updated, 0 files merged, 1 files removed, 0 files unresolved
758 0 files updated, 0 files merged, 1 files removed, 0 files unresolved
705 $ hg merge 'desc("b-1")'
759 $ hg merge 'desc("b-1")'
706 1 files updated, 0 files merged, 0 files removed, 0 files unresolved
760 1 files updated, 0 files merged, 0 files removed, 0 files unresolved
707 (branch merge, don't forget to commit)
761 (branch merge, don't forget to commit)
708 $ hg revert --rev 'desc("b-1")' d
762 $ hg revert --rev 'desc("b-1")' d
709 $ hg ci -m "mCB-revert-m-0 $case_desc - one way"
763 $ hg ci -m "mCB-revert-m-0 $case_desc - one way"
710 created new head
764 created new head
711
765
712 $ hg up 'desc("b-1")'
766 $ hg up 'desc("b-1")'
713 0 files updated, 0 files merged, 0 files removed, 0 files unresolved
767 0 files updated, 0 files merged, 0 files removed, 0 files unresolved
714 $ hg merge 'desc("c-1")'
768 $ hg merge 'desc("c-1")'
715 0 files updated, 0 files merged, 1 files removed, 0 files unresolved
769 0 files updated, 0 files merged, 1 files removed, 0 files unresolved
716 (branch merge, don't forget to commit)
770 (branch merge, don't forget to commit)
717 $ hg revert --rev 'desc("b-1")' d
771 $ hg revert --rev 'desc("b-1")' d
718 $ hg ci -m "mBC-revert-m-0 $case_desc - the other way"
772 $ hg ci -m "mBC-revert-m-0 $case_desc - the other way"
719 created new head
773 created new head
720
774
721 $ hg log -G --rev '::(desc("mCB-revert-m")+desc("mBC-revert-m"))'
775 $ hg log -G --rev '::(desc("mCB-revert-m")+desc("mBC-revert-m"))'
722 @ mBC-revert-m-0 merge explicitely revive deleted file - B side: unrelated change, C side: delete d (restored by merge) - the other way
776 @ mBC-revert-m-0 merge explicitely revive deleted file - B side: unrelated change, C side: delete d (restored by merge) - the other way
723 |\
777 |\
724 +---o mCB-revert-m-0 merge explicitely revive deleted file - B side: unrelated change, C side: delete d (restored by merge) - one way
778 +---o mCB-revert-m-0 merge explicitely revive deleted file - B side: unrelated change, C side: delete d (restored by merge) - one way
725 | |/
779 | |/
726 | o c-1 delete d
780 | o c-1 delete d
727 | |
781 | |
728 o | b-1: b update
782 o | b-1: b update
729 |/
783 |/
730 o i-2: c -move-> d, s -move-> t
784 o i-2: c -move-> d, s -move-> t
731 |
785 |
732 o i-1: a -move-> c, p -move-> s
786 o i-1: a -move-> c, p -move-> s
733 |
787 |
734 o i-0 initial commit: a b h
788 o i-0 initial commit: a b h
735
789
736
790
737
791
738 $ hg up null --quiet
792 $ hg up null --quiet
739
793
740 Merging a branch where a rename was deleted with a branch where the same file was renamed
794 Merging a branch where a rename was deleted with a branch where the same file was renamed
741 ------------------------------------------------------------------------------------------
795 ------------------------------------------------------------------------------------------
742
796
743 Create a "conflicting" merge where `d` get removed on one branch before its
797 Create a "conflicting" merge where `d` get removed on one branch before its
744 rename information actually conflict with the other branch.
798 rename information actually conflict with the other branch.
745
799
746 (the copy information from the branch that was not deleted should win).
800 (the copy information from the branch that was not deleted should win).
747
801
748 $ case_desc="simple merge - C side: d is the results of renames then deleted, H side: d is result of another rename (same content as the other branch)"
802 $ case_desc="simple merge - C side: d is the results of renames then deleted, H side: d is result of another rename (same content as the other branch)"
749
803
750 $ hg up 'desc("i-0")'
804 $ hg up 'desc("i-0")'
751 6 files updated, 0 files merged, 0 files removed, 0 files unresolved
805 6 files updated, 0 files merged, 0 files removed, 0 files unresolved
752 $ hg mv b d
806 $ hg mv b d
753 $ hg ci -m "h-1: b -(move)-> d"
807 $ hg ci -m "h-1: b -(move)-> d"
754 created new head
808 created new head
755
809
756 $ hg up 'desc("c-1")'
810 $ hg up 'desc("c-1")'
757 2 files updated, 0 files merged, 3 files removed, 0 files unresolved
811 2 files updated, 0 files merged, 3 files removed, 0 files unresolved
758 $ hg merge 'desc("h-1")'
812 $ hg merge 'desc("h-1")'
759 1 files updated, 0 files merged, 1 files removed, 0 files unresolved
813 1 files updated, 0 files merged, 1 files removed, 0 files unresolved
760 (branch merge, don't forget to commit)
814 (branch merge, don't forget to commit)
761 $ hg ci -m "mCH-delete-before-conflict-m-0 $case_desc - one way"
815 $ hg ci -m "mCH-delete-before-conflict-m-0 $case_desc - one way"
762
816
763 $ hg up 'desc("h-1")'
817 $ hg up 'desc("h-1")'
764 2 files updated, 0 files merged, 1 files removed, 0 files unresolved
818 2 files updated, 0 files merged, 1 files removed, 0 files unresolved
765 $ hg merge 'desc("c-1")'
819 $ hg merge 'desc("c-1")'
766 1 files updated, 0 files merged, 2 files removed, 0 files unresolved
820 1 files updated, 0 files merged, 2 files removed, 0 files unresolved
767 (branch merge, don't forget to commit)
821 (branch merge, don't forget to commit)
768 $ hg ci -m "mHC-delete-before-conflict-m-0 $case_desc - the other way"
822 $ hg ci -m "mHC-delete-before-conflict-m-0 $case_desc - the other way"
769 created new head
823 created new head
770 $ hg log -G --rev '::(desc("mCH-delete-before-conflict-m")+desc("mHC-delete-before-conflict-m"))'
824 $ hg log -G --rev '::(desc("mCH-delete-before-conflict-m")+desc("mHC-delete-before-conflict-m"))'
771 @ mHC-delete-before-conflict-m-0 simple merge - C side: d is the results of renames then deleted, H side: d is result of another rename (same content as the other branch) - the other way
825 @ mHC-delete-before-conflict-m-0 simple merge - C side: d is the results of renames then deleted, H side: d is result of another rename (same content as the other branch) - the other way
772 |\
826 |\
773 +---o mCH-delete-before-conflict-m-0 simple merge - C side: d is the results of renames then deleted, H side: d is result of another rename (same content as the other branch) - one way
827 +---o mCH-delete-before-conflict-m-0 simple merge - C side: d is the results of renames then deleted, H side: d is result of another rename (same content as the other branch) - one way
774 | |/
828 | |/
775 | o h-1: b -(move)-> d
829 | o h-1: b -(move)-> d
776 | |
830 | |
777 o | c-1 delete d
831 o | c-1 delete d
778 | |
832 | |
779 o | i-2: c -move-> d, s -move-> t
833 o | i-2: c -move-> d, s -move-> t
780 | |
834 | |
781 o | i-1: a -move-> c, p -move-> s
835 o | i-1: a -move-> c, p -move-> s
782 |/
836 |/
783 o i-0 initial commit: a b h
837 o i-0 initial commit: a b h
784
838
785
839
786 Variant of previous with extra changes introduced by the merge
840 Variant of previous with extra changes introduced by the merge
787 --------------------------------------------------------------
841 --------------------------------------------------------------
788
842
789 Multiple cases above explicitely test cases where content are the same on both side during merge. In this section we will introduce variants for theses cases where new change are introduced to these file content during the merges.
843 Multiple cases above explicitely test cases where content are the same on both side during merge. In this section we will introduce variants for theses cases where new change are introduced to these file content during the merges.
790
844
791
845
792 Subcase: merge has same initial content on both side, but merge introduced a change
846 Subcase: merge has same initial content on both side, but merge introduced a change
793 ```````````````````````````````````````````````````````````````````````````````````
847 ```````````````````````````````````````````````````````````````````````````````````
794
848
795 Same as `mAEm` and `mEAm` but with extra change to the file before commiting
849 Same as `mAEm` and `mEAm` but with extra change to the file before commiting
796
850
797 - the "e-" branch renaming b to f (through 'g')
851 - the "e-" branch renaming b to f (through 'g')
798 - the "a-" branch renaming d to f (through e)
852 - the "a-" branch renaming d to f (through e)
799
853
800 $ case_desc="merge with file update and copies info on both side - A side: rename d to f, E side: b to f, (same content for f in parent)"
854 $ case_desc="merge with file update and copies info on both side - A side: rename d to f, E side: b to f, (same content for f in parent)"
801
855
802 $ hg up 'desc("a-2")'
856 $ hg up 'desc("a-2")'
803 2 files updated, 0 files merged, 1 files removed, 0 files unresolved
857 2 files updated, 0 files merged, 1 files removed, 0 files unresolved
804 $ hg merge 'desc("e-2")'
858 $ hg merge 'desc("e-2")'
805 1 files updated, 0 files merged, 1 files removed, 0 files unresolved (no-changeset !)
859 1 files updated, 0 files merged, 1 files removed, 0 files unresolved (no-changeset !)
806 0 files updated, 0 files merged, 1 files removed, 0 files unresolved (changeset !)
860 0 files updated, 0 files merged, 1 files removed, 0 files unresolved (changeset !)
807 (branch merge, don't forget to commit)
861 (branch merge, don't forget to commit)
808 $ echo "content change for mAE-change-m" > f
862 $ echo "content change for mAE-change-m" > f
809 $ hg ci -m "mAE-change-m-0 $case_desc - one way"
863 $ hg ci -m "mAE-change-m-0 $case_desc - one way"
810 created new head
864 created new head
811 $ hg up 'desc("e-2")'
865 $ hg up 'desc("e-2")'
812 2 files updated, 0 files merged, 0 files removed, 0 files unresolved
866 2 files updated, 0 files merged, 0 files removed, 0 files unresolved
813 $ hg merge 'desc("a-2")'
867 $ hg merge 'desc("a-2")'
814 1 files updated, 0 files merged, 1 files removed, 0 files unresolved (no-changeset !)
868 1 files updated, 0 files merged, 1 files removed, 0 files unresolved (no-changeset !)
815 0 files updated, 0 files merged, 1 files removed, 0 files unresolved (changeset !)
869 0 files updated, 0 files merged, 1 files removed, 0 files unresolved (changeset !)
816 (branch merge, don't forget to commit)
870 (branch merge, don't forget to commit)
817 $ echo "content change for mEA-change-m" > f
871 $ echo "content change for mEA-change-m" > f
818 $ hg ci -m "mEA-change-m-0 $case_desc - the other way"
872 $ hg ci -m "mEA-change-m-0 $case_desc - the other way"
819 created new head
873 created new head
820 $ hg log -G --rev '::(desc("mAE-change-m")+desc("mEA-change-m"))'
874 $ hg log -G --rev '::(desc("mAE-change-m")+desc("mEA-change-m"))'
821 @ mEA-change-m-0 merge with file update and copies info on both side - A side: rename d to f, E side: b to f, (same content for f in parent) - the other way
875 @ mEA-change-m-0 merge with file update and copies info on both side - A side: rename d to f, E side: b to f, (same content for f in parent) - the other way
822 |\
876 |\
823 +---o mAE-change-m-0 merge with file update and copies info on both side - A side: rename d to f, E side: b to f, (same content for f in parent) - one way
877 +---o mAE-change-m-0 merge with file update and copies info on both side - A side: rename d to f, E side: b to f, (same content for f in parent) - one way
824 | |/
878 | |/
825 | o e-2 g -move-> f
879 | o e-2 g -move-> f
826 | |
880 | |
827 | o e-1 b -move-> g
881 | o e-1 b -move-> g
828 | |
882 | |
829 o | a-2: e -move-> f
883 o | a-2: e -move-> f
830 | |
884 | |
831 o | a-1: d -move-> e
885 o | a-1: d -move-> e
832 |/
886 |/
833 o i-2: c -move-> d, s -move-> t
887 o i-2: c -move-> d, s -move-> t
834 |
888 |
835 o i-1: a -move-> c, p -move-> s
889 o i-1: a -move-> c, p -move-> s
836 |
890 |
837 o i-0 initial commit: a b h
891 o i-0 initial commit: a b h
838
892
839
893
840 Decision from previous merge are properly chained with later merge
894 Decision from previous merge are properly chained with later merge
841 ------------------------------------------------------------------
895 ------------------------------------------------------------------
842
896
843 Subcase: chaining conflicting rename resolution
897 Subcase: chaining conflicting rename resolution
844 ```````````````````````````````````````````````
898 ```````````````````````````````````````````````
845
899
846 The "mAEm" and "mEAm" case create a rename tracking conflict on file 'f'. We
900 The "mAEm" and "mEAm" case create a rename tracking conflict on file 'f'. We
847 add more change on the respective branch and merge again. These second merge
901 add more change on the respective branch and merge again. These second merge
848 does not involve the file 'f' and the arbitration done within "mAEm" and "mEA"
902 does not involve the file 'f' and the arbitration done within "mAEm" and "mEA"
849 about that file should stay unchanged.
903 about that file should stay unchanged.
850
904
851 $ case_desc="chained merges (conflict -> simple) - same content everywhere"
905 $ case_desc="chained merges (conflict -> simple) - same content everywhere"
852
906
853 (extra unrelated changes)
907 (extra unrelated changes)
854
908
855 $ hg up 'desc("a-2")'
909 $ hg up 'desc("a-2")'
856 2 files updated, 0 files merged, 0 files removed, 0 files unresolved
910 2 files updated, 0 files merged, 0 files removed, 0 files unresolved
857 $ echo j > unrelated-j
911 $ echo j > unrelated-j
858 $ hg add unrelated-j
912 $ hg add unrelated-j
859 $ hg ci -m 'j-1: unrelated changes (based on the "a" series of changes)'
913 $ hg ci -m 'j-1: unrelated changes (based on the "a" series of changes)'
860 created new head
914 created new head
861
915
862 $ hg up 'desc("e-2")'
916 $ hg up 'desc("e-2")'
863 2 files updated, 0 files merged, 2 files removed, 0 files unresolved (no-changeset !)
917 2 files updated, 0 files merged, 2 files removed, 0 files unresolved (no-changeset !)
864 1 files updated, 0 files merged, 2 files removed, 0 files unresolved (changeset !)
918 1 files updated, 0 files merged, 2 files removed, 0 files unresolved (changeset !)
865 $ echo k > unrelated-k
919 $ echo k > unrelated-k
866 $ hg add unrelated-k
920 $ hg add unrelated-k
867 $ hg ci -m 'k-1: unrelated changes (based on "e" changes)'
921 $ hg ci -m 'k-1: unrelated changes (based on "e" changes)'
868 created new head
922 created new head
869
923
870 (merge variant 1)
924 (merge variant 1)
871
925
872 $ hg up 'desc("mAEm")'
926 $ hg up 'desc("mAEm")'
873 1 files updated, 0 files merged, 2 files removed, 0 files unresolved (no-changeset !)
927 1 files updated, 0 files merged, 2 files removed, 0 files unresolved (no-changeset !)
874 0 files updated, 0 files merged, 2 files removed, 0 files unresolved (changeset !)
928 0 files updated, 0 files merged, 2 files removed, 0 files unresolved (changeset !)
875 $ hg merge 'desc("k-1")'
929 $ hg merge 'desc("k-1")'
876 1 files updated, 0 files merged, 0 files removed, 0 files unresolved
930 1 files updated, 0 files merged, 0 files removed, 0 files unresolved
877 (branch merge, don't forget to commit)
931 (branch merge, don't forget to commit)
878 $ hg ci -m "mAE,Km: $case_desc"
932 $ hg ci -m "mAE,Km: $case_desc"
879
933
880 (merge variant 2)
934 (merge variant 2)
881
935
882 $ hg up 'desc("k-1")'
936 $ hg up 'desc("k-1")'
883 2 files updated, 0 files merged, 0 files removed, 0 files unresolved (no-changeset !)
937 2 files updated, 0 files merged, 0 files removed, 0 files unresolved (no-changeset !)
884 1 files updated, 0 files merged, 0 files removed, 0 files unresolved (changeset !)
938 1 files updated, 0 files merged, 0 files removed, 0 files unresolved (changeset !)
885
939
886 $ hg merge 'desc("mAEm")'
940 $ hg merge 'desc("mAEm")'
887 1 files updated, 0 files merged, 1 files removed, 0 files unresolved (no-changeset !)
941 1 files updated, 0 files merged, 1 files removed, 0 files unresolved (no-changeset !)
888 0 files updated, 0 files merged, 1 files removed, 0 files unresolved (changeset !)
942 0 files updated, 0 files merged, 1 files removed, 0 files unresolved (changeset !)
889 (branch merge, don't forget to commit)
943 (branch merge, don't forget to commit)
890 $ hg ci -m "mK,AEm: $case_desc"
944 $ hg ci -m "mK,AEm: $case_desc"
891 created new head
945 created new head
892
946
893 (merge variant 3)
947 (merge variant 3)
894
948
895 $ hg up 'desc("mEAm")'
949 $ hg up 'desc("mEAm")'
896 0 files updated, 0 files merged, 1 files removed, 0 files unresolved
950 0 files updated, 0 files merged, 1 files removed, 0 files unresolved
897 $ hg merge 'desc("j-1")'
951 $ hg merge 'desc("j-1")'
898 1 files updated, 0 files merged, 0 files removed, 0 files unresolved
952 1 files updated, 0 files merged, 0 files removed, 0 files unresolved
899 (branch merge, don't forget to commit)
953 (branch merge, don't forget to commit)
900 $ hg ci -m "mEA,Jm: $case_desc"
954 $ hg ci -m "mEA,Jm: $case_desc"
901
955
902 (merge variant 4)
956 (merge variant 4)
903
957
904 $ hg up 'desc("j-1")'
958 $ hg up 'desc("j-1")'
905 2 files updated, 0 files merged, 0 files removed, 0 files unresolved (no-changeset !)
959 2 files updated, 0 files merged, 0 files removed, 0 files unresolved (no-changeset !)
906 1 files updated, 0 files merged, 0 files removed, 0 files unresolved (changeset !)
960 1 files updated, 0 files merged, 0 files removed, 0 files unresolved (changeset !)
907 $ hg merge 'desc("mEAm")'
961 $ hg merge 'desc("mEAm")'
908 1 files updated, 0 files merged, 1 files removed, 0 files unresolved (no-changeset !)
962 1 files updated, 0 files merged, 1 files removed, 0 files unresolved (no-changeset !)
909 0 files updated, 0 files merged, 1 files removed, 0 files unresolved (changeset !)
963 0 files updated, 0 files merged, 1 files removed, 0 files unresolved (changeset !)
910 (branch merge, don't forget to commit)
964 (branch merge, don't forget to commit)
911 $ hg ci -m "mJ,EAm: $case_desc"
965 $ hg ci -m "mJ,EAm: $case_desc"
912 created new head
966 created new head
913
967
914
968
915 $ hg log -G --rev '::(desc("mAE,Km") + desc("mK,AEm") + desc("mEA,Jm") + desc("mJ,EAm"))'
969 $ hg log -G --rev '::(desc("mAE,Km") + desc("mK,AEm") + desc("mEA,Jm") + desc("mJ,EAm"))'
916 @ mJ,EAm: chained merges (conflict -> simple) - same content everywhere
970 @ mJ,EAm: chained merges (conflict -> simple) - same content everywhere
917 |\
971 |\
918 +---o mEA,Jm: chained merges (conflict -> simple) - same content everywhere
972 +---o mEA,Jm: chained merges (conflict -> simple) - same content everywhere
919 | |/
973 | |/
920 | | o mK,AEm: chained merges (conflict -> simple) - same content everywhere
974 | | o mK,AEm: chained merges (conflict -> simple) - same content everywhere
921 | | |\
975 | | |\
922 | | +---o mAE,Km: chained merges (conflict -> simple) - same content everywhere
976 | | +---o mAE,Km: chained merges (conflict -> simple) - same content everywhere
923 | | | |/
977 | | | |/
924 | | | o k-1: unrelated changes (based on "e" changes)
978 | | | o k-1: unrelated changes (based on "e" changes)
925 | | | |
979 | | | |
926 | o | | j-1: unrelated changes (based on the "a" series of changes)
980 | o | | j-1: unrelated changes (based on the "a" series of changes)
927 | | | |
981 | | | |
928 o-----+ mEAm-0 merge with copies info on both side - A side: rename d to f, E side: b to f, (same content for f) - the other way
982 o-----+ mEAm-0 merge with copies info on both side - A side: rename d to f, E side: b to f, (same content for f) - the other way
929 |/ / /
983 |/ / /
930 | o / mAEm-0 merge with copies info on both side - A side: rename d to f, E side: b to f, (same content for f) - one way
984 | o / mAEm-0 merge with copies info on both side - A side: rename d to f, E side: b to f, (same content for f) - one way
931 |/|/
985 |/|/
932 | o e-2 g -move-> f
986 | o e-2 g -move-> f
933 | |
987 | |
934 | o e-1 b -move-> g
988 | o e-1 b -move-> g
935 | |
989 | |
936 o | a-2: e -move-> f
990 o | a-2: e -move-> f
937 | |
991 | |
938 o | a-1: d -move-> e
992 o | a-1: d -move-> e
939 |/
993 |/
940 o i-2: c -move-> d, s -move-> t
994 o i-2: c -move-> d, s -move-> t
941 |
995 |
942 o i-1: a -move-> c, p -move-> s
996 o i-1: a -move-> c, p -move-> s
943 |
997 |
944 o i-0 initial commit: a b h
998 o i-0 initial commit: a b h
945
999
946
1000
947 Subcase: chaining salvage information during a merge
1001 Subcase: chaining salvage information during a merge
948 ````````````````````````````````````````````````````
1002 ````````````````````````````````````````````````````
949
1003
950 We add more change on the branch were the file was deleted. merging again
1004 We add more change on the branch were the file was deleted. merging again
951 should preserve the fact eh file was salvaged.
1005 should preserve the fact eh file was salvaged.
952
1006
953 $ case_desc="chained merges (salvaged -> simple) - same content (when the file exists)"
1007 $ case_desc="chained merges (salvaged -> simple) - same content (when the file exists)"
954
1008
955 (creating the change)
1009 (creating the change)
956
1010
957 $ hg up 'desc("c-1")'
1011 $ hg up 'desc("c-1")'
958 1 files updated, 0 files merged, 2 files removed, 0 files unresolved
1012 1 files updated, 0 files merged, 2 files removed, 0 files unresolved
959 $ echo l > unrelated-l
1013 $ echo l > unrelated-l
960 $ hg add unrelated-l
1014 $ hg add unrelated-l
961 $ hg ci -m 'l-1: unrelated changes (based on "c" changes)'
1015 $ hg ci -m 'l-1: unrelated changes (based on "c" changes)'
962 created new head
1016 created new head
963
1017
964 (Merge variant 1)
1018 (Merge variant 1)
965
1019
966 $ hg up 'desc("mBC-revert-m")'
1020 $ hg up 'desc("mBC-revert-m")'
967 2 files updated, 0 files merged, 1 files removed, 0 files unresolved
1021 2 files updated, 0 files merged, 1 files removed, 0 files unresolved
968 $ hg merge 'desc("l-1")'
1022 $ hg merge 'desc("l-1")'
969 1 files updated, 0 files merged, 0 files removed, 0 files unresolved
1023 1 files updated, 0 files merged, 0 files removed, 0 files unresolved
970 (branch merge, don't forget to commit)
1024 (branch merge, don't forget to commit)
971 $ hg ci -m "mBC+revert,Lm: $case_desc"
1025 $ hg ci -m "mBC+revert,Lm: $case_desc"
972
1026
973 (Merge variant 2)
1027 (Merge variant 2)
974
1028
975 $ hg up 'desc("mCB-revert-m")'
1029 $ hg up 'desc("mCB-revert-m")'
976 0 files updated, 0 files merged, 1 files removed, 0 files unresolved
1030 0 files updated, 0 files merged, 1 files removed, 0 files unresolved
977 $ hg merge 'desc("l-1")'
1031 $ hg merge 'desc("l-1")'
978 1 files updated, 0 files merged, 0 files removed, 0 files unresolved
1032 1 files updated, 0 files merged, 0 files removed, 0 files unresolved
979 (branch merge, don't forget to commit)
1033 (branch merge, don't forget to commit)
980 $ hg ci -m "mCB+revert,Lm: $case_desc"
1034 $ hg ci -m "mCB+revert,Lm: $case_desc"
981
1035
982 (Merge variant 3)
1036 (Merge variant 3)
983
1037
984 $ hg up 'desc("l-1")'
1038 $ hg up 'desc("l-1")'
985 1 files updated, 0 files merged, 1 files removed, 0 files unresolved
1039 1 files updated, 0 files merged, 1 files removed, 0 files unresolved
986
1040
987 $ hg merge 'desc("mBC-revert-m")'
1041 $ hg merge 'desc("mBC-revert-m")'
988 2 files updated, 0 files merged, 0 files removed, 0 files unresolved
1042 2 files updated, 0 files merged, 0 files removed, 0 files unresolved
989 (branch merge, don't forget to commit)
1043 (branch merge, don't forget to commit)
990 $ hg ci -m "mL,BC+revertm: $case_desc"
1044 $ hg ci -m "mL,BC+revertm: $case_desc"
991 created new head
1045 created new head
992
1046
993 (Merge variant 4)
1047 (Merge variant 4)
994
1048
995 $ hg up 'desc("l-1")'
1049 $ hg up 'desc("l-1")'
996 1 files updated, 0 files merged, 1 files removed, 0 files unresolved
1050 1 files updated, 0 files merged, 1 files removed, 0 files unresolved
997
1051
998 $ hg merge 'desc("mCB-revert-m")'
1052 $ hg merge 'desc("mCB-revert-m")'
999 2 files updated, 0 files merged, 0 files removed, 0 files unresolved
1053 2 files updated, 0 files merged, 0 files removed, 0 files unresolved
1000 (branch merge, don't forget to commit)
1054 (branch merge, don't forget to commit)
1001 $ hg ci -m "mL,CB+revertm: $case_desc"
1055 $ hg ci -m "mL,CB+revertm: $case_desc"
1002 created new head
1056 created new head
1003
1057
1004 $ hg log -G --rev '::(desc("mBC+revert,Lm") + desc("mCB+revert,Lm") + desc("mL,BC+revertm") + desc("mL,CB+revertm"))'
1058 $ hg log -G --rev '::(desc("mBC+revert,Lm") + desc("mCB+revert,Lm") + desc("mL,BC+revertm") + desc("mL,CB+revertm"))'
1005 @ mL,CB+revertm: chained merges (salvaged -> simple) - same content (when the file exists)
1059 @ mL,CB+revertm: chained merges (salvaged -> simple) - same content (when the file exists)
1006 |\
1060 |\
1007 | | o mL,BC+revertm: chained merges (salvaged -> simple) - same content (when the file exists)
1061 | | o mL,BC+revertm: chained merges (salvaged -> simple) - same content (when the file exists)
1008 | |/|
1062 | |/|
1009 +-+---o mCB+revert,Lm: chained merges (salvaged -> simple) - same content (when the file exists)
1063 +-+---o mCB+revert,Lm: chained merges (salvaged -> simple) - same content (when the file exists)
1010 | | |
1064 | | |
1011 | +---o mBC+revert,Lm: chained merges (salvaged -> simple) - same content (when the file exists)
1065 | +---o mBC+revert,Lm: chained merges (salvaged -> simple) - same content (when the file exists)
1012 | | |/
1066 | | |/
1013 | o | l-1: unrelated changes (based on "c" changes)
1067 | o | l-1: unrelated changes (based on "c" changes)
1014 | | |
1068 | | |
1015 | | o mBC-revert-m-0 merge explicitely revive deleted file - B side: unrelated change, C side: delete d (restored by merge) - the other way
1069 | | o mBC-revert-m-0 merge explicitely revive deleted file - B side: unrelated change, C side: delete d (restored by merge) - the other way
1016 | |/|
1070 | |/|
1017 o---+ mCB-revert-m-0 merge explicitely revive deleted file - B side: unrelated change, C side: delete d (restored by merge) - one way
1071 o---+ mCB-revert-m-0 merge explicitely revive deleted file - B side: unrelated change, C side: delete d (restored by merge) - one way
1018 |/ /
1072 |/ /
1019 o | c-1 delete d
1073 o | c-1 delete d
1020 | |
1074 | |
1021 | o b-1: b update
1075 | o b-1: b update
1022 |/
1076 |/
1023 o i-2: c -move-> d, s -move-> t
1077 o i-2: c -move-> d, s -move-> t
1024 |
1078 |
1025 o i-1: a -move-> c, p -move-> s
1079 o i-1: a -move-> c, p -move-> s
1026 |
1080 |
1027 o i-0 initial commit: a b h
1081 o i-0 initial commit: a b h
1028
1082
1029
1083
1030
1084
1031 Subcase: chaining "merged" information during a merge
1085 Subcase: chaining "merged" information during a merge
1032 ``````````````````````````````````````````````````````
1086 ``````````````````````````````````````````````````````
1033
1087
1034 When a non-rename change are merged with a copy overwrite, the merge pick the copy source from (p1) as the reference. We should preserve this information in subsequent merges.
1088 When a non-rename change are merged with a copy overwrite, the merge pick the copy source from (p1) as the reference. We should preserve this information in subsequent merges.
1035
1089
1036 $ case_desc="chained merges (copy-overwrite -> simple) - same content"
1090 $ case_desc="chained merges (copy-overwrite -> simple) - same content"
1037
1091
1038 (extra unrelated changes)
1092 (extra unrelated changes)
1039
1093
1040 $ hg up 'desc("f-2")'
1094 $ hg up 'desc("f-2")'
1041 2 files updated, 0 files merged, 2 files removed, 0 files unresolved (no-changeset !)
1095 2 files updated, 0 files merged, 2 files removed, 0 files unresolved (no-changeset !)
1042 1 files updated, 0 files merged, 2 files removed, 0 files unresolved (changeset !)
1096 1 files updated, 0 files merged, 2 files removed, 0 files unresolved (changeset !)
1043 $ echo n > unrelated-n
1097 $ echo n > unrelated-n
1044 $ hg add unrelated-n
1098 $ hg add unrelated-n
1045 $ hg ci -m 'n-1: unrelated changes (based on the "f" series of changes)'
1099 $ hg ci -m 'n-1: unrelated changes (based on the "f" series of changes)'
1046 created new head
1100 created new head
1047
1101
1048 $ hg up 'desc("g-1")'
1102 $ hg up 'desc("g-1")'
1049 2 files updated, 0 files merged, 1 files removed, 0 files unresolved
1103 2 files updated, 0 files merged, 1 files removed, 0 files unresolved
1050 $ echo o > unrelated-o
1104 $ echo o > unrelated-o
1051 $ hg add unrelated-o
1105 $ hg add unrelated-o
1052 $ hg ci -m 'o-1: unrelated changes (based on "g" changes)'
1106 $ hg ci -m 'o-1: unrelated changes (based on "g" changes)'
1053 created new head
1107 created new head
1054
1108
1055 (merge variant 1)
1109 (merge variant 1)
1056
1110
1057 $ hg up 'desc("mFGm")'
1111 $ hg up 'desc("mFGm")'
1058 1 files updated, 0 files merged, 2 files removed, 0 files unresolved (no-changeset !)
1112 1 files updated, 0 files merged, 2 files removed, 0 files unresolved (no-changeset !)
1059 0 files updated, 0 files merged, 2 files removed, 0 files unresolved (changeset !)
1113 0 files updated, 0 files merged, 2 files removed, 0 files unresolved (changeset !)
1060 $ hg merge 'desc("o-1")'
1114 $ hg merge 'desc("o-1")'
1061 1 files updated, 0 files merged, 0 files removed, 0 files unresolved
1115 1 files updated, 0 files merged, 0 files removed, 0 files unresolved
1062 (branch merge, don't forget to commit)
1116 (branch merge, don't forget to commit)
1063 $ hg ci -m "mFG,Om: $case_desc"
1117 $ hg ci -m "mFG,Om: $case_desc"
1064
1118
1065 (merge variant 2)
1119 (merge variant 2)
1066
1120
1067 $ hg up 'desc("o-1")'
1121 $ hg up 'desc("o-1")'
1068 2 files updated, 0 files merged, 0 files removed, 0 files unresolved (no-changeset !)
1122 2 files updated, 0 files merged, 0 files removed, 0 files unresolved (no-changeset !)
1069 1 files updated, 0 files merged, 0 files removed, 0 files unresolved (changeset !)
1123 1 files updated, 0 files merged, 0 files removed, 0 files unresolved (changeset !)
1070 $ hg merge 'desc("FGm")'
1124 $ hg merge 'desc("FGm")'
1071 1 files updated, 0 files merged, 1 files removed, 0 files unresolved (no-changeset !)
1125 1 files updated, 0 files merged, 1 files removed, 0 files unresolved (no-changeset !)
1072 0 files updated, 0 files merged, 1 files removed, 0 files unresolved (changeset !)
1126 0 files updated, 0 files merged, 1 files removed, 0 files unresolved (changeset !)
1073 (branch merge, don't forget to commit)
1127 (branch merge, don't forget to commit)
1074 $ hg ci -m "mO,FGm: $case_desc"
1128 $ hg ci -m "mO,FGm: $case_desc"
1075 created new head
1129 created new head
1076
1130
1077 (merge variant 3)
1131 (merge variant 3)
1078
1132
1079 $ hg up 'desc("mGFm")'
1133 $ hg up 'desc("mGFm")'
1080 0 files updated, 0 files merged, 1 files removed, 0 files unresolved
1134 0 files updated, 0 files merged, 1 files removed, 0 files unresolved
1081 $ hg merge 'desc("n-1")'
1135 $ hg merge 'desc("n-1")'
1082 1 files updated, 0 files merged, 0 files removed, 0 files unresolved
1136 1 files updated, 0 files merged, 0 files removed, 0 files unresolved
1083 (branch merge, don't forget to commit)
1137 (branch merge, don't forget to commit)
1084 $ hg ci -m "mGF,Nm: $case_desc"
1138 $ hg ci -m "mGF,Nm: $case_desc"
1085
1139
1086 (merge variant 4)
1140 (merge variant 4)
1087
1141
1088 $ hg up 'desc("n-1")'
1142 $ hg up 'desc("n-1")'
1089 1 files updated, 0 files merged, 0 files removed, 0 files unresolved
1143 1 files updated, 0 files merged, 0 files removed, 0 files unresolved
1090 $ hg merge 'desc("mGFm")'
1144 $ hg merge 'desc("mGFm")'
1091 1 files updated, 0 files merged, 0 files removed, 0 files unresolved
1145 1 files updated, 0 files merged, 0 files removed, 0 files unresolved
1092 (branch merge, don't forget to commit)
1146 (branch merge, don't forget to commit)
1093 $ hg ci -m "mN,GFm: $case_desc"
1147 $ hg ci -m "mN,GFm: $case_desc"
1094 created new head
1148 created new head
1095
1149
1096 $ hg log -G --rev '::(desc("mFG,Om") + desc("mO,FGm") + desc("mGF,Nm") + desc("mN,GFm"))'
1150 $ hg log -G --rev '::(desc("mFG,Om") + desc("mO,FGm") + desc("mGF,Nm") + desc("mN,GFm"))'
1097 @ mN,GFm: chained merges (copy-overwrite -> simple) - same content
1151 @ mN,GFm: chained merges (copy-overwrite -> simple) - same content
1098 |\
1152 |\
1099 +---o mGF,Nm: chained merges (copy-overwrite -> simple) - same content
1153 +---o mGF,Nm: chained merges (copy-overwrite -> simple) - same content
1100 | |/
1154 | |/
1101 | | o mO,FGm: chained merges (copy-overwrite -> simple) - same content
1155 | | o mO,FGm: chained merges (copy-overwrite -> simple) - same content
1102 | | |\
1156 | | |\
1103 | | +---o mFG,Om: chained merges (copy-overwrite -> simple) - same content
1157 | | +---o mFG,Om: chained merges (copy-overwrite -> simple) - same content
1104 | | | |/
1158 | | | |/
1105 | | | o o-1: unrelated changes (based on "g" changes)
1159 | | | o o-1: unrelated changes (based on "g" changes)
1106 | | | |
1160 | | | |
1107 | o | | n-1: unrelated changes (based on the "f" series of changes)
1161 | o | | n-1: unrelated changes (based on the "f" series of changes)
1108 | | | |
1162 | | | |
1109 o-----+ mGFm-0 merge - G side: content change, F side: copy overwrite, no content change - the other way
1163 o-----+ mGFm-0 merge - G side: content change, F side: copy overwrite, no content change - the other way
1110 |/ / /
1164 |/ / /
1111 | o / mFGm-0 merge - G side: content change, F side: copy overwrite, no content change - one way
1165 | o / mFGm-0 merge - G side: content change, F side: copy overwrite, no content change - one way
1112 |/|/
1166 |/|/
1113 | o g-1: update d
1167 | o g-1: update d
1114 | |
1168 | |
1115 o | f-2: rename i -> d
1169 o | f-2: rename i -> d
1116 | |
1170 | |
1117 o | f-1: rename h -> i
1171 o | f-1: rename h -> i
1118 |/
1172 |/
1119 o i-2: c -move-> d, s -move-> t
1173 o i-2: c -move-> d, s -move-> t
1120 |
1174 |
1121 o i-1: a -move-> c, p -move-> s
1175 o i-1: a -move-> c, p -move-> s
1122 |
1176 |
1123 o i-0 initial commit: a b h
1177 o i-0 initial commit: a b h
1124
1178
1125
1179
1126 Subcase: chaining conflicting rename resolution, with extra change during the merge
1180 Subcase: chaining conflicting rename resolution, with extra change during the merge
1127 ```````````````````````````````````````````````````````````````````````````````````
1181 ```````````````````````````````````````````````````````````````````````````````````
1128
1182
1129 The "mEA-change-m-0" and "mAE-change-m-0" case create a rename tracking conflict on file 'f'. We
1183 The "mEA-change-m-0" and "mAE-change-m-0" case create a rename tracking conflict on file 'f'. We
1130 add more change on the respective branch and merge again. These second merge
1184 add more change on the respective branch and merge again. These second merge
1131 does not involve the file 'f' and the arbitration done within "mAEm" and "mEA"
1185 does not involve the file 'f' and the arbitration done within "mAEm" and "mEA"
1132 about that file should stay unchanged.
1186 about that file should stay unchanged.
1133
1187
1134 $ case_desc="chained merges (conflict+change -> simple) - same content on both branch in the initial merge"
1188 $ case_desc="chained merges (conflict+change -> simple) - same content on both branch in the initial merge"
1135
1189
1136
1190
1137 (merge variant 1)
1191 (merge variant 1)
1138
1192
1139 $ hg up 'desc("mAE-change-m")'
1193 $ hg up 'desc("mAE-change-m")'
1140 2 files updated, 0 files merged, 3 files removed, 0 files unresolved
1194 2 files updated, 0 files merged, 3 files removed, 0 files unresolved
1141 $ hg merge 'desc("k-1")'
1195 $ hg merge 'desc("k-1")'
1142 1 files updated, 0 files merged, 0 files removed, 0 files unresolved
1196 1 files updated, 0 files merged, 0 files removed, 0 files unresolved
1143 (branch merge, don't forget to commit)
1197 (branch merge, don't forget to commit)
1144 $ hg ci -m "mAE-change,Km: $case_desc"
1198 $ hg ci -m "mAE-change,Km: $case_desc"
1145
1199
1146 (merge variant 2)
1200 (merge variant 2)
1147
1201
1148 $ hg up 'desc("k-1")'
1202 $ hg up 'desc("k-1")'
1149 2 files updated, 0 files merged, 0 files removed, 0 files unresolved
1203 2 files updated, 0 files merged, 0 files removed, 0 files unresolved
1150
1204
1151 $ hg merge 'desc("mAE-change-m")'
1205 $ hg merge 'desc("mAE-change-m")'
1152 1 files updated, 0 files merged, 1 files removed, 0 files unresolved
1206 1 files updated, 0 files merged, 1 files removed, 0 files unresolved
1153 (branch merge, don't forget to commit)
1207 (branch merge, don't forget to commit)
1154 $ hg ci -m "mK,AE-change-m: $case_desc"
1208 $ hg ci -m "mK,AE-change-m: $case_desc"
1155 created new head
1209 created new head
1156
1210
1157 (merge variant 3)
1211 (merge variant 3)
1158
1212
1159 $ hg up 'desc("mEA-change-m")'
1213 $ hg up 'desc("mEA-change-m")'
1160 1 files updated, 0 files merged, 1 files removed, 0 files unresolved
1214 1 files updated, 0 files merged, 1 files removed, 0 files unresolved
1161 $ hg merge 'desc("j-1")'
1215 $ hg merge 'desc("j-1")'
1162 1 files updated, 0 files merged, 0 files removed, 0 files unresolved
1216 1 files updated, 0 files merged, 0 files removed, 0 files unresolved
1163 (branch merge, don't forget to commit)
1217 (branch merge, don't forget to commit)
1164 $ hg ci -m "mEA-change,Jm: $case_desc"
1218 $ hg ci -m "mEA-change,Jm: $case_desc"
1165
1219
1166 (merge variant 4)
1220 (merge variant 4)
1167
1221
1168 $ hg up 'desc("j-1")'
1222 $ hg up 'desc("j-1")'
1169 2 files updated, 0 files merged, 0 files removed, 0 files unresolved
1223 2 files updated, 0 files merged, 0 files removed, 0 files unresolved
1170 $ hg merge 'desc("mEA-change-m")'
1224 $ hg merge 'desc("mEA-change-m")'
1171 1 files updated, 0 files merged, 1 files removed, 0 files unresolved
1225 1 files updated, 0 files merged, 1 files removed, 0 files unresolved
1172 (branch merge, don't forget to commit)
1226 (branch merge, don't forget to commit)
1173 $ hg ci -m "mJ,EA-change-m: $case_desc"
1227 $ hg ci -m "mJ,EA-change-m: $case_desc"
1174 created new head
1228 created new head
1175
1229
1176
1230
1177 $ hg log -G --rev '::(desc("mAE-change,Km") + desc("mK,AE-change-m") + desc("mEA-change,Jm") + desc("mJ,EA-change-m"))'
1231 $ hg log -G --rev '::(desc("mAE-change,Km") + desc("mK,AE-change-m") + desc("mEA-change,Jm") + desc("mJ,EA-change-m"))'
1178 @ mJ,EA-change-m: chained merges (conflict+change -> simple) - same content on both branch in the initial merge
1232 @ mJ,EA-change-m: chained merges (conflict+change -> simple) - same content on both branch in the initial merge
1179 |\
1233 |\
1180 +---o mEA-change,Jm: chained merges (conflict+change -> simple) - same content on both branch in the initial merge
1234 +---o mEA-change,Jm: chained merges (conflict+change -> simple) - same content on both branch in the initial merge
1181 | |/
1235 | |/
1182 | | o mK,AE-change-m: chained merges (conflict+change -> simple) - same content on both branch in the initial merge
1236 | | o mK,AE-change-m: chained merges (conflict+change -> simple) - same content on both branch in the initial merge
1183 | | |\
1237 | | |\
1184 | | +---o mAE-change,Km: chained merges (conflict+change -> simple) - same content on both branch in the initial merge
1238 | | +---o mAE-change,Km: chained merges (conflict+change -> simple) - same content on both branch in the initial merge
1185 | | | |/
1239 | | | |/
1186 | | | o k-1: unrelated changes (based on "e" changes)
1240 | | | o k-1: unrelated changes (based on "e" changes)
1187 | | | |
1241 | | | |
1188 | o | | j-1: unrelated changes (based on the "a" series of changes)
1242 | o | | j-1: unrelated changes (based on the "a" series of changes)
1189 | | | |
1243 | | | |
1190 o-----+ mEA-change-m-0 merge with file update and copies info on both side - A side: rename d to f, E side: b to f, (same content for f in parent) - the other way
1244 o-----+ mEA-change-m-0 merge with file update and copies info on both side - A side: rename d to f, E side: b to f, (same content for f in parent) - the other way
1191 |/ / /
1245 |/ / /
1192 | o / mAE-change-m-0 merge with file update and copies info on both side - A side: rename d to f, E side: b to f, (same content for f in parent) - one way
1246 | o / mAE-change-m-0 merge with file update and copies info on both side - A side: rename d to f, E side: b to f, (same content for f in parent) - one way
1193 |/|/
1247 |/|/
1194 | o e-2 g -move-> f
1248 | o e-2 g -move-> f
1195 | |
1249 | |
1196 | o e-1 b -move-> g
1250 | o e-1 b -move-> g
1197 | |
1251 | |
1198 o | a-2: e -move-> f
1252 o | a-2: e -move-> f
1199 | |
1253 | |
1200 o | a-1: d -move-> e
1254 o | a-1: d -move-> e
1201 |/
1255 |/
1202 o i-2: c -move-> d, s -move-> t
1256 o i-2: c -move-> d, s -move-> t
1203 |
1257 |
1204 o i-1: a -move-> c, p -move-> s
1258 o i-1: a -move-> c, p -move-> s
1205 |
1259 |
1206 o i-0 initial commit: a b h
1260 o i-0 initial commit: a b h
1207
1261
1208
1262
1209 Summary of all created cases
1263 Summary of all created cases
1210 ----------------------------
1264 ----------------------------
1211
1265
1212 $ hg up --quiet null
1266 $ hg up --quiet null
1213
1267
1214 (This exists to help keeping a compact list of the various cases we have built)
1268 (This exists to help keeping a compact list of the various cases we have built)
1215
1269
1216 $ hg log -T '{desc|firstline}\n'| sort
1270 $ hg log -T '{desc|firstline}\n'| sort
1217 a-1: d -move-> e
1271 a-1: d -move-> e
1218 a-2: e -move-> f
1272 a-2: e -move-> f
1219 b-1: b update
1273 b-1: b update
1220 c-1 delete d
1274 c-1 delete d
1221 d-1 delete d
1275 d-1 delete d
1222 d-2 re-add d
1276 d-2 re-add d
1223 e-1 b -move-> g
1277 e-1 b -move-> g
1224 e-2 g -move-> f
1278 e-2 g -move-> f
1225 f-1: rename h -> i
1279 f-1: rename h -> i
1226 f-2: rename i -> d
1280 f-2: rename i -> d
1227 g-1: update d
1281 g-1: update d
1228 h-1: b -(move)-> d
1282 h-1: b -(move)-> d
1229 i-0 initial commit: a b h
1283 i-0 initial commit: a b h
1230 i-1: a -move-> c, p -move-> s
1284 i-1: a -move-> c, p -move-> s
1231 i-2: c -move-> d, s -move-> t
1285 i-2: c -move-> d, s -move-> t
1232 j-1: unrelated changes (based on the "a" series of changes)
1286 j-1: unrelated changes (based on the "a" series of changes)
1233 k-1: unrelated changes (based on "e" changes)
1287 k-1: unrelated changes (based on "e" changes)
1234 l-1: unrelated changes (based on "c" changes)
1288 l-1: unrelated changes (based on "c" changes)
1235 mABm-0 simple merge - A side: multiple renames, B side: unrelated update - the other way
1289 mABm-0 simple merge - A side: multiple renames, B side: unrelated update - the other way
1236 mAE,Km: chained merges (conflict -> simple) - same content everywhere
1290 mAE,Km: chained merges (conflict -> simple) - same content everywhere
1237 mAE-change,Km: chained merges (conflict+change -> simple) - same content on both branch in the initial merge
1291 mAE-change,Km: chained merges (conflict+change -> simple) - same content on both branch in the initial merge
1238 mAE-change-m-0 merge with file update and copies info on both side - A side: rename d to f, E side: b to f, (same content for f in parent) - one way
1292 mAE-change-m-0 merge with file update and copies info on both side - A side: rename d to f, E side: b to f, (same content for f in parent) - one way
1239 mAEm-0 merge with copies info on both side - A side: rename d to f, E side: b to f, (same content for f) - one way
1293 mAEm-0 merge with copies info on both side - A side: rename d to f, E side: b to f, (same content for f) - one way
1240 mBAm-0 simple merge - A side: multiple renames, B side: unrelated update - one way
1294 mBAm-0 simple merge - A side: multiple renames, B side: unrelated update - one way
1241 mBC+revert,Lm: chained merges (salvaged -> simple) - same content (when the file exists)
1295 mBC+revert,Lm: chained merges (salvaged -> simple) - same content (when the file exists)
1242 mBC-revert-m-0 merge explicitely revive deleted file - B side: unrelated change, C side: delete d (restored by merge) - the other way
1296 mBC-revert-m-0 merge explicitely revive deleted file - B side: unrelated change, C side: delete d (restored by merge) - the other way
1243 mBCm-0 simple merge - C side: delete a file with copies history , B side: unrelated update - one way
1297 mBCm-0 simple merge - C side: delete a file with copies history , B side: unrelated update - one way
1244 mBCm-1 re-add d
1298 mBCm-1 re-add d
1245 mBDm-0 simple merge - B side: unrelated update, D side: delete and recreate a file (with different content) - one way
1299 mBDm-0 simple merge - B side: unrelated update, D side: delete and recreate a file (with different content) - one way
1246 mBFm-0 simple merge - B side: unrelated change, F side: overwrite d with a copy (from h->i->d) - one way
1300 mBFm-0 simple merge - B side: unrelated change, F side: overwrite d with a copy (from h->i->d) - one way
1301 mBRm-0 simple merge - B side: unrelated change, R side: overwrite d with a copy (from r->x->t) different content - one way
1247 mCB+revert,Lm: chained merges (salvaged -> simple) - same content (when the file exists)
1302 mCB+revert,Lm: chained merges (salvaged -> simple) - same content (when the file exists)
1248 mCB-revert-m-0 merge explicitely revive deleted file - B side: unrelated change, C side: delete d (restored by merge) - one way
1303 mCB-revert-m-0 merge explicitely revive deleted file - B side: unrelated change, C side: delete d (restored by merge) - one way
1249 mCBm-0 simple merge - C side: delete a file with copies history , B side: unrelated update - the other way
1304 mCBm-0 simple merge - C side: delete a file with copies history , B side: unrelated update - the other way
1250 mCBm-1 re-add d
1305 mCBm-1 re-add d
1251 mCGm-0 merge updated/deleted - revive the file (updated content) - one way
1306 mCGm-0 merge updated/deleted - revive the file (updated content) - one way
1252 mCH-delete-before-conflict-m-0 simple merge - C side: d is the results of renames then deleted, H side: d is result of another rename (same content as the other branch) - one way
1307 mCH-delete-before-conflict-m-0 simple merge - C side: d is the results of renames then deleted, H side: d is result of another rename (same content as the other branch) - one way
1253 mDBm-0 simple merge - B side: unrelated update, D side: delete and recreate a file (with different content) - the other way
1308 mDBm-0 simple merge - B side: unrelated update, D side: delete and recreate a file (with different content) - the other way
1254 mDGm-0 actual content merge, copies on one side - D side: delete and re-add (different content), G side: update content - one way
1309 mDGm-0 actual content merge, copies on one side - D side: delete and re-add (different content), G side: update content - one way
1255 mEA,Jm: chained merges (conflict -> simple) - same content everywhere
1310 mEA,Jm: chained merges (conflict -> simple) - same content everywhere
1256 mEA-change,Jm: chained merges (conflict+change -> simple) - same content on both branch in the initial merge
1311 mEA-change,Jm: chained merges (conflict+change -> simple) - same content on both branch in the initial merge
1257 mEA-change-m-0 merge with file update and copies info on both side - A side: rename d to f, E side: b to f, (same content for f in parent) - the other way
1312 mEA-change-m-0 merge with file update and copies info on both side - A side: rename d to f, E side: b to f, (same content for f in parent) - the other way
1258 mEAm-0 merge with copies info on both side - A side: rename d to f, E side: b to f, (same content for f) - the other way
1313 mEAm-0 merge with copies info on both side - A side: rename d to f, E side: b to f, (same content for f) - the other way
1259 mFBm-0 simple merge - B side: unrelated change, F side: overwrite d with a copy (from h->i->d) - the other way
1314 mFBm-0 simple merge - B side: unrelated change, F side: overwrite d with a copy (from h->i->d) - the other way
1260 mFG,Om: chained merges (copy-overwrite -> simple) - same content
1315 mFG,Om: chained merges (copy-overwrite -> simple) - same content
1261 mFGm-0 merge - G side: content change, F side: copy overwrite, no content change - one way
1316 mFGm-0 merge - G side: content change, F side: copy overwrite, no content change - one way
1262 mGCm-0 merge updated/deleted - revive the file (updated content) - the other way
1317 mGCm-0 merge updated/deleted - revive the file (updated content) - the other way
1263 mGDm-0 actual content merge, copies on one side - D side: delete and re-add (different content), G side: update content - the other way
1318 mGDm-0 actual content merge, copies on one side - D side: delete and re-add (different content), G side: update content - the other way
1264 mGF,Nm: chained merges (copy-overwrite -> simple) - same content
1319 mGF,Nm: chained merges (copy-overwrite -> simple) - same content
1265 mGFm-0 merge - G side: content change, F side: copy overwrite, no content change - the other way
1320 mGFm-0 merge - G side: content change, F side: copy overwrite, no content change - the other way
1266 mHC-delete-before-conflict-m-0 simple merge - C side: d is the results of renames then deleted, H side: d is result of another rename (same content as the other branch) - the other way
1321 mHC-delete-before-conflict-m-0 simple merge - C side: d is the results of renames then deleted, H side: d is result of another rename (same content as the other branch) - the other way
1267 mJ,EA-change-m: chained merges (conflict+change -> simple) - same content on both branch in the initial merge
1322 mJ,EA-change-m: chained merges (conflict+change -> simple) - same content on both branch in the initial merge
1268 mJ,EAm: chained merges (conflict -> simple) - same content everywhere
1323 mJ,EAm: chained merges (conflict -> simple) - same content everywhere
1269 mK,AE-change-m: chained merges (conflict+change -> simple) - same content on both branch in the initial merge
1324 mK,AE-change-m: chained merges (conflict+change -> simple) - same content on both branch in the initial merge
1270 mK,AEm: chained merges (conflict -> simple) - same content everywhere
1325 mK,AEm: chained merges (conflict -> simple) - same content everywhere
1271 mL,BC+revertm: chained merges (salvaged -> simple) - same content (when the file exists)
1326 mL,BC+revertm: chained merges (salvaged -> simple) - same content (when the file exists)
1272 mL,CB+revertm: chained merges (salvaged -> simple) - same content (when the file exists)
1327 mL,CB+revertm: chained merges (salvaged -> simple) - same content (when the file exists)
1273 mN,GFm: chained merges (copy-overwrite -> simple) - same content
1328 mN,GFm: chained merges (copy-overwrite -> simple) - same content
1274 mO,FGm: chained merges (copy-overwrite -> simple) - same content
1329 mO,FGm: chained merges (copy-overwrite -> simple) - same content
1275 mPQm-0 merge with copies info on both side - P side: rename t to v, Q side: r to v, (different content) - one way
1330 mPQm-0 merge with copies info on both side - P side: rename t to v, Q side: r to v, (different content) - one way
1276 mQPm-0 merge with copies info on both side - P side: rename t to v, Q side: r to v, (different content) - the other way
1331 mQPm-0 merge with copies info on both side - P side: rename t to v, Q side: r to v, (different content) - the other way
1332 mRBm-0 simple merge - B side: unrelated change, R side: overwrite d with a copy (from r->x->t) different content - the other way
1277 n-1: unrelated changes (based on the "f" series of changes)
1333 n-1: unrelated changes (based on the "f" series of changes)
1278 o-1: unrelated changes (based on "g" changes)
1334 o-1: unrelated changes (based on "g" changes)
1279 p-1: t -move-> u
1335 p-1: t -move-> u
1280 p-2: u -move-> v
1336 p-2: u -move-> v
1281 q-1 r -move-> w
1337 q-1 r -move-> w
1282 q-2 w -move-> v
1338 q-2 w -move-> v
1339 r-1: rename r -> x
1340 r-2: rename t -> x
1283
1341
1284
1342
1285 Test that sidedata computations during upgrades are correct
1343 Test that sidedata computations during upgrades are correct
1286 ===========================================================
1344 ===========================================================
1287
1345
1288 We upgrade a repository that is not using sidedata (the filelog case) and
1346 We upgrade a repository that is not using sidedata (the filelog case) and
1289 check that the same side data have been generated as if they were computed at
1347 check that the same side data have been generated as if they were computed at
1290 commit time.
1348 commit time.
1291
1349
1292
1350
1293 #if upgraded
1351 #if upgraded
1294 $ cat >> $HGRCPATH << EOF
1352 $ cat >> $HGRCPATH << EOF
1295 > [format]
1353 > [format]
1296 > exp-use-side-data = yes
1354 > exp-use-side-data = yes
1297 > exp-use-copies-side-data-changeset = yes
1355 > exp-use-copies-side-data-changeset = yes
1298 > EOF
1356 > EOF
1299 $ hg debugformat -v
1357 $ hg debugformat -v
1300 format-variant repo config default
1358 format-variant repo config default
1301 fncache: yes yes yes
1359 fncache: yes yes yes
1302 dotencode: yes yes yes
1360 dotencode: yes yes yes
1303 generaldelta: yes yes yes
1361 generaldelta: yes yes yes
1304 share-safe: no no no
1362 share-safe: no no no
1305 sparserevlog: yes yes yes
1363 sparserevlog: yes yes yes
1306 sidedata: no yes no
1364 sidedata: no yes no
1307 persistent-nodemap: no no no
1365 persistent-nodemap: no no no
1308 copies-sdc: no yes no
1366 copies-sdc: no yes no
1309 plain-cl-delta: yes yes yes
1367 plain-cl-delta: yes yes yes
1310 compression: * (glob)
1368 compression: * (glob)
1311 compression-level: default default default
1369 compression-level: default default default
1312 $ hg debugupgraderepo --run --quiet
1370 $ hg debugupgraderepo --run --quiet
1313 upgrade will perform the following actions:
1371 upgrade will perform the following actions:
1314
1372
1315 requirements
1373 requirements
1316 preserved: * (glob)
1374 preserved: * (glob)
1317 added: exp-copies-sidedata-changeset, exp-sidedata-flag
1375 added: exp-copies-sidedata-changeset, exp-sidedata-flag
1318
1376
1319 processed revlogs:
1377 processed revlogs:
1320 - all-filelogs
1378 - all-filelogs
1321 - changelog
1379 - changelog
1322 - manifest
1380 - manifest
1323
1381
1324 #endif
1382 #endif
1325
1383
1326
1384
1327 #if no-compatibility no-filelog no-changeset
1385 #if no-compatibility no-filelog no-changeset
1328
1386
1329 $ hg debugchangedfiles --compute 0
1387 $ hg debugchangedfiles --compute 0
1330 added : a, ;
1388 added : a, ;
1331 added : b, ;
1389 added : b, ;
1332 added : h, ;
1390 added : h, ;
1333 added : p, ;
1391 added : p, ;
1334 added : q, ;
1392 added : q, ;
1335 added : r, ;
1393 added : r, ;
1336
1394
1337 $ for rev in `hg log --rev 'all()' -T '{rev}\n'`; do
1395 $ for rev in `hg log --rev 'all()' -T '{rev}\n'`; do
1338 > case_id=`hg log -r $rev -T '{word(0, desc, ":")}\n'`
1396 > case_id=`hg log -r $rev -T '{word(0, desc, ":")}\n'`
1339 > echo "##### revision \"$case_id\" #####"
1397 > echo "##### revision \"$case_id\" #####"
1340 > hg debugsidedata -c -v -- $rev
1398 > hg debugsidedata -c -v -- $rev
1341 > hg debugchangedfiles $rev
1399 > hg debugchangedfiles $rev
1342 > done
1400 > done
1343 ##### revision "i-0 initial commit" #####
1401 ##### revision "i-0 initial commit" #####
1344 1 sidedata entries
1402 1 sidedata entries
1345 entry-0014 size 64
1403 entry-0014 size 64
1346 '\x00\x00\x00\x06\x04\x00\x00\x00\x01\x00\x00\x00\x00\x04\x00\x00\x00\x02\x00\x00\x00\x00\x04\x00\x00\x00\x03\x00\x00\x00\x00\x04\x00\x00\x00\x04\x00\x00\x00\x00\x04\x00\x00\x00\x05\x00\x00\x00\x00\x04\x00\x00\x00\x06\x00\x00\x00\x00abhpqr'
1404 '\x00\x00\x00\x06\x04\x00\x00\x00\x01\x00\x00\x00\x00\x04\x00\x00\x00\x02\x00\x00\x00\x00\x04\x00\x00\x00\x03\x00\x00\x00\x00\x04\x00\x00\x00\x04\x00\x00\x00\x00\x04\x00\x00\x00\x05\x00\x00\x00\x00\x04\x00\x00\x00\x06\x00\x00\x00\x00abhpqr'
1347 added : a, ;
1405 added : a, ;
1348 added : b, ;
1406 added : b, ;
1349 added : h, ;
1407 added : h, ;
1350 added : p, ;
1408 added : p, ;
1351 added : q, ;
1409 added : q, ;
1352 added : r, ;
1410 added : r, ;
1353 ##### revision "i-1" #####
1411 ##### revision "i-1" #####
1354 1 sidedata entries
1412 1 sidedata entries
1355 entry-0014 size 44
1413 entry-0014 size 44
1356 '\x00\x00\x00\x04\x0c\x00\x00\x00\x01\x00\x00\x00\x00\x06\x00\x00\x00\x02\x00\x00\x00\x00\x0c\x00\x00\x00\x03\x00\x00\x00\x00\x06\x00\x00\x00\x04\x00\x00\x00\x02acps'
1414 '\x00\x00\x00\x04\x0c\x00\x00\x00\x01\x00\x00\x00\x00\x06\x00\x00\x00\x02\x00\x00\x00\x00\x0c\x00\x00\x00\x03\x00\x00\x00\x00\x06\x00\x00\x00\x04\x00\x00\x00\x02acps'
1357 removed : a, ;
1415 removed : a, ;
1358 added p1: c, a;
1416 added p1: c, a;
1359 removed : p, ;
1417 removed : p, ;
1360 added p1: s, p;
1418 added p1: s, p;
1361 ##### revision "i-2" #####
1419 ##### revision "i-2" #####
1362 1 sidedata entries
1420 1 sidedata entries
1363 entry-0014 size 44
1421 entry-0014 size 44
1364 '\x00\x00\x00\x04\x0c\x00\x00\x00\x01\x00\x00\x00\x00\x06\x00\x00\x00\x02\x00\x00\x00\x00\x0c\x00\x00\x00\x03\x00\x00\x00\x00\x06\x00\x00\x00\x04\x00\x00\x00\x02cdst'
1422 '\x00\x00\x00\x04\x0c\x00\x00\x00\x01\x00\x00\x00\x00\x06\x00\x00\x00\x02\x00\x00\x00\x00\x0c\x00\x00\x00\x03\x00\x00\x00\x00\x06\x00\x00\x00\x04\x00\x00\x00\x02cdst'
1365 removed : c, ;
1423 removed : c, ;
1366 added p1: d, c;
1424 added p1: d, c;
1367 removed : s, ;
1425 removed : s, ;
1368 added p1: t, s;
1426 added p1: t, s;
1369 ##### revision "a-1" #####
1427 ##### revision "a-1" #####
1370 1 sidedata entries
1428 1 sidedata entries
1371 entry-0014 size 24
1429 entry-0014 size 24
1372 '\x00\x00\x00\x02\x0c\x00\x00\x00\x01\x00\x00\x00\x00\x06\x00\x00\x00\x02\x00\x00\x00\x00de'
1430 '\x00\x00\x00\x02\x0c\x00\x00\x00\x01\x00\x00\x00\x00\x06\x00\x00\x00\x02\x00\x00\x00\x00de'
1373 removed : d, ;
1431 removed : d, ;
1374 added p1: e, d;
1432 added p1: e, d;
1375 ##### revision "a-2" #####
1433 ##### revision "a-2" #####
1376 1 sidedata entries
1434 1 sidedata entries
1377 entry-0014 size 24
1435 entry-0014 size 24
1378 '\x00\x00\x00\x02\x0c\x00\x00\x00\x01\x00\x00\x00\x00\x06\x00\x00\x00\x02\x00\x00\x00\x00ef'
1436 '\x00\x00\x00\x02\x0c\x00\x00\x00\x01\x00\x00\x00\x00\x06\x00\x00\x00\x02\x00\x00\x00\x00ef'
1379 removed : e, ;
1437 removed : e, ;
1380 added p1: f, e;
1438 added p1: f, e;
1381 ##### revision "b-1" #####
1439 ##### revision "b-1" #####
1382 1 sidedata entries
1440 1 sidedata entries
1383 entry-0014 size 14
1441 entry-0014 size 14
1384 '\x00\x00\x00\x01\x14\x00\x00\x00\x01\x00\x00\x00\x00b'
1442 '\x00\x00\x00\x01\x14\x00\x00\x00\x01\x00\x00\x00\x00b'
1385 touched : b, ;
1443 touched : b, ;
1386 ##### revision "c-1 delete d" #####
1444 ##### revision "c-1 delete d" #####
1387 1 sidedata entries
1445 1 sidedata entries
1388 entry-0014 size 14
1446 entry-0014 size 14
1389 '\x00\x00\x00\x01\x0c\x00\x00\x00\x01\x00\x00\x00\x00d'
1447 '\x00\x00\x00\x01\x0c\x00\x00\x00\x01\x00\x00\x00\x00d'
1390 removed : d, ;
1448 removed : d, ;
1391 ##### revision "d-1 delete d" #####
1449 ##### revision "d-1 delete d" #####
1392 1 sidedata entries
1450 1 sidedata entries
1393 entry-0014 size 14
1451 entry-0014 size 14
1394 '\x00\x00\x00\x01\x0c\x00\x00\x00\x01\x00\x00\x00\x00d'
1452 '\x00\x00\x00\x01\x0c\x00\x00\x00\x01\x00\x00\x00\x00d'
1395 removed : d, ;
1453 removed : d, ;
1396 ##### revision "d-2 re-add d" #####
1454 ##### revision "d-2 re-add d" #####
1397 1 sidedata entries
1455 1 sidedata entries
1398 entry-0014 size 14
1456 entry-0014 size 14
1399 '\x00\x00\x00\x01\x04\x00\x00\x00\x01\x00\x00\x00\x00d'
1457 '\x00\x00\x00\x01\x04\x00\x00\x00\x01\x00\x00\x00\x00d'
1400 added : d, ;
1458 added : d, ;
1401 ##### revision "e-1 b -move-> g" #####
1459 ##### revision "e-1 b -move-> g" #####
1402 1 sidedata entries
1460 1 sidedata entries
1403 entry-0014 size 24
1461 entry-0014 size 24
1404 '\x00\x00\x00\x02\x0c\x00\x00\x00\x01\x00\x00\x00\x00\x06\x00\x00\x00\x02\x00\x00\x00\x00bg'
1462 '\x00\x00\x00\x02\x0c\x00\x00\x00\x01\x00\x00\x00\x00\x06\x00\x00\x00\x02\x00\x00\x00\x00bg'
1405 removed : b, ;
1463 removed : b, ;
1406 added p1: g, b;
1464 added p1: g, b;
1407 ##### revision "e-2 g -move-> f" #####
1465 ##### revision "e-2 g -move-> f" #####
1408 1 sidedata entries
1466 1 sidedata entries
1409 entry-0014 size 24
1467 entry-0014 size 24
1410 '\x00\x00\x00\x02\x06\x00\x00\x00\x01\x00\x00\x00\x01\x0c\x00\x00\x00\x02\x00\x00\x00\x00fg'
1468 '\x00\x00\x00\x02\x06\x00\x00\x00\x01\x00\x00\x00\x01\x0c\x00\x00\x00\x02\x00\x00\x00\x00fg'
1411 added p1: f, g;
1469 added p1: f, g;
1412 removed : g, ;
1470 removed : g, ;
1413 ##### revision "p-1" #####
1471 ##### revision "p-1" #####
1414 1 sidedata entries
1472 1 sidedata entries
1415 entry-0014 size 24
1473 entry-0014 size 24
1416 '\x00\x00\x00\x02\x0c\x00\x00\x00\x01\x00\x00\x00\x00\x06\x00\x00\x00\x02\x00\x00\x00\x00tu'
1474 '\x00\x00\x00\x02\x0c\x00\x00\x00\x01\x00\x00\x00\x00\x06\x00\x00\x00\x02\x00\x00\x00\x00tu'
1417 removed : t, ;
1475 removed : t, ;
1418 added p1: u, t;
1476 added p1: u, t;
1419 ##### revision "p-2" #####
1477 ##### revision "p-2" #####
1420 1 sidedata entries
1478 1 sidedata entries
1421 entry-0014 size 24
1479 entry-0014 size 24
1422 '\x00\x00\x00\x02\x0c\x00\x00\x00\x01\x00\x00\x00\x00\x06\x00\x00\x00\x02\x00\x00\x00\x00uv'
1480 '\x00\x00\x00\x02\x0c\x00\x00\x00\x01\x00\x00\x00\x00\x06\x00\x00\x00\x02\x00\x00\x00\x00uv'
1423 removed : u, ;
1481 removed : u, ;
1424 added p1: v, u;
1482 added p1: v, u;
1425 ##### revision "q-1 r -move-> w" #####
1483 ##### revision "q-1 r -move-> w" #####
1426 1 sidedata entries
1484 1 sidedata entries
1427 entry-0014 size 24
1485 entry-0014 size 24
1428 '\x00\x00\x00\x02\x0c\x00\x00\x00\x01\x00\x00\x00\x00\x06\x00\x00\x00\x02\x00\x00\x00\x00rw'
1486 '\x00\x00\x00\x02\x0c\x00\x00\x00\x01\x00\x00\x00\x00\x06\x00\x00\x00\x02\x00\x00\x00\x00rw'
1429 removed : r, ;
1487 removed : r, ;
1430 added p1: w, r;
1488 added p1: w, r;
1431 ##### revision "q-2 w -move-> v" #####
1489 ##### revision "q-2 w -move-> v" #####
1432 1 sidedata entries
1490 1 sidedata entries
1433 entry-0014 size 24
1491 entry-0014 size 24
1434 '\x00\x00\x00\x02\x06\x00\x00\x00\x01\x00\x00\x00\x01\x0c\x00\x00\x00\x02\x00\x00\x00\x00vw'
1492 '\x00\x00\x00\x02\x06\x00\x00\x00\x01\x00\x00\x00\x01\x0c\x00\x00\x00\x02\x00\x00\x00\x00vw'
1435 added p1: v, w;
1493 added p1: v, w;
1436 removed : w, ;
1494 removed : w, ;
1437 ##### revision "mBAm-0 simple merge - A side" #####
1495 ##### revision "mBAm-0 simple merge - A side" #####
1438 1 sidedata entries
1496 1 sidedata entries
1439 entry-0014 size 4
1497 entry-0014 size 4
1440 '\x00\x00\x00\x00'
1498 '\x00\x00\x00\x00'
1441 ##### revision "mABm-0 simple merge - A side" #####
1499 ##### revision "mABm-0 simple merge - A side" #####
1442 1 sidedata entries
1500 1 sidedata entries
1443 entry-0014 size 4
1501 entry-0014 size 4
1444 '\x00\x00\x00\x00'
1502 '\x00\x00\x00\x00'
1445 ##### revision "mBCm-0 simple merge - C side" #####
1503 ##### revision "mBCm-0 simple merge - C side" #####
1446 1 sidedata entries
1504 1 sidedata entries
1447 entry-0014 size 4
1505 entry-0014 size 4
1448 '\x00\x00\x00\x00'
1506 '\x00\x00\x00\x00'
1449 ##### revision "mBCm-1 re-add d" #####
1507 ##### revision "mBCm-1 re-add d" #####
1450 1 sidedata entries
1508 1 sidedata entries
1451 entry-0014 size 14
1509 entry-0014 size 14
1452 '\x00\x00\x00\x01\x04\x00\x00\x00\x01\x00\x00\x00\x00d'
1510 '\x00\x00\x00\x01\x04\x00\x00\x00\x01\x00\x00\x00\x00d'
1453 added : d, ;
1511 added : d, ;
1454 ##### revision "mCBm-0 simple merge - C side" #####
1512 ##### revision "mCBm-0 simple merge - C side" #####
1455 1 sidedata entries
1513 1 sidedata entries
1456 entry-0014 size 4
1514 entry-0014 size 4
1457 '\x00\x00\x00\x00'
1515 '\x00\x00\x00\x00'
1458 ##### revision "mCBm-1 re-add d" #####
1516 ##### revision "mCBm-1 re-add d" #####
1459 1 sidedata entries
1517 1 sidedata entries
1460 entry-0014 size 14
1518 entry-0014 size 14
1461 '\x00\x00\x00\x01\x04\x00\x00\x00\x01\x00\x00\x00\x00d'
1519 '\x00\x00\x00\x01\x04\x00\x00\x00\x01\x00\x00\x00\x00d'
1462 added : d, ;
1520 added : d, ;
1463 ##### revision "mBDm-0 simple merge - B side" #####
1521 ##### revision "mBDm-0 simple merge - B side" #####
1464 1 sidedata entries
1522 1 sidedata entries
1465 entry-0014 size 4
1523 entry-0014 size 4
1466 '\x00\x00\x00\x00'
1524 '\x00\x00\x00\x00'
1467 ##### revision "mDBm-0 simple merge - B side" #####
1525 ##### revision "mDBm-0 simple merge - B side" #####
1468 1 sidedata entries
1526 1 sidedata entries
1469 entry-0014 size 4
1527 entry-0014 size 4
1470 '\x00\x00\x00\x00'
1528 '\x00\x00\x00\x00'
1471 ##### revision "mAEm-0 merge with copies info on both side - A side" #####
1529 ##### revision "mAEm-0 merge with copies info on both side - A side" #####
1472 1 sidedata entries
1530 1 sidedata entries
1473 entry-0014 size 14
1531 entry-0014 size 14
1474 '\x00\x00\x00\x01\x08\x00\x00\x00\x01\x00\x00\x00\x00f'
1532 '\x00\x00\x00\x01\x08\x00\x00\x00\x01\x00\x00\x00\x00f'
1475 merged : f, ;
1533 merged : f, ;
1476 ##### revision "mEAm-0 merge with copies info on both side - A side" #####
1534 ##### revision "mEAm-0 merge with copies info on both side - A side" #####
1477 1 sidedata entries
1535 1 sidedata entries
1478 entry-0014 size 14
1536 entry-0014 size 14
1479 '\x00\x00\x00\x01\x08\x00\x00\x00\x01\x00\x00\x00\x00f'
1537 '\x00\x00\x00\x01\x08\x00\x00\x00\x01\x00\x00\x00\x00f'
1480 merged : f, ;
1538 merged : f, ;
1481 ##### revision "mPQm-0 merge with copies info on both side - P side" #####
1539 ##### revision "mPQm-0 merge with copies info on both side - P side" #####
1482 1 sidedata entries
1540 1 sidedata entries
1483 entry-0014 size 14
1541 entry-0014 size 14
1484 '\x00\x00\x00\x01\x08\x00\x00\x00\x01\x00\x00\x00\x00v'
1542 '\x00\x00\x00\x01\x08\x00\x00\x00\x01\x00\x00\x00\x00v'
1485 merged : v, ;
1543 merged : v, ;
1486 ##### revision "mQPm-0 merge with copies info on both side - P side" #####
1544 ##### revision "mQPm-0 merge with copies info on both side - P side" #####
1487 1 sidedata entries
1545 1 sidedata entries
1488 entry-0014 size 14
1546 entry-0014 size 14
1489 '\x00\x00\x00\x01\x08\x00\x00\x00\x01\x00\x00\x00\x00v'
1547 '\x00\x00\x00\x01\x08\x00\x00\x00\x01\x00\x00\x00\x00v'
1490 merged : v, ;
1548 merged : v, ;
1491 ##### revision "f-1" #####
1549 ##### revision "f-1" #####
1492 1 sidedata entries
1550 1 sidedata entries
1493 entry-0014 size 24
1551 entry-0014 size 24
1494 '\x00\x00\x00\x02\x0c\x00\x00\x00\x01\x00\x00\x00\x00\x06\x00\x00\x00\x02\x00\x00\x00\x00hi'
1552 '\x00\x00\x00\x02\x0c\x00\x00\x00\x01\x00\x00\x00\x00\x06\x00\x00\x00\x02\x00\x00\x00\x00hi'
1495 removed : h, ;
1553 removed : h, ;
1496 added p1: i, h;
1554 added p1: i, h;
1497 ##### revision "f-2" #####
1555 ##### revision "f-2" #####
1498 1 sidedata entries
1556 1 sidedata entries
1499 entry-0014 size 24
1557 entry-0014 size 24
1500 '\x00\x00\x00\x02\x16\x00\x00\x00\x01\x00\x00\x00\x01\x0c\x00\x00\x00\x02\x00\x00\x00\x00di'
1558 '\x00\x00\x00\x02\x16\x00\x00\x00\x01\x00\x00\x00\x01\x0c\x00\x00\x00\x02\x00\x00\x00\x00di'
1501 touched p1: d, i;
1559 touched p1: d, i;
1502 removed : i, ;
1560 removed : i, ;
1503 ##### revision "mBFm-0 simple merge - B side" #####
1561 ##### revision "mBFm-0 simple merge - B side" #####
1504 1 sidedata entries
1562 1 sidedata entries
1505 entry-0014 size 4
1563 entry-0014 size 4
1506 '\x00\x00\x00\x00'
1564 '\x00\x00\x00\x00'
1507 ##### revision "mFBm-0 simple merge - B side" #####
1565 ##### revision "mFBm-0 simple merge - B side" #####
1508 1 sidedata entries
1566 1 sidedata entries
1509 entry-0014 size 4
1567 entry-0014 size 4
1510 '\x00\x00\x00\x00'
1568 '\x00\x00\x00\x00'
1569 ##### revision "r-1" #####
1570 1 sidedata entries
1571 entry-0014 size 24
1572 '\x00\x00\x00\x02\x0c\x00\x00\x00\x01\x00\x00\x00\x00\x06\x00\x00\x00\x02\x00\x00\x00\x00rx'
1573 removed : r, ;
1574 added p1: x, r;
1575 ##### revision "r-2" #####
1576 1 sidedata entries
1577 entry-0014 size 24
1578 '\x00\x00\x00\x02\x16\x00\x00\x00\x01\x00\x00\x00\x01\x0c\x00\x00\x00\x02\x00\x00\x00\x00tx'
1579 touched p1: t, x;
1580 removed : x, ;
1581 ##### revision "mBRm-0 simple merge - B side" #####
1582 1 sidedata entries
1583 entry-0014 size 4
1584 '\x00\x00\x00\x00'
1585 ##### revision "mRBm-0 simple merge - B side" #####
1586 1 sidedata entries
1587 entry-0014 size 4
1588 '\x00\x00\x00\x00'
1511 ##### revision "g-1" #####
1589 ##### revision "g-1" #####
1512 1 sidedata entries
1590 1 sidedata entries
1513 entry-0014 size 14
1591 entry-0014 size 14
1514 '\x00\x00\x00\x01\x14\x00\x00\x00\x01\x00\x00\x00\x00d'
1592 '\x00\x00\x00\x01\x14\x00\x00\x00\x01\x00\x00\x00\x00d'
1515 touched : d, ;
1593 touched : d, ;
1516 ##### revision "mDGm-0 actual content merge, copies on one side - D side" #####
1594 ##### revision "mDGm-0 actual content merge, copies on one side - D side" #####
1517 1 sidedata entries
1595 1 sidedata entries
1518 entry-0014 size 14
1596 entry-0014 size 14
1519 '\x00\x00\x00\x01\x08\x00\x00\x00\x01\x00\x00\x00\x00d'
1597 '\x00\x00\x00\x01\x08\x00\x00\x00\x01\x00\x00\x00\x00d'
1520 merged : d, ;
1598 merged : d, ;
1521 ##### revision "mGDm-0 actual content merge, copies on one side - D side" #####
1599 ##### revision "mGDm-0 actual content merge, copies on one side - D side" #####
1522 1 sidedata entries
1600 1 sidedata entries
1523 entry-0014 size 14
1601 entry-0014 size 14
1524 '\x00\x00\x00\x01\x08\x00\x00\x00\x01\x00\x00\x00\x00d'
1602 '\x00\x00\x00\x01\x08\x00\x00\x00\x01\x00\x00\x00\x00d'
1525 merged : d, ;
1603 merged : d, ;
1526 ##### revision "mFGm-0 merge - G side" #####
1604 ##### revision "mFGm-0 merge - G side" #####
1527 1 sidedata entries
1605 1 sidedata entries
1528 entry-0014 size 14
1606 entry-0014 size 14
1529 '\x00\x00\x00\x01\x08\x00\x00\x00\x01\x00\x00\x00\x00d'
1607 '\x00\x00\x00\x01\x08\x00\x00\x00\x01\x00\x00\x00\x00d'
1530 merged : d, ;
1608 merged : d, ;
1531 ##### revision "mGFm-0 merge - G side" #####
1609 ##### revision "mGFm-0 merge - G side" #####
1532 1 sidedata entries
1610 1 sidedata entries
1533 entry-0014 size 14
1611 entry-0014 size 14
1534 '\x00\x00\x00\x01\x08\x00\x00\x00\x01\x00\x00\x00\x00d'
1612 '\x00\x00\x00\x01\x08\x00\x00\x00\x01\x00\x00\x00\x00d'
1535 merged : d, ;
1613 merged : d, ;
1536 ##### revision "mCGm-0 merge updated/deleted - revive the file (updated content) - one way" #####
1614 ##### revision "mCGm-0 merge updated/deleted - revive the file (updated content) - one way" #####
1537 1 sidedata entries
1615 1 sidedata entries
1538 entry-0014 size 14
1616 entry-0014 size 14
1539 '\x00\x00\x00\x01\x10\x00\x00\x00\x01\x00\x00\x00\x00d'
1617 '\x00\x00\x00\x01\x10\x00\x00\x00\x01\x00\x00\x00\x00d'
1540 salvaged : d, ;
1618 salvaged : d, ;
1541 ##### revision "mGCm-0 merge updated/deleted - revive the file (updated content) - the other way" #####
1619 ##### revision "mGCm-0 merge updated/deleted - revive the file (updated content) - the other way" #####
1542 1 sidedata entries
1620 1 sidedata entries
1543 entry-0014 size 14
1621 entry-0014 size 14
1544 '\x00\x00\x00\x01\x10\x00\x00\x00\x01\x00\x00\x00\x00d'
1622 '\x00\x00\x00\x01\x10\x00\x00\x00\x01\x00\x00\x00\x00d'
1545 salvaged : d, ;
1623 salvaged : d, ;
1546 ##### revision "mCB-revert-m-0 merge explicitely revive deleted file - B side" #####
1624 ##### revision "mCB-revert-m-0 merge explicitely revive deleted file - B side" #####
1547 1 sidedata entries
1625 1 sidedata entries
1548 entry-0014 size 14
1626 entry-0014 size 14
1549 '\x00\x00\x00\x01\x10\x00\x00\x00\x01\x00\x00\x00\x00d'
1627 '\x00\x00\x00\x01\x10\x00\x00\x00\x01\x00\x00\x00\x00d'
1550 salvaged : d, ;
1628 salvaged : d, ;
1551 ##### revision "mBC-revert-m-0 merge explicitely revive deleted file - B side" #####
1629 ##### revision "mBC-revert-m-0 merge explicitely revive deleted file - B side" #####
1552 1 sidedata entries
1630 1 sidedata entries
1553 entry-0014 size 14
1631 entry-0014 size 14
1554 '\x00\x00\x00\x01\x10\x00\x00\x00\x01\x00\x00\x00\x00d'
1632 '\x00\x00\x00\x01\x10\x00\x00\x00\x01\x00\x00\x00\x00d'
1555 salvaged : d, ;
1633 salvaged : d, ;
1556 ##### revision "h-1" #####
1634 ##### revision "h-1" #####
1557 1 sidedata entries
1635 1 sidedata entries
1558 entry-0014 size 24
1636 entry-0014 size 24
1559 '\x00\x00\x00\x02\x0c\x00\x00\x00\x01\x00\x00\x00\x00\x06\x00\x00\x00\x02\x00\x00\x00\x00bd'
1637 '\x00\x00\x00\x02\x0c\x00\x00\x00\x01\x00\x00\x00\x00\x06\x00\x00\x00\x02\x00\x00\x00\x00bd'
1560 removed : b, ;
1638 removed : b, ;
1561 added p1: d, b;
1639 added p1: d, b;
1562 ##### revision "mCH-delete-before-conflict-m-0 simple merge - C side" #####
1640 ##### revision "mCH-delete-before-conflict-m-0 simple merge - C side" #####
1563 1 sidedata entries
1641 1 sidedata entries
1564 entry-0014 size 4
1642 entry-0014 size 4
1565 '\x00\x00\x00\x00'
1643 '\x00\x00\x00\x00'
1566 ##### revision "mHC-delete-before-conflict-m-0 simple merge - C side" #####
1644 ##### revision "mHC-delete-before-conflict-m-0 simple merge - C side" #####
1567 1 sidedata entries
1645 1 sidedata entries
1568 entry-0014 size 4
1646 entry-0014 size 4
1569 '\x00\x00\x00\x00'
1647 '\x00\x00\x00\x00'
1570 ##### revision "mAE-change-m-0 merge with file update and copies info on both side - A side" #####
1648 ##### revision "mAE-change-m-0 merge with file update and copies info on both side - A side" #####
1571 1 sidedata entries
1649 1 sidedata entries
1572 entry-0014 size 14
1650 entry-0014 size 14
1573 '\x00\x00\x00\x01\x08\x00\x00\x00\x01\x00\x00\x00\x00f'
1651 '\x00\x00\x00\x01\x08\x00\x00\x00\x01\x00\x00\x00\x00f'
1574 merged : f, ;
1652 merged : f, ;
1575 ##### revision "mEA-change-m-0 merge with file update and copies info on both side - A side" #####
1653 ##### revision "mEA-change-m-0 merge with file update and copies info on both side - A side" #####
1576 1 sidedata entries
1654 1 sidedata entries
1577 entry-0014 size 14
1655 entry-0014 size 14
1578 '\x00\x00\x00\x01\x08\x00\x00\x00\x01\x00\x00\x00\x00f'
1656 '\x00\x00\x00\x01\x08\x00\x00\x00\x01\x00\x00\x00\x00f'
1579 merged : f, ;
1657 merged : f, ;
1580 ##### revision "j-1" #####
1658 ##### revision "j-1" #####
1581 1 sidedata entries
1659 1 sidedata entries
1582 entry-0014 size 24
1660 entry-0014 size 24
1583 '\x00\x00\x00\x01\x04\x00\x00\x00\x0b\x00\x00\x00\x00unrelated-j'
1661 '\x00\x00\x00\x01\x04\x00\x00\x00\x0b\x00\x00\x00\x00unrelated-j'
1584 added : unrelated-j, ;
1662 added : unrelated-j, ;
1585 ##### revision "k-1" #####
1663 ##### revision "k-1" #####
1586 1 sidedata entries
1664 1 sidedata entries
1587 entry-0014 size 24
1665 entry-0014 size 24
1588 '\x00\x00\x00\x01\x04\x00\x00\x00\x0b\x00\x00\x00\x00unrelated-k'
1666 '\x00\x00\x00\x01\x04\x00\x00\x00\x0b\x00\x00\x00\x00unrelated-k'
1589 added : unrelated-k, ;
1667 added : unrelated-k, ;
1590 ##### revision "mAE,Km" #####
1668 ##### revision "mAE,Km" #####
1591 1 sidedata entries
1669 1 sidedata entries
1592 entry-0014 size 4
1670 entry-0014 size 4
1593 '\x00\x00\x00\x00'
1671 '\x00\x00\x00\x00'
1594 ##### revision "mK,AEm" #####
1672 ##### revision "mK,AEm" #####
1595 1 sidedata entries
1673 1 sidedata entries
1596 entry-0014 size 4
1674 entry-0014 size 4
1597 '\x00\x00\x00\x00'
1675 '\x00\x00\x00\x00'
1598 ##### revision "mEA,Jm" #####
1676 ##### revision "mEA,Jm" #####
1599 1 sidedata entries
1677 1 sidedata entries
1600 entry-0014 size 4
1678 entry-0014 size 4
1601 '\x00\x00\x00\x00'
1679 '\x00\x00\x00\x00'
1602 ##### revision "mJ,EAm" #####
1680 ##### revision "mJ,EAm" #####
1603 1 sidedata entries
1681 1 sidedata entries
1604 entry-0014 size 4
1682 entry-0014 size 4
1605 '\x00\x00\x00\x00'
1683 '\x00\x00\x00\x00'
1606 ##### revision "l-1" #####
1684 ##### revision "l-1" #####
1607 1 sidedata entries
1685 1 sidedata entries
1608 entry-0014 size 24
1686 entry-0014 size 24
1609 '\x00\x00\x00\x01\x04\x00\x00\x00\x0b\x00\x00\x00\x00unrelated-l'
1687 '\x00\x00\x00\x01\x04\x00\x00\x00\x0b\x00\x00\x00\x00unrelated-l'
1610 added : unrelated-l, ;
1688 added : unrelated-l, ;
1611 ##### revision "mBC+revert,Lm" #####
1689 ##### revision "mBC+revert,Lm" #####
1612 1 sidedata entries
1690 1 sidedata entries
1613 entry-0014 size 4
1691 entry-0014 size 4
1614 '\x00\x00\x00\x00'
1692 '\x00\x00\x00\x00'
1615 ##### revision "mCB+revert,Lm" #####
1693 ##### revision "mCB+revert,Lm" #####
1616 1 sidedata entries
1694 1 sidedata entries
1617 entry-0014 size 4
1695 entry-0014 size 4
1618 '\x00\x00\x00\x00'
1696 '\x00\x00\x00\x00'
1619 ##### revision "mL,BC+revertm" #####
1697 ##### revision "mL,BC+revertm" #####
1620 1 sidedata entries
1698 1 sidedata entries
1621 entry-0014 size 4
1699 entry-0014 size 4
1622 '\x00\x00\x00\x00'
1700 '\x00\x00\x00\x00'
1623 ##### revision "mL,CB+revertm" #####
1701 ##### revision "mL,CB+revertm" #####
1624 1 sidedata entries
1702 1 sidedata entries
1625 entry-0014 size 4
1703 entry-0014 size 4
1626 '\x00\x00\x00\x00'
1704 '\x00\x00\x00\x00'
1627 ##### revision "n-1" #####
1705 ##### revision "n-1" #####
1628 1 sidedata entries
1706 1 sidedata entries
1629 entry-0014 size 24
1707 entry-0014 size 24
1630 '\x00\x00\x00\x01\x04\x00\x00\x00\x0b\x00\x00\x00\x00unrelated-n'
1708 '\x00\x00\x00\x01\x04\x00\x00\x00\x0b\x00\x00\x00\x00unrelated-n'
1631 added : unrelated-n, ;
1709 added : unrelated-n, ;
1632 ##### revision "o-1" #####
1710 ##### revision "o-1" #####
1633 1 sidedata entries
1711 1 sidedata entries
1634 entry-0014 size 24
1712 entry-0014 size 24
1635 '\x00\x00\x00\x01\x04\x00\x00\x00\x0b\x00\x00\x00\x00unrelated-o'
1713 '\x00\x00\x00\x01\x04\x00\x00\x00\x0b\x00\x00\x00\x00unrelated-o'
1636 added : unrelated-o, ;
1714 added : unrelated-o, ;
1637 ##### revision "mFG,Om" #####
1715 ##### revision "mFG,Om" #####
1638 1 sidedata entries
1716 1 sidedata entries
1639 entry-0014 size 4
1717 entry-0014 size 4
1640 '\x00\x00\x00\x00'
1718 '\x00\x00\x00\x00'
1641 ##### revision "mO,FGm" #####
1719 ##### revision "mO,FGm" #####
1642 1 sidedata entries
1720 1 sidedata entries
1643 entry-0014 size 4
1721 entry-0014 size 4
1644 '\x00\x00\x00\x00'
1722 '\x00\x00\x00\x00'
1645 ##### revision "mGF,Nm" #####
1723 ##### revision "mGF,Nm" #####
1646 1 sidedata entries
1724 1 sidedata entries
1647 entry-0014 size 4
1725 entry-0014 size 4
1648 '\x00\x00\x00\x00'
1726 '\x00\x00\x00\x00'
1649 ##### revision "mN,GFm" #####
1727 ##### revision "mN,GFm" #####
1650 1 sidedata entries
1728 1 sidedata entries
1651 entry-0014 size 4
1729 entry-0014 size 4
1652 '\x00\x00\x00\x00'
1730 '\x00\x00\x00\x00'
1653 ##### revision "mAE-change,Km" #####
1731 ##### revision "mAE-change,Km" #####
1654 1 sidedata entries
1732 1 sidedata entries
1655 entry-0014 size 4
1733 entry-0014 size 4
1656 '\x00\x00\x00\x00'
1734 '\x00\x00\x00\x00'
1657 ##### revision "mK,AE-change-m" #####
1735 ##### revision "mK,AE-change-m" #####
1658 1 sidedata entries
1736 1 sidedata entries
1659 entry-0014 size 4
1737 entry-0014 size 4
1660 '\x00\x00\x00\x00'
1738 '\x00\x00\x00\x00'
1661 ##### revision "mEA-change,Jm" #####
1739 ##### revision "mEA-change,Jm" #####
1662 1 sidedata entries
1740 1 sidedata entries
1663 entry-0014 size 4
1741 entry-0014 size 4
1664 '\x00\x00\x00\x00'
1742 '\x00\x00\x00\x00'
1665 ##### revision "mJ,EA-change-m" #####
1743 ##### revision "mJ,EA-change-m" #####
1666 1 sidedata entries
1744 1 sidedata entries
1667 entry-0014 size 4
1745 entry-0014 size 4
1668 '\x00\x00\x00\x00'
1746 '\x00\x00\x00\x00'
1669
1747
1670 #endif
1748 #endif
1671
1749
1672
1750
1673 Test copy information chaining
1751 Test copy information chaining
1674 ==============================
1752 ==============================
1675
1753
1676 Check that matching only affect the destination and not intermediate path
1754 Check that matching only affect the destination and not intermediate path
1677 -------------------------------------------------------------------------
1755 -------------------------------------------------------------------------
1678
1756
1679 The two status call should give the same value for f
1757 The two status call should give the same value for f
1680
1758
1681 $ hg status --copies --rev 'desc("i-0")' --rev 'desc("a-2")'
1759 $ hg status --copies --rev 'desc("i-0")' --rev 'desc("a-2")'
1682 A f
1760 A f
1683 a
1761 a
1684 A t
1762 A t
1685 p
1763 p
1686 R a
1764 R a
1687 R p
1765 R p
1688 $ hg status --copies --rev 'desc("i-0")' --rev 'desc("a-2")' f
1766 $ hg status --copies --rev 'desc("i-0")' --rev 'desc("a-2")' f
1689 A f
1767 A f
1690 a (no-changeset no-compatibility !)
1768 a (no-changeset no-compatibility !)
1691
1769
1692 merging with unrelated change does not interfere with the renames
1770 merging with unrelated change does not interfere with the renames
1693 ---------------------------------------------------------------
1771 ---------------------------------------------------------------
1694
1772
1695 - rename on one side
1773 - rename on one side
1696 - unrelated change on the other side
1774 - unrelated change on the other side
1697
1775
1698 $ hg log -G --rev '::(desc("mABm")+desc("mBAm"))'
1776 $ hg log -G --rev '::(desc("mABm")+desc("mBAm"))'
1699 o mABm-0 simple merge - A side: multiple renames, B side: unrelated update - the other way
1777 o mABm-0 simple merge - A side: multiple renames, B side: unrelated update - the other way
1700 |\
1778 |\
1701 +---o mBAm-0 simple merge - A side: multiple renames, B side: unrelated update - one way
1779 +---o mBAm-0 simple merge - A side: multiple renames, B side: unrelated update - one way
1702 | |/
1780 | |/
1703 | o b-1: b update
1781 | o b-1: b update
1704 | |
1782 | |
1705 o | a-2: e -move-> f
1783 o | a-2: e -move-> f
1706 | |
1784 | |
1707 o | a-1: d -move-> e
1785 o | a-1: d -move-> e
1708 |/
1786 |/
1709 o i-2: c -move-> d, s -move-> t
1787 o i-2: c -move-> d, s -move-> t
1710 |
1788 |
1711 o i-1: a -move-> c, p -move-> s
1789 o i-1: a -move-> c, p -move-> s
1712 |
1790 |
1713 o i-0 initial commit: a b h
1791 o i-0 initial commit: a b h
1714
1792
1715
1793
1716 $ hg status --copies --rev 'desc("b-1")' --rev 'desc("mABm")'
1794 $ hg status --copies --rev 'desc("b-1")' --rev 'desc("mABm")'
1717 A f
1795 A f
1718 d
1796 d
1719 R d
1797 R d
1720 $ hg status --copies --rev 'desc("b-1")' --rev 'desc("mBAm")'
1798 $ hg status --copies --rev 'desc("b-1")' --rev 'desc("mBAm")'
1721 A f
1799 A f
1722 d
1800 d
1723 R d
1801 R d
1724 $ hg status --copies --rev 'desc("a-2")' --rev 'desc("mABm")'
1802 $ hg status --copies --rev 'desc("a-2")' --rev 'desc("mABm")'
1725 M b
1803 M b
1726 $ hg status --copies --rev 'desc("a-2")' --rev 'desc("mBAm")'
1804 $ hg status --copies --rev 'desc("a-2")' --rev 'desc("mBAm")'
1727 M b
1805 M b
1728 $ hg status --copies --rev 'desc("i-2")' --rev 'desc("mABm")'
1806 $ hg status --copies --rev 'desc("i-2")' --rev 'desc("mABm")'
1729 M b
1807 M b
1730 A f
1808 A f
1731 d
1809 d
1732 R d
1810 R d
1733 $ hg status --copies --rev 'desc("i-2")' --rev 'desc("mBAm")'
1811 $ hg status --copies --rev 'desc("i-2")' --rev 'desc("mBAm")'
1734 M b
1812 M b
1735 A f
1813 A f
1736 d
1814 d
1737 R d
1815 R d
1738 $ hg status --copies --rev 'desc("i-0")' --rev 'desc("mABm")'
1816 $ hg status --copies --rev 'desc("i-0")' --rev 'desc("mABm")'
1739 M b
1817 M b
1740 A f
1818 A f
1741 a
1819 a
1742 A t
1820 A t
1743 p
1821 p
1744 R a
1822 R a
1745 R p
1823 R p
1746 $ hg status --copies --rev 'desc("i-0")' --rev 'desc("mBAm")'
1824 $ hg status --copies --rev 'desc("i-0")' --rev 'desc("mBAm")'
1747 M b
1825 M b
1748 A f
1826 A f
1749 a
1827 a
1750 A t
1828 A t
1751 p
1829 p
1752 R a
1830 R a
1753 R p
1831 R p
1754
1832
1755 merging with the side having a delete
1833 merging with the side having a delete
1756 -------------------------------------
1834 -------------------------------------
1757
1835
1758 case summary:
1836 case summary:
1759 - one with change to an unrelated file
1837 - one with change to an unrelated file
1760 - one deleting the change
1838 - one deleting the change
1761 and recreate an unrelated file after the merge
1839 and recreate an unrelated file after the merge
1762
1840
1763 $ hg log -G --rev '::(desc("mCBm")+desc("mBCm"))'
1841 $ hg log -G --rev '::(desc("mCBm")+desc("mBCm"))'
1764 o mCBm-1 re-add d
1842 o mCBm-1 re-add d
1765 |
1843 |
1766 o mCBm-0 simple merge - C side: delete a file with copies history , B side: unrelated update - the other way
1844 o mCBm-0 simple merge - C side: delete a file with copies history , B side: unrelated update - the other way
1767 |\
1845 |\
1768 | | o mBCm-1 re-add d
1846 | | o mBCm-1 re-add d
1769 | | |
1847 | | |
1770 +---o mBCm-0 simple merge - C side: delete a file with copies history , B side: unrelated update - one way
1848 +---o mBCm-0 simple merge - C side: delete a file with copies history , B side: unrelated update - one way
1771 | |/
1849 | |/
1772 | o c-1 delete d
1850 | o c-1 delete d
1773 | |
1851 | |
1774 o | b-1: b update
1852 o | b-1: b update
1775 |/
1853 |/
1776 o i-2: c -move-> d, s -move-> t
1854 o i-2: c -move-> d, s -move-> t
1777 |
1855 |
1778 o i-1: a -move-> c, p -move-> s
1856 o i-1: a -move-> c, p -move-> s
1779 |
1857 |
1780 o i-0 initial commit: a b h
1858 o i-0 initial commit: a b h
1781
1859
1782 - comparing from the merge
1860 - comparing from the merge
1783
1861
1784 $ hg status --copies --rev 'desc("b-1")' --rev 'desc("mBCm-0")'
1862 $ hg status --copies --rev 'desc("b-1")' --rev 'desc("mBCm-0")'
1785 R d
1863 R d
1786 $ hg status --copies --rev 'desc("b-1")' --rev 'desc("mCBm-0")'
1864 $ hg status --copies --rev 'desc("b-1")' --rev 'desc("mCBm-0")'
1787 R d
1865 R d
1788 $ hg status --copies --rev 'desc("c-1")' --rev 'desc("mBCm-0")'
1866 $ hg status --copies --rev 'desc("c-1")' --rev 'desc("mBCm-0")'
1789 M b
1867 M b
1790 $ hg status --copies --rev 'desc("c-1")' --rev 'desc("mCBm-0")'
1868 $ hg status --copies --rev 'desc("c-1")' --rev 'desc("mCBm-0")'
1791 M b
1869 M b
1792 $ hg status --copies --rev 'desc("i-2")' --rev 'desc("mBCm-0")'
1870 $ hg status --copies --rev 'desc("i-2")' --rev 'desc("mBCm-0")'
1793 M b
1871 M b
1794 R d
1872 R d
1795 $ hg status --copies --rev 'desc("i-2")' --rev 'desc("mCBm-0")'
1873 $ hg status --copies --rev 'desc("i-2")' --rev 'desc("mCBm-0")'
1796 M b
1874 M b
1797 R d
1875 R d
1798 $ hg status --copies --rev 'desc("i-0")' --rev 'desc("mBCm-0")'
1876 $ hg status --copies --rev 'desc("i-0")' --rev 'desc("mBCm-0")'
1799 M b
1877 M b
1800 A t
1878 A t
1801 p
1879 p
1802 R a
1880 R a
1803 R p
1881 R p
1804 $ hg status --copies --rev 'desc("i-0")' --rev 'desc("mCBm-0")'
1882 $ hg status --copies --rev 'desc("i-0")' --rev 'desc("mCBm-0")'
1805 M b
1883 M b
1806 A t
1884 A t
1807 p
1885 p
1808 R a
1886 R a
1809 R p
1887 R p
1810
1888
1811 - comparing with the merge children re-adding the file
1889 - comparing with the merge children re-adding the file
1812
1890
1813 $ hg status --copies --rev 'desc("b-1")' --rev 'desc("mBCm-1")'
1891 $ hg status --copies --rev 'desc("b-1")' --rev 'desc("mBCm-1")'
1814 M d
1892 M d
1815 $ hg status --copies --rev 'desc("b-1")' --rev 'desc("mCBm-1")'
1893 $ hg status --copies --rev 'desc("b-1")' --rev 'desc("mCBm-1")'
1816 M d
1894 M d
1817 $ hg status --copies --rev 'desc("c-1")' --rev 'desc("mBCm-1")'
1895 $ hg status --copies --rev 'desc("c-1")' --rev 'desc("mBCm-1")'
1818 M b
1896 M b
1819 A d
1897 A d
1820 $ hg status --copies --rev 'desc("c-1")' --rev 'desc("mCBm-1")'
1898 $ hg status --copies --rev 'desc("c-1")' --rev 'desc("mCBm-1")'
1821 M b
1899 M b
1822 A d
1900 A d
1823 $ hg status --copies --rev 'desc("i-2")' --rev 'desc("mBCm-1")'
1901 $ hg status --copies --rev 'desc("i-2")' --rev 'desc("mBCm-1")'
1824 M b
1902 M b
1825 M d
1903 M d
1826 $ hg status --copies --rev 'desc("i-2")' --rev 'desc("mCBm-1")'
1904 $ hg status --copies --rev 'desc("i-2")' --rev 'desc("mCBm-1")'
1827 M b
1905 M b
1828 M d
1906 M d
1829 $ hg status --copies --rev 'desc("i-0")' --rev 'desc("mBCm-1")'
1907 $ hg status --copies --rev 'desc("i-0")' --rev 'desc("mBCm-1")'
1830 M b
1908 M b
1831 A d
1909 A d
1832 A t
1910 A t
1833 p
1911 p
1834 R a
1912 R a
1835 R p
1913 R p
1836 $ hg status --copies --rev 'desc("i-0")' --rev 'desc("mCBm-1")'
1914 $ hg status --copies --rev 'desc("i-0")' --rev 'desc("mCBm-1")'
1837 M b
1915 M b
1838 A d
1916 A d
1839 A t
1917 A t
1840 p
1918 p
1841 R a
1919 R a
1842 R p
1920 R p
1843
1921
1844 Comparing with a merge re-adding the file afterward
1922 Comparing with a merge re-adding the file afterward
1845 ---------------------------------------------------
1923 ---------------------------------------------------
1846
1924
1847 Merge:
1925 Merge:
1848 - one with change to an unrelated file
1926 - one with change to an unrelated file
1849 - one deleting and recreating the change
1927 - one deleting and recreating the change
1850
1928
1851 $ hg log -G --rev '::(desc("mDBm")+desc("mBDm"))'
1929 $ hg log -G --rev '::(desc("mDBm")+desc("mBDm"))'
1852 o mDBm-0 simple merge - B side: unrelated update, D side: delete and recreate a file (with different content) - the other way
1930 o mDBm-0 simple merge - B side: unrelated update, D side: delete and recreate a file (with different content) - the other way
1853 |\
1931 |\
1854 +---o mBDm-0 simple merge - B side: unrelated update, D side: delete and recreate a file (with different content) - one way
1932 +---o mBDm-0 simple merge - B side: unrelated update, D side: delete and recreate a file (with different content) - one way
1855 | |/
1933 | |/
1856 | o d-2 re-add d
1934 | o d-2 re-add d
1857 | |
1935 | |
1858 | o d-1 delete d
1936 | o d-1 delete d
1859 | |
1937 | |
1860 o | b-1: b update
1938 o | b-1: b update
1861 |/
1939 |/
1862 o i-2: c -move-> d, s -move-> t
1940 o i-2: c -move-> d, s -move-> t
1863 |
1941 |
1864 o i-1: a -move-> c, p -move-> s
1942 o i-1: a -move-> c, p -move-> s
1865 |
1943 |
1866 o i-0 initial commit: a b h
1944 o i-0 initial commit: a b h
1867
1945
1868 $ hg status --copies --rev 'desc("b-1")' --rev 'desc("mBDm-0")'
1946 $ hg status --copies --rev 'desc("b-1")' --rev 'desc("mBDm-0")'
1869 M d
1947 M d
1870 $ hg status --copies --rev 'desc("b-1")' --rev 'desc("mDBm-0")'
1948 $ hg status --copies --rev 'desc("b-1")' --rev 'desc("mDBm-0")'
1871 M d
1949 M d
1872 $ hg status --copies --rev 'desc("d-2")' --rev 'desc("mBDm-0")'
1950 $ hg status --copies --rev 'desc("d-2")' --rev 'desc("mBDm-0")'
1873 M b
1951 M b
1874 $ hg status --copies --rev 'desc("d-2")' --rev 'desc("mDBm-0")'
1952 $ hg status --copies --rev 'desc("d-2")' --rev 'desc("mDBm-0")'
1875 M b
1953 M b
1876 $ hg status --copies --rev 'desc("i-2")' --rev 'desc("mBDm-0")'
1954 $ hg status --copies --rev 'desc("i-2")' --rev 'desc("mBDm-0")'
1877 M b
1955 M b
1878 M d
1956 M d
1879 $ hg status --copies --rev 'desc("i-2")' --rev 'desc("mDBm-0")'
1957 $ hg status --copies --rev 'desc("i-2")' --rev 'desc("mDBm-0")'
1880 M b
1958 M b
1881 M d
1959 M d
1882
1960
1883 The bugs makes recorded copy is different depending of where we started the merge from since
1961 The bugs makes recorded copy is different depending of where we started the merge from since
1884
1962
1885 $ hg manifest --debug --rev 'desc("mBDm-0")' | grep '644 d'
1963 $ hg manifest --debug --rev 'desc("mBDm-0")' | grep '644 d'
1886 b004912a8510032a0350a74daa2803dadfb00e12 644 d
1964 b004912a8510032a0350a74daa2803dadfb00e12 644 d
1887 $ hg manifest --debug --rev 'desc("mDBm-0")' | grep '644 d'
1965 $ hg manifest --debug --rev 'desc("mDBm-0")' | grep '644 d'
1888 b004912a8510032a0350a74daa2803dadfb00e12 644 d
1966 b004912a8510032a0350a74daa2803dadfb00e12 644 d
1889
1967
1890 $ hg manifest --debug --rev 'desc("d-2")' | grep '644 d'
1968 $ hg manifest --debug --rev 'desc("d-2")' | grep '644 d'
1891 b004912a8510032a0350a74daa2803dadfb00e12 644 d
1969 b004912a8510032a0350a74daa2803dadfb00e12 644 d
1892 $ hg manifest --debug --rev 'desc("b-1")' | grep '644 d'
1970 $ hg manifest --debug --rev 'desc("b-1")' | grep '644 d'
1893 d8252ab2e760b0d4e5288fd44cbd15a0fa567e16 644 d (no-changeset !)
1971 d8252ab2e760b0d4e5288fd44cbd15a0fa567e16 644 d (no-changeset !)
1894 ae258f702dfeca05bf9b6a22a97a4b5645570f11 644 d (changeset !)
1972 ae258f702dfeca05bf9b6a22a97a4b5645570f11 644 d (changeset !)
1895 $ hg debugindex d | head -n 4 | ../no-linkrev
1973 $ hg debugindex d | head -n 4 | ../no-linkrev
1896 rev linkrev nodeid p1 p2
1974 rev linkrev nodeid p1 p2
1897 0 * d8252ab2e760 000000000000 000000000000 (no-changeset !)
1975 0 * d8252ab2e760 000000000000 000000000000 (no-changeset !)
1898 0 * ae258f702dfe 000000000000 000000000000 (changeset !)
1976 0 * ae258f702dfe 000000000000 000000000000 (changeset !)
1899 1 * b004912a8510 000000000000 000000000000
1977 1 * b004912a8510 000000000000 000000000000
1900 2 * 7b79e2fe0c89 000000000000 000000000000 (no-changeset !)
1978 2 * 7b79e2fe0c89 000000000000 000000000000 (no-changeset !)
1901 2 * 5cce88bf349f ae258f702dfe 000000000000 (changeset !)
1979 2 * 5cce88bf349f ae258f702dfe 000000000000 (changeset !)
1902
1980
1903 Log output should not include a merge commit as it did not happen
1981 Log output should not include a merge commit as it did not happen
1904
1982
1905 $ hg log -Gfr 'desc("mBDm-0")' d
1983 $ hg log -Gfr 'desc("mBDm-0")' d
1906 o d-2 re-add d
1984 o d-2 re-add d
1907 |
1985 |
1908 ~
1986 ~
1909
1987
1910 $ hg log -Gfr 'desc("mDBm-0")' d
1988 $ hg log -Gfr 'desc("mDBm-0")' d
1911 o d-2 re-add d
1989 o d-2 re-add d
1912 |
1990 |
1913 ~
1991 ~
1914
1992
1915 $ hg status --copies --rev 'desc("i-0")' --rev 'desc("mBDm-0")'
1993 $ hg status --copies --rev 'desc("i-0")' --rev 'desc("mBDm-0")'
1916 M b
1994 M b
1917 A d
1995 A d
1918 A t
1996 A t
1919 p
1997 p
1920 R a
1998 R a
1921 R p
1999 R p
1922 $ hg status --copies --rev 'desc("i-0")' --rev 'desc("mDBm-0")'
2000 $ hg status --copies --rev 'desc("i-0")' --rev 'desc("mDBm-0")'
1923 M b
2001 M b
1924 A d
2002 A d
1925 A t
2003 A t
1926 p
2004 p
1927 R a
2005 R a
1928 R p
2006 R p
1929
2007
1930
2008
1931 Comparing with a merge with colliding rename
2009 Comparing with a merge with colliding rename
1932 --------------------------------------------
2010 --------------------------------------------
1933
2011
1934 Subcase: new copy information on both side
2012 Subcase: new copy information on both side
1935 ``````````````````````````````````````````
2013 ``````````````````````````````````````````
1936
2014
1937 - the "e-" branch renaming b to f (through 'g')
2015 - the "e-" branch renaming b to f (through 'g')
1938 - the "a-" branch renaming d to f (through e)
2016 - the "a-" branch renaming d to f (through e)
1939
2017
1940 $ hg log -G --rev '::(desc("mAEm")+desc("mEAm"))'
2018 $ hg log -G --rev '::(desc("mAEm")+desc("mEAm"))'
1941 o mEAm-0 merge with copies info on both side - A side: rename d to f, E side: b to f, (same content for f) - the other way
2019 o mEAm-0 merge with copies info on both side - A side: rename d to f, E side: b to f, (same content for f) - the other way
1942 |\
2020 |\
1943 +---o mAEm-0 merge with copies info on both side - A side: rename d to f, E side: b to f, (same content for f) - one way
2021 +---o mAEm-0 merge with copies info on both side - A side: rename d to f, E side: b to f, (same content for f) - one way
1944 | |/
2022 | |/
1945 | o e-2 g -move-> f
2023 | o e-2 g -move-> f
1946 | |
2024 | |
1947 | o e-1 b -move-> g
2025 | o e-1 b -move-> g
1948 | |
2026 | |
1949 o | a-2: e -move-> f
2027 o | a-2: e -move-> f
1950 | |
2028 | |
1951 o | a-1: d -move-> e
2029 o | a-1: d -move-> e
1952 |/
2030 |/
1953 o i-2: c -move-> d, s -move-> t
2031 o i-2: c -move-> d, s -move-> t
1954 |
2032 |
1955 o i-1: a -move-> c, p -move-> s
2033 o i-1: a -move-> c, p -move-> s
1956 |
2034 |
1957 o i-0 initial commit: a b h
2035 o i-0 initial commit: a b h
1958
2036
1959 #if no-changeset
2037 #if no-changeset
1960 $ hg manifest --debug --rev 'desc("mAEm-0")' | grep '644 f'
2038 $ hg manifest --debug --rev 'desc("mAEm-0")' | grep '644 f'
1961 2ff93c643948464ee1f871867910ae43a45b0bea 644 f
2039 2ff93c643948464ee1f871867910ae43a45b0bea 644 f
1962 $ hg manifest --debug --rev 'desc("mEAm-0")' | grep '644 f'
2040 $ hg manifest --debug --rev 'desc("mEAm-0")' | grep '644 f'
1963 2ff93c643948464ee1f871867910ae43a45b0bea 644 f
2041 2ff93c643948464ee1f871867910ae43a45b0bea 644 f
1964 $ hg manifest --debug --rev 'desc("a-2")' | grep '644 f'
2042 $ hg manifest --debug --rev 'desc("a-2")' | grep '644 f'
1965 b76eb76580df486c3d51d63c5c210d4dd43a8ac7 644 f
2043 b76eb76580df486c3d51d63c5c210d4dd43a8ac7 644 f
1966 $ hg manifest --debug --rev 'desc("e-2")' | grep '644 f'
2044 $ hg manifest --debug --rev 'desc("e-2")' | grep '644 f'
1967 e8825b386367b29fec957283a80bb47b47483fe1 644 f
2045 e8825b386367b29fec957283a80bb47b47483fe1 644 f
1968 $ hg debugindex f | ../no-linkrev
2046 $ hg debugindex f | ../no-linkrev
1969 rev linkrev nodeid p1 p2
2047 rev linkrev nodeid p1 p2
1970 0 * b76eb76580df 000000000000 000000000000
2048 0 * b76eb76580df 000000000000 000000000000
1971 1 * e8825b386367 000000000000 000000000000
2049 1 * e8825b386367 000000000000 000000000000
1972 2 * 2ff93c643948 b76eb76580df e8825b386367
2050 2 * 2ff93c643948 b76eb76580df e8825b386367
1973 3 * 2f649fba7eb2 b76eb76580df e8825b386367
2051 3 * 2f649fba7eb2 b76eb76580df e8825b386367
1974 4 * 774e7c1637d5 e8825b386367 b76eb76580df
2052 4 * 774e7c1637d5 e8825b386367 b76eb76580df
1975 #else
2053 #else
1976 $ hg manifest --debug --rev 'desc("mAEm-0")' | grep '644 f'
2054 $ hg manifest --debug --rev 'desc("mAEm-0")' | grep '644 f'
1977 ae258f702dfeca05bf9b6a22a97a4b5645570f11 644 f
2055 ae258f702dfeca05bf9b6a22a97a4b5645570f11 644 f
1978 $ hg manifest --debug --rev 'desc("mEAm-0")' | grep '644 f'
2056 $ hg manifest --debug --rev 'desc("mEAm-0")' | grep '644 f'
1979 ae258f702dfeca05bf9b6a22a97a4b5645570f11 644 f
2057 ae258f702dfeca05bf9b6a22a97a4b5645570f11 644 f
1980 $ hg manifest --debug --rev 'desc("a-2")' | grep '644 f'
2058 $ hg manifest --debug --rev 'desc("a-2")' | grep '644 f'
1981 ae258f702dfeca05bf9b6a22a97a4b5645570f11 644 f
2059 ae258f702dfeca05bf9b6a22a97a4b5645570f11 644 f
1982 $ hg manifest --debug --rev 'desc("e-2")' | grep '644 f'
2060 $ hg manifest --debug --rev 'desc("e-2")' | grep '644 f'
1983 ae258f702dfeca05bf9b6a22a97a4b5645570f11 644 f
2061 ae258f702dfeca05bf9b6a22a97a4b5645570f11 644 f
1984 $ hg debugindex f | ../no-linkrev
2062 $ hg debugindex f | ../no-linkrev
1985 rev linkrev nodeid p1 p2
2063 rev linkrev nodeid p1 p2
1986 0 * ae258f702dfe 000000000000 000000000000
2064 0 * ae258f702dfe 000000000000 000000000000
1987 1 * d3613c1ec831 ae258f702dfe 000000000000
2065 1 * d3613c1ec831 ae258f702dfe 000000000000
1988 2 * 05e03c868bbc ae258f702dfe 000000000000
2066 2 * 05e03c868bbc ae258f702dfe 000000000000
1989 #endif
2067 #endif
1990
2068
1991 # Here the filelog based implementation is not looking at the rename
2069 # Here the filelog based implementation is not looking at the rename
1992 # information (because the file exist on both side). However the changelog
2070 # information (because the file exist on both side). However the changelog
1993 # based on works fine. We have different output.
2071 # based on works fine. We have different output.
1994
2072
1995 $ hg status --copies --rev 'desc("a-2")' --rev 'desc("mAEm-0")'
2073 $ hg status --copies --rev 'desc("a-2")' --rev 'desc("mAEm-0")'
1996 M f (no-changeset !)
2074 M f (no-changeset !)
1997 b (no-filelog no-changeset !)
2075 b (no-filelog no-changeset !)
1998 R b
2076 R b
1999 $ hg status --copies --rev 'desc("a-2")' --rev 'desc("mEAm-0")'
2077 $ hg status --copies --rev 'desc("a-2")' --rev 'desc("mEAm-0")'
2000 M f (no-changeset !)
2078 M f (no-changeset !)
2001 b (no-filelog no-changeset !)
2079 b (no-filelog no-changeset !)
2002 R b
2080 R b
2003 $ hg status --copies --rev 'desc("e-2")' --rev 'desc("mAEm-0")'
2081 $ hg status --copies --rev 'desc("e-2")' --rev 'desc("mAEm-0")'
2004 M f (no-changeset !)
2082 M f (no-changeset !)
2005 d (no-filelog no-changeset !)
2083 d (no-filelog no-changeset !)
2006 R d
2084 R d
2007 $ hg status --copies --rev 'desc("e-2")' --rev 'desc("mEAm-0")'
2085 $ hg status --copies --rev 'desc("e-2")' --rev 'desc("mEAm-0")'
2008 M f (no-changeset !)
2086 M f (no-changeset !)
2009 d (no-filelog no-changeset !)
2087 d (no-filelog no-changeset !)
2010 R d
2088 R d
2011 $ hg status --copies --rev 'desc("i-2")' --rev 'desc("a-2")'
2089 $ hg status --copies --rev 'desc("i-2")' --rev 'desc("a-2")'
2012 A f
2090 A f
2013 d
2091 d
2014 R d
2092 R d
2015 $ hg status --copies --rev 'desc("i-2")' --rev 'desc("e-2")'
2093 $ hg status --copies --rev 'desc("i-2")' --rev 'desc("e-2")'
2016 A f
2094 A f
2017 b
2095 b
2018 R b
2096 R b
2019
2097
2020 # From here, we run status against revision where both source file exists.
2098 # From here, we run status against revision where both source file exists.
2021 #
2099 #
2022 # The filelog based implementation picks an arbitrary side based on revision
2100 # The filelog based implementation picks an arbitrary side based on revision
2023 # numbers. So the same side "wins" whatever the parents order is. This is
2101 # numbers. So the same side "wins" whatever the parents order is. This is
2024 # sub-optimal because depending on revision numbers means the result can be
2102 # sub-optimal because depending on revision numbers means the result can be
2025 # different from one repository to the next.
2103 # different from one repository to the next.
2026 #
2104 #
2027 # The changeset based algorithm use the parent order to break tie on conflicting
2105 # The changeset based algorithm use the parent order to break tie on conflicting
2028 # information and will have a different order depending on who is p1 and p2.
2106 # information and will have a different order depending on who is p1 and p2.
2029 # That order is stable accross repositories. (data from p1 prevails)
2107 # That order is stable accross repositories. (data from p1 prevails)
2030
2108
2031 $ hg status --copies --rev 'desc("i-2")' --rev 'desc("mAEm-0")'
2109 $ hg status --copies --rev 'desc("i-2")' --rev 'desc("mAEm-0")'
2032 A f
2110 A f
2033 d
2111 d
2034 R b
2112 R b
2035 R d
2113 R d
2036 $ hg status --copies --rev 'desc("i-2")' --rev 'desc("mEAm-0")'
2114 $ hg status --copies --rev 'desc("i-2")' --rev 'desc("mEAm-0")'
2037 A f
2115 A f
2038 d (filelog !)
2116 d (filelog !)
2039 b (no-filelog !)
2117 b (no-filelog !)
2040 R b
2118 R b
2041 R d
2119 R d
2042 $ hg status --copies --rev 'desc("i-0")' --rev 'desc("mAEm-0")'
2120 $ hg status --copies --rev 'desc("i-0")' --rev 'desc("mAEm-0")'
2043 A f
2121 A f
2044 a
2122 a
2045 A t
2123 A t
2046 p
2124 p
2047 R a
2125 R a
2048 R b
2126 R b
2049 R p
2127 R p
2050 $ hg status --copies --rev 'desc("i-0")' --rev 'desc("mEAm-0")'
2128 $ hg status --copies --rev 'desc("i-0")' --rev 'desc("mEAm-0")'
2051 A f
2129 A f
2052 a (filelog !)
2130 a (filelog !)
2053 b (no-filelog !)
2131 b (no-filelog !)
2054 A t
2132 A t
2055 p
2133 p
2056 R a
2134 R a
2057 R b
2135 R b
2058 R p
2136 R p
2059
2137
2060
2138
2061 Subcase: existing copy information overwritten on one branch
2139 Subcase: existing copy information overwritten on one branch
2062 ````````````````````````````````````````````````````````````
2140 ````````````````````````````````````````````````````````````
2063
2141
2064 Note:
2142 Note:
2065 | In this case, one of the merge wrongly record a merge while there is none.
2143 | In this case, one of the merge wrongly record a merge while there is none.
2066 | This lead to bad copy tracing information to be dug up.
2144 | This lead to bad copy tracing information to be dug up.
2067
2145
2068
2146
2069 Merge:
2147 Merge:
2070 - one with change to an unrelated file (b)
2148 - one with change to an unrelated file (b)
2071 - one overwriting a file (d) with a rename (from h to i to d)
2149 - one overwriting a file (d) with a rename (from h to i to d)
2072
2150
2073 $ hg log -G --rev '::(desc("mBFm")+desc("mFBm"))'
2151 $ hg log -G --rev '::(desc("mBFm")+desc("mFBm"))'
2074 o mFBm-0 simple merge - B side: unrelated change, F side: overwrite d with a copy (from h->i->d) - the other way
2152 o mFBm-0 simple merge - B side: unrelated change, F side: overwrite d with a copy (from h->i->d) - the other way
2075 |\
2153 |\
2076 +---o mBFm-0 simple merge - B side: unrelated change, F side: overwrite d with a copy (from h->i->d) - one way
2154 +---o mBFm-0 simple merge - B side: unrelated change, F side: overwrite d with a copy (from h->i->d) - one way
2077 | |/
2155 | |/
2078 | o f-2: rename i -> d
2156 | o f-2: rename i -> d
2079 | |
2157 | |
2080 | o f-1: rename h -> i
2158 | o f-1: rename h -> i
2081 | |
2159 | |
2082 o | b-1: b update
2160 o | b-1: b update
2083 |/
2161 |/
2084 o i-2: c -move-> d, s -move-> t
2162 o i-2: c -move-> d, s -move-> t
2085 |
2163 |
2086 o i-1: a -move-> c, p -move-> s
2164 o i-1: a -move-> c, p -move-> s
2087 |
2165 |
2088 o i-0 initial commit: a b h
2166 o i-0 initial commit: a b h
2089
2167
2090 $ hg status --copies --rev 'desc("i-0")' --rev 'desc("mBFm-0")'
2168 $ hg status --copies --rev 'desc("i-0")' --rev 'desc("mBFm-0")'
2091 M b
2169 M b
2092 A d
2170 A d
2093 h
2171 h
2094 A t
2172 A t
2095 p
2173 p
2096 R a
2174 R a
2097 R h
2175 R h
2098 R p
2176 R p
2099 $ hg status --copies --rev 'desc("i-0")' --rev 'desc("mFBm-0")'
2177 $ hg status --copies --rev 'desc("i-0")' --rev 'desc("mFBm-0")'
2100 M b
2178 M b
2101 A d
2179 A d
2102 h
2180 h
2103 A t
2181 A t
2104 p
2182 p
2105 R a
2183 R a
2106 R h
2184 R h
2107 R p
2185 R p
2108 $ hg status --copies --rev 'desc("b-1")' --rev 'desc("mBFm-0")'
2186 $ hg status --copies --rev 'desc("b-1")' --rev 'desc("mBFm-0")'
2109 M d (no-changeset !)
2187 M d (no-changeset !)
2110 h (no-filelog no-changeset !)
2188 h (no-filelog no-changeset !)
2111 R h
2189 R h
2112 $ hg status --copies --rev 'desc("f-2")' --rev 'desc("mBFm-0")'
2190 $ hg status --copies --rev 'desc("f-2")' --rev 'desc("mBFm-0")'
2113 M b
2191 M b
2114 $ hg status --copies --rev 'desc("f-1")' --rev 'desc("mBFm-0")'
2192 $ hg status --copies --rev 'desc("f-1")' --rev 'desc("mBFm-0")'
2115 M b
2193 M b
2116 M d (no-changeset !)
2194 M d (no-changeset !)
2117 i (no-filelog no-changeset !)
2195 i (no-filelog no-changeset !)
2118 R i
2196 R i
2119 $ hg status --copies --rev 'desc("b-1")' --rev 'desc("mFBm-0")'
2197 $ hg status --copies --rev 'desc("b-1")' --rev 'desc("mFBm-0")'
2120 M d (no-changeset !)
2198 M d (no-changeset !)
2121 h (no-filelog no-changeset !)
2199 h (no-filelog no-changeset !)
2122 R h
2200 R h
2123 $ hg status --copies --rev 'desc("f-2")' --rev 'desc("mFBm-0")'
2201 $ hg status --copies --rev 'desc("f-2")' --rev 'desc("mFBm-0")'
2124 M b
2202 M b
2125 $ hg status --copies --rev 'desc("f-1")' --rev 'desc("mFBm-0")'
2203 $ hg status --copies --rev 'desc("f-1")' --rev 'desc("mFBm-0")'
2126 M b
2204 M b
2127 M d (no-changeset !)
2205 M d (no-changeset !)
2128 i (no-filelog no-changeset !)
2206 i (no-filelog no-changeset !)
2129 R i
2207 R i
2130
2208
2131 #if no-changeset
2209 #if no-changeset
2132 $ hg log -Gfr 'desc("mBFm-0")' d
2210 $ hg log -Gfr 'desc("mBFm-0")' d
2133 o f-2: rename i -> d
2211 o f-2: rename i -> d
2134 |
2212 |
2135 o f-1: rename h -> i
2213 o f-1: rename h -> i
2136 :
2214 :
2137 o i-0 initial commit: a b h
2215 o i-0 initial commit: a b h
2138
2216
2139 #else
2217 #else
2140 BROKEN: `hg log --follow <file>` relies on filelog metadata to work
2218 BROKEN: `hg log --follow <file>` relies on filelog metadata to work
2141 $ hg log -Gfr 'desc("mBFm-0")' d
2219 $ hg log -Gfr 'desc("mBFm-0")' d
2142 o i-2: c -move-> d, s -move-> t
2220 o i-2: c -move-> d, s -move-> t
2143 |
2221 |
2144 ~
2222 ~
2145 #endif
2223 #endif
2146
2224
2147 #if no-changeset
2225 #if no-changeset
2148 $ hg log -Gfr 'desc("mFBm-0")' d
2226 $ hg log -Gfr 'desc("mFBm-0")' d
2149 o f-2: rename i -> d
2227 o f-2: rename i -> d
2150 |
2228 |
2151 o f-1: rename h -> i
2229 o f-1: rename h -> i
2152 :
2230 :
2153 o i-0 initial commit: a b h
2231 o i-0 initial commit: a b h
2154
2232
2155 #else
2233 #else
2156 BROKEN: `hg log --follow <file>` relies on filelog metadata to work
2234 BROKEN: `hg log --follow <file>` relies on filelog metadata to work
2157 $ hg log -Gfr 'desc("mFBm-0")' d
2235 $ hg log -Gfr 'desc("mFBm-0")' d
2158 o i-2: c -move-> d, s -move-> t
2236 o i-2: c -move-> d, s -move-> t
2159 |
2237 |
2160 ~
2238 ~
2161 #endif
2239 #endif
2162
2240
2241
2242 Subcase: existing copy information overwritten on one branch, with different content)
2243 `````````````````````````````````````````````````````````````````````````````````````
2244
2245 Merge:
2246 - one with change to an unrelated file (b)
2247 - one overwriting a file (t) with a rename (from r to x to t), v content is not the same as on the other branch
2248
2249 $ hg log -G --rev '::(desc("mBRm")+desc("mRBm"))'
2250 o mRBm-0 simple merge - B side: unrelated change, R side: overwrite d with a copy (from r->x->t) different content - the other way
2251 |\
2252 +---o mBRm-0 simple merge - B side: unrelated change, R side: overwrite d with a copy (from r->x->t) different content - one way
2253 | |/
2254 | o r-2: rename t -> x
2255 | |
2256 | o r-1: rename r -> x
2257 | |
2258 o | b-1: b update
2259 |/
2260 o i-2: c -move-> d, s -move-> t
2261 |
2262 o i-1: a -move-> c, p -move-> s
2263 |
2264 o i-0 initial commit: a b h
2265
2266 $ hg status --copies --rev 'desc("i-0")' --rev 'desc("mBRm-0")'
2267 M b
2268 A d
2269 a
2270 A t
2271 r
2272 R a
2273 R p
2274 R r
2275 $ hg status --copies --rev 'desc("i-0")' --rev 'desc("mRBm-0")'
2276 M b
2277 A d
2278 a
2279 A t
2280 r
2281 R a
2282 R p
2283 R r
2284 $ hg status --copies --rev 'desc("b-1")' --rev 'desc("mBRm-0")'
2285 M t
2286 r (no-filelog !)
2287 R r
2288 $ hg status --copies --rev 'desc("r-2")' --rev 'desc("mBRm-0")'
2289 M b
2290 $ hg status --copies --rev 'desc("r-1")' --rev 'desc("mBRm-0")'
2291 M b
2292 M t
2293 x (no-filelog !)
2294 R x
2295 $ hg status --copies --rev 'desc("b-1")' --rev 'desc("mRBm-0")'
2296 M t
2297 r (no-filelog !)
2298 R r
2299 $ hg status --copies --rev 'desc("r-2")' --rev 'desc("mRBm-0")'
2300 M b
2301 $ hg status --copies --rev 'desc("r-1")' --rev 'desc("mRBm-0")'
2302 M b
2303 M t
2304 x (no-filelog !)
2305 R x
2306
2307 #if no-changeset
2308 $ hg log -Gfr 'desc("mBRm-0")' d
2309 o i-2: c -move-> d, s -move-> t
2310 |
2311 o i-1: a -move-> c, p -move-> s
2312 |
2313 o i-0 initial commit: a b h
2314
2315 #else
2316 BROKEN: `hg log --follow <file>` relies on filelog metadata to work
2317 $ hg log -Gfr 'desc("mBRm-0")' d
2318 o i-2: c -move-> d, s -move-> t
2319 |
2320 ~
2321 #endif
2322
2323 #if no-changeset
2324 $ hg log -Gfr 'desc("mRBm-0")' d
2325 o i-2: c -move-> d, s -move-> t
2326 |
2327 o i-1: a -move-> c, p -move-> s
2328 |
2329 o i-0 initial commit: a b h
2330
2331 #else
2332 BROKEN: `hg log --follow <file>` relies on filelog metadata to work
2333 $ hg log -Gfr 'desc("mRBm-0")' d
2334 o i-2: c -move-> d, s -move-> t
2335 |
2336 ~
2337 #endif
2338
2163 Subcase: reset of the copy history on one side
2339 Subcase: reset of the copy history on one side
2164 ``````````````````````````````````````````````
2340 ``````````````````````````````````````````````
2165
2341
2166 Merge:
2342 Merge:
2167 - one with change to a file
2343 - one with change to a file
2168 - one deleting and recreating the file
2344 - one deleting and recreating the file
2169
2345
2170 Unlike in the 'BD/DB' cases, an actual merge happened here. So we should
2346 Unlike in the 'BD/DB' cases, an actual merge happened here. So we should
2171 consider history and rename on both branch of the merge.
2347 consider history and rename on both branch of the merge.
2172
2348
2173 $ hg log -G --rev '::(desc("mDGm")+desc("mGDm"))'
2349 $ hg log -G --rev '::(desc("mDGm")+desc("mGDm"))'
2174 o mGDm-0 actual content merge, copies on one side - D side: delete and re-add (different content), G side: update content - the other way
2350 o mGDm-0 actual content merge, copies on one side - D side: delete and re-add (different content), G side: update content - the other way
2175 |\
2351 |\
2176 +---o mDGm-0 actual content merge, copies on one side - D side: delete and re-add (different content), G side: update content - one way
2352 +---o mDGm-0 actual content merge, copies on one side - D side: delete and re-add (different content), G side: update content - one way
2177 | |/
2353 | |/
2178 | o g-1: update d
2354 | o g-1: update d
2179 | |
2355 | |
2180 o | d-2 re-add d
2356 o | d-2 re-add d
2181 | |
2357 | |
2182 o | d-1 delete d
2358 o | d-1 delete d
2183 |/
2359 |/
2184 o i-2: c -move-> d, s -move-> t
2360 o i-2: c -move-> d, s -move-> t
2185 |
2361 |
2186 o i-1: a -move-> c, p -move-> s
2362 o i-1: a -move-> c, p -move-> s
2187 |
2363 |
2188 o i-0 initial commit: a b h
2364 o i-0 initial commit: a b h
2189
2365
2190 One side of the merge have a long history with rename. The other side of the
2366 One side of the merge have a long history with rename. The other side of the
2191 merge point to a new file with a smaller history. Each side is "valid".
2367 merge point to a new file with a smaller history. Each side is "valid".
2192
2368
2193 (and again the filelog based algorithm only explore one, with a pick based on
2369 (and again the filelog based algorithm only explore one, with a pick based on
2194 revision numbers)
2370 revision numbers)
2195
2371
2196 $ hg status --copies --rev 'desc("i-0")' --rev 'desc("mDGm-0")'
2372 $ hg status --copies --rev 'desc("i-0")' --rev 'desc("mDGm-0")'
2197 A d
2373 A d
2198 a (filelog !)
2374 a (filelog !)
2199 A t
2375 A t
2200 p
2376 p
2201 R a
2377 R a
2202 R p
2378 R p
2203 $ hg status --copies --rev 'desc("i-0")' --rev 'desc("mGDm-0")'
2379 $ hg status --copies --rev 'desc("i-0")' --rev 'desc("mGDm-0")'
2204 A d
2380 A d
2205 a
2381 a
2206 A t
2382 A t
2207 p
2383 p
2208 R a
2384 R a
2209 R p
2385 R p
2210 $ hg status --copies --rev 'desc("d-2")' --rev 'desc("mDGm-0")'
2386 $ hg status --copies --rev 'desc("d-2")' --rev 'desc("mDGm-0")'
2211 M d
2387 M d
2212 $ hg status --copies --rev 'desc("d-2")' --rev 'desc("mGDm-0")'
2388 $ hg status --copies --rev 'desc("d-2")' --rev 'desc("mGDm-0")'
2213 M d
2389 M d
2214 $ hg status --copies --rev 'desc("g-1")' --rev 'desc("mDGm-0")'
2390 $ hg status --copies --rev 'desc("g-1")' --rev 'desc("mDGm-0")'
2215 M d
2391 M d
2216 $ hg status --copies --rev 'desc("g-1")' --rev 'desc("mGDm-0")'
2392 $ hg status --copies --rev 'desc("g-1")' --rev 'desc("mGDm-0")'
2217 M d
2393 M d
2218
2394
2219 #if no-changeset
2395 #if no-changeset
2220 $ hg log -Gfr 'desc("mDGm-0")' d
2396 $ hg log -Gfr 'desc("mDGm-0")' d
2221 o mDGm-0 actual content merge, copies on one side - D side: delete and re-add (different content), G side: update content - one way
2397 o mDGm-0 actual content merge, copies on one side - D side: delete and re-add (different content), G side: update content - one way
2222 |\
2398 |\
2223 | o g-1: update d
2399 | o g-1: update d
2224 | |
2400 | |
2225 o | d-2 re-add d
2401 o | d-2 re-add d
2226 |/
2402 |/
2227 o i-2: c -move-> d, s -move-> t
2403 o i-2: c -move-> d, s -move-> t
2228 |
2404 |
2229 o i-1: a -move-> c, p -move-> s
2405 o i-1: a -move-> c, p -move-> s
2230 |
2406 |
2231 o i-0 initial commit: a b h
2407 o i-0 initial commit: a b h
2232
2408
2233 #else
2409 #else
2234 BROKEN: `hg log --follow <file>` relies on filelog metadata to work
2410 BROKEN: `hg log --follow <file>` relies on filelog metadata to work
2235 $ hg log -Gfr 'desc("mDGm-0")' d
2411 $ hg log -Gfr 'desc("mDGm-0")' d
2236 o mDGm-0 actual content merge, copies on one side - D side: delete and re-add (different content), G side: update content - one way
2412 o mDGm-0 actual content merge, copies on one side - D side: delete and re-add (different content), G side: update content - one way
2237 |\
2413 |\
2238 | o g-1: update d
2414 | o g-1: update d
2239 | |
2415 | |
2240 o | d-2 re-add d
2416 o | d-2 re-add d
2241 |/
2417 |/
2242 o i-2: c -move-> d, s -move-> t
2418 o i-2: c -move-> d, s -move-> t
2243 |
2419 |
2244 ~
2420 ~
2245 #endif
2421 #endif
2246
2422
2247
2423
2248 #if no-changeset
2424 #if no-changeset
2249 $ hg log -Gfr 'desc("mDGm-0")' d
2425 $ hg log -Gfr 'desc("mDGm-0")' d
2250 o mDGm-0 actual content merge, copies on one side - D side: delete and re-add (different content), G side: update content - one way
2426 o mDGm-0 actual content merge, copies on one side - D side: delete and re-add (different content), G side: update content - one way
2251 |\
2427 |\
2252 | o g-1: update d
2428 | o g-1: update d
2253 | |
2429 | |
2254 o | d-2 re-add d
2430 o | d-2 re-add d
2255 |/
2431 |/
2256 o i-2: c -move-> d, s -move-> t
2432 o i-2: c -move-> d, s -move-> t
2257 |
2433 |
2258 o i-1: a -move-> c, p -move-> s
2434 o i-1: a -move-> c, p -move-> s
2259 |
2435 |
2260 o i-0 initial commit: a b h
2436 o i-0 initial commit: a b h
2261
2437
2262 #else
2438 #else
2263 BROKEN: `hg log --follow <file>` relies on filelog metadata to work
2439 BROKEN: `hg log --follow <file>` relies on filelog metadata to work
2264 $ hg log -Gfr 'desc("mDGm-0")' d
2440 $ hg log -Gfr 'desc("mDGm-0")' d
2265 o mDGm-0 actual content merge, copies on one side - D side: delete and re-add (different content), G side: update content - one way
2441 o mDGm-0 actual content merge, copies on one side - D side: delete and re-add (different content), G side: update content - one way
2266 |\
2442 |\
2267 | o g-1: update d
2443 | o g-1: update d
2268 | |
2444 | |
2269 o | d-2 re-add d
2445 o | d-2 re-add d
2270 |/
2446 |/
2271 o i-2: c -move-> d, s -move-> t
2447 o i-2: c -move-> d, s -move-> t
2272 |
2448 |
2273 ~
2449 ~
2274 #endif
2450 #endif
2275
2451
2276 Subcase: merging a change to a file with a "copy overwrite" to that file from another branch
2452 Subcase: merging a change to a file with a "copy overwrite" to that file from another branch
2277 ````````````````````````````````````````````````````````````````````````````````````````````
2453 ````````````````````````````````````````````````````````````````````````````````````````````
2278
2454
2279 Merge:
2455 Merge:
2280 - one with change to a file (d)
2456 - one with change to a file (d)
2281 - one overwriting that file with a rename (from h to i, to d)
2457 - one overwriting that file with a rename (from h to i, to d)
2282
2458
2283 This case is similar to BF/FB, but an actual merge happens, so both side of the
2459 This case is similar to BF/FB, but an actual merge happens, so both side of the
2284 history are relevant.
2460 history are relevant.
2285
2461
2286
2462
2287 $ hg log -G --rev '::(desc("mGFm")+desc("mFGm"))'
2463 $ hg log -G --rev '::(desc("mGFm")+desc("mFGm"))'
2288 o mGFm-0 merge - G side: content change, F side: copy overwrite, no content change - the other way
2464 o mGFm-0 merge - G side: content change, F side: copy overwrite, no content change - the other way
2289 |\
2465 |\
2290 +---o mFGm-0 merge - G side: content change, F side: copy overwrite, no content change - one way
2466 +---o mFGm-0 merge - G side: content change, F side: copy overwrite, no content change - one way
2291 | |/
2467 | |/
2292 | o g-1: update d
2468 | o g-1: update d
2293 | |
2469 | |
2294 o | f-2: rename i -> d
2470 o | f-2: rename i -> d
2295 | |
2471 | |
2296 o | f-1: rename h -> i
2472 o | f-1: rename h -> i
2297 |/
2473 |/
2298 o i-2: c -move-> d, s -move-> t
2474 o i-2: c -move-> d, s -move-> t
2299 |
2475 |
2300 o i-1: a -move-> c, p -move-> s
2476 o i-1: a -move-> c, p -move-> s
2301 |
2477 |
2302 o i-0 initial commit: a b h
2478 o i-0 initial commit: a b h
2303
2479
2304
2480
2305 Note:
2481 Note:
2306 | In this case, the merge get conflicting information since on one side we have
2482 | In this case, the merge get conflicting information since on one side we have
2307 | "a -> c -> d". and one the other one we have "h -> i -> d".
2483 | "a -> c -> d". and one the other one we have "h -> i -> d".
2308 |
2484 |
2309 | The current code arbitrarily pick one side depending the ordering of the merged hash:
2485 | The current code arbitrarily pick one side depending the ordering of the merged hash:
2310
2486
2311 In this case, the file hash from "f-2" is lower, so it will be `p1` of the resulting filenode its copy tracing information will win (and trace back to "h"):
2487 In this case, the file hash from "f-2" is lower, so it will be `p1` of the resulting filenode its copy tracing information will win (and trace back to "h"):
2312
2488
2313 Details on this hash ordering pick:
2489 Details on this hash ordering pick:
2314
2490
2315 $ hg manifest --debug 'desc("g-1")' | egrep 'd$'
2491 $ hg manifest --debug 'desc("g-1")' | egrep 'd$'
2316 17ec97e605773eb44a117d1136b3849bcdc1924f 644 d (no-changeset !)
2492 17ec97e605773eb44a117d1136b3849bcdc1924f 644 d (no-changeset !)
2317 5cce88bf349f7c742bb440f2c53f81db9c294279 644 d (changeset !)
2493 5cce88bf349f7c742bb440f2c53f81db9c294279 644 d (changeset !)
2318 $ hg status --copies --rev 'desc("i-0")' --rev 'desc("g-1")' d
2494 $ hg status --copies --rev 'desc("i-0")' --rev 'desc("g-1")' d
2319 A d
2495 A d
2320 a (no-changeset no-compatibility !)
2496 a (no-changeset no-compatibility !)
2321
2497
2322 $ hg manifest --debug 'desc("f-2")' | egrep 'd$'
2498 $ hg manifest --debug 'desc("f-2")' | egrep 'd$'
2323 7b79e2fe0c8924e0e598a82f048a7b024afa4d96 644 d (no-changeset !)
2499 7b79e2fe0c8924e0e598a82f048a7b024afa4d96 644 d (no-changeset !)
2324 ae258f702dfeca05bf9b6a22a97a4b5645570f11 644 d (changeset !)
2500 ae258f702dfeca05bf9b6a22a97a4b5645570f11 644 d (changeset !)
2325 $ hg status --copies --rev 'desc("i-0")' --rev 'desc("f-2")' d
2501 $ hg status --copies --rev 'desc("i-0")' --rev 'desc("f-2")' d
2326 A d
2502 A d
2327 h (no-changeset no-compatibility !)
2503 h (no-changeset no-compatibility !)
2328
2504
2329 Copy tracing data on the resulting merge:
2505 Copy tracing data on the resulting merge:
2330
2506
2331 $ hg status --copies --rev 'desc("i-0")' --rev 'desc("mFGm-0")'
2507 $ hg status --copies --rev 'desc("i-0")' --rev 'desc("mFGm-0")'
2332 A d
2508 A d
2333 h (no-filelog !)
2509 h (no-filelog !)
2334 a (filelog !)
2510 a (filelog !)
2335 A t
2511 A t
2336 p
2512 p
2337 R a
2513 R a
2338 R h
2514 R h
2339 R p
2515 R p
2340 $ hg status --copies --rev 'desc("i-0")' --rev 'desc("mGFm-0")'
2516 $ hg status --copies --rev 'desc("i-0")' --rev 'desc("mGFm-0")'
2341 A d
2517 A d
2342 a (no-changeset !)
2518 a (no-changeset !)
2343 h (changeset !)
2519 h (changeset !)
2344 A t
2520 A t
2345 p
2521 p
2346 R a
2522 R a
2347 R h
2523 R h
2348 R p
2524 R p
2349 $ hg status --copies --rev 'desc("f-2")' --rev 'desc("mFGm-0")'
2525 $ hg status --copies --rev 'desc("f-2")' --rev 'desc("mFGm-0")'
2350 M d
2526 M d
2351 $ hg status --copies --rev 'desc("f-2")' --rev 'desc("mGFm-0")'
2527 $ hg status --copies --rev 'desc("f-2")' --rev 'desc("mGFm-0")'
2352 M d
2528 M d
2353 $ hg status --copies --rev 'desc("f-1")' --rev 'desc("mFGm-0")'
2529 $ hg status --copies --rev 'desc("f-1")' --rev 'desc("mFGm-0")'
2354 M d
2530 M d
2355 i (no-filelog !)
2531 i (no-filelog !)
2356 R i
2532 R i
2357 $ hg status --copies --rev 'desc("f-1")' --rev 'desc("mGFm-0")'
2533 $ hg status --copies --rev 'desc("f-1")' --rev 'desc("mGFm-0")'
2358 M d
2534 M d
2359 i (no-filelog !)
2535 i (no-filelog !)
2360 R i
2536 R i
2361 $ hg status --copies --rev 'desc("g-1")' --rev 'desc("mFGm-0")'
2537 $ hg status --copies --rev 'desc("g-1")' --rev 'desc("mFGm-0")'
2362 M d (no-changeset !)
2538 M d (no-changeset !)
2363 h (no-filelog no-changeset !)
2539 h (no-filelog no-changeset !)
2364 R h
2540 R h
2365 $ hg status --copies --rev 'desc("g-1")' --rev 'desc("mGFm-0")'
2541 $ hg status --copies --rev 'desc("g-1")' --rev 'desc("mGFm-0")'
2366 M d (no-changeset !)
2542 M d (no-changeset !)
2367 h (no-filelog no-changeset !)
2543 h (no-filelog no-changeset !)
2368 R h
2544 R h
2369
2545
2370 #if no-changeset
2546 #if no-changeset
2371 $ hg log -Gfr 'desc("mFGm-0")' d
2547 $ hg log -Gfr 'desc("mFGm-0")' d
2372 o mFGm-0 merge - G side: content change, F side: copy overwrite, no content change - one way
2548 o mFGm-0 merge - G side: content change, F side: copy overwrite, no content change - one way
2373 |\
2549 |\
2374 | o g-1: update d
2550 | o g-1: update d
2375 | |
2551 | |
2376 o | f-2: rename i -> d
2552 o | f-2: rename i -> d
2377 | |
2553 | |
2378 o | f-1: rename h -> i
2554 o | f-1: rename h -> i
2379 |/
2555 |/
2380 o i-2: c -move-> d, s -move-> t
2556 o i-2: c -move-> d, s -move-> t
2381 |
2557 |
2382 o i-1: a -move-> c, p -move-> s
2558 o i-1: a -move-> c, p -move-> s
2383 |
2559 |
2384 o i-0 initial commit: a b h
2560 o i-0 initial commit: a b h
2385
2561
2386 #else
2562 #else
2387 BROKEN: `hg log --follow <file>` relies on filelog metadata to work
2563 BROKEN: `hg log --follow <file>` relies on filelog metadata to work
2388 $ hg log -Gfr 'desc("mFGm-0")' d
2564 $ hg log -Gfr 'desc("mFGm-0")' d
2389 o g-1: update d
2565 o g-1: update d
2390 |
2566 |
2391 o i-2: c -move-> d, s -move-> t
2567 o i-2: c -move-> d, s -move-> t
2392 |
2568 |
2393 ~
2569 ~
2394 #endif
2570 #endif
2395
2571
2396 #if no-changeset
2572 #if no-changeset
2397 $ hg log -Gfr 'desc("mGFm-0")' d
2573 $ hg log -Gfr 'desc("mGFm-0")' d
2398 o mGFm-0 merge - G side: content change, F side: copy overwrite, no content change - the other way
2574 o mGFm-0 merge - G side: content change, F side: copy overwrite, no content change - the other way
2399 |\
2575 |\
2400 | o g-1: update d
2576 | o g-1: update d
2401 | |
2577 | |
2402 o | f-2: rename i -> d
2578 o | f-2: rename i -> d
2403 | |
2579 | |
2404 o | f-1: rename h -> i
2580 o | f-1: rename h -> i
2405 |/
2581 |/
2406 o i-2: c -move-> d, s -move-> t
2582 o i-2: c -move-> d, s -move-> t
2407 |
2583 |
2408 o i-1: a -move-> c, p -move-> s
2584 o i-1: a -move-> c, p -move-> s
2409 |
2585 |
2410 o i-0 initial commit: a b h
2586 o i-0 initial commit: a b h
2411
2587
2412 #else
2588 #else
2413 BROKEN: `hg log --follow <file>` relies on filelog metadata to work
2589 BROKEN: `hg log --follow <file>` relies on filelog metadata to work
2414 $ hg log -Gfr 'desc("mGFm-0")' d
2590 $ hg log -Gfr 'desc("mGFm-0")' d
2415 o g-1: update d
2591 o g-1: update d
2416 |
2592 |
2417 o i-2: c -move-> d, s -move-> t
2593 o i-2: c -move-> d, s -move-> t
2418 |
2594 |
2419 ~
2595 ~
2420 #endif
2596 #endif
2421
2597
2422 Subcase: new copy information on both side with an actual merge happening
2598 Subcase: new copy information on both side with an actual merge happening
2423 `````````````````````````````````````````````````````````````````````````
2599 `````````````````````````````````````````````````````````````````````````
2424
2600
2425 - the "p-" branch renaming 't' to 'v' (through 'u')
2601 - the "p-" branch renaming 't' to 'v' (through 'u')
2426 - the "q-" branch renaming 'r' to 'v' (through 'w')
2602 - the "q-" branch renaming 'r' to 'v' (through 'w')
2427
2603
2428
2604
2429 $ hg log -G --rev '::(desc("mPQm")+desc("mQPm"))'
2605 $ hg log -G --rev '::(desc("mPQm")+desc("mQPm"))'
2430 o mQPm-0 merge with copies info on both side - P side: rename t to v, Q side: r to v, (different content) - the other way
2606 o mQPm-0 merge with copies info on both side - P side: rename t to v, Q side: r to v, (different content) - the other way
2431 |\
2607 |\
2432 +---o mPQm-0 merge with copies info on both side - P side: rename t to v, Q side: r to v, (different content) - one way
2608 +---o mPQm-0 merge with copies info on both side - P side: rename t to v, Q side: r to v, (different content) - one way
2433 | |/
2609 | |/
2434 | o q-2 w -move-> v
2610 | o q-2 w -move-> v
2435 | |
2611 | |
2436 | o q-1 r -move-> w
2612 | o q-1 r -move-> w
2437 | |
2613 | |
2438 o | p-2: u -move-> v
2614 o | p-2: u -move-> v
2439 | |
2615 | |
2440 o | p-1: t -move-> u
2616 o | p-1: t -move-> u
2441 |/
2617 |/
2442 o i-2: c -move-> d, s -move-> t
2618 o i-2: c -move-> d, s -move-> t
2443 |
2619 |
2444 o i-1: a -move-> c, p -move-> s
2620 o i-1: a -move-> c, p -move-> s
2445 |
2621 |
2446 o i-0 initial commit: a b h
2622 o i-0 initial commit: a b h
2447
2623
2448
2624
2449 #if no-changeset
2625 #if no-changeset
2450 $ hg manifest --debug --rev 'desc("mPQm-0")' | grep '644 v'
2626 $ hg manifest --debug --rev 'desc("mPQm-0")' | grep '644 v'
2451 0946c662ef16e4e67397fd717389eb6693d41749 644 v
2627 0946c662ef16e4e67397fd717389eb6693d41749 644 v
2452 $ hg manifest --debug --rev 'desc("mQPm-0")' | grep '644 v'
2628 $ hg manifest --debug --rev 'desc("mQPm-0")' | grep '644 v'
2453 0db3aad7fcc1ec27fab57060e327b9e864ea0cc9 644 v
2629 0db3aad7fcc1ec27fab57060e327b9e864ea0cc9 644 v
2454 $ hg manifest --debug --rev 'desc("p-2")' | grep '644 v'
2630 $ hg manifest --debug --rev 'desc("p-2")' | grep '644 v'
2455 3f91841cd75cadc9a1f1b4e7c1aa6d411f76032e 644 v
2631 3f91841cd75cadc9a1f1b4e7c1aa6d411f76032e 644 v
2456 $ hg manifest --debug --rev 'desc("q-2")' | grep '644 v'
2632 $ hg manifest --debug --rev 'desc("q-2")' | grep '644 v'
2457 c43c088b811fd27983c0a9aadf44f3343cd4cd7e 644 v
2633 c43c088b811fd27983c0a9aadf44f3343cd4cd7e 644 v
2458 $ hg debugindex v | ../no-linkrev
2634 $ hg debugindex v | ../no-linkrev
2459 rev linkrev nodeid p1 p2
2635 rev linkrev nodeid p1 p2
2460 0 * 3f91841cd75c 000000000000 000000000000
2636 0 * 3f91841cd75c 000000000000 000000000000
2461 1 * c43c088b811f 000000000000 000000000000
2637 1 * c43c088b811f 000000000000 000000000000
2462 2 * 0946c662ef16 3f91841cd75c c43c088b811f
2638 2 * 0946c662ef16 3f91841cd75c c43c088b811f
2463 3 * 0db3aad7fcc1 c43c088b811f 3f91841cd75c
2639 3 * 0db3aad7fcc1 c43c088b811f 3f91841cd75c
2464 #else
2640 #else
2465 $ hg manifest --debug --rev 'desc("mPQm-0")' | grep '644 v'
2641 $ hg manifest --debug --rev 'desc("mPQm-0")' | grep '644 v'
2466 65fde9f6e4d4da23b3f610e07b53673ea9541d75 644 v
2642 65fde9f6e4d4da23b3f610e07b53673ea9541d75 644 v
2467 $ hg manifest --debug --rev 'desc("mQPm-0")' | grep '644 v'
2643 $ hg manifest --debug --rev 'desc("mQPm-0")' | grep '644 v'
2468 a098dda6413aecf154eefc976afc38b295acb7e5 644 v
2644 a098dda6413aecf154eefc976afc38b295acb7e5 644 v
2469 $ hg manifest --debug --rev 'desc("p-2")' | grep '644 v'
2645 $ hg manifest --debug --rev 'desc("p-2")' | grep '644 v'
2470 5aed6a8dbff0301328c08360d24354d3d064cf0d 644 v
2646 5aed6a8dbff0301328c08360d24354d3d064cf0d 644 v
2471 $ hg manifest --debug --rev 'desc("q-2")' | grep '644 v'
2647 $ hg manifest --debug --rev 'desc("q-2")' | grep '644 v'
2472 a38b2fa170219750dac9bc7d19df831f213ba708 644 v
2648 a38b2fa170219750dac9bc7d19df831f213ba708 644 v
2473 $ hg debugindex v | ../no-linkrev
2649 $ hg debugindex v | ../no-linkrev
2474 rev linkrev nodeid p1 p2
2650 rev linkrev nodeid p1 p2
2475 0 * 5aed6a8dbff0 000000000000 000000000000
2651 0 * 5aed6a8dbff0 000000000000 000000000000
2476 1 * a38b2fa17021 000000000000 000000000000
2652 1 * a38b2fa17021 000000000000 000000000000
2477 2 * 65fde9f6e4d4 5aed6a8dbff0 a38b2fa17021
2653 2 * 65fde9f6e4d4 5aed6a8dbff0 a38b2fa17021
2478 3 * a098dda6413a a38b2fa17021 5aed6a8dbff0
2654 3 * a098dda6413a a38b2fa17021 5aed6a8dbff0
2479 #endif
2655 #endif
2480
2656
2481 # Here the filelog based implementation is not looking at the rename
2657 # Here the filelog based implementation is not looking at the rename
2482 # information (because the file exist on both side). However the changelog
2658 # information (because the file exist on both side). However the changelog
2483 # based on works fine. We have different output.
2659 # based on works fine. We have different output.
2484
2660
2485 $ hg status --copies --rev 'desc("p-2")' --rev 'desc("mPQm-0")'
2661 $ hg status --copies --rev 'desc("p-2")' --rev 'desc("mPQm-0")'
2486 M v
2662 M v
2487 r (no-filelog !)
2663 r (no-filelog !)
2488 R r
2664 R r
2489 $ hg status --copies --rev 'desc("p-2")' --rev 'desc("mQPm-0")'
2665 $ hg status --copies --rev 'desc("p-2")' --rev 'desc("mQPm-0")'
2490 M v
2666 M v
2491 r (no-filelog !)
2667 r (no-filelog !)
2492 R r
2668 R r
2493 $ hg status --copies --rev 'desc("q-2")' --rev 'desc("mPQm-0")'
2669 $ hg status --copies --rev 'desc("q-2")' --rev 'desc("mPQm-0")'
2494 M v
2670 M v
2495 t (no-filelog !)
2671 t (no-filelog !)
2496 R t
2672 R t
2497 $ hg status --copies --rev 'desc("q-2")' --rev 'desc("mQPm-0")'
2673 $ hg status --copies --rev 'desc("q-2")' --rev 'desc("mQPm-0")'
2498 M v
2674 M v
2499 t (no-filelog !)
2675 t (no-filelog !)
2500 R t
2676 R t
2501 $ hg status --copies --rev 'desc("i-2")' --rev 'desc("p-2")'
2677 $ hg status --copies --rev 'desc("i-2")' --rev 'desc("p-2")'
2502 A v
2678 A v
2503 t
2679 t
2504 R t
2680 R t
2505 $ hg status --copies --rev 'desc("i-2")' --rev 'desc("q-2")'
2681 $ hg status --copies --rev 'desc("i-2")' --rev 'desc("q-2")'
2506 A v
2682 A v
2507 r
2683 r
2508 R r
2684 R r
2509
2685
2510 # From here, we run status against revision where both source file exists.
2686 # From here, we run status against revision where both source file exists.
2511 #
2687 #
2512 # The filelog based implementation picks an arbitrary side based on revision
2688 # The filelog based implementation picks an arbitrary side based on revision
2513 # numbers. So the same side "wins" whatever the parents order is. This is
2689 # numbers. So the same side "wins" whatever the parents order is. This is
2514 # sub-optimal because depending on revision numbers means the result can be
2690 # sub-optimal because depending on revision numbers means the result can be
2515 # different from one repository to the next.
2691 # different from one repository to the next.
2516 #
2692 #
2517 # The changeset based algorithm use the parent order to break tie on conflicting
2693 # The changeset based algorithm use the parent order to break tie on conflicting
2518 # information and will have a different order depending on who is p1 and p2.
2694 # information and will have a different order depending on who is p1 and p2.
2519 # That order is stable accross repositories. (data from p1 prevails)
2695 # That order is stable accross repositories. (data from p1 prevails)
2520
2696
2521 $ hg status --copies --rev 'desc("i-2")' --rev 'desc("mPQm-0")'
2697 $ hg status --copies --rev 'desc("i-2")' --rev 'desc("mPQm-0")'
2522 A v
2698 A v
2523 t
2699 t
2524 R r
2700 R r
2525 R t
2701 R t
2526 $ hg status --copies --rev 'desc("i-2")' --rev 'desc("mQPm-0")'
2702 $ hg status --copies --rev 'desc("i-2")' --rev 'desc("mQPm-0")'
2527 A v
2703 A v
2528 t (filelog !)
2704 t (filelog !)
2529 r (no-filelog !)
2705 r (no-filelog !)
2530 R r
2706 R r
2531 R t
2707 R t
2532 $ hg status --copies --rev 'desc("i-0")' --rev 'desc("mPQm-0")'
2708 $ hg status --copies --rev 'desc("i-0")' --rev 'desc("mPQm-0")'
2533 A d
2709 A d
2534 a
2710 a
2535 A v
2711 A v
2536 r (filelog !)
2712 r (filelog !)
2537 p (no-filelog !)
2713 p (no-filelog !)
2538 R a
2714 R a
2539 R p
2715 R p
2540 R r
2716 R r
2541 $ hg status --copies --rev 'desc("i-0")' --rev 'desc("mQPm-0")'
2717 $ hg status --copies --rev 'desc("i-0")' --rev 'desc("mQPm-0")'
2542 A d
2718 A d
2543 a
2719 a
2544 A v
2720 A v
2545 r
2721 r
2546 R a
2722 R a
2547 R p
2723 R p
2548 R r
2724 R r
2549
2725
2550
2726
2551 Comparing with merging with a deletion (and keeping the file)
2727 Comparing with merging with a deletion (and keeping the file)
2552 -------------------------------------------------------------
2728 -------------------------------------------------------------
2553
2729
2554 Merge:
2730 Merge:
2555 - one removing a file (d)
2731 - one removing a file (d)
2556 - one updating that file
2732 - one updating that file
2557 - the merge keep the modified version of the file (canceling the delete)
2733 - the merge keep the modified version of the file (canceling the delete)
2558
2734
2559 In this case, the file keep on living after the merge. So we should not drop its
2735 In this case, the file keep on living after the merge. So we should not drop its
2560 copy tracing chain.
2736 copy tracing chain.
2561
2737
2562 $ hg log -G --rev '::(desc("mCGm")+desc("mGCm"))'
2738 $ hg log -G --rev '::(desc("mCGm")+desc("mGCm"))'
2563 o mGCm-0 merge updated/deleted - revive the file (updated content) - the other way
2739 o mGCm-0 merge updated/deleted - revive the file (updated content) - the other way
2564 |\
2740 |\
2565 +---o mCGm-0 merge updated/deleted - revive the file (updated content) - one way
2741 +---o mCGm-0 merge updated/deleted - revive the file (updated content) - one way
2566 | |/
2742 | |/
2567 | o g-1: update d
2743 | o g-1: update d
2568 | |
2744 | |
2569 o | c-1 delete d
2745 o | c-1 delete d
2570 |/
2746 |/
2571 o i-2: c -move-> d, s -move-> t
2747 o i-2: c -move-> d, s -move-> t
2572 |
2748 |
2573 o i-1: a -move-> c, p -move-> s
2749 o i-1: a -move-> c, p -move-> s
2574 |
2750 |
2575 o i-0 initial commit: a b h
2751 o i-0 initial commit: a b h
2576
2752
2577
2753
2578 'a' is the copy source of 'd'
2754 'a' is the copy source of 'd'
2579
2755
2580 $ hg status --copies --rev 'desc("i-0")' --rev 'desc("mCGm-0")'
2756 $ hg status --copies --rev 'desc("i-0")' --rev 'desc("mCGm-0")'
2581 A d
2757 A d
2582 a (no-compatibility no-changeset !)
2758 a (no-compatibility no-changeset !)
2583 A t
2759 A t
2584 p
2760 p
2585 R a
2761 R a
2586 R p
2762 R p
2587 $ hg status --copies --rev 'desc("i-0")' --rev 'desc("mGCm-0")'
2763 $ hg status --copies --rev 'desc("i-0")' --rev 'desc("mGCm-0")'
2588 A d
2764 A d
2589 a (no-compatibility no-changeset !)
2765 a (no-compatibility no-changeset !)
2590 A t
2766 A t
2591 p
2767 p
2592 R a
2768 R a
2593 R p
2769 R p
2594 $ hg status --copies --rev 'desc("c-1")' --rev 'desc("mCGm-0")'
2770 $ hg status --copies --rev 'desc("c-1")' --rev 'desc("mCGm-0")'
2595 A d
2771 A d
2596 $ hg status --copies --rev 'desc("c-1")' --rev 'desc("mGCm-0")'
2772 $ hg status --copies --rev 'desc("c-1")' --rev 'desc("mGCm-0")'
2597 A d
2773 A d
2598 $ hg status --copies --rev 'desc("g-1")' --rev 'desc("mCGm-0")'
2774 $ hg status --copies --rev 'desc("g-1")' --rev 'desc("mCGm-0")'
2599 $ hg status --copies --rev 'desc("g-1")' --rev 'desc("mGCm-0")'
2775 $ hg status --copies --rev 'desc("g-1")' --rev 'desc("mGCm-0")'
2600
2776
2601
2777
2602 Comparing with merge restoring an untouched deleted file
2778 Comparing with merge restoring an untouched deleted file
2603 --------------------------------------------------------
2779 --------------------------------------------------------
2604
2780
2605 Merge:
2781 Merge:
2606 - one removing a file (d)
2782 - one removing a file (d)
2607 - one leaving the file untouched
2783 - one leaving the file untouched
2608 - the merge actively restore the file to the same content.
2784 - the merge actively restore the file to the same content.
2609
2785
2610 In this case, the file keep on living after the merge. So we should not drop its
2786 In this case, the file keep on living after the merge. So we should not drop its
2611 copy tracing chain.
2787 copy tracing chain.
2612
2788
2613 $ hg log -G --rev '::(desc("mCB-revert-m")+desc("mBC-revert-m"))'
2789 $ hg log -G --rev '::(desc("mCB-revert-m")+desc("mBC-revert-m"))'
2614 o mBC-revert-m-0 merge explicitely revive deleted file - B side: unrelated change, C side: delete d (restored by merge) - the other way
2790 o mBC-revert-m-0 merge explicitely revive deleted file - B side: unrelated change, C side: delete d (restored by merge) - the other way
2615 |\
2791 |\
2616 +---o mCB-revert-m-0 merge explicitely revive deleted file - B side: unrelated change, C side: delete d (restored by merge) - one way
2792 +---o mCB-revert-m-0 merge explicitely revive deleted file - B side: unrelated change, C side: delete d (restored by merge) - one way
2617 | |/
2793 | |/
2618 | o c-1 delete d
2794 | o c-1 delete d
2619 | |
2795 | |
2620 o | b-1: b update
2796 o | b-1: b update
2621 |/
2797 |/
2622 o i-2: c -move-> d, s -move-> t
2798 o i-2: c -move-> d, s -move-> t
2623 |
2799 |
2624 o i-1: a -move-> c, p -move-> s
2800 o i-1: a -move-> c, p -move-> s
2625 |
2801 |
2626 o i-0 initial commit: a b h
2802 o i-0 initial commit: a b h
2627
2803
2628
2804
2629 'a' is the the copy source of 'd'
2805 'a' is the the copy source of 'd'
2630
2806
2631 $ hg status --copies --rev 'desc("i-0")' --rev 'desc("mCB-revert-m-0")'
2807 $ hg status --copies --rev 'desc("i-0")' --rev 'desc("mCB-revert-m-0")'
2632 M b
2808 M b
2633 A d
2809 A d
2634 a (no-compatibility no-changeset !)
2810 a (no-compatibility no-changeset !)
2635 A t
2811 A t
2636 p
2812 p
2637 R a
2813 R a
2638 R p
2814 R p
2639 $ hg status --copies --rev 'desc("i-0")' --rev 'desc("mBC-revert-m-0")'
2815 $ hg status --copies --rev 'desc("i-0")' --rev 'desc("mBC-revert-m-0")'
2640 M b
2816 M b
2641 A d
2817 A d
2642 a (no-compatibility no-changeset !)
2818 a (no-compatibility no-changeset !)
2643 A t
2819 A t
2644 p
2820 p
2645 R a
2821 R a
2646 R p
2822 R p
2647 $ hg status --copies --rev 'desc("c-1")' --rev 'desc("mCB-revert-m-0")'
2823 $ hg status --copies --rev 'desc("c-1")' --rev 'desc("mCB-revert-m-0")'
2648 M b
2824 M b
2649 A d
2825 A d
2650 $ hg status --copies --rev 'desc("c-1")' --rev 'desc("mBC-revert-m-0")'
2826 $ hg status --copies --rev 'desc("c-1")' --rev 'desc("mBC-revert-m-0")'
2651 M b
2827 M b
2652 A d
2828 A d
2653 $ hg status --copies --rev 'desc("b-1")' --rev 'desc("mCB-revert-m-0")'
2829 $ hg status --copies --rev 'desc("b-1")' --rev 'desc("mCB-revert-m-0")'
2654 $ hg status --copies --rev 'desc("b-1")' --rev 'desc("mBC-revert-m-0")'
2830 $ hg status --copies --rev 'desc("b-1")' --rev 'desc("mBC-revert-m-0")'
2655
2831
2656
2832
2657 Merging a branch where a rename was deleted with a branch where the same file was renamed
2833 Merging a branch where a rename was deleted with a branch where the same file was renamed
2658 ------------------------------------------------------------------------------------------
2834 ------------------------------------------------------------------------------------------
2659
2835
2660 Create a "conflicting" merge where `d` get removed on one branch before its
2836 Create a "conflicting" merge where `d` get removed on one branch before its
2661 rename information actually conflict with the other branch.
2837 rename information actually conflict with the other branch.
2662
2838
2663 (the copy information from the branch that was not deleted should win).
2839 (the copy information from the branch that was not deleted should win).
2664
2840
2665 $ hg log -G --rev '::(desc("mCH-delete-before-conflict-m")+desc("mHC-delete-before-conflict-m"))'
2841 $ hg log -G --rev '::(desc("mCH-delete-before-conflict-m")+desc("mHC-delete-before-conflict-m"))'
2666 o mHC-delete-before-conflict-m-0 simple merge - C side: d is the results of renames then deleted, H side: d is result of another rename (same content as the other branch) - the other way
2842 o mHC-delete-before-conflict-m-0 simple merge - C side: d is the results of renames then deleted, H side: d is result of another rename (same content as the other branch) - the other way
2667 |\
2843 |\
2668 +---o mCH-delete-before-conflict-m-0 simple merge - C side: d is the results of renames then deleted, H side: d is result of another rename (same content as the other branch) - one way
2844 +---o mCH-delete-before-conflict-m-0 simple merge - C side: d is the results of renames then deleted, H side: d is result of another rename (same content as the other branch) - one way
2669 | |/
2845 | |/
2670 | o h-1: b -(move)-> d
2846 | o h-1: b -(move)-> d
2671 | |
2847 | |
2672 o | c-1 delete d
2848 o | c-1 delete d
2673 | |
2849 | |
2674 o | i-2: c -move-> d, s -move-> t
2850 o | i-2: c -move-> d, s -move-> t
2675 | |
2851 | |
2676 o | i-1: a -move-> c, p -move-> s
2852 o | i-1: a -move-> c, p -move-> s
2677 |/
2853 |/
2678 o i-0 initial commit: a b h
2854 o i-0 initial commit: a b h
2679
2855
2680
2856
2681 $ hg status --copies --rev 'desc("i-0")' --rev 'desc("mCH-delete-before-conflict-m")'
2857 $ hg status --copies --rev 'desc("i-0")' --rev 'desc("mCH-delete-before-conflict-m")'
2682 A d
2858 A d
2683 b (no-compatibility no-changeset !)
2859 b (no-compatibility no-changeset !)
2684 A t
2860 A t
2685 p
2861 p
2686 R a
2862 R a
2687 R b
2863 R b
2688 R p
2864 R p
2689 $ hg status --copies --rev 'desc("i-0")' --rev 'desc("mHC-delete-before-conflict-m")'
2865 $ hg status --copies --rev 'desc("i-0")' --rev 'desc("mHC-delete-before-conflict-m")'
2690 A d
2866 A d
2691 b
2867 b
2692 A t
2868 A t
2693 p
2869 p
2694 R a
2870 R a
2695 R b
2871 R b
2696 R p
2872 R p
2697 $ hg status --copies --rev 'desc("c-1")' --rev 'desc("mCH-delete-before-conflict-m")'
2873 $ hg status --copies --rev 'desc("c-1")' --rev 'desc("mCH-delete-before-conflict-m")'
2698 A d
2874 A d
2699 b
2875 b
2700 R b
2876 R b
2701 $ hg status --copies --rev 'desc("c-1")' --rev 'desc("mHC-delete-before-conflict-m")'
2877 $ hg status --copies --rev 'desc("c-1")' --rev 'desc("mHC-delete-before-conflict-m")'
2702 A d
2878 A d
2703 b
2879 b
2704 R b
2880 R b
2705 $ hg status --copies --rev 'desc("h-1")' --rev 'desc("mCH-delete-before-conflict-m")'
2881 $ hg status --copies --rev 'desc("h-1")' --rev 'desc("mCH-delete-before-conflict-m")'
2706 A t
2882 A t
2707 p
2883 p
2708 R a
2884 R a
2709 R p
2885 R p
2710 $ hg status --copies --rev 'desc("h-1")' --rev 'desc("mHC-delete-before-conflict-m")'
2886 $ hg status --copies --rev 'desc("h-1")' --rev 'desc("mHC-delete-before-conflict-m")'
2711 A t
2887 A t
2712 p
2888 p
2713 R a
2889 R a
2714 R p
2890 R p
2715
2891
2716 Variant of previous with extra changes introduced by the merge
2892 Variant of previous with extra changes introduced by the merge
2717 --------------------------------------------------------------
2893 --------------------------------------------------------------
2718
2894
2719 (see case declaration for details)
2895 (see case declaration for details)
2720
2896
2721 Subcase: merge has same initial content on both side, but merge introduced a change
2897 Subcase: merge has same initial content on both side, but merge introduced a change
2722 ```````````````````````````````````````````````````````````````````````````````````
2898 ```````````````````````````````````````````````````````````````````````````````````
2723
2899
2724 - the "e-" branch renaming b to f (through 'g')
2900 - the "e-" branch renaming b to f (through 'g')
2725 - the "a-" branch renaming d to f (through e)
2901 - the "a-" branch renaming d to f (through e)
2726 - the merge add new change to b
2902 - the merge add new change to b
2727
2903
2728 $ hg log -G --rev '::(desc("mAE-change-m")+desc("mEA-change-m"))'
2904 $ hg log -G --rev '::(desc("mAE-change-m")+desc("mEA-change-m"))'
2729 o mEA-change-m-0 merge with file update and copies info on both side - A side: rename d to f, E side: b to f, (same content for f in parent) - the other way
2905 o mEA-change-m-0 merge with file update and copies info on both side - A side: rename d to f, E side: b to f, (same content for f in parent) - the other way
2730 |\
2906 |\
2731 +---o mAE-change-m-0 merge with file update and copies info on both side - A side: rename d to f, E side: b to f, (same content for f in parent) - one way
2907 +---o mAE-change-m-0 merge with file update and copies info on both side - A side: rename d to f, E side: b to f, (same content for f in parent) - one way
2732 | |/
2908 | |/
2733 | o e-2 g -move-> f
2909 | o e-2 g -move-> f
2734 | |
2910 | |
2735 | o e-1 b -move-> g
2911 | o e-1 b -move-> g
2736 | |
2912 | |
2737 o | a-2: e -move-> f
2913 o | a-2: e -move-> f
2738 | |
2914 | |
2739 o | a-1: d -move-> e
2915 o | a-1: d -move-> e
2740 |/
2916 |/
2741 o i-2: c -move-> d, s -move-> t
2917 o i-2: c -move-> d, s -move-> t
2742 |
2918 |
2743 o i-1: a -move-> c, p -move-> s
2919 o i-1: a -move-> c, p -move-> s
2744 |
2920 |
2745 o i-0 initial commit: a b h
2921 o i-0 initial commit: a b h
2746
2922
2747 #if no-changeset
2923 #if no-changeset
2748 $ hg manifest --debug --rev 'desc("mAE-change-m-0")' | grep '644 f'
2924 $ hg manifest --debug --rev 'desc("mAE-change-m-0")' | grep '644 f'
2749 2f649fba7eb284e720d02b61f0546fcef694c045 644 f
2925 2f649fba7eb284e720d02b61f0546fcef694c045 644 f
2750 $ hg manifest --debug --rev 'desc("mEA-change-m-0")' | grep '644 f'
2926 $ hg manifest --debug --rev 'desc("mEA-change-m-0")' | grep '644 f'
2751 774e7c1637d536b99e2d8ef16fd731f87a82bd09 644 f
2927 774e7c1637d536b99e2d8ef16fd731f87a82bd09 644 f
2752 $ hg manifest --debug --rev 'desc("a-2")' | grep '644 f'
2928 $ hg manifest --debug --rev 'desc("a-2")' | grep '644 f'
2753 b76eb76580df486c3d51d63c5c210d4dd43a8ac7 644 f
2929 b76eb76580df486c3d51d63c5c210d4dd43a8ac7 644 f
2754 $ hg manifest --debug --rev 'desc("e-2")' | grep '644 f'
2930 $ hg manifest --debug --rev 'desc("e-2")' | grep '644 f'
2755 e8825b386367b29fec957283a80bb47b47483fe1 644 f
2931 e8825b386367b29fec957283a80bb47b47483fe1 644 f
2756 $ hg debugindex f | ../no-linkrev
2932 $ hg debugindex f | ../no-linkrev
2757 rev linkrev nodeid p1 p2
2933 rev linkrev nodeid p1 p2
2758 0 * b76eb76580df 000000000000 000000000000
2934 0 * b76eb76580df 000000000000 000000000000
2759 1 * e8825b386367 000000000000 000000000000
2935 1 * e8825b386367 000000000000 000000000000
2760 2 * 2ff93c643948 b76eb76580df e8825b386367
2936 2 * 2ff93c643948 b76eb76580df e8825b386367
2761 3 * 2f649fba7eb2 b76eb76580df e8825b386367
2937 3 * 2f649fba7eb2 b76eb76580df e8825b386367
2762 4 * 774e7c1637d5 e8825b386367 b76eb76580df
2938 4 * 774e7c1637d5 e8825b386367 b76eb76580df
2763 #else
2939 #else
2764 $ hg manifest --debug --rev 'desc("mAE-change-m-0")' | grep '644 f'
2940 $ hg manifest --debug --rev 'desc("mAE-change-m-0")' | grep '644 f'
2765 d3613c1ec8310a812ac4268fd853ac576b6caea5 644 f
2941 d3613c1ec8310a812ac4268fd853ac576b6caea5 644 f
2766 $ hg manifest --debug --rev 'desc("mEA-change-m-0")' | grep '644 f'
2942 $ hg manifest --debug --rev 'desc("mEA-change-m-0")' | grep '644 f'
2767 05e03c868bbcab4a649cb33a238d7aa07398a469 644 f
2943 05e03c868bbcab4a649cb33a238d7aa07398a469 644 f
2768 $ hg manifest --debug --rev 'desc("a-2")' | grep '644 f'
2944 $ hg manifest --debug --rev 'desc("a-2")' | grep '644 f'
2769 ae258f702dfeca05bf9b6a22a97a4b5645570f11 644 f
2945 ae258f702dfeca05bf9b6a22a97a4b5645570f11 644 f
2770 $ hg manifest --debug --rev 'desc("e-2")' | grep '644 f'
2946 $ hg manifest --debug --rev 'desc("e-2")' | grep '644 f'
2771 ae258f702dfeca05bf9b6a22a97a4b5645570f11 644 f
2947 ae258f702dfeca05bf9b6a22a97a4b5645570f11 644 f
2772 $ hg debugindex f | ../no-linkrev
2948 $ hg debugindex f | ../no-linkrev
2773 rev linkrev nodeid p1 p2
2949 rev linkrev nodeid p1 p2
2774 0 * ae258f702dfe 000000000000 000000000000
2950 0 * ae258f702dfe 000000000000 000000000000
2775 1 * d3613c1ec831 ae258f702dfe 000000000000
2951 1 * d3613c1ec831 ae258f702dfe 000000000000
2776 2 * 05e03c868bbc ae258f702dfe 000000000000
2952 2 * 05e03c868bbc ae258f702dfe 000000000000
2777 #endif
2953 #endif
2778
2954
2779 # Here the filelog based implementation is not looking at the rename
2955 # Here the filelog based implementation is not looking at the rename
2780 # information (because the file exist on both side). However the changelog
2956 # information (because the file exist on both side). However the changelog
2781 # based on works fine. We have different output.
2957 # based on works fine. We have different output.
2782
2958
2783 $ hg status --copies --rev 'desc("a-2")' --rev 'desc("mAE-change-m-0")'
2959 $ hg status --copies --rev 'desc("a-2")' --rev 'desc("mAE-change-m-0")'
2784 M f
2960 M f
2785 b (no-filelog !)
2961 b (no-filelog !)
2786 R b
2962 R b
2787 $ hg status --copies --rev 'desc("a-2")' --rev 'desc("mEA-change-m-0")'
2963 $ hg status --copies --rev 'desc("a-2")' --rev 'desc("mEA-change-m-0")'
2788 M f
2964 M f
2789 b (no-filelog !)
2965 b (no-filelog !)
2790 R b
2966 R b
2791 $ hg status --copies --rev 'desc("e-2")' --rev 'desc("mAE-change-m-0")'
2967 $ hg status --copies --rev 'desc("e-2")' --rev 'desc("mAE-change-m-0")'
2792 M f
2968 M f
2793 d (no-filelog !)
2969 d (no-filelog !)
2794 R d
2970 R d
2795 $ hg status --copies --rev 'desc("e-2")' --rev 'desc("mEA-change-m-0")'
2971 $ hg status --copies --rev 'desc("e-2")' --rev 'desc("mEA-change-m-0")'
2796 M f
2972 M f
2797 d (no-filelog !)
2973 d (no-filelog !)
2798 R d
2974 R d
2799 $ hg status --copies --rev 'desc("i-2")' --rev 'desc("a-2")'
2975 $ hg status --copies --rev 'desc("i-2")' --rev 'desc("a-2")'
2800 A f
2976 A f
2801 d
2977 d
2802 R d
2978 R d
2803 $ hg status --copies --rev 'desc("i-2")' --rev 'desc("e-2")'
2979 $ hg status --copies --rev 'desc("i-2")' --rev 'desc("e-2")'
2804 A f
2980 A f
2805 b
2981 b
2806 R b
2982 R b
2807
2983
2808 # From here, we run status against revision where both source file exists.
2984 # From here, we run status against revision where both source file exists.
2809 #
2985 #
2810 # The filelog based implementation picks an arbitrary side based on revision
2986 # The filelog based implementation picks an arbitrary side based on revision
2811 # numbers. So the same side "wins" whatever the parents order is. This is
2987 # numbers. So the same side "wins" whatever the parents order is. This is
2812 # sub-optimal because depending on revision numbers means the result can be
2988 # sub-optimal because depending on revision numbers means the result can be
2813 # different from one repository to the next.
2989 # different from one repository to the next.
2814 #
2990 #
2815 # The changeset based algorithm use the parent order to break tie on conflicting
2991 # The changeset based algorithm use the parent order to break tie on conflicting
2816 # information and will have a different order depending on who is p1 and p2.
2992 # information and will have a different order depending on who is p1 and p2.
2817 # That order is stable accross repositories. (data from p1 prevails)
2993 # That order is stable accross repositories. (data from p1 prevails)
2818
2994
2819 $ hg status --copies --rev 'desc("i-2")' --rev 'desc("mAE-change-m-0")'
2995 $ hg status --copies --rev 'desc("i-2")' --rev 'desc("mAE-change-m-0")'
2820 A f
2996 A f
2821 d
2997 d
2822 R b
2998 R b
2823 R d
2999 R d
2824 $ hg status --copies --rev 'desc("i-2")' --rev 'desc("mEA-change-m-0")'
3000 $ hg status --copies --rev 'desc("i-2")' --rev 'desc("mEA-change-m-0")'
2825 A f
3001 A f
2826 d (filelog !)
3002 d (filelog !)
2827 b (no-filelog !)
3003 b (no-filelog !)
2828 R b
3004 R b
2829 R d
3005 R d
2830 $ hg status --copies --rev 'desc("i-0")' --rev 'desc("mAE-change-m-0")'
3006 $ hg status --copies --rev 'desc("i-0")' --rev 'desc("mAE-change-m-0")'
2831 A f
3007 A f
2832 a
3008 a
2833 A t
3009 A t
2834 p
3010 p
2835 R a
3011 R a
2836 R b
3012 R b
2837 R p
3013 R p
2838 $ hg status --copies --rev 'desc("i-0")' --rev 'desc("mEA-change-m-0")'
3014 $ hg status --copies --rev 'desc("i-0")' --rev 'desc("mEA-change-m-0")'
2839 A f
3015 A f
2840 a (filelog !)
3016 a (filelog !)
2841 b (no-filelog !)
3017 b (no-filelog !)
2842 A t
3018 A t
2843 p
3019 p
2844 R a
3020 R a
2845 R b
3021 R b
2846 R p
3022 R p
2847
3023
2848
3024
2849 Decision from previous merge are properly chained with later merge
3025 Decision from previous merge are properly chained with later merge
2850 ------------------------------------------------------------------
3026 ------------------------------------------------------------------
2851
3027
2852
3028
2853 Subcase: chaining conflicting rename resolution
3029 Subcase: chaining conflicting rename resolution
2854 ```````````````````````````````````````````````
3030 ```````````````````````````````````````````````
2855
3031
2856 The "mAEm" and "mEAm" case create a rename tracking conflict on file 'f'. We
3032 The "mAEm" and "mEAm" case create a rename tracking conflict on file 'f'. We
2857 add more change on the respective branch and merge again. These second merge
3033 add more change on the respective branch and merge again. These second merge
2858 does not involve the file 'f' and the arbitration done within "mAEm" and "mEA"
3034 does not involve the file 'f' and the arbitration done within "mAEm" and "mEA"
2859 about that file should stay unchanged.
3035 about that file should stay unchanged.
2860
3036
2861 The result from mAEm is the same for the subsequent merge:
3037 The result from mAEm is the same for the subsequent merge:
2862
3038
2863 $ hg status --copies --rev 'desc("i-0")' --rev 'desc("mAEm")' f
3039 $ hg status --copies --rev 'desc("i-0")' --rev 'desc("mAEm")' f
2864 A f
3040 A f
2865 a (filelog !)
3041 a (filelog !)
2866 a (sidedata !)
3042 a (sidedata !)
2867 a (upgraded !)
3043 a (upgraded !)
2868
3044
2869 $ hg status --copies --rev 'desc("i-0")' --rev 'desc("mAE,Km")' f
3045 $ hg status --copies --rev 'desc("i-0")' --rev 'desc("mAE,Km")' f
2870 A f
3046 A f
2871 a (filelog !)
3047 a (filelog !)
2872 a (sidedata !)
3048 a (sidedata !)
2873 a (upgraded !)
3049 a (upgraded !)
2874
3050
2875 $ hg status --copies --rev 'desc("i-0")' --rev 'desc("mK,AEm")' f
3051 $ hg status --copies --rev 'desc("i-0")' --rev 'desc("mK,AEm")' f
2876 A f
3052 A f
2877 a (filelog !)
3053 a (filelog !)
2878 a (missing-correct-output sidedata !)
3054 a (missing-correct-output sidedata !)
2879 a (missing-correct-output upgraded !)
3055 a (missing-correct-output upgraded !)
2880 b (known-bad-output sidedata !)
3056 b (known-bad-output sidedata !)
2881 b (known-bad-output upgraded !)
3057 b (known-bad-output upgraded !)
2882
3058
2883
3059
2884 The result from mEAm is the same for the subsequent merge:
3060 The result from mEAm is the same for the subsequent merge:
2885
3061
2886 $ hg status --copies --rev 'desc("i-0")' --rev 'desc("mEAm")' f
3062 $ hg status --copies --rev 'desc("i-0")' --rev 'desc("mEAm")' f
2887 A f
3063 A f
2888 a (filelog !)
3064 a (filelog !)
2889 b (sidedata !)
3065 b (sidedata !)
2890 b (upgraded !)
3066 b (upgraded !)
2891
3067
2892 $ hg status --copies --rev 'desc("i-0")' --rev 'desc("mEA,Jm")' f
3068 $ hg status --copies --rev 'desc("i-0")' --rev 'desc("mEA,Jm")' f
2893 A f
3069 A f
2894 a (filelog !)
3070 a (filelog !)
2895 b (sidedata !)
3071 b (sidedata !)
2896 b (upgraded !)
3072 b (upgraded !)
2897
3073
2898 $ hg status --copies --rev 'desc("i-0")' --rev 'desc("mJ,EAm")' f
3074 $ hg status --copies --rev 'desc("i-0")' --rev 'desc("mJ,EAm")' f
2899 A f
3075 A f
2900 a (filelog !)
3076 a (filelog !)
2901 b (missing-correct-output sidedata !)
3077 b (missing-correct-output sidedata !)
2902 b (missing-correct-output upgraded !)
3078 b (missing-correct-output upgraded !)
2903 a (known-bad-output sidedata !)
3079 a (known-bad-output sidedata !)
2904 a (known-bad-output upgraded !)
3080 a (known-bad-output upgraded !)
2905
3081
2906
3082
2907 Subcase: chaining salvage information during a merge
3083 Subcase: chaining salvage information during a merge
2908 ````````````````````````````````````````````````````
3084 ````````````````````````````````````````````````````
2909
3085
2910 We add more change on the branch were the file was deleted. merging again
3086 We add more change on the branch were the file was deleted. merging again
2911 should preserve the fact eh file was salvaged.
3087 should preserve the fact eh file was salvaged.
2912
3088
2913 reference output:
3089 reference output:
2914
3090
2915 $ hg status --copies --rev 'desc("i-0")' --rev 'desc("mCB-revert-m-0")'
3091 $ hg status --copies --rev 'desc("i-0")' --rev 'desc("mCB-revert-m-0")'
2916 M b
3092 M b
2917 A d
3093 A d
2918 a (filelog !)
3094 a (filelog !)
2919 a (sidedata !)
3095 a (sidedata !)
2920 a (upgraded !)
3096 a (upgraded !)
2921 A t
3097 A t
2922 p
3098 p
2923 R a
3099 R a
2924 R p
3100 R p
2925 $ hg status --copies --rev 'desc("i-0")' --rev 'desc("mBC-revert-m-0")'
3101 $ hg status --copies --rev 'desc("i-0")' --rev 'desc("mBC-revert-m-0")'
2926 M b
3102 M b
2927 A d
3103 A d
2928 a (filelog !)
3104 a (filelog !)
2929 a (sidedata !)
3105 a (sidedata !)
2930 a (upgraded !)
3106 a (upgraded !)
2931 A t
3107 A t
2932 p
3108 p
2933 R a
3109 R a
2934 R p
3110 R p
2935
3111
2936 chained output
3112 chained output
2937
3113
2938 $ hg status --copies --rev 'desc("i-0")' --rev 'desc("mBC+revert,Lm")'
3114 $ hg status --copies --rev 'desc("i-0")' --rev 'desc("mBC+revert,Lm")'
2939 M b
3115 M b
2940 A d
3116 A d
2941 a (filelog !)
3117 a (filelog !)
2942 a (missing-correct-output sidedata !)
3118 a (missing-correct-output sidedata !)
2943 a (missing-correct-output upgraded !)
3119 a (missing-correct-output upgraded !)
2944 A t
3120 A t
2945 p
3121 p
2946 A unrelated-l
3122 A unrelated-l
2947 R a
3123 R a
2948 R p
3124 R p
2949 $ hg status --copies --rev 'desc("i-0")' --rev 'desc("mCB+revert,Lm")'
3125 $ hg status --copies --rev 'desc("i-0")' --rev 'desc("mCB+revert,Lm")'
2950 M b
3126 M b
2951 A d
3127 A d
2952 a (filelog !)
3128 a (filelog !)
2953 a (missing-correct-output sidedata !)
3129 a (missing-correct-output sidedata !)
2954 a (missing-correct-output upgraded !)
3130 a (missing-correct-output upgraded !)
2955 A t
3131 A t
2956 p
3132 p
2957 A unrelated-l
3133 A unrelated-l
2958 R a
3134 R a
2959 R p
3135 R p
2960 $ hg status --copies --rev 'desc("i-0")' --rev 'desc("mL,BC+revertm")'
3136 $ hg status --copies --rev 'desc("i-0")' --rev 'desc("mL,BC+revertm")'
2961 M b
3137 M b
2962 A d
3138 A d
2963 a (filelog !)
3139 a (filelog !)
2964 a (missing-correct-output sidedata !)
3140 a (missing-correct-output sidedata !)
2965 a (missing-correct-output upgraded !)
3141 a (missing-correct-output upgraded !)
2966 A t
3142 A t
2967 p
3143 p
2968 A unrelated-l
3144 A unrelated-l
2969 R a
3145 R a
2970 R p
3146 R p
2971 $ hg status --copies --rev 'desc("i-0")' --rev 'desc("mL,CB+revertm")'
3147 $ hg status --copies --rev 'desc("i-0")' --rev 'desc("mL,CB+revertm")'
2972 M b
3148 M b
2973 A d
3149 A d
2974 a (filelog !)
3150 a (filelog !)
2975 a (missing-correct-output sidedata !)
3151 a (missing-correct-output sidedata !)
2976 a (missing-correct-output upgraded !)
3152 a (missing-correct-output upgraded !)
2977 A t
3153 A t
2978 p
3154 p
2979 A unrelated-l
3155 A unrelated-l
2980 R a
3156 R a
2981 R p
3157 R p
2982
3158
2983 Subcase: chaining "merged" information during a merge
3159 Subcase: chaining "merged" information during a merge
2984 ``````````````````````````````````````````````````````
3160 ``````````````````````````````````````````````````````
2985
3161
2986 When a non-rename change are merged with a copy overwrite, the merge pick the copy source from (p1) as the reference. We should preserve this information in subsequent merges.
3162 When a non-rename change are merged with a copy overwrite, the merge pick the copy source from (p1) as the reference. We should preserve this information in subsequent merges.
2987
3163
2988
3164
2989 reference output:
3165 reference output:
2990
3166
2991 (for details about the filelog pick, check the mFGm/mGFm case)
3167 (for details about the filelog pick, check the mFGm/mGFm case)
2992
3168
2993 $ hg status --copies --rev 'desc("i-0")' --rev 'desc("mFGm")' d
3169 $ hg status --copies --rev 'desc("i-0")' --rev 'desc("mFGm")' d
2994 A d
3170 A d
2995 a (filelog !)
3171 a (filelog !)
2996 h (sidedata !)
3172 h (sidedata !)
2997 h (upgraded !)
3173 h (upgraded !)
2998 $ hg status --copies --rev 'desc("i-0")' --rev 'desc("mGFm")' d
3174 $ hg status --copies --rev 'desc("i-0")' --rev 'desc("mGFm")' d
2999 A d
3175 A d
3000 a (filelog !)
3176 a (filelog !)
3001 a (sidedata !)
3177 a (sidedata !)
3002 a (upgraded !)
3178 a (upgraded !)
3003
3179
3004 Chained output
3180 Chained output
3005
3181
3006 $ hg status --copies --rev 'desc("i-0")' --rev 'desc("mO,FGm")' d
3182 $ hg status --copies --rev 'desc("i-0")' --rev 'desc("mO,FGm")' d
3007 A d
3183 A d
3008 a (filelog !)
3184 a (filelog !)
3009 h (sidedata !)
3185 h (sidedata !)
3010 h (upgraded !)
3186 h (upgraded !)
3011 $ hg status --copies --rev 'desc("i-0")' --rev 'desc("mFG,Om")' d
3187 $ hg status --copies --rev 'desc("i-0")' --rev 'desc("mFG,Om")' d
3012 A d
3188 A d
3013 a (filelog !)
3189 a (filelog !)
3014 h (sidedata !)
3190 h (sidedata !)
3015 h (upgraded !)
3191 h (upgraded !)
3016
3192
3017
3193
3018 $ hg status --copies --rev 'desc("i-0")' --rev 'desc("mGF,Nm")' d
3194 $ hg status --copies --rev 'desc("i-0")' --rev 'desc("mGF,Nm")' d
3019 A d
3195 A d
3020 a (filelog !)
3196 a (filelog !)
3021 a (missing-correct-output sidedata !)
3197 a (missing-correct-output sidedata !)
3022 a (missing-correct-output upgraded !)
3198 a (missing-correct-output upgraded !)
3023 h (known-bad-output sidedata !)
3199 h (known-bad-output sidedata !)
3024 h (known-bad-output upgraded !)
3200 h (known-bad-output upgraded !)
3025 $ hg status --copies --rev 'desc("i-0")' --rev 'desc("mN,GFm")' d
3201 $ hg status --copies --rev 'desc("i-0")' --rev 'desc("mN,GFm")' d
3026 A d
3202 A d
3027 a (filelog !)
3203 a (filelog !)
3028 a (missing-correct-output sidedata !)
3204 a (missing-correct-output sidedata !)
3029 a (missing-correct-output upgraded !)
3205 a (missing-correct-output upgraded !)
3030 h (known-bad-output sidedata !)
3206 h (known-bad-output sidedata !)
3031 h (known-bad-output upgraded !)
3207 h (known-bad-output upgraded !)
3032
3208
3033
3209
3034 Subcase: chaining conflicting rename resolution, with extra change during the merge
3210 Subcase: chaining conflicting rename resolution, with extra change during the merge
3035 ```````````````````````````````````````````````````````````````````````````````````
3211 ```````````````````````````````````````````````````````````````````````````````````
3036
3212
3037 The "mAEm" and "mEAm" case create a rename tracking conflict on file 'f'. We
3213 The "mAEm" and "mEAm" case create a rename tracking conflict on file 'f'. We
3038 add more change on the respective branch and merge again. These second merge
3214 add more change on the respective branch and merge again. These second merge
3039 does not involve the file 'f' and the arbitration done within "mAEm" and "mEA"
3215 does not involve the file 'f' and the arbitration done within "mAEm" and "mEA"
3040 about that file should stay unchanged.
3216 about that file should stay unchanged.
3041
3217
3042 The result from mAEm is the same for the subsequent merge:
3218 The result from mAEm is the same for the subsequent merge:
3043
3219
3044 $ hg status --copies --rev 'desc("i-0")' --rev 'desc("mAE-change-m")' f
3220 $ hg status --copies --rev 'desc("i-0")' --rev 'desc("mAE-change-m")' f
3045 A f
3221 A f
3046 a (filelog !)
3222 a (filelog !)
3047 a (sidedata !)
3223 a (sidedata !)
3048 a (upgraded !)
3224 a (upgraded !)
3049
3225
3050 $ hg status --copies --rev 'desc("i-0")' --rev 'desc("mAE-change,Km")' f
3226 $ hg status --copies --rev 'desc("i-0")' --rev 'desc("mAE-change,Km")' f
3051 A f
3227 A f
3052 a (filelog !)
3228 a (filelog !)
3053 a (sidedata !)
3229 a (sidedata !)
3054 a (upgraded !)
3230 a (upgraded !)
3055
3231
3056 $ hg status --copies --rev 'desc("i-0")' --rev 'desc("mK,AE-change-m")' f
3232 $ hg status --copies --rev 'desc("i-0")' --rev 'desc("mK,AE-change-m")' f
3057 A f
3233 A f
3058 a (filelog !)
3234 a (filelog !)
3059 a (missing-correct-output sidedata !)
3235 a (missing-correct-output sidedata !)
3060 a (missing-correct-output upgraded !)
3236 a (missing-correct-output upgraded !)
3061 b (known-bad-output sidedata !)
3237 b (known-bad-output sidedata !)
3062 b (known-bad-output upgraded !)
3238 b (known-bad-output upgraded !)
3063
3239
3064
3240
3065 The result from mEAm is the same for the subsequent merge:
3241 The result from mEAm is the same for the subsequent merge:
3066
3242
3067 $ hg status --copies --rev 'desc("i-0")' --rev 'desc("mEA-change-m")' f
3243 $ hg status --copies --rev 'desc("i-0")' --rev 'desc("mEA-change-m")' f
3068 A f
3244 A f
3069 a (filelog !)
3245 a (filelog !)
3070 b (sidedata !)
3246 b (sidedata !)
3071 b (upgraded !)
3247 b (upgraded !)
3072
3248
3073 $ hg status --copies --rev 'desc("i-0")' --rev 'desc("mEA-change,Jm")' f
3249 $ hg status --copies --rev 'desc("i-0")' --rev 'desc("mEA-change,Jm")' f
3074 A f
3250 A f
3075 a (filelog !)
3251 a (filelog !)
3076 b (sidedata !)
3252 b (sidedata !)
3077 b (upgraded !)
3253 b (upgraded !)
3078
3254
3079 $ hg status --copies --rev 'desc("i-0")' --rev 'desc("mJ,EA-change-m")' f
3255 $ hg status --copies --rev 'desc("i-0")' --rev 'desc("mJ,EA-change-m")' f
3080 A f
3256 A f
3081 a (filelog !)
3257 a (filelog !)
3082 b (missing-correct-output sidedata !)
3258 b (missing-correct-output sidedata !)
3083 b (missing-correct-output upgraded !)
3259 b (missing-correct-output upgraded !)
3084 a (known-bad-output sidedata !)
3260 a (known-bad-output sidedata !)
3085 a (known-bad-output upgraded !)
3261 a (known-bad-output upgraded !)
General Comments 0
You need to be logged in to leave comments. Login now