Show More
@@ -813,40 +813,6 b' def debuginstall(ui):' | |||
|
813 | 813 | os.unlink(fa) |
|
814 | 814 | os.unlink(fd) |
|
815 | 815 | |
|
816 | # merge helper | |
|
817 | ui.status(_("Checking merge helper...\n")) | |
|
818 | cmd = (os.environ.get("HGMERGE") or ui.config("ui", "merge") | |
|
819 | or "hgmerge") | |
|
820 | cmdpath = util.find_exe(cmd) or util.find_exe(cmd.split()[0]) | |
|
821 | if not cmdpath: | |
|
822 | if cmd == 'hgmerge': | |
|
823 | ui.write(_(" No merge helper set and can't find default" | |
|
824 | " hgmerge script in PATH\n")) | |
|
825 | ui.write(_(" (specify a merge helper in your .hgrc file)\n")) | |
|
826 | else: | |
|
827 | ui.write(_(" Can't find merge helper '%s' in PATH\n") % cmd) | |
|
828 | ui.write(_(" (specify a merge helper in your .hgrc file)\n")) | |
|
829 | problems += 1 | |
|
830 | else: | |
|
831 | # actually attempt a patch here | |
|
832 | fa = writetemp("1\n2\n3\n4\n") | |
|
833 | fl = writetemp("1\n2\n3\ninsert\n4\n") | |
|
834 | fr = writetemp("begin\n1\n2\n3\n4\n") | |
|
835 | r = util.system('%s "%s" "%s" "%s"' % (cmd, fl, fa, fr)) | |
|
836 | if r: | |
|
837 | ui.write(_(" Got unexpected merge error %d!\n") % r) | |
|
838 | problems += 1 | |
|
839 | m = file(fl).read() | |
|
840 | if m != "begin\n1\n2\n3\ninsert\n4\n": | |
|
841 | ui.write(_(" Got unexpected merge results!\n")) | |
|
842 | ui.write(_(" (your merge helper may have the" | |
|
843 | " wrong argument order)\n")) | |
|
844 | ui.write(_(" Result: %r\n") % m) | |
|
845 | problems += 1 | |
|
846 | os.unlink(fa) | |
|
847 | os.unlink(fl) | |
|
848 | os.unlink(fr) | |
|
849 | ||
|
850 | 816 | # editor |
|
851 | 817 | ui.status(_("Checking commit editor...\n")) |
|
852 | 818 | editor = ui.geteditor() |
@@ -7,7 +7,57 b'' | |||
|
7 | 7 | |
|
8 | 8 | from node import * |
|
9 | 9 | from i18n import _ |
|
10 | import util, os, tempfile, context | |
|
10 | import util, os, tempfile, context, simplemerge, re | |
|
11 | ||
|
12 | def _toolstr(ui, tool, part, default=None): | |
|
13 | return ui.config("merge-tools", tool + "." + part, default) | |
|
14 | ||
|
15 | def _toolbool(ui, tool, part, default=False): | |
|
16 | return ui.configbool("merge-tools", tool + "." + part, default) | |
|
17 | ||
|
18 | def _findtool(ui, tool): | |
|
19 | return util.find_exe(_toolstr(ui, tool, "executable", tool)) | |
|
20 | ||
|
21 | def _picktool(repo, ui, path, binary, symlink): | |
|
22 | def check(tool, pat, symlink, binary): | |
|
23 | tmsg = tool | |
|
24 | if pat: | |
|
25 | tmsg += " specified for " + pat | |
|
26 | if pat and not _findtool(ui, tool): # skip search if not matching | |
|
27 | ui.warn(_("couldn't find merge tool %s\n") % tmsg) | |
|
28 | elif symlink and not _toolbool(ui, tool, "symlink"): | |
|
29 | ui.warn(_("tool %s can't handle symlinks\n") % tmsg) | |
|
30 | elif binary and not _toolbool(ui, tool, "binary"): | |
|
31 | ui.warn(_("tool %s can't handle binary\n") % tmsg) | |
|
32 | else: | |
|
33 | return True | |
|
34 | return False | |
|
35 | ||
|
36 | # HGMERGE takes precedence | |
|
37 | if os.environ.get("HGMERGE"): | |
|
38 | return os.environ.get("HGMERGE") | |
|
39 | ||
|
40 | # then patterns | |
|
41 | for pattern, tool in ui.configitems("merge-patterns"): | |
|
42 | mf = util.matcher(repo.root, "", [pat], [], [])[1] | |
|
43 | if mf(path) and check(tool, pat, symlink, False): | |
|
44 | return tool | |
|
45 | ||
|
46 | # then merge tools | |
|
47 | tools = {} | |
|
48 | for k,v in ui.configitems("merge-tools"): | |
|
49 | t = k.split('.')[0] | |
|
50 | if t not in tools: | |
|
51 | tools[t] = int(_toolstr(ui, t, "priority", "0")) | |
|
52 | tools = [(-p,t) for t,p in tools.items()] | |
|
53 | tools.sort() | |
|
54 | if ui.config("ui", "merge"): | |
|
55 | tools.insert(0, (None, ui.config("ui", "merge"))) # highest priority | |
|
56 | tools.append((None, "hgmerge")) # the old default, if found | |
|
57 | tools.append((None, "internal:merge")) # internal merge as last resort | |
|
58 | for p,t in tools: | |
|
59 | if _findtool(ui, t) and check(t, None, symlink, binary): | |
|
60 | return t | |
|
11 | 61 | |
|
12 | 62 | def filemerge(repo, fw, fd, fo, wctx, mctx): |
|
13 | 63 | """perform a 3-way merge in the working directory |
@@ -27,38 +77,91 b' def filemerge(repo, fw, fd, fo, wctx, mc' | |||
|
27 | 77 | f.close() |
|
28 | 78 | return name |
|
29 | 79 | |
|
30 | fcm = wctx.filectx(fw) | |
|
31 | fcmdata = wctx.filectx(fd).data() | |
|
80 | def isbin(ctx): | |
|
81 | try: | |
|
82 | return util.binary(ctx.data()) | |
|
83 | except IOError: | |
|
84 | return False | |
|
85 | ||
|
32 | 86 | fco = mctx.filectx(fo) |
|
33 | ||
|
34 | if not fco.cmp(fcmdata): # files identical? | |
|
87 | if not fco.cmp(wctx.filectx(fd).data()): # files identical? | |
|
35 | 88 | return None |
|
36 | 89 | |
|
37 | fca = fcm.ancestor(fco) | |
|
38 | if not fca: | |
|
39 |
|
|
|
90 | ui = repo.ui | |
|
91 | fcm = wctx.filectx(fw) | |
|
92 | fca = fcm.ancestor(fco) or repo.filectx(fw, fileid=nullrev) | |
|
93 | binary = isbin(fcm) or isbin(fco) or isbin(fca) | |
|
94 | symlink = fcm.islink() or fco.islink() | |
|
95 | tool = _picktool(repo, ui, fw, binary, symlink) | |
|
96 | ui.debug(_("picked tool '%s' for %s (binary %s symlink %s)\n") % | |
|
97 | (tool, fw, binary, symlink)) | |
|
98 | ||
|
99 | if not tool: | |
|
100 | tool = "internal:local" | |
|
101 | if ui.prompt(_(" no tool found to merge %s\n" | |
|
102 | "keep (l)ocal or take (o)ther?") % fw, | |
|
103 | _("[lo]"), _("l")) != _("l"): | |
|
104 | tool = "internal:other" | |
|
105 | if tool == "internal:local": | |
|
106 | return 0 | |
|
107 | if tool == "internal:other": | |
|
108 | repo.wwrite(fd, fco.data(), fco.fileflags()) | |
|
109 | return 0 | |
|
110 | if tool == "internal:fail": | |
|
111 | return 1 | |
|
112 | ||
|
113 | # do the actual merge | |
|
40 | 114 | a = repo.wjoin(fd) |
|
41 | 115 | b = temp("base", fca) |
|
42 | 116 | c = temp("other", fco) |
|
117 | out = "" | |
|
118 | back = a + ".orig" | |
|
119 | util.copyfile(a, back) | |
|
43 | 120 | |
|
44 | 121 | if fw != fo: |
|
45 | 122 | repo.ui.status(_("merging %s and %s\n") % (fw, fo)) |
|
46 | 123 | else: |
|
47 | 124 | repo.ui.status(_("merging %s\n") % fw) |
|
48 | ||
|
49 | 125 | repo.ui.debug(_("my %s other %s ancestor %s\n") % (fcm, fco, fca)) |
|
50 | 126 | |
|
51 | cmd = (os.environ.get("HGMERGE") or repo.ui.config("ui", "merge") | |
|
52 | or "hgmerge") | |
|
53 | r = util.system('%s "%s" "%s" "%s"' % (cmd, a, b, c), cwd=repo.root, | |
|
54 | environ={'HG_FILE': fd, | |
|
55 | 'HG_MY_NODE': str(wctx.parents()[0]), | |
|
56 | 'HG_OTHER_NODE': str(mctx), | |
|
57 | 'HG_MY_ISLINK': fcm.islink(), | |
|
58 | 'HG_OTHER_ISLINK': fco.islink(), | |
|
59 | 'HG_BASE_ISLINK': fca.islink(),}) | |
|
127 | # do we attempt to simplemerge first? | |
|
128 | if _toolbool(ui, tool, "premerge", not (binary or symlink)): | |
|
129 | r = simplemerge.simplemerge(a, b, c, quiet=True) | |
|
130 | if not r: | |
|
131 | ui.debug(_(" premerge successful\n")) | |
|
132 | os.unlink(back) | |
|
133 | os.unlink(b) | |
|
134 | os.unlink(c) | |
|
135 | return 0 | |
|
136 | util.copyfile(back, a) # restore from backup and try again | |
|
137 | ||
|
138 | env = dict(HG_FILE=fd, | |
|
139 | HG_MY_NODE=str(wctx.parents()[0]), | |
|
140 | HG_OTHER_NODE=str(mctx), | |
|
141 | HG_MY_ISLINK=fcm.islink(), | |
|
142 | HG_OTHER_ISLINK=fco.islink(), | |
|
143 | HG_BASE_ISLINK=fca.islink()) | |
|
144 | ||
|
145 | if tool == "internal:merge": | |
|
146 | r = simplemerge.simplemerge(a, b, c, label=['local', 'other']) | |
|
147 | else: | |
|
148 | toolpath = _findtool(ui, tool) | |
|
149 | args = _toolstr(ui, tool, "args", '$local $base $other') | |
|
150 | if "$output" in args: | |
|
151 | out, a = a, back # read input from backup, write to original | |
|
152 | replace = dict(local=a, base=b, other=c, output=out) | |
|
153 | args = re.sub("\$(local|base|other|output)", | |
|
154 | lambda x: '"%s"' % replace[x.group()[1:]], args) | |
|
155 | r = util.system(toolpath + ' ' + args, cwd=repo.root, environ=env) | |
|
156 | ||
|
157 | if not r and _toolbool(ui, tool, "checkconflicts"): | |
|
158 | if re.match("^(<<<<<<< .*|=======|>>>>>>> .*)$", fcm.data()): | |
|
159 | r = 1 | |
|
160 | ||
|
60 | 161 | if r: |
|
61 | 162 | repo.ui.warn(_("merging %s failed!\n") % fd) |
|
163 | else: | |
|
164 | os.unlink(back) | |
|
62 | 165 | |
|
63 | 166 | os.unlink(b) |
|
64 | 167 | os.unlink(c) |
@@ -420,9 +420,7 b' DAEMON_PIDS = None' | |||
|
420 | 420 | HGRCPATH = None |
|
421 | 421 | |
|
422 | 422 | os.environ["HGEDITOR"] = sys.executable + ' -c "import sys; sys.exit(0)"' |
|
423 | os.environ["HGMERGE"] = ('python "%s" -L my -L other' | |
|
424 | % os.path.join(TESTDIR, os.path.pardir, | |
|
425 | 'contrib', 'simplemerge')) | |
|
423 | os.environ["HGMERGE"] = "internal:merge" | |
|
426 | 424 | os.environ["HGUSER"] = "test" |
|
427 | 425 | os.environ["HGENCODING"] = "ascii" |
|
428 | 426 | os.environ["HGENCODINGMODE"] = "strict" |
@@ -13,21 +13,26 b' A b' | |||
|
13 | 13 | % should fail |
|
14 | 14 | a already tracked! |
|
15 | 15 | 1 files updated, 0 files merged, 0 files removed, 0 files unresolved |
|
16 | merging a | |
|
16 | 17 | warning: conflicts during merge. |
|
17 | merging a | |
|
18 | 18 | merging a failed! |
|
19 | 19 | 0 files updated, 0 files merged, 0 files removed, 1 files unresolved |
|
20 | 20 | There are unresolved merges, you can redo the full merge using: |
|
21 | 21 | hg update -C 2 |
|
22 | 22 | hg merge 1 |
|
23 | 23 | M a |
|
24 | ? a.orig | |
|
24 | 25 | % should fail |
|
25 | 26 | a already tracked! |
|
26 | 27 | M a |
|
28 | ? a.orig | |
|
27 | 29 | % issue683 |
|
28 | 30 | R a |
|
31 | ? a.orig | |
|
29 | 32 | M a |
|
33 | ? a.orig | |
|
30 | 34 | c does not exist! |
|
31 | 35 | d does not exist! |
|
32 | 36 | M a |
|
33 | 37 | A c |
|
38 | ? a.orig |
@@ -1,15 +1,16 b'' | |||
|
1 | 1 | 1 files updated, 0 files merged, 0 files removed, 0 files unresolved |
|
2 | merging a | |
|
2 | 3 | warning: conflicts during merge. |
|
3 | merging a | |
|
4 | 4 | merging a failed! |
|
5 | 5 | 0 files updated, 0 files merged, 0 files removed, 1 files unresolved |
|
6 | 6 | There are unresolved merges, you can redo the full merge using: |
|
7 | 7 | hg update -C 2 |
|
8 | 8 | hg merge 1 |
|
9 | 9 | e7fe8eb3e180+0d24b7662d3e+ tip |
|
10 |
<<<<<<< |
|
|
10 | <<<<<<< local | |
|
11 | 11 | something else |
|
12 | 12 | ======= |
|
13 | 13 | something |
|
14 | 14 | >>>>>>> other |
|
15 | 15 | M a |
|
16 | ? a.orig |
@@ -260,8 +260,8 b' 1 files updated, 0 files merged, 2 files' | |||
|
260 | 260 | adding right-1 |
|
261 | 261 | adding right-2 |
|
262 | 262 | 3 files updated, 0 files merged, 2 files removed, 0 files unresolved |
|
263 | merging b | |
|
263 | 264 | warning: conflicts during merge. |
|
264 | merging b | |
|
265 | 265 | merging b failed! |
|
266 | 266 | 2 files updated, 0 files merged, 0 files removed, 1 files unresolved |
|
267 | 267 | There are unresolved merges, you can redo the full merge using: |
@@ -14,11 +14,15 b' resolving manifests' | |||
|
14 | 14 | a: remote moved to b -> m |
|
15 | 15 | copying a to b |
|
16 | 16 | copying a to c |
|
17 | picked tool 'internal:merge' for a (binary False symlink False) | |
|
17 | 18 | merging a and b |
|
18 | 19 | my a@fb3948d97f07+ other b@40da226db0f0 ancestor a@583c7b748052 |
|
20 | premerge successful | |
|
19 | 21 | removing a |
|
22 | picked tool 'internal:merge' for a (binary False symlink False) | |
|
20 | 23 | merging a and c |
|
21 | 24 | my a@fb3948d97f07+ other c@40da226db0f0 ancestor a@583c7b748052 |
|
25 | premerge successful | |
|
22 | 26 | 0 files updated, 2 files merged, 0 files removed, 0 files unresolved |
|
23 | 27 | (branch merge, don't forget to commit) |
|
24 | 28 | -- b -- |
@@ -10,10 +10,14 b' resolving manifests' | |||
|
10 | 10 | foo: versions differ -> m |
|
11 | 11 | foo: remote copied to bar -> m |
|
12 | 12 | copying foo to bar |
|
13 | picked tool 'internal:merge' for foo (binary False symlink False) | |
|
13 | 14 | merging foo and bar |
|
14 | 15 | my foo@2092631ce82b+ other bar@7731dad1c2b9 ancestor foo@310fd17130da |
|
16 | premerge successful | |
|
17 | picked tool 'internal:merge' for foo (binary False symlink False) | |
|
15 | 18 | merging foo |
|
16 | 19 | my foo@2092631ce82b+ other foo@7731dad1c2b9 ancestor foo@310fd17130da |
|
20 | premerge successful | |
|
17 | 21 | 0 files updated, 2 files merged, 0 files removed, 0 files unresolved |
|
18 | 22 | (branch merge, don't forget to commit) |
|
19 | 23 | -- foo -- |
@@ -2,7 +2,6 b' Checking encoding (ascii)...' | |||
|
2 | 2 | Checking extensions... |
|
3 | 3 | Checking templates... |
|
4 | 4 | Checking patch... |
|
5 | Checking merge helper... | |
|
6 | 5 | Checking commit editor... |
|
7 | 6 | Checking username... |
|
8 | 7 | No problems detected |
@@ -28,8 +28,10 b' resolving manifests' | |||
|
28 | 28 | 1a -> 1 * |
|
29 | 29 | checking for directory renames |
|
30 | 30 | 1a: local moved to 1 -> m |
|
31 | picked tool 'internal:merge' for 1a (binary False symlink False) | |
|
31 | 32 | merging 1a and 1 |
|
32 | 33 | my 1a@ac7575e3c052+ other 1@746e9549ea96 ancestor 1@81f4b099af3d |
|
34 | premerge successful | |
|
33 | 35 | 0 files updated, 1 files merged, 0 files removed, 0 files unresolved |
|
34 | 36 | (branch merge, don't forget to commit) |
|
35 | 37 | 1 files updated, 0 files merged, 1 files removed, 0 files unresolved |
@@ -44,8 +46,10 b' resolving manifests' | |||
|
44 | 46 | checking for directory renames |
|
45 | 47 | 1: remote moved to 1a -> m |
|
46 | 48 | copying 1 to 1a |
|
49 | picked tool 'internal:merge' for 1 (binary False symlink False) | |
|
47 | 50 | merging 1 and 1a |
|
48 | 51 | my 1@746e9549ea96+ other 1a@ac7575e3c052 ancestor 1@81f4b099af3d |
|
52 | premerge successful | |
|
49 | 53 | removing 1 |
|
50 | 54 | 0 files updated, 1 files merged, 0 files removed, 0 files unresolved |
|
51 | 55 | (branch merge, don't forget to commit) |
@@ -25,8 +25,10 b' resolving manifests' | |||
|
25 | 25 | ancestor 0a3ab4856510 local 2d2f9a22c82b+ remote 7d3b554bfdf1 |
|
26 | 26 | searching for copies back to rev 1 |
|
27 | 27 | bar: versions differ -> m |
|
28 | picked tool 'internal:merge' for bar (binary False symlink False) | |
|
28 | 29 | merging bar |
|
29 | 30 | my bar@2d2f9a22c82b+ other bar@7d3b554bfdf1 ancestor bar@0a3ab4856510 |
|
31 | premerge successful | |
|
30 | 32 | 0 files updated, 1 files merged, 0 files removed, 0 files unresolved |
|
31 | 33 | (branch merge, don't forget to commit) |
|
32 | 34 | % contents of bar should be line1 line2 |
@@ -71,8 +73,10 b' resolving manifests' | |||
|
71 | 73 | ancestor 0a3ab4856510 local 2d2f9a22c82b+ remote 96ab80c60897 |
|
72 | 74 | searching for copies back to rev 1 |
|
73 | 75 | bar: versions differ -> m |
|
76 | picked tool 'internal:merge' for bar (binary False symlink False) | |
|
74 | 77 | merging bar |
|
75 | 78 | my bar@2d2f9a22c82b+ other bar@96ab80c60897 ancestor bar@0a3ab4856510 |
|
79 | premerge successful | |
|
76 | 80 | 0 files updated, 1 files merged, 0 files removed, 0 files unresolved |
|
77 | 81 | (branch merge, don't forget to commit) |
|
78 | 82 | % contents of bar should be line1 line2 |
@@ -18,27 +18,28 b' M zzz1_merge_ok' | |||
|
18 | 18 | M zzz2_merge_bad |
|
19 | 19 | # local merge with bad merge tool |
|
20 | 20 | merging zzz1_merge_ok |
|
21 | merging zzz1_merge_ok failed! | |
|
22 | 21 | merging zzz2_merge_bad |
|
23 | 22 | merging zzz2_merge_bad failed! |
|
24 |
3 files updated, |
|
|
23 | 3 files updated, 1 files merged, 2 files removed, 1 files unresolved | |
|
25 | 24 | There are unresolved merges with locally modified files. |
|
26 |
You can |
|
|
25 | You can finish the partial merge using: | |
|
27 | 26 | hg update 0 |
|
28 | 27 | hg update 1 |
|
29 | 28 | 2 files updated, 0 files merged, 3 files removed, 0 files unresolved |
|
30 | 29 | --- a/zzz1_merge_ok |
|
31 | 30 | +++ b/zzz1_merge_ok |
|
31 | +new first line | |
|
32 | 32 | +new last line |
|
33 | 33 | --- a/zzz2_merge_bad |
|
34 | 34 | +++ b/zzz2_merge_bad |
|
35 | 35 | +another last line |
|
36 | 36 | M zzz1_merge_ok |
|
37 | 37 | M zzz2_merge_bad |
|
38 | ? zzz2_merge_bad.orig | |
|
38 | 39 | # local merge with conflicts |
|
39 | warning: conflicts during merge. | |
|
40 | 40 | merging zzz1_merge_ok |
|
41 | 41 | merging zzz2_merge_bad |
|
42 | warning: conflicts during merge. | |
|
42 | 43 | merging zzz2_merge_bad failed! |
|
43 | 44 | 3 files updated, 1 files merged, 2 files removed, 1 files unresolved |
|
44 | 45 | There are unresolved merges with locally modified files. |
@@ -57,6 +58,7 b' 2 files updated, 0 files merged, 3 files' | |||
|
57 | 58 | +new last line |
|
58 | 59 | M zzz1_merge_ok |
|
59 | 60 | M zzz2_merge_bad |
|
61 | ? zzz2_merge_bad.orig | |
|
60 | 62 | # local merge without conflicts |
|
61 | 63 | merging zzz1_merge_ok |
|
62 | 64 | 4 files updated, 1 files merged, 2 files removed, 0 files unresolved |
@@ -9,8 +9,8 b' 9eca13a34789' | |||
|
9 | 9 | 1 files updated, 0 files merged, 0 files removed, 0 files unresolved |
|
10 | 10 | f248da0d4c3e tip |
|
11 | 11 | 1 files updated, 0 files merged, 0 files removed, 0 files unresolved |
|
12 | merging file1 | |
|
12 | 13 | warning: conflicts during merge. |
|
13 | merging file1 | |
|
14 | 14 | merging file1 failed! |
|
15 | 15 | 0 files updated, 0 files merged, 0 files removed, 1 files unresolved |
|
16 | 16 | There are unresolved merges with locally modified files. |
@@ -23,15 +23,19 b' diff -r f248da0d4c3e file1' | |||
|
23 | 23 | @@ -1,3 +1,7 @@ |
|
24 | 24 | added file1 |
|
25 | 25 | another line of text |
|
26 |
+<<<<<<< |
|
|
26 | +<<<<<<< local | |
|
27 | 27 | +changed file1 different |
|
28 | 28 | +======= |
|
29 | 29 | changed file1 |
|
30 | 30 | +>>>>>>> other |
|
31 | 31 | M file1 |
|
32 | ? file1.orig | |
|
32 | 33 | f248da0d4c3e+ tip |
|
33 | 34 | reverting file1 |
|
35 | ? file1.orig | |
|
34 | 36 | f248da0d4c3e tip |
|
37 | ? file1.orig | |
|
35 | 38 | f248da0d4c3e tip |
|
36 | 39 | 0 files updated, 0 files merged, 0 files removed, 0 files unresolved |
|
40 | ? file1.orig | |
|
37 | 41 | f248da0d4c3e tip |
@@ -6,8 +6,8 b' adding manifests' | |||
|
6 | 6 | adding file changes |
|
7 | 7 | added 1 changesets with 1 changes to 1 files (+1 heads) |
|
8 | 8 | (run 'hg heads' to see heads, 'hg merge' to merge) |
|
9 | merging test.txt | |
|
9 | 10 | warning: conflicts during merge. |
|
10 | merging test.txt | |
|
11 | 11 | merging test.txt failed! |
|
12 | 12 | 0 files updated, 0 files merged, 0 files removed, 1 files unresolved |
|
13 | 13 | There are unresolved merges, you can redo the full merge using: |
@@ -20,21 +20,22 b' adding manifests' | |||
|
20 | 20 | adding file changes |
|
21 | 21 | added 1 changesets with 1 changes to 1 files (+1 heads) |
|
22 | 22 | (run 'hg heads' to see heads, 'hg merge' to merge) |
|
23 | warning: conflicts during merge. | |
|
24 | 23 | resolving manifests |
|
25 | 24 | overwrite None partial False |
|
26 | 25 | ancestor faaea63e63a9 local 451c744aabcc+ remote a070d41e8360 |
|
27 | 26 | searching for copies back to rev 1 |
|
28 | 27 | test.txt: versions differ -> m |
|
28 | picked tool 'internal:merge' for test.txt (binary False symlink False) | |
|
29 | 29 | merging test.txt |
|
30 | 30 | my test.txt@451c744aabcc+ other test.txt@a070d41e8360 ancestor test.txt@faaea63e63a9 |
|
31 | warning: conflicts during merge. | |
|
31 | 32 | merging test.txt failed! |
|
32 | 33 | 0 files updated, 0 files merged, 0 files removed, 1 files unresolved |
|
33 | 34 | There are unresolved merges, you can redo the full merge using: |
|
34 | 35 | hg update -C 3 |
|
35 | 36 | hg merge 4 |
|
36 | 37 | one |
|
37 |
<<<<<<< |
|
|
38 | <<<<<<< local | |
|
38 | 39 | two-point-five |
|
39 | 40 | ======= |
|
40 | 41 | two-point-one |
@@ -5,8 +5,7 b' adding quux2' | |||
|
5 | 5 | merging bar |
|
6 | 6 | merging bar failed! |
|
7 | 7 | merging foo and baz |
|
8 | merging baz failed! | |
|
9 | 1 files updated, 0 files merged, 0 files removed, 2 files unresolved | |
|
8 | 1 files updated, 1 files merged, 0 files removed, 1 files unresolved | |
|
10 | 9 | There are unresolved merges, you can redo the full merge using: |
|
11 | 10 | hg update -C 2 |
|
12 | 11 | hg merge 1 |
@@ -14,8 +13,7 b' 3 files updated, 0 files merged, 1 files' | |||
|
14 | 13 | merging bar |
|
15 | 14 | merging bar failed! |
|
16 | 15 | merging baz and foo |
|
17 | merging baz failed! | |
|
18 | 1 files updated, 0 files merged, 0 files removed, 2 files unresolved | |
|
16 | 1 files updated, 1 files merged, 0 files removed, 1 files unresolved | |
|
19 | 17 | There are unresolved merges, you can redo the full merge using: |
|
20 | 18 | hg update -C 1 |
|
21 | 19 | hg merge 2 |
@@ -19,8 +19,10 b' resolving manifests' | |||
|
19 | 19 | a: remote moved to b -> m |
|
20 | 20 | b2: remote created -> g |
|
21 | 21 | copying a to b |
|
22 | picked tool 'internal:merge' for a (binary False symlink False) | |
|
22 | 23 | merging a and b |
|
23 | 24 | my a@f26ec4fc3fa3+ other b@8e765a822af2 ancestor a@af1939970a1c |
|
25 | premerge successful | |
|
24 | 26 | removing a |
|
25 | 27 | warning: detected divergent renames of a2 to: |
|
26 | 28 | c2 |
@@ -13,8 +13,11 b' resolving manifests' | |||
|
13 | 13 | rev: versions differ -> m |
|
14 | 14 | a: remote copied to b -> m |
|
15 | 15 | copying a to b |
|
16 | picked tool 'python ../merge' for a (binary False symlink False) | |
|
16 | 17 | merging a and b |
|
17 | 18 | my a@e300d1c794ec+ other b@735846fee2d7 ancestor a@924404dff337 |
|
19 | premerge successful | |
|
20 | picked tool 'python ../merge' for rev (binary False symlink False) | |
|
18 | 21 | merging rev |
|
19 | 22 | my rev@e300d1c794ec+ other rev@735846fee2d7 ancestor rev@924404dff337 |
|
20 | 23 | 0 files updated, 2 files merged, 0 files removed, 0 files unresolved |
@@ -41,8 +44,11 b' resolving manifests' | |||
|
41 | 44 | b: local copied to a -> m |
|
42 | 45 | rev: versions differ -> m |
|
43 | 46 | getting a |
|
47 | picked tool 'python ../merge' for b (binary False symlink False) | |
|
44 | 48 | merging b and a |
|
45 | 49 | my b@ac809aeed39a+ other a@f4db7e329e71 ancestor a@924404dff337 |
|
50 | premerge successful | |
|
51 | picked tool 'python ../merge' for rev (binary False symlink False) | |
|
46 | 52 | merging rev |
|
47 | 53 | my rev@ac809aeed39a+ other rev@f4db7e329e71 ancestor rev@924404dff337 |
|
48 | 54 | 1 files updated, 2 files merged, 0 files removed, 0 files unresolved |
@@ -68,9 +74,12 b' resolving manifests' | |||
|
68 | 74 | rev: versions differ -> m |
|
69 | 75 | a: remote moved to b -> m |
|
70 | 76 | copying a to b |
|
77 | picked tool 'python ../merge' for a (binary False symlink False) | |
|
71 | 78 | merging a and b |
|
72 | 79 | my a@e300d1c794ec+ other b@e03727d2d66b ancestor a@924404dff337 |
|
80 | premerge successful | |
|
73 | 81 | removing a |
|
82 | picked tool 'python ../merge' for rev (binary False symlink False) | |
|
74 | 83 | merging rev |
|
75 | 84 | my rev@e300d1c794ec+ other rev@e03727d2d66b ancestor rev@924404dff337 |
|
76 | 85 | 0 files updated, 2 files merged, 0 files removed, 0 files unresolved |
@@ -94,8 +103,11 b' resolving manifests' | |||
|
94 | 103 | checking for directory renames |
|
95 | 104 | b: local moved to a -> m |
|
96 | 105 | rev: versions differ -> m |
|
106 | picked tool 'python ../merge' for b (binary False symlink False) | |
|
97 | 107 | merging b and a |
|
98 | 108 | my b@ecf3cb2a4219+ other a@f4db7e329e71 ancestor a@924404dff337 |
|
109 | premerge successful | |
|
110 | picked tool 'python ../merge' for rev (binary False symlink False) | |
|
99 | 111 | merging rev |
|
100 | 112 | my rev@ecf3cb2a4219+ other rev@f4db7e329e71 ancestor rev@924404dff337 |
|
101 | 113 | 0 files updated, 2 files merged, 0 files removed, 0 files unresolved |
@@ -120,6 +132,7 b' resolving manifests' | |||
|
120 | 132 | rev: versions differ -> m |
|
121 | 133 | b: remote created -> g |
|
122 | 134 | getting b |
|
135 | picked tool 'python ../merge' for rev (binary False symlink False) | |
|
123 | 136 | merging rev |
|
124 | 137 | my rev@94b33a1b7f2d+ other rev@735846fee2d7 ancestor rev@924404dff337 |
|
125 | 138 | 1 files updated, 1 files merged, 0 files removed, 0 files unresolved |
@@ -142,6 +155,7 b' resolving manifests' | |||
|
142 | 155 | b -> a |
|
143 | 156 | checking for directory renames |
|
144 | 157 | rev: versions differ -> m |
|
158 | picked tool 'python ../merge' for rev (binary False symlink False) | |
|
145 | 159 | merging rev |
|
146 | 160 | my rev@ac809aeed39a+ other rev@97c705ade336 ancestor rev@924404dff337 |
|
147 | 161 | 0 files updated, 1 files merged, 0 files removed, 0 files unresolved |
@@ -168,6 +182,7 b' resolving manifests' | |||
|
168 | 182 | b: remote created -> g |
|
169 | 183 | removing a |
|
170 | 184 | getting b |
|
185 | picked tool 'python ../merge' for rev (binary False symlink False) | |
|
171 | 186 | merging rev |
|
172 | 187 | my rev@94b33a1b7f2d+ other rev@e03727d2d66b ancestor rev@924404dff337 |
|
173 | 188 | 1 files updated, 1 files merged, 1 files removed, 0 files unresolved |
@@ -189,6 +204,7 b' resolving manifests' | |||
|
189 | 204 | b -> a |
|
190 | 205 | checking for directory renames |
|
191 | 206 | rev: versions differ -> m |
|
207 | picked tool 'python ../merge' for rev (binary False symlink False) | |
|
192 | 208 | merging rev |
|
193 | 209 | my rev@ecf3cb2a4219+ other rev@97c705ade336 ancestor rev@924404dff337 |
|
194 | 210 | 0 files updated, 1 files merged, 0 files removed, 0 files unresolved |
@@ -206,8 +222,10 b' resolving manifests' | |||
|
206 | 222 | searching for copies back to rev 1 |
|
207 | 223 | b: versions differ -> m |
|
208 | 224 | rev: versions differ -> m |
|
225 | picked tool 'python ../merge' for b (binary False symlink False) | |
|
209 | 226 | merging b |
|
210 | 227 | my b@ec03c2ca8642+ other b@79cc6877a3b7 ancestor a@924404dff337 |
|
228 | picked tool 'python ../merge' for rev (binary False symlink False) | |
|
211 | 229 | merging rev |
|
212 | 230 | my rev@ec03c2ca8642+ other rev@79cc6877a3b7 ancestor rev@924404dff337 |
|
213 | 231 | 0 files updated, 2 files merged, 0 files removed, 0 files unresolved |
@@ -238,6 +256,7 b' warning: detected divergent renames of a' | |||
|
238 | 256 | b |
|
239 | 257 | c |
|
240 | 258 | getting c |
|
259 | picked tool 'python ../merge' for rev (binary False symlink False) | |
|
241 | 260 | merging rev |
|
242 | 261 | my rev@ecf3cb2a4219+ other rev@e6abcc1a30c2 ancestor rev@924404dff337 |
|
243 | 262 | 1 files updated, 1 files merged, 0 files removed, 0 files unresolved |
@@ -256,8 +275,10 b' resolving manifests' | |||
|
256 | 275 | searching for copies back to rev 1 |
|
257 | 276 | b: versions differ -> m |
|
258 | 277 | rev: versions differ -> m |
|
278 | picked tool 'python ../merge' for b (binary False symlink False) | |
|
259 | 279 | merging b |
|
260 | 280 | my b@ac809aeed39a+ other b@af30c7647fc7 ancestor b@000000000000 |
|
281 | picked tool 'python ../merge' for rev (binary False symlink False) | |
|
261 | 282 | merging rev |
|
262 | 283 | my rev@ac809aeed39a+ other rev@af30c7647fc7 ancestor rev@924404dff337 |
|
263 | 284 | 0 files updated, 2 files merged, 0 files removed, 0 files unresolved |
@@ -278,8 +299,10 b' resolving manifests' | |||
|
278 | 299 | b: versions differ -> m |
|
279 | 300 | rev: versions differ -> m |
|
280 | 301 | removing a |
|
302 | picked tool 'python ../merge' for b (binary False symlink False) | |
|
281 | 303 | merging b |
|
282 | 304 | my b@59318016310c+ other b@e03727d2d66b ancestor b@000000000000 |
|
305 | picked tool 'python ../merge' for rev (binary False symlink False) | |
|
283 | 306 | merging rev |
|
284 | 307 | my rev@59318016310c+ other rev@e03727d2d66b ancestor rev@924404dff337 |
|
285 | 308 | 0 files updated, 2 files merged, 1 files removed, 0 files unresolved |
@@ -299,8 +322,10 b' resolving manifests' | |||
|
299 | 322 | b: versions differ -> m |
|
300 | 323 | rev: versions differ -> m |
|
301 | 324 | getting a |
|
325 | picked tool 'python ../merge' for b (binary False symlink False) | |
|
302 | 326 | merging b |
|
303 | 327 | my b@ac809aeed39a+ other b@8dbce441892a ancestor b@000000000000 |
|
328 | picked tool 'python ../merge' for rev (binary False symlink False) | |
|
304 | 329 | merging rev |
|
305 | 330 | my rev@ac809aeed39a+ other rev@8dbce441892a ancestor rev@924404dff337 |
|
306 | 331 | 1 files updated, 2 files merged, 0 files removed, 0 files unresolved |
@@ -321,8 +346,10 b' resolving manifests' | |||
|
321 | 346 | b: versions differ -> m |
|
322 | 347 | rev: versions differ -> m |
|
323 | 348 | removing a |
|
349 | picked tool 'python ../merge' for b (binary False symlink False) | |
|
324 | 350 | merging b |
|
325 | 351 | my b@59318016310c+ other b@e03727d2d66b ancestor b@000000000000 |
|
352 | picked tool 'python ../merge' for rev (binary False symlink False) | |
|
326 | 353 | merging rev |
|
327 | 354 | my rev@59318016310c+ other rev@e03727d2d66b ancestor rev@924404dff337 |
|
328 | 355 | 0 files updated, 2 files merged, 1 files removed, 0 files unresolved |
@@ -342,8 +369,10 b' resolving manifests' | |||
|
342 | 369 | b: versions differ -> m |
|
343 | 370 | rev: versions differ -> m |
|
344 | 371 | getting a |
|
372 | picked tool 'python ../merge' for b (binary False symlink False) | |
|
345 | 373 | merging b |
|
346 | 374 | my b@ac809aeed39a+ other b@8dbce441892a ancestor b@000000000000 |
|
375 | picked tool 'python ../merge' for rev (binary False symlink False) | |
|
347 | 376 | merging rev |
|
348 | 377 | my rev@ac809aeed39a+ other rev@8dbce441892a ancestor rev@924404dff337 |
|
349 | 378 | 1 files updated, 2 files merged, 0 files removed, 0 files unresolved |
@@ -362,8 +391,10 b' resolving manifests' | |||
|
362 | 391 | searching for copies back to rev 1 |
|
363 | 392 | b: versions differ -> m |
|
364 | 393 | rev: versions differ -> m |
|
394 | picked tool 'python ../merge' for b (binary False symlink False) | |
|
365 | 395 | merging b |
|
366 | 396 | my b@0b76e65c8289+ other b@735846fee2d7 ancestor b@000000000000 |
|
397 | picked tool 'python ../merge' for rev (binary False symlink False) | |
|
367 | 398 | merging rev |
|
368 | 399 | my rev@0b76e65c8289+ other rev@735846fee2d7 ancestor rev@924404dff337 |
|
369 | 400 | 0 files updated, 2 files merged, 0 files removed, 0 files unresolved |
@@ -384,8 +415,10 b' resolving manifests' | |||
|
384 | 415 | rev: versions differ -> m |
|
385 | 416 | a: prompt recreating -> g |
|
386 | 417 | getting a |
|
418 | picked tool 'python ../merge' for b (binary False symlink False) | |
|
387 | 419 | merging b |
|
388 | 420 | my b@ecf3cb2a4219+ other b@8dbce441892a ancestor b@000000000000 |
|
421 | picked tool 'python ../merge' for rev (binary False symlink False) | |
|
389 | 422 | merging rev |
|
390 | 423 | my rev@ecf3cb2a4219+ other rev@8dbce441892a ancestor rev@924404dff337 |
|
391 | 424 | 1 files updated, 2 files merged, 0 files removed, 0 files unresolved |
@@ -404,8 +437,10 b' resolving manifests' | |||
|
404 | 437 | searching for copies back to rev 1 |
|
405 | 438 | b: versions differ -> m |
|
406 | 439 | rev: versions differ -> m |
|
440 | picked tool 'python ../merge' for b (binary False symlink False) | |
|
407 | 441 | merging b |
|
408 | 442 | my b@0b76e65c8289+ other b@e03727d2d66b ancestor b@000000000000 |
|
443 | picked tool 'python ../merge' for rev (binary False symlink False) | |
|
409 | 444 | merging rev |
|
410 | 445 | my rev@0b76e65c8289+ other rev@e03727d2d66b ancestor rev@924404dff337 |
|
411 | 446 | 0 files updated, 2 files merged, 0 files removed, 0 files unresolved |
@@ -430,9 +465,11 b' resolving manifests' | |||
|
430 | 465 | rev: versions differ -> m |
|
431 | 466 | a: remote moved to b -> m |
|
432 | 467 | copying a to b |
|
468 | picked tool 'python ../merge' for a (binary False symlink False) | |
|
433 | 469 | merging a and b |
|
434 | 470 | my a@e300d1c794ec+ other b@79cc6877a3b7 ancestor a@924404dff337 |
|
435 | 471 | removing a |
|
472 | picked tool 'python ../merge' for rev (binary False symlink False) | |
|
436 | 473 | merging rev |
|
437 | 474 | my rev@e300d1c794ec+ other rev@79cc6877a3b7 ancestor rev@924404dff337 |
|
438 | 475 | 0 files updated, 2 files merged, 0 files removed, 0 files unresolved |
@@ -456,8 +493,10 b' resolving manifests' | |||
|
456 | 493 | checking for directory renames |
|
457 | 494 | b: local moved to a -> m |
|
458 | 495 | rev: versions differ -> m |
|
496 | picked tool 'python ../merge' for b (binary False symlink False) | |
|
459 | 497 | merging b and a |
|
460 | 498 | my b@ec03c2ca8642+ other a@f4db7e329e71 ancestor a@924404dff337 |
|
499 | picked tool 'python ../merge' for rev (binary False symlink False) | |
|
461 | 500 | merging rev |
|
462 | 501 | my rev@ec03c2ca8642+ other rev@f4db7e329e71 ancestor rev@924404dff337 |
|
463 | 502 | 0 files updated, 2 files merged, 0 files removed, 0 files unresolved |
@@ -484,9 +523,12 b' resolving manifests' | |||
|
484 | 523 | b: local moved to a -> m |
|
485 | 524 | rev: versions differ -> m |
|
486 | 525 | c: remote created -> g |
|
526 | picked tool 'python ../merge' for b (binary False symlink False) | |
|
487 | 527 | merging b and a |
|
488 | 528 | my b@ecf3cb2a4219+ other a@2b958612230f ancestor a@924404dff337 |
|
529 | premerge successful | |
|
489 | 530 | getting c |
|
531 | picked tool 'python ../merge' for rev (binary False symlink False) | |
|
490 | 532 | merging rev |
|
491 | 533 | my rev@ecf3cb2a4219+ other rev@2b958612230f ancestor rev@924404dff337 |
|
492 | 534 | 1 files updated, 2 files merged, 0 files removed, 0 files unresolved |
@@ -22,6 +22,7 b' resolving manifests' | |||
|
22 | 22 | b |
|
23 | 23 | a: versions differ -> m |
|
24 | 24 | b: remote created -> g |
|
25 | picked tool 'true' for a (binary False symlink False) | |
|
25 | 26 | merging a |
|
26 | 27 | my a@33aaa84a386b+ other a@802f095af299 ancestor a@33aaa84a386b |
|
27 | 28 | getting b |
@@ -58,6 +59,7 b' resolving manifests' | |||
|
58 | 59 | b |
|
59 | 60 | a: versions differ -> m |
|
60 | 61 | b: remote created -> g |
|
62 | picked tool 'true' for a (binary False symlink False) | |
|
61 | 63 | merging a |
|
62 | 64 | my a@33aaa84a386b+ other a@802f095af299 ancestor a@33aaa84a386b |
|
63 | 65 | getting b |
@@ -109,8 +111,10 b' resolving manifests' | |||
|
109 | 111 | searching for copies back to rev 1 |
|
110 | 112 | a: versions differ -> m |
|
111 | 113 | b: versions differ -> m |
|
114 | picked tool 'true' for a (binary False symlink False) | |
|
112 | 115 | merging a |
|
113 | 116 | my a@802f095af299+ other a@030602aee63d ancestor a@33aaa84a386b |
|
117 | picked tool 'true' for b (binary False symlink False) | |
|
114 | 118 | merging b |
|
115 | 119 | my b@802f095af299+ other b@030602aee63d ancestor b@000000000000 |
|
116 | 120 | 0 files updated, 2 files merged, 0 files removed, 0 files unresolved |
General Comments 0
You need to be logged in to leave comments.
Login now