Junio C Hamano [off-list ref] writes:
Jeff King [off-list ref] writes:
quoted
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@gitster.dls.corp.google.com/ (local)
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"