#
# 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
#

PREFIX=$(git config --get gitflow.prefix.feature || echo feature/)

usage() {
	echo "usage: git flow feature [list]"
	echo "       git flow feature start <name> [<base>]"
	echo "       git flow feature finish <name|nameprefix> [<base>]"
	echo "       git flow feature publish <name>"
	echo "       git flow feature track <name>"
	echo "       git flow feature diff <name|nameprefix>"
	# TODO
	#echo ""
	#echo "options:"
	#echo "--option    Explanation"
	#echo ""
	#echo "start-only options:"
	#echo "--option    Explanation"
	#echo ""
	#echo "finish-only options:"
	#echo "--rebase    Rebases the feature branch on top of develop, instead of merging"
	#echo "--squash    Squashes all commits of the feature branch into a single commit"
	#echo "            on develop"
	#echo "--push      Push to the origin repo when finished"
}

cmd_default() {
	cmd_list "$@"
}

max() { if [ "$1" -gt "$2" ]; then echo "$1"; else echo "$2"; fi; }

cmd_list() {
	DEFINE_boolean verbose 0 'verbose (more) output' v
	parse_args "$@"

	FEATURE_BRANCHES="$(echo "$LOCAL_BRANCHES" | grep "^$PREFIX")"
	if [ -z "$FEATURE_BRANCHES" ]; then
		warn "No feature branches exist."
		exit 0
	fi

	SHORT_NAMES=$(echo "$FEATURE_BRANCHES" | sed "s?^$PREFIX??g")
	if [ $FLAGS_verbose -eq 0 ]; then
		echo "$SHORT_NAMES"
	else
		# determine column width first
		width=0
		for branch in $SHORT_NAMES; do
			len=$(($(echo "$branch" | wc -c) - 1))
			width=$(max $width $len)
		done
		width=$(($width + 3))

		for branch in $SHORT_NAMES; do
			fullname="$PREFIX$branch"
			base=$(git merge-base "$fullname" "$DEVELOP_BRANCH")
			develop_sha=$(git rev-parse "$DEVELOP_BRANCH")
			branch_sha=$(git rev-parse "$fullname")
			printf "%-${width}s" "$branch"
			if [ "$branch_sha" = "$develop_sha" ]; then
				printf "(no commits yet)"
			elif [ "$base" = "$branch_sha" ]; then
				printf "(is behind develop, may ff)"
			elif [ "$base" = "$develop_sha" ]; then
				printf "(based on latest develop)"
			else
				printf "(may be rebased)"
			fi
			echo
		done
	fi
}

cmd_help() {
	usage
	exit 0
}

resolve_name_by_prefix() {
	# first, check if there is a perfect match
	if has "$LOCAL_BRANCHES" "$PREFIX$1"; then
		echo "$1"
		return 0
	fi

	MATCHES="$(echo "$LOCAL_BRANCHES" | grep "^$PREFIX$1")"
	NUM_MATCHES=$(echo "$MATCHES" | wc -l)
	if [ -z "$MATCHES" ]; then
		# no prefix match, so take it literally
		echo "$1"
	else
		if [ $NUM_MATCHES -eq 1 ]; then
			# sed arg looks a bit weird, but $PREFIX should not contain spaces,
			# so this one is safe
			echo "$MATCHES" | sed "s $PREFIX  g"
		else
			# multiple matches, cannot decide
			warn "Multiple branches match for prefix '$1':"
			for match in $MATCHES; do
				warn "- $match"
			done
			die "Aborting. Use an unambiguous prefix."
		fi
	fi
}

require_name() {
	if [ "$NAME" = "" ]; then
		echo "Missing argument <name>"
		usage
		exit 1
	fi
}

expand_name_arg_prefix() {
	require_name
	NAME=$(resolve_name_by_prefix "$NAME")
	if echo "$NAME" | grep -q "^[ \t\n\r]+$"; then
		exit 1
	fi
	BRANCH=$PREFIX$NAME
}

parse_args() {
	# parse options
	FLAGS "$@" || exit $?
	eval set -- "${FLAGS_ARGV}"

	# read arguments into global variables
	NAME="$1"
	BASE="${2:-$DEVELOP_BRANCH}"
}

cmd_start() {
	DEFINE_boolean fetch 0 'fetch from origin before performing local operation' F
	parse_args "$@"
	require_name

	# sanity checks
	gitflow_require_clean_working_tree
	gitflow_require_branch_absent $BRANCH

	# update the local repo with remote changes, if asked
	if [ $FLAGS_fetch -eq 1 ]; then
		git fetch -q $ORIGIN $DEVELOP_BRANCH
	fi

	gitflow_require_branches_equal $DEVELOP_BRANCH $ORIGIN/$DEVELOP_BRANCH

	# create branch
	git checkout -b $BRANCH $BASE

	echo
	echo "Summary of actions:"
	echo "- A new branch '$BRANCH' was created, based on '$BASE'"
	echo "- You are now on branch '$BRANCH'"
	echo ""
	echo "Now, start committing on your feature. When done, use:"
	echo ""
	echo "     git flow finish feature $NAME"
	echo
}

cmd_finish() {
	DEFINE_boolean fetch 0 'fetch from origin before performing local operation' F
	DEFINE_boolean rebase 0 'rebase instead of merge' r
	DEFINE_boolean squash 0 'squash all commits when rebasing (implies --rebase)' s
	parse_args "$@"
	expand_name_arg_prefix

	# sanity checks
	gitflow_require_branch $BRANCH

	# detect if we're restoring from a merge conflict
	if [ -f "$GIT_DIR/.gitflow/MERGE_BASE" ]; then
		#
		# TODO: detect that we're working on the correct branch here!
		# The user need not necessarily have given the same $NAME twice here
		# (although he/she should).
		# 

		# TODO: gitflow_test_clean_working_tree() should provide an alternative
		# exit code for "unmerged changes in working tree", which we should
		# actually be testing for here
		if gitflow_test_clean_working_tree; then
			FINISH_BASE="$(cat "$GIT_DIR/.gitflow/MERGE_BASE")"

			# Since the working tree is now clean, either the user did a
			# succesfull merge manually, or the merge was cancelled.
			# We detect this using gitflow_is_branch_merged_into()
			if gitflow_is_branch_merged_into $BRANCH $FINISH_BASE; then
				rm -f "$GIT_DIR/.gitflow/MERGE_BASE"
				helper_finish_cleanup
				exit 0
			else
				# If the user cancelled the merge and decided to wait until later,
				# that's fine. But we have to acknowledge this by removing the
				# MERGE_BASE file and continuing normal execution of the finish
				rm -f "$GIT_DIR/.gitflow/MERGE_BASE"
			fi
		else
			echo
			echo "Merge conflicts not resolved yet, use:"
			echo "    git mergetool"
			echo "    git commit"
			echo 
			echo "You can then complete the finish by running it again:"
			echo "    git flow feature finish $NAME"
			echo
			exit 1
		fi
	fi

	# sanity checks
	gitflow_require_clean_working_tree

	# update local repo with remote changes first, if asked
	if [ $FLAGS_fetch -eq 1 ]; then
		git fetch -q $ORIGIN $BRANCH
	fi

	if has $ORIGIN/$BRANCH $REMOTE_BRANCHES; then
		gitflow_require_branches_equal $BRANCH $ORIGIN/$BRANCH
	fi
	if [ "$BASE" = "$DEVELOP_BRANCH" ]; then
		gitflow_require_branches_equal $DEVELOP_BRANCH $ORIGIN/$DEVELOP_BRANCH
	fi

	# merge into BASE
	git checkout $BASE
	if [ "$(git rev-list -n2 $BASE..$BRANCH | wc -l)" = "1" ]; then
		git merge --ff $BRANCH
	else
		git merge --no-ff $BRANCH
	fi

	if [ $? -ne 0 ]; then
		# oops.. we have a merge conflict!
		# write the given $BASE to a temporary file (we need it later)
		mkdir -p "$GIT_DIR/.gitflow"
		echo "$BASE" > "$GIT_DIR/.gitflow/MERGE_BASE"
		echo
		echo "There were merge conflicts. To resolve the merge conflict manually, use:"
		echo "    git mergetool"
		echo "    git commit"
		echo 
		echo "You can then complete the finish by running it again:"
		echo "    git flow feature finish $NAME"
		echo
		exit 1
	fi

	# when no merge conflict is detected, just clean up the feature branch
	helper_finish_cleanup
}

helper_finish_cleanup() {
	# sanity checks
	gitflow_require_branch $BRANCH
	gitflow_require_clean_working_tree

	# delete branch
	git push $ORIGIN :refs/heads/$BRANCH
	git branch -d $BRANCH

	echo
	echo "Summary of actions:"
	echo "- The feature branch '$BRANCH' was merged into '$BASE'"
	#echo "- Merge conflicts were resolved"		# TODO: Add this line when it's supported
	echo "- Feature branch '$BRANCH' has been removed"
	echo "- You are now on branch '$BASE'"
	echo
}

cmd_publish() {
	parse_args "$@"
	expand_name_arg_prefix

	# sanity checks
	gitflow_require_clean_working_tree
	gitflow_require_branch $BRANCH
	git fetch -q $ORIGIN
	gitflow_require_branch_absent $ORIGIN/$BRANCH

	# create remote branch
	git push $ORIGIN $BRANCH:refs/heads/$BRANCH
	git fetch -q $ORIGIN

	# configure remote tracking
	git config branch.$BRANCH.remote $ORIGIN
	git config branch.$BRANCH.merge refs/heads/$BRANCH
	git checkout $BRANCH

	echo
	echo "Summary of actions:"
	echo "- A new remote branch '$BRANCH' was created"
	echo "- The local branch '$BRANCH' was configured to track the remote branch"
	echo "- You are now on branch '$BRANCH'"
	echo
}

cmd_track() {
	parse_args "$@"
	require_name

	# sanity checks
	gitflow_require_clean_working_tree
	gitflow_require_branch_absent $BRANCH
	git fetch -q $ORIGIN
	gitflow_require_branch $ORIGIN/$BRANCH

	# create tracking branch
	git checkout -b $BRANCH $ORIGIN/$BRANCH

	echo
	echo "Summary of actions:"
	echo "- A new remote tracking branch '$BRANCH' was created"
	echo "- You are now on branch '$BRANCH'"
	echo
}

cmd_diff() {
	parse_args "$@"
	expand_name_arg_prefix 

	# TODO: if this feature has been based on a non-develop branch, we really
	# should not be comparing to $DEVELOP. How to deal with this?
	git diff $DEVELOP_BRANCH..$BRANCH
}
