git/list[1] front-page[2] threads[3] people[4] search[5] about
 

[PATCH] Fix "--pretty=format:" for parent related items.

From
Junio C Hamano <junkio@cox.net>
Date
Mar 28, 2007, 20:37 UTC
Message-ID
<7vhcs5f6kr.fsf_-_@assigned-by-dhcp.cox.net>
In-Reply-To
<20070328192111.GA2588@steel.home>

There are two breakages in the %P/%p interpolation. It appended an excess SP at the end of the list, and it gave uninitialized contents of a buffer on the stack for root commits.

This fixes it, while updating the t6006 test which expected the wrong output.

Signed-off-by: Junio C Hamano <junkio@cox.net>
---
 commit.c                   |   12 ++++++++----
 t/t6006-rev-list-format.sh |    8 ++++----
 2 files changed, 12 insertions(+), 8 deletions(-)
 mode change 100644 => 100755 t/t6006-rev-list-format.sh
diff --git a/commit.c b/commit.c
index a92958c..33b63c4 100644
--- a/commit.c
+++ b/commit.c
@@ -849,19 +849,23 @@ static long format_commit_message(const struct commit *commit,
 	interp_set_entry(table, ITREE_ABBREV,
 			find_unique_abbrev(commit->tree->object.sha1,
 				DEFAULT_ABBREV));
+
+	parents[1] = 0;
 	for (i = 0, p = commit->parents;
 			p && i < sizeof(parents) - 1;
 			p = p->next)
-		i += snprintf(parents + i, sizeof(parents) - i - 1, "%s ",
+		i += snprintf(parents + i, sizeof(parents) - i - 1, " %s",
 			sha1_to_hex(p->item->object.sha1));
-	interp_set_entry(table, IPARENTS, parents);
+	interp_set_entry(table, IPARENTS, parents + 1);
+
+	parents[1] = 0;
 	for (i = 0, p = commit->parents;
 			p && i < sizeof(parents) - 1;
 			p = p->next)
-		i += snprintf(parents + i, sizeof(parents) - i - 1, "%s ",
+		i += snprintf(parents + i, sizeof(parents) - i - 1, " %s",
 			find_unique_abbrev(p->item->object.sha1,
 				DEFAULT_ABBREV));
-	interp_set_entry(table, IPARENTS_ABBREV, parents);
+	interp_set_entry(table, IPARENTS_ABBREV, parents + 1);
 
 	for (i = 0, state = HEADER; msg[i] && state < BODY; i++) {
 		int eol;
diff --git a/t/t6006-rev-list-format.sh b/t/t6006-rev-list-format.sh
old mode 100644
new mode 100755
index cf096c3..ce9c7dc
--- a/t/t6006-rev-list-format.sh
+++ b/t/t6006-rev-list-format.sh
@@ -39,11 +39,11 @@ EOF
 
 test_format parents %P%n%p <<'EOF'
 commit 131a310eb913d107dd3c09a65d1651175898735d
-86c75cfd708a0e5868dc876ed5b8bb66c80b4873 
-86c75cf 
+86c75cfd708a0e5868dc876ed5b8bb66c80b4873
+86c75cf
 commit 86c75cfd708a0e5868dc876ed5b8bb66c80b4873
-86c75cf 
-86c75cf 
+
+
 EOF
 
 # we don't test relative here
-- 
1.5.1.rc2.632.g054ea8
Previous: Alex RiesenNext: Alex Riesen
Message 3 of 5 in “Add some basic tests of rev-list --pretty=format”
  1. Add some basic tests of rev-list --pretty=formatJeff King, Mar 28, 2007
  2. Alex RiesenMar 28, 2007
  3. Fix "--pretty=format:" for parent related items.Junio C Hamano, Mar 28, 2007
  4. Improve output of %p and %P format in git-rev-list --pretty=format:Alex Riesen, Mar 28, 2007
  5. Jeff KingMar 28, 2007

Read the whole thread, see it on lore, or plain text.

$ cat FOOTERMessages come from the public archive at lore.kernel.org/git, fetched every hour. The front page is chosen and written each morning by an AI editor and can be wrong; the threads themselves are the record. About and API. For agents: an MCP server at https://gitlist.dev/mcp, and any thread, story or person page as Markdown by adding .md to its URL (or sending Accept: text/markdown). Details in /llms.txt.