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