8 from node import * |
8 from node import * |
9 from i18n import gettext as _ |
9 from i18n import gettext as _ |
10 from demandload import * |
10 from demandload import * |
11 demandload(globals(), "errno util os tempfile") |
11 demandload(globals(), "errno util os tempfile") |
12 |
12 |
13 def filemerge(repo, fw, fo, fd, wctx, mctx, move): |
13 def filemerge(repo, fw, fo, wctx, mctx): |
14 """perform a 3-way merge in the working directory |
14 """perform a 3-way merge in the working directory |
15 |
15 |
16 fw = filename in the working directory and first parent |
16 fw = filename in the working directory and first parent |
17 fo = filename in other parent |
17 fo = filename in other parent |
18 fd = destination filename |
|
19 wctx, mctx = working and merge changecontexts |
18 wctx, mctx = working and merge changecontexts |
20 move = whether to move or copy the file to the destination |
|
21 |
19 |
22 TODO: |
20 TODO: |
23 if fw is copied in the working directory, we get confused |
21 if fw is copied in the working directory, we get confused |
24 implement move and fd |
22 implement move and fd |
25 """ |
23 """ |
50 environ={'HG_FILE': fw, |
48 environ={'HG_FILE': fw, |
51 'HG_MY_NODE': str(wctx.parents()[0]), |
49 'HG_MY_NODE': str(wctx.parents()[0]), |
52 'HG_OTHER_NODE': str(mctx)}) |
50 'HG_OTHER_NODE': str(mctx)}) |
53 if r: |
51 if r: |
54 repo.ui.warn(_("merging %s failed!\n") % fw) |
52 repo.ui.warn(_("merging %s failed!\n") % fw) |
55 else: |
|
56 if fd != fw: |
|
57 repo.ui.debug(_("copying %s to %s\n") % (fw, fd)) |
|
58 repo.wwrite(fd, repo.wread(fw)) |
|
59 if move: |
|
60 repo.ui.debug(_("removing %s\n") % fw) |
|
61 os.unlink(a) |
|
62 |
53 |
63 os.unlink(b) |
54 os.unlink(b) |
64 os.unlink(c) |
55 os.unlink(c) |
65 return r |
56 return r |
66 |
57 |
292 f2, fd, flag, move = a[2:] |
283 f2, fd, flag, move = a[2:] |
293 if f != f2: |
284 if f != f2: |
294 repo.ui.status(_("merging %s and %s to %s\n") % (f, f2, fd)) |
285 repo.ui.status(_("merging %s and %s to %s\n") % (f, f2, fd)) |
295 else: |
286 else: |
296 repo.ui.status(_("merging %s\n") % f) |
287 repo.ui.status(_("merging %s\n") % f) |
297 if filemerge(repo, f, f2, fd, wctx, mctx, move): |
288 if filemerge(repo, f, f2, wctx, mctx): |
298 unresolved += 1 |
289 unresolved += 1 |
|
290 else: |
|
291 if f != fd: |
|
292 repo.ui.debug(_("copying %s to %s\n") % (f, fd)) |
|
293 repo.wwrite(fd, repo.wread(f)) |
|
294 if move: |
|
295 repo.ui.debug(_("removing %s\n") % f) |
|
296 os.unlink(repo.wjoin(f)) |
|
297 |
299 util.set_exec(repo.wjoin(fd), flag) |
298 util.set_exec(repo.wjoin(fd), flag) |
300 merged += 1 |
299 merged += 1 |
301 elif m == "g": # get |
300 elif m == "g": # get |
302 flag = a[2] |
301 flag = a[2] |
303 repo.ui.note(_("getting %s\n") % f) |
302 repo.ui.note(_("getting %s\n") % f) |