amend: invoke editor forcibly when "--edit" option is specified
422981492ace introduces "--edit" option into "hg commit", but it
doesn't work for "hg commit --amend", because
422981492ace prepares
for editor invocation only around "commitfunc()" internal function,
which is used only for temporary amend commit by "cmdutil.amend()".
Actual commit message editing is executed in "cmdutil.amend()".
This patch invokes editor forcibly when "--edit" option is specified
for "hg commit --amend", even if commit message is specified
explicitly by "--message" or "--logfile".
This patch also removes useless handling for commit message and editor
invocation around "commitfunc()" internal function.
--- a/mercurial/cmdutil.py Wed Apr 16 02:04:41 2014 +0900
+++ b/mercurial/cmdutil.py Wed Apr 16 02:38:11 2014 +0900
@@ -1948,6 +1948,8 @@
if not message:
editmsg = True
message = old.description()
+ elif opts.get('edit'):
+ editmsg = True
pureextra = extra.copy()
extra['amend_source'] = old.hex()
--- a/mercurial/commands.py Wed Apr 16 02:04:41 2014 +0900
+++ b/mercurial/commands.py Wed Apr 16 02:38:11 2014 +0900
@@ -1403,23 +1403,12 @@
if (not obsolete._enabled) and old.children():
raise util.Abort(_('cannot amend changeset with children'))
- e = cmdutil.commiteditor
- if forceeditor:
- e = cmdutil.commitforceeditor
-
# commitfunc is used only for temporary amend commit by cmdutil.amend
def commitfunc(ui, repo, message, match, opts):
- editor = e
- # message contains text from -m or -l, if it's empty,
- # open the editor with the old message
- if not message:
- message = old.description()
- editor = cmdutil.commitforceeditor
return repo.commit(message,
opts.get('user') or old.user(),
opts.get('date') or old.date(),
match,
- editor=editor,
extra=extra)
current = repo._bookmarkcurrent
--- a/tests/test-commit-amend.t Wed Apr 16 02:04:41 2014 +0900
+++ b/tests/test-commit-amend.t Wed Apr 16 02:38:11 2014 +0900
@@ -827,3 +827,25 @@
$ hg phase '.^::.'
35: draft
38: secret
+
+Test that amend with --edit invokes editor forcibly
+---------------------------------------------------
+
+ $ hg parents --template "{desc}\n"
+ amend as secret
+ $ HGEDITOR=cat hg commit --amend -m "editor should be suppressed"
+ $ hg parents --template "{desc}\n"
+ editor should be suppressed
+
+ $ HGEDITOR=cat hg commit --amend -m "editor should be invoked" --edit
+ editor should be invoked
+
+
+ HG: Enter commit message. Lines beginning with 'HG:' are removed.
+ HG: Leave message empty to abort commit.
+ HG: --
+ HG: user: test
+ HG: branch 'silliness'
+ HG: changed obs.py
+ $ hg parents --template "{desc}\n"
+ editor should be invoked