#!/bin/sh
#
# Rebuild "pu" from topic branches.
#

git-update-index --refresh || exit
case "$(git-diff-index --name-status HEAD)" in
'')	;;
*)	echo 2>&1 "Local modifications exist."
	exit 1;;
esac

case "$1" in
--continue)
	shift
	;;
*)
	git checkout pu &&
	git reset --hard master || exit
esac
ORIG_HEAD=`git rev-parse ORIG_HEAD` || exit
LF='
'

case "$#" in
0)
	# interactive ;-)
	shift
	HH=`cd .git/refs/heads && find -type f |
	sed -e 's/^\.\///' \
	    -e '/^naster$/d' -e '/^master$/d' -e '/^maint$/d' -e '/^pu$/d'`
	while test "$HH"
	do
		I=0
		echo "0: done"
		NHH=
		for H in $HH
		do
			HSHA1=`git-rev-parse --verify $H` || continue
			MB=`git-show-branch --merge-base pu $HSHA1`
			case "$LF$MB$LF" in
			*"$LF$HSHA1$LF"*) continue ;; # already merged.
			esac
			I=$(($I+1))
			echo -n "$I: "
			git-show-branch $H
			NHH="${NHH}$H "
		done
		case "$I" in
		0)
			break ;;
		esac
		HH=$NHH
		echo -n "Merge which ones (0 to finish)? "
		read ans
		case "$ans" in
		'' | 0)
			break ;;
		esac
		I=0
		UNUSE= USE= USED=
		for H in $HH
		do
			I=$(($I+1))
			case " $ans " in
			*' '$I' '*)
				USE="$USE$H "
				USED="$USED,$H"
				;;
			*)
				UNUSE="$UNUSE$H "
				;;
			esac
		done
		USED=`expr "$USED" : ',\(.*\)'`
		git pull -n . $USE || exit
		# git merge -n "Merge $USED" pu $USE || exit
		HH=$UNUSE
	done
	exit
	;;
esac

for H
do
#	(IFS=",$IFS"; git merge -n "Merge $H" pu $H) || exit
	(IFS=",$IFS"; git pull -n . $H) || exit
done

(IFS=",$IFS"; git show-branch master $* pu `git rev-parse --short $ORIG_HEAD`)
