#!/bin/sh
# Merge later...

: ${MASTER:=master}

: "${target:=maint}" "${here:=$MASTER}"

# Read from RelNotes and find mergeable topics
search_topics () {
	tmp=/tmp/ML.$$
	trap 'rm -f "$tmp"' 0
	git rev-list --parents --first-parent $target..$here >"$tmp"

	x40='[0-9a-f]'
	x40="$x40$x40$x40$x40$x40"
	x40="$x40$x40$x40$x40$x40$x40$x40$x40"
	sed -n -e 's/^   (merge \([0-9a-f]*\) \([^ ]*\) later to maint.*/\1 \2/p' |
	while read sha1 topic
	do
		if ! full_sha1=$(git rev-parse --verify "$sha1")
		then
			echo >&2 "Not found: $sha1 $topic"
			continue
		fi

		comment=
		if ! git show-ref --quiet --verify "refs/heads/$topic"
		then
			comment="$topic gone"
			tip=$full_sha1 topic=$sha1
		elif tip=$(git rev-parse --verify "refs/heads/$topic") &&
		     test "$tip" != "$full_sha1"
		then
			echo >&2 "$topic # $tip moved from $sha1"
			continue
		fi

		ago= lg=-1
		fp=$(
		    sed -ne "s/^\($x40\) $x40 $tip"'$/\1/p' "$tmp"
		) &&
		test -n "$fp" &&
		ago=$(
		    git show -s --format='%ad' --date=short $fp
		) &&
		lg=$(git log --oneline $target..$tip | wc -l)

		if test $lg = -1
		then
			echo "# $topic not yet merged to $here"
		elif test $lg != 0
		then
			echo "$topic # $lg${ago+ ($ago)}${comment+ $comment}"
		else
			echo "# $topic already merged${ago+ ($ago)}${comment+ $comment}"
		fi
	done
}

while	case "$#,$1" in
	0,*)
		break ;;
	*,-t)
		target=${2?"-t target???"}
		git show-ref --quiet --verify "refs/heads/$target" || {
			echo >&2 "$target: no such branch"
			exit 1
		}
		shift ;;
	*)
		break ;;
	esac
do
	shift
done

case $# in
0)
	search_topics
	exit $?
	;;
esac

for topic
do
	sha1=$(git rev-parse --short $topic)
	echo "   (merge $sha1 $topic later to maint)."
done

