D2409: graft: add no-commit mode (issue5631)
khanchi97 (Sushil khanchi)
phabricator at mercurial-scm.org
Tue Jun 26 06:46:58 EDT 2018
khanchi97 updated this revision to Diff 9301.
khanchi97 edited the summary of this revision.
REPOSITORY
rHG Mercurial
CHANGES SINCE LAST UPDATE
https://phab.mercurial-scm.org/D2409?vs=8961&id=9301
REVISION DETAIL
https://phab.mercurial-scm.org/D2409
AFFECTED FILES
mercurial/commands.py
tests/test-completion.t
tests/test-graft.t
CHANGE DETAILS
diff --git a/tests/test-graft.t b/tests/test-graft.t
--- a/tests/test-graft.t
+++ b/tests/test-graft.t
@@ -1885,3 +1885,245 @@
new changesets detected on destination branch, can't strip
graft aborted
working directory is now at 6b98ff0062dd
+
+============================
+Testing --no-commit option:|
+============================
+
+ $ cd ..
+ $ hg init nocommit
+ $ cd nocommit
+ $ echo a > a
+ $ hg ci -qAma
+ $ echo b > b
+ $ hg ci -qAmb
+ $ hg up -q 0
+ $ echo c > c
+ $ hg ci -qAmc
+ $ hg log -GT "{rev}:{node|short} {desc}\n"
+ @ 2:d36c0562f908 c
+ |
+ | o 1:d2ae7f538514 b
+ |/
+ o 0:cb9a9f314b8b a
+
+
+Check reporting when --no-commit used with non-applicable options:
+
+ $ hg graft 1 --no-commit -e
+ abort: cannot specify --no-commit and --edit together
+ [255]
+
+ $ hg graft 1 --no-commit --log
+ abort: cannot specify --no-commit and --log together
+ [255]
+
+ $ hg graft 1 --no-commit -D
+ abort: cannot specify --no-commit and --currentdate together
+ [255]
+
+Test --no-commit is working:
+ $ hg graft 1 --no-commit
+ grafting 1:d2ae7f538514 "b"
+
+ $ hg log -GT "{rev}:{node|short} {desc}\n"
+ @ 2:d36c0562f908 c
+ |
+ | o 1:d2ae7f538514 b
+ |/
+ o 0:cb9a9f314b8b a
+
+
+ $ hg diff
+ diff -r d36c0562f908 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
+
+Prepare wrdir to check --no-commit is resepected after --continue:
+
+ $ hg up -qC
+ $ echo A>a
+ $ hg ci -qm "A in file a"
+ $ hg up -q 1
+ $ echo B>a
+ $ hg ci -qm "B in file a"
+ $ hg log -GT "{rev}:{node|short} {desc}\n"
+ @ 4:2aa9ad1006ff B in file a
+ |
+ | o 3:09e253b87e17 A in file a
+ | |
+ | o 2:d36c0562f908 c
+ | |
+ o | 1:d2ae7f538514 b
+ |/
+ o 0:cb9a9f314b8b a
+
+
+ $ hg graft 3 --no-commit
+ grafting 3:09e253b87e17 "A in file a"
+ 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]
+
+Resolve conflict:
+ $ echo A>a
+ $ hg resolve --mark
+ (no more unresolved files)
+ continue: hg graft --continue
+
+ $ hg graft --continue
+ grafting 3:09e253b87e17 "A in file a"
+ $ hg log -GT "{rev}:{node|short} {desc}\n"
+ @ 4:2aa9ad1006ff B in file a
+ |
+ | o 3:09e253b87e17 A in file a
+ | |
+ | o 2:d36c0562f908 c
+ | |
+ o | 1:d2ae7f538514 b
+ |/
+ o 0:cb9a9f314b8b a
+
+ $ hg diff
+ diff -r 2aa9ad1006ff 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 up -qC
+
+Check --no-commit is resepected when passed with --continue:
+
+ $ hg graft 3
+ grafting 3:09e253b87e17 "A in file a"
+ 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]
+
+Resolve conflict:
+ $ echo A>a
+ $ hg resolve --mark
+ (no more unresolved files)
+ continue: hg graft --continue
+
+ $ hg graft --continue --no-commit
+ grafting 3:09e253b87e17 "A in file a"
+ $ hg diff
+ diff -r 2aa9ad1006ff 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 log -GT "{rev}:{node|short} {desc}\n"
+ @ 4:2aa9ad1006ff B in file a
+ |
+ | o 3:09e253b87e17 A in file a
+ | |
+ | o 2:d36c0562f908 c
+ | |
+ o | 1:d2ae7f538514 b
+ |/
+ o 0:cb9a9f314b8b a
+
+ $ hg up -qC
+
+Test --no-commit when graft multiple revisions:
+When there is conflict:
+ $ hg graft -r "2::3" --no-commit
+ grafting 2:d36c0562f908 "c"
+ grafting 3:09e253b87e17 "A in file a"
+ 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]
+
+ $ echo A>a
+ $ hg resolve --mark
+ (no more unresolved files)
+ continue: hg graft --continue
+ $ hg graft --continue
+ grafting 3:09e253b87e17 "A in file a"
+ $ hg diff
+ diff -r 2aa9ad1006ff 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
+ diff -r 2aa9ad1006ff c
+ --- /dev/null Thu Jan 01 00:00:00 1970 +0000
+ +++ b/c Thu Jan 01 00:00:00 1970 +0000
+ @@ -0,0 +1,1 @@
+ +c
+
+ $ hg log -GT "{rev}:{node|short} {desc}\n"
+ @ 4:2aa9ad1006ff B in file a
+ |
+ | o 3:09e253b87e17 A in file a
+ | |
+ | o 2:d36c0562f908 c
+ | |
+ o | 1:d2ae7f538514 b
+ |/
+ o 0:cb9a9f314b8b a
+
+ $ hg up -qC
+
+When there is no conflict:
+ $ echo d>d
+ $ hg add d -q
+ $ hg ci -qmd
+ $ hg up 3 -q
+ $ hg log -GT "{rev}:{node|short} {desc}\n"
+ o 5:baefa8927fc0 d
+ |
+ o 4:2aa9ad1006ff B in file a
+ |
+ | @ 3:09e253b87e17 A in file a
+ | |
+ | o 2:d36c0562f908 c
+ | |
+ o | 1:d2ae7f538514 b
+ |/
+ o 0:cb9a9f314b8b a
+
+
+ $ hg graft -r 1 -r 5 --no-commit
+ grafting 1:d2ae7f538514 "b"
+ grafting 5:baefa8927fc0 "d" (tip)
+ $ hg diff
+ diff -r 09e253b87e17 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
+ diff -r 09e253b87e17 d
+ --- /dev/null Thu Jan 01 00:00:00 1970 +0000
+ +++ b/d Thu Jan 01 00:00:00 1970 +0000
+ @@ -0,0 +1,1 @@
+ +d
+ $ hg log -GT "{rev}:{node|short} {desc}\n"
+ o 5:baefa8927fc0 d
+ |
+ o 4:2aa9ad1006ff B in file a
+ |
+ | @ 3:09e253b87e17 A in file a
+ | |
+ | o 2:d36c0562f908 c
+ | |
+ o | 1:d2ae7f538514 b
+ |/
+ o 0:cb9a9f314b8b a
+
+ $ cd ..
diff --git a/tests/test-completion.t b/tests/test-completion.t
--- a/tests/test-completion.t
+++ b/tests/test-completion.t
@@ -312,7 +312,7 @@
debugwireargs: three, four, five, ssh, remotecmd, insecure
debugwireproto: localssh, peer, noreadstderr, nologhandshake, ssh, remotecmd, insecure
files: rev, print0, include, exclude, template, subrepos
- graft: rev, continue, stop, abort, edit, log, force, currentdate, currentuser, date, user, tool, dry-run
+ graft: rev, continue, stop, abort, edit, log, force, currentdate, currentuser, date, user, tool, dry-run, no-commit
grep: print0, all, diff, text, follow, ignore-case, files-with-matches, line-number, rev, allfiles, user, date, template, include, exclude
heads: rev, topo, active, closed, style, template
help: extension, command, keyword, system
diff --git a/mercurial/commands.py b/mercurial/commands.py
--- a/mercurial/commands.py
+++ b/mercurial/commands.py
@@ -2111,6 +2111,8 @@
('', 'abort', False, _('abort 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')),
@@ -2200,6 +2202,20 @@
**pycompat.strkwargs(opts))
cont = False
+ if opts.get('no_commit'):
+ if opts.get('edit'):
+ raise error.Abort(_("cannot specify --no-commit and "
+ "--edit together"))
+ if opts.get('currentuser'):
+ raise error.Abort(_("cannot specify --no-commit and "
+ "--currentuser together"))
+ if opts.get('currentdate'):
+ raise error.Abort(_("cannot specify --no-commit and "
+ "--currentdate together"))
+ if opts.get('log'):
+ raise error.Abort(_("cannot specify --no-commit and "
+ "--log together"))
+
graftstate = statemod.cmdstate(repo, 'graftstate')
if opts.get('stop'):
@@ -2237,6 +2253,8 @@
opts['user'] = statedata['user']
if statedata.get('log'):
opts['log'] = True
+ if statedata.get('no_commit'):
+ opts['no_commit'] = statedata.get('no_commit')
nodes = statedata['nodes']
revs = [repo[node].rev() for node in nodes]
else:
@@ -2323,6 +2341,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,16 +2393,17 @@
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))
- # checking that newnodes exist because old state files won't have it
- elif statedata.get('newnodes') is not None:
- statedata['newnodes'].append(node)
+ # 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))
+ # checking that newnodes exist because old state files won't have it
+ elif statedata.get('newnodes') is not None:
+ statedata['newnodes'].append(node)
# remove state when we complete successfully
if not opts.get('dry_run'):
To: khanchi97, #hg-reviewers, pulkit
Cc: pulkit, mercurial-devel
More information about the Mercurial-devel
mailing list