| #!/bin/sh |
| # Announcement message skelton |
| # |
| MASTER=master |
| |
| tmpbase=/var/tmp/git-announce.$$ |
| trap 'rm -f $tmpbase.*' 0 |
| branch=${1?branch} |
| previous=${2?previous} |
| commit=${3-"$1"} |
| |
| relname=$(git describe "$commit") && |
| vername=$(expr "$relname" : 'v\(.*\)') || exit $? |
| |
| git rev-parse --verify "$previous" >/dev/null || exit $? |
| |
| case "$branch" in |
| maint) |
| kind="The latest maintenance release" ;; |
| mainto/* | maint-[0-9]*) |
| kind="A maintenance release" ;; |
| $MASTER) |
| kind="The latest feature release" ;; |
| esac |
| |
| case "$vername" in |
| *-rc[0-9]*) |
| rpmroot=testing |
| case "$vername" in |
| *-rc0) |
| kind="An early preview release" |
| ;; |
| *) |
| kind="A release candidate" |
| ;; |
| esac |
| for_testing=" for testing" |
| ;; |
| *) |
| for_testing= |
| rpmroot='RPMS/$arch' |
| ;; |
| 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" |
| comm -12 "$tmpbase.prev" "$tmpbase.this" >"$tmpbase.old" |
| comm -13 "$tmpbase.prev" "$tmpbase.this" >"$tmpbase.new" |
| |
| all=$(wc -l <"$tmpbase.this") |
| new=$(wc -l <"$tmpbase.new") |
| cnt=$(git rev-list --no-merges "$previous..$commit" | wc -l) |
| |
| cat <<EOF |
| To: git@vger.kernel.org |
| Cc: Linux Kernel <linux-kernel@vger.kernel.org>, |
| git-packagers@googlegroups.com |
| Bcc: lwn@lwn.net |
| Subject: [ANNOUNCE] Git $relname |
| |
| EOF |
| |
| ( |
| echo "$kind Git $relname is now available$for_testing at the usual places." |
| if test "$branch" = $MASTER |
| then |
| cat <<-EOF |
| It is comprised of $cnt non-merge commits since $previous, |
| contributed by $all people, $new of which are new faces. |
| EOF |
| fi |
| ) | fmt -68 |
| |
| cat <<EOF |
| |
| The tarballs are found at: |
| |
| https://www.kernel.org/pub/software/scm/git/${for_testing:+testing/} |
| |
| EOF |
| |
| ( |
| cat <<-EOF |
| The following public repositories all have a copy of |
| the '$relname' tag and |
| EOF |
| case "$branch" in |
| maint-* | mainto/*) |
| echo "some of them have" |
| ;; |
| esac |
| echo "the '$branch' branch that the tag points at:" |
| ) | fmt -68 |
| |
| cat <<\EOF |
| |
| url = https://kernel.googlesource.com/pub/scm/git/git |
| url = git://repo.or.cz/alt-git.git |
| url = https://github.com/gitster/git |
| EOF |
| |
| fmt_people () { |
| # Yes, I don't perform well without 2 or more people. |
| # Sue me. The heading says "are as follows" anyway ;-). |
| sed -e '${ |
| s/^/and / |
| s/,$/./ |
| }' "$1" | |
| fmt -66 | |
| sed -e 's/^/ /' |
| |
| } |
| |
| if test "$branch" = $MASTER |
| then |
| cat <<-EOF |
| |
| New contributors whose contributions weren't in $previous are as follows. |
| Welcome to the Git development community! |
| |
| $(fmt_people "$tmpbase.new") |
| |
| Returning contributors who helped this release are as follows. |
| Thanks for your continued support. |
| |
| $(fmt_people "$tmpbase.old") |
| EOF |
| fi |
| |
| cat <<EOF |
| |
| ---------------------------------------------------------------- |
| |
| EOF |
| |
| case "$(git ls-tree ${branch} RelNotes)" in |
| 120000' '*) |
| RelNotes=$(git cat-file blob "${branch}:RelNotes") |
| ;; |
| *) |
| RelNotes=RelNotes |
| ;; |
| esac && |
| git cat-file blob "${branch}:$RelNotes" | |
| case "$relname" in |
| *-*) |
| sed -e 's/^Git .* Release Notes$/& (draft)/' \ |
| -e 's/^=============/&========/' |
| ;; |
| *) |
| cat |
| ;; |
| esac |
| |
| cat <<EOF |
| |
| ---------------------------------------------------------------- |
| |
| Changes since $previous are as follows: |
| |
| EOF |
| |
| git log --no-merges "$previous".."$branch" | |
| git shortlog |