Junio C Hamano <gitster@xxxxxxxxx> writes: > Jeff King <peff@xxxxxxxx> writes: > >> Now that shortlog supports reading from trailers, it can be useful to >> combine counts from multiple trailers, or between trailers and authors. >> This can be done manually by post-processing the output from multiple >> runs, but it's non-trivial to make sure that each name/commit pair is >> counted only once. >> >> This patch teaches shortlog to accept multiple --group options on the >> command line, and pull data from all of them. That makes it possible to >> run: >> >> git shortlog -ns --group=author --group=trailer:co-authored-by >> >> to get a shortlog that counts authors and co-authors equally. > > As I recently had a chance to revisit an old thread back in v2.3.3 > days, I recalled that I wished something like this was available, > > https://lore.kernel.org/git/xmqqd24g6uf1.fsf@xxxxxxxxxxxxxxxxxxxxxxxxxxx/ > > where I wished to have a way to count non-author contributions > easily to list them. > > I am not comfortable with the idea of changing the release > announcement script immediately before the new release, so I'll do > v2.30.0 with the old "authorship only" script, but I'll play with > the new shortlog feature plus ideas from the old thread to see if we > can give more credit to non author contributors. But now it is a good time to do so, as it is not immediately before a new release. Here is what I am planning to use for the next release due in mid March. We list those who had contribution in the part of the history before the last release and in the part of the history since the last release, and run "comm" on these two sets to derive "new folks" vs "continued supporters". The list of contributors were only counting the commit authors in the previous announcement, but with the "shortlog --group" feature, we can give folks credit for all kinds of *-by roles. diff --git a/Announce b/Announce index 491516b..d6ec20c 100755 --- a/Announce +++ b/Announce @@ -44,8 +44,22 @@ esac vername=$(echo "$vername" | tr "-" ".") -git log --use-mailmap --format='%aN,' "$previous" | sort -u >"$tmpbase.prev" -git log --use-mailmap --format='%aN,' "$previous..$commit" | sort -u >"$tmpbase.this" +people () { + git shortlog -s --no-merges \ + --group=author \ + --group=trailer:co-authored-by \ + --group=trailer:reviewed-by \ + --group=trailer:mentored-by \ + --group=trailer:helped-by \ + --group=trailer:reported-by \ + "$@" | + sed -e 's/^[ 0-9]*[ ]//' -e 's/$/,/' | + sort -u +} + +people "$previous" >"$tmpbase.prev" +people "$previous..$commit" >"$tmpbase.this" + comm -12 "$tmpbase.prev" "$tmpbase.this" >"$tmpbase.old" comm -13 "$tmpbase.prev" "$tmpbase.this" >"$tmpbase.new"