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

	CURRENT_BRANCH=$(git branch | grep '^\* ' | grep -v 'no branch' | sed 's/^* //g')
	SHORT_NAMES=$(echo "$FEATURE_BRANCHES" | sed "s?^$PREFIX??g")
	# 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")
		if [ "$fullname" = "$CURRENT_BRANCH" ]; then
			printf "* "
		else
			printf "  "
		fi
		if [ $FLAGS_verbose -eq 1 ]; then
			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
		else
			printf "%s" "$branch"
		fi
		echo
	done
}

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
}
