merge: delay prompts a bit and show them in (extra) sorted order

Preparing for backout of 14f4258e3526.

The number of prompts will for all relevant cases be significantly smaller than
the total number of files in the manifests. We can thus afford to sort the
prompts more than we can afford to sort the manifests.
This commit is contained in:
Mads Kiilerich 2013-01-24 23:57:44 +01:00
parent a6143a0b42
commit e4cb2af2e8
2 changed files with 17 additions and 10 deletions

View File

@ -227,6 +227,7 @@ def manifestmerge(repo, p1, p2, pa, overwrite, partial):
m1['.hgsubstate'] += "+" m1['.hgsubstate'] += "+"
break break
prompts = []
# Compare manifests # Compare manifests
visit = m1.iteritems() visit = m1.iteritems()
if repo.ui.debugflag: if repo.ui.debugflag:
@ -265,13 +266,7 @@ def manifestmerge(repo, p1, p2, pa, overwrite, partial):
act("local copied/moved to " + f2, "m", f, f2, f, False) act("local copied/moved to " + f2, "m", f, f2, f, False)
elif f in ma: # clean, a different, no remote elif f in ma: # clean, a different, no remote
if n != ma[f]: if n != ma[f]:
if repo.ui.promptchoice( prompts.append((f, "cd")) # prompt changed/deleted
_(" local changed %s which remote deleted\n"
"use (c)hanged version or (d)elete?") % f,
(_("&Changed"), _("&Delete")), 0):
act("prompt delete", "r", f)
else:
act("prompt keep", "a", f)
elif n[20:] == "a": # added, no remote elif n[20:] == "a": # added, no remote
act("remote deleted", "f", f) act("remote deleted", "f", f)
else: else:
@ -305,12 +300,24 @@ def manifestmerge(repo, p1, p2, pa, overwrite, partial):
else: else:
act("remote created", "g", f, m2.flags(f)) act("remote created", "g", f, m2.flags(f))
elif n != ma[f]: elif n != ma[f]:
prompts.append((f, "dc")) # prompt deleted/changed
for f, m in sorted(prompts):
if m == "cd":
if repo.ui.promptchoice(
_(" local changed %s which remote deleted\n"
"use (c)hanged version or (d)elete?") % f,
(_("&Changed"), _("&Delete")), 0):
act("prompt delete", "r", f)
else:
act("prompt keep", "a", f)
elif m == "dc":
if repo.ui.promptchoice( if repo.ui.promptchoice(
_("remote changed %s which local deleted\n" _("remote changed %s which local deleted\n"
"use (c)hanged version or leave (d)eleted?") % f, "use (c)hanged version or leave (d)eleted?") % f,
(_("&Changed"), _("&Deleted")), 0) == 0: (_("&Changed"), _("&Deleted")), 0) == 0:
act("prompt recreating", "g", f, m2.flags(f)) act("prompt recreating", "g", f, m2.flags(f))
else: assert False, m
return actions return actions
def actionkey(a): def actionkey(a):

View File

@ -617,11 +617,11 @@ m "um a c" "um x c" " " "10 do merge with no ancestor"
resolving manifests resolving manifests
overwrite: False, partial: False overwrite: False, partial: False
ancestor: 924404dff337, local: 0b76e65c8289+, remote: bdb19105162a ancestor: 924404dff337, local: 0b76e65c8289+, remote: bdb19105162a
b: versions differ -> m
rev: versions differ -> m
local changed a which remote deleted local changed a which remote deleted
use (c)hanged version or (d)elete? c use (c)hanged version or (d)elete? c
a: prompt keep -> a a: prompt keep -> a
b: versions differ -> m
rev: versions differ -> m
preserving b for resolve of b preserving b for resolve of b
preserving rev for resolve of rev preserving rev for resolve of rev
updating: a 1/3 files (33.33%) updating: a 1/3 files (33.33%)