Re: [PATCH 1/6] shortlog: match both "Author:" and "author" on stdin
From: Eric Sunshine <hidden>
Date: 2016-06-15 23:07:47
On Friday, January 15, 2016, Jeff King [off-list ref] wrote:
quoted hunk ↗ jump to hunk
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 given that it's easy to fix, and that the end result is hopefully more obvious and flexible (it could now easily accomodate matching "Committer"), let's just make it work. Signed-off-by: Jeff King <redacted> ---diff --git a/builtin/shortlog.c b/builtin/shortlog.c@@ -89,13 +89,34 @@ static void insert_one_record(struct shortlog *log, +/* + * If header is "author", match candidate against the regex /[Aa]uthor:? /, + * and return a pointer to the remainder of the string in out_value. + */ +static int match_ident_header(const char *candidate, const char *header, + const char **out_value) +{ + const char *v; + + if (tolower(*candidate++) != tolower(*header++)) + return 0;
Presumably, this will never be invoked as match_ident_header("", "",
...) so we don't have to worry about it accessing beyond end-of-string
when it gets past this conditional. Does it deserve an
assert(*candidate) at the top of the function, though, or is that
overkill?
+ if (!skip_prefix(candidate, header, &v)) + return 0; + if (*v == ':') + v++; + if (*v++ != ' ') + return 0; + *out_value = v; + return 1; +}