aboutsummaryrefslogtreecommitdiff
path: root/git-mergetool.sh
diff options
context:
space:
mode:
authorJunio C Hamano <gitster@pobox.com>2016-04-14 18:57:47 -0700
committerJunio C Hamano <gitster@pobox.com>2016-04-14 18:57:47 -0700
commit517736ffcf7e0a81cef938987b4cc4ed82b3408f (patch)
tree0122a67b9b27001af213c1e6c194307d4a97005e /git-mergetool.sh
parent237e6db5c08b095d84d352206e6dcd332fbfca5a (diff)
parenta2986045e3da24c850da03eaf2f2e2a56f8d4fff (diff)
downloadgit-517736ffcf7e0a81cef938987b4cc4ed82b3408f.tar.xz
Merge branch 'da/mergetool-delete-delete-conflict' into maint
"git mergetool" did not work well with conflicts that both sides deleted. * da/mergetool-delete-delete-conflict: mergetool: honor tempfile configuration when resolving delete conflicts mergetool: support delete/delete conflicts
Diffstat (limited to 'git-mergetool.sh')
-rwxr-xr-xgit-mergetool.sh25
1 files changed, 21 insertions, 4 deletions
diff --git a/git-mergetool.sh b/git-mergetool.sh
index 9f77e3a8bb..f67bab55e8 100755
--- a/git-mergetool.sh
+++ b/git-mergetool.sh
@@ -126,7 +126,12 @@ resolve_deleted_merge () {
case "$ans" in
[mMcC]*)
git add -- "$MERGED"
- cleanup_temp_files --save-backup
+ if test "$merge_keep_backup" = "true"
+ then
+ cleanup_temp_files --save-backup
+ else
+ cleanup_temp_files
+ fi
return 0
;;
[dD]*)
@@ -135,6 +140,10 @@ resolve_deleted_merge () {
return 0
;;
[aA]*)
+ if test "$merge_keep_temporaries" = "false"
+ then
+ cleanup_temp_files
+ fi
return 1
;;
esac
@@ -282,8 +291,14 @@ merge_file () {
return
fi
- mv -- "$MERGED" "$BACKUP"
- cp -- "$BACKUP" "$MERGED"
+ if test -f "$MERGED"
+ then
+ mv -- "$MERGED" "$BACKUP"
+ cp -- "$BACKUP" "$MERGED"
+ fi
+ # Create a parent directory to handle delete/delete conflicts
+ # where the base's directory no longer exists.
+ mkdir -p "$(dirname "$MERGED")"
checkout_staged_file 1 "$MERGED" "$BASE"
checkout_staged_file 2 "$MERGED" "$LOCAL"
@@ -295,7 +310,9 @@ merge_file () {
describe_file "$local_mode" "local" "$LOCAL"
describe_file "$remote_mode" "remote" "$REMOTE"
resolve_deleted_merge
- return
+ status=$?
+ rmdir -p "$(dirname "$MERGED")" 2>/dev/null
+ return $status
fi
if is_symlink "$local_mode" || is_symlink "$remote_mode"