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

[PATCH 1/6] shortlog: match both "Author:" and "author" on stdin

From
Jeff King <peff@peff.net>
Date
Jan 18, 2016, 20:02 UTC
Message-ID
<20160118200240.GA15836@sigill.intra.peff.net>
In-Reply-To
<20160118200136.GA9514@sigill.intra.peff.net>

The original git-shortlog could read both the normal "git log" output as well as "git log --format=raw". However, when it was converted to C by b8ec592 (Build in shortlog, 2006-10-22), the trailing colon became mandatory, and we no longer matched the raw output.

Given the amount of intervening time without any bug reports, it's probable that nobody cares. But it's relatively easy to fix, and the end result is hopefully more readable than the original.

Note that this no longer matches "author: ", which we did before, but that has never been a format generated by git.

Signed-off-by: Jeff King <peff@peff.net>
---
 builtin/shortlog.c  | 7 ++++---
 t/t4201-shortlog.sh | 6 ++++++
 2 files changed, 10 insertions(+), 3 deletions(-)
diff --git a/builtin/shortlog.c b/builtin/shortlog.c
index 35ebd17..ab25b44 100644
--- a/builtin/shortlog.c
+++ b/builtin/shortlog.c
@@ -94,8 +94,9 @@ static void read_from_stdin(struct shortlog *log)
 	char author[1024], oneline[1024];
 
 	while (fgets(author, sizeof(author), stdin) != NULL) {
-		if (!(author[0] == 'A' || author[0] == 'a') ||
-		    !starts_with(author + 1, "uthor: "))
+		const char *v;
+		if (!skip_prefix(author, "Author: ", &v) &&
+		    !skip_prefix(author, "author ", &v))
 			continue;
 		while (fgets(oneline, sizeof(oneline), stdin) &&
 		       oneline[0] != '\n')
@@ -103,7 +104,7 @@ static void read_from_stdin(struct shortlog *log)
 		while (fgets(oneline, sizeof(oneline), stdin) &&
 		       oneline[0] == '\n')
 			; /* discard blanks */
-		insert_one_record(log, author + 8, oneline);
+		insert_one_record(log, v, oneline);
 	}
 }
 
diff --git a/t/t4201-shortlog.sh b/t/t4201-shortlog.sh
index 7600a3e..82b2314 100755
--- a/t/t4201-shortlog.sh
+++ b/t/t4201-shortlog.sh
@@ -120,6 +120,12 @@ test_expect_success !MINGW 'shortlog from non-git directory' '
 	test_cmp expect out
 '
 
+test_expect_success !MINGW 'shortlog can read --format=raw output' '
+	git log --format=raw HEAD >log &&
+	GIT_DIR=non-existing git shortlog -w <log >out &&
+	test_cmp expect out
+'
+
 test_expect_success 'shortlog should add newline when input line matches wraplen' '
 	cat >expect <<\EOF &&
 A U Thor (2):
-- 
2.7.0.248.g5eafd77
Previous: Jeff KingNext: Jeff King
Message 8 of 22 in “shortlog fixes and optimizations”
  1. 0/6 shortlog fixes and optimizationsJeff King, Jan 15, 2016
  2. 1/6 shortlog: match both "Author:" and "author" on stdinJeff King, Jan 15, 2016
  3. Eric SunshineJan 15, 2016
  4. Jeff KingJan 18, 2016
  5. Jeff KingJan 18, 2016
  6. Junio C HamanoJan 18, 2016
  7. 0/6 shortlog fixes and optimizationsJeff King, Jan 18, 2016
  8. 1/6 shortlog: match both "Author:" and "author" on stdinJeff King, Jan 18, 2016
  9. 2/6 shortlog: use strbufs to read from stdinJeff King, Jan 18, 2016
  10. 3/6 shortlog: replace hand-parsing of author with pretty-printerJeff King, Jan 18, 2016
  11. Jeff KingJan 18, 2016
  12. Jeff KingJan 18, 2016
  13. Junio C HamanoJan 19, 2016
  14. 4/6 shortlog: optimize "--summary" modeJeff King, Jan 18, 2016
  15. 5/6 shortlog: optimize out useless "<none>" normalizationJeff King, Jan 18, 2016
  16. 6/6 shortlog: optimize out useless string listJeff King, Jan 18, 2016
  17. 2/6 shortlog: use strbufs to read from stdinJeff King, Jan 15, 2016
  18. 3/6 shortlog: replace hand-parsing of author with pretty-printerJeff King, Jan 15, 2016
  19. 4/6 shortlog: optimize "--summary" modeJeff King, Jan 15, 2016
  20. 5/6 shortlog: optimize out useless "<none>" normalizationJeff King, Jan 15, 2016
  21. 6/6 shortlog: optimize out useless string listJeff King, Jan 15, 2016
  22. Junio C HamanoJan 15, 2016

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.