comparison mercurial/merge.py @ 18539:cf25e4efd685

merge: delay prompts a bit and show them in (extra) sorted order Preparing for backout of 760c0d67ce5e. 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.
author Mads Kiilerich <madski@unity3d.com>
date Thu, 24 Jan 2013 23:57:44 +0100
parents 9de9727cea53
children 139529b0a191
comparison
equal deleted inserted replaced
18538:94317c2d53b8 18539:cf25e4efd685
225 for s in sorted(p1.substate): 225 for s in sorted(p1.substate):
226 if p1.sub(s).dirty(): 226 if p1.sub(s).dirty():
227 m1['.hgsubstate'] += "+" 227 m1['.hgsubstate'] += "+"
228 break 228 break
229 229
230 prompts = []
230 # Compare manifests 231 # Compare manifests
231 visit = m1.iteritems() 232 visit = m1.iteritems()
232 if repo.ui.debugflag: 233 if repo.ui.debugflag:
233 visit = sorted(visit) 234 visit = sorted(visit)
234 for f, n in visit: 235 for f, n in visit:
263 elif f in copy: 264 elif f in copy:
264 f2 = copy[f] 265 f2 = copy[f]
265 act("local copied/moved to " + f2, "m", f, f2, f, False) 266 act("local copied/moved to " + f2, "m", f, f2, f, False)
266 elif f in ma: # clean, a different, no remote 267 elif f in ma: # clean, a different, no remote
267 if n != ma[f]: 268 if n != ma[f]:
268 if repo.ui.promptchoice( 269 prompts.append((f, "cd")) # prompt changed/deleted
269 _(" local changed %s which remote deleted\n"
270 "use (c)hanged version or (d)elete?") % f,
271 (_("&Changed"), _("&Delete")), 0):
272 act("prompt delete", "r", f)
273 else:
274 act("prompt keep", "a", f)
275 elif n[20:] == "a": # added, no remote 270 elif n[20:] == "a": # added, no remote
276 act("remote deleted", "f", f) 271 act("remote deleted", "f", f)
277 else: 272 else:
278 act("other deleted", "r", f) 273 act("other deleted", "r", f)
279 274
303 act("remote differs from untracked local", 298 act("remote differs from untracked local",
304 "m", f, f, f, False) 299 "m", f, f, f, False)
305 else: 300 else:
306 act("remote created", "g", f, m2.flags(f)) 301 act("remote created", "g", f, m2.flags(f))
307 elif n != ma[f]: 302 elif n != ma[f]:
303 prompts.append((f, "dc")) # prompt deleted/changed
304
305 for f, m in sorted(prompts):
306 if m == "cd":
307 if repo.ui.promptchoice(
308 _(" local changed %s which remote deleted\n"
309 "use (c)hanged version or (d)elete?") % f,
310 (_("&Changed"), _("&Delete")), 0):
311 act("prompt delete", "r", f)
312 else:
313 act("prompt keep", "a", f)
314 elif m == "dc":
308 if repo.ui.promptchoice( 315 if repo.ui.promptchoice(
309 _("remote changed %s which local deleted\n" 316 _("remote changed %s which local deleted\n"
310 "use (c)hanged version or leave (d)eleted?") % f, 317 "use (c)hanged version or leave (d)eleted?") % f,
311 (_("&Changed"), _("&Deleted")), 0) == 0: 318 (_("&Changed"), _("&Deleted")), 0) == 0:
312 act("prompt recreating", "g", f, m2.flags(f)) 319 act("prompt recreating", "g", f, m2.flags(f))
313 320 else: assert False, m
314 return actions 321 return actions
315 322
316 def actionkey(a): 323 def actionkey(a):
317 return a[1] == "r" and -1 or 0, a 324 return a[1] == "r" and -1 or 0, a
318 325