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