Show More
@@ -5,7 +5,7 b'' | |||||
5 | # This software may be used and distributed according to the terms |
|
5 | # This software may be used and distributed according to the terms | |
6 | # of the GNU General Public License, incorporated herein by reference. |
|
6 | # of the GNU General Public License, incorporated herein by reference. | |
7 |
|
7 | |||
8 | from node import nullrev |
|
8 | from node import nullrev, short | |
9 | from i18n import _ |
|
9 | from i18n import _ | |
10 | import util, os, tempfile, simplemerge, re, filecmp |
|
10 | import util, os, tempfile, simplemerge, re, filecmp | |
11 |
|
11 | |||
@@ -99,13 +99,14 b' def _matcheol(file, origfile):' | |||||
99 | if newdata != data: |
|
99 | if newdata != data: | |
100 | open(file, "wb").write(newdata) |
|
100 | open(file, "wb").write(newdata) | |
101 |
|
101 | |||
102 |
def filemerge(repo, |
|
102 | def filemerge(repo, mynode, orig, fcd, fco, fca): | |
103 | """perform a 3-way merge in the working directory |
|
103 | """perform a 3-way merge in the working directory | |
104 |
|
104 | |||
105 | fw = original filename in the working directory |
|
105 | mynode = parent node before merge | |
106 | fd = destination filename in the working directory |
|
106 | orig = original local filename before merge | |
107 | fo = filename in other parent |
|
107 | fco = other file context | |
108 | wctx, mctx = working and merge changecontexts |
|
108 | fca = ancestor file context | |
|
109 | fcd = local file context for current/destination file | |||
109 | """ |
|
110 | """ | |
110 |
|
111 | |||
111 | def temp(prefix, ctx): |
|
112 | def temp(prefix, ctx): | |
@@ -123,23 +124,21 b' def filemerge(repo, fw, fd, fo, wctx, mc' | |||||
123 | except IOError: |
|
124 | except IOError: | |
124 | return False |
|
125 | return False | |
125 |
|
126 | |||
126 | fco = mctx.filectx(fo) |
|
127 | if not fco.cmp(fcd.data()): # files identical? | |
127 | if not fco.cmp(wctx.filectx(fd).data()): # files identical? |
|
|||
128 | return None |
|
128 | return None | |
129 |
|
129 | |||
130 | ui = repo.ui |
|
130 | ui = repo.ui | |
131 | fcm = wctx.filectx(fw) |
|
131 | fd = fcd.path() | |
132 | fca = fcm.ancestor(fco) or repo.filectx(fw, fileid=nullrev) |
|
132 | binary = isbin(fcd) or isbin(fco) or isbin(fca) | |
133 |
|
|
133 | symlink = fcd.islink() or fco.islink() | |
134 | symlink = fcm.islink() or fco.islink() |
|
134 | tool, toolpath = _picktool(repo, ui, fd, binary, symlink) | |
135 | tool, toolpath = _picktool(repo, ui, fw, binary, symlink) |
|
|||
136 | ui.debug(_("picked tool '%s' for %s (binary %s symlink %s)\n") % |
|
135 | ui.debug(_("picked tool '%s' for %s (binary %s symlink %s)\n") % | |
137 |
(tool, f |
|
136 | (tool, fd, binary, symlink)) | |
138 |
|
137 | |||
139 | if not tool: |
|
138 | if not tool: | |
140 | tool = "internal:local" |
|
139 | tool = "internal:local" | |
141 | if ui.prompt(_(" no tool found to merge %s\n" |
|
140 | if ui.prompt(_(" no tool found to merge %s\n" | |
142 |
"keep (l)ocal or take (o)ther?") % f |
|
141 | "keep (l)ocal or take (o)ther?") % fd, | |
143 | _("[lo]"), _("l")) != _("l"): |
|
142 | _("[lo]"), _("l")) != _("l"): | |
144 | tool = "internal:other" |
|
143 | tool = "internal:other" | |
145 | if tool == "internal:local": |
|
144 | if tool == "internal:local": | |
@@ -158,11 +157,12 b' def filemerge(repo, fw, fd, fo, wctx, mc' | |||||
158 | back = a + ".orig" |
|
157 | back = a + ".orig" | |
159 | util.copyfile(a, back) |
|
158 | util.copyfile(a, back) | |
160 |
|
159 | |||
161 |
if |
|
160 | if orig != fco.path(): | |
162 |
repo.ui.status(_("merging %s and %s\n") % ( |
|
161 | repo.ui.status(_("merging %s and %s to %s\n") % (orig, fco.path(), fd)) | |
163 | else: |
|
162 | else: | |
164 |
repo.ui.status(_("merging %s\n") % f |
|
163 | repo.ui.status(_("merging %s\n") % fd) | |
165 | repo.ui.debug(_("my %s other %s ancestor %s\n") % (fcm, fco, fca)) |
|
164 | ||
|
165 | repo.ui.debug(_("my %s other %s ancestor %s\n") % (fcd, fco, fca)) | |||
166 |
|
166 | |||
167 | # do we attempt to simplemerge first? |
|
167 | # do we attempt to simplemerge first? | |
168 | if _toolbool(ui, tool, "premerge", not (binary or symlink)): |
|
168 | if _toolbool(ui, tool, "premerge", not (binary or symlink)): | |
@@ -176,9 +176,9 b' def filemerge(repo, fw, fd, fo, wctx, mc' | |||||
176 | util.copyfile(back, a) # restore from backup and try again |
|
176 | util.copyfile(back, a) # restore from backup and try again | |
177 |
|
177 | |||
178 | env = dict(HG_FILE=fd, |
|
178 | env = dict(HG_FILE=fd, | |
179 |
HG_MY_NODE=s |
|
179 | HG_MY_NODE=short(mynode), | |
180 |
HG_OTHER_NODE=str( |
|
180 | HG_OTHER_NODE=str(fco.changectx()), | |
181 |
HG_MY_ISLINK=fc |
|
181 | HG_MY_ISLINK=fcd.islink(), | |
182 | HG_OTHER_ISLINK=fco.islink(), |
|
182 | HG_OTHER_ISLINK=fco.islink(), | |
183 | HG_BASE_ISLINK=fca.islink()) |
|
183 | HG_BASE_ISLINK=fca.islink()) | |
184 |
|
184 | |||
@@ -194,7 +194,7 b' def filemerge(repo, fw, fd, fo, wctx, mc' | |||||
194 | r = util.system(toolpath + ' ' + args, cwd=repo.root, environ=env) |
|
194 | r = util.system(toolpath + ' ' + args, cwd=repo.root, environ=env) | |
195 |
|
195 | |||
196 | if not r and _toolbool(ui, tool, "checkconflicts"): |
|
196 | if not r and _toolbool(ui, tool, "checkconflicts"): | |
197 |
if re.match("^(<<<<<<< .*|=======|>>>>>>> .*)$", fc |
|
197 | if re.match("^(<<<<<<< .*|=======|>>>>>>> .*)$", fcd.data()): | |
198 | r = 1 |
|
198 | r = 1 | |
199 |
|
199 | |||
200 | if not r and _toolbool(ui, tool, "checkchanged"): |
|
200 | if not r and _toolbool(ui, tool, "checkchanged"): |
@@ -5,9 +5,45 b'' | |||||
5 | # This software may be used and distributed according to the terms |
|
5 | # This software may be used and distributed according to the terms | |
6 | # of the GNU General Public License, incorporated herein by reference. |
|
6 | # of the GNU General Public License, incorporated herein by reference. | |
7 |
|
7 | |||
8 | from node import nullid, nullrev |
|
8 | from node import nullid, nullrev, hex | |
9 | from i18n import _ |
|
9 | from i18n import _ | |
10 | import errno, util, os, filemerge, copies |
|
10 | import errno, util, os, filemerge, copies, sha, shutil | |
|
11 | ||||
|
12 | class mergestate(object): | |||
|
13 | '''track 3-way merge state of individual files''' | |||
|
14 | def __init__(self, repo): | |||
|
15 | self._repo = repo | |||
|
16 | self._state = {} | |||
|
17 | self._data = {} | |||
|
18 | def reset(self, node): | |||
|
19 | self._local = node | |||
|
20 | shutil.rmtree(self._repo.join("merge"), True) | |||
|
21 | def add(self, fcl, fco, fca, fd, flags): | |||
|
22 | hash = sha.sha(fcl.path()).hexdigest() | |||
|
23 | self._repo.opener("merge/" + hash, "w").write(fcl.data()) | |||
|
24 | self._state[fd] = 'u' | |||
|
25 | self._data[fd] = (hash, fcl.path(), fca.path(), hex(fca.filenode()), | |||
|
26 | fco.path(), flags) | |||
|
27 | def __contains__(self, dfile): | |||
|
28 | return dfile in self._state | |||
|
29 | def __getitem__(self, dfile): | |||
|
30 | return self._state[dfile] | |||
|
31 | def mark(self, dfile, state): | |||
|
32 | self._state[dfile] = state | |||
|
33 | def resolve(self, dfile, wctx, octx): | |||
|
34 | if self[dfile] == 'r': | |||
|
35 | return 0 | |||
|
36 | hash, lfile, afile, anode, ofile, flags = self._data[dfile] | |||
|
37 | f = self._repo.opener("merge/" + hash) | |||
|
38 | self._repo.wwrite(dfile, f.read(), flags) | |||
|
39 | fcd = wctx[dfile] | |||
|
40 | fco = octx[ofile] | |||
|
41 | fca = self._repo.filectx(afile, fileid=anode) | |||
|
42 | r = filemerge.filemerge(self._repo, self._local, lfile, fcd, fco, fca) | |||
|
43 | if not r: | |||
|
44 | util.set_flags(self._repo.wjoin(dfile), flags) | |||
|
45 | self.mark(dfile, 'r') | |||
|
46 | return r | |||
11 |
|
47 | |||
12 | def _checkunknown(wctx, mctx): |
|
48 | def _checkunknown(wctx, mctx): | |
13 | "check for collisions between unknown files and files in mctx" |
|
49 | "check for collisions between unknown files and files in mctx" | |
@@ -202,14 +238,29 b' def applyupdates(repo, action, wctx, mct' | |||||
202 |
|
238 | |||
203 | updated, merged, removed, unresolved = 0, 0, 0, 0 |
|
239 | updated, merged, removed, unresolved = 0, 0, 0, 0 | |
204 | action.sort() |
|
240 | action.sort() | |
205 | # prescan for copy/renames |
|
241 | ||
|
242 | ms = mergestate(repo) | |||
|
243 | ms.reset(wctx.parents()[0].node()) | |||
|
244 | moves = [] | |||
|
245 | ||||
|
246 | # prescan for merges | |||
206 | for a in action: |
|
247 | for a in action: | |
207 | f, m = a[:2] |
|
248 | f, m = a[:2] | |
208 | if m == 'm': # merge |
|
249 | if m == 'm': # merge | |
209 | f2, fd, flags, move = a[2:] |
|
250 | f2, fd, flags, move = a[2:] | |
210 | if f != fd: |
|
251 | repo.ui.debug(_("preserving %s for resolve of %s\n") % (f, fd)) | |
211 | repo.ui.debug(_("copying %s to %s\n") % (f, fd)) |
|
252 | fcl = wctx[f] | |
212 | repo.wwrite(fd, repo.wread(f), flags) |
|
253 | fco = mctx[f2] | |
|
254 | fca = fcl.ancestor(fco) or repo.filectx(f, fileid=nullrev) | |||
|
255 | ms.add(fcl, fco, fca, fd, flags) | |||
|
256 | if f != fd and move: | |||
|
257 | moves.append(f) | |||
|
258 | ||||
|
259 | # remove renamed files after safely stored | |||
|
260 | for f in moves: | |||
|
261 | if util.lexists(repo.wjoin(f)): | |||
|
262 | repo.ui.debug(_("removing %s\n") % f) | |||
|
263 | os.unlink(repo.wjoin(f)) | |||
213 |
|
264 | |||
214 | audit_path = util.path_auditor(repo.root) |
|
265 | audit_path = util.path_auditor(repo.root) | |
215 |
|
266 | |||
@@ -229,7 +280,7 b' def applyupdates(repo, action, wctx, mct' | |||||
229 | removed += 1 |
|
280 | removed += 1 | |
230 | elif m == "m": # merge |
|
281 | elif m == "m": # merge | |
231 | f2, fd, flags, move = a[2:] |
|
282 | f2, fd, flags, move = a[2:] | |
232 |
r = |
|
283 | r = ms.resolve(fd, wctx, mctx) | |
233 | if r > 0: |
|
284 | if r > 0: | |
234 | unresolved += 1 |
|
285 | unresolved += 1 | |
235 | else: |
|
286 | else: | |
@@ -237,10 +288,6 b' def applyupdates(repo, action, wctx, mct' | |||||
237 | updated += 1 |
|
288 | updated += 1 | |
238 | else: |
|
289 | else: | |
239 | merged += 1 |
|
290 | merged += 1 | |
240 | util.set_flags(repo.wjoin(fd), flags) |
|
|||
241 | if f != fd and move and util.lexists(repo.wjoin(f)): |
|
|||
242 | repo.ui.debug(_("removing %s\n") % f) |
|
|||
243 | os.unlink(repo.wjoin(f)) |
|
|||
244 | elif m == "g": # get |
|
291 | elif m == "g": # get | |
245 | flags = a[2] |
|
292 | flags = a[2] | |
246 | repo.ui.note(_("getting %s\n") % f) |
|
293 | repo.ui.note(_("getting %s\n") % f) |
@@ -1,9 +1,9 b'' | |||||
1 | created new head |
|
1 | created new head | |
2 | merging baz and foo |
|
2 | merging baz and foo to baz | |
3 | 1 files updated, 1 files merged, 0 files removed, 0 files unresolved |
|
3 | 1 files updated, 1 files merged, 0 files removed, 0 files unresolved | |
4 | (branch merge, don't forget to commit) |
|
4 | (branch merge, don't forget to commit) | |
5 | 1 files updated, 0 files merged, 1 files removed, 0 files unresolved |
|
5 | 1 files updated, 0 files merged, 1 files removed, 0 files unresolved | |
6 | merging foo and baz |
|
6 | merging foo and baz to baz | |
7 | 1 files updated, 1 files merged, 0 files removed, 0 files unresolved |
|
7 | 1 files updated, 1 files merged, 0 files removed, 0 files unresolved | |
8 | (branch merge, don't forget to commit) |
|
8 | (branch merge, don't forget to commit) | |
9 | created new head |
|
9 | created new head |
@@ -12,16 +12,16 b' resolving manifests' | |||||
12 | checking for directory renames |
|
12 | checking for directory renames | |
13 | a: remote moved to c -> m |
|
13 | a: remote moved to c -> m | |
14 | a: remote moved to b -> m |
|
14 | a: remote moved to b -> m | |
15 | copying a to b |
|
15 | preserving a for resolve of b | |
16 | copying a to c |
|
16 | preserving a for resolve of c | |
17 | picked tool 'internal:merge' for a (binary False symlink False) |
|
17 | removing a | |
18 | merging a and b |
|
18 | picked tool 'internal:merge' for b (binary False symlink False) | |
19 | my a@fb3948d97f07+ other b@40da226db0f0 ancestor a@583c7b748052 |
|
19 | merging a and b to b | |
|
20 | my b@fb3948d97f07+ other b@40da226db0f0 ancestor a@583c7b748052 | |||
20 | premerge successful |
|
21 | premerge successful | |
21 | removing a |
|
22 | picked tool 'internal:merge' for c (binary False symlink False) | |
22 | picked tool 'internal:merge' for a (binary False symlink False) |
|
23 | merging a and c to c | |
23 | merging a and c |
|
24 | my c@fb3948d97f07+ other c@40da226db0f0 ancestor a@583c7b748052 | |
24 | my a@fb3948d97f07+ other c@40da226db0f0 ancestor a@583c7b748052 |
|
|||
25 | premerge successful |
|
25 | premerge successful | |
26 | 0 files updated, 2 files merged, 0 files removed, 0 files unresolved |
|
26 | 0 files updated, 2 files merged, 0 files removed, 0 files unresolved | |
27 | (branch merge, don't forget to commit) |
|
27 | (branch merge, don't forget to commit) |
@@ -10,10 +10,11 b' resolving manifests' | |||||
10 | checking for directory renames |
|
10 | checking for directory renames | |
11 | foo: versions differ -> m |
|
11 | foo: versions differ -> m | |
12 | foo: remote copied to bar -> m |
|
12 | foo: remote copied to bar -> m | |
13 | copying foo to bar |
|
13 | preserving foo for resolve of bar | |
14 | picked tool 'internal:merge' for foo (binary False symlink False) |
|
14 | preserving foo for resolve of foo | |
15 | merging foo and bar |
|
15 | picked tool 'internal:merge' for bar (binary False symlink False) | |
16 | my foo@2092631ce82b+ other bar@7731dad1c2b9 ancestor foo@310fd17130da |
|
16 | merging foo and bar to bar | |
|
17 | my bar@2092631ce82b+ other bar@7731dad1c2b9 ancestor foo@310fd17130da | |||
17 | premerge successful |
|
18 | premerge successful | |
18 | picked tool 'internal:merge' for foo (binary False symlink False) |
|
19 | picked tool 'internal:merge' for foo (binary False symlink False) | |
19 | merging foo |
|
20 | merging foo |
@@ -34,9 +34,9 b' adding more to file a' | |||||
34 | -end- |
|
34 | -end- | |
35 | dumprevlog done |
|
35 | dumprevlog done | |
36 | undumping: |
|
36 | undumping: | |
37 |
.hg/store/ |
|
37 | .hg/store/00changelog.i | |
38 | .hg/store/00manifest.i |
|
38 | .hg/store/00manifest.i | |
39 |
.hg/store/ |
|
39 | .hg/store/data/a.i | |
40 | undumping done |
|
40 | undumping done | |
41 | checking changesets |
|
41 | checking changesets | |
42 | checking manifests |
|
42 | checking manifests |
@@ -3,7 +3,7 b' moving src/a.c to source/a.c' | |||||
3 | 1 files updated, 0 files merged, 1 files removed, 0 files unresolved |
|
3 | 1 files updated, 0 files merged, 1 files removed, 0 files unresolved | |
4 | created new head |
|
4 | created new head | |
5 | ? src/a.o |
|
5 | ? src/a.o | |
6 | merging src/a.c and source/a.c |
|
6 | merging src/a.c and source/a.c to source/a.c | |
7 | 1 files updated, 1 files merged, 0 files removed, 0 files unresolved |
|
7 | 1 files updated, 1 files merged, 0 files removed, 0 files unresolved | |
8 | (branch merge, don't forget to commit) |
|
8 | (branch merge, don't forget to commit) | |
9 | M source/a.c |
|
9 | M source/a.c |
@@ -30,8 +30,9 b' resolving manifests' | |||||
30 | 1a -> 1 * |
|
30 | 1a -> 1 * | |
31 | checking for directory renames |
|
31 | checking for directory renames | |
32 | 1a: local moved to 1 -> m |
|
32 | 1a: local moved to 1 -> m | |
|
33 | preserving 1a for resolve of 1a | |||
33 | picked tool 'internal:merge' for 1a (binary False symlink False) |
|
34 | picked tool 'internal:merge' for 1a (binary False symlink False) | |
34 | merging 1a and 1 |
|
35 | merging 1a and 1 to 1a | |
35 | my 1a@ac7575e3c052+ other 1@746e9549ea96 ancestor 1@81f4b099af3d |
|
36 | my 1a@ac7575e3c052+ other 1@746e9549ea96 ancestor 1@81f4b099af3d | |
36 | premerge successful |
|
37 | premerge successful | |
37 | 0 files updated, 1 files merged, 0 files removed, 0 files unresolved |
|
38 | 0 files updated, 1 files merged, 0 files removed, 0 files unresolved | |
@@ -47,11 +48,11 b' resolving manifests' | |||||
47 | 1a -> 1 * |
|
48 | 1a -> 1 * | |
48 | checking for directory renames |
|
49 | checking for directory renames | |
49 | 1: remote moved to 1a -> m |
|
50 | 1: remote moved to 1a -> m | |
50 | copying 1 to 1a |
|
51 | preserving 1 for resolve of 1a | |
51 | picked tool 'internal:merge' for 1 (binary False symlink False) |
|
52 | removing 1 | |
52 | merging 1 and 1a |
|
53 | picked tool 'internal:merge' for 1a (binary False symlink False) | |
53 | my 1@746e9549ea96+ other 1a@ac7575e3c052 ancestor 1@81f4b099af3d |
|
54 | merging 1 and 1a to 1a | |
|
55 | my 1a@746e9549ea96+ other 1a@ac7575e3c052 ancestor 1@81f4b099af3d | |||
54 | premerge successful |
|
56 | premerge successful | |
55 | removing 1 |
|
|||
56 | 0 files updated, 1 files merged, 0 files removed, 0 files unresolved |
|
57 | 0 files updated, 1 files merged, 0 files removed, 0 files unresolved | |
57 | (branch merge, don't forget to commit) |
|
58 | (branch merge, don't forget to commit) |
@@ -1,6 +1,6 b'' | |||||
1 | 1 files updated, 0 files merged, 0 files removed, 0 files unresolved |
|
1 | 1 files updated, 0 files merged, 0 files removed, 0 files unresolved | |
2 | created new head |
|
2 | created new head | |
3 | merging bar and foo |
|
3 | merging bar and foo to bar | |
4 | 0 files updated, 1 files merged, 0 files removed, 0 files unresolved |
|
4 | 0 files updated, 1 files merged, 0 files removed, 0 files unresolved | |
5 | (branch merge, don't forget to commit) |
|
5 | (branch merge, don't forget to commit) | |
6 | % contents of bar should be line0 line1 line2 |
|
6 | % contents of bar should be line0 line1 line2 | |
@@ -27,6 +27,7 b' resolving manifests' | |||||
27 | ancestor 0a3ab4856510 local 2d2f9a22c82b+ remote 7d3b554bfdf1 |
|
27 | ancestor 0a3ab4856510 local 2d2f9a22c82b+ remote 7d3b554bfdf1 | |
28 | searching for copies back to rev 1 |
|
28 | searching for copies back to rev 1 | |
29 | bar: versions differ -> m |
|
29 | bar: versions differ -> m | |
|
30 | preserving bar for resolve of bar | |||
30 | picked tool 'internal:merge' for bar (binary False symlink False) |
|
31 | picked tool 'internal:merge' for bar (binary False symlink False) | |
31 | merging bar |
|
32 | merging bar | |
32 | my bar@2d2f9a22c82b+ other bar@7d3b554bfdf1 ancestor bar@0a3ab4856510 |
|
33 | my bar@2d2f9a22c82b+ other bar@7d3b554bfdf1 ancestor bar@0a3ab4856510 | |
@@ -49,7 +50,7 b' adding manifests' | |||||
49 | adding file changes |
|
50 | adding file changes | |
50 | added 3 changesets with 3 changes to 2 files (+1 heads) |
|
51 | added 3 changesets with 3 changes to 2 files (+1 heads) | |
51 | 1 files updated, 0 files merged, 0 files removed, 0 files unresolved |
|
52 | 1 files updated, 0 files merged, 0 files removed, 0 files unresolved | |
52 | merging foo and bar |
|
53 | merging foo and bar to bar | |
53 | 0 files updated, 1 files merged, 0 files removed, 0 files unresolved |
|
54 | 0 files updated, 1 files merged, 0 files removed, 0 files unresolved | |
54 | (branch merge, don't forget to commit) |
|
55 | (branch merge, don't forget to commit) | |
55 | % contents of bar should be line0 line1 line2 |
|
56 | % contents of bar should be line0 line1 line2 | |
@@ -76,6 +77,7 b' resolving manifests' | |||||
76 | ancestor 0a3ab4856510 local 2d2f9a22c82b+ remote 96ab80c60897 |
|
77 | ancestor 0a3ab4856510 local 2d2f9a22c82b+ remote 96ab80c60897 | |
77 | searching for copies back to rev 1 |
|
78 | searching for copies back to rev 1 | |
78 | bar: versions differ -> m |
|
79 | bar: versions differ -> m | |
|
80 | preserving bar for resolve of bar | |||
79 | picked tool 'internal:merge' for bar (binary False symlink False) |
|
81 | picked tool 'internal:merge' for bar (binary False symlink False) | |
80 | merging bar |
|
82 | merging bar | |
81 | my bar@2d2f9a22c82b+ other bar@96ab80c60897 ancestor bar@0a3ab4856510 |
|
83 | my bar@2d2f9a22c82b+ other bar@96ab80c60897 ancestor bar@0a3ab4856510 |
@@ -1,5 +1,5 b'' | |||||
1 | created new head |
|
1 | created new head | |
2 | merging foo1 and foo |
|
2 | merging foo1 and foo to foo1 | |
3 | 1 files updated, 1 files merged, 0 files removed, 0 files unresolved |
|
3 | 1 files updated, 1 files merged, 0 files removed, 0 files unresolved | |
4 | (branch merge, don't forget to commit) |
|
4 | (branch merge, don't forget to commit) | |
5 | n 0 -2 bar |
|
5 | n 0 -2 bar |
@@ -8,7 +8,7 b' adding file changes' | |||||
8 | added 1 changesets with 1 changes to 1 files (+1 heads) |
|
8 | added 1 changesets with 1 changes to 1 files (+1 heads) | |
9 | (run 'hg heads' to see heads, 'hg merge' to merge) |
|
9 | (run 'hg heads' to see heads, 'hg merge' to merge) | |
10 | 0 files updated, 0 files merged, 0 files removed, 0 files unresolved |
|
10 | 0 files updated, 0 files merged, 0 files removed, 0 files unresolved | |
11 | merging testdir/subdir/a and testdir/a |
|
11 | merging testdir/subdir/a and testdir/a to testdir/subdir/a | |
12 | 0 files updated, 1 files merged, 0 files removed, 0 files unresolved |
|
12 | 0 files updated, 1 files merged, 0 files removed, 0 files unresolved | |
13 | (branch merge, don't forget to commit) |
|
13 | (branch merge, don't forget to commit) | |
14 | M testdir/subdir/a |
|
14 | M testdir/subdir/a |
@@ -26,6 +26,7 b' resolving manifests' | |||||
26 | ancestor faaea63e63a9 local 451c744aabcc+ remote a070d41e8360 |
|
26 | ancestor faaea63e63a9 local 451c744aabcc+ remote a070d41e8360 | |
27 | searching for copies back to rev 1 |
|
27 | searching for copies back to rev 1 | |
28 | test.txt: versions differ -> m |
|
28 | test.txt: versions differ -> m | |
|
29 | preserving test.txt for resolve of test.txt | |||
29 | picked tool 'internal:merge' for test.txt (binary False symlink False) |
|
30 | picked tool 'internal:merge' for test.txt (binary False symlink False) | |
30 | merging test.txt |
|
31 | merging test.txt | |
31 | my test.txt@451c744aabcc+ other test.txt@a070d41e8360 ancestor test.txt@faaea63e63a9 |
|
32 | my test.txt@451c744aabcc+ other test.txt@a070d41e8360 ancestor test.txt@faaea63e63a9 |
@@ -5,7 +5,7 b' adding quux2' | |||||
5 | created new head |
|
5 | created new head | |
6 | merging bar |
|
6 | merging bar | |
7 | merging bar failed! |
|
7 | merging bar failed! | |
8 | merging foo and baz |
|
8 | merging foo and baz to baz | |
9 | 1 files updated, 1 files merged, 0 files removed, 1 files unresolved |
|
9 | 1 files updated, 1 files merged, 0 files removed, 1 files unresolved | |
10 | There are unresolved merges, you can redo the full merge using: |
|
10 | There are unresolved merges, you can redo the full merge using: | |
11 | hg update -C 2 |
|
11 | hg update -C 2 | |
@@ -13,7 +13,7 b' There are unresolved merges, you can red' | |||||
13 | 3 files updated, 0 files merged, 1 files removed, 0 files unresolved |
|
13 | 3 files updated, 0 files merged, 1 files removed, 0 files unresolved | |
14 | merging bar |
|
14 | merging bar | |
15 | merging bar failed! |
|
15 | merging bar failed! | |
16 | merging baz and foo |
|
16 | merging baz and foo to baz | |
17 | 1 files updated, 1 files merged, 0 files removed, 1 files unresolved |
|
17 | 1 files updated, 1 files merged, 0 files removed, 1 files unresolved | |
18 | There are unresolved merges, you can redo the full merge using: |
|
18 | There are unresolved merges, you can redo the full merge using: | |
19 | hg update -C 1 |
|
19 | hg update -C 1 |
@@ -19,12 +19,12 b' resolving manifests' | |||||
19 | a2: divergent renames -> dr |
|
19 | a2: divergent renames -> dr | |
20 | a: remote moved to b -> m |
|
20 | a: remote moved to b -> m | |
21 | b2: remote created -> g |
|
21 | b2: remote created -> g | |
22 | copying a to b |
|
22 | preserving a for resolve of b | |
23 | picked tool 'internal:merge' for a (binary False symlink False) |
|
23 | removing a | |
24 | merging a and b |
|
24 | picked tool 'internal:merge' for b (binary False symlink False) | |
25 | my a@f26ec4fc3fa3+ other b@8e765a822af2 ancestor a@af1939970a1c |
|
25 | merging a and b to b | |
|
26 | my b@f26ec4fc3fa3+ other b@8e765a822af2 ancestor a@af1939970a1c | |||
26 | premerge successful |
|
27 | premerge successful | |
27 | removing a |
|
|||
28 | warning: detected divergent renames of a2 to: |
|
28 | warning: detected divergent renames of a2 to: | |
29 | c2 |
|
29 | c2 | |
30 | b2 |
|
30 | b2 |
@@ -13,10 +13,11 b' resolving manifests' | |||||
13 | checking for directory renames |
|
13 | checking for directory renames | |
14 | rev: versions differ -> m |
|
14 | rev: versions differ -> m | |
15 | a: remote copied to b -> m |
|
15 | a: remote copied to b -> m | |
16 | copying a to b |
|
16 | preserving a for resolve of b | |
17 | picked tool 'python ../merge' for a (binary False symlink False) |
|
17 | preserving rev for resolve of rev | |
18 | merging a and b |
|
18 | picked tool 'python ../merge' for b (binary False symlink False) | |
19 | my a@e300d1c794ec+ other b@735846fee2d7 ancestor a@924404dff337 |
|
19 | merging a and b to b | |
|
20 | my b@e300d1c794ec+ other b@735846fee2d7 ancestor a@924404dff337 | |||
20 | premerge successful |
|
21 | premerge successful | |
21 | picked tool 'python ../merge' for rev (binary False symlink False) |
|
22 | picked tool 'python ../merge' for rev (binary False symlink False) | |
22 | merging rev |
|
23 | merging rev | |
@@ -45,9 +46,11 b' resolving manifests' | |||||
45 | a: remote is newer -> g |
|
46 | a: remote is newer -> g | |
46 | b: local copied to a -> m |
|
47 | b: local copied to a -> m | |
47 | rev: versions differ -> m |
|
48 | rev: versions differ -> m | |
|
49 | preserving b for resolve of b | |||
|
50 | preserving rev for resolve of rev | |||
48 | getting a |
|
51 | getting a | |
49 | picked tool 'python ../merge' for b (binary False symlink False) |
|
52 | picked tool 'python ../merge' for b (binary False symlink False) | |
50 | merging b and a |
|
53 | merging b and a to b | |
51 | my b@ac809aeed39a+ other a@f4db7e329e71 ancestor a@924404dff337 |
|
54 | my b@ac809aeed39a+ other a@f4db7e329e71 ancestor a@924404dff337 | |
52 | premerge successful |
|
55 | premerge successful | |
53 | picked tool 'python ../merge' for rev (binary False symlink False) |
|
56 | picked tool 'python ../merge' for rev (binary False symlink False) | |
@@ -76,12 +79,13 b' resolving manifests' | |||||
76 | checking for directory renames |
|
79 | checking for directory renames | |
77 | rev: versions differ -> m |
|
80 | rev: versions differ -> m | |
78 | a: remote moved to b -> m |
|
81 | a: remote moved to b -> m | |
79 | copying a to b |
|
82 | preserving a for resolve of b | |
80 | picked tool 'python ../merge' for a (binary False symlink False) |
|
83 | preserving rev for resolve of rev | |
81 | merging a and b |
|
84 | removing a | |
82 | my a@e300d1c794ec+ other b@e03727d2d66b ancestor a@924404dff337 |
|
85 | picked tool 'python ../merge' for b (binary False symlink False) | |
|
86 | merging a and b to b | |||
|
87 | my b@e300d1c794ec+ other b@e03727d2d66b ancestor a@924404dff337 | |||
83 | premerge successful |
|
88 | premerge successful | |
84 | removing a |
|
|||
85 | picked tool 'python ../merge' for rev (binary False symlink False) |
|
89 | picked tool 'python ../merge' for rev (binary False symlink False) | |
86 | merging rev |
|
90 | merging rev | |
87 | my rev@e300d1c794ec+ other rev@e03727d2d66b ancestor rev@924404dff337 |
|
91 | my rev@e300d1c794ec+ other rev@e03727d2d66b ancestor rev@924404dff337 | |
@@ -107,8 +111,10 b' resolving manifests' | |||||
107 | checking for directory renames |
|
111 | checking for directory renames | |
108 | b: local moved to a -> m |
|
112 | b: local moved to a -> m | |
109 | rev: versions differ -> m |
|
113 | rev: versions differ -> m | |
|
114 | preserving b for resolve of b | |||
|
115 | preserving rev for resolve of rev | |||
110 | picked tool 'python ../merge' for b (binary False symlink False) |
|
116 | picked tool 'python ../merge' for b (binary False symlink False) | |
111 | merging b and a |
|
117 | merging b and a to b | |
112 | my b@ecf3cb2a4219+ other a@f4db7e329e71 ancestor a@924404dff337 |
|
118 | my b@ecf3cb2a4219+ other a@f4db7e329e71 ancestor a@924404dff337 | |
113 | premerge successful |
|
119 | premerge successful | |
114 | picked tool 'python ../merge' for rev (binary False symlink False) |
|
120 | picked tool 'python ../merge' for rev (binary False symlink False) | |
@@ -136,6 +142,7 b' resolving manifests' | |||||
136 | checking for directory renames |
|
142 | checking for directory renames | |
137 | rev: versions differ -> m |
|
143 | rev: versions differ -> m | |
138 | b: remote created -> g |
|
144 | b: remote created -> g | |
|
145 | preserving rev for resolve of rev | |||
139 | getting b |
|
146 | getting b | |
140 | picked tool 'python ../merge' for rev (binary False symlink False) |
|
147 | picked tool 'python ../merge' for rev (binary False symlink False) | |
141 | merging rev |
|
148 | merging rev | |
@@ -161,6 +168,7 b' resolving manifests' | |||||
161 | b -> a |
|
168 | b -> a | |
162 | checking for directory renames |
|
169 | checking for directory renames | |
163 | rev: versions differ -> m |
|
170 | rev: versions differ -> m | |
|
171 | preserving rev for resolve of rev | |||
164 | picked tool 'python ../merge' for rev (binary False symlink False) |
|
172 | picked tool 'python ../merge' for rev (binary False symlink False) | |
165 | merging rev |
|
173 | merging rev | |
166 | my rev@ac809aeed39a+ other rev@97c705ade336 ancestor rev@924404dff337 |
|
174 | my rev@ac809aeed39a+ other rev@97c705ade336 ancestor rev@924404dff337 | |
@@ -187,6 +195,7 b' resolving manifests' | |||||
187 | a: other deleted -> r |
|
195 | a: other deleted -> r | |
188 | rev: versions differ -> m |
|
196 | rev: versions differ -> m | |
189 | b: remote created -> g |
|
197 | b: remote created -> g | |
|
198 | preserving rev for resolve of rev | |||
190 | removing a |
|
199 | removing a | |
191 | getting b |
|
200 | getting b | |
192 | picked tool 'python ../merge' for rev (binary False symlink False) |
|
201 | picked tool 'python ../merge' for rev (binary False symlink False) | |
@@ -212,6 +221,7 b' resolving manifests' | |||||
212 | b -> a |
|
221 | b -> a | |
213 | checking for directory renames |
|
222 | checking for directory renames | |
214 | rev: versions differ -> m |
|
223 | rev: versions differ -> m | |
|
224 | preserving rev for resolve of rev | |||
215 | picked tool 'python ../merge' for rev (binary False symlink False) |
|
225 | picked tool 'python ../merge' for rev (binary False symlink False) | |
216 | merging rev |
|
226 | merging rev | |
217 | my rev@ecf3cb2a4219+ other rev@97c705ade336 ancestor rev@924404dff337 |
|
227 | my rev@ecf3cb2a4219+ other rev@97c705ade336 ancestor rev@924404dff337 | |
@@ -231,6 +241,8 b' resolving manifests' | |||||
231 | searching for copies back to rev 1 |
|
241 | searching for copies back to rev 1 | |
232 | b: versions differ -> m |
|
242 | b: versions differ -> m | |
233 | rev: versions differ -> m |
|
243 | rev: versions differ -> m | |
|
244 | preserving b for resolve of b | |||
|
245 | preserving rev for resolve of rev | |||
234 | picked tool 'python ../merge' for b (binary False symlink False) |
|
246 | picked tool 'python ../merge' for b (binary False symlink False) | |
235 | merging b |
|
247 | merging b | |
236 | my b@ec03c2ca8642+ other b@79cc6877a3b7 ancestor a@924404dff337 |
|
248 | my b@ec03c2ca8642+ other b@79cc6877a3b7 ancestor a@924404dff337 | |
@@ -262,6 +274,7 b' resolving manifests' | |||||
262 | a: divergent renames -> dr |
|
274 | a: divergent renames -> dr | |
263 | rev: versions differ -> m |
|
275 | rev: versions differ -> m | |
264 | c: remote created -> g |
|
276 | c: remote created -> g | |
|
277 | preserving rev for resolve of rev | |||
265 | warning: detected divergent renames of a to: |
|
278 | warning: detected divergent renames of a to: | |
266 | b |
|
279 | b | |
267 | c |
|
280 | c | |
@@ -286,6 +299,8 b' resolving manifests' | |||||
286 | searching for copies back to rev 1 |
|
299 | searching for copies back to rev 1 | |
287 | b: versions differ -> m |
|
300 | b: versions differ -> m | |
288 | rev: versions differ -> m |
|
301 | rev: versions differ -> m | |
|
302 | preserving b for resolve of b | |||
|
303 | preserving rev for resolve of rev | |||
289 | picked tool 'python ../merge' for b (binary False symlink False) |
|
304 | picked tool 'python ../merge' for b (binary False symlink False) | |
290 | merging b |
|
305 | merging b | |
291 | my b@ac809aeed39a+ other b@af30c7647fc7 ancestor b@000000000000 |
|
306 | my b@ac809aeed39a+ other b@af30c7647fc7 ancestor b@000000000000 | |
@@ -310,6 +325,8 b' resolving manifests' | |||||
310 | a: other deleted -> r |
|
325 | a: other deleted -> r | |
311 | b: versions differ -> m |
|
326 | b: versions differ -> m | |
312 | rev: versions differ -> m |
|
327 | rev: versions differ -> m | |
|
328 | preserving b for resolve of b | |||
|
329 | preserving rev for resolve of rev | |||
313 | removing a |
|
330 | removing a | |
314 | picked tool 'python ../merge' for b (binary False symlink False) |
|
331 | picked tool 'python ../merge' for b (binary False symlink False) | |
315 | merging b |
|
332 | merging b | |
@@ -334,6 +351,8 b' resolving manifests' | |||||
334 | a: remote is newer -> g |
|
351 | a: remote is newer -> g | |
335 | b: versions differ -> m |
|
352 | b: versions differ -> m | |
336 | rev: versions differ -> m |
|
353 | rev: versions differ -> m | |
|
354 | preserving b for resolve of b | |||
|
355 | preserving rev for resolve of rev | |||
337 | getting a |
|
356 | getting a | |
338 | picked tool 'python ../merge' for b (binary False symlink False) |
|
357 | picked tool 'python ../merge' for b (binary False symlink False) | |
339 | merging b |
|
358 | merging b | |
@@ -359,6 +378,8 b' resolving manifests' | |||||
359 | a: other deleted -> r |
|
378 | a: other deleted -> r | |
360 | b: versions differ -> m |
|
379 | b: versions differ -> m | |
361 | rev: versions differ -> m |
|
380 | rev: versions differ -> m | |
|
381 | preserving b for resolve of b | |||
|
382 | preserving rev for resolve of rev | |||
362 | removing a |
|
383 | removing a | |
363 | picked tool 'python ../merge' for b (binary False symlink False) |
|
384 | picked tool 'python ../merge' for b (binary False symlink False) | |
364 | merging b |
|
385 | merging b | |
@@ -383,6 +404,8 b' resolving manifests' | |||||
383 | a: remote is newer -> g |
|
404 | a: remote is newer -> g | |
384 | b: versions differ -> m |
|
405 | b: versions differ -> m | |
385 | rev: versions differ -> m |
|
406 | rev: versions differ -> m | |
|
407 | preserving b for resolve of b | |||
|
408 | preserving rev for resolve of rev | |||
386 | getting a |
|
409 | getting a | |
387 | picked tool 'python ../merge' for b (binary False symlink False) |
|
410 | picked tool 'python ../merge' for b (binary False symlink False) | |
388 | merging b |
|
411 | merging b | |
@@ -407,6 +430,8 b' resolving manifests' | |||||
407 | searching for copies back to rev 1 |
|
430 | searching for copies back to rev 1 | |
408 | b: versions differ -> m |
|
431 | b: versions differ -> m | |
409 | rev: versions differ -> m |
|
432 | rev: versions differ -> m | |
|
433 | preserving b for resolve of b | |||
|
434 | preserving rev for resolve of rev | |||
410 | picked tool 'python ../merge' for b (binary False symlink False) |
|
435 | picked tool 'python ../merge' for b (binary False symlink False) | |
411 | merging b |
|
436 | merging b | |
412 | my b@0b76e65c8289+ other b@735846fee2d7 ancestor b@000000000000 |
|
437 | my b@0b76e65c8289+ other b@735846fee2d7 ancestor b@000000000000 | |
@@ -431,6 +456,8 b' resolving manifests' | |||||
431 | b: versions differ -> m |
|
456 | b: versions differ -> m | |
432 | rev: versions differ -> m |
|
457 | rev: versions differ -> m | |
433 | a: prompt recreating -> g |
|
458 | a: prompt recreating -> g | |
|
459 | preserving b for resolve of b | |||
|
460 | preserving rev for resolve of rev | |||
434 | getting a |
|
461 | getting a | |
435 | picked tool 'python ../merge' for b (binary False symlink False) |
|
462 | picked tool 'python ../merge' for b (binary False symlink False) | |
436 | merging b |
|
463 | merging b | |
@@ -455,6 +482,8 b' resolving manifests' | |||||
455 | searching for copies back to rev 1 |
|
482 | searching for copies back to rev 1 | |
456 | b: versions differ -> m |
|
483 | b: versions differ -> m | |
457 | rev: versions differ -> m |
|
484 | rev: versions differ -> m | |
|
485 | preserving b for resolve of b | |||
|
486 | preserving rev for resolve of rev | |||
458 | picked tool 'python ../merge' for b (binary False symlink False) |
|
487 | picked tool 'python ../merge' for b (binary False symlink False) | |
459 | merging b |
|
488 | merging b | |
460 | my b@0b76e65c8289+ other b@e03727d2d66b ancestor b@000000000000 |
|
489 | my b@0b76e65c8289+ other b@e03727d2d66b ancestor b@000000000000 | |
@@ -483,11 +512,12 b' resolving manifests' | |||||
483 | checking for directory renames |
|
512 | checking for directory renames | |
484 | rev: versions differ -> m |
|
513 | rev: versions differ -> m | |
485 | a: remote moved to b -> m |
|
514 | a: remote moved to b -> m | |
486 | copying a to b |
|
515 | preserving a for resolve of b | |
487 | picked tool 'python ../merge' for a (binary False symlink False) |
|
516 | preserving rev for resolve of rev | |
488 | merging a and b |
|
|||
489 | my a@e300d1c794ec+ other b@79cc6877a3b7 ancestor a@924404dff337 |
|
|||
490 | removing a |
|
517 | removing a | |
|
518 | picked tool 'python ../merge' for b (binary False symlink False) | |||
|
519 | merging a and b to b | |||
|
520 | my b@e300d1c794ec+ other b@79cc6877a3b7 ancestor a@924404dff337 | |||
491 | picked tool 'python ../merge' for rev (binary False symlink False) |
|
521 | picked tool 'python ../merge' for rev (binary False symlink False) | |
492 | merging rev |
|
522 | merging rev | |
493 | my rev@e300d1c794ec+ other rev@79cc6877a3b7 ancestor rev@924404dff337 |
|
523 | my rev@e300d1c794ec+ other rev@79cc6877a3b7 ancestor rev@924404dff337 | |
@@ -513,8 +543,10 b' resolving manifests' | |||||
513 | checking for directory renames |
|
543 | checking for directory renames | |
514 | b: local moved to a -> m |
|
544 | b: local moved to a -> m | |
515 | rev: versions differ -> m |
|
545 | rev: versions differ -> m | |
|
546 | preserving b for resolve of b | |||
|
547 | preserving rev for resolve of rev | |||
516 | picked tool 'python ../merge' for b (binary False symlink False) |
|
548 | picked tool 'python ../merge' for b (binary False symlink False) | |
517 | merging b and a |
|
549 | merging b and a to b | |
518 | my b@ec03c2ca8642+ other a@f4db7e329e71 ancestor a@924404dff337 |
|
550 | my b@ec03c2ca8642+ other a@f4db7e329e71 ancestor a@924404dff337 | |
519 | picked tool 'python ../merge' for rev (binary False symlink False) |
|
551 | picked tool 'python ../merge' for rev (binary False symlink False) | |
520 | merging rev |
|
552 | merging rev | |
@@ -544,8 +576,10 b' resolving manifests' | |||||
544 | b: local moved to a -> m |
|
576 | b: local moved to a -> m | |
545 | rev: versions differ -> m |
|
577 | rev: versions differ -> m | |
546 | c: remote created -> g |
|
578 | c: remote created -> g | |
|
579 | preserving b for resolve of b | |||
|
580 | preserving rev for resolve of rev | |||
547 | picked tool 'python ../merge' for b (binary False symlink False) |
|
581 | picked tool 'python ../merge' for b (binary False symlink False) | |
548 | merging b and a |
|
582 | merging b and a to b | |
549 | my b@ecf3cb2a4219+ other a@2b958612230f ancestor a@924404dff337 |
|
583 | my b@ecf3cb2a4219+ other a@2b958612230f ancestor a@924404dff337 | |
550 | premerge successful |
|
584 | premerge successful | |
551 | getting c |
|
585 | getting c |
@@ -23,6 +23,7 b' resolving manifests' | |||||
23 | b |
|
23 | b | |
24 | a: versions differ -> m |
|
24 | a: versions differ -> m | |
25 | b: remote created -> g |
|
25 | b: remote created -> g | |
|
26 | preserving a for resolve of a | |||
26 | picked tool 'true' for a (binary False symlink False) |
|
27 | picked tool 'true' for a (binary False symlink False) | |
27 | merging a |
|
28 | merging a | |
28 | my a@33aaa84a386b+ other a@802f095af299 ancestor a@33aaa84a386b |
|
29 | my a@33aaa84a386b+ other a@802f095af299 ancestor a@33aaa84a386b | |
@@ -60,6 +61,7 b' resolving manifests' | |||||
60 | b |
|
61 | b | |
61 | a: versions differ -> m |
|
62 | a: versions differ -> m | |
62 | b: remote created -> g |
|
63 | b: remote created -> g | |
|
64 | preserving a for resolve of a | |||
63 | picked tool 'true' for a (binary False symlink False) |
|
65 | picked tool 'true' for a (binary False symlink False) | |
64 | merging a |
|
66 | merging a | |
65 | my a@33aaa84a386b+ other a@802f095af299 ancestor a@33aaa84a386b |
|
67 | my a@33aaa84a386b+ other a@802f095af299 ancestor a@33aaa84a386b | |
@@ -113,6 +115,8 b' resolving manifests' | |||||
113 | searching for copies back to rev 1 |
|
115 | searching for copies back to rev 1 | |
114 | a: versions differ -> m |
|
116 | a: versions differ -> m | |
115 | b: versions differ -> m |
|
117 | b: versions differ -> m | |
|
118 | preserving a for resolve of a | |||
|
119 | preserving b for resolve of b | |||
116 | picked tool 'true' for a (binary False symlink False) |
|
120 | picked tool 'true' for a (binary False symlink False) | |
117 | merging a |
|
121 | merging a | |
118 | my a@802f095af299+ other a@030602aee63d ancestor a@33aaa84a386b |
|
122 | my a@802f095af299+ other a@030602aee63d ancestor a@33aaa84a386b |
General Comments 0
You need to be logged in to leave comments.
Login now