Merge branch 'da/mergetool-temporary-filename'
authorJunio C Hamano <gitster@pobox.com>
Tue, 21 Oct 2014 20:28:19 +0000 (13:28 -0700)
committerJunio C Hamano <gitster@pobox.com>
Tue, 21 Oct 2014 20:28:20 +0000 (13:28 -0700)
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

1  2 
git-mergetool.sh
diff --combined git-mergetool.sh
index 9a046b75d1dd810202d784d3fffe8afe6dd1963c,0ff6566a0eff8819023254d39c26ed45670b9a7b..96a61ba6f470d7634552a42547de57f63fae8d81
@@@ -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;}')
        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"
        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
        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)"