#
# git-flow -- A collection of Git extensions to provide high-level
# repository operations for Vincent Driessen's branching model.
#
# Original blog post presenting this model is found at:
#    http://nvie.com/archives/323
#
# Feel free to contribute to this project at:
#    http://github.com/nvie/gitflow
#
# Copyright (c) 2010 by Vincent Driessen
# Copyright (c) 2010 by Benedikt Böhm
#

usage() {
	echo "usage: git flow init"
}

# Default entry when no SUBACTION is given
cmd_default() {
	echo
	echo "Summary of actions:"

	if ! git rev-parse --git-dir 2>&1 >/dev/null; then
		git init --quiet
		echo "- A new git repository at $PWD was created"
	fi

	if ! git rev-parse --quiet --verify HEAD 2>&1 >/dev/null; then
		touch "$README"
		git add "$README"
		git commit --quiet -m "initial commit"
		if [ "$MASTER_BRANCH" != "master" ]; then
			git branch -m master "$MASTER_BRANCH"
		fi
		echo "- An initial commit was created at branch '$MASTER_BRANCH'"
	fi

	if ! git rev-parse --verify "$MASTER_BRANCH" 2>&1 >/dev/null; then
		die "Cannot find your master branch. Try: git branch -m <mymaster> $MASTER_BRANCH"
	fi

	gitflow_require_clean_working_tree

	if git remote | grep -q "$ORIGIN"; then
		git fetch -q "$ORIGIN"
		gitflow_require_branches_equal "$MASTER_BRANCH" "$ORIGIN/$MASTER_BRANCH"
	fi

	if git rev-parse --verify "$DEVELOP_BRANCH" 2>&1 >/dev/null; then
		gitflow_require_branches_equal "$DEVELOP_BRANCH" "$ORIGIN/$DEVELOP_BRANCH"
	else
		git checkout -q -b "$DEVELOP_BRANCH" "$MASTER_BRANCH"
		echo "- A new branch '$DEVELOP_BRANCH' was created"
		echo "- You are now on branch '$DEVELOP_BRANCH'"
	fi

	if ! git remote | grep -q "$ORIGIN"; then
		if [ "$1" = "" ]; then
			echo "- No remote location was added. Try: git remote add $ORIGIN <url>"
		else
			git remote add "$ORIGIN" "$1"
			echo "- A new remote location '$1' was added"
		fi
	fi

	echo

	if git remote | grep -q "$ORIGIN"; then
		git push "$ORIGIN" "$MASTER_BRANCH" "$DEVELOP_BRANCH"
	fi
}

cmd_help() {
	usage
	exit 0
}
