#!/bin/bash
# Gan Shun Lim (ganshun@gmail.com)
# Copyright 2016 Google Inc

# Use local branch name as the default topic unless overridden
GERRIT_TOPIC=`git symbolic-ref -q --short HEAD`

GERRIT_REMOTE=gerrit
GERRIT_PUSH_COMMAND="git push $GERRIT_REMOTE HEAD:refs/for/master"
GERRIT_REVIEWERS_LINE="%"

REVIEWERS=""
CC=""


if [ $# -ne 1 ] && [ $# -ne 3 ] && [ $# -ne 5 ] && [ $# -ne 7 ]
then
	echo "Usage: adt mail [-m reviewer1,reviewer2...] [-cc cc1,cc2...] [-t topic]"
	echo "Other functionalities are not yet supported"
	exit -1
fi

if [ $1 != "mail" ]
then
	echo "Only mail functionality is supported right now. Please do adt mail."
	exit -1
fi

OLDIFS=$IFS
I=2
while [ $I -lt $# ]
do
	if [ ${!I} = "-t" ]
	then
		# Doesn't support multiple topics. not sure what gerrit will do.
		(( I++ ))
		GERRIT_TOPIC=${!I}
		(( I++ ))
	elif [ ${!I} = "-m" ]
	then
		(( I++ ))
		IFS=$IFS","
		for R in ${!I}
		do
			IFS=$OLDIFS
			if [ $GERRIT_REVIEWERS_LINE = "%" ]
			then
				GERRIT_REVIEWERS_LINE="${GERRIT_REVIEWERS_LINE}r=$R"
			else
				GERRIT_REVIEWERS_LINE="${GERRIT_REVIEWERS_LINE},r=$R"
			fi
		done
		(( I++ ))
	elif [ ${!I} = "-cc" ]
	then
		(( I++ ))
		IFS=$IFS","
		for R in ${!I}
		do
			IFS=$OLDIFS
			if [ $GERRIT_REVIEWERS_LINE = "%" ]
			then
				GERRIT_REVIEWERS_LINE="${GERRIT_REVIEWERS_LINE}cc=$R"
			else
				GERRIT_REVIEWERS_LINE="${GERRIT_REVIEWERS_LINE},cc=$R"
			fi
		done
		(( I++ ))
	else
		echo "Unsupported flag ${!I}."
		echo "Usage: adt mail [-m reviewer1,reviewer2...] [-cc cc1,cc2...] [-t topic]"
		exit -1
	fi
done

if [ "$GERRIT_TOPIC" != "" ]
then
	# Append topic
	GERRIT_PUSH_COMMAND="$GERRIT_PUSH_COMMAND/$GERRIT_TOPIC"
fi

if [ $GERRIT_REVIEWERS_LINE != "%" ]
then
	eval "$GERRIT_PUSH_COMMAND$GERRIT_REVIEWERS_LINE"
else
	eval $GERRIT_PUSH_COMMAND
fi

if [ "$?" -ne 0 ]
then
	echo "Error occurred during git push. Please make sure that your remote for gerrit exists, and that GERRIT_REMOTE in this script is pointing to the correct remote."
	exit -1
fi
