From: Johannes Schindelin <johannes.schindelin@gmx.de>
To: git@vger.kernel.org
Cc: Junio C Hamano <gitster@pobox.com>
Subject: [PATCH v3 0/2] Make find_commit_subject() consistent with --format=%s
Date: Wed, 22 Jun 2016 11:34:19 +0200 (CEST) [thread overview]
Message-ID: <cover.1466587806.git.johannes.schindelin@gmx.de> (raw)
In-Reply-To: <901b24554eb4d0381d74ceb31f7bd08709d5eb25.1466512959.git.johannes.schindelin@gmx.de>
In an intermediate iteration of my rebase--helper patches, I
accidentally generated commits with more than one empty line
between the header and the commit message. When using
find_commit_subject() to show the oneline, it turned up empty, even
if the output of `git show --format=%s` looked fine.
Turned out that the pretty-printing machinery helpfully skipped any
blank lines before the commit message.
In the first iteration of this patch, I failed to notice that
the skip_empty_lines() function used by the pretty printing (which is
declared static, and therefore I originally did not use it in order to
keep the patch as minimal as possible) skips also blank lines.
To make things truly consistent, I now just make the skip_empty_lines()
function public, and then use it.
Johannes Schindelin (2):
Make the skip_empty_lines() function public
Make find_commit_subject() more robust
commit.c | 2 +-
commit.h | 1 +
pretty.c | 2 +-
t/t8008-blame-formats.sh | 17 +++++++++++++++++
4 files changed, 20 insertions(+), 2 deletions(-)
Published-As: https://github.com/dscho/git/releases/tag/leading-empty-lines-v3
Interdiff vs v2:
diff --git a/commit.c b/commit.c
index 7b00989..0bf868f 100644
--- a/commit.c
+++ b/commit.c
@@ -414,9 +414,7 @@ int find_commit_subject(const char *commit_buffer, const char **subject)
while (*p && (*p != '\n' || p[1] != '\n'))
p++;
if (*p) {
- p += 2;
- while (*p == '\n')
- p++;
+ p = skip_empty_lines(p + 2);
for (eol = p; *eol && *eol != '\n'; eol++)
; /* do nothing */
} else
diff --git a/commit.h b/commit.h
index b06db4d..fbdd18d 100644
--- a/commit.h
+++ b/commit.h
@@ -177,6 +177,7 @@ extern const char *format_subject(struct strbuf *sb, const char *msg,
const char *line_separator);
extern void userformat_find_requirements(const char *fmt, struct userformat_want *w);
extern int commit_format_is_empty(enum cmit_fmt);
+extern const char *skip_empty_lines(const char *msg);
extern void format_commit_message(const struct commit *commit,
const char *format, struct strbuf *sb,
const struct pretty_print_context *context);
diff --git a/pretty.c b/pretty.c
index c3ec430..1b807b4 100644
--- a/pretty.c
+++ b/pretty.c
@@ -516,7 +516,7 @@ static int is_empty_line(const char *line, int *len_p)
return !len;
}
-static const char *skip_empty_lines(const char *msg)
+const char *skip_empty_lines(const char *msg)
{
for (;;) {
int linelen = get_one_line(msg);
diff --git a/t/t8008-blame-formats.sh b/t/t8008-blame-formats.sh
index 03bd313..b98f9a4 100755
--- a/t/t8008-blame-formats.sh
+++ b/t/t8008-blame-formats.sh
@@ -94,7 +94,7 @@ test_expect_success '--porcelain detects first non-empty line as subject' '
echo "This is it" >single-file &&
git add single-file &&
tree=$(git write-tree) &&
- commit=$(printf "%s\n%s\n%s\n\n\noneline\n\nbody\n" \
+ commit=$(printf "%s\n%s\n%s\n\n\n \noneline\n\nbody\n" \
"tree $tree" \
"author A <a@b.c> 123456789 +0000" \
"committer C <c@d.e> 123456789 +0000" |
--
2.9.0.118.g0e1a633
base-commit: ab7797dbe95fff38d9265869ea367020046db118
next prev parent reply other threads:[~2016-06-22 9:41 UTC|newest]
Thread overview: 15+ messages / expand[flat|nested] mbox.gz Atom feed top
2016-06-18 13:12 [PATCH] Make find_commit_subject() more robust Johannes Schindelin
2016-06-20 19:35 ` Junio C Hamano
2016-06-21 12:03 ` Johannes Schindelin
2016-06-21 21:15 ` Junio C Hamano
2016-06-22 9:03 ` Johannes Schindelin
2016-06-21 12:43 ` [PATCH v2] " Johannes Schindelin
2016-06-21 20:34 ` Junio C Hamano
2016-06-22 9:34 ` Johannes Schindelin [this message]
2016-06-22 9:34 ` [PATCH v3 1/2] Make the skip_empty_lines() function public Johannes Schindelin
2016-06-22 9:34 ` [PATCH v3 2/2] Make find_commit_subject() more robust Johannes Schindelin
2016-06-22 17:21 ` [PATCH v3 0/2] Make find_commit_subject() consistent with --format=%s Junio C Hamano
2016-06-22 20:20 ` Johannes Schindelin
2016-06-22 20:20 ` [PATCH v4 " Johannes Schindelin
2016-06-22 20:20 ` [PATCH v4 1/2] Make the skip_blank_lines() function public Johannes Schindelin
2016-06-22 20:20 ` [PATCH v4 2/2] Make find_commit_subject() more robust Johannes Schindelin
Reply instructions:
You may reply publicly to this message via plain-text email
using any one of the following methods:
* Save the following mbox file, import it into your mail client,
and reply-to-all from there: mbox
Avoid top-posting and favor interleaved quoting:
https://en.wikipedia.org/wiki/Posting_style#Interleaved_style
* Reply using the --to, --cc, and --in-reply-to
switches of git-send-email(1):
git send-email \
--in-reply-to=cover.1466587806.git.johannes.schindelin@gmx.de \
--to=johannes.schindelin@gmx.de \
--cc=git@vger.kernel.org \
--cc=gitster@pobox.com \
/path/to/YOUR_REPLY
https://kernel.org/pub/software/scm/git/docs/git-send-email.html
* If your mail client supports setting the In-Reply-To header
via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line
before the message body.
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox;
as well as URLs for NNTP newsgroup(s).