|
1 $ cat <<'EOF' >> "$HGRCPATH" |
|
2 > [extensions] |
|
3 > convert = |
|
4 > [templates] |
|
5 > l = '{rev}:{node|short} p={p1rev},{p2rev} m={manifest} f={files|json}' |
|
6 > EOF |
|
7 |
|
8 $ check_convert_identity () { |
|
9 > hg convert -q "$1" "$1.converted" |
|
10 > hg outgoing -q -R "$1.converted" "$1" |
|
11 > if [ "$?" != 1 ]; then |
|
12 > echo '*** BUG: hash changes on convert ***' |
|
13 > hg log -R "$1.converted" -GTl |
|
14 > fi |
|
15 > } |
|
16 |
|
17 Files added at both parents: |
|
18 |
|
19 $ hg init added-both |
|
20 $ cd added-both |
|
21 $ touch a b c |
|
22 $ hg ci -qAm0 a |
|
23 $ hg ci -qAm1 b |
|
24 $ hg up -q 0 |
|
25 $ hg ci -qAm2 c |
|
26 |
|
27 $ hg merge |
|
28 1 files updated, 0 files merged, 0 files removed, 0 files unresolved |
|
29 (branch merge, don't forget to commit) |
|
30 $ hg ci --debug -m merge |
|
31 committing files: |
|
32 b |
|
33 committing manifest |
|
34 committing changelog |
|
35 updating the branch cache |
|
36 committed changeset 3:7aa8a293f5d97377037afc21e871e036e718d659 |
|
37 $ hg log -GTl |
|
38 @ 3:7aa8a293f5d9 p=2,1 m=3:8667461869a1 f=[] |
|
39 |\ |
|
40 | o 2:e0ea47086fce p=0,-1 m=2:b2e5b07f9374 f=["c"] |
|
41 | | |
|
42 o | 1:64d01526d4c2 p=0,-1 m=1:686dbf0aeca4 f=["b"] |
|
43 |/ |
|
44 o 0:487a0a245cea p=-1,-1 m=0:8515d4bfda76 f=["a"] |
|
45 |
|
46 |
|
47 $ cd .. |
|
48 $ check_convert_identity added-both |
|
49 |
|
50 Files added at both parents, but the other removed at the merge: |
|
51 (In this case, ctx.files() after the commit contains the removed file "b", but |
|
52 its manifest does not differ from p1.) |
|
53 |
|
54 $ hg init added-both-removed-at-merge |
|
55 $ cd added-both-removed-at-merge |
|
56 $ touch a b c |
|
57 $ hg ci -qAm0 a |
|
58 $ hg ci -qAm1 b |
|
59 $ hg up -q 0 |
|
60 $ hg ci -qAm2 c |
|
61 |
|
62 $ hg merge |
|
63 1 files updated, 0 files merged, 0 files removed, 0 files unresolved |
|
64 (branch merge, don't forget to commit) |
|
65 $ hg rm -f b |
|
66 $ hg ci --debug -m merge |
|
67 committing files: |
|
68 committing manifest |
|
69 committing changelog |
|
70 updating the branch cache |
|
71 committed changeset 3:915745f3ca3d9d699925269474c2d0a9526e8dfa |
|
72 $ hg log -GTl |
|
73 @ 3:915745f3ca3d p=2,1 m=3:8e9cf3456921 f=["b"] |
|
74 |\ |
|
75 | o 2:e0ea47086fce p=0,-1 m=2:b2e5b07f9374 f=["c"] |
|
76 | | |
|
77 o | 1:64d01526d4c2 p=0,-1 m=1:686dbf0aeca4 f=["b"] |
|
78 |/ |
|
79 o 0:487a0a245cea p=-1,-1 m=0:8515d4bfda76 f=["a"] |
|
80 |
|
81 |
|
82 $ cd .. |
|
83 $ check_convert_identity added-both |
|
84 |
|
85 An identical file added at both parents: |
|
86 |
|
87 $ hg init added-identical |
|
88 $ cd added-identical |
|
89 $ touch a b |
|
90 $ hg ci -qAm0 a |
|
91 $ hg ci -qAm1 b |
|
92 $ hg up -q 0 |
|
93 $ touch b |
|
94 $ hg ci -qAm2 b |
|
95 |
|
96 $ hg merge |
|
97 0 files updated, 0 files merged, 0 files removed, 0 files unresolved |
|
98 (branch merge, don't forget to commit) |
|
99 $ hg ci --debug -m merge |
|
100 reusing manifest from p1 (no file change) |
|
101 committing changelog |
|
102 updating the branch cache |
|
103 committed changeset 3:de26182cd210f0c3fb175ca7616704ab963d3024 |
|
104 $ hg log -GTl |
|
105 @ 3:de26182cd210 p=2,1 m=1:686dbf0aeca4 f=[] |
|
106 |\ |
|
107 | o 2:f00991f11eca p=0,-1 m=1:686dbf0aeca4 f=["b"] |
|
108 | | |
|
109 o | 1:64d01526d4c2 p=0,-1 m=1:686dbf0aeca4 f=["b"] |
|
110 |/ |
|
111 o 0:487a0a245cea p=-1,-1 m=0:8515d4bfda76 f=["a"] |
|
112 |
|
113 |
|
114 $ cd .. |
|
115 $ check_convert_identity added-identical |
|
116 |
|
117 #if execbit |
|
118 |
|
119 An identical file added at both parents, but the flag differs. Take local: |
|
120 |
|
121 $ hg init flag-change-take-p1 |
|
122 $ cd flag-change-take-p1 |
|
123 $ touch a b |
|
124 $ hg ci -qAm0 a |
|
125 $ hg ci -qAm1 b |
|
126 $ hg up -q 0 |
|
127 $ touch b |
|
128 $ chmod +x b |
|
129 $ hg ci -qAm2 b |
|
130 |
|
131 $ hg merge |
|
132 warning: cannot merge flags for b without common ancestor - keeping local flags |
|
133 1 files updated, 0 files merged, 0 files removed, 0 files unresolved |
|
134 (branch merge, don't forget to commit) |
|
135 $ chmod +x b |
|
136 $ hg ci --debug -m merge |
|
137 committing files: |
|
138 b |
|
139 committing manifest |
|
140 committing changelog |
|
141 updating the branch cache |
|
142 committed changeset 3:4bfaad7f925b7f17f60524dc5d4e605f7bfbba3f |
|
143 $ hg log -GTl |
|
144 @ 3:4bfaad7f925b p=2,1 m=3:a3a9fe23a5b8 f=[] |
|
145 |\ |
|
146 | o 2:99451f16b3f5 p=0,-1 m=2:36b69ba4b24b f=["b"] |
|
147 | | |
|
148 o | 1:64d01526d4c2 p=0,-1 m=1:686dbf0aeca4 f=["b"] |
|
149 |/ |
|
150 o 0:487a0a245cea p=-1,-1 m=0:8515d4bfda76 f=["a"] |
|
151 |
|
152 $ hg files -vr3 |
|
153 0 a |
|
154 0 x b |
|
155 |
|
156 $ cd .. |
|
157 $ check_convert_identity flag-change-take-p1 |
|
158 3:c8d50407916e |
|
159 *** BUG: hash changes on convert *** |
|
160 o 3:c8d50407916e p=2,1 m=2:36b69ba4b24b f=[] |
|
161 |\ |
|
162 | o 2:99451f16b3f5 p=0,-1 m=2:36b69ba4b24b f=["b"] |
|
163 | | |
|
164 o | 1:64d01526d4c2 p=0,-1 m=1:686dbf0aeca4 f=["b"] |
|
165 |/ |
|
166 o 0:487a0a245cea p=-1,-1 m=0:8515d4bfda76 f=["a"] |
|
167 |
|
168 |
|
169 An identical file added at both parents, but the flag differs. Take other: |
|
170 |
|
171 $ hg init flag-change-take-p2 |
|
172 $ cd flag-change-take-p2 |
|
173 $ touch a b |
|
174 $ hg ci -qAm0 a |
|
175 $ hg ci -qAm1 b |
|
176 $ hg up -q 0 |
|
177 $ touch b |
|
178 $ chmod +x b |
|
179 $ hg ci -qAm2 b |
|
180 |
|
181 $ hg merge |
|
182 warning: cannot merge flags for b without common ancestor - keeping local flags |
|
183 1 files updated, 0 files merged, 0 files removed, 0 files unresolved |
|
184 (branch merge, don't forget to commit) |
|
185 $ chmod -x b |
|
186 $ hg ci --debug -m merge |
|
187 committing files: |
|
188 b |
|
189 committing manifest |
|
190 committing changelog |
|
191 updating the branch cache |
|
192 committed changeset 3:06a62a687d87c7d8944743dee1ee9d8c66b3f6e3 |
|
193 $ hg log -GTl |
|
194 @ 3:06a62a687d87 p=2,1 m=3:2a315ba1aa45 f=["b"] |
|
195 |\ |
|
196 | o 2:99451f16b3f5 p=0,-1 m=2:36b69ba4b24b f=["b"] |
|
197 | | |
|
198 o | 1:64d01526d4c2 p=0,-1 m=1:686dbf0aeca4 f=["b"] |
|
199 |/ |
|
200 o 0:487a0a245cea p=-1,-1 m=0:8515d4bfda76 f=["a"] |
|
201 |
|
202 $ hg files -vr3 |
|
203 0 a |
|
204 0 b |
|
205 |
|
206 $ cd .. |
|
207 $ check_convert_identity flag-change-take-p2 |
|
208 |
|
209 #endif |
|
210 |
|
211 An identical file added at both parents, one more file added at p2: |
|
212 |
|
213 $ hg init added-some-p2 |
|
214 $ cd added-some-p2 |
|
215 $ touch a b c |
|
216 $ hg ci -qAm0 a |
|
217 $ hg ci -qAm1 b |
|
218 $ hg ci -qAm2 c |
|
219 $ hg up -q 0 |
|
220 $ touch b |
|
221 $ hg ci -qAm3 b |
|
222 |
|
223 $ hg merge |
|
224 1 files updated, 0 files merged, 0 files removed, 0 files unresolved |
|
225 (branch merge, don't forget to commit) |
|
226 $ hg ci --debug -m merge |
|
227 committing files: |
|
228 c |
|
229 committing manifest |
|
230 committing changelog |
|
231 updating the branch cache |
|
232 committed changeset 4:f7fbc4e4d9a8fde03ba475adad675578c8bf472d |
|
233 $ hg log -GTl |
|
234 @ 4:f7fbc4e4d9a8 p=3,2 m=3:92acd5bfd716 f=[] |
|
235 |\ |
|
236 | o 3:e9d9f3cc981f p=0,-1 m=1:686dbf0aeca4 f=["b"] |
|
237 | | |
|
238 o | 2:93c5529a4ec7 p=1,-1 m=2:ae25a31b30b3 f=["c"] |
|
239 | | |
|
240 o | 1:64d01526d4c2 p=0,-1 m=1:686dbf0aeca4 f=["b"] |
|
241 |/ |
|
242 o 0:487a0a245cea p=-1,-1 m=0:8515d4bfda76 f=["a"] |
|
243 |
|
244 |
|
245 $ cd .. |
|
246 $ check_convert_identity added-some-p2 |
|
247 |
|
248 An identical file added at both parents, one more file added at p1: |
|
249 (In this case, p1 manifest is reused at the merge commit, which means the |
|
250 manifest DAG does not have the same shape as the changelog.) |
|
251 |
|
252 $ hg init added-some-p1 |
|
253 $ cd added-some-p1 |
|
254 $ touch a b |
|
255 $ hg ci -qAm0 a |
|
256 $ hg ci -qAm1 b |
|
257 $ hg up -q 0 |
|
258 $ touch b c |
|
259 $ hg ci -qAm2 b |
|
260 $ hg ci -qAm3 c |
|
261 |
|
262 $ hg merge |
|
263 0 files updated, 0 files merged, 0 files removed, 0 files unresolved |
|
264 (branch merge, don't forget to commit) |
|
265 $ hg ci --debug -m merge |
|
266 reusing manifest from p1 (no file change) |
|
267 committing changelog |
|
268 updating the branch cache |
|
269 committed changeset 4:a9f0f589a913f5a149dc10dfbd5af726977c36c4 |
|
270 $ hg log -GTl |
|
271 @ 4:a9f0f589a913 p=3,1 m=2:ae25a31b30b3 f=[] |
|
272 |\ |
|
273 | o 3:b8dc385241b5 p=2,-1 m=2:ae25a31b30b3 f=["c"] |
|
274 | | |
|
275 | o 2:f00991f11eca p=0,-1 m=1:686dbf0aeca4 f=["b"] |
|
276 | | |
|
277 o | 1:64d01526d4c2 p=0,-1 m=1:686dbf0aeca4 f=["b"] |
|
278 |/ |
|
279 o 0:487a0a245cea p=-1,-1 m=0:8515d4bfda76 f=["a"] |
|
280 |
|
281 |
|
282 $ cd .. |
|
283 $ check_convert_identity added-some-p1 |
|
284 |
|
285 A file added at p2, a named branch created at p1: |
|
286 |
|
287 $ hg init named-branch-p1 |
|
288 $ cd named-branch-p1 |
|
289 $ touch a b |
|
290 $ hg ci -qAm0 a |
|
291 $ hg ci -qAm1 b |
|
292 $ hg up -q 0 |
|
293 $ hg branch -q foo |
|
294 $ hg ci -m2 |
|
295 |
|
296 $ hg merge default |
|
297 1 files updated, 0 files merged, 0 files removed, 0 files unresolved |
|
298 (branch merge, don't forget to commit) |
|
299 $ hg ci --debug -m merge |
|
300 committing files: |
|
301 b |
|
302 committing manifest |
|
303 committing changelog |
|
304 updating the branch cache |
|
305 committed changeset 3:fb97d83b02fd072295cfc2171f21b7d38509bfd7 |
|
306 $ hg log -GT'{l} branch={branch}' |
|
307 @ 3:fb97d83b02fd p=2,1 m=2:9091c64f4ea1 f=[] branch=foo |
|
308 |\ |
|
309 | o 2:a3a9fa6587e5 p=0,-1 m=0:8515d4bfda76 f=[] branch=foo |
|
310 | | |
|
311 o | 1:64d01526d4c2 p=0,-1 m=1:686dbf0aeca4 f=["b"] branch=default |
|
312 |/ |
|
313 o 0:487a0a245cea p=-1,-1 m=0:8515d4bfda76 f=["a"] branch=default |
|
314 |
|
315 |
|
316 $ cd .. |
|
317 $ check_convert_identity named-branch-p1 |
|
318 |
|
319 A file added at p1, a named branch created at p2: |
|
320 (In this case, p1 manifest is reused at the merge commit, which means the |
|
321 manifest DAG does not have the same shape as the changelog.) |
|
322 |
|
323 $ hg init named-branch-p2 |
|
324 $ cd named-branch-p2 |
|
325 $ touch a b |
|
326 $ hg ci -qAm0 a |
|
327 $ hg branch -q foo |
|
328 $ hg ci -m1 |
|
329 $ hg up -q 0 |
|
330 $ hg ci -qAm1 b |
|
331 |
|
332 $ hg merge foo |
|
333 0 files updated, 0 files merged, 0 files removed, 0 files unresolved |
|
334 (branch merge, don't forget to commit) |
|
335 $ hg ci --debug -m merge |
|
336 reusing manifest from p1 (no file change) |
|
337 committing changelog |
|
338 updating the branch cache |
|
339 committed changeset 3:036823e24692218324d4af43b07ff89f8a000096 |
|
340 $ hg log -GT'{l} branch={branch}' |
|
341 @ 3:036823e24692 p=2,1 m=1:686dbf0aeca4 f=[] branch=default |
|
342 |\ |
|
343 | o 2:64d01526d4c2 p=0,-1 m=1:686dbf0aeca4 f=["b"] branch=default |
|
344 | | |
|
345 o | 1:da38c8e00727 p=0,-1 m=0:8515d4bfda76 f=[] branch=foo |
|
346 |/ |
|
347 o 0:487a0a245cea p=-1,-1 m=0:8515d4bfda76 f=["a"] branch=default |
|
348 |
|
349 |
|
350 $ cd .. |
|
351 $ check_convert_identity named-branch-p2 |
|
352 |
|
353 A file changed once at both parents, but amended to have identical content: |
|
354 |
|
355 $ hg init amend-p1 |
|
356 $ cd amend-p1 |
|
357 $ touch a |
|
358 $ hg ci -qAm0 a |
|
359 $ echo foo > a |
|
360 $ hg ci -m1 |
|
361 $ hg up -q 0 |
|
362 $ echo bar > a |
|
363 $ hg ci -qm2 |
|
364 $ echo foo > a |
|
365 $ hg ci -qm3 --amend |
|
366 |
|
367 $ hg merge |
|
368 0 files updated, 0 files merged, 0 files removed, 0 files unresolved |
|
369 (branch merge, don't forget to commit) |
|
370 $ hg ci --debug -m merge |
|
371 reusing manifest from p1 (no file change) |
|
372 committing changelog |
|
373 updating the branch cache |
|
374 committed changeset 3:314e5bc5adf5c58ea571efabe33eedba20a201aa |
|
375 $ hg log -GT'{l} branch={branch}' |
|
376 @ 3:314e5bc5adf5 p=2,1 m=1:d33ea248bd73 f=[] branch=default |
|
377 |\ |
|
378 | o 2:de9c64f226a3 p=0,-1 m=1:d33ea248bd73 f=["a"] branch=default |
|
379 | | |
|
380 o | 1:6a74aec01b3c p=0,-1 m=1:d33ea248bd73 f=["a"] branch=default |
|
381 |/ |
|
382 o 0:487a0a245cea p=-1,-1 m=0:8515d4bfda76 f=["a"] branch=default |
|
383 |
|
384 |
|
385 $ cd .. |
|
386 $ check_convert_identity amend-p1 |