From: Junio C Hamano Date: Tue, 21 Oct 2014 20:28:19 +0000 (-0700) Subject: Merge branch 'da/mergetool-temporary-filename' X-Git-Tag: v2.2.0-rc0~30 X-Git-Url: https://git.lorimer.id.au/gitweb.git/diff_plain/02f4db83bd979fe33f18006fa612d7d5ab1d2470?hp=-c Merge branch 'da/mergetool-temporary-filename' Tweak the names of the three throw-away files "git mergetool" comes up with to feed the merge tool backend, so that a file with a single dot in its name in the original (e.g. "hello.c") will have only one dot in these variants (e.g. "hello_BASE_4321.c"). * da/mergetool-temporary-filename: mergetool: use more conservative temporary filenames --- 02f4db83bd979fe33f18006fa612d7d5ab1d2470 diff --combined git-mergetool.sh index 9a046b75d1,0ff6566a0e..96a61ba6f4 --- a/git-mergetool.sh +++ b/git-mergetool.sh @@@ -205,7 -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 @@@ -228,11 -228,17 +228,17 @@@ merge_file () return 1 fi - ext="$$$(expr "$MERGED" : '.*\(\.[^/]*\)$')" - BACKUP="./$MERGED.BACKUP.$ext" - LOCAL="./$MERGED.LOCAL.$ext" - REMOTE="./$MERGED.REMOTE.$ext" - BASE="./$MERGED.BASE.$ext" + if BASE=$(expr "$MERGED" : '\(.*\)\.[^/]*$') + then + ext=$(expr "$MERGED" : '.*\(\.[^/]*\)$') + else + BASE=$MERGED + ext= + fi + BACKUP="./${BASE}_BACKUP_$$$ext" + LOCAL="./${BASE}_LOCAL_$$$ext" + REMOTE="./${BASE}_REMOTE_$$$ext" + BASE="./${BASE}_BASE_$$$ext" base_mode=$(git ls-files -u -- "$MERGED" | awk '{if ($3==1) print $1;}') local_mode=$(git ls-files -u -- "$MERGED" | awk '{if ($3==2) print $1;}') @@@ -256,7 -262,7 +262,7 @@@ 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 -283,7 +283,7 @@@ 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,8 -321,7 +321,8 @@@ return 0 } -prompt=$(git config --bool mergetool.prompt || echo true) +prompt=$(git config --bool mergetool.prompt) +guessed_merge_tool=false while test $# != 0 do @@@ -374,14 -379,7 +380,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)"