diff options
Diffstat (limited to 'git-mergetool.sh')
| -rwxr-xr-x | git-mergetool.sh | 18 | 
1 files changed, 13 insertions, 5 deletions
diff --git a/git-mergetool.sh b/git-mergetool.sh index 332528ff45..9a046b75d1 100755 --- a/git-mergetool.sh +++ b/git-mergetool.sh @@ -205,7 +205,7 @@ checkout_staged_file () {  		"$(git checkout-index --temp --stage="$1" "$2" 2>/dev/null)" \  		: '\([^	]*\)	') -	if test $? -eq 0 -a -n "$tmpfile" +	if test $? -eq 0 && test -n "$tmpfile"  	then  		mv -- "$(git rev-parse --show-cdup)$tmpfile" "$3"  	else @@ -256,7 +256,7 @@ merge_file () {  	checkout_staged_file 2 "$MERGED" "$LOCAL"  	checkout_staged_file 3 "$MERGED" "$REMOTE" -	if test -z "$local_mode" -o -z "$remote_mode" +	if test -z "$local_mode" || test -z "$remote_mode"  	then  		echo "Deleted merge conflict for '$MERGED':"  		describe_file "$local_mode" "local" "$LOCAL" @@ -277,7 +277,7 @@ merge_file () {  	echo "Normal merge conflict for '$MERGED':"  	describe_file "$local_mode" "local" "$LOCAL"  	describe_file "$remote_mode" "remote" "$REMOTE" -	if "$prompt" = true +	if test "$guessed_merge_tool" = true || test "$prompt" = true  	then  		printf "Hit return to start merge resolution tool (%s): " "$merge_tool"  		read ans || return 1 @@ -315,7 +315,8 @@ merge_file () {  	return 0  } -prompt=$(git config --bool mergetool.prompt || echo true) +prompt=$(git config --bool mergetool.prompt) +guessed_merge_tool=false  while test $# != 0  do @@ -373,7 +374,14 @@ prompt_after_failed_merge () {  if test -z "$merge_tool"  then -	merge_tool=$(get_merge_tool "$merge_tool") || exit +	# Check if a merge tool has been configured +	merge_tool=$(get_configured_merge_tool) +	# Try to guess an appropriate merge tool if no tool has been set. +	if test -z "$merge_tool" +	then +		merge_tool=$(guess_merge_tool) || exit +		guessed_merge_tool=true +	fi  fi  merge_keep_backup="$(git config --bool mergetool.keepBackup || echo true)"  merge_keep_temporaries="$(git config --bool mergetool.keepTemporaries || echo false)"  | 
