# HG changeset patch # User FUJIWARA Katsunori # Date 1408153439 -32400 # Node ID 75618a223e182d0aa60778903019d4a72b5e95ac # Parent 8341c677c204a0ebe33eac365ade8407bf0d0ec2 commit: change "editform" to distinguish merge commits from others "editform" argument for "getcommiteditor" is decided according to the format below: COMMAND[.ROUTE] - COMMAND: name of command - ROUTE: name of route, if there are two or more routes in COMMAND This patch uses "normal.normal" and "normal.merge" as ROUTE of "editform" instead of "normal", to distinguish merge commits from others in "hg commit" without "--amend" case. This patch assumes "editform" variations for "hg commit" below: commit.normal.normal commit.normal.merge commit.amend.normal commit.amend.merge "mergeeditform" is factored out for subsequent patches. It takes "ctxorbool" argument, because context object can't be passed in some cases. diff -r 8341c677c204 -r 75618a223e18 mercurial/cmdutil.py --- a/mercurial/cmdutil.py Sat Aug 16 10:19:26 2014 -0700 +++ b/mercurial/cmdutil.py Sat Aug 16 10:43:59 2014 +0900 @@ -109,6 +109,23 @@ (logfile, inst.strerror)) return message +def mergeeditform(ctxorbool, baseform): + """build appropriate editform from ctxorbool and baseform + + 'cxtorbool' is one of a ctx to be committed, or a bool whether + merging is committed. + + This returns editform 'baseform' with '.merge' if merging is + committed, or one with '.normal' suffix otherwise. + """ + if isinstance(ctxorbool, bool): + if ctxorbool: + return baseform + ".merge" + elif 1 < len(ctxorbool.parents()): + return baseform + ".merge" + + return baseform + ".normal" + def getcommiteditor(edit=False, finishdesc=None, extramsg=None, editform='', **opts): """get appropriate commit message editor according to '--edit' option diff -r 8341c677c204 -r 75618a223e18 mercurial/commands.py --- a/mercurial/commands.py Sat Aug 16 10:19:26 2014 -0700 +++ b/mercurial/commands.py Sat Aug 16 10:43:59 2014 +0900 @@ -1448,7 +1448,7 @@ # Propagate to subrepos baseui.setconfig('phases', 'new-commit', 'secret', 'commit') - editform = 'commit.normal' + editform = cmdutil.mergeeditform(repo[None], 'commit.normal') editor = cmdutil.getcommiteditor(editform=editform, **opts) return repo.commit(message, opts.get('user'), opts.get('date'), match, diff -r 8341c677c204 -r 75618a223e18 mercurial/help/config.txt --- a/mercurial/help/config.txt Sat Aug 16 10:19:26 2014 -0700 +++ b/mercurial/help/config.txt Sat Aug 16 10:43:59 2014 +0900 @@ -395,7 +395,8 @@ - ``changeset.backout`` for :hg:`backout` - ``changeset.commit.amend`` for :hg:`commit --amend` -- ``changeset.commit.normal`` for :hg:`commit` without ``--amend`` +- ``changeset.commit.normal.merge`` for :hg:`commit` on merges +- ``changeset.commit.normal.normal`` for :hg:`commit` on other - ``changeset.fetch`` for :hg:`fetch` (impling merge commit) - ``changeset.gpg.sign`` for :hg:`sign` - ``changeset.graft`` for :hg:`graft` @@ -422,7 +423,7 @@ At the external editor invocation for committing, corresponding dot-separated list of names without ``changeset.`` prefix -(e.g. ``commit.normal``) is in ``HGEDITFORM`` environment variable. +(e.g. ``commit.normal.normal``) is in ``HGEDITFORM`` environment variable. In this section, items other than ``changeset`` can be referred from others. For example, the configuration to list committed files up diff -r 8341c677c204 -r 75618a223e18 tests/test-commit.t --- a/tests/test-commit.t Sat Aug 16 10:19:26 2014 -0700 +++ b/tests/test-commit.t Sat Aug 16 10:43:59 2014 +0900 @@ -9,7 +9,7 @@ > true > EOF $ HGEDITOR="sh $TESTTMP/checkeditform.sh" hg commit -m "" - HGEDITFORM=commit.normal + HGEDITFORM=commit.normal.normal abort: empty commit message [255] $ hg commit -d '0 0' -m commit-1 @@ -282,7 +282,8 @@ should succeed - $ hg ci -mmerge + $ HGEDITOR="sh $TESTTMP/checkeditform.sh" hg ci -mmerge --edit + HGEDITFORM=commit.normal.merge $ cd ..