Mercurial > public > mercurial-scm > hg-stable
comparison mercurial/merge.py @ 21080:04540a8499a3
merge: move ancestor selection tweaking from manifestmerge to update function
- passing it through calculateupdates.
This will make sure manifestmerge actually use the ancestor it is given.
author | Mads Kiilerich <madski@unity3d.com> |
---|---|
date | Sun, 06 Apr 2014 13:39:51 +0200 |
parents | 7731a2281cf0 |
children | ffd7b6ce46ff |
comparison
equal
deleted
inserted
replaced
21079:b02ab6486a78 | 21080:04540a8499a3 |
---|---|
374 raise util.Abort(_("case-folding collision between %s and %s") | 374 raise util.Abort(_("case-folding collision between %s and %s") |
375 % (f, foldmap[fold])) | 375 % (f, foldmap[fold])) |
376 foldmap[fold] = f | 376 foldmap[fold] = f |
377 | 377 |
378 def manifestmerge(repo, wctx, p2, pa, branchmerge, force, partial, | 378 def manifestmerge(repo, wctx, p2, pa, branchmerge, force, partial, |
379 acceptremote=False): | 379 acceptremote, followcopies): |
380 """ | 380 """ |
381 Merge p1 and p2 with ancestor pa and generate merge action list | 381 Merge p1 and p2 with ancestor pa and generate merge action list |
382 | 382 |
383 branchmerge and force are as passed in to update | 383 branchmerge and force are as passed in to update |
384 partial = function to filter file lists | 384 partial = function to filter file lists |
385 acceptremote = accept the incoming changes without prompting | 385 acceptremote = accept the incoming changes without prompting |
386 """ | 386 """ |
387 | 387 |
388 overwrite = force and not branchmerge | |
389 actions, copy, movewithdir = [], {}, {} | 388 actions, copy, movewithdir = [], {}, {} |
390 | |
391 followcopies = False | |
392 if overwrite: | |
393 pa = wctx | |
394 elif pa == p2: # backwards | |
395 pa = wctx.p1() | |
396 elif not branchmerge and not wctx.dirty(missing=True): | |
397 pass | |
398 elif pa and repo.ui.configbool("merge", "followcopies", True): | |
399 followcopies = True | |
400 | 389 |
401 # manifests fetched in order are going to be faster, so prime the caches | 390 # manifests fetched in order are going to be faster, so prime the caches |
402 [x.manifest() for x in | 391 [x.manifest() for x in |
403 sorted(wctx.parents() + [p2, pa], key=lambda x: x.rev())] | 392 sorted(wctx.parents() + [p2, pa], key=lambda x: x.rev())] |
404 | 393 |
728 ms.commit() | 717 ms.commit() |
729 progress(_updating, None, total=numupdates, unit=_files) | 718 progress(_updating, None, total=numupdates, unit=_files) |
730 | 719 |
731 return updated, merged, removed, unresolved | 720 return updated, merged, removed, unresolved |
732 | 721 |
733 def calculateupdates(repo, tctx, mctx, ancestor, branchmerge, force, partial, | 722 def calculateupdates(repo, wctx, mctx, ancestor, branchmerge, force, partial, |
734 acceptremote=False): | 723 acceptremote, followcopies): |
735 "Calculate the actions needed to merge mctx into tctx" | 724 "Calculate the actions needed to merge mctx into wctx using ancestor" |
736 actions = [] | 725 |
737 actions += manifestmerge(repo, tctx, mctx, | 726 actions = manifestmerge(repo, wctx, mctx, |
738 ancestor, | 727 ancestor, |
739 branchmerge, force, | 728 branchmerge, force, |
740 partial, acceptremote) | 729 partial, acceptremote, followcopies) |
741 | 730 |
742 # Filter out prompts. | 731 # Filter out prompts. |
743 newactions, prompts = [], [] | 732 newactions, prompts = [], [] |
744 for a in actions: | 733 for a in actions: |
745 if a[1] in ("cd", "dc"): | 734 if a[1] in ("cd", "dc"): |
763 "use (c)hanged version or leave (d)eleted?" | 752 "use (c)hanged version or leave (d)eleted?" |
764 "$$ &Changed $$ &Deleted") % f, 0) == 0: | 753 "$$ &Changed $$ &Deleted") % f, 0) == 0: |
765 newactions.append((f, "g", (flags,), "prompt recreating")) | 754 newactions.append((f, "g", (flags,), "prompt recreating")) |
766 else: assert False, m | 755 else: assert False, m |
767 | 756 |
768 if tctx.rev() is None: | 757 if wctx.rev() is None: |
769 newactions += _forgetremoved(tctx, mctx, branchmerge) | 758 newactions += _forgetremoved(wctx, mctx, branchmerge) |
770 | 759 |
771 return newactions | 760 return newactions |
772 | 761 |
773 def recordupdates(repo, actions, branchmerge): | 762 def recordupdates(repo, actions, branchmerge): |
774 "record merge actions to the dirstate" | 763 "record merge actions to the dirstate" |
988 raise util.Abort(msg, hint=hint) | 977 raise util.Abort(msg, hint=hint) |
989 else: | 978 else: |
990 # Allow jumping branches if clean and specific rev given | 979 # Allow jumping branches if clean and specific rev given |
991 pa = p1 | 980 pa = p1 |
992 | 981 |
982 followcopies = False | |
983 if overwrite: | |
984 pa = wc | |
985 elif pa == p2: # backwards | |
986 pa = wc.p1() | |
987 elif not branchmerge and not wc.dirty(missing=True): | |
988 pass | |
989 elif pa and repo.ui.configbool("merge", "followcopies", True): | |
990 followcopies = True | |
991 | |
993 ### calculate phase | 992 ### calculate phase |
994 actions = calculateupdates(repo, wc, p2, pa, | 993 actions = calculateupdates(repo, wc, p2, pa, branchmerge, force, |
995 branchmerge, force, partial, mergeancestor) | 994 partial, mergeancestor, followcopies) |
996 | 995 |
997 ### apply phase | 996 ### apply phase |
998 if not branchmerge: # just jump to the new rev | 997 if not branchmerge: # just jump to the new rev |
999 fp1, fp2, xp1, xp2 = fp2, nullid, xp2, '' | 998 fp1, fp2, xp1, xp2 = fp2, nullid, xp2, '' |
1000 if not partial: | 999 if not partial: |