Re: [RFC PATCH] commit -v: strip diffs and submodule shortlogs from the commit message

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

 



On Sat, Nov 16, 2013 at 5:52 PM, Jens Lehmann <Jens.Lehmann@xxxxxx> wrote:
> When using the '-v' option of "git commit" the diff added to the commit
> message temporarily for editing is stripped off after the user exited the
> editor by searching for "\ndiff --git " and truncating the commmit message
> there if it is found. But this approach has two problems: when the commit
> message itself contains a line starting with "diff --git" it will be
> truncated there prematurely. And when the "diff.submodule" setting is set
> to "log", the diff may start with "Submodule <hash1>..<hash2>", which will
> be left in the commit message while it shouldn't.
>
> Fix that by introducing a special scissor separator line starting with the
> comment character '#' followed by a line describing what it is for. The
> scissor line is used to reliably detect the start of the diff so it can be
> chopped off from the commit message, no matter what the user enters there.
> Turn a known test failure fixed by this change into a successful test and
> add another one for a diff starting with a submodule log.
>
> Reported-by: Ari Pollak <ari@xxxxxxxxxx>
> Signed-off-by: Jens Lehmann <Jens.Lehmann@xxxxxx>
> ---
>
>  builtin/commit.c          |  6 +++---
>  t/t7507-commit-verbose.sh | 15 ++++++++++++++-
>  wt-status.c               |  4 ++++
>  wt-status.h               |  2 ++
>  4 files changed, 23 insertions(+), 4 deletions(-)
>
> diff --git a/builtin/commit.c b/builtin/commit.c
> index 6ab4605..091a6e7 100644
> --- a/builtin/commit.c
> +++ b/builtin/commit.c
> @@ -1602,9 +1602,9 @@ int cmd_commit(int argc, const char **argv, const char *prefix)
>
>         /* Truncate the message just before the diff, if any. */
>         if (verbose) {
> -               p = strstr(sb.buf, "\ndiff --git ");
> -               if (p != NULL)
> -                       strbuf_setlen(&sb, p - sb.buf + 1);
> +               p = strstr(sb.buf, wt_status_diff_divider);

Would it make sense to use the more flexible is_scissors_line() from
builtin/mailinfo.c here?

> +               if ((p != NULL) && (p > sb.buf) && (p[-1] == '\n'))
> +                       strbuf_setlen(&sb, p - sb.buf);
>         }
>
>         if (cleanup_mode != CLEANUP_NONE)
> diff --git a/wt-status.c b/wt-status.c
> index b4e44ba..a3f7115 100644
> --- a/wt-status.c
> +++ b/wt-status.c
> @@ -16,6 +16,8 @@
>  #include "column.h"
>  #include "strbuf.h"
>
> +const char wt_status_diff_divider[] = "# -----------------------------------8<-----------------------------------\n";
> +
>  static char default_wt_status_colors[][COLOR_MAXLEN] = {
>         GIT_COLOR_NORMAL, /* WT_STATUS_HEADER */
>         GIT_COLOR_GREEN,  /* WT_STATUS_UPDATED */
> @@ -791,6 +793,8 @@ static void wt_status_print_verbose(struct wt_status *s)
>          */
>         if (s->fp != stdout)
>                 rev.diffopt.use_color = 0;
> +       fprintf(s->fp, wt_status_diff_divider);
> +       fprintf(s->fp, _("# The diff below will be removed when keeping the previous line.\n"));
>         run_diff_index(&rev, 1);
>  }
>
> diff --git a/wt-status.h b/wt-status.h
> index 6c29e6f..cd2709f 100644
> --- a/wt-status.h
> +++ b/wt-status.h
> @@ -91,6 +91,8 @@ struct wt_status_state {
>         unsigned char cherry_pick_head_sha1[20];
>  };
>
> +const char wt_status_diff_divider[];
> +
>  void wt_status_prepare(struct wt_status *s);
>  void wt_status_print(struct wt_status *s);
>  void wt_status_collect(struct wt_status *s);
> --
--
To unsubscribe from this list: send the line "unsubscribe git" in
the body of a message to majordomo@xxxxxxxxxxxxxxx
More majordomo info at  http://vger.kernel.org/majordomo-info.html




[Index of Archives]     [Linux Kernel Development]     [Gcc Help]     [IETF Annouce]     [DCCP]     [Netdev]     [Networking]     [Security]     [V4L]     [Bugtraq]     [Yosemite]     [MIPS Linux]     [ARM Linux]     [Linux Security]     [Linux RAID]     [Linux SCSI]     [Fedora Users]