Show More
@@ -263,7 +263,7 b' def _forgetremoved(wctx, mctx, branchmer' | |||||
263 |
|
263 | |||
264 | return actions |
|
264 | return actions | |
265 |
|
265 | |||
266 |
def _checkcollision(repo, wmf, actions |
|
266 | def _checkcollision(repo, wmf, actions): | |
267 | # build provisional merged manifest up |
|
267 | # build provisional merged manifest up | |
268 | pmmf = set(wmf) |
|
268 | pmmf = set(wmf) | |
269 |
|
269 | |||
@@ -295,21 +295,14 b' def _checkcollision(repo, wmf, actions, ' | |||||
295 | "m": mergeop, |
|
295 | "m": mergeop, | |
296 | "r": removeop, |
|
296 | "r": removeop, | |
297 | "rd": nop, |
|
297 | "rd": nop, | |
|
298 | "cd": addop, | |||
|
299 | "dc": addop, | |||
298 | } |
|
300 | } | |
299 | for f, m, args, msg in actions: |
|
301 | for f, m, args, msg in actions: | |
300 | op = opmap.get(m) |
|
302 | op = opmap.get(m) | |
301 | assert op, m |
|
303 | assert op, m | |
302 | op(f, args) |
|
304 | op(f, args) | |
303 |
|
305 | |||
304 | opmap = { |
|
|||
305 | "cd": addop, |
|
|||
306 | "dc": addop, |
|
|||
307 | } |
|
|||
308 | for f, m in prompts: |
|
|||
309 | op = opmap.get(m) |
|
|||
310 | assert op, m |
|
|||
311 | op(f, None) |
|
|||
312 |
|
||||
313 | # check case-folding collision in provisional merged manifest |
|
306 | # check case-folding collision in provisional merged manifest | |
314 | foldmap = {} |
|
307 | foldmap = {} | |
315 | for f in sorted(pmmf): |
|
308 | for f in sorted(pmmf): | |
@@ -370,7 +363,7 b' def manifestmerge(repo, wctx, p2, pa, br' | |||||
370 | m1['.hgsubstate'] += "+" |
|
363 | m1['.hgsubstate'] += "+" | |
371 | break |
|
364 | break | |
372 |
|
365 | |||
373 |
aborts |
|
366 | aborts = [] | |
374 | # Compare manifests |
|
367 | # Compare manifests | |
375 | fdiff = dicthelpers.diff(m1, m2) |
|
368 | fdiff = dicthelpers.diff(m1, m2) | |
376 | flagsdiff = m1.flagsdiff(m2) |
|
369 | flagsdiff = m1.flagsdiff(m2) | |
@@ -426,7 +419,7 b' def manifestmerge(repo, wctx, p2, pa, br' | |||||
426 | if acceptremote: |
|
419 | if acceptremote: | |
427 | actions.append((f, "r", None, "remote delete")) |
|
420 | actions.append((f, "r", None, "remote delete")) | |
428 | else: |
|
421 | else: | |
429 |
|
|
422 | actions.append((f, "cd", None, "prompt changed/deleted")) | |
430 | elif n1[20:] == "a": # added, no remote |
|
423 | elif n1[20:] == "a": # added, no remote | |
431 | actions.append((f, "f", None, "remote deleted")) |
|
424 | actions.append((f, "f", None, "remote deleted")) | |
432 | else: |
|
425 | else: | |
@@ -477,7 +470,8 b' def manifestmerge(repo, wctx, p2, pa, br' | |||||
477 | actions.append((f, "g", (m2.flags(f),), |
|
470 | actions.append((f, "g", (m2.flags(f),), | |
478 | "remote recreating")) |
|
471 | "remote recreating")) | |
479 | else: |
|
472 | else: | |
480 |
|
|
473 | actions.append((f, "dc", (m2.flags(f),), | |
|
474 | "prompt deleted/changed")) | |||
481 |
|
475 | |||
482 | for f, m in sorted(aborts): |
|
476 | for f, m in sorted(aborts): | |
483 | if m == "ud": |
|
477 | if m == "ud": | |
@@ -491,26 +485,10 b' def manifestmerge(repo, wctx, p2, pa, br' | |||||
491 | # check collision between files only in p2 for clean update |
|
485 | # check collision between files only in p2 for clean update | |
492 | if (not branchmerge and |
|
486 | if (not branchmerge and | |
493 | (force or not wctx.dirty(missing=True, branch=False))): |
|
487 | (force or not wctx.dirty(missing=True, branch=False))): | |
494 |
_checkcollision(repo, m2, [] |
|
488 | _checkcollision(repo, m2, []) | |
495 | else: |
|
489 | else: | |
496 |
_checkcollision(repo, m1, actions |
|
490 | _checkcollision(repo, m1, actions) | |
497 |
|
491 | |||
498 | for f, m in sorted(prompts): |
|
|||
499 | if m == "cd": |
|
|||
500 | if repo.ui.promptchoice( |
|
|||
501 | _("local changed %s which remote deleted\n" |
|
|||
502 | "use (c)hanged version or (d)elete?" |
|
|||
503 | "$$ &Changed $$ &Delete") % f, 0): |
|
|||
504 | actions.append((f, "r", None, "prompt delete")) |
|
|||
505 | else: |
|
|||
506 | actions.append((f, "a", None, "prompt keep")) |
|
|||
507 | elif m == "dc": |
|
|||
508 | if repo.ui.promptchoice( |
|
|||
509 | _("remote changed %s which local deleted\n" |
|
|||
510 | "use (c)hanged version or leave (d)eleted?" |
|
|||
511 | "$$ &Changed $$ &Deleted") % f, 0) == 0: |
|
|||
512 | actions.append((f, "g", (m2.flags(f),), "prompt recreating")) |
|
|||
513 | else: assert False, m |
|
|||
514 | return actions |
|
492 | return actions | |
515 |
|
493 | |||
516 | def actionkey(a): |
|
494 | def actionkey(a): | |
@@ -694,9 +672,37 b' def calculateupdates(repo, tctx, mctx, a' | |||||
694 | ancestor, |
|
672 | ancestor, | |
695 | branchmerge, force, |
|
673 | branchmerge, force, | |
696 | partial, acceptremote) |
|
674 | partial, acceptremote) | |
|
675 | ||||
|
676 | # Filter out prompts. | |||
|
677 | newactions, prompts = [], [] | |||
|
678 | for a in actions: | |||
|
679 | if a[1] in ("cd", "dc"): | |||
|
680 | prompts.append(a) | |||
|
681 | else: | |||
|
682 | newactions.append(a) | |||
|
683 | # Prompt and create actions. TODO: Move this towards resolve phase. | |||
|
684 | for f, m, args, msg in sorted(prompts): | |||
|
685 | if m == "cd": | |||
|
686 | if repo.ui.promptchoice( | |||
|
687 | _("local changed %s which remote deleted\n" | |||
|
688 | "use (c)hanged version or (d)elete?" | |||
|
689 | "$$ &Changed $$ &Delete") % f, 0): | |||
|
690 | newactions.append((f, "r", None, "prompt delete")) | |||
|
691 | else: | |||
|
692 | newactions.append((f, "a", None, "prompt keep")) | |||
|
693 | elif m == "dc": | |||
|
694 | flags, = args | |||
|
695 | if repo.ui.promptchoice( | |||
|
696 | _("remote changed %s which local deleted\n" | |||
|
697 | "use (c)hanged version or leave (d)eleted?" | |||
|
698 | "$$ &Changed $$ &Deleted") % f, 0) == 0: | |||
|
699 | newactions.append((f, "g", (flags,), "prompt recreating")) | |||
|
700 | else: assert False, m | |||
|
701 | ||||
697 | if tctx.rev() is None: |
|
702 | if tctx.rev() is None: | |
698 | actions += _forgetremoved(tctx, mctx, branchmerge) |
|
703 | newactions += _forgetremoved(tctx, mctx, branchmerge) | |
699 | return actions |
|
704 | ||
|
705 | return newactions | |||
700 |
|
706 | |||
701 | def recordupdates(repo, actions, branchmerge): |
|
707 | def recordupdates(repo, actions, branchmerge): | |
702 | "record merge actions to the dirstate" |
|
708 | "record merge actions to the dirstate" |
General Comments 0
You need to be logged in to leave comments.
Login now