SZEDER Gábor <[email protected]> writes:
> The diff and submodule shortlog appended to the commit message template
> by 'git commit --verbose' are not stripped when the commit message
> contains an indented scissors line.
>
> When cleaning up a commit message with 'git commit --verbose' or
> '--cleanup=scissors' the code is careful and triggers only on a pure
> scissors line, i.e. a line containing nothing but a comment character, a
> space, and the scissors cut. This is good, because people can embed
> scissor lines in the commit message while using 'git commit --verbose',
> and the text they write after their indented scissors line doesn't get
> deleted.
>
> While doing so, however, the cleanup function only looks at the first
> line matching the scissors pattern and if it doesn't start at the
> beginning of the line, then the function just returns without performing
> any cleanup. This is bad, because a "real" scissors line added by 'git
> commit --verbose' might follow, and in that case the diff and submodule
> shortlog get included in the commit message.
Yikes; this is not just "bad" but simply "wrong". Thanks for
noticing.
> void wt_status_truncate_message_at_cut_line(struct strbuf *buf)
> {
> - const char *p;
> + const char *p = buf->buf;
> struct strbuf pattern = STRBUF_INIT;
>
> strbuf_addf(&pattern, "%c %s", comment_line_char, cut_line);
> - p = strstr(buf->buf, pattern.buf);
> - if (p && (p == buf->buf || p[-1] == '\n'))
> - strbuf_setlen(buf, p - buf->buf);
> + while ((p = strstr(p, pattern.buf))) {
> + if (p == buf->buf || p[-1] == '\n') {
> + strbuf_setlen(buf, p - buf->buf);
> + break;
> + }
> + p++;
> + }
I however wonder if we should make strstr() do more work for us.
strbuf_addf(&pattern, "\n%c %s", comment_line_char, cut_line);
if (starts_with(buf->buf, pattern.buf + 1))
strbuf_setlen(buf, 0);
else if ((p = strstr(buf->buf, pattern.buf)) != NULL)
strbuf_setlen(buf, p - buf->buf + 1);
strbuf_release(&pattern);
perhaps?
--
To unsubscribe from this list: send the line "unsubscribe git" in
the body of a message to [email protected]
More majordomo info at http://vger.kernel.org/majordomo-info.html