All of lore.kernel.org
 help / color / mirror / Atom feed
From: Christian Couder <chriscool@tuxfamily.org>
To: Junio C Hamano <gitster@pobox.com>
Cc: git@vger.kernel.org, Johan Herland <johan@herland.net>,
	Josh Triplett <josh@joshtriplett.org>,
	Thomas Rast <tr@thomasrast.ch>,
	Michael Haggerty <mhagger@alum.mit.edu>,
	Dan Carpenter <dan.carpenter@oracle.com>,
	Greg Kroah-Hartman <greg@kroah.com>, Jeff King <peff@peff.net>,
	Eric Sunshine <sunshine@sunshineco.com>,
	Ramsay Jones <ramsay@ramsay1.demon.co.uk>,
	Jonathan Nieder <jrnieder@gmail.com>
Subject: [RFC/PATCH 1/2] trailer: fix to ignore any line starting with '#'
Date: Sun, 27 Apr 2014 22:12:36 +0200	[thread overview]
Message-ID: <20140427201238.16880.13774.chriscool@tuxfamily.org> (raw)
In-Reply-To: <20140427200327.16880.53255.chriscool@tuxfamily.org>

It looks like the commit-msg hook is passed a commit
message that can contain lines starting with a '#'.
Those comment lines will be removed from the commit
message after the hook is run.

If we want "git interpret-trailers" to be able to
process commit messages correctly in the commit-msg
hook we need to ignore those lines.

Signed-off-by: Christian Couder <chriscool@tuxfamily.org>
---
 t/t7513-interpret-trailers.sh | 26 ++++++++++++++++++++++++++
 trailer.c                     | 29 ++++++++++++++++++-----------
 2 files changed, 44 insertions(+), 11 deletions(-)

diff --git a/t/t7513-interpret-trailers.sh b/t/t7513-interpret-trailers.sh
index 9aae721..aa63b1b 100755
--- a/t/t7513-interpret-trailers.sh
+++ b/t/t7513-interpret-trailers.sh
@@ -150,6 +150,32 @@ test_expect_success 'with 2 files arguments' '
 	test_cmp expected actual
 '
 
+test_expect_success 'with message that has comments' '
+	cat basic_message >>message_with_comments &&
+	sed -e "s/ Z\$/ /" >>message_with_comments <<-\EOF &&
+		# comment
+
+		# other comment
+		Cc: Z
+		# yet another comment
+		Reviewed-by: Johan
+		Reviewed-by: Z
+		# last comment
+
+	EOF
+	cat basic_patch >>message_with_comments &&
+	cat basic_message >expected &&
+	cat >>expected <<-\EOF &&
+		# comment
+
+		Cc: Peff
+		Reviewed-by: Johan
+	EOF
+	cat basic_patch >>expected &&
+	git interpret-trailers --trim-empty --trailer "Cc: Peff" message_with_comments >actual &&
+	test_cmp expected actual
+'
+
 test_expect_success 'with commit complex message and trailer args' '
 	cat complex_message_body >expected &&
 	sed -e "s/ Z\$/ /" >>expected <<-\EOF &&
diff --git a/trailer.c b/trailer.c
index 4d32b42..81b2c5c 100644
--- a/trailer.c
+++ b/trailer.c
@@ -644,10 +644,9 @@ static int find_patch_start(struct strbuf **lines, int count)
 /*
  * Return the (0 based) index of the first trailer line or count if
  * there are no trailers. Trailers are searched only in the lines from
- * index (count - 1) down to index 0. The has_blank_line parameter
- * tells if there is a blank line before the trailers.
+ * index (count - 1) down to index 0.
  */
-static int find_trailer_start(struct strbuf **lines, int count, int *has_blank_line)
+static int find_trailer_start(struct strbuf **lines, int count)
 {
 	int start, only_spaces = 1;
 
@@ -656,10 +655,11 @@ static int find_trailer_start(struct strbuf **lines, int count, int *has_blank_l
 	 * for a line with only spaces before lines with one ':'.
 	 */
 	for (start = count - 1; start >= 0; start--) {
+		if (lines[start]->buf[0] == '#')
+			continue;
 		if (contains_only_spaces(lines[start]->buf)) {
 			if (only_spaces)
 				continue;
-			*has_blank_line = 1;
 			return start + 1;
 		}
 		if (strchr(lines[start]->buf, ':')) {
@@ -667,13 +667,20 @@ static int find_trailer_start(struct strbuf **lines, int count, int *has_blank_l
 				only_spaces = 0;
 			continue;
 		}
-		*has_blank_line = start == count - 1 ?
-		  0 : contains_only_spaces(lines[start + 1]->buf);
 		return count;
 	}
 
-	*has_blank_line = only_spaces ? count > 0 : 0;
-	return only_spaces ? count : start + 1;
+	return only_spaces ? count : 0;
+}
+
+static int has_blank_line_before(struct strbuf **lines, int start)
+{
+	for (;start >= 0; start--) {
+		if (lines[start]->buf[0] == '#')
+			continue;
+		return contains_only_spaces(lines[start]->buf);
+	}
+	return 0;
 }
 
 static void print_lines(struct strbuf **lines, int start, int end)
@@ -688,19 +695,19 @@ static int process_input_file(struct strbuf **lines,
 			      struct trailer_item **in_tok_last)
 {
 	int count = 0;
-	int patch_start, trailer_start, has_blank_line, i;
+	int patch_start, trailer_start, i;
 
 	/* Get the line count */
 	while (lines[count])
 		count++;
 
 	patch_start = find_patch_start(lines, count);
-	trailer_start = find_trailer_start(lines, patch_start, &has_blank_line);
+	trailer_start = find_trailer_start(lines, patch_start);
 
 	/* Print lines before the trailers as is */
 	print_lines(lines, 0, trailer_start);
 
-	if (!has_blank_line)
+	if (!has_blank_line_before(lines, trailer_start - 1))
 		printf("\n");
 
 	/* Parse trailer lines */
-- 
1.9.rc0.17.g651113e

  reply	other threads:[~2014-04-27 20:13 UTC|newest]

Thread overview: 6+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2014-04-27 20:12 [RFC/PATCH 0/2] fix and examples for git interpret-trailers Christian Couder
2014-04-27 20:12 ` Christian Couder [this message]
2014-04-28  5:58   ` [RFC/PATCH 1/2] trailer: fix to ignore any line starting with '#' Michael Haggerty
2014-04-28  8:16     ` Christian Couder
2014-04-27 20:12 ` [RFC/PATCH 2/2] trailer: add examples to the documentation Christian Couder
2014-04-28 22:12   ` Junio C Hamano

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=20140427201238.16880.13774.chriscool@tuxfamily.org \
    --to=chriscool@tuxfamily.org \
    --cc=dan.carpenter@oracle.com \
    --cc=git@vger.kernel.org \
    --cc=gitster@pobox.com \
    --cc=greg@kroah.com \
    --cc=johan@herland.net \
    --cc=josh@joshtriplett.org \
    --cc=jrnieder@gmail.com \
    --cc=mhagger@alum.mit.edu \
    --cc=peff@peff.net \
    --cc=ramsay@ramsay1.demon.co.uk \
    --cc=sunshine@sunshineco.com \
    --cc=tr@thomasrast.ch \
    /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 an external index of several public inboxes,
see mirroring instructions on how to clone and mirror
all data and code used by this external index.