#!/bin/sh
##
## "dotest" is my stupid name for my patch-application script, which
## I never got around to renaming after I tested it. We're now on the
## second generation of scripts, still called "dotest".
##
## Update: Ryan Anderson finally shamed me into naming this "applymbox".
##
## You give it a mbox-format collection of emails, and it will try to
## apply them to the kernel using "applypatch"
##
## applymbox [-u] [-k] [-q] (-c .dotest/msg-number | mail_archive) [Signoff_file]"
##
## The patch application may fail in the middle.  In which case:
## (1) look at .dotest/patch and fix it up to apply
## (2) re-run applymbox with -c .dotest/msg-number for the current one.
## Pay a special attention to the commit log message if you do this and
## use a Signoff_file, because applypatch wants to append the sign-off
## message to msg-clean every time it is run.

. git-sh-setup-script || die "Not a git archive"

usage () {
    echo >&2 "applymbox [-u] [-k] [-q] (-c .dotest/<num> | mbox) [signoff]"
    exit 1
}

keep_subject= query_apply= continue= utf8= resume=t
while case "$#" in 0) break ;; esac
do
	case "$1" in
	-u)	utf8=-u ;;
	-k)	keep_subject=-k ;;
	-q)	query_apply=t ;;
	-c)	continue="$2"; resume=f; shift ;;
	-*)	usage ;;
	*)	break ;;
	esac
	shift
done

case "$continue" in
'')
	rm -rf .dotest
	mkdir .dotest
	git-mailsplit "$1" .dotest || exit 1
	shift
esac

files=$(git-diff-cache --cached --name-only HEAD) || exit
if [ "$files" ]; then
   echo "Dirty index: cannot apply patches (dirty: $files)" >&2
   exit 1
fi

case "$query_apply" in
t)	touch .dotest/.query_apply
esac
case "$keep_subject" in
-k)	: >.dotest/.keep_subject
esac

signoff="$1"
set x .dotest/0*
shift
while case "$#" in 0) break;; esac
do
    i="$1" 
    case "$resume,$continue" in
    f,$i)	resume=t;;
    f,*)	shift
		continue;;
    *)
	    git-mailinfo $keep_subject $utf8 \
		.dotest/msg .dotest/patch <$i >.dotest/info || exit 1
	    git-stripspace < .dotest/msg > .dotest/msg-clean
	    ;;
    esac
    while :; # for fixing up and retry
    do
	git-applypatch .dotest/msg-clean .dotest/patch .dotest/info "$signoff"
	case "$?" in
	0 | 2 )
		# 2 is a special exit code from applypatch to indicate that
	    	# the patch wasn't applied, but continue anyway 
		;;
	*)
		ret=$?
		if test -f .dotest/.query_apply
		then
			echo >&2 "* Patch failed."
			echo >&2 "* You could fix it up in your editor and"
			echo >&2 "  retry.  If you want to do so, say yes here"
			echo >&2 "  AFTER fixing .dotest/patch up."
			echo >&2 -n "Retry [y/N]? "
			read yesno
			case "$yesno" in
			[Yy]*)
				continue ;;
		        esac
		fi
		exit $ret
	esac
	break
    done
    shift
done
# return to pristine
rm -fr .dotest
