#!/bin/sh

FROM_NAME='Patrick McDermott'
FROM_EMAIL='patrick.mcdermott@libiquity.com'
SIG="$(cat <<-EOF
	Patrick McDermott, CEO
	Libiquity
	Putting customers in control of high-quality technologies
	http://www.libiquity.com/
	EOF
	)"
KEY='2250 31F0 47FF E516 63ED  516F 1A45 9ECD E4D6 04BE'
TO_EMAIL='proteanos-dev@lists.proteanos.com'

package="${1}"
version="${2}"
package_name="${3}"
srcdir="${0%/scripts/announce-release.sh}"

heading()
{
	local name="${1}"
	shift 1

	printf '%s\n' "${name}"
	printf '%s\n' "${name}" | sed 's/./=/g'
}

about="$(sed -n '
	H;
	${
		g;
		s/^\n*[^\n][^\n]*\n[=-][=-]*\n\n*//;
		s/\n*[^\n][^\n]*\n[=-][=-]*\n.*$//;
		p;
	};
	' "${srcdir}/README")"
news="$(sed -n '
	H;
	${
		g;
		s/^\n*[^\n][^\n]*\n[=-][=-]*\n\n*//;
		s/^Released: [^\n]*\n\n*//;
		s/\n*[^\n][^\n]*\n[=-][=-]*\n.*$//;
		p;
	};
	' "${srcdir}/NEWS")"
old_version="$(sed -n "/^${package_name} version /p;" "${srcdir}/NEWS" | \
	sed -n "2{ s/^${package_name} version //p; };")"
old_tag="$(git tag --sort=creatordate | tail -n 2 | head -n 1)"

export GIT_DIR="${srcdir}/.git"

shortlog="$(git shortlog "${old_tag}..HEAD" | \
	sed '/^..*$/s/^//')"
if [ $(printf '%s\n' "${shortlog}" | wc -l) -gt 100 ]; then
	shortlog="$(git shortlog -s "${old_tag}..HEAD"; cat <<-EOF

	Commit descriptions suppressed for brevity.  To see a log summary with
	descriptions, run:

	    \$ git shortlog ${old_tag}..${package}/${version}
	EOF
	)"
fi
diffstat="$(git diff --stat=72 --color=never --find-renames=50% \
	"${old_tag}..HEAD")"
if [ $(printf '%s\n' "${diffstat}" | wc -l) -gt 50 ]; then
	diffstat="$(printf '%s\n' "${diffstat}" | tail -n 1; cat <<-EOF

	Difference statistics truncated for brevity.  To see full statistics,
	run:

	    \$ git diff --stat --find-renames=50% \\
	    > ${old_tag}..${package}/${version}
	EOF
	)"
fi

message="$({ cat | sed 's/=/=3D/g; s/ $/=20/; s/\t$/=09/;'; } <<-EOF
	Content-Type: text/plain; charset=UTF-8
	Content-Transfer-Encoding: quoted-printable

	$(heading 'About')

	${about}

	$(heading 'Downloading')

	Source archives are available from the files site by HTTP or FTP:

	    http://files.proteanos.com/pub/${package}/${version}/
	    ftp://files.proteanos.com/pub/${package}/${version}/

	Here are the MD5 checksums:

	$(sed 's/^/    /' MD5SUMS)

	Here are the SHA-256 checksums:

	$(sed 's/^/    /' SHA256SUMS)

	The sources are maintained in a Git repository:

	    http://git.proteanos.com/${package}/${package}.git/
	    git://git.proteanos.com/${package}/${package}.git/

	This release is marked by the "${package}/${version}" tag.

	$(heading "NEWS for Version ${version}")

	${news}

	$(heading "Shortlog of Changes Since Version ${old_version}")

	${shortlog}

	$(heading "Diffstat of Changes Since Version ${old_version}")

	${diffstat}

	-- 
	${SIG}
	EOF
	)"

{ sed 's/$/\r/' | /usr/sbin/sendmail -f "${FROM_EMAIL}" \
	"${TO_EMAIL}"; } <<-EOF
	Date: $(LC_ALL='POSIX' date '+%a, %d %b %Y %H:%M:%S %z')
	From: ${FROM_NAME} <${FROM_EMAIL}>
	To: ${TO_EMAIL}
	Subject: ${package_name} ${version} released
	Message-ID: $(LC_ALL='POSIX' date \
		'+%Y%m%d%H%M%S').${FROM_EMAIL}
	MIME-Version: 1.0
	Content-Type: multipart/signed; micalg=pgp-sha256; boundary="=-=-=";
	 protocol="application/pgp-signature"

	--=-=-=
	${message}

	--=-=-=
	Content-Type: application/pgp-signature
	Content-Description: OpenPGP digital signature

	$(printf '%s\n' "${message}" | sed 's/$/\r/' | \
		gpg --local-user "${KEY}" --armor --output - \
		--digest-algo SHA256 --detach-sign)

	--=-=-=--
	EOF