[PATCH] cmdutil: show diffs in commit message with ui.verbosecommit option

Martin Geisler martin at geisler.net
Sat Jan 11 15:20:18 CST 2014


Jordi Gutiérrez Hermoso <jordigh at octave.org> writes:

> # HG changeset patch
> # User Jordi Gutiérrez Hermoso <jordigh at octave.org>
> # Date 1373469596 14400
> #      Wed Jul 10 11:19:56 2013 -0400
> # Node ID b40695568db84a43b24cffb4c32583a759d96b09
> # Parent  01bdccfeb9d98ae85388d06c9c694b946f346edf
> cmdutil: show diffs in commit message with ui.verbosecommit option

I know people have been asking for this, but I've never really
understood why: I simply run 'hg diff' in another terminal or take a
peek in TortoiseHg. If the diff is substantial, having it dumped into
the commit message buffer wont help me much -- I will want at least to
have color highlighting and probably a real diff tool to see what's
going on.

Also, the recommended way to do this today is to set your editor to a
script which will run 'hg diff' for you before starting your real
editor.

> The following adds an option, ui.verbosecommit, which displays the
> entire diff about to be committed in the text editor window,

If this goes in, then I suggest using a more descriptive name than
ui.verbosecommit. Maybe ui.commitmsgdiff so that the scope of the
setting is more well-defined.

> prefixed with "HG:". This is useful as a final reminder of what's
> about to be committed while writing the commit message.
>
> diff --git a/mercurial/cmdutil.py b/mercurial/cmdutil.py
> --- a/mercurial/cmdutil.py
> +++ b/mercurial/cmdutil.py
> @@ -1864,6 +1864,12 @@
>      edittext.extend([_("HG: added %s") % f for f in added])
>      edittext.extend([_("HG: changed %s") % f for f in modified])
>      edittext.extend([_("HG: removed %s") % f for f in removed])
> +    if repo.ui.config("ui","verbosecommit"):
> +        edittext.append("HG: ")
> +        diff = ctx.diff()
> +        for f in diff:
> +            for l in f.split("\n"):
> +                edittext.extend([_("HG: %s") % l])

You should probably either use

            for l in f.split("\n"):
                edittext.append(_("HG: %s") % l)

or

            edittext.extend([_("HG: %s") % l for l in f.split("\n")])

That is, either append single lines or extend the list with all lines in
one go.

-- 
Martin Geisler


More information about the Mercurial-devel mailing list