#!/bin/sh
#
# Copyright (c) 2005 Linus Torvalds
# Copyright (c) 2006 Junio C Hamano

USAGE='[-a | --interactive] [-s] [-v] [--no-verify] [-m <message> | -F <logfile> | (-C|-c) <commit> | --amend] [-u] [-e] [--author <author>] [--template <file>] [[-i | -o] <path>...]'
SUBDIRECTORY_OK=Yes
OPTIONS_SPEC=
. git-sh-setup
require_work_tree

git rev-parse --verify HEAD >/dev/null 2>&1 || initial_commit=t

case "$0" in
*status)
	status_only=t
	;;
*commit)
	status_only=
	;;
esac

refuse_partial () {
	echo >&2 "$1"
	echo >&2 "You might have meant to say 'git commit -i paths...', perhaps?"
	exit 1
}

TMP_INDEX=
THIS_INDEX="${GIT_INDEX_FILE:-$GIT_DIR/index}"
NEXT_INDEX="$GIT_DIR/next-index$$"
rm -f "$NEXT_INDEX"
save_index () {
	cp -p "$THIS_INDEX" "$NEXT_INDEX"
}

run_status () {
	# If TMP_INDEX is defined, that means we are doing
	# "--only" partial commit, and that index file is used
	# to build the tree for the commit.  Otherwise, if
	# NEXT_INDEX exists, that is the index file used to
	# make the commit.  Otherwise we are using as-is commit
	# so the regular index file is what we use to compare.
	if test '' != "$TMP_INDEX"
	then
		GIT_INDEX_FILE="$TMP_INDEX"
		export GIT_INDEX_FILE
	elif test -f "$NEXT_INDEX"
	then
		GIT_INDEX_FILE="$NEXT_INDEX"
		export GIT_INDEX_FILE
	fi

	if test "$status_only" = "t" || test "$use_status_color" = "t"; then
		color=
	else
		color=--nocolor
	fi
	git runstatus ${color} \
		${verbose:+--verbose} \
		${amend:+--amend} \
		${untracked_files:+--untracked}
}

trap '
	test -z "$TMP_INDEX" || {
		test -f "$TMP_INDEX" && rm -f "$TMP_INDEX"
	}
	rm -f "$NEXT_INDEX"
' 0

################################################################
# Command line argument parsing and sanity checking

all=
also=
allow_empty=f
interactive=
only=
logfile=
use_commit=
amend=
edit_flag=
no_edit=
log_given=
log_message=
verify=t
quiet=
verbose=
signoff=
force_author=
only_include_assumed=
untracked_files=
templatefile="$(git config commit.template)"
while test $# != 0
do
	case "$1" in
	-F|--F|-f|--f|--fi|--fil|--file)
		case "$#" in 1) usage ;; esac
		shift
		no_edit=t
		log_given=t$log_given
		logfile="$1"
		;;
	-F*|-f*)
		no_edit=t
		log_given=t$log_given
		logfile="${1#-[Ff]}"
		;;
	--F=*|--f=*|--fi=*|--fil=*|--file=*)
		no_edit=t
		log_given=t$log_given
		logfile="${1#*=}"
		;;
	-a|--a|--al|--all)
		all=t
		;;
	--allo|--allow|--allow-|--allow-e|--allow-em|--allow-emp|\
	--allow-empt|--allow-empty)
		allow_empty=t
		;;
	--au=*|--aut=*|--auth=*|--autho=*|--author=*)
		force_author="${1#*=}"
		;;
	--au|--aut|--auth|--autho|--author)
		case "$#" in 1) usage ;; esac
		shift
		force_author="$1"
		;;
	-e|--e|--ed|--edi|--edit)
		edit_flag=t
		;;
	-i|--i|--in|--inc|--incl|--inclu|--includ|--include)
		also=t
		;;
	--int|--inte|--inter|--intera|--interac|--interact|--interacti|\
	--interactiv|--interactive)
		interactive=t
		;;
	-o|--o|--on|--onl|--only)
		only=t
		;;
	-m|--m|--me|--mes|--mess|--messa|--messag|--message)
		case "$#" in 1) usage ;; esac
		shift
		log_given=m$log_given
		log_message="${log_message:+${log_message}

}$1"
		no_edit=t
		;;
	-m*)
		log_given=m$log_given
		log_message="${log_message:+${log_message}

}${1#-m}"
		no_edit=t
		;;
	--m=*|--me=*|--mes=*|--mess=*|--messa=*|--messag=*|--message=*)
		log_given=m$log_given
		log_message="${log_message:+${log_message}

}${1#*=}"
		no_edit=t
		;;
	-n|--n|--no|--no-|--no-v|--no-ve|--no-ver|--no-veri|--no-verif|\
	--no-verify)
		verify=
		;;
	--a|--am|--ame|--amen|--amend)
		amend=t
		use_commit=HEAD
		;;
	-c)
		case "$#" in 1) usage ;; esac
		shift
		log_given=t$log_given
		use_commit="$1"
		no_edit=
		;;
	--ree=*|--reed=*|--reedi=*|--reedit=*|--reedit-=*|--reedit-m=*|\
	--reedit-me=*|--reedit-mes=*|--reedit-mess=*|--reedit-messa=*|\
	--reedit-messag=*|--reedit-message=*)
		log_given=t$log_given
		use_commit="${1#*=}"
		no_edit=
		;;
	--ree|--reed|--reedi|--reedit|--reedit-|--reedit-m|--reedit-me|\
	--reedit-mes|--reedit-mess|--reedit-messa|--reedit-messag|\
	--reedit-message)
		case "$#" in 1) usage ;; esac
		shift
		log_given=t$log_given
		use_commit="$1"
		no_edit=
		;;
	-C)
		case "$#" in 1) usage ;; esac
		shift
		log_given=t$log_given
		use_commit="$1"
		no_edit=t
		;;
	--reu=*|--reus=*|--reuse=*|--reuse-=*|--reuse-m=*|--reuse-me=*|\
	--reuse-mes=*|--reuse-mess=*|--reuse-messa=*|--reuse-messag=*|\
	--reuse-message=*)
		log_given=t$log_given
		use_commit="${1#*=}"
		no_edit=t
		;;
	--reu|--reus|--reuse|--reuse-|--reuse-m|--reuse-me|--reuse-mes|\
	--reuse-mess|--reuse-messa|--reuse-messag|--reuse-message)
		case "$#" in 1) usage ;; esac
		shift
		log_given=t$log_given
		use_commit="$1"
		no_edit=t
		;;
	-s|--s|--si|--sig|--sign|--signo|--signof|--signoff)
		signoff=t
		;;
	-t|--t|--te|--tem|--temp|--templ|--templa|--templat|--template)
		case "$#" in 1) usage ;; esac
		shift
		templatefile="$1"
		no_edit=
		;;
	-q|--q|--qu|--qui|--quie|--quiet)
		quiet=t
		;;
	-v|--v|--ve|--ver|--verb|--verbo|--verbos|--verbose)
		verbose=t
		;;
	-u|--u|--un|--unt|--untr|--untra|--untrac|--untrack|--untracke|\
	--untracked|--untracked-|--untracked-f|--untracked-fi|--untracked-fil|\
	--untracked-file|--untracked-files)
		untracked_files=t
		;;
	--)
		shift
		break
		;;
	-*)
		usage
		;;
	*)
		break
		;;
	esac
	shift
done
case "$edit_flag" in t) no_edit= ;; esac

################################################################
# Sanity check options

case "$amend,$initial_commit" in
t,t)
	die "You do not have anything to amend." ;;
t,)
	if [ -f "$GIT_DIR/MERGE_HEAD" ]; then
		die "You are in the middle of a merge -- cannot amend."
	fi ;;
esac

case "$log_given" in
tt*)
	die "Only one of -c/-C/-F can be used." ;;
*tm*|*mt*)
	die "Option -m cannot be combined with -c/-C/-F." ;;
esac

case "$#,$also,$only,$amend" in
*,t,t,*)
	die "Only one of --include/--only can be used." ;;
0,t,,* | 0,,t,)
	die "No paths with --include/--only does not make sense." ;;
0,,t,t)
	only_include_assumed="# Clever... amending the last one with dirty index." ;;
0,,,*)
	;;
*,,,*)
	only_include_assumed="# Explicit paths specified without -i or -o; assuming --only paths..."
	also=
	;;
esac
unset only
case "$all,$interactive,$also,$#" in
*t,*t,*)
	die "Cannot use -a, --interactive or -i at the same time." ;;
t,,,[1-9]*)
	die "Paths with -a does not make sense." ;;
,t,,[1-9]*)
	die "Paths with --interactive does not make sense." ;;
,,t,0)
	die "No paths with -i does not make sense." ;;
esac

if test ! -z "$templatefile" && test -z "$log_given"
then
	if test ! -f "$templatefile"
	then
		die "Commit template file does not exist."
	fi
fi

################################################################
# Prepare index to have a tree to be committed

case "$all,$also" in
t,)
	if test ! -f "$THIS_INDEX"
	then
		die 'nothing to commit (use "git add file1 file2" to include for commit)'
	fi
	save_index &&
	(
		cd_to_toplevel &&
		GIT_INDEX_FILE="$NEXT_INDEX" &&
		export GIT_INDEX_FILE &&
		git diff-files --name-only -z |
		git update-index --remove -z --stdin
	) || exit
	;;
,t)
	save_index &&
	git ls-files --error-unmatch -- "$@" >/dev/null || exit

	git diff-files --name-only -z -- "$@"  |
	(
		cd_to_toplevel &&
		GIT_INDEX_FILE="$NEXT_INDEX" &&
		export GIT_INDEX_FILE &&
		git update-index --remove -z --stdin
	) || exit
	;;
,)
	if test "$interactive" = t; then
		git add --interactive || exit
	fi
	case "$#" in
	0)
		;; # commit as-is
	*)
		if test -f "$GIT_DIR/MERGE_HEAD"
		then
			refuse_partial "Cannot do a partial commit during a merge."
		fi

		TMP_INDEX="$GIT_DIR/tmp-index$$"
		W=
		test -z "$initial_commit" && W=--with-tree=HEAD
		commit_only=$(git ls-files --error-unmatch $W -- "$@") || exit

		# Build a temporary index and update the real index
		# the same way.
		if test -z "$initial_commit"
		then
			GIT_INDEX_FILE="$THIS_INDEX" \
			git read-tree --index-output="$TMP_INDEX" -i -m HEAD
		else
			rm -f "$TMP_INDEX"
		fi || exit

		printf '%s\n' "$commit_only" |
		GIT_INDEX_FILE="$TMP_INDEX" \
		git update-index --add --remove --stdin &&

		save_index &&
		printf '%s\n' "$commit_only" |
		(
			GIT_INDEX_FILE="$NEXT_INDEX"
			export GIT_INDEX_FILE
			git update-index --add --remove --stdin
		) || exit
		;;
	esac
	;;
esac

################################################################
# If we do as-is commit, the index file will be THIS_INDEX,
# otherwise NEXT_INDEX after we make this commit.  We leave
# the index as is if we abort.

if test -f "$NEXT_INDEX"
then
	USE_INDEX="$NEXT_INDEX"
else
	USE_INDEX="$THIS_INDEX"
fi

case "$status_only" in
t)
	# This will silently fail in a read-only repository, which is
	# what we want.
	GIT_INDEX_FILE="$USE_INDEX" git update-index -q --unmerged --refresh
	run_status
	exit $?
	;;
'')
	GIT_INDEX_FILE="$USE_INDEX" git update-index -q --refresh || exit
	;;
esac

################################################################
# Grab commit message, write out tree and make commit.

if test t = "$verify" && test -x "$GIT_DIR"/hooks/pre-commit
then
    GIT_INDEX_FILE="${TMP_INDEX:-${USE_INDEX}}" "$GIT_DIR"/hooks/pre-commit \
    || exit
fi

if test "$log_message" != ''
then
	printf '%s\n' "$log_message"
elif test "$logfile" != ""
then
	if test "$logfile" = -
	then
		test -t 0 &&
		echo >&2 "(reading log message from standard input)"
		cat
	else
		cat <"$logfile"
	fi
elif test "$use_commit" != ""
then
	encoding=$(git config i18n.commitencoding || echo UTF-8)
	git show -s --pretty=raw --encoding="$encoding" "$use_commit" |
	sed -e '1,/^$/d' -e 's/^    //'
elif test -f "$GIT_DIR/MERGE_MSG"
then
	cat "$GIT_DIR/MERGE_MSG"
elif test -f "$GIT_DIR/SQUASH_MSG"
then
	cat "$GIT_DIR/SQUASH_MSG"
elif test "$templatefile" != ""
then
	cat "$templatefile"
fi | git stripspace >"$GIT_DIR"/COMMIT_EDITMSG

case "$signoff" in
t)
	sign=$(git var GIT_COMMITTER_IDENT | sed -e '
		s/>.*/>/
		s/^/Signed-off-by: /
		')
	blank_before_signoff=
	tail -n 1 "$GIT_DIR"/COMMIT_EDITMSG |
	grep 'Signed-off-by:' >/dev/null || blank_before_signoff='
'
	tail -n 1 "$GIT_DIR"/COMMIT_EDITMSG |
	grep "$sign"$ >/dev/null ||
	printf '%s%s\n' "$blank_before_signoff" "$sign" \
		>>"$GIT_DIR"/COMMIT_EDITMSG
	;;
esac

if test -f "$GIT_DIR/MERGE_HEAD" && test -z "$no_edit"; then
	echo "#"
	echo "# It looks like you may be committing a MERGE."
	echo "# If this is not correct, please remove the file"
	printf '%s\n' "#	$GIT_DIR/MERGE_HEAD"
	echo "# and try again"
	echo "#"
fi >>"$GIT_DIR"/COMMIT_EDITMSG

# Author
if test '' != "$use_commit"
then
	eval "$(get_author_ident_from_commit "$use_commit")"
	export GIT_AUTHOR_NAME GIT_AUTHOR_EMAIL GIT_AUTHOR_DATE
fi
if test '' != "$force_author"
then
	GIT_AUTHOR_NAME=$(expr "z$force_author" : 'z\(.*[^ ]\) *<.*') &&
	GIT_AUTHOR_EMAIL=$(expr "z$force_author" : '.*\(<.*\)') &&
	test '' != "$GIT_AUTHOR_NAME" &&
	test '' != "$GIT_AUTHOR_EMAIL" ||
	die "malformed --author parameter"
	export GIT_AUTHOR_NAME GIT_AUTHOR_EMAIL
fi

PARENTS="-p HEAD"
if test -z "$initial_commit"
then
	rloga='commit'
	if [ -f "$GIT_DIR/MERGE_HEAD" ]; then
		rloga='commit (merge)'
		PARENTS="-p HEAD "$(sed -e 's/^/-p /' "$GIT_DIR/MERGE_HEAD")
	elif test -n "$amend"; then
		rloga='commit (amend)'
		PARENTS=$(git cat-file commit HEAD |
			sed -n -e '/^$/q' -e 's/^parent /-p /p')
	fi
	current="$(git rev-parse --verify HEAD)"
else
	if [ -z "$(git ls-files)" ]; then
		echo >&2 'nothing to commit (use "git add file1 file2" to include for commit)'
		exit 1
	fi
	PARENTS=""
	rloga='commit (initial)'
	current=''
fi
set_reflog_action "$rloga"

if test -z "$no_edit"
then
	{
		echo ""
		echo "# Please enter the commit message for your changes."
		echo "# (Comment lines starting with '#' will not be included)"
		test -z "$only_include_assumed" || echo "$only_include_assumed"
		run_status
	} >>"$GIT_DIR"/COMMIT_EDITMSG
else
	# we need to check if there is anything to commit
	run_status >/dev/null
fi
case "$allow_empty,$?,$PARENTS" in
t,* | ?,0,* | ?,*,-p' '?*-p' '?*)
	# an explicit --allow-empty, or a merge commit can record the
	# same tree as its parent.  Otherwise having commitable paths
	# is required.
	;;
*)
	rm -f "$GIT_DIR/COMMIT_EDITMSG" "$GIT_DIR/SQUASH_MSG"
	use_status_color=t
	run_status
	exit 1
esac

case "$no_edit" in
'')
	git var GIT_AUTHOR_IDENT > /dev/null  || die
	git var GIT_COMMITTER_IDENT > /dev/null  || die
	git_editor "$GIT_DIR/COMMIT_EDITMSG"
	;;
esac

case "$verify" in
t)
	if test -x "$GIT_DIR"/hooks/commit-msg
	then
		"$GIT_DIR"/hooks/commit-msg "$GIT_DIR"/COMMIT_EDITMSG || exit
	fi
esac

if test -z "$no_edit"
then
    sed -e '
        /^diff --git a\/.*/{
	    s///
	    q
	}
	/^#/d
    ' "$GIT_DIR"/COMMIT_EDITMSG
else
    cat "$GIT_DIR"/COMMIT_EDITMSG
fi |
git stripspace >"$GIT_DIR"/COMMIT_MSG

# Test whether the commit message has any content we didn't supply.
have_commitmsg=
grep -v -i '^Signed-off-by' "$GIT_DIR"/COMMIT_MSG |
	git stripspace > "$GIT_DIR"/COMMIT_BAREMSG

# Is the commit message totally empty?
if test -s "$GIT_DIR"/COMMIT_BAREMSG
then
	if test "$templatefile" != ""
	then
		# Test whether this is just the unaltered template.
		if cnt=$(sed -e '/^#/d' < "$templatefile" |
			git stripspace |
			diff "$GIT_DIR"/COMMIT_BAREMSG - |
			wc -l) &&
		   test 0 -lt $cnt
		then
			have_commitmsg=t
		fi
	else
		# No template, so the content in the commit message must
		# have come from the user.
		have_commitmsg=t
	fi
fi

rm -f "$GIT_DIR"/COMMIT_BAREMSG

if test "$have_commitmsg" = "t"
then
	if test -z "$TMP_INDEX"
	then
		tree=$(GIT_INDEX_FILE="$USE_INDEX" git write-tree)
	else
		tree=$(GIT_INDEX_FILE="$TMP_INDEX" git write-tree) &&
		rm -f "$TMP_INDEX"
	fi &&
	commit=$(git commit-tree $tree $PARENTS <"$GIT_DIR/COMMIT_MSG") &&
	rlogm=$(sed -e 1q "$GIT_DIR"/COMMIT_MSG) &&
	git update-ref -m "$GIT_REFLOG_ACTION: $rlogm" HEAD $commit "$current" &&
	rm -f -- "$GIT_DIR/MERGE_HEAD" "$GIT_DIR/MERGE_MSG" &&
	if test -f "$NEXT_INDEX"
	then
		mv "$NEXT_INDEX" "$THIS_INDEX"
	else
		: ;# happy
	fi
else
	echo >&2 "* no commit message?  aborting commit."
	false
fi
ret="$?"
rm -f "$GIT_DIR/COMMIT_MSG" "$GIT_DIR/COMMIT_EDITMSG" "$GIT_DIR/SQUASH_MSG"

cd_to_toplevel

git rerere

if test "$ret" = 0
then
	git gc --auto
	if test -x "$GIT_DIR"/hooks/post-commit
	then
		"$GIT_DIR"/hooks/post-commit
	fi
	if test -z "$quiet"
	then
		commit=$(git diff-tree --always --shortstat --pretty="format:%h: %s"\
		       --abbrev --summary --root HEAD --)
		echo "Created${initial_commit:+ initial} commit $commit"
	fi
fi

exit "$ret"
