diff options
author | Junio C Hamano <gitster@pobox.com> | 2013-10-28 10:17:31 -0700 |
---|---|---|
committer | Junio C Hamano <gitster@pobox.com> | 2013-10-28 10:17:31 -0700 |
commit | 77bc4302dc93ac33891c72df59d9426eb6d06d0b (patch) | |
tree | 84362fb631bfb7c4e1b93d8bd0a26d7319827c8d | |
parent | b28325d3ab0172063d1fbe0e735d899ae43c6fee (diff) | |
parent | cd4f09e38341bdd17cf008ea57863e4b10ac176b (diff) | |
download | git-77bc4302dc93ac33891c72df59d9426eb6d06d0b.tar.gz |
Merge branch 'jk/shortlog-tolerate-broken-commit' into maint
"git shortlog" used to choke and die when there is a malformed commit
(e.g. missing authors); it now simply ignore such a commit and keeps
going.
* jk/shortlog-tolerate-broken-commit:
shortlog: ignore commits with missing authors
-rw-r--r-- | builtin/shortlog.c | 6 | ||||
-rwxr-xr-x | t/t4201-shortlog.sh | 16 |
2 files changed, 20 insertions, 2 deletions
diff --git a/builtin/shortlog.c b/builtin/shortlog.c index 1434f8fee4..84ffbb798e 100644 --- a/builtin/shortlog.c +++ b/builtin/shortlog.c @@ -127,9 +127,11 @@ void shortlog_add_commit(struct shortlog *log, struct commit *commit) author = buffer + 7; buffer = eol; } - if (!author) - die(_("Missing author: %s"), + if (!author) { + warning(_("Missing author: %s"), sha1_to_hex(commit->object.sha1)); + return; + } if (log->user_format) { struct pretty_print_context ctx = {0}; ctx.fmt = CMIT_FMT_USERFORMAT; diff --git a/t/t4201-shortlog.sh b/t/t4201-shortlog.sh index 5493500ef1..42866992cf 100755 --- a/t/t4201-shortlog.sh +++ b/t/t4201-shortlog.sh @@ -172,4 +172,20 @@ test_expect_success '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_done |