#!/bin/bash
# reset environment variables that could interfere with normal usage
export GREP_OPTIONS=
# put all utility functions here

# make a temporary file
git_extra_mktemp() {
    mktemp -t "$(basename "$0")".XXX
}

#
# check whether current directory is inside a git repository
#

is_git_repo() {
  git rev-parse --show-toplevel > /dev/null 2>&1
  result=$?
  if test $result != 0; then
    >&2 echo 'Not a git repo!'
    exit $result
  fi
}

is_git_repo

while test $# != 0
do
	case $1 in
		-r|--remote)
			if [[ -n $2 ]]
			then
				REMOTE=$2
				shift
			else			
				REMOTE=origin
			fi
			;;
		*)
			BRANCH=$1
	esac
	shift
done

if [[ -z $BRANCH ]] && [[ -n $REMOTE ]] 
then
	BRANCH=$REMOTE
	REMOTE=origin
fi

test -z $BRANCH && echo "branch required." 1>&2 && exit 1
if [[ -n $REMOTE ]]
then
	git ls-remote --exit-code $REMOTE &>/dev/null
	if [ $? = 0 ]
	then
		git push $REMOTE HEAD:refs/heads/$BRANCH
		git fetch $REMOTE
		git checkout --track -b $BRANCH $REMOTE/$BRANCH
		exit $?
	fi
fi

git checkout -b $BRANCH
