graft: make --force apply across continues (
issue3220)
Since --force determines the list of revisions to be grafted, it doesn't really
make sense for users to have to keep typing --force --continue as they continue
grafting.
--- a/mercurial/commands.py Fri Jul 25 18:21:16 2014 -0700
+++ b/mercurial/commands.py Sat Jul 26 14:54:36 2014 -0700
@@ -3089,7 +3089,8 @@
.. note::
- The -c/--continue option does not reapply earlier options.
+ The -c/--continue option does not reapply earlier options, except
+ for --force.
.. container:: verbose
@@ -3155,8 +3156,14 @@
if not revs:
return -1
- # check for ancestors of dest branch
- if not opts.get('force'):
+ # Don't check in the --continue case, in effect retaining --force across
+ # --continues. That's because without --force, any revisions we decided to
+ # skip would have been filtered out here, so they wouldn't have made their
+ # way to the graftstate. With --force, any revisions we would have otherwise
+ # skipped would not have been filtered out, and if they hadn't been applied
+ # already, they'd have been in the graftstate.
+ if not (cont or opts.get('force')):
+ # check for ancestors of dest branch
crev = repo['.'].rev()
ancestors = repo.changelog.ancestors([crev], inclusive=True)
# Cannot use x.remove(y) on smart set, this has to be a list.
--- a/tests/test-graft.t Fri Jul 25 18:21:16 2014 -0700
+++ b/tests/test-graft.t Sat Jul 26 14:54:36 2014 -0700
@@ -661,3 +661,20 @@
$ cat a
abc
+graft --continue after --force
+
+ $ hg backout 30
+ reverting a
+ changeset 31:3b96c18b7a1b backs out changeset 30:8f539994be33
+ $ hg graft 28 --force --tool internal:fail
+ grafting revision 28
+ abort: unresolved conflicts, can't continue
+ (use hg resolve and hg graft --continue)
+ [255]
+ $ hg resolve --all
+ merging a
+ (no more unresolved files)
+ $ hg graft -c
+ grafting revision 28
+ $ cat a
+ abc