@@ -1536,3 +1536,106 @@
date: Thu Jan 01 00:00:00 1970 +0000
summary: bar to b
+Test for --no-commit option:
+
+ $ hg init nocommit
+ $ cd nocommit
+ $ echo a > a
+ $ hg ci -qAm0
+ $ echo b > b
+ $ hg ci -qAm1
+ $ hg up -q 0
+ $ echo c > c
+ $ hg ci -qAm2
+
+Check reporting when --no-commit used with non-applicable options:
+
+ $ hg graft 1 --no-commit -e
+ abort: can't specify --no-commit and --edit
+ [255]
+
+Test --no-commit is working:
+ $ hg graft 1 --no-commit
+ grafting 1:925d80f479bb "1"
+
+ $ hg tip -T "rev: {rev}\n"
+ rev: 2
+
+ $ hg diff
+ diff -r db815d6d32e6 b
+ --- /dev/null Thu Jan 01 00:00:00 1970 +0000
+ +++ b/b Thu Jan 01 00:00:00 1970 +0000
+ @@ -0,0 +1,1 @@
+ +b
+
+ $ hg ci -qm3
+
+Prepare wrdir to check --no-commit is resepected after --continue:
+
+ $ echo A>a
+ $ hg ci -qm4
+ $ hg up -q 1
+ $ echo B>a
+ $ hg ci -qm5
+ $ hg graft 4 --no-commit
+ grafting 4:a08bb3910e7c "4"
+ merging a
+ warning: conflicts while merging a! (edit, then use 'hg resolve --mark')
+ abort: unresolved conflicts, can't continue
+ (use 'hg resolve' and 'hg graft --continue')
+ [255]
+
+Resolving conflict:
+
+ $ echo A>a
+ $ hg resolve --mark
+ (no more unresolved files)
+ continue: hg graft --continue
+
+Test --no-commit is respected after --continue:
+
+ $ hg graft --continue
+ grafting 4:a08bb3910e7c "4"
+ $ hg tip -T "rev: {rev}\n"
+ rev: 5
+ $ hg diff
+ diff -r b1d5b5056844 a
+ --- a/a Thu Jan 01 00:00:00 1970 +0000
+ +++ b/a Thu Jan 01 00:00:00 1970 +0000
+ @@ -1,1 +1,1 @@
+ -B
+ +A
+
+Prepare wrdir to check --no-commit is resepected when passed with --continue:
+
+ $ echo B>a
+ $ hg graft 4
+ grafting 4:a08bb3910e7c "4"
+ merging a
+ warning: conflicts while merging a! (edit, then use 'hg resolve --mark')
+ abort: unresolved conflicts, can't continue
+ (use 'hg resolve' and 'hg graft --continue')
+ [255]
+
+Resolving conflict:
+
+ $ echo A>a
+ $ hg resolve --mark
+ (no more unresolved files)
+ continue: hg graft --continue
+
+Test --no-commit is respected with --continue:
+ $ hg graft --continue --no-commit
+ grafting 4:a08bb3910e7c "4"
+ $ hg diff
+ diff -r b1d5b5056844 a
+ --- a/a Thu Jan 01 00:00:00 1970 +0000
+ +++ b/a Thu Jan 01 00:00:00 1970 +0000
+ @@ -1,1 +1,1 @@
+ -B
+ +A
+ $ hg tip -T "rev: {rev}\n"
+ rev: 5
+
+ $ cd ..
+
@@ -2128,6 +2128,8 @@
('c', 'continue', False, _('resume interrupted graft')),
('e', 'edit', False, _('invoke editor on commit messages')),
('', 'log', None, _('append graft info to log message')),
+ ('', 'no-commit', None,
+ _("don't commit, just apply the changes in working directory")),
('f', 'force', False, _('force graft')),
('D', 'currentdate', False,
_('record the current date as commit date')),
@@ -2164,7 +2166,7 @@
.. note::
The -c/--continue option does not reapply earlier options, except
- for --force, --user and --date.
+ for --force, --user, --date and --no-commit.
.. container:: verbose
@@ -2218,6 +2220,14 @@
**pycompat.strkwargs(opts))
cont = False
+ if opts.get('no_commit'):
+ if opts.get('edit'):
+ raise error.Abort(_("can't specify --no-commit and --edit"))
+ if opts.get('currentuser'):
+ raise error.Abort(_("can't specify --no-commit and --currentuser"))
+ if opts.get('currentdate'):
+ raise error.Abort(_("can't specify --no-commit and --currentdate"))
+
graftstate = statemod.cmdstate(repo, 'graftstate')
if opts.get('continue'):
cont = True
@@ -2230,6 +2240,8 @@
opts['date'] = statedata['date']
if statedata.get('user'):
opts['user'] = statedata['user']
+ if statedata.get('no_commit'):
+ opts['no_commit'] = statedata.get('no_commit')
nodes = statedata['nodes']
revs = [repo[node].rev() for node in nodes]
else:
@@ -2316,6 +2328,8 @@
if not revs:
return -1
+ if opts.get('no_commit'):
+ statedata['no_commit'] = True
for pos, ctx in enumerate(repo.set("%ld", revs)):
desc = '%d:%s "%s"' % (ctx.rev(), ctx,
ctx.description().split('\n', 1)[0])
@@ -2373,13 +2387,14 @@
else:
cont = False
- # commit
- node = repo.commit(text=message, user=user,
- date=date, extra=extra, editor=editor)
- if node is None:
- ui.warn(
- _('note: graft of %d:%s created no changes to commit\n') %
- (ctx.rev(), ctx))
+ # commit if --no-commit is False
+ if not opts.get('no_commit'):
+ node = repo.commit(text=message, user=user,
+ date=date, extra=extra, editor=editor)
+ if node is None:
+ ui.warn(
+ _('note: graft of %d:%s created no changes to commit\n') %
+ (ctx.rev(), ctx))
# remove state when we complete successfully
if not opts.get('dry_run'):