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

Re: [PATCH 3/6] shortlog: replace hand-parsing of author with pretty-printer

From
Jeff King <peff@peff.net>
Date
Jan 18, 2016, 23:04 UTC
Message-ID
<20160118230435.GA16898@sigill.intra.peff.net>
In-Reply-To
<20160118201337.GA15943@sigill.intra.peff.net>
On Mon, Jan 18, 2016 at 03:13:37PM -0500, Jeff King wrote:
Show 29 quoted lines
> On Mon, Jan 18, 2016 at 03:02:48PM -0500, Jeff King wrote:
> 
> > +	format_commit_message(commit, "%an <%ae>", &author, &ctx);
> > +	/* we can detect a total failure only by seeing " <>" in the output */
> > +	if (author.len <= 3) {
> >  		warning(_("Missing author: %s"),
> >  		    oid_to_hex(&commit->object.oid));
> > [...]
> > +		goto out;
> >  	}
> 
> One note on this. In the linux.git tree, this warning actually triggers,
> because there is a commit with a bogus empty author:
> 
>   $ git log -1 --format=raw af25e94d4dc | grep ^author
>   author  <> 1120285620 -0700
> 
> Whereas in the original code, you really do get a line with a blank
> name.
> 
> I think what the new code does is quite reasonable, but I'm not sure if:
> 
>   1. People really want a syntactically valid empty name to be
>      represented.
> 
> and
> 
>   2. Regardless of the output, if kernel folks will be annoyed by the
>      warning whenever they run a full-repo shortlog.

After thinking on this, I'm in favor of removing this warning entirely. My reasons are given in the commit message below, which can apply on top of the series. It could also be squashed in to 2/6, but given that it is removing the test added by cd4f09e (shortlog: ignore commits with missing authors, 2013-09-18), I think it's worth recording as a separate commit.

-- >8 --
Subject: [PATCH] shortlog: don't warn on empty author

Git tries to avoid creating a commit with an empty author name or email. However, commits created by older, less strict versions of git may still be in the history. There's not much point in issuing a warning to stderr for an empty author. The user can't do anything about it now, and we are better off to simply include it in the shortlog output as an empty name/email, and let the caller process it however they see fit.

Older versions of shortlog differentiated between "author header not present" (which complained) and "author name/email are blank" (which included the empty ident in the output). But since switching to format_commit_message, we complain to stderr about either case (linux.git has a blank author deep in its history which triggers this).

We could try to restore the older behavior (complaining only about the missing header), but in retrospect, there's not much point in differentiating these cases. A missing author header is bogus, but as for the "blank" case, the only useful behavior is to add it to the "empty name" collection.

Signed-off-by: Jeff King <peff@peff.net>
---
 builtin/shortlog.c  |  8 --------
 t/t4201-shortlog.sh | 16 ----------------
 2 files changed, 24 deletions(-)
diff --git a/builtin/shortlog.c b/builtin/shortlog.c
index adbf1fd..e32be39 100644
--- a/builtin/shortlog.c
+++ b/builtin/shortlog.c
@@ -149,13 +149,6 @@ void shortlog_add_commit(struct shortlog *log, struct commit *commit)
 	ctx.output_encoding = get_log_output_encoding();
 
 	format_commit_message(commit, "%an <%ae>", &author, &ctx);
-	/* we can detect a total failure only by seeing " <>" in the output */
-	if (author.len <= 3) {
-		warning(_("Missing author: %s"),
-		    oid_to_hex(&commit->object.oid));
-		goto out;
-	}
-
 	if (!log->summary) {
 		if (log->user_format)
 			pretty_print_commit(&ctx, commit, &oneline);
@@ -165,7 +158,6 @@ void shortlog_add_commit(struct shortlog *log, struct commit *commit)
 
 	insert_one_record(log, author.buf, oneline.len ? oneline.buf : "<none>");
 
-out:
 	strbuf_release(&author);
 	strbuf_release(&oneline);
 }
diff --git a/t/t4201-shortlog.sh b/t/t4201-shortlog.sh
index 82b2314..f5e6367 100755
--- a/t/t4201-shortlog.sh
+++ b/t/t4201-shortlog.sh
@@ -178,22 +178,6 @@ test_expect_success !MINGW 'shortlog encoding' '
 	git shortlog HEAD~2.. > out &&
 test_cmp expect out'
 
-test_expect_success 'shortlog ignores commits with missing authors' '
-	git commit --allow-empty -m normal &&
-	git commit --allow-empty -m soon-to-be-broken &&
-	git cat-file commit HEAD >commit.tmp &&
-	sed "/^author/d" commit.tmp >broken.tmp &&
-	commit=$(git hash-object -w -t commit --stdin <broken.tmp) &&
-	git update-ref HEAD $commit &&
-	cat >expect <<-\EOF &&
-	A U Thor (1):
-	      normal
-
-	EOF
-	git shortlog HEAD~2.. >actual &&
-	test_cmp expect actual
-'
-
 test_expect_success 'shortlog with revision pseudo options' '
 	git shortlog --all &&
 	git shortlog --branches &&
-- 
2.7.0.248.g5eafd77
Previous: Jeff KingNext: Junio C Hamano
Message 12 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.