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