Show More
@@ -0,0 +1,30 b'' | |||
|
1 | #!/bin/sh | |
|
2 | ||
|
3 | hg init repo | |
|
4 | cd repo | |
|
5 | ||
|
6 | echo line 1 > foo | |
|
7 | hg ci -qAm 'add foo' -d "1000000 0" | |
|
8 | ||
|
9 | # copy foo to bar and change both files | |
|
10 | hg cp foo bar | |
|
11 | echo line 2-1 >> foo | |
|
12 | echo line 2-2 >> bar | |
|
13 | hg ci -m 'cp foo bar; change both' -d "1000000 0" | |
|
14 | ||
|
15 | # in another branch, change foo in a way that doesn't conflict with | |
|
16 | # the other changes | |
|
17 | hg up -qC 0 | |
|
18 | echo line 0 >| foo | |
|
19 | hg cat foo >> foo | |
|
20 | hg ci -m 'change foo' -d "1000000 0" | |
|
21 | ||
|
22 | # we get conflicts that shouldn't be there | |
|
23 | hg merge --debug | |
|
24 | ||
|
25 | echo "-- foo --" | |
|
26 | cat foo | |
|
27 | ||
|
28 | echo "-- bar --" | |
|
29 | cat bar | |
|
30 |
@@ -0,0 +1,20 b'' | |||
|
1 | resolving manifests | |
|
2 | overwrite None partial False | |
|
3 | ancestor 310fd17130da local 2092631ce82b+ remote 7731dad1c2b9 | |
|
4 | foo: versions differ -> m | |
|
5 | foo: remote copied to bar -> m | |
|
6 | copying foo to bar | |
|
7 | merging foo and bar | |
|
8 | my foo@2092631ce82b+ other bar@7731dad1c2b9 ancestor foo@310fd17130da | |
|
9 | merging foo | |
|
10 | my foo@2092631ce82b+ other foo@7731dad1c2b9 ancestor foo@310fd17130da | |
|
11 | 0 files updated, 2 files merged, 0 files removed, 0 files unresolved | |
|
12 | (branch merge, don't forget to commit) | |
|
13 | -- foo -- | |
|
14 | line 0 | |
|
15 | line 1 | |
|
16 | line 2-1 | |
|
17 | -- bar -- | |
|
18 | line 0 | |
|
19 | line 1 | |
|
20 | line 2-2 |
@@ -9,10 +9,11 b' from node import *' | |||
|
9 | 9 | from i18n import _ |
|
10 | 10 | import errno, util, os, tempfile, context |
|
11 | 11 | |
|
12 | def filemerge(repo, fw, fo, wctx, mctx): | |
|
12 | def filemerge(repo, fw, fd, fo, wctx, mctx): | |
|
13 | 13 | """perform a 3-way merge in the working directory |
|
14 | 14 | |
|
15 | fw = filename in the working directory | |
|
15 | fw = original filename in the working directory | |
|
16 | fd = destination filename in the working directory | |
|
16 | 17 | fo = filename in other parent |
|
17 | 18 | wctx, mctx = working and merge changecontexts |
|
18 | 19 | """ |
@@ -27,15 +28,16 b' def filemerge(repo, fw, fo, wctx, mctx):' | |||
|
27 | 28 | return name |
|
28 | 29 | |
|
29 | 30 | fcm = wctx.filectx(fw) |
|
31 | fcmdata = wctx.filectx(fd).data() | |
|
30 | 32 | fco = mctx.filectx(fo) |
|
31 | 33 | |
|
32 |
if not fco.cmp(fcm |
|
|
34 | if not fco.cmp(fcmdata): # files identical? | |
|
33 | 35 | return None |
|
34 | 36 | |
|
35 | 37 | fca = fcm.ancestor(fco) |
|
36 | 38 | if not fca: |
|
37 | 39 | fca = repo.filectx(fw, fileid=nullrev) |
|
38 |
a = repo.wjoin(f |
|
|
40 | a = repo.wjoin(fd) | |
|
39 | 41 | b = temp("base", fca) |
|
40 | 42 | c = temp("other", fco) |
|
41 | 43 | |
@@ -49,11 +51,11 b' def filemerge(repo, fw, fo, wctx, mctx):' | |||
|
49 | 51 | cmd = (os.environ.get("HGMERGE") or repo.ui.config("ui", "merge") |
|
50 | 52 | or "hgmerge") |
|
51 | 53 | r = util.system('%s "%s" "%s" "%s"' % (cmd, a, b, c), cwd=repo.root, |
|
52 |
environ={'HG_FILE': f |
|
|
54 | environ={'HG_FILE': fd, | |
|
53 | 55 | 'HG_MY_NODE': str(wctx.parents()[0]), |
|
54 | 56 | 'HG_OTHER_NODE': str(mctx)}) |
|
55 | 57 | if r: |
|
56 |
repo.ui.warn(_("merging %s failed!\n") % f |
|
|
58 | repo.ui.warn(_("merging %s failed!\n") % fd) | |
|
57 | 59 | |
|
58 | 60 | os.unlink(b) |
|
59 | 61 | os.unlink(c) |
@@ -380,6 +382,15 b' def applyupdates(repo, action, wctx, mct' | |||
|
380 | 382 | |
|
381 | 383 | updated, merged, removed, unresolved = 0, 0, 0, 0 |
|
382 | 384 | action.sort() |
|
385 | # prescan for copy/renames | |
|
386 | for a in action: | |
|
387 | f, m = a[:2] | |
|
388 | if m == 'm': # merge | |
|
389 | f2, fd, flags, move = a[2:] | |
|
390 | if f != fd: | |
|
391 | repo.ui.debug(_("copying %s to %s\n") % (f, fd)) | |
|
392 | repo.wwrite(fd, repo.wread(f), flags) | |
|
393 | ||
|
383 | 394 | for a in action: |
|
384 | 395 | f, m = a[:2] |
|
385 | 396 | if f and f[0] == "/": |
@@ -396,7 +407,7 b' def applyupdates(repo, action, wctx, mct' | |||
|
396 | 407 | removed += 1 |
|
397 | 408 | elif m == "m": # merge |
|
398 | 409 | f2, fd, flags, move = a[2:] |
|
399 | r = filemerge(repo, f, f2, wctx, mctx) | |
|
410 | r = filemerge(repo, f, fd, f2, wctx, mctx) | |
|
400 | 411 | if r > 0: |
|
401 | 412 | unresolved += 1 |
|
402 | 413 | else: |
@@ -404,12 +415,9 b' def applyupdates(repo, action, wctx, mct' | |||
|
404 | 415 | updated += 1 |
|
405 | 416 | else: |
|
406 | 417 | merged += 1 |
|
407 | if f != fd: | |
|
408 |
repo.ui.debug(_(" |
|
|
409 | repo.wwrite(fd, repo.wread(f), flags) | |
|
410 | if move: | |
|
411 | repo.ui.debug(_("removing %s\n") % f) | |
|
412 | os.unlink(repo.wjoin(f)) | |
|
418 | if f != fd and move: | |
|
419 | repo.ui.debug(_("removing %s\n") % f) | |
|
420 | os.unlink(repo.wjoin(f)) | |
|
413 | 421 | util.set_exec(repo.wjoin(fd), "x" in flags) |
|
414 | 422 | elif m == "g": # get |
|
415 | 423 | flags = a[2] |
@@ -5,7 +5,7 b' adding quux2' | |||
|
5 | 5 | merging bar |
|
6 | 6 | merging bar failed! |
|
7 | 7 | merging foo and baz |
|
8 |
merging |
|
|
8 | merging baz failed! | |
|
9 | 9 | 1 files updated, 0 files merged, 0 files removed, 2 files unresolved |
|
10 | 10 | There are unresolved merges, you can redo the full merge using: |
|
11 | 11 | hg update -C 2 |
@@ -7,9 +7,9 b' resolving manifests' | |||
|
7 | 7 | a2: divergent renames -> dr |
|
8 | 8 | a: remote moved to b -> m |
|
9 | 9 | b2: remote created -> g |
|
10 | copying a to b | |
|
10 | 11 | merging a and b |
|
11 | 12 | my a@f26ec4fc3fa3+ other b@8e765a822af2 ancestor a@af1939970a1c |
|
12 | copying a to b | |
|
13 | 13 | removing a |
|
14 | 14 | warning: detected divergent renames of a2 to: |
|
15 | 15 | c2 |
@@ -6,17 +6,17 b' resolving manifests' | |||
|
6 | 6 | ancestor 924404dff337 local e300d1c794ec+ remote 735846fee2d7 |
|
7 | 7 | rev: versions differ -> m |
|
8 | 8 | a: remote copied to b -> m |
|
9 | copying a to b | |
|
9 | 10 | merging a and b |
|
10 | 11 | my a@e300d1c794ec+ other b@735846fee2d7 ancestor a@924404dff337 |
|
11 | copying a to b | |
|
12 | 12 | merging rev |
|
13 | 13 | my rev@e300d1c794ec+ other rev@735846fee2d7 ancestor rev@924404dff337 |
|
14 | 14 | 0 files updated, 2 files merged, 0 files removed, 0 files unresolved |
|
15 | 15 | (branch merge, don't forget to commit) |
|
16 | 16 | -------------- |
|
17 | M a | |
|
18 | 17 | M b |
|
19 | 18 | a |
|
19 | C a | |
|
20 | 20 | -------------- |
|
21 | 21 | |
|
22 | 22 | -------------- |
@@ -49,9 +49,9 b' resolving manifests' | |||
|
49 | 49 | ancestor 924404dff337 local e300d1c794ec+ remote e03727d2d66b |
|
50 | 50 | rev: versions differ -> m |
|
51 | 51 | a: remote moved to b -> m |
|
52 | copying a to b | |
|
52 | 53 | merging a and b |
|
53 | 54 | my a@e300d1c794ec+ other b@e03727d2d66b ancestor a@924404dff337 |
|
54 | copying a to b | |
|
55 | 55 | removing a |
|
56 | 56 | merging rev |
|
57 | 57 | my rev@e300d1c794ec+ other rev@e03727d2d66b ancestor rev@924404dff337 |
@@ -357,9 +357,9 b' resolving manifests' | |||
|
357 | 357 | ancestor 924404dff337 local e300d1c794ec+ remote 79cc6877a3b7 |
|
358 | 358 | rev: versions differ -> m |
|
359 | 359 | a: remote moved to b -> m |
|
360 | copying a to b | |
|
360 | 361 | merging a and b |
|
361 | 362 | my a@e300d1c794ec+ other b@79cc6877a3b7 ancestor a@924404dff337 |
|
362 | copying a to b | |
|
363 | 363 | removing a |
|
364 | 364 | merging rev |
|
365 | 365 | my rev@e300d1c794ec+ other rev@79cc6877a3b7 ancestor rev@924404dff337 |
General Comments 0
You need to be logged in to leave comments.
Login now