##// END OF EJS Templates
test-copies: add subcase titles for various "conflicting" information variant...
marmoute -
r47293:f01696d4 default
parent child Browse files
Show More
@@ -1,1783 +1,1803 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 >> $HGRCPATH
17 $ cat << EOF >> $HGRCPATH
18 > [diff]
18 > [diff]
19 > git=yes
19 > git=yes
20 > [command-templates]
20 > [command-templates]
21 > log={rev} {desc}\n
21 > log={rev} {desc}\n
22 > EOF
22 > EOF
23
23
24 #if compatibility
24 #if compatibility
25 $ cat >> $HGRCPATH << EOF
25 $ cat >> $HGRCPATH << EOF
26 > [experimental]
26 > [experimental]
27 > copies.read-from = compatibility
27 > copies.read-from = compatibility
28 > EOF
28 > EOF
29 #endif
29 #endif
30
30
31 #if changeset
31 #if changeset
32 $ cat >> $HGRCPATH << EOF
32 $ cat >> $HGRCPATH << EOF
33 > [experimental]
33 > [experimental]
34 > copies.read-from = changeset-only
34 > copies.read-from = changeset-only
35 > copies.write-to = changeset-only
35 > copies.write-to = changeset-only
36 > EOF
36 > EOF
37 #endif
37 #endif
38
38
39 #if sidedata
39 #if sidedata
40 $ cat >> $HGRCPATH << EOF
40 $ cat >> $HGRCPATH << EOF
41 > [format]
41 > [format]
42 > exp-use-side-data = yes
42 > exp-use-side-data = yes
43 > exp-use-copies-side-data-changeset = yes
43 > exp-use-copies-side-data-changeset = yes
44 > EOF
44 > EOF
45 #endif
45 #endif
46
46
47
47
48 $ cat > same-content.txt << EOF
48 $ cat > same-content.txt << EOF
49 > Here is some content that will be the same accros multiple file.
49 > Here is some content that will be the same accros multiple file.
50 >
50 >
51 > This is done on purpose so that we end up in some merge situation, were the
51 > This is done on purpose so that we end up in some merge situation, were the
52 > resulting content is the same as in the parent(s), but a new filenodes still
52 > resulting content is the same as in the parent(s), but a new filenodes still
53 > need to be created to record some file history information (especially
53 > need to be created to record some file history information (especially
54 > about copies).
54 > about copies).
55 > EOF
55 > EOF
56
56
57 $ hg init repo-chain
57 $ hg init repo-chain
58 $ cd repo-chain
58 $ cd repo-chain
59
59
60 Add some linear rename initialy
60 Add some linear rename initialy
61
61
62 $ cp ../same-content.txt a
62 $ cp ../same-content.txt a
63 $ cp ../same-content.txt b
63 $ cp ../same-content.txt b
64 $ cp ../same-content.txt h
64 $ cp ../same-content.txt h
65 $ hg ci -Am 'i-0 initial commit: a b h'
65 $ hg ci -Am 'i-0 initial commit: a b h'
66 adding a
66 adding a
67 adding b
67 adding b
68 adding h
68 adding h
69 $ hg mv a c
69 $ hg mv a c
70 $ hg ci -Am 'i-1: a -move-> c'
70 $ hg ci -Am 'i-1: a -move-> c'
71 $ hg mv c d
71 $ hg mv c d
72 $ hg ci -Am 'i-2: c -move-> d'
72 $ hg ci -Am 'i-2: c -move-> d'
73 $ hg log -G
73 $ hg log -G
74 @ 2 i-2: c -move-> d
74 @ 2 i-2: c -move-> d
75 |
75 |
76 o 1 i-1: a -move-> c
76 o 1 i-1: a -move-> c
77 |
77 |
78 o 0 i-0 initial commit: a b h
78 o 0 i-0 initial commit: a b h
79
79
80
80
81 And having another branch with renames on the other side
81 And having another branch with renames on the other side
82
82
83 $ hg mv d e
83 $ hg mv d e
84 $ hg ci -Am 'a-1: d -move-> e'
84 $ hg ci -Am 'a-1: d -move-> e'
85 $ hg mv e f
85 $ hg mv e f
86 $ hg ci -Am 'a-2: e -move-> f'
86 $ hg ci -Am 'a-2: e -move-> f'
87 $ hg log -G --rev '::.'
87 $ hg log -G --rev '::.'
88 @ 4 a-2: e -move-> f
88 @ 4 a-2: e -move-> f
89 |
89 |
90 o 3 a-1: d -move-> e
90 o 3 a-1: d -move-> e
91 |
91 |
92 o 2 i-2: c -move-> d
92 o 2 i-2: c -move-> d
93 |
93 |
94 o 1 i-1: a -move-> c
94 o 1 i-1: a -move-> c
95 |
95 |
96 o 0 i-0 initial commit: a b h
96 o 0 i-0 initial commit: a b h
97
97
98
98
99 Have a branching with nothing on one side
99 Have a branching with nothing on one side
100
100
101 $ hg up 'desc("i-2")'
101 $ hg up 'desc("i-2")'
102 1 files updated, 0 files merged, 1 files removed, 0 files unresolved
102 1 files updated, 0 files merged, 1 files removed, 0 files unresolved
103 $ echo foo > b
103 $ echo foo > b
104 $ hg ci -m 'b-1: b update'
104 $ hg ci -m 'b-1: b update'
105 created new head
105 created new head
106 $ hg log -G --rev '::.'
106 $ hg log -G --rev '::.'
107 @ 5 b-1: b update
107 @ 5 b-1: b update
108 |
108 |
109 o 2 i-2: c -move-> d
109 o 2 i-2: c -move-> d
110 |
110 |
111 o 1 i-1: a -move-> c
111 o 1 i-1: a -move-> c
112 |
112 |
113 o 0 i-0 initial commit: a b h
113 o 0 i-0 initial commit: a b h
114
114
115
115
116 Create a branch that delete a file previous renamed
116 Create a branch that delete a file previous renamed
117
117
118 $ hg up 'desc("i-2")'
118 $ hg up 'desc("i-2")'
119 1 files updated, 0 files merged, 0 files removed, 0 files unresolved
119 1 files updated, 0 files merged, 0 files removed, 0 files unresolved
120 $ hg rm d
120 $ hg rm d
121 $ hg ci -m 'c-1 delete d'
121 $ hg ci -m 'c-1 delete d'
122 created new head
122 created new head
123 $ hg log -G --rev '::.'
123 $ hg log -G --rev '::.'
124 @ 6 c-1 delete d
124 @ 6 c-1 delete d
125 |
125 |
126 o 2 i-2: c -move-> d
126 o 2 i-2: c -move-> d
127 |
127 |
128 o 1 i-1: a -move-> c
128 o 1 i-1: a -move-> c
129 |
129 |
130 o 0 i-0 initial commit: a b h
130 o 0 i-0 initial commit: a b h
131
131
132
132
133 Create a branch that delete a file previous renamed and recreate it
133 Create a branch that delete a file previous renamed and recreate it
134
134
135 $ hg up 'desc("i-2")'
135 $ hg up 'desc("i-2")'
136 1 files updated, 0 files merged, 0 files removed, 0 files unresolved
136 1 files updated, 0 files merged, 0 files removed, 0 files unresolved
137 $ hg rm d
137 $ hg rm d
138 $ hg ci -m 'd-1 delete d'
138 $ hg ci -m 'd-1 delete d'
139 created new head
139 created new head
140 $ echo bar > d
140 $ echo bar > d
141 $ hg add d
141 $ hg add d
142 $ hg ci -m 'd-2 re-add d'
142 $ hg ci -m 'd-2 re-add d'
143 $ hg log -G --rev '::.'
143 $ hg log -G --rev '::.'
144 @ 8 d-2 re-add d
144 @ 8 d-2 re-add d
145 |
145 |
146 o 7 d-1 delete d
146 o 7 d-1 delete d
147 |
147 |
148 o 2 i-2: c -move-> d
148 o 2 i-2: c -move-> d
149 |
149 |
150 o 1 i-1: a -move-> c
150 o 1 i-1: a -move-> c
151 |
151 |
152 o 0 i-0 initial commit: a b h
152 o 0 i-0 initial commit: a b h
153
153
154
154
155 Having another branch renaming a different file to the same filename as another
155 Having another branch renaming a different file to the same filename as another
156
156
157 $ hg up 'desc("i-2")'
157 $ hg up 'desc("i-2")'
158 1 files updated, 0 files merged, 0 files removed, 0 files unresolved
158 1 files updated, 0 files merged, 0 files removed, 0 files unresolved
159 $ hg mv b g
159 $ hg mv b g
160 $ hg ci -m 'e-1 b -move-> g'
160 $ hg ci -m 'e-1 b -move-> g'
161 created new head
161 created new head
162 $ hg mv g f
162 $ hg mv g f
163 $ hg ci -m 'e-2 g -move-> f'
163 $ hg ci -m 'e-2 g -move-> f'
164 $ hg log -G --rev '::.'
164 $ hg log -G --rev '::.'
165 @ 10 e-2 g -move-> f
165 @ 10 e-2 g -move-> f
166 |
166 |
167 o 9 e-1 b -move-> g
167 o 9 e-1 b -move-> g
168 |
168 |
169 o 2 i-2: c -move-> d
169 o 2 i-2: c -move-> d
170 |
170 |
171 o 1 i-1: a -move-> c
171 o 1 i-1: a -move-> c
172 |
172 |
173 o 0 i-0 initial commit: a b h
173 o 0 i-0 initial commit: a b h
174
174
175
175
176 Setup all merge
176 Setup all merge
177 ===============
177 ===============
178
178
179 This is done beforehand to validate that the upgrade process creates valid copy
179 This is done beforehand to validate that the upgrade process creates valid copy
180 information.
180 information.
181
181
182 merging with unrelated change does not interfere with the renames
182 merging with unrelated change does not interfere with the renames
183 ---------------------------------------------------------------
183 ---------------------------------------------------------------
184
184
185 - rename on one side
185 - rename on one side
186 - unrelated change on the other side
186 - unrelated change on the other side
187
187
188 $ case_desc="simple merge - A side: multiple renames, B side: unrelated update"
188 $ case_desc="simple merge - A side: multiple renames, B side: unrelated update"
189
189
190 $ hg up 'desc("b-1")'
190 $ hg up 'desc("b-1")'
191 1 files updated, 0 files merged, 1 files removed, 0 files unresolved
191 1 files updated, 0 files merged, 1 files removed, 0 files unresolved
192 $ hg merge 'desc("a-2")'
192 $ hg merge 'desc("a-2")'
193 1 files updated, 0 files merged, 1 files removed, 0 files unresolved
193 1 files updated, 0 files merged, 1 files removed, 0 files unresolved
194 (branch merge, don't forget to commit)
194 (branch merge, don't forget to commit)
195 $ hg ci -m "mBAm-0 $case_desc - one way"
195 $ hg ci -m "mBAm-0 $case_desc - one way"
196 $ hg up 'desc("a-2")'
196 $ hg up 'desc("a-2")'
197 1 files updated, 0 files merged, 0 files removed, 0 files unresolved
197 1 files updated, 0 files merged, 0 files removed, 0 files unresolved
198 $ hg merge 'desc("b-1")'
198 $ hg merge 'desc("b-1")'
199 1 files updated, 0 files merged, 0 files removed, 0 files unresolved
199 1 files updated, 0 files merged, 0 files removed, 0 files unresolved
200 (branch merge, don't forget to commit)
200 (branch merge, don't forget to commit)
201 $ hg ci -m "mABm-0 $case_desc - the other way"
201 $ hg ci -m "mABm-0 $case_desc - the other way"
202 created new head
202 created new head
203 $ hg log -G --rev '::(desc("mABm")+desc("mBAm"))'
203 $ hg log -G --rev '::(desc("mABm")+desc("mBAm"))'
204 @ 12 mABm-0 simple merge - A side: multiple renames, B side: unrelated update - the other way
204 @ 12 mABm-0 simple merge - A side: multiple renames, B side: unrelated update - the other way
205 |\
205 |\
206 +---o 11 mBAm-0 simple merge - A side: multiple renames, B side: unrelated update - one way
206 +---o 11 mBAm-0 simple merge - A side: multiple renames, B side: unrelated update - one way
207 | |/
207 | |/
208 | o 5 b-1: b update
208 | o 5 b-1: b update
209 | |
209 | |
210 o | 4 a-2: e -move-> f
210 o | 4 a-2: e -move-> f
211 | |
211 | |
212 o | 3 a-1: d -move-> e
212 o | 3 a-1: d -move-> e
213 |/
213 |/
214 o 2 i-2: c -move-> d
214 o 2 i-2: c -move-> d
215 |
215 |
216 o 1 i-1: a -move-> c
216 o 1 i-1: a -move-> c
217 |
217 |
218 o 0 i-0 initial commit: a b h
218 o 0 i-0 initial commit: a b h
219
219
220
220
221
221
222 merging with the side having a delete
222 merging with the side having a delete
223 -------------------------------------
223 -------------------------------------
224
224
225 case summary:
225 case summary:
226 - one with change to an unrelated file
226 - one with change to an unrelated file
227 - one deleting the change
227 - one deleting the change
228 and recreate an unrelated file after the merge
228 and recreate an unrelated file after the merge
229
229
230 $ case_desc="simple merge - C side: delete a file with copies history , B side: unrelated update"
230 $ case_desc="simple merge - C side: delete a file with copies history , B side: unrelated update"
231
231
232 $ hg up 'desc("b-1")'
232 $ hg up 'desc("b-1")'
233 1 files updated, 0 files merged, 1 files removed, 0 files unresolved
233 1 files updated, 0 files merged, 1 files removed, 0 files unresolved
234 $ hg merge 'desc("c-1")'
234 $ hg merge 'desc("c-1")'
235 0 files updated, 0 files merged, 1 files removed, 0 files unresolved
235 0 files updated, 0 files merged, 1 files removed, 0 files unresolved
236 (branch merge, don't forget to commit)
236 (branch merge, don't forget to commit)
237 $ hg ci -m "mBCm-0 $case_desc - one way"
237 $ hg ci -m "mBCm-0 $case_desc - one way"
238 $ echo bar > d
238 $ echo bar > d
239 $ hg add d
239 $ hg add d
240 $ hg ci -m 'mBCm-1 re-add d'
240 $ hg ci -m 'mBCm-1 re-add d'
241 $ hg up 'desc("c-1")'
241 $ hg up 'desc("c-1")'
242 1 files updated, 0 files merged, 1 files removed, 0 files unresolved
242 1 files updated, 0 files merged, 1 files removed, 0 files unresolved
243 $ hg merge 'desc("b-1")'
243 $ hg merge 'desc("b-1")'
244 1 files updated, 0 files merged, 0 files removed, 0 files unresolved
244 1 files updated, 0 files merged, 0 files removed, 0 files unresolved
245 (branch merge, don't forget to commit)
245 (branch merge, don't forget to commit)
246 $ hg ci -m "mCBm-0 $case_desc - the other way"
246 $ hg ci -m "mCBm-0 $case_desc - the other way"
247 created new head
247 created new head
248 $ echo bar > d
248 $ echo bar > d
249 $ hg add d
249 $ hg add d
250 $ hg ci -m 'mCBm-1 re-add d'
250 $ hg ci -m 'mCBm-1 re-add d'
251 $ hg log -G --rev '::(desc("mCBm")+desc("mBCm"))'
251 $ hg log -G --rev '::(desc("mCBm")+desc("mBCm"))'
252 @ 16 mCBm-1 re-add d
252 @ 16 mCBm-1 re-add d
253 |
253 |
254 o 15 mCBm-0 simple merge - C side: delete a file with copies history , B side: unrelated update - the other way
254 o 15 mCBm-0 simple merge - C side: delete a file with copies history , B side: unrelated update - the other way
255 |\
255 |\
256 | | o 14 mBCm-1 re-add d
256 | | o 14 mBCm-1 re-add d
257 | | |
257 | | |
258 +---o 13 mBCm-0 simple merge - C side: delete a file with copies history , B side: unrelated update - one way
258 +---o 13 mBCm-0 simple merge - C side: delete a file with copies history , B side: unrelated update - one way
259 | |/
259 | |/
260 | o 6 c-1 delete d
260 | o 6 c-1 delete d
261 | |
261 | |
262 o | 5 b-1: b update
262 o | 5 b-1: b update
263 |/
263 |/
264 o 2 i-2: c -move-> d
264 o 2 i-2: c -move-> d
265 |
265 |
266 o 1 i-1: a -move-> c
266 o 1 i-1: a -move-> c
267 |
267 |
268 o 0 i-0 initial commit: a b h
268 o 0 i-0 initial commit: a b h
269
269
270
270
271 Comparing with a merge re-adding the file afterward
271 Comparing with a merge re-adding the file afterward
272 ---------------------------------------------------
272 ---------------------------------------------------
273
273
274 Merge:
274 Merge:
275 - one with change to an unrelated file
275 - one with change to an unrelated file
276 - one deleting and recreating the change
276 - one deleting and recreating the change
277
277
278 $ case_desc="simple merge - B side: unrelated update, D side: delete and recreate a file (with different content)"
278 $ case_desc="simple merge - B side: unrelated update, D side: delete and recreate a file (with different content)"
279
279
280 $ hg up 'desc("b-1")'
280 $ hg up 'desc("b-1")'
281 1 files updated, 0 files merged, 0 files removed, 0 files unresolved
281 1 files updated, 0 files merged, 0 files removed, 0 files unresolved
282 $ hg merge 'desc("d-2")'
282 $ hg merge 'desc("d-2")'
283 1 files updated, 0 files merged, 0 files removed, 0 files unresolved
283 1 files updated, 0 files merged, 0 files removed, 0 files unresolved
284 (branch merge, don't forget to commit)
284 (branch merge, don't forget to commit)
285 $ hg ci -m "mBDm-0 $case_desc - one way"
285 $ hg ci -m "mBDm-0 $case_desc - one way"
286 $ hg up 'desc("d-2")'
286 $ hg up 'desc("d-2")'
287 1 files updated, 0 files merged, 0 files removed, 0 files unresolved
287 1 files updated, 0 files merged, 0 files removed, 0 files unresolved
288 $ hg merge 'desc("b-1")'
288 $ hg merge 'desc("b-1")'
289 1 files updated, 0 files merged, 0 files removed, 0 files unresolved
289 1 files updated, 0 files merged, 0 files removed, 0 files unresolved
290 (branch merge, don't forget to commit)
290 (branch merge, don't forget to commit)
291 $ hg ci -m "mDBm-0 $case_desc - the other way"
291 $ hg ci -m "mDBm-0 $case_desc - the other way"
292 created new head
292 created new head
293 $ hg log -G --rev '::(desc("mDBm")+desc("mBDm"))'
293 $ hg log -G --rev '::(desc("mDBm")+desc("mBDm"))'
294 @ 18 mDBm-0 simple merge - B side: unrelated update, D side: delete and recreate a file (with different content) - the other way
294 @ 18 mDBm-0 simple merge - B side: unrelated update, D side: delete and recreate a file (with different content) - the other way
295 |\
295 |\
296 +---o 17 mBDm-0 simple merge - B side: unrelated update, D side: delete and recreate a file (with different content) - one way
296 +---o 17 mBDm-0 simple merge - B side: unrelated update, D side: delete and recreate a file (with different content) - one way
297 | |/
297 | |/
298 | o 8 d-2 re-add d
298 | o 8 d-2 re-add d
299 | |
299 | |
300 | o 7 d-1 delete d
300 | o 7 d-1 delete d
301 | |
301 | |
302 o | 5 b-1: b update
302 o | 5 b-1: b update
303 |/
303 |/
304 o 2 i-2: c -move-> d
304 o 2 i-2: c -move-> d
305 |
305 |
306 o 1 i-1: a -move-> c
306 o 1 i-1: a -move-> c
307 |
307 |
308 o 0 i-0 initial commit: a b h
308 o 0 i-0 initial commit: a b h
309
309
310
310
311
311
312 Comparing with a merge with colliding rename
312 Comparing with a merge with colliding rename
313 --------------------------------------------
313 --------------------------------------------
314
314
315 Subcase: new copy information on both side
316 ``````````````````````````````````````````
317
315 - the "e-" branch renaming b to f (through 'g')
318 - the "e-" branch renaming b to f (through 'g')
316 - the "a-" branch renaming d to f (through e)
319 - the "a-" branch renaming d to f (through e)
317
320
318 $ case_desc="merge with copies info on both side - A side: rename d to f, E side: b to f, (same content for f)"
321 $ case_desc="merge with copies info on both side - A side: rename d to f, E side: b to f, (same content for f)"
319
322
320 $ hg up 'desc("a-2")'
323 $ hg up 'desc("a-2")'
321 2 files updated, 0 files merged, 1 files removed, 0 files unresolved
324 2 files updated, 0 files merged, 1 files removed, 0 files unresolved
322 $ hg merge 'desc("e-2")'
325 $ hg merge 'desc("e-2")'
323 1 files updated, 0 files merged, 1 files removed, 0 files unresolved (no-changeset !)
326 1 files updated, 0 files merged, 1 files removed, 0 files unresolved (no-changeset !)
324 0 files updated, 0 files merged, 1 files removed, 0 files unresolved (changeset !)
327 0 files updated, 0 files merged, 1 files removed, 0 files unresolved (changeset !)
325 (branch merge, don't forget to commit)
328 (branch merge, don't forget to commit)
326 $ hg ci -m "mAEm-0 $case_desc - one way"
329 $ hg ci -m "mAEm-0 $case_desc - one way"
327 $ hg up 'desc("e-2")'
330 $ hg up 'desc("e-2")'
328 2 files updated, 0 files merged, 0 files removed, 0 files unresolved (no-changeset !)
331 2 files updated, 0 files merged, 0 files removed, 0 files unresolved (no-changeset !)
329 1 files updated, 0 files merged, 0 files removed, 0 files unresolved (changeset !)
332 1 files updated, 0 files merged, 0 files removed, 0 files unresolved (changeset !)
330 $ hg merge 'desc("a-2")'
333 $ hg merge 'desc("a-2")'
331 1 files updated, 0 files merged, 1 files removed, 0 files unresolved (no-changeset !)
334 1 files updated, 0 files merged, 1 files removed, 0 files unresolved (no-changeset !)
332 0 files updated, 0 files merged, 1 files removed, 0 files unresolved (changeset !)
335 0 files updated, 0 files merged, 1 files removed, 0 files unresolved (changeset !)
333 (branch merge, don't forget to commit)
336 (branch merge, don't forget to commit)
334 $ hg ci -m "mEAm-0 $case_desc - the other way"
337 $ hg ci -m "mEAm-0 $case_desc - the other way"
335 created new head
338 created new head
336 $ hg log -G --rev '::(desc("mAEm")+desc("mEAm"))'
339 $ hg log -G --rev '::(desc("mAEm")+desc("mEAm"))'
337 @ 20 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
340 @ 20 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
338 |\
341 |\
339 +---o 19 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
342 +---o 19 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
340 | |/
343 | |/
341 | o 10 e-2 g -move-> f
344 | o 10 e-2 g -move-> f
342 | |
345 | |
343 | o 9 e-1 b -move-> g
346 | o 9 e-1 b -move-> g
344 | |
347 | |
345 o | 4 a-2: e -move-> f
348 o | 4 a-2: e -move-> f
346 | |
349 | |
347 o | 3 a-1: d -move-> e
350 o | 3 a-1: d -move-> e
348 |/
351 |/
349 o 2 i-2: c -move-> d
352 o 2 i-2: c -move-> d
350 |
353 |
351 o 1 i-1: a -move-> c
354 o 1 i-1: a -move-> c
352 |
355 |
353 o 0 i-0 initial commit: a b h
356 o 0 i-0 initial commit: a b h
354
357
355
358
359 Subcase: existing copy information overwritten on one branch
360 ````````````````````````````````````````````````````````````
356
361
357 Merge:
362 Merge:
358 - one with change to an unrelated file (b)
363 - one with change to an unrelated file (b)
359 - one overwriting a file (d) with a rename (from h to i to d)
364 - one overwriting a file (d) with a rename (from h to i to d)
360
365
361 $ case_desc="simple merge - B side: unrelated change, F side: overwrite d with a copy (from h->i->d)"
366 $ case_desc="simple merge - B side: unrelated change, F side: overwrite d with a copy (from h->i->d)"
362
367
363 $ hg up 'desc("i-2")'
368 $ hg up 'desc("i-2")'
364 2 files updated, 0 files merged, 1 files removed, 0 files unresolved
369 2 files updated, 0 files merged, 1 files removed, 0 files unresolved
365 $ hg mv h i
370 $ hg mv h i
366 $ hg commit -m "f-1: rename h -> i"
371 $ hg commit -m "f-1: rename h -> i"
367 created new head
372 created new head
368 $ hg mv --force i d
373 $ hg mv --force i d
369 $ hg commit -m "f-2: rename i -> d"
374 $ hg commit -m "f-2: rename i -> d"
370 $ hg debugindex d
375 $ hg debugindex d
371 rev linkrev nodeid p1 p2
376 rev linkrev nodeid p1 p2
372 0 2 d8252ab2e760 000000000000 000000000000 (no-changeset !)
377 0 2 d8252ab2e760 000000000000 000000000000 (no-changeset !)
373 0 2 ae258f702dfe 000000000000 000000000000 (changeset !)
378 0 2 ae258f702dfe 000000000000 000000000000 (changeset !)
374 1 8 b004912a8510 000000000000 000000000000
379 1 8 b004912a8510 000000000000 000000000000
375 2 22 7b79e2fe0c89 000000000000 000000000000 (no-changeset !)
380 2 22 7b79e2fe0c89 000000000000 000000000000 (no-changeset !)
376 $ hg up 'desc("b-1")'
381 $ hg up 'desc("b-1")'
377 3 files updated, 0 files merged, 0 files removed, 0 files unresolved (no-changeset !)
382 3 files updated, 0 files merged, 0 files removed, 0 files unresolved (no-changeset !)
378 2 files updated, 0 files merged, 0 files removed, 0 files unresolved (changeset !)
383 2 files updated, 0 files merged, 0 files removed, 0 files unresolved (changeset !)
379 $ hg merge 'desc("f-2")'
384 $ hg merge 'desc("f-2")'
380 1 files updated, 0 files merged, 1 files removed, 0 files unresolved (no-changeset !)
385 1 files updated, 0 files merged, 1 files removed, 0 files unresolved (no-changeset !)
381 0 files updated, 0 files merged, 1 files removed, 0 files unresolved (changeset !)
386 0 files updated, 0 files merged, 1 files removed, 0 files unresolved (changeset !)
382 (branch merge, don't forget to commit)
387 (branch merge, don't forget to commit)
383 $ hg ci -m "mBFm-0 $case_desc - one way"
388 $ hg ci -m "mBFm-0 $case_desc - one way"
384 $ hg up 'desc("f-2")'
389 $ hg up 'desc("f-2")'
385 1 files updated, 0 files merged, 0 files removed, 0 files unresolved
390 1 files updated, 0 files merged, 0 files removed, 0 files unresolved
386 $ hg merge 'desc("b-1")'
391 $ hg merge 'desc("b-1")'
387 1 files updated, 0 files merged, 0 files removed, 0 files unresolved
392 1 files updated, 0 files merged, 0 files removed, 0 files unresolved
388 (branch merge, don't forget to commit)
393 (branch merge, don't forget to commit)
389 $ hg ci -m "mFBm-0 $case_desc - the other way"
394 $ hg ci -m "mFBm-0 $case_desc - the other way"
390 created new head
395 created new head
391 $ hg log -G --rev '::(desc("mBFm")+desc("mFBm"))'
396 $ hg log -G --rev '::(desc("mBFm")+desc("mFBm"))'
392 @ 24 mFBm-0 simple merge - B side: unrelated change, F side: overwrite d with a copy (from h->i->d) - the other way
397 @ 24 mFBm-0 simple merge - B side: unrelated change, F side: overwrite d with a copy (from h->i->d) - the other way
393 |\
398 |\
394 +---o 23 mBFm-0 simple merge - B side: unrelated change, F side: overwrite d with a copy (from h->i->d) - one way
399 +---o 23 mBFm-0 simple merge - B side: unrelated change, F side: overwrite d with a copy (from h->i->d) - one way
395 | |/
400 | |/
396 | o 22 f-2: rename i -> d
401 | o 22 f-2: rename i -> d
397 | |
402 | |
398 | o 21 f-1: rename h -> i
403 | o 21 f-1: rename h -> i
399 | |
404 | |
400 o | 5 b-1: b update
405 o | 5 b-1: b update
401 |/
406 |/
402 o 2 i-2: c -move-> d
407 o 2 i-2: c -move-> d
403 |
408 |
404 o 1 i-1: a -move-> c
409 o 1 i-1: a -move-> c
405 |
410 |
406 o 0 i-0 initial commit: a b h
411 o 0 i-0 initial commit: a b h
407
412
408
413
409
414
415 Subcase: reset of the copy history on one side
416 ``````````````````````````````````````````````
417
410 Merge:
418 Merge:
411 - one with change to a file
419 - one with change to a file
412 - one deleting and recreating the file
420 - one deleting and recreating the file
413
421
414 Unlike in the 'BD/DB' cases, an actual merge happened here. So we should
422 Unlike in the 'BD/DB' cases, an actual merge happened here. So we should
415 consider history and rename on both branch of the merge.
423 consider history and rename on both branch of the merge.
416
424
417 $ case_desc="actual content merge, copies on one side - D side: delete and re-add (different content), G side: update content"
425 $ case_desc="actual content merge, copies on one side - D side: delete and re-add (different content), G side: update content"
418
426
419 $ hg up 'desc("i-2")'
427 $ hg up 'desc("i-2")'
420 3 files updated, 0 files merged, 0 files removed, 0 files unresolved (no-changeset !)
428 3 files updated, 0 files merged, 0 files removed, 0 files unresolved (no-changeset !)
421 2 files updated, 0 files merged, 0 files removed, 0 files unresolved (changeset !)
429 2 files updated, 0 files merged, 0 files removed, 0 files unresolved (changeset !)
422 $ echo "some update" >> d
430 $ echo "some update" >> d
423 $ hg commit -m "g-1: update d"
431 $ hg commit -m "g-1: update d"
424 created new head
432 created new head
425 $ hg up 'desc("d-2")'
433 $ hg up 'desc("d-2")'
426 1 files updated, 0 files merged, 0 files removed, 0 files unresolved
434 1 files updated, 0 files merged, 0 files removed, 0 files unresolved
427 $ hg merge 'desc("g-1")' --tool :union
435 $ hg merge 'desc("g-1")' --tool :union
428 merging d
436 merging d
429 1 files updated, 0 files merged, 0 files removed, 0 files unresolved
437 1 files updated, 0 files merged, 0 files removed, 0 files unresolved
430 (branch merge, don't forget to commit)
438 (branch merge, don't forget to commit)
431 $ hg ci -m "mDGm-0 $case_desc - one way"
439 $ hg ci -m "mDGm-0 $case_desc - one way"
432 $ hg up 'desc("g-1")'
440 $ hg up 'desc("g-1")'
433 1 files updated, 0 files merged, 0 files removed, 0 files unresolved
441 1 files updated, 0 files merged, 0 files removed, 0 files unresolved
434 $ hg merge 'desc("d-2")' --tool :union
442 $ hg merge 'desc("d-2")' --tool :union
435 merging d
443 merging d
436 1 files updated, 0 files merged, 0 files removed, 0 files unresolved
444 1 files updated, 0 files merged, 0 files removed, 0 files unresolved
437 (branch merge, don't forget to commit)
445 (branch merge, don't forget to commit)
438 $ hg ci -m "mGDm-0 $case_desc - the other way"
446 $ hg ci -m "mGDm-0 $case_desc - the other way"
439 created new head
447 created new head
440 $ hg log -G --rev '::(desc("mDGm")+desc("mGDm"))'
448 $ hg log -G --rev '::(desc("mDGm")+desc("mGDm"))'
441 @ 27 mGDm-0 actual content merge, copies on one side - D side: delete and re-add (different content), G side: update content - the other way
449 @ 27 mGDm-0 actual content merge, copies on one side - D side: delete and re-add (different content), G side: update content - the other way
442 |\
450 |\
443 +---o 26 mDGm-0 actual content merge, copies on one side - D side: delete and re-add (different content), G side: update content - one way
451 +---o 26 mDGm-0 actual content merge, copies on one side - D side: delete and re-add (different content), G side: update content - one way
444 | |/
452 | |/
445 | o 25 g-1: update d
453 | o 25 g-1: update d
446 | |
454 | |
447 o | 8 d-2 re-add d
455 o | 8 d-2 re-add d
448 | |
456 | |
449 o | 7 d-1 delete d
457 o | 7 d-1 delete d
450 |/
458 |/
451 o 2 i-2: c -move-> d
459 o 2 i-2: c -move-> d
452 |
460 |
453 o 1 i-1: a -move-> c
461 o 1 i-1: a -move-> c
454 |
462 |
455 o 0 i-0 initial commit: a b h
463 o 0 i-0 initial commit: a b h
456
464
457
465
466 Subcase: merging a change to a file with a "copy overwrite" to that file from another branch
467 ````````````````````````````````````````````````````````````````````````````````````````````
458
468
459 Merge:
469 Merge:
460 - one with change to a file (d)
470 - one with change to a file (d)
461 - one overwriting that file with a rename (from h to i, to d)
471 - one overwriting that file with a rename (from h to i, to d)
462
472
463 This case is similar to BF/FB, but an actual merge happens, so both side of the
473 This case is similar to BF/FB, but an actual merge happens, so both side of the
464 history are relevant.
474 history are relevant.
465
475
466 Note:
476 Note:
467 | In this case, the merge get conflicting information since on one side we have
477 | In this case, the merge get conflicting information since on one side we have
468 | "a -> c -> d". and one the other one we have "h -> i -> d".
478 | "a -> c -> d". and one the other one we have "h -> i -> d".
469 |
479 |
470 | The current code arbitrarily pick one side
480 | The current code arbitrarily pick one side
471
481
472 $ case_desc="merge - G side: content change, F side: copy overwrite, no content change"
482 $ case_desc="merge - G side: content change, F side: copy overwrite, no content change"
473
483
474 $ hg up 'desc("f-2")'
484 $ hg up 'desc("f-2")'
475 1 files updated, 0 files merged, 1 files removed, 0 files unresolved
485 1 files updated, 0 files merged, 1 files removed, 0 files unresolved
476 $ hg merge 'desc("g-1")' --tool :union
486 $ hg merge 'desc("g-1")' --tool :union
477 merging d (no-changeset !)
487 merging d (no-changeset !)
478 0 files updated, 1 files merged, 0 files removed, 0 files unresolved (no-changeset !)
488 0 files updated, 1 files merged, 0 files removed, 0 files unresolved (no-changeset !)
479 1 files updated, 0 files merged, 0 files removed, 0 files unresolved (changeset !)
489 1 files updated, 0 files merged, 0 files removed, 0 files unresolved (changeset !)
480 (branch merge, don't forget to commit)
490 (branch merge, don't forget to commit)
481 $ hg ci -m "mFGm-0 $case_desc - one way"
491 $ hg ci -m "mFGm-0 $case_desc - one way"
482 created new head
492 created new head
483 $ hg up 'desc("g-1")'
493 $ hg up 'desc("g-1")'
484 2 files updated, 0 files merged, 0 files removed, 0 files unresolved (no-changeset !)
494 2 files updated, 0 files merged, 0 files removed, 0 files unresolved (no-changeset !)
485 1 files updated, 0 files merged, 0 files removed, 0 files unresolved (changeset !)
495 1 files updated, 0 files merged, 0 files removed, 0 files unresolved (changeset !)
486 $ hg merge 'desc("f-2")' --tool :union
496 $ hg merge 'desc("f-2")' --tool :union
487 merging d (no-changeset !)
497 merging d (no-changeset !)
488 0 files updated, 1 files merged, 1 files removed, 0 files unresolved (no-changeset !)
498 0 files updated, 1 files merged, 1 files removed, 0 files unresolved (no-changeset !)
489 0 files updated, 0 files merged, 1 files removed, 0 files unresolved (changeset !)
499 0 files updated, 0 files merged, 1 files removed, 0 files unresolved (changeset !)
490 (branch merge, don't forget to commit)
500 (branch merge, don't forget to commit)
491 $ hg ci -m "mGFm-0 $case_desc - the other way"
501 $ hg ci -m "mGFm-0 $case_desc - the other way"
492 created new head
502 created new head
493 $ hg log -G --rev '::(desc("mGFm")+desc("mFGm"))'
503 $ hg log -G --rev '::(desc("mGFm")+desc("mFGm"))'
494 @ 29 mGFm-0 merge - G side: content change, F side: copy overwrite, no content change - the other way
504 @ 29 mGFm-0 merge - G side: content change, F side: copy overwrite, no content change - the other way
495 |\
505 |\
496 +---o 28 mFGm-0 merge - G side: content change, F side: copy overwrite, no content change - one way
506 +---o 28 mFGm-0 merge - G side: content change, F side: copy overwrite, no content change - one way
497 | |/
507 | |/
498 | o 25 g-1: update d
508 | o 25 g-1: update d
499 | |
509 | |
500 o | 22 f-2: rename i -> d
510 o | 22 f-2: rename i -> d
501 | |
511 | |
502 o | 21 f-1: rename h -> i
512 o | 21 f-1: rename h -> i
503 |/
513 |/
504 o 2 i-2: c -move-> d
514 o 2 i-2: c -move-> d
505 |
515 |
506 o 1 i-1: a -move-> c
516 o 1 i-1: a -move-> c
507 |
517 |
508 o 0 i-0 initial commit: a b h
518 o 0 i-0 initial commit: a b h
509
519
510
520
511
521
512 Comparing with merging with a deletion (and keeping the file)
522 Comparing with merging with a deletion (and keeping the file)
513 -------------------------------------------------------------
523 -------------------------------------------------------------
514
524
515 Merge:
525 Merge:
516 - one removing a file (d)
526 - one removing a file (d)
517 - one updating that file
527 - one updating that file
518 - the merge keep the modified version of the file (canceling the delete)
528 - the merge keep the modified version of the file (canceling the delete)
519
529
520 In this case, the file keep on living after the merge. So we should not drop its
530 In this case, the file keep on living after the merge. So we should not drop its
521 copy tracing chain.
531 copy tracing chain.
522
532
523 $ case_desc="merge updated/deleted - revive the file (updated content)"
533 $ case_desc="merge updated/deleted - revive the file (updated content)"
524
534
525 $ hg up 'desc("c-1")'
535 $ hg up 'desc("c-1")'
526 1 files updated, 0 files merged, 1 files removed, 0 files unresolved
536 1 files updated, 0 files merged, 1 files removed, 0 files unresolved
527 $ hg merge 'desc("g-1")'
537 $ hg merge 'desc("g-1")'
528 file 'd' was deleted in local [working copy] but was modified in other [merge rev].
538 file 'd' was deleted in local [working copy] but was modified in other [merge rev].
529 You can use (c)hanged version, leave (d)eleted, or leave (u)nresolved.
539 You can use (c)hanged version, leave (d)eleted, or leave (u)nresolved.
530 What do you want to do? u
540 What do you want to do? u
531 0 files updated, 0 files merged, 0 files removed, 1 files unresolved
541 0 files updated, 0 files merged, 0 files removed, 1 files unresolved
532 use 'hg resolve' to retry unresolved file merges or 'hg merge --abort' to abandon
542 use 'hg resolve' to retry unresolved file merges or 'hg merge --abort' to abandon
533 [1]
543 [1]
534 $ hg resolve -t :other d
544 $ hg resolve -t :other d
535 (no more unresolved files)
545 (no more unresolved files)
536 $ hg ci -m "mCGm-0 $case_desc - one way"
546 $ hg ci -m "mCGm-0 $case_desc - one way"
537 created new head
547 created new head
538
548
539 $ hg up 'desc("g-1")'
549 $ hg up 'desc("g-1")'
540 0 files updated, 0 files merged, 0 files removed, 0 files unresolved
550 0 files updated, 0 files merged, 0 files removed, 0 files unresolved
541 $ hg merge 'desc("c-1")'
551 $ hg merge 'desc("c-1")'
542 file 'd' was deleted in other [merge rev] but was modified in local [working copy].
552 file 'd' was deleted in other [merge rev] but was modified in local [working copy].
543 You can use (c)hanged version, (d)elete, or leave (u)nresolved.
553 You can use (c)hanged version, (d)elete, or leave (u)nresolved.
544 What do you want to do? u
554 What do you want to do? u
545 0 files updated, 0 files merged, 0 files removed, 1 files unresolved
555 0 files updated, 0 files merged, 0 files removed, 1 files unresolved
546 use 'hg resolve' to retry unresolved file merges or 'hg merge --abort' to abandon
556 use 'hg resolve' to retry unresolved file merges or 'hg merge --abort' to abandon
547 [1]
557 [1]
548 $ hg resolve -t :local d
558 $ hg resolve -t :local d
549 (no more unresolved files)
559 (no more unresolved files)
550 $ hg ci -m "mGCm-0 $case_desc - the other way"
560 $ hg ci -m "mGCm-0 $case_desc - the other way"
551 created new head
561 created new head
552
562
553 $ hg log -G --rev '::(desc("mCGm")+desc("mGCm"))'
563 $ hg log -G --rev '::(desc("mCGm")+desc("mGCm"))'
554 @ 31 mGCm-0 merge updated/deleted - revive the file (updated content) - the other way
564 @ 31 mGCm-0 merge updated/deleted - revive the file (updated content) - the other way
555 |\
565 |\
556 +---o 30 mCGm-0 merge updated/deleted - revive the file (updated content) - one way
566 +---o 30 mCGm-0 merge updated/deleted - revive the file (updated content) - one way
557 | |/
567 | |/
558 | o 25 g-1: update d
568 | o 25 g-1: update d
559 | |
569 | |
560 o | 6 c-1 delete d
570 o | 6 c-1 delete d
561 |/
571 |/
562 o 2 i-2: c -move-> d
572 o 2 i-2: c -move-> d
563 |
573 |
564 o 1 i-1: a -move-> c
574 o 1 i-1: a -move-> c
565 |
575 |
566 o 0 i-0 initial commit: a b h
576 o 0 i-0 initial commit: a b h
567
577
568
578
569
579
570
580
571 Comparing with merge restoring an untouched deleted file
581 Comparing with merge restoring an untouched deleted file
572 --------------------------------------------------------
582 --------------------------------------------------------
573
583
574 Merge:
584 Merge:
575 - one removing a file (d)
585 - one removing a file (d)
576 - one leaving the file untouched
586 - one leaving the file untouched
577 - the merge actively restore the file to the same content.
587 - the merge actively restore the file to the same content.
578
588
579 In this case, the file keep on living after the merge. So we should not drop its
589 In this case, the file keep on living after the merge. So we should not drop its
580 copy tracing chain.
590 copy tracing chain.
581
591
582 $ case_desc="merge explicitely revive deleted file - B side: unrelated change, C side: delete d (restored by merge)"
592 $ case_desc="merge explicitely revive deleted file - B side: unrelated change, C side: delete d (restored by merge)"
583
593
584 $ hg up 'desc("c-1")'
594 $ hg up 'desc("c-1")'
585 0 files updated, 0 files merged, 1 files removed, 0 files unresolved
595 0 files updated, 0 files merged, 1 files removed, 0 files unresolved
586 $ hg merge 'desc("b-1")'
596 $ hg merge 'desc("b-1")'
587 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
588 (branch merge, don't forget to commit)
598 (branch merge, don't forget to commit)
589 $ hg revert --rev 'desc("b-1")' d
599 $ hg revert --rev 'desc("b-1")' d
590 $ hg ci -m "mCB-revert-m-0 $case_desc - one way"
600 $ hg ci -m "mCB-revert-m-0 $case_desc - one way"
591 created new head
601 created new head
592
602
593 $ hg up 'desc("b-1")'
603 $ hg up 'desc("b-1")'
594 0 files updated, 0 files merged, 0 files removed, 0 files unresolved
604 0 files updated, 0 files merged, 0 files removed, 0 files unresolved
595 $ hg merge 'desc("c-1")'
605 $ hg merge 'desc("c-1")'
596 0 files updated, 0 files merged, 1 files removed, 0 files unresolved
606 0 files updated, 0 files merged, 1 files removed, 0 files unresolved
597 (branch merge, don't forget to commit)
607 (branch merge, don't forget to commit)
598 $ hg revert --rev 'desc("b-1")' d
608 $ hg revert --rev 'desc("b-1")' d
599 $ hg ci -m "mBC-revert-m-0 $case_desc - the other way"
609 $ hg ci -m "mBC-revert-m-0 $case_desc - the other way"
600 created new head
610 created new head
601
611
602 $ hg log -G --rev '::(desc("mCB-revert-m")+desc("mBC-revert-m"))'
612 $ hg log -G --rev '::(desc("mCB-revert-m")+desc("mBC-revert-m"))'
603 @ 33 mBC-revert-m-0 merge explicitely revive deleted file - B side: unrelated change, C side: delete d (restored by merge) - the other way
613 @ 33 mBC-revert-m-0 merge explicitely revive deleted file - B side: unrelated change, C side: delete d (restored by merge) - the other way
604 |\
614 |\
605 +---o 32 mCB-revert-m-0 merge explicitely revive deleted file - B side: unrelated change, C side: delete d (restored by merge) - one way
615 +---o 32 mCB-revert-m-0 merge explicitely revive deleted file - B side: unrelated change, C side: delete d (restored by merge) - one way
606 | |/
616 | |/
607 | o 6 c-1 delete d
617 | o 6 c-1 delete d
608 | |
618 | |
609 o | 5 b-1: b update
619 o | 5 b-1: b update
610 |/
620 |/
611 o 2 i-2: c -move-> d
621 o 2 i-2: c -move-> d
612 |
622 |
613 o 1 i-1: a -move-> c
623 o 1 i-1: a -move-> c
614 |
624 |
615 o 0 i-0 initial commit: a b h
625 o 0 i-0 initial commit: a b h
616
626
617
627
618
628
619 $ hg up null --quiet
629 $ hg up null --quiet
620
630
621 Merging a branch where a rename was deleted with a branch where the same file was renamed
631 Merging a branch where a rename was deleted with a branch where the same file was renamed
622 ------------------------------------------------------------------------------------------
632 ------------------------------------------------------------------------------------------
623
633
624 Create a "conflicting" merge where `d` get removed on one branch before its
634 Create a "conflicting" merge where `d` get removed on one branch before its
625 rename information actually conflict with the other branch.
635 rename information actually conflict with the other branch.
626
636
627 (the copy information from the branch that was not deleted should win).
637 (the copy information from the branch that was not deleted should win).
628
638
629 $ 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)"
639 $ 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)"
630
640
631 $ hg up 'desc("i-0")'
641 $ hg up 'desc("i-0")'
632 3 files updated, 0 files merged, 0 files removed, 0 files unresolved
642 3 files updated, 0 files merged, 0 files removed, 0 files unresolved
633 $ hg mv b d
643 $ hg mv b d
634 $ hg ci -m "h-1: b -(move)-> d"
644 $ hg ci -m "h-1: b -(move)-> d"
635 created new head
645 created new head
636
646
637 $ hg up 'desc("c-1")'
647 $ hg up 'desc("c-1")'
638 1 files updated, 0 files merged, 2 files removed, 0 files unresolved
648 1 files updated, 0 files merged, 2 files removed, 0 files unresolved
639 $ hg merge 'desc("h-1")'
649 $ hg merge 'desc("h-1")'
640 1 files updated, 0 files merged, 1 files removed, 0 files unresolved
650 1 files updated, 0 files merged, 1 files removed, 0 files unresolved
641 (branch merge, don't forget to commit)
651 (branch merge, don't forget to commit)
642 $ hg ci -m "mCH-delete-before-conflict-m-0 $case_desc - one way"
652 $ hg ci -m "mCH-delete-before-conflict-m-0 $case_desc - one way"
643
653
644 $ hg up 'desc("h-1")'
654 $ hg up 'desc("h-1")'
645 1 files updated, 0 files merged, 0 files removed, 0 files unresolved
655 1 files updated, 0 files merged, 0 files removed, 0 files unresolved
646 $ hg merge 'desc("c-1")'
656 $ hg merge 'desc("c-1")'
647 0 files updated, 0 files merged, 1 files removed, 0 files unresolved
657 0 files updated, 0 files merged, 1 files removed, 0 files unresolved
648 (branch merge, don't forget to commit)
658 (branch merge, don't forget to commit)
649 $ hg ci -m "mHC-delete-before-conflict-m-0 $case_desc - the other way"
659 $ hg ci -m "mHC-delete-before-conflict-m-0 $case_desc - the other way"
650 created new head
660 created new head
651 $ hg log -G --rev '::(desc("mCH-delete-before-conflict-m")+desc("mHC-delete-before-conflict-m"))'
661 $ hg log -G --rev '::(desc("mCH-delete-before-conflict-m")+desc("mHC-delete-before-conflict-m"))'
652 @ 36 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
662 @ 36 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
653 |\
663 |\
654 +---o 35 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
664 +---o 35 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
655 | |/
665 | |/
656 | o 34 h-1: b -(move)-> d
666 | o 34 h-1: b -(move)-> d
657 | |
667 | |
658 o | 6 c-1 delete d
668 o | 6 c-1 delete d
659 | |
669 | |
660 o | 2 i-2: c -move-> d
670 o | 2 i-2: c -move-> d
661 | |
671 | |
662 o | 1 i-1: a -move-> c
672 o | 1 i-1: a -move-> c
663 |/
673 |/
664 o 0 i-0 initial commit: a b h
674 o 0 i-0 initial commit: a b h
665
675
666
676
667
677
668 Summary of all created cases
678 Summary of all created cases
669 ----------------------------
679 ----------------------------
670
680
671 $ hg up --quiet null
681 $ hg up --quiet null
672
682
673 (This exists to help keeping a compact list of the various cases we have built)
683 (This exists to help keeping a compact list of the various cases we have built)
674
684
675 $ hg log -T '{desc|firstline}\n'| sort
685 $ hg log -T '{desc|firstline}\n'| sort
676 a-1: d -move-> e
686 a-1: d -move-> e
677 a-2: e -move-> f
687 a-2: e -move-> f
678 b-1: b update
688 b-1: b update
679 c-1 delete d
689 c-1 delete d
680 d-1 delete d
690 d-1 delete d
681 d-2 re-add d
691 d-2 re-add d
682 e-1 b -move-> g
692 e-1 b -move-> g
683 e-2 g -move-> f
693 e-2 g -move-> f
684 f-1: rename h -> i
694 f-1: rename h -> i
685 f-2: rename i -> d
695 f-2: rename i -> d
686 g-1: update d
696 g-1: update d
687 h-1: b -(move)-> d
697 h-1: b -(move)-> d
688 i-0 initial commit: a b h
698 i-0 initial commit: a b h
689 i-1: a -move-> c
699 i-1: a -move-> c
690 i-2: c -move-> d
700 i-2: c -move-> d
691 mABm-0 simple merge - A side: multiple renames, B side: unrelated update - the other way
701 mABm-0 simple merge - A side: multiple renames, B side: unrelated update - the other way
692 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
702 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
693 mBAm-0 simple merge - A side: multiple renames, B side: unrelated update - one way
703 mBAm-0 simple merge - A side: multiple renames, B side: unrelated update - one way
694 mBC-revert-m-0 merge explicitely revive deleted file - B side: unrelated change, C side: delete d (restored by merge) - the other way
704 mBC-revert-m-0 merge explicitely revive deleted file - B side: unrelated change, C side: delete d (restored by merge) - the other way
695 mBCm-0 simple merge - C side: delete a file with copies history , B side: unrelated update - one way
705 mBCm-0 simple merge - C side: delete a file with copies history , B side: unrelated update - one way
696 mBCm-1 re-add d
706 mBCm-1 re-add d
697 mBDm-0 simple merge - B side: unrelated update, D side: delete and recreate a file (with different content) - one way
707 mBDm-0 simple merge - B side: unrelated update, D side: delete and recreate a file (with different content) - one way
698 mBFm-0 simple merge - B side: unrelated change, F side: overwrite d with a copy (from h->i->d) - one way
708 mBFm-0 simple merge - B side: unrelated change, F side: overwrite d with a copy (from h->i->d) - one way
699 mCB-revert-m-0 merge explicitely revive deleted file - B side: unrelated change, C side: delete d (restored by merge) - one way
709 mCB-revert-m-0 merge explicitely revive deleted file - B side: unrelated change, C side: delete d (restored by merge) - one way
700 mCBm-0 simple merge - C side: delete a file with copies history , B side: unrelated update - the other way
710 mCBm-0 simple merge - C side: delete a file with copies history , B side: unrelated update - the other way
701 mCBm-1 re-add d
711 mCBm-1 re-add d
702 mCGm-0 merge updated/deleted - revive the file (updated content) - one way
712 mCGm-0 merge updated/deleted - revive the file (updated content) - one way
703 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
713 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
704 mDBm-0 simple merge - B side: unrelated update, D side: delete and recreate a file (with different content) - the other way
714 mDBm-0 simple merge - B side: unrelated update, D side: delete and recreate a file (with different content) - the other way
705 mDGm-0 actual content merge, copies on one side - D side: delete and re-add (different content), G side: update content - one way
715 mDGm-0 actual content merge, copies on one side - D side: delete and re-add (different content), G side: update content - one way
706 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
716 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
707 mFBm-0 simple merge - B side: unrelated change, F side: overwrite d with a copy (from h->i->d) - the other way
717 mFBm-0 simple merge - B side: unrelated change, F side: overwrite d with a copy (from h->i->d) - the other way
708 mFGm-0 merge - G side: content change, F side: copy overwrite, no content change - one way
718 mFGm-0 merge - G side: content change, F side: copy overwrite, no content change - one way
709 mGCm-0 merge updated/deleted - revive the file (updated content) - the other way
719 mGCm-0 merge updated/deleted - revive the file (updated content) - the other way
710 mGDm-0 actual content merge, copies on one side - D side: delete and re-add (different content), G side: update content - the other way
720 mGDm-0 actual content merge, copies on one side - D side: delete and re-add (different content), G side: update content - the other way
711 mGFm-0 merge - G side: content change, F side: copy overwrite, no content change - the other way
721 mGFm-0 merge - G side: content change, F side: copy overwrite, no content change - the other way
712 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
722 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
713
723
714
724
715 Test that sidedata computations during upgrades are correct
725 Test that sidedata computations during upgrades are correct
716 ===========================================================
726 ===========================================================
717
727
718 We upgrade a repository that is not using sidedata (the filelog case) and
728 We upgrade a repository that is not using sidedata (the filelog case) and
719 check that the same side data have been generated as if they were computed at
729 check that the same side data have been generated as if they were computed at
720 commit time.
730 commit time.
721
731
722
732
723 #if upgraded
733 #if upgraded
724 $ cat >> $HGRCPATH << EOF
734 $ cat >> $HGRCPATH << EOF
725 > [format]
735 > [format]
726 > exp-use-side-data = yes
736 > exp-use-side-data = yes
727 > exp-use-copies-side-data-changeset = yes
737 > exp-use-copies-side-data-changeset = yes
728 > EOF
738 > EOF
729 $ hg debugformat -v
739 $ hg debugformat -v
730 format-variant repo config default
740 format-variant repo config default
731 fncache: yes yes yes
741 fncache: yes yes yes
732 dotencode: yes yes yes
742 dotencode: yes yes yes
733 generaldelta: yes yes yes
743 generaldelta: yes yes yes
734 share-safe: no no no
744 share-safe: no no no
735 sparserevlog: yes yes yes
745 sparserevlog: yes yes yes
736 sidedata: no yes no
746 sidedata: no yes no
737 persistent-nodemap: no no no
747 persistent-nodemap: no no no
738 copies-sdc: no yes no
748 copies-sdc: no yes no
739 plain-cl-delta: yes yes yes
749 plain-cl-delta: yes yes yes
740 compression: * (glob)
750 compression: * (glob)
741 compression-level: default default default
751 compression-level: default default default
742 $ hg debugupgraderepo --run --quiet
752 $ hg debugupgraderepo --run --quiet
743 upgrade will perform the following actions:
753 upgrade will perform the following actions:
744
754
745 requirements
755 requirements
746 preserved: * (glob)
756 preserved: * (glob)
747 added: exp-copies-sidedata-changeset, exp-sidedata-flag
757 added: exp-copies-sidedata-changeset, exp-sidedata-flag
748
758
749 processed revlogs:
759 processed revlogs:
750 - all-filelogs
760 - all-filelogs
751 - changelog
761 - changelog
752 - manifest
762 - manifest
753
763
754 #endif
764 #endif
755
765
756
766
757 #if no-compatibility no-filelog no-changeset
767 #if no-compatibility no-filelog no-changeset
758
768
759 $ hg debugchangedfiles --compute 0
769 $ hg debugchangedfiles --compute 0
760 added : a, ;
770 added : a, ;
761 added : b, ;
771 added : b, ;
762 added : h, ;
772 added : h, ;
763
773
764 $ for rev in `hg log --rev 'all()' -T '{rev}\n'`; do
774 $ for rev in `hg log --rev 'all()' -T '{rev}\n'`; do
765 > echo "##### revision $rev #####"
775 > echo "##### revision $rev #####"
766 > hg debugsidedata -c -v -- $rev
776 > hg debugsidedata -c -v -- $rev
767 > hg debugchangedfiles $rev
777 > hg debugchangedfiles $rev
768 > done
778 > done
769 ##### revision 0 #####
779 ##### revision 0 #####
770 1 sidedata entries
780 1 sidedata entries
771 entry-0014 size 34
781 entry-0014 size 34
772 '\x00\x00\x00\x03\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\x00abh'
782 '\x00\x00\x00\x03\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\x00abh'
773 added : a, ;
783 added : a, ;
774 added : b, ;
784 added : b, ;
775 added : h, ;
785 added : h, ;
776 ##### revision 1 #####
786 ##### revision 1 #####
777 1 sidedata entries
787 1 sidedata entries
778 entry-0014 size 24
788 entry-0014 size 24
779 '\x00\x00\x00\x02\x0c\x00\x00\x00\x01\x00\x00\x00\x00\x06\x00\x00\x00\x02\x00\x00\x00\x00ac'
789 '\x00\x00\x00\x02\x0c\x00\x00\x00\x01\x00\x00\x00\x00\x06\x00\x00\x00\x02\x00\x00\x00\x00ac'
780 removed : a, ;
790 removed : a, ;
781 added p1: c, a;
791 added p1: c, a;
782 ##### revision 2 #####
792 ##### revision 2 #####
783 1 sidedata entries
793 1 sidedata entries
784 entry-0014 size 24
794 entry-0014 size 24
785 '\x00\x00\x00\x02\x0c\x00\x00\x00\x01\x00\x00\x00\x00\x06\x00\x00\x00\x02\x00\x00\x00\x00cd'
795 '\x00\x00\x00\x02\x0c\x00\x00\x00\x01\x00\x00\x00\x00\x06\x00\x00\x00\x02\x00\x00\x00\x00cd'
786 removed : c, ;
796 removed : c, ;
787 added p1: d, c;
797 added p1: d, c;
788 ##### revision 3 #####
798 ##### revision 3 #####
789 1 sidedata entries
799 1 sidedata entries
790 entry-0014 size 24
800 entry-0014 size 24
791 '\x00\x00\x00\x02\x0c\x00\x00\x00\x01\x00\x00\x00\x00\x06\x00\x00\x00\x02\x00\x00\x00\x00de'
801 '\x00\x00\x00\x02\x0c\x00\x00\x00\x01\x00\x00\x00\x00\x06\x00\x00\x00\x02\x00\x00\x00\x00de'
792 removed : d, ;
802 removed : d, ;
793 added p1: e, d;
803 added p1: e, d;
794 ##### revision 4 #####
804 ##### revision 4 #####
795 1 sidedata entries
805 1 sidedata entries
796 entry-0014 size 24
806 entry-0014 size 24
797 '\x00\x00\x00\x02\x0c\x00\x00\x00\x01\x00\x00\x00\x00\x06\x00\x00\x00\x02\x00\x00\x00\x00ef'
807 '\x00\x00\x00\x02\x0c\x00\x00\x00\x01\x00\x00\x00\x00\x06\x00\x00\x00\x02\x00\x00\x00\x00ef'
798 removed : e, ;
808 removed : e, ;
799 added p1: f, e;
809 added p1: f, e;
800 ##### revision 5 #####
810 ##### revision 5 #####
801 1 sidedata entries
811 1 sidedata entries
802 entry-0014 size 14
812 entry-0014 size 14
803 '\x00\x00\x00\x01\x14\x00\x00\x00\x01\x00\x00\x00\x00b'
813 '\x00\x00\x00\x01\x14\x00\x00\x00\x01\x00\x00\x00\x00b'
804 touched : b, ;
814 touched : b, ;
805 ##### revision 6 #####
815 ##### revision 6 #####
806 1 sidedata entries
816 1 sidedata entries
807 entry-0014 size 14
817 entry-0014 size 14
808 '\x00\x00\x00\x01\x0c\x00\x00\x00\x01\x00\x00\x00\x00d'
818 '\x00\x00\x00\x01\x0c\x00\x00\x00\x01\x00\x00\x00\x00d'
809 removed : d, ;
819 removed : d, ;
810 ##### revision 7 #####
820 ##### revision 7 #####
811 1 sidedata entries
821 1 sidedata entries
812 entry-0014 size 14
822 entry-0014 size 14
813 '\x00\x00\x00\x01\x0c\x00\x00\x00\x01\x00\x00\x00\x00d'
823 '\x00\x00\x00\x01\x0c\x00\x00\x00\x01\x00\x00\x00\x00d'
814 removed : d, ;
824 removed : d, ;
815 ##### revision 8 #####
825 ##### revision 8 #####
816 1 sidedata entries
826 1 sidedata entries
817 entry-0014 size 14
827 entry-0014 size 14
818 '\x00\x00\x00\x01\x04\x00\x00\x00\x01\x00\x00\x00\x00d'
828 '\x00\x00\x00\x01\x04\x00\x00\x00\x01\x00\x00\x00\x00d'
819 added : d, ;
829 added : d, ;
820 ##### revision 9 #####
830 ##### revision 9 #####
821 1 sidedata entries
831 1 sidedata entries
822 entry-0014 size 24
832 entry-0014 size 24
823 '\x00\x00\x00\x02\x0c\x00\x00\x00\x01\x00\x00\x00\x00\x06\x00\x00\x00\x02\x00\x00\x00\x00bg'
833 '\x00\x00\x00\x02\x0c\x00\x00\x00\x01\x00\x00\x00\x00\x06\x00\x00\x00\x02\x00\x00\x00\x00bg'
824 removed : b, ;
834 removed : b, ;
825 added p1: g, b;
835 added p1: g, b;
826 ##### revision 10 #####
836 ##### revision 10 #####
827 1 sidedata entries
837 1 sidedata entries
828 entry-0014 size 24
838 entry-0014 size 24
829 '\x00\x00\x00\x02\x06\x00\x00\x00\x01\x00\x00\x00\x01\x0c\x00\x00\x00\x02\x00\x00\x00\x00fg'
839 '\x00\x00\x00\x02\x06\x00\x00\x00\x01\x00\x00\x00\x01\x0c\x00\x00\x00\x02\x00\x00\x00\x00fg'
830 added p1: f, g;
840 added p1: f, g;
831 removed : g, ;
841 removed : g, ;
832 ##### revision 11 #####
842 ##### revision 11 #####
833 1 sidedata entries
843 1 sidedata entries
834 entry-0014 size 4
844 entry-0014 size 4
835 '\x00\x00\x00\x00'
845 '\x00\x00\x00\x00'
836 ##### revision 12 #####
846 ##### revision 12 #####
837 1 sidedata entries
847 1 sidedata entries
838 entry-0014 size 4
848 entry-0014 size 4
839 '\x00\x00\x00\x00'
849 '\x00\x00\x00\x00'
840 ##### revision 13 #####
850 ##### revision 13 #####
841 1 sidedata entries
851 1 sidedata entries
842 entry-0014 size 4
852 entry-0014 size 4
843 '\x00\x00\x00\x00'
853 '\x00\x00\x00\x00'
844 ##### revision 14 #####
854 ##### revision 14 #####
845 1 sidedata entries
855 1 sidedata entries
846 entry-0014 size 14
856 entry-0014 size 14
847 '\x00\x00\x00\x01\x04\x00\x00\x00\x01\x00\x00\x00\x00d'
857 '\x00\x00\x00\x01\x04\x00\x00\x00\x01\x00\x00\x00\x00d'
848 added : d, ;
858 added : d, ;
849 ##### revision 15 #####
859 ##### revision 15 #####
850 1 sidedata entries
860 1 sidedata entries
851 entry-0014 size 4
861 entry-0014 size 4
852 '\x00\x00\x00\x00'
862 '\x00\x00\x00\x00'
853 ##### revision 16 #####
863 ##### revision 16 #####
854 1 sidedata entries
864 1 sidedata entries
855 entry-0014 size 14
865 entry-0014 size 14
856 '\x00\x00\x00\x01\x04\x00\x00\x00\x01\x00\x00\x00\x00d'
866 '\x00\x00\x00\x01\x04\x00\x00\x00\x01\x00\x00\x00\x00d'
857 added : d, ;
867 added : d, ;
858 ##### revision 17 #####
868 ##### revision 17 #####
859 1 sidedata entries
869 1 sidedata entries
860 entry-0014 size 4
870 entry-0014 size 4
861 '\x00\x00\x00\x00'
871 '\x00\x00\x00\x00'
862 ##### revision 18 #####
872 ##### revision 18 #####
863 1 sidedata entries
873 1 sidedata entries
864 entry-0014 size 4
874 entry-0014 size 4
865 '\x00\x00\x00\x00'
875 '\x00\x00\x00\x00'
866 ##### revision 19 #####
876 ##### revision 19 #####
867 1 sidedata entries
877 1 sidedata entries
868 entry-0014 size 14
878 entry-0014 size 14
869 '\x00\x00\x00\x01\x08\x00\x00\x00\x01\x00\x00\x00\x00f'
879 '\x00\x00\x00\x01\x08\x00\x00\x00\x01\x00\x00\x00\x00f'
870 merged : f, ;
880 merged : f, ;
871 ##### revision 20 #####
881 ##### revision 20 #####
872 1 sidedata entries
882 1 sidedata entries
873 entry-0014 size 14
883 entry-0014 size 14
874 '\x00\x00\x00\x01\x08\x00\x00\x00\x01\x00\x00\x00\x00f'
884 '\x00\x00\x00\x01\x08\x00\x00\x00\x01\x00\x00\x00\x00f'
875 merged : f, ;
885 merged : f, ;
876 ##### revision 21 #####
886 ##### revision 21 #####
877 1 sidedata entries
887 1 sidedata entries
878 entry-0014 size 24
888 entry-0014 size 24
879 '\x00\x00\x00\x02\x0c\x00\x00\x00\x01\x00\x00\x00\x00\x06\x00\x00\x00\x02\x00\x00\x00\x00hi'
889 '\x00\x00\x00\x02\x0c\x00\x00\x00\x01\x00\x00\x00\x00\x06\x00\x00\x00\x02\x00\x00\x00\x00hi'
880 removed : h, ;
890 removed : h, ;
881 added p1: i, h;
891 added p1: i, h;
882 ##### revision 22 #####
892 ##### revision 22 #####
883 1 sidedata entries
893 1 sidedata entries
884 entry-0014 size 24
894 entry-0014 size 24
885 '\x00\x00\x00\x02\x16\x00\x00\x00\x01\x00\x00\x00\x01\x0c\x00\x00\x00\x02\x00\x00\x00\x00di'
895 '\x00\x00\x00\x02\x16\x00\x00\x00\x01\x00\x00\x00\x01\x0c\x00\x00\x00\x02\x00\x00\x00\x00di'
886 touched p1: d, i;
896 touched p1: d, i;
887 removed : i, ;
897 removed : i, ;
888 ##### revision 23 #####
898 ##### revision 23 #####
889 1 sidedata entries
899 1 sidedata entries
890 entry-0014 size 4
900 entry-0014 size 4
891 '\x00\x00\x00\x00'
901 '\x00\x00\x00\x00'
892 ##### revision 24 #####
902 ##### revision 24 #####
893 1 sidedata entries
903 1 sidedata entries
894 entry-0014 size 4
904 entry-0014 size 4
895 '\x00\x00\x00\x00'
905 '\x00\x00\x00\x00'
896 ##### revision 25 #####
906 ##### revision 25 #####
897 1 sidedata entries
907 1 sidedata entries
898 entry-0014 size 14
908 entry-0014 size 14
899 '\x00\x00\x00\x01\x14\x00\x00\x00\x01\x00\x00\x00\x00d'
909 '\x00\x00\x00\x01\x14\x00\x00\x00\x01\x00\x00\x00\x00d'
900 touched : d, ;
910 touched : d, ;
901 ##### revision 26 #####
911 ##### revision 26 #####
902 1 sidedata entries
912 1 sidedata entries
903 entry-0014 size 14
913 entry-0014 size 14
904 '\x00\x00\x00\x01\x08\x00\x00\x00\x01\x00\x00\x00\x00d'
914 '\x00\x00\x00\x01\x08\x00\x00\x00\x01\x00\x00\x00\x00d'
905 merged : d, ;
915 merged : d, ;
906 ##### revision 27 #####
916 ##### revision 27 #####
907 1 sidedata entries
917 1 sidedata entries
908 entry-0014 size 14
918 entry-0014 size 14
909 '\x00\x00\x00\x01\x08\x00\x00\x00\x01\x00\x00\x00\x00d'
919 '\x00\x00\x00\x01\x08\x00\x00\x00\x01\x00\x00\x00\x00d'
910 merged : d, ;
920 merged : d, ;
911 ##### revision 28 #####
921 ##### revision 28 #####
912 1 sidedata entries
922 1 sidedata entries
913 entry-0014 size 14
923 entry-0014 size 14
914 '\x00\x00\x00\x01\x08\x00\x00\x00\x01\x00\x00\x00\x00d'
924 '\x00\x00\x00\x01\x08\x00\x00\x00\x01\x00\x00\x00\x00d'
915 merged : d, ;
925 merged : d, ;
916 ##### revision 29 #####
926 ##### revision 29 #####
917 1 sidedata entries
927 1 sidedata entries
918 entry-0014 size 14
928 entry-0014 size 14
919 '\x00\x00\x00\x01\x08\x00\x00\x00\x01\x00\x00\x00\x00d'
929 '\x00\x00\x00\x01\x08\x00\x00\x00\x01\x00\x00\x00\x00d'
920 merged : d, ;
930 merged : d, ;
921 ##### revision 30 #####
931 ##### revision 30 #####
922 1 sidedata entries
932 1 sidedata entries
923 entry-0014 size 14
933 entry-0014 size 14
924 '\x00\x00\x00\x01\x10\x00\x00\x00\x01\x00\x00\x00\x00d'
934 '\x00\x00\x00\x01\x10\x00\x00\x00\x01\x00\x00\x00\x00d'
925 salvaged : d, ;
935 salvaged : d, ;
926 ##### revision 31 #####
936 ##### revision 31 #####
927 1 sidedata entries
937 1 sidedata entries
928 entry-0014 size 14
938 entry-0014 size 14
929 '\x00\x00\x00\x01\x10\x00\x00\x00\x01\x00\x00\x00\x00d'
939 '\x00\x00\x00\x01\x10\x00\x00\x00\x01\x00\x00\x00\x00d'
930 salvaged : d, ;
940 salvaged : d, ;
931 ##### revision 32 #####
941 ##### revision 32 #####
932 1 sidedata entries
942 1 sidedata entries
933 entry-0014 size 14
943 entry-0014 size 14
934 '\x00\x00\x00\x01\x10\x00\x00\x00\x01\x00\x00\x00\x00d'
944 '\x00\x00\x00\x01\x10\x00\x00\x00\x01\x00\x00\x00\x00d'
935 salvaged : d, ;
945 salvaged : d, ;
936 ##### revision 33 #####
946 ##### revision 33 #####
937 1 sidedata entries
947 1 sidedata entries
938 entry-0014 size 14
948 entry-0014 size 14
939 '\x00\x00\x00\x01\x10\x00\x00\x00\x01\x00\x00\x00\x00d'
949 '\x00\x00\x00\x01\x10\x00\x00\x00\x01\x00\x00\x00\x00d'
940 salvaged : d, ;
950 salvaged : d, ;
941 ##### revision 34 #####
951 ##### revision 34 #####
942 1 sidedata entries
952 1 sidedata entries
943 entry-0014 size 24
953 entry-0014 size 24
944 '\x00\x00\x00\x02\x0c\x00\x00\x00\x01\x00\x00\x00\x00\x06\x00\x00\x00\x02\x00\x00\x00\x00bd'
954 '\x00\x00\x00\x02\x0c\x00\x00\x00\x01\x00\x00\x00\x00\x06\x00\x00\x00\x02\x00\x00\x00\x00bd'
945 removed : b, ;
955 removed : b, ;
946 added p1: d, b;
956 added p1: d, b;
947 ##### revision 35 #####
957 ##### revision 35 #####
948 1 sidedata entries
958 1 sidedata entries
949 entry-0014 size 4
959 entry-0014 size 4
950 '\x00\x00\x00\x00'
960 '\x00\x00\x00\x00'
951 ##### revision 36 #####
961 ##### revision 36 #####
952 1 sidedata entries
962 1 sidedata entries
953 entry-0014 size 4
963 entry-0014 size 4
954 '\x00\x00\x00\x00'
964 '\x00\x00\x00\x00'
955
965
956 #endif
966 #endif
957
967
958
968
959 Test copy information chaining
969 Test copy information chaining
960 ==============================
970 ==============================
961
971
962 Check that matching only affect the destination and not intermediate path
972 Check that matching only affect the destination and not intermediate path
963 -------------------------------------------------------------------------
973 -------------------------------------------------------------------------
964
974
965 The two status call should give the same value for f
975 The two status call should give the same value for f
966
976
967 $ hg status --copies --rev 'desc("i-0")' --rev 'desc("a-2")'
977 $ hg status --copies --rev 'desc("i-0")' --rev 'desc("a-2")'
968 A f
978 A f
969 a
979 a
970 R a
980 R a
971 $ hg status --copies --rev 'desc("i-0")' --rev 'desc("a-2")' f
981 $ hg status --copies --rev 'desc("i-0")' --rev 'desc("a-2")' f
972 A f
982 A f
973 a (no-changeset no-compatibility !)
983 a (no-changeset no-compatibility !)
974
984
975 merging with unrelated change does not interfere with the renames
985 merging with unrelated change does not interfere with the renames
976 ---------------------------------------------------------------
986 ---------------------------------------------------------------
977
987
978 - rename on one side
988 - rename on one side
979 - unrelated change on the other side
989 - unrelated change on the other side
980
990
981 $ hg log -G --rev '::(desc("mABm")+desc("mBAm"))'
991 $ hg log -G --rev '::(desc("mABm")+desc("mBAm"))'
982 o 12 mABm-0 simple merge - A side: multiple renames, B side: unrelated update - the other way
992 o 12 mABm-0 simple merge - A side: multiple renames, B side: unrelated update - the other way
983 |\
993 |\
984 +---o 11 mBAm-0 simple merge - A side: multiple renames, B side: unrelated update - one way
994 +---o 11 mBAm-0 simple merge - A side: multiple renames, B side: unrelated update - one way
985 | |/
995 | |/
986 | o 5 b-1: b update
996 | o 5 b-1: b update
987 | |
997 | |
988 o | 4 a-2: e -move-> f
998 o | 4 a-2: e -move-> f
989 | |
999 | |
990 o | 3 a-1: d -move-> e
1000 o | 3 a-1: d -move-> e
991 |/
1001 |/
992 o 2 i-2: c -move-> d
1002 o 2 i-2: c -move-> d
993 |
1003 |
994 o 1 i-1: a -move-> c
1004 o 1 i-1: a -move-> c
995 |
1005 |
996 o 0 i-0 initial commit: a b h
1006 o 0 i-0 initial commit: a b h
997
1007
998
1008
999 $ hg status --copies --rev 'desc("b-1")' --rev 'desc("mABm")'
1009 $ hg status --copies --rev 'desc("b-1")' --rev 'desc("mABm")'
1000 A f
1010 A f
1001 d
1011 d
1002 R d
1012 R d
1003 $ hg status --copies --rev 'desc("b-1")' --rev 'desc("mBAm")'
1013 $ hg status --copies --rev 'desc("b-1")' --rev 'desc("mBAm")'
1004 A f
1014 A f
1005 d
1015 d
1006 R d
1016 R d
1007 $ hg status --copies --rev 'desc("a-2")' --rev 'desc("mABm")'
1017 $ hg status --copies --rev 'desc("a-2")' --rev 'desc("mABm")'
1008 M b
1018 M b
1009 $ hg status --copies --rev 'desc("a-2")' --rev 'desc("mBAm")'
1019 $ hg status --copies --rev 'desc("a-2")' --rev 'desc("mBAm")'
1010 M b
1020 M b
1011 $ hg status --copies --rev 'desc("i-2")' --rev 'desc("mABm")'
1021 $ hg status --copies --rev 'desc("i-2")' --rev 'desc("mABm")'
1012 M b
1022 M b
1013 A f
1023 A f
1014 d
1024 d
1015 R d
1025 R d
1016 $ hg status --copies --rev 'desc("i-2")' --rev 'desc("mBAm")'
1026 $ hg status --copies --rev 'desc("i-2")' --rev 'desc("mBAm")'
1017 M b
1027 M b
1018 A f
1028 A f
1019 d
1029 d
1020 R d
1030 R d
1021 $ hg status --copies --rev 'desc("i-0")' --rev 'desc("mABm")'
1031 $ hg status --copies --rev 'desc("i-0")' --rev 'desc("mABm")'
1022 M b
1032 M b
1023 A f
1033 A f
1024 a
1034 a
1025 R a
1035 R a
1026 $ hg status --copies --rev 'desc("i-0")' --rev 'desc("mBAm")'
1036 $ hg status --copies --rev 'desc("i-0")' --rev 'desc("mBAm")'
1027 M b
1037 M b
1028 A f
1038 A f
1029 a
1039 a
1030 R a
1040 R a
1031
1041
1032 merging with the side having a delete
1042 merging with the side having a delete
1033 -------------------------------------
1043 -------------------------------------
1034
1044
1035 case summary:
1045 case summary:
1036 - one with change to an unrelated file
1046 - one with change to an unrelated file
1037 - one deleting the change
1047 - one deleting the change
1038 and recreate an unrelated file after the merge
1048 and recreate an unrelated file after the merge
1039
1049
1040 $ hg log -G --rev '::(desc("mCBm")+desc("mBCm"))'
1050 $ hg log -G --rev '::(desc("mCBm")+desc("mBCm"))'
1041 o 16 mCBm-1 re-add d
1051 o 16 mCBm-1 re-add d
1042 |
1052 |
1043 o 15 mCBm-0 simple merge - C side: delete a file with copies history , B side: unrelated update - the other way
1053 o 15 mCBm-0 simple merge - C side: delete a file with copies history , B side: unrelated update - the other way
1044 |\
1054 |\
1045 | | o 14 mBCm-1 re-add d
1055 | | o 14 mBCm-1 re-add d
1046 | | |
1056 | | |
1047 +---o 13 mBCm-0 simple merge - C side: delete a file with copies history , B side: unrelated update - one way
1057 +---o 13 mBCm-0 simple merge - C side: delete a file with copies history , B side: unrelated update - one way
1048 | |/
1058 | |/
1049 | o 6 c-1 delete d
1059 | o 6 c-1 delete d
1050 | |
1060 | |
1051 o | 5 b-1: b update
1061 o | 5 b-1: b update
1052 |/
1062 |/
1053 o 2 i-2: c -move-> d
1063 o 2 i-2: c -move-> d
1054 |
1064 |
1055 o 1 i-1: a -move-> c
1065 o 1 i-1: a -move-> c
1056 |
1066 |
1057 o 0 i-0 initial commit: a b h
1067 o 0 i-0 initial commit: a b h
1058
1068
1059 - comparing from the merge
1069 - comparing from the merge
1060
1070
1061 $ hg status --copies --rev 'desc("b-1")' --rev 'desc("mBCm-0")'
1071 $ hg status --copies --rev 'desc("b-1")' --rev 'desc("mBCm-0")'
1062 R d
1072 R d
1063 $ hg status --copies --rev 'desc("b-1")' --rev 'desc("mCBm-0")'
1073 $ hg status --copies --rev 'desc("b-1")' --rev 'desc("mCBm-0")'
1064 R d
1074 R d
1065 $ hg status --copies --rev 'desc("c-1")' --rev 'desc("mBCm-0")'
1075 $ hg status --copies --rev 'desc("c-1")' --rev 'desc("mBCm-0")'
1066 M b
1076 M b
1067 $ hg status --copies --rev 'desc("c-1")' --rev 'desc("mCBm-0")'
1077 $ hg status --copies --rev 'desc("c-1")' --rev 'desc("mCBm-0")'
1068 M b
1078 M b
1069 $ hg status --copies --rev 'desc("i-2")' --rev 'desc("mBCm-0")'
1079 $ hg status --copies --rev 'desc("i-2")' --rev 'desc("mBCm-0")'
1070 M b
1080 M b
1071 R d
1081 R d
1072 $ hg status --copies --rev 'desc("i-2")' --rev 'desc("mCBm-0")'
1082 $ hg status --copies --rev 'desc("i-2")' --rev 'desc("mCBm-0")'
1073 M b
1083 M b
1074 R d
1084 R d
1075 $ hg status --copies --rev 'desc("i-0")' --rev 'desc("mBCm-0")'
1085 $ hg status --copies --rev 'desc("i-0")' --rev 'desc("mBCm-0")'
1076 M b
1086 M b
1077 R a
1087 R a
1078 $ hg status --copies --rev 'desc("i-0")' --rev 'desc("mCBm-0")'
1088 $ hg status --copies --rev 'desc("i-0")' --rev 'desc("mCBm-0")'
1079 M b
1089 M b
1080 R a
1090 R a
1081
1091
1082 - comparing with the merge children re-adding the file
1092 - comparing with the merge children re-adding the file
1083
1093
1084 $ hg status --copies --rev 'desc("b-1")' --rev 'desc("mBCm-1")'
1094 $ hg status --copies --rev 'desc("b-1")' --rev 'desc("mBCm-1")'
1085 M d
1095 M d
1086 $ hg status --copies --rev 'desc("b-1")' --rev 'desc("mCBm-1")'
1096 $ hg status --copies --rev 'desc("b-1")' --rev 'desc("mCBm-1")'
1087 M d
1097 M d
1088 $ hg status --copies --rev 'desc("c-1")' --rev 'desc("mBCm-1")'
1098 $ hg status --copies --rev 'desc("c-1")' --rev 'desc("mBCm-1")'
1089 M b
1099 M b
1090 A d
1100 A d
1091 $ hg status --copies --rev 'desc("c-1")' --rev 'desc("mCBm-1")'
1101 $ hg status --copies --rev 'desc("c-1")' --rev 'desc("mCBm-1")'
1092 M b
1102 M b
1093 A d
1103 A d
1094 $ hg status --copies --rev 'desc("i-2")' --rev 'desc("mBCm-1")'
1104 $ hg status --copies --rev 'desc("i-2")' --rev 'desc("mBCm-1")'
1095 M b
1105 M b
1096 M d
1106 M d
1097 $ hg status --copies --rev 'desc("i-2")' --rev 'desc("mCBm-1")'
1107 $ hg status --copies --rev 'desc("i-2")' --rev 'desc("mCBm-1")'
1098 M b
1108 M b
1099 M d
1109 M d
1100 $ hg status --copies --rev 'desc("i-0")' --rev 'desc("mBCm-1")'
1110 $ hg status --copies --rev 'desc("i-0")' --rev 'desc("mBCm-1")'
1101 M b
1111 M b
1102 A d
1112 A d
1103 R a
1113 R a
1104 $ hg status --copies --rev 'desc("i-0")' --rev 'desc("mCBm-1")'
1114 $ hg status --copies --rev 'desc("i-0")' --rev 'desc("mCBm-1")'
1105 M b
1115 M b
1106 A d
1116 A d
1107 R a
1117 R a
1108
1118
1109 Comparing with a merge re-adding the file afterward
1119 Comparing with a merge re-adding the file afterward
1110 ---------------------------------------------------
1120 ---------------------------------------------------
1111
1121
1112 Merge:
1122 Merge:
1113 - one with change to an unrelated file
1123 - one with change to an unrelated file
1114 - one deleting and recreating the change
1124 - one deleting and recreating the change
1115
1125
1116 $ hg log -G --rev '::(desc("mDBm")+desc("mBDm"))'
1126 $ hg log -G --rev '::(desc("mDBm")+desc("mBDm"))'
1117 o 18 mDBm-0 simple merge - B side: unrelated update, D side: delete and recreate a file (with different content) - the other way
1127 o 18 mDBm-0 simple merge - B side: unrelated update, D side: delete and recreate a file (with different content) - the other way
1118 |\
1128 |\
1119 +---o 17 mBDm-0 simple merge - B side: unrelated update, D side: delete and recreate a file (with different content) - one way
1129 +---o 17 mBDm-0 simple merge - B side: unrelated update, D side: delete and recreate a file (with different content) - one way
1120 | |/
1130 | |/
1121 | o 8 d-2 re-add d
1131 | o 8 d-2 re-add d
1122 | |
1132 | |
1123 | o 7 d-1 delete d
1133 | o 7 d-1 delete d
1124 | |
1134 | |
1125 o | 5 b-1: b update
1135 o | 5 b-1: b update
1126 |/
1136 |/
1127 o 2 i-2: c -move-> d
1137 o 2 i-2: c -move-> d
1128 |
1138 |
1129 o 1 i-1: a -move-> c
1139 o 1 i-1: a -move-> c
1130 |
1140 |
1131 o 0 i-0 initial commit: a b h
1141 o 0 i-0 initial commit: a b h
1132
1142
1133 $ hg status --copies --rev 'desc("b-1")' --rev 'desc("mBDm-0")'
1143 $ hg status --copies --rev 'desc("b-1")' --rev 'desc("mBDm-0")'
1134 M d
1144 M d
1135 $ hg status --copies --rev 'desc("b-1")' --rev 'desc("mDBm-0")'
1145 $ hg status --copies --rev 'desc("b-1")' --rev 'desc("mDBm-0")'
1136 M d
1146 M d
1137 $ hg status --copies --rev 'desc("d-2")' --rev 'desc("mBDm-0")'
1147 $ hg status --copies --rev 'desc("d-2")' --rev 'desc("mBDm-0")'
1138 M b
1148 M b
1139 $ hg status --copies --rev 'desc("d-2")' --rev 'desc("mDBm-0")'
1149 $ hg status --copies --rev 'desc("d-2")' --rev 'desc("mDBm-0")'
1140 M b
1150 M b
1141 $ hg status --copies --rev 'desc("i-2")' --rev 'desc("mBDm-0")'
1151 $ hg status --copies --rev 'desc("i-2")' --rev 'desc("mBDm-0")'
1142 M b
1152 M b
1143 M d
1153 M d
1144 $ hg status --copies --rev 'desc("i-2")' --rev 'desc("mDBm-0")'
1154 $ hg status --copies --rev 'desc("i-2")' --rev 'desc("mDBm-0")'
1145 M b
1155 M b
1146 M d
1156 M d
1147
1157
1148 The bugs makes recorded copy is different depending of where we started the merge from since
1158 The bugs makes recorded copy is different depending of where we started the merge from since
1149
1159
1150 $ hg manifest --debug --rev 'desc("mBDm-0")' | grep '644 d'
1160 $ hg manifest --debug --rev 'desc("mBDm-0")' | grep '644 d'
1151 b004912a8510032a0350a74daa2803dadfb00e12 644 d
1161 b004912a8510032a0350a74daa2803dadfb00e12 644 d
1152 $ hg manifest --debug --rev 'desc("mDBm-0")' | grep '644 d'
1162 $ hg manifest --debug --rev 'desc("mDBm-0")' | grep '644 d'
1153 b004912a8510032a0350a74daa2803dadfb00e12 644 d
1163 b004912a8510032a0350a74daa2803dadfb00e12 644 d
1154
1164
1155 $ hg manifest --debug --rev 'desc("d-2")' | grep '644 d'
1165 $ hg manifest --debug --rev 'desc("d-2")' | grep '644 d'
1156 b004912a8510032a0350a74daa2803dadfb00e12 644 d
1166 b004912a8510032a0350a74daa2803dadfb00e12 644 d
1157 $ hg manifest --debug --rev 'desc("b-1")' | grep '644 d'
1167 $ hg manifest --debug --rev 'desc("b-1")' | grep '644 d'
1158 d8252ab2e760b0d4e5288fd44cbd15a0fa567e16 644 d (no-changeset !)
1168 d8252ab2e760b0d4e5288fd44cbd15a0fa567e16 644 d (no-changeset !)
1159 ae258f702dfeca05bf9b6a22a97a4b5645570f11 644 d (changeset !)
1169 ae258f702dfeca05bf9b6a22a97a4b5645570f11 644 d (changeset !)
1160 $ hg debugindex d | head -n 4
1170 $ hg debugindex d | head -n 4
1161 rev linkrev nodeid p1 p2
1171 rev linkrev nodeid p1 p2
1162 0 2 d8252ab2e760 000000000000 000000000000 (no-changeset !)
1172 0 2 d8252ab2e760 000000000000 000000000000 (no-changeset !)
1163 0 2 ae258f702dfe 000000000000 000000000000 (changeset !)
1173 0 2 ae258f702dfe 000000000000 000000000000 (changeset !)
1164 1 8 b004912a8510 000000000000 000000000000
1174 1 8 b004912a8510 000000000000 000000000000
1165 2 22 7b79e2fe0c89 000000000000 000000000000 (no-changeset !)
1175 2 22 7b79e2fe0c89 000000000000 000000000000 (no-changeset !)
1166 2 25 5cce88bf349f ae258f702dfe 000000000000 (changeset !)
1176 2 25 5cce88bf349f ae258f702dfe 000000000000 (changeset !)
1167
1177
1168 Log output should not include a merge commit as it did not happen
1178 Log output should not include a merge commit as it did not happen
1169
1179
1170 $ hg log -Gfr 'desc("mBDm-0")' d
1180 $ hg log -Gfr 'desc("mBDm-0")' d
1171 o 8 d-2 re-add d
1181 o 8 d-2 re-add d
1172 |
1182 |
1173 ~
1183 ~
1174
1184
1175 $ hg log -Gfr 'desc("mDBm-0")' d
1185 $ hg log -Gfr 'desc("mDBm-0")' d
1176 o 8 d-2 re-add d
1186 o 8 d-2 re-add d
1177 |
1187 |
1178 ~
1188 ~
1179
1189
1180 $ hg status --copies --rev 'desc("i-0")' --rev 'desc("mBDm-0")'
1190 $ hg status --copies --rev 'desc("i-0")' --rev 'desc("mBDm-0")'
1181 M b
1191 M b
1182 A d
1192 A d
1183 R a
1193 R a
1184 $ hg status --copies --rev 'desc("i-0")' --rev 'desc("mDBm-0")'
1194 $ hg status --copies --rev 'desc("i-0")' --rev 'desc("mDBm-0")'
1185 M b
1195 M b
1186 A d
1196 A d
1187 R a
1197 R a
1188
1198
1189
1199
1190 Comparing with a merge with colliding rename
1200 Comparing with a merge with colliding rename
1191 --------------------------------------------
1201 --------------------------------------------
1192
1202
1203 Subcase: new copy information on both side
1204 ``````````````````````````````````````````
1205
1193 - the "e-" branch renaming b to f (through 'g')
1206 - the "e-" branch renaming b to f (through 'g')
1194 - the "a-" branch renaming d to f (through e)
1207 - the "a-" branch renaming d to f (through e)
1195
1208
1196 $ hg log -G --rev '::(desc("mAEm")+desc("mEAm"))'
1209 $ hg log -G --rev '::(desc("mAEm")+desc("mEAm"))'
1197 o 20 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
1210 o 20 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
1198 |\
1211 |\
1199 +---o 19 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
1212 +---o 19 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
1200 | |/
1213 | |/
1201 | o 10 e-2 g -move-> f
1214 | o 10 e-2 g -move-> f
1202 | |
1215 | |
1203 | o 9 e-1 b -move-> g
1216 | o 9 e-1 b -move-> g
1204 | |
1217 | |
1205 o | 4 a-2: e -move-> f
1218 o | 4 a-2: e -move-> f
1206 | |
1219 | |
1207 o | 3 a-1: d -move-> e
1220 o | 3 a-1: d -move-> e
1208 |/
1221 |/
1209 o 2 i-2: c -move-> d
1222 o 2 i-2: c -move-> d
1210 |
1223 |
1211 o 1 i-1: a -move-> c
1224 o 1 i-1: a -move-> c
1212 |
1225 |
1213 o 0 i-0 initial commit: a b h
1226 o 0 i-0 initial commit: a b h
1214
1227
1215 #if no-changeset
1228 #if no-changeset
1216 $ hg manifest --debug --rev 'desc("mAEm-0")' | grep '644 f'
1229 $ hg manifest --debug --rev 'desc("mAEm-0")' | grep '644 f'
1217 2ff93c643948464ee1f871867910ae43a45b0bea 644 f
1230 2ff93c643948464ee1f871867910ae43a45b0bea 644 f
1218 $ hg manifest --debug --rev 'desc("mEAm-0")' | grep '644 f'
1231 $ hg manifest --debug --rev 'desc("mEAm-0")' | grep '644 f'
1219 2ff93c643948464ee1f871867910ae43a45b0bea 644 f
1232 2ff93c643948464ee1f871867910ae43a45b0bea 644 f
1220 $ hg manifest --debug --rev 'desc("a-2")' | grep '644 f'
1233 $ hg manifest --debug --rev 'desc("a-2")' | grep '644 f'
1221 b76eb76580df486c3d51d63c5c210d4dd43a8ac7 644 f
1234 b76eb76580df486c3d51d63c5c210d4dd43a8ac7 644 f
1222 $ hg manifest --debug --rev 'desc("e-2")' | grep '644 f'
1235 $ hg manifest --debug --rev 'desc("e-2")' | grep '644 f'
1223 e8825b386367b29fec957283a80bb47b47483fe1 644 f
1236 e8825b386367b29fec957283a80bb47b47483fe1 644 f
1224 $ hg debugindex f
1237 $ hg debugindex f
1225 rev linkrev nodeid p1 p2
1238 rev linkrev nodeid p1 p2
1226 0 4 b76eb76580df 000000000000 000000000000
1239 0 4 b76eb76580df 000000000000 000000000000
1227 1 10 e8825b386367 000000000000 000000000000
1240 1 10 e8825b386367 000000000000 000000000000
1228 2 19 2ff93c643948 b76eb76580df e8825b386367
1241 2 19 2ff93c643948 b76eb76580df e8825b386367
1229 #else
1242 #else
1230 $ hg manifest --debug --rev 'desc("mAEm-0")' | grep '644 f'
1243 $ hg manifest --debug --rev 'desc("mAEm-0")' | grep '644 f'
1231 ae258f702dfeca05bf9b6a22a97a4b5645570f11 644 f
1244 ae258f702dfeca05bf9b6a22a97a4b5645570f11 644 f
1232 $ hg manifest --debug --rev 'desc("mEAm-0")' | grep '644 f'
1245 $ hg manifest --debug --rev 'desc("mEAm-0")' | grep '644 f'
1233 ae258f702dfeca05bf9b6a22a97a4b5645570f11 644 f
1246 ae258f702dfeca05bf9b6a22a97a4b5645570f11 644 f
1234 $ hg manifest --debug --rev 'desc("a-2")' | grep '644 f'
1247 $ hg manifest --debug --rev 'desc("a-2")' | grep '644 f'
1235 ae258f702dfeca05bf9b6a22a97a4b5645570f11 644 f
1248 ae258f702dfeca05bf9b6a22a97a4b5645570f11 644 f
1236 $ hg manifest --debug --rev 'desc("e-2")' | grep '644 f'
1249 $ hg manifest --debug --rev 'desc("e-2")' | grep '644 f'
1237 ae258f702dfeca05bf9b6a22a97a4b5645570f11 644 f
1250 ae258f702dfeca05bf9b6a22a97a4b5645570f11 644 f
1238 $ hg debugindex f
1251 $ hg debugindex f
1239 rev linkrev nodeid p1 p2
1252 rev linkrev nodeid p1 p2
1240 0 4 ae258f702dfe 000000000000 000000000000
1253 0 4 ae258f702dfe 000000000000 000000000000
1241 #endif
1254 #endif
1242
1255
1243 # Here the filelog based implementation is not looking at the rename
1256 # Here the filelog based implementation is not looking at the rename
1244 # information (because the file exist on both side). However the changelog
1257 # information (because the file exist on both side). However the changelog
1245 # based on works fine. We have different output.
1258 # based on works fine. We have different output.
1246
1259
1247 $ hg status --copies --rev 'desc("a-2")' --rev 'desc("mAEm-0")'
1260 $ hg status --copies --rev 'desc("a-2")' --rev 'desc("mAEm-0")'
1248 M f (no-changeset !)
1261 M f (no-changeset !)
1249 b (no-filelog no-changeset !)
1262 b (no-filelog no-changeset !)
1250 R b
1263 R b
1251 $ hg status --copies --rev 'desc("a-2")' --rev 'desc("mEAm-0")'
1264 $ hg status --copies --rev 'desc("a-2")' --rev 'desc("mEAm-0")'
1252 M f (no-changeset !)
1265 M f (no-changeset !)
1253 b (no-filelog no-changeset !)
1266 b (no-filelog no-changeset !)
1254 R b
1267 R b
1255 $ hg status --copies --rev 'desc("e-2")' --rev 'desc("mAEm-0")'
1268 $ hg status --copies --rev 'desc("e-2")' --rev 'desc("mAEm-0")'
1256 M f (no-changeset !)
1269 M f (no-changeset !)
1257 d (no-filelog no-changeset !)
1270 d (no-filelog no-changeset !)
1258 R d
1271 R d
1259 $ hg status --copies --rev 'desc("e-2")' --rev 'desc("mEAm-0")'
1272 $ hg status --copies --rev 'desc("e-2")' --rev 'desc("mEAm-0")'
1260 M f (no-changeset !)
1273 M f (no-changeset !)
1261 d (no-filelog no-changeset !)
1274 d (no-filelog no-changeset !)
1262 R d
1275 R d
1263 $ hg status --copies --rev 'desc("i-2")' --rev 'desc("a-2")'
1276 $ hg status --copies --rev 'desc("i-2")' --rev 'desc("a-2")'
1264 A f
1277 A f
1265 d
1278 d
1266 R d
1279 R d
1267 $ hg status --copies --rev 'desc("i-2")' --rev 'desc("e-2")'
1280 $ hg status --copies --rev 'desc("i-2")' --rev 'desc("e-2")'
1268 A f
1281 A f
1269 b
1282 b
1270 R b
1283 R b
1271
1284
1272 # From here, we run status against revision where both source file exists.
1285 # From here, we run status against revision where both source file exists.
1273 #
1286 #
1274 # The filelog based implementation picks an arbitrary side based on revision
1287 # The filelog based implementation picks an arbitrary side based on revision
1275 # numbers. So the same side "wins" whatever the parents order is. This is
1288 # numbers. So the same side "wins" whatever the parents order is. This is
1276 # sub-optimal because depending on revision numbers means the result can be
1289 # sub-optimal because depending on revision numbers means the result can be
1277 # different from one repository to the next.
1290 # different from one repository to the next.
1278 #
1291 #
1279 # The changeset based algorithm use the parent order to break tie on conflicting
1292 # The changeset based algorithm use the parent order to break tie on conflicting
1280 # information and will have a different order depending on who is p1 and p2.
1293 # information and will have a different order depending on who is p1 and p2.
1281 # That order is stable accross repositories. (data from p1 prevails)
1294 # That order is stable accross repositories. (data from p1 prevails)
1282
1295
1283 $ hg status --copies --rev 'desc("i-2")' --rev 'desc("mAEm-0")'
1296 $ hg status --copies --rev 'desc("i-2")' --rev 'desc("mAEm-0")'
1284 A f
1297 A f
1285 d
1298 d
1286 R b
1299 R b
1287 R d
1300 R d
1288 $ hg status --copies --rev 'desc("i-2")' --rev 'desc("mEAm-0")'
1301 $ hg status --copies --rev 'desc("i-2")' --rev 'desc("mEAm-0")'
1289 A f
1302 A f
1290 d (filelog !)
1303 d (filelog !)
1291 b (no-filelog !)
1304 b (no-filelog !)
1292 R b
1305 R b
1293 R d
1306 R d
1294 $ hg status --copies --rev 'desc("i-0")' --rev 'desc("mAEm-0")'
1307 $ hg status --copies --rev 'desc("i-0")' --rev 'desc("mAEm-0")'
1295 A f
1308 A f
1296 a
1309 a
1297 R a
1310 R a
1298 R b
1311 R b
1299 $ hg status --copies --rev 'desc("i-0")' --rev 'desc("mEAm-0")'
1312 $ hg status --copies --rev 'desc("i-0")' --rev 'desc("mEAm-0")'
1300 A f
1313 A f
1301 a (filelog !)
1314 a (filelog !)
1302 b (no-filelog !)
1315 b (no-filelog !)
1303 R a
1316 R a
1304 R b
1317 R b
1305
1318
1306
1319
1320 Subcase: existing copy information overwritten on one branch
1321 ````````````````````````````````````````````````````````````
1322
1307 Note:
1323 Note:
1308 | In this case, one of the merge wrongly record a merge while there is none.
1324 | In this case, one of the merge wrongly record a merge while there is none.
1309 | This lead to bad copy tracing information to be dug up.
1325 | This lead to bad copy tracing information to be dug up.
1310
1326
1311
1327
1312 Merge:
1328 Merge:
1313 - one with change to an unrelated file (b)
1329 - one with change to an unrelated file (b)
1314 - one overwriting a file (d) with a rename (from h to i to d)
1330 - one overwriting a file (d) with a rename (from h to i to d)
1315
1331
1316 $ hg log -G --rev '::(desc("mBFm")+desc("mFBm"))'
1332 $ hg log -G --rev '::(desc("mBFm")+desc("mFBm"))'
1317 o 24 mFBm-0 simple merge - B side: unrelated change, F side: overwrite d with a copy (from h->i->d) - the other way
1333 o 24 mFBm-0 simple merge - B side: unrelated change, F side: overwrite d with a copy (from h->i->d) - the other way
1318 |\
1334 |\
1319 +---o 23 mBFm-0 simple merge - B side: unrelated change, F side: overwrite d with a copy (from h->i->d) - one way
1335 +---o 23 mBFm-0 simple merge - B side: unrelated change, F side: overwrite d with a copy (from h->i->d) - one way
1320 | |/
1336 | |/
1321 | o 22 f-2: rename i -> d
1337 | o 22 f-2: rename i -> d
1322 | |
1338 | |
1323 | o 21 f-1: rename h -> i
1339 | o 21 f-1: rename h -> i
1324 | |
1340 | |
1325 o | 5 b-1: b update
1341 o | 5 b-1: b update
1326 |/
1342 |/
1327 o 2 i-2: c -move-> d
1343 o 2 i-2: c -move-> d
1328 |
1344 |
1329 o 1 i-1: a -move-> c
1345 o 1 i-1: a -move-> c
1330 |
1346 |
1331 o 0 i-0 initial commit: a b h
1347 o 0 i-0 initial commit: a b h
1332
1348
1333 $ hg status --copies --rev 'desc("i-0")' --rev 'desc("mBFm-0")'
1349 $ hg status --copies --rev 'desc("i-0")' --rev 'desc("mBFm-0")'
1334 M b
1350 M b
1335 A d
1351 A d
1336 h
1352 h
1337 R a
1353 R a
1338 R h
1354 R h
1339 $ hg status --copies --rev 'desc("i-0")' --rev 'desc("mFBm-0")'
1355 $ hg status --copies --rev 'desc("i-0")' --rev 'desc("mFBm-0")'
1340 M b
1356 M b
1341 A d
1357 A d
1342 h
1358 h
1343 R a
1359 R a
1344 R h
1360 R h
1345 $ hg status --copies --rev 'desc("b-1")' --rev 'desc("mBFm-0")'
1361 $ hg status --copies --rev 'desc("b-1")' --rev 'desc("mBFm-0")'
1346 M d (no-changeset !)
1362 M d (no-changeset !)
1347 h (no-filelog no-changeset !)
1363 h (no-filelog no-changeset !)
1348 R h
1364 R h
1349 $ hg status --copies --rev 'desc("f-2")' --rev 'desc("mBFm-0")'
1365 $ hg status --copies --rev 'desc("f-2")' --rev 'desc("mBFm-0")'
1350 M b
1366 M b
1351 $ hg status --copies --rev 'desc("f-1")' --rev 'desc("mBFm-0")'
1367 $ hg status --copies --rev 'desc("f-1")' --rev 'desc("mBFm-0")'
1352 M b
1368 M b
1353 M d (no-changeset !)
1369 M d (no-changeset !)
1354 i (no-filelog no-changeset !)
1370 i (no-filelog no-changeset !)
1355 R i
1371 R i
1356 $ hg status --copies --rev 'desc("b-1")' --rev 'desc("mFBm-0")'
1372 $ hg status --copies --rev 'desc("b-1")' --rev 'desc("mFBm-0")'
1357 M d (no-changeset !)
1373 M d (no-changeset !)
1358 h (no-filelog no-changeset !)
1374 h (no-filelog no-changeset !)
1359 R h
1375 R h
1360 $ hg status --copies --rev 'desc("f-2")' --rev 'desc("mFBm-0")'
1376 $ hg status --copies --rev 'desc("f-2")' --rev 'desc("mFBm-0")'
1361 M b
1377 M b
1362 $ hg status --copies --rev 'desc("f-1")' --rev 'desc("mFBm-0")'
1378 $ hg status --copies --rev 'desc("f-1")' --rev 'desc("mFBm-0")'
1363 M b
1379 M b
1364 M d (no-changeset !)
1380 M d (no-changeset !)
1365 i (no-filelog no-changeset !)
1381 i (no-filelog no-changeset !)
1366 R i
1382 R i
1367
1383
1368 #if no-changeset
1384 #if no-changeset
1369 $ hg log -Gfr 'desc("mBFm-0")' d
1385 $ hg log -Gfr 'desc("mBFm-0")' d
1370 o 22 f-2: rename i -> d
1386 o 22 f-2: rename i -> d
1371 |
1387 |
1372 o 21 f-1: rename h -> i
1388 o 21 f-1: rename h -> i
1373 :
1389 :
1374 o 0 i-0 initial commit: a b h
1390 o 0 i-0 initial commit: a b h
1375
1391
1376 #else
1392 #else
1377 BROKEN: `hg log --follow <file>` relies on filelog metadata to work
1393 BROKEN: `hg log --follow <file>` relies on filelog metadata to work
1378 $ hg log -Gfr 'desc("mBFm-0")' d
1394 $ hg log -Gfr 'desc("mBFm-0")' d
1379 o 2 i-2: c -move-> d
1395 o 2 i-2: c -move-> d
1380 |
1396 |
1381 ~
1397 ~
1382 #endif
1398 #endif
1383
1399
1384 #if no-changeset
1400 #if no-changeset
1385 $ hg log -Gfr 'desc("mFBm-0")' d
1401 $ hg log -Gfr 'desc("mFBm-0")' d
1386 o 22 f-2: rename i -> d
1402 o 22 f-2: rename i -> d
1387 |
1403 |
1388 o 21 f-1: rename h -> i
1404 o 21 f-1: rename h -> i
1389 :
1405 :
1390 o 0 i-0 initial commit: a b h
1406 o 0 i-0 initial commit: a b h
1391
1407
1392 #else
1408 #else
1393 BROKEN: `hg log --follow <file>` relies on filelog metadata to work
1409 BROKEN: `hg log --follow <file>` relies on filelog metadata to work
1394 $ hg log -Gfr 'desc("mFBm-0")' d
1410 $ hg log -Gfr 'desc("mFBm-0")' d
1395 o 2 i-2: c -move-> d
1411 o 2 i-2: c -move-> d
1396 |
1412 |
1397 ~
1413 ~
1398 #endif
1414 #endif
1399
1415
1416 Subcase: reset of the copy history on one side
1417 ``````````````````````````````````````````````
1400
1418
1401 Merge:
1419 Merge:
1402 - one with change to a file
1420 - one with change to a file
1403 - one deleting and recreating the file
1421 - one deleting and recreating the file
1404
1422
1405 Unlike in the 'BD/DB' cases, an actual merge happened here. So we should
1423 Unlike in the 'BD/DB' cases, an actual merge happened here. So we should
1406 consider history and rename on both branch of the merge.
1424 consider history and rename on both branch of the merge.
1407
1425
1408 $ hg log -G --rev '::(desc("mDGm")+desc("mGDm"))'
1426 $ hg log -G --rev '::(desc("mDGm")+desc("mGDm"))'
1409 o 27 mGDm-0 actual content merge, copies on one side - D side: delete and re-add (different content), G side: update content - the other way
1427 o 27 mGDm-0 actual content merge, copies on one side - D side: delete and re-add (different content), G side: update content - the other way
1410 |\
1428 |\
1411 +---o 26 mDGm-0 actual content merge, copies on one side - D side: delete and re-add (different content), G side: update content - one way
1429 +---o 26 mDGm-0 actual content merge, copies on one side - D side: delete and re-add (different content), G side: update content - one way
1412 | |/
1430 | |/
1413 | o 25 g-1: update d
1431 | o 25 g-1: update d
1414 | |
1432 | |
1415 o | 8 d-2 re-add d
1433 o | 8 d-2 re-add d
1416 | |
1434 | |
1417 o | 7 d-1 delete d
1435 o | 7 d-1 delete d
1418 |/
1436 |/
1419 o 2 i-2: c -move-> d
1437 o 2 i-2: c -move-> d
1420 |
1438 |
1421 o 1 i-1: a -move-> c
1439 o 1 i-1: a -move-> c
1422 |
1440 |
1423 o 0 i-0 initial commit: a b h
1441 o 0 i-0 initial commit: a b h
1424
1442
1425 One side of the merge have a long history with rename. The other side of the
1443 One side of the merge have a long history with rename. The other side of the
1426 merge point to a new file with a smaller history. Each side is "valid".
1444 merge point to a new file with a smaller history. Each side is "valid".
1427
1445
1428 (and again the filelog based algorithm only explore one, with a pick based on
1446 (and again the filelog based algorithm only explore one, with a pick based on
1429 revision numbers)
1447 revision numbers)
1430
1448
1431 $ hg status --copies --rev 'desc("i-0")' --rev 'desc("mDGm-0")'
1449 $ hg status --copies --rev 'desc("i-0")' --rev 'desc("mDGm-0")'
1432 A d
1450 A d
1433 a (filelog !)
1451 a (filelog !)
1434 R a
1452 R a
1435 $ hg status --copies --rev 'desc("i-0")' --rev 'desc("mGDm-0")'
1453 $ hg status --copies --rev 'desc("i-0")' --rev 'desc("mGDm-0")'
1436 A d
1454 A d
1437 a
1455 a
1438 R a
1456 R a
1439 $ hg status --copies --rev 'desc("d-2")' --rev 'desc("mDGm-0")'
1457 $ hg status --copies --rev 'desc("d-2")' --rev 'desc("mDGm-0")'
1440 M d
1458 M d
1441 $ hg status --copies --rev 'desc("d-2")' --rev 'desc("mGDm-0")'
1459 $ hg status --copies --rev 'desc("d-2")' --rev 'desc("mGDm-0")'
1442 M d
1460 M d
1443 $ hg status --copies --rev 'desc("g-1")' --rev 'desc("mDGm-0")'
1461 $ hg status --copies --rev 'desc("g-1")' --rev 'desc("mDGm-0")'
1444 M d
1462 M d
1445 $ hg status --copies --rev 'desc("g-1")' --rev 'desc("mGDm-0")'
1463 $ hg status --copies --rev 'desc("g-1")' --rev 'desc("mGDm-0")'
1446 M d
1464 M d
1447
1465
1448 #if no-changeset
1466 #if no-changeset
1449 $ hg log -Gfr 'desc("mDGm-0")' d
1467 $ hg log -Gfr 'desc("mDGm-0")' d
1450 o 26 mDGm-0 actual content merge, copies on one side - D side: delete and re-add (different content), G side: update content - one way
1468 o 26 mDGm-0 actual content merge, copies on one side - D side: delete and re-add (different content), G side: update content - one way
1451 |\
1469 |\
1452 | o 25 g-1: update d
1470 | o 25 g-1: update d
1453 | |
1471 | |
1454 o | 8 d-2 re-add d
1472 o | 8 d-2 re-add d
1455 |/
1473 |/
1456 o 2 i-2: c -move-> d
1474 o 2 i-2: c -move-> d
1457 |
1475 |
1458 o 1 i-1: a -move-> c
1476 o 1 i-1: a -move-> c
1459 |
1477 |
1460 o 0 i-0 initial commit: a b h
1478 o 0 i-0 initial commit: a b h
1461
1479
1462 #else
1480 #else
1463 BROKEN: `hg log --follow <file>` relies on filelog metadata to work
1481 BROKEN: `hg log --follow <file>` relies on filelog metadata to work
1464 $ hg log -Gfr 'desc("mDGm-0")' d
1482 $ hg log -Gfr 'desc("mDGm-0")' d
1465 o 26 mDGm-0 actual content merge, copies on one side - D side: delete and re-add (different content), G side: update content - one way
1483 o 26 mDGm-0 actual content merge, copies on one side - D side: delete and re-add (different content), G side: update content - one way
1466 |\
1484 |\
1467 | o 25 g-1: update d
1485 | o 25 g-1: update d
1468 | |
1486 | |
1469 o | 8 d-2 re-add d
1487 o | 8 d-2 re-add d
1470 |/
1488 |/
1471 o 2 i-2: c -move-> d
1489 o 2 i-2: c -move-> d
1472 |
1490 |
1473 ~
1491 ~
1474 #endif
1492 #endif
1475
1493
1476
1494
1477 #if no-changeset
1495 #if no-changeset
1478 $ hg log -Gfr 'desc("mDGm-0")' d
1496 $ hg log -Gfr 'desc("mDGm-0")' d
1479 o 26 mDGm-0 actual content merge, copies on one side - D side: delete and re-add (different content), G side: update content - one way
1497 o 26 mDGm-0 actual content merge, copies on one side - D side: delete and re-add (different content), G side: update content - one way
1480 |\
1498 |\
1481 | o 25 g-1: update d
1499 | o 25 g-1: update d
1482 | |
1500 | |
1483 o | 8 d-2 re-add d
1501 o | 8 d-2 re-add d
1484 |/
1502 |/
1485 o 2 i-2: c -move-> d
1503 o 2 i-2: c -move-> d
1486 |
1504 |
1487 o 1 i-1: a -move-> c
1505 o 1 i-1: a -move-> c
1488 |
1506 |
1489 o 0 i-0 initial commit: a b h
1507 o 0 i-0 initial commit: a b h
1490
1508
1491 #else
1509 #else
1492 BROKEN: `hg log --follow <file>` relies on filelog metadata to work
1510 BROKEN: `hg log --follow <file>` relies on filelog metadata to work
1493 $ hg log -Gfr 'desc("mDGm-0")' d
1511 $ hg log -Gfr 'desc("mDGm-0")' d
1494 o 26 mDGm-0 actual content merge, copies on one side - D side: delete and re-add (different content), G side: update content - one way
1512 o 26 mDGm-0 actual content merge, copies on one side - D side: delete and re-add (different content), G side: update content - one way
1495 |\
1513 |\
1496 | o 25 g-1: update d
1514 | o 25 g-1: update d
1497 | |
1515 | |
1498 o | 8 d-2 re-add d
1516 o | 8 d-2 re-add d
1499 |/
1517 |/
1500 o 2 i-2: c -move-> d
1518 o 2 i-2: c -move-> d
1501 |
1519 |
1502 ~
1520 ~
1503 #endif
1521 #endif
1504
1522
1523 Subcase: merging a change to a file with a "copy overwrite" to that file from another branch
1524 ````````````````````````````````````````````````````````````````````````````````````````````
1505
1525
1506 Merge:
1526 Merge:
1507 - one with change to a file (d)
1527 - one with change to a file (d)
1508 - one overwriting that file with a rename (from h to i, to d)
1528 - one overwriting that file with a rename (from h to i, to d)
1509
1529
1510 This case is similar to BF/FB, but an actual merge happens, so both side of the
1530 This case is similar to BF/FB, but an actual merge happens, so both side of the
1511 history are relevant.
1531 history are relevant.
1512
1532
1513
1533
1514 $ hg log -G --rev '::(desc("mGFm")+desc("mFGm"))'
1534 $ hg log -G --rev '::(desc("mGFm")+desc("mFGm"))'
1515 o 29 mGFm-0 merge - G side: content change, F side: copy overwrite, no content change - the other way
1535 o 29 mGFm-0 merge - G side: content change, F side: copy overwrite, no content change - the other way
1516 |\
1536 |\
1517 +---o 28 mFGm-0 merge - G side: content change, F side: copy overwrite, no content change - one way
1537 +---o 28 mFGm-0 merge - G side: content change, F side: copy overwrite, no content change - one way
1518 | |/
1538 | |/
1519 | o 25 g-1: update d
1539 | o 25 g-1: update d
1520 | |
1540 | |
1521 o | 22 f-2: rename i -> d
1541 o | 22 f-2: rename i -> d
1522 | |
1542 | |
1523 o | 21 f-1: rename h -> i
1543 o | 21 f-1: rename h -> i
1524 |/
1544 |/
1525 o 2 i-2: c -move-> d
1545 o 2 i-2: c -move-> d
1526 |
1546 |
1527 o 1 i-1: a -move-> c
1547 o 1 i-1: a -move-> c
1528 |
1548 |
1529 o 0 i-0 initial commit: a b h
1549 o 0 i-0 initial commit: a b h
1530
1550
1531
1551
1532 Note:
1552 Note:
1533 | In this case, the merge get conflicting information since on one side we have
1553 | In this case, the merge get conflicting information since on one side we have
1534 | "a -> c -> d". and one the other one we have "h -> i -> d".
1554 | "a -> c -> d". and one the other one we have "h -> i -> d".
1535 |
1555 |
1536 | The current code arbitrarily pick one side depending the ordering of the merged hash:
1556 | The current code arbitrarily pick one side depending the ordering of the merged hash:
1537
1557
1538 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"):
1558 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"):
1539
1559
1540 Details on this hash ordering pick:
1560 Details on this hash ordering pick:
1541
1561
1542 $ hg manifest --debug 'desc("g-1")' | egrep 'd$'
1562 $ hg manifest --debug 'desc("g-1")' | egrep 'd$'
1543 17ec97e605773eb44a117d1136b3849bcdc1924f 644 d (no-changeset !)
1563 17ec97e605773eb44a117d1136b3849bcdc1924f 644 d (no-changeset !)
1544 5cce88bf349f7c742bb440f2c53f81db9c294279 644 d (changeset !)
1564 5cce88bf349f7c742bb440f2c53f81db9c294279 644 d (changeset !)
1545 $ hg status --copies --rev 'desc("i-0")' --rev 'desc("g-1")' d
1565 $ hg status --copies --rev 'desc("i-0")' --rev 'desc("g-1")' d
1546 A d
1566 A d
1547 a (no-changeset no-compatibility !)
1567 a (no-changeset no-compatibility !)
1548
1568
1549 $ hg manifest --debug 'desc("f-2")' | egrep 'd$'
1569 $ hg manifest --debug 'desc("f-2")' | egrep 'd$'
1550 7b79e2fe0c8924e0e598a82f048a7b024afa4d96 644 d (no-changeset !)
1570 7b79e2fe0c8924e0e598a82f048a7b024afa4d96 644 d (no-changeset !)
1551 ae258f702dfeca05bf9b6a22a97a4b5645570f11 644 d (changeset !)
1571 ae258f702dfeca05bf9b6a22a97a4b5645570f11 644 d (changeset !)
1552 $ hg status --copies --rev 'desc("i-0")' --rev 'desc("f-2")' d
1572 $ hg status --copies --rev 'desc("i-0")' --rev 'desc("f-2")' d
1553 A d
1573 A d
1554 h (no-changeset no-compatibility !)
1574 h (no-changeset no-compatibility !)
1555
1575
1556 Copy tracing data on the resulting merge:
1576 Copy tracing data on the resulting merge:
1557
1577
1558 $ hg status --copies --rev 'desc("i-0")' --rev 'desc("mFGm-0")'
1578 $ hg status --copies --rev 'desc("i-0")' --rev 'desc("mFGm-0")'
1559 A d
1579 A d
1560 h (no-filelog !)
1580 h (no-filelog !)
1561 a (filelog !)
1581 a (filelog !)
1562 R a
1582 R a
1563 R h
1583 R h
1564 $ hg status --copies --rev 'desc("i-0")' --rev 'desc("mGFm-0")'
1584 $ hg status --copies --rev 'desc("i-0")' --rev 'desc("mGFm-0")'
1565 A d
1585 A d
1566 a (no-changeset !)
1586 a (no-changeset !)
1567 h (changeset !)
1587 h (changeset !)
1568 R a
1588 R a
1569 R h
1589 R h
1570 $ hg status --copies --rev 'desc("f-2")' --rev 'desc("mFGm-0")'
1590 $ hg status --copies --rev 'desc("f-2")' --rev 'desc("mFGm-0")'
1571 M d
1591 M d
1572 $ hg status --copies --rev 'desc("f-2")' --rev 'desc("mGFm-0")'
1592 $ hg status --copies --rev 'desc("f-2")' --rev 'desc("mGFm-0")'
1573 M d
1593 M d
1574 $ hg status --copies --rev 'desc("f-1")' --rev 'desc("mFGm-0")'
1594 $ hg status --copies --rev 'desc("f-1")' --rev 'desc("mFGm-0")'
1575 M d
1595 M d
1576 i (no-filelog !)
1596 i (no-filelog !)
1577 R i
1597 R i
1578 $ hg status --copies --rev 'desc("f-1")' --rev 'desc("mGFm-0")'
1598 $ hg status --copies --rev 'desc("f-1")' --rev 'desc("mGFm-0")'
1579 M d
1599 M d
1580 i (no-filelog !)
1600 i (no-filelog !)
1581 R i
1601 R i
1582 $ hg status --copies --rev 'desc("g-1")' --rev 'desc("mFGm-0")'
1602 $ hg status --copies --rev 'desc("g-1")' --rev 'desc("mFGm-0")'
1583 M d (no-changeset !)
1603 M d (no-changeset !)
1584 h (no-filelog no-changeset !)
1604 h (no-filelog no-changeset !)
1585 R h
1605 R h
1586 $ hg status --copies --rev 'desc("g-1")' --rev 'desc("mGFm-0")'
1606 $ hg status --copies --rev 'desc("g-1")' --rev 'desc("mGFm-0")'
1587 M d (no-changeset !)
1607 M d (no-changeset !)
1588 h (no-filelog no-changeset !)
1608 h (no-filelog no-changeset !)
1589 R h
1609 R h
1590
1610
1591 #if no-changeset
1611 #if no-changeset
1592 $ hg log -Gfr 'desc("mFGm-0")' d
1612 $ hg log -Gfr 'desc("mFGm-0")' d
1593 o 28 mFGm-0 merge - G side: content change, F side: copy overwrite, no content change - one way
1613 o 28 mFGm-0 merge - G side: content change, F side: copy overwrite, no content change - one way
1594 |\
1614 |\
1595 | o 25 g-1: update d
1615 | o 25 g-1: update d
1596 | |
1616 | |
1597 o | 22 f-2: rename i -> d
1617 o | 22 f-2: rename i -> d
1598 | |
1618 | |
1599 o | 21 f-1: rename h -> i
1619 o | 21 f-1: rename h -> i
1600 |/
1620 |/
1601 o 2 i-2: c -move-> d
1621 o 2 i-2: c -move-> d
1602 |
1622 |
1603 o 1 i-1: a -move-> c
1623 o 1 i-1: a -move-> c
1604 |
1624 |
1605 o 0 i-0 initial commit: a b h
1625 o 0 i-0 initial commit: a b h
1606
1626
1607 #else
1627 #else
1608 BROKEN: `hg log --follow <file>` relies on filelog metadata to work
1628 BROKEN: `hg log --follow <file>` relies on filelog metadata to work
1609 $ hg log -Gfr 'desc("mFGm-0")' d
1629 $ hg log -Gfr 'desc("mFGm-0")' d
1610 o 25 g-1: update d
1630 o 25 g-1: update d
1611 |
1631 |
1612 o 2 i-2: c -move-> d
1632 o 2 i-2: c -move-> d
1613 |
1633 |
1614 ~
1634 ~
1615 #endif
1635 #endif
1616
1636
1617 #if no-changeset
1637 #if no-changeset
1618 $ hg log -Gfr 'desc("mGFm-0")' d
1638 $ hg log -Gfr 'desc("mGFm-0")' d
1619 o 29 mGFm-0 merge - G side: content change, F side: copy overwrite, no content change - the other way
1639 o 29 mGFm-0 merge - G side: content change, F side: copy overwrite, no content change - the other way
1620 |\
1640 |\
1621 | o 25 g-1: update d
1641 | o 25 g-1: update d
1622 | |
1642 | |
1623 o | 22 f-2: rename i -> d
1643 o | 22 f-2: rename i -> d
1624 | |
1644 | |
1625 o | 21 f-1: rename h -> i
1645 o | 21 f-1: rename h -> i
1626 |/
1646 |/
1627 o 2 i-2: c -move-> d
1647 o 2 i-2: c -move-> d
1628 |
1648 |
1629 o 1 i-1: a -move-> c
1649 o 1 i-1: a -move-> c
1630 |
1650 |
1631 o 0 i-0 initial commit: a b h
1651 o 0 i-0 initial commit: a b h
1632
1652
1633 #else
1653 #else
1634 BROKEN: `hg log --follow <file>` relies on filelog metadata to work
1654 BROKEN: `hg log --follow <file>` relies on filelog metadata to work
1635 $ hg log -Gfr 'desc("mGFm-0")' d
1655 $ hg log -Gfr 'desc("mGFm-0")' d
1636 o 25 g-1: update d
1656 o 25 g-1: update d
1637 |
1657 |
1638 o 2 i-2: c -move-> d
1658 o 2 i-2: c -move-> d
1639 |
1659 |
1640 ~
1660 ~
1641 #endif
1661 #endif
1642
1662
1643
1663
1644 Comparing with merging with a deletion (and keeping the file)
1664 Comparing with merging with a deletion (and keeping the file)
1645 -------------------------------------------------------------
1665 -------------------------------------------------------------
1646
1666
1647 Merge:
1667 Merge:
1648 - one removing a file (d)
1668 - one removing a file (d)
1649 - one updating that file
1669 - one updating that file
1650 - the merge keep the modified version of the file (canceling the delete)
1670 - the merge keep the modified version of the file (canceling the delete)
1651
1671
1652 In this case, the file keep on living after the merge. So we should not drop its
1672 In this case, the file keep on living after the merge. So we should not drop its
1653 copy tracing chain.
1673 copy tracing chain.
1654
1674
1655 $ hg log -G --rev '::(desc("mCGm")+desc("mGCm"))'
1675 $ hg log -G --rev '::(desc("mCGm")+desc("mGCm"))'
1656 o 31 mGCm-0 merge updated/deleted - revive the file (updated content) - the other way
1676 o 31 mGCm-0 merge updated/deleted - revive the file (updated content) - the other way
1657 |\
1677 |\
1658 +---o 30 mCGm-0 merge updated/deleted - revive the file (updated content) - one way
1678 +---o 30 mCGm-0 merge updated/deleted - revive the file (updated content) - one way
1659 | |/
1679 | |/
1660 | o 25 g-1: update d
1680 | o 25 g-1: update d
1661 | |
1681 | |
1662 o | 6 c-1 delete d
1682 o | 6 c-1 delete d
1663 |/
1683 |/
1664 o 2 i-2: c -move-> d
1684 o 2 i-2: c -move-> d
1665 |
1685 |
1666 o 1 i-1: a -move-> c
1686 o 1 i-1: a -move-> c
1667 |
1687 |
1668 o 0 i-0 initial commit: a b h
1688 o 0 i-0 initial commit: a b h
1669
1689
1670
1690
1671 'a' is the copy source of 'd'
1691 'a' is the copy source of 'd'
1672
1692
1673 $ hg status --copies --rev 'desc("i-0")' --rev 'desc("mCGm-0")'
1693 $ hg status --copies --rev 'desc("i-0")' --rev 'desc("mCGm-0")'
1674 A d
1694 A d
1675 a (no-compatibility no-changeset !)
1695 a (no-compatibility no-changeset !)
1676 R a
1696 R a
1677 $ hg status --copies --rev 'desc("i-0")' --rev 'desc("mGCm-0")'
1697 $ hg status --copies --rev 'desc("i-0")' --rev 'desc("mGCm-0")'
1678 A d
1698 A d
1679 a (no-compatibility no-changeset !)
1699 a (no-compatibility no-changeset !)
1680 R a
1700 R a
1681 $ hg status --copies --rev 'desc("c-1")' --rev 'desc("mCGm-0")'
1701 $ hg status --copies --rev 'desc("c-1")' --rev 'desc("mCGm-0")'
1682 A d
1702 A d
1683 $ hg status --copies --rev 'desc("c-1")' --rev 'desc("mGCm-0")'
1703 $ hg status --copies --rev 'desc("c-1")' --rev 'desc("mGCm-0")'
1684 A d
1704 A d
1685 $ hg status --copies --rev 'desc("g-1")' --rev 'desc("mCGm-0")'
1705 $ hg status --copies --rev 'desc("g-1")' --rev 'desc("mCGm-0")'
1686 $ hg status --copies --rev 'desc("g-1")' --rev 'desc("mGCm-0")'
1706 $ hg status --copies --rev 'desc("g-1")' --rev 'desc("mGCm-0")'
1687
1707
1688
1708
1689 Comparing with merge restoring an untouched deleted file
1709 Comparing with merge restoring an untouched deleted file
1690 --------------------------------------------------------
1710 --------------------------------------------------------
1691
1711
1692 Merge:
1712 Merge:
1693 - one removing a file (d)
1713 - one removing a file (d)
1694 - one leaving the file untouched
1714 - one leaving the file untouched
1695 - the merge actively restore the file to the same content.
1715 - the merge actively restore the file to the same content.
1696
1716
1697 In this case, the file keep on living after the merge. So we should not drop its
1717 In this case, the file keep on living after the merge. So we should not drop its
1698 copy tracing chain.
1718 copy tracing chain.
1699
1719
1700 $ hg log -G --rev '::(desc("mCB-revert-m")+desc("mBC-revert-m"))'
1720 $ hg log -G --rev '::(desc("mCB-revert-m")+desc("mBC-revert-m"))'
1701 o 33 mBC-revert-m-0 merge explicitely revive deleted file - B side: unrelated change, C side: delete d (restored by merge) - the other way
1721 o 33 mBC-revert-m-0 merge explicitely revive deleted file - B side: unrelated change, C side: delete d (restored by merge) - the other way
1702 |\
1722 |\
1703 +---o 32 mCB-revert-m-0 merge explicitely revive deleted file - B side: unrelated change, C side: delete d (restored by merge) - one way
1723 +---o 32 mCB-revert-m-0 merge explicitely revive deleted file - B side: unrelated change, C side: delete d (restored by merge) - one way
1704 | |/
1724 | |/
1705 | o 6 c-1 delete d
1725 | o 6 c-1 delete d
1706 | |
1726 | |
1707 o | 5 b-1: b update
1727 o | 5 b-1: b update
1708 |/
1728 |/
1709 o 2 i-2: c -move-> d
1729 o 2 i-2: c -move-> d
1710 |
1730 |
1711 o 1 i-1: a -move-> c
1731 o 1 i-1: a -move-> c
1712 |
1732 |
1713 o 0 i-0 initial commit: a b h
1733 o 0 i-0 initial commit: a b h
1714
1734
1715
1735
1716 'a' is the the copy source of 'd'
1736 'a' is the the copy source of 'd'
1717
1737
1718 $ hg status --copies --rev 'desc("i-0")' --rev 'desc("mCB-revert-m-0")'
1738 $ hg status --copies --rev 'desc("i-0")' --rev 'desc("mCB-revert-m-0")'
1719 M b
1739 M b
1720 A d
1740 A d
1721 a (no-compatibility no-changeset !)
1741 a (no-compatibility no-changeset !)
1722 R a
1742 R a
1723 $ hg status --copies --rev 'desc("i-0")' --rev 'desc("mBC-revert-m-0")'
1743 $ hg status --copies --rev 'desc("i-0")' --rev 'desc("mBC-revert-m-0")'
1724 M b
1744 M b
1725 A d
1745 A d
1726 a (no-compatibility no-changeset !)
1746 a (no-compatibility no-changeset !)
1727 R a
1747 R a
1728 $ hg status --copies --rev 'desc("c-1")' --rev 'desc("mCB-revert-m-0")'
1748 $ hg status --copies --rev 'desc("c-1")' --rev 'desc("mCB-revert-m-0")'
1729 M b
1749 M b
1730 A d
1750 A d
1731 $ hg status --copies --rev 'desc("c-1")' --rev 'desc("mBC-revert-m-0")'
1751 $ hg status --copies --rev 'desc("c-1")' --rev 'desc("mBC-revert-m-0")'
1732 M b
1752 M b
1733 A d
1753 A d
1734 $ hg status --copies --rev 'desc("b-1")' --rev 'desc("mCB-revert-m-0")'
1754 $ hg status --copies --rev 'desc("b-1")' --rev 'desc("mCB-revert-m-0")'
1735 $ hg status --copies --rev 'desc("b-1")' --rev 'desc("mBC-revert-m-0")'
1755 $ hg status --copies --rev 'desc("b-1")' --rev 'desc("mBC-revert-m-0")'
1736
1756
1737
1757
1738 Merging a branch where a rename was deleted with a branch where the same file was renamed
1758 Merging a branch where a rename was deleted with a branch where the same file was renamed
1739 ------------------------------------------------------------------------------------------
1759 ------------------------------------------------------------------------------------------
1740
1760
1741 Create a "conflicting" merge where `d` get removed on one branch before its
1761 Create a "conflicting" merge where `d` get removed on one branch before its
1742 rename information actually conflict with the other branch.
1762 rename information actually conflict with the other branch.
1743
1763
1744 (the copy information from the branch that was not deleted should win).
1764 (the copy information from the branch that was not deleted should win).
1745
1765
1746 $ hg log -G --rev '::(desc("mCH-delete-before-conflict-m")+desc("mHC-delete-before-conflict-m"))'
1766 $ hg log -G --rev '::(desc("mCH-delete-before-conflict-m")+desc("mHC-delete-before-conflict-m"))'
1747 o 36 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
1767 o 36 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
1748 |\
1768 |\
1749 +---o 35 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
1769 +---o 35 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
1750 | |/
1770 | |/
1751 | o 34 h-1: b -(move)-> d
1771 | o 34 h-1: b -(move)-> d
1752 | |
1772 | |
1753 o | 6 c-1 delete d
1773 o | 6 c-1 delete d
1754 | |
1774 | |
1755 o | 2 i-2: c -move-> d
1775 o | 2 i-2: c -move-> d
1756 | |
1776 | |
1757 o | 1 i-1: a -move-> c
1777 o | 1 i-1: a -move-> c
1758 |/
1778 |/
1759 o 0 i-0 initial commit: a b h
1779 o 0 i-0 initial commit: a b h
1760
1780
1761
1781
1762 $ hg status --copies --rev 'desc("i-0")' --rev 'desc("mCH-delete-before-conflict-m")'
1782 $ hg status --copies --rev 'desc("i-0")' --rev 'desc("mCH-delete-before-conflict-m")'
1763 A d
1783 A d
1764 b (no-compatibility no-changeset !)
1784 b (no-compatibility no-changeset !)
1765 R a
1785 R a
1766 R b
1786 R b
1767 $ hg status --copies --rev 'desc("i-0")' --rev 'desc("mHC-delete-before-conflict-m")'
1787 $ hg status --copies --rev 'desc("i-0")' --rev 'desc("mHC-delete-before-conflict-m")'
1768 A d
1788 A d
1769 b
1789 b
1770 R a
1790 R a
1771 R b
1791 R b
1772 $ hg status --copies --rev 'desc("c-1")' --rev 'desc("mCH-delete-before-conflict-m")'
1792 $ hg status --copies --rev 'desc("c-1")' --rev 'desc("mCH-delete-before-conflict-m")'
1773 A d
1793 A d
1774 b
1794 b
1775 R b
1795 R b
1776 $ hg status --copies --rev 'desc("c-1")' --rev 'desc("mHC-delete-before-conflict-m")'
1796 $ hg status --copies --rev 'desc("c-1")' --rev 'desc("mHC-delete-before-conflict-m")'
1777 A d
1797 A d
1778 b
1798 b
1779 R b
1799 R b
1780 $ hg status --copies --rev 'desc("h-1")' --rev 'desc("mCH-delete-before-conflict-m")'
1800 $ hg status --copies --rev 'desc("h-1")' --rev 'desc("mCH-delete-before-conflict-m")'
1781 R a
1801 R a
1782 $ hg status --copies --rev 'desc("h-1")' --rev 'desc("mHC-delete-before-conflict-m")'
1802 $ hg status --copies --rev 'desc("h-1")' --rev 'desc("mHC-delete-before-conflict-m")'
1783 R a
1803 R a
General Comments 0
You need to be logged in to leave comments. Login now