995 ms = mergestate.clean(repo, wctx.p1().node(), mctx.node()) |
995 ms = mergestate.clean(repo, wctx.p1().node(), mctx.node()) |
996 moves = [] |
996 moves = [] |
997 for m, l in actions.items(): |
997 for m, l in actions.items(): |
998 l.sort() |
998 l.sort() |
999 |
999 |
1000 # prescan for merges |
1000 # 'cd' and 'dc' actions are treated like other merge conflicts |
1001 for f, args, msg in actions['m']: |
1001 mergeactions = sorted(actions['cd']) |
|
1002 mergeactions.extend(sorted(actions['dc'])) |
|
1003 mergeactions.extend(actions['m']) |
|
1004 for f, args, msg in mergeactions: |
1002 f1, f2, fa, move, anc = args |
1005 f1, f2, fa, move, anc = args |
1003 if f == '.hgsubstate': # merged internally |
1006 if f == '.hgsubstate': # merged internally |
1004 continue |
1007 continue |
1005 if f1 is None: |
1008 if f1 is None: |
1006 fcl = filemerge.absentfilectx(wctx, fa) |
1009 fcl = filemerge.absentfilectx(wctx, fa) |
1109 flags, = args |
1112 flags, = args |
1110 audit(f) |
1113 audit(f) |
1111 util.setflags(repo.wjoin(f), 'l' in flags, 'x' in flags) |
1114 util.setflags(repo.wjoin(f), 'l' in flags, 'x' in flags) |
1112 updated += 1 |
1115 updated += 1 |
1113 |
1116 |
1114 mergeactions = actions['m'] |
|
1115 # the ordering is important here -- ms.mergedriver will raise if the merge |
1117 # the ordering is important here -- ms.mergedriver will raise if the merge |
1116 # driver has changed, and we want to be able to bypass it when overwrite is |
1118 # driver has changed, and we want to be able to bypass it when overwrite is |
1117 # True |
1119 # True |
1118 usemergedriver = not overwrite and mergeactions and ms.mergedriver |
1120 usemergedriver = not overwrite and mergeactions and ms.mergedriver |
1119 |
1121 |
1417 (force or not wc.dirty(missing=True, branch=False))): |
1419 (force or not wc.dirty(missing=True, branch=False))): |
1418 _checkcollision(repo, p2.manifest(), None) |
1420 _checkcollision(repo, p2.manifest(), None) |
1419 else: |
1421 else: |
1420 _checkcollision(repo, wc.manifest(), actions) |
1422 _checkcollision(repo, wc.manifest(), actions) |
1421 |
1423 |
1422 # Prompt and create actions. TODO: Move this towards resolve phase. |
1424 # Prompt and create actions. Most of this is in the resolve phase |
|
1425 # already, but we can't handle .hgsubstate in filemerge or |
|
1426 # subrepo.submerge yet so we have to keep prompting for it. |
1423 for f, args, msg in sorted(actions['cd']): |
1427 for f, args, msg in sorted(actions['cd']): |
|
1428 if f != '.hgsubstate': |
|
1429 continue |
1424 if repo.ui.promptchoice( |
1430 if repo.ui.promptchoice( |
1425 _("local changed %s which remote deleted\n" |
1431 _("local changed %s which remote deleted\n" |
1426 "use (c)hanged version or (d)elete?" |
1432 "use (c)hanged version or (d)elete?" |
1427 "$$ &Changed $$ &Delete") % f, 0): |
1433 "$$ &Changed $$ &Delete") % f, 0): |
1428 actions['r'].append((f, None, "prompt delete")) |
1434 actions['r'].append((f, None, "prompt delete")) |
1430 actions['am'].append((f, None, "prompt keep")) |
1436 actions['am'].append((f, None, "prompt keep")) |
1431 else: |
1437 else: |
1432 actions['a'].append((f, None, "prompt keep")) |
1438 actions['a'].append((f, None, "prompt keep")) |
1433 |
1439 |
1434 for f, args, msg in sorted(actions['dc']): |
1440 for f, args, msg in sorted(actions['dc']): |
|
1441 if f != '.hgsubstate': |
|
1442 continue |
1435 f1, f2, fa, move, anc = args |
1443 f1, f2, fa, move, anc = args |
1436 flags = p2[f2].flags() |
1444 flags = p2[f2].flags() |
1437 if repo.ui.promptchoice( |
1445 if repo.ui.promptchoice( |
1438 _("remote changed %s which local deleted\n" |
1446 _("remote changed %s which local deleted\n" |
1439 "use (c)hanged version or leave (d)eleted?" |
1447 "use (c)hanged version or leave (d)eleted?" |