##// END OF EJS Templates
rebase: fix --collapse when a file was added then removed...
Durham Goode -
r18778:1ef89df2 default
parent child Browse files
Show More
@@ -361,9 +361,10 def overridecheckunknownfile(origfn, rep
361 # writing the files into the working copy and lfcommands.updatelfiles
361 # writing the files into the working copy and lfcommands.updatelfiles
362 # will update the largefiles.
362 # will update the largefiles.
363 def overridemanifestmerge(origfn, repo, p1, p2, pa, branchmerge, force,
363 def overridemanifestmerge(origfn, repo, p1, p2, pa, branchmerge, force,
364 partial):
364 partial, acceptremote=False):
365 overwrite = force and not branchmerge
365 overwrite = force and not branchmerge
366 actions = origfn(repo, p1, p2, pa, branchmerge, force, partial)
366 actions = origfn(repo, p1, p2, pa, branchmerge, force, partial,
367 acceptremote)
367 processed = []
368 processed = []
368
369
369 for action in actions:
370 for action in actions:
@@ -185,12 +185,14 def _forgetremoved(wctx, mctx, branchmer
185
185
186 return actions
186 return actions
187
187
188 def manifestmerge(repo, wctx, p2, pa, branchmerge, force, partial):
188 def manifestmerge(repo, wctx, p2, pa, branchmerge, force, partial,
189 acceptremote=False):
189 """
190 """
190 Merge p1 and p2 with ancestor pa and generate merge action list
191 Merge p1 and p2 with ancestor pa and generate merge action list
191
192
192 branchmerge and force are as passed in to update
193 branchmerge and force are as passed in to update
193 partial = function to filter file lists
194 partial = function to filter file lists
195 acceptremote = accept the incoming changes without prompting
194 """
196 """
195
197
196 overwrite = force and not branchmerge
198 overwrite = force and not branchmerge
@@ -331,7 +333,9 def manifestmerge(repo, wctx, p2, pa, br
331
333
332 for f, m in sorted(prompts):
334 for f, m in sorted(prompts):
333 if m == "cd":
335 if m == "cd":
334 if repo.ui.promptchoice(
336 if acceptremote:
337 actions.append((f, "r", None, "remote delete"))
338 elif repo.ui.promptchoice(
335 _("local changed %s which remote deleted\n"
339 _("local changed %s which remote deleted\n"
336 "use (c)hanged version or (d)elete?") % f,
340 "use (c)hanged version or (d)elete?") % f,
337 (_("&Changed"), _("&Delete")), 0):
341 (_("&Changed"), _("&Delete")), 0):
@@ -339,7 +343,9 def manifestmerge(repo, wctx, p2, pa, br
339 else:
343 else:
340 actions.append((f, "a", None, "prompt keep"))
344 actions.append((f, "a", None, "prompt keep"))
341 elif m == "dc":
345 elif m == "dc":
342 if repo.ui.promptchoice(
346 if acceptremote:
347 actions.append((f, "g", (m2.flags(f),), "remote recreating"))
348 elif repo.ui.promptchoice(
343 _("remote changed %s which local deleted\n"
349 _("remote changed %s which local deleted\n"
344 "use (c)hanged version or leave (d)eleted?") % f,
350 "use (c)hanged version or leave (d)eleted?") % f,
345 (_("&Changed"), _("&Deleted")), 0) == 0:
351 (_("&Changed"), _("&Deleted")), 0) == 0:
@@ -512,7 +518,8 def applyupdates(repo, actions, wctx, mc
512
518
513 return updated, merged, removed, unresolved
519 return updated, merged, removed, unresolved
514
520
515 def calculateupdates(repo, tctx, mctx, ancestor, branchmerge, force, partial):
521 def calculateupdates(repo, tctx, mctx, ancestor, branchmerge, force, partial,
522 acceptremote=False):
516 "Calculate the actions needed to merge mctx into tctx"
523 "Calculate the actions needed to merge mctx into tctx"
517 actions = []
524 actions = []
518 folding = not util.checkcase(repo.path)
525 folding = not util.checkcase(repo.path)
@@ -526,7 +533,7 def calculateupdates(repo, tctx, mctx, a
526 actions += manifestmerge(repo, tctx, mctx,
533 actions += manifestmerge(repo, tctx, mctx,
527 ancestor,
534 ancestor,
528 branchmerge, force,
535 branchmerge, force,
529 partial)
536 partial, acceptremote)
530 if tctx.rev() is None:
537 if tctx.rev() is None:
531 actions += _forgetremoved(tctx, mctx, branchmerge)
538 actions += _forgetremoved(tctx, mctx, branchmerge)
532 return actions
539 return actions
@@ -602,10 +609,11 def update(repo, node, branchmerge, forc
602 branchmerge = whether to merge between branches
609 branchmerge = whether to merge between branches
603 force = whether to force branch merging or file overwriting
610 force = whether to force branch merging or file overwriting
604 partial = a function to filter file lists (dirstate not updated)
611 partial = a function to filter file lists (dirstate not updated)
605 mergeancestor = if false, merging with an ancestor (fast-forward)
612 mergeancestor = whether it is merging with an ancestor. If true,
606 is only allowed between different named branches. This flag
613 we should accept the incoming changes for any prompts that occur.
607 is used by rebase extension as a temporary fix and should be
614 If false, merging with an ancestor (fast-forward) is only allowed
608 avoided in general.
615 between different named branches. This flag is used by rebase extension
616 as a temporary fix and should be avoided in general.
609
617
610 The table below shows all the behaviors of the update command
618 The table below shows all the behaviors of the update command
611 given the -c and -C or no options, whether the working directory
619 given the -c and -C or no options, whether the working directory
@@ -693,7 +701,7 def update(repo, node, branchmerge, forc
693
701
694 ### calculate phase
702 ### calculate phase
695 actions = calculateupdates(repo, wc, p2, pa,
703 actions = calculateupdates(repo, wc, p2, pa,
696 branchmerge, force, partial)
704 branchmerge, force, partial, mergeancestor)
697
705
698 ### apply phase
706 ### apply phase
699 if not branchmerge: # just jump to the new rev
707 if not branchmerge: # just jump to the new rev
@@ -719,6 +719,30 Test stripping a revision with another c
719
719
720 $ cd ..
720 $ cd ..
721
721
722 Test collapsing changes that add then remove a file
722
723
724 $ hg init collapseaddremove
725 $ cd collapseaddremove
723
726
727 $ touch base
728 $ hg commit -Am base
729 adding base
730 $ touch a
731 $ hg commit -Am a
732 adding a
733 $ hg rm a
734 $ touch b
735 $ hg commit -Am b
736 adding b
737 $ hg rebase -d 0 -r "1::2" --collapse -m collapsed
738 saved backup bundle to $TESTTMP/collapseaddremove/.hg/strip-backup/*-backup.hg (glob)
739 $ hg tglog
740 @ 1: 'collapsed'
741 |
742 o 0: 'base'
724
743
744 $ hg manifest
745 b
746 base
747
748 $ cd ..
@@ -326,8 +326,6 Verify that target is not selected as ex
326 $ hg ci -m "J"
326 $ hg ci -m "J"
327
327
328 $ hg rebase -s 8 -d 7 --collapse --config ui.merge=internal:other
328 $ hg rebase -s 8 -d 7 --collapse --config ui.merge=internal:other
329 remote changed E which local deleted
330 use (c)hanged version or leave (d)eleted? c
331 saved backup bundle to $TESTTMP/a6/.hg/strip-backup/*-backup.hg (glob)
329 saved backup bundle to $TESTTMP/a6/.hg/strip-backup/*-backup.hg (glob)
332
330
333 $ hg tglog
331 $ hg tglog
General Comments 0
You need to be logged in to leave comments. Login now