Code

Tidy up git mergetool's backup file behaviour
authorCharles Bailey <charles@hashpling.org>
Thu, 21 Feb 2008 23:30:02 +0000 (23:30 +0000)
committerJunio C Hamano <gitster@pobox.com>
Wed, 5 Mar 2008 20:07:03 +0000 (12:07 -0800)
Currently a backup pre-merge file with conflict markers is sometimes
kept with a .orig extenstion and sometimes removed depending on the
particular merge tool used.

This patch makes the handling consistent across all merge tools and
configurable via a new mergetool.keepBackup config variable

Signed-off-by: Charles Bailey <charles@hashpling.org>
Signed-off-by: Junio C Hamano <gitster@pobox.com>
Documentation/config.txt
git-mergetool.sh

index 4027726f2ee66ebad69412a5c8c6d1aef7f7463f..514169066db4504212afc062fb9a6723b183e07c 100644 (file)
@@ -777,6 +777,12 @@ mergetool.<tool>.path::
        Override the path for the given tool.  This is useful in case
        your tool is not in the PATH.
 
+mergetool.keepBackup::
+       After performing a merge, the original file with conflict markers
+       can be saved as a file with a `.orig` extension.  If this variable
+       is set to `false` then this file is not preserved.  Defaults to
+       `true` (i.e. keep the backup files).
+
 pack.window::
        The size of the window used by linkgit:git-pack-objects[1] when no
        window size is given on the command line. Defaults to 10.
index cbbb707959cc64427f7bbd7bfefb0a8f0f263596..9e6c4065fc56cad3db40a14e0a69414a256c0c03 100755 (executable)
@@ -127,18 +127,6 @@ check_unchanged () {
     fi
 }
 
-save_backup () {
-    if test "$status" -eq 0; then
-       mv -- "$BACKUP" "$path.orig"
-    fi
-}
-
-remove_backup () {
-    if test "$status" -eq 0; then
-       rm "$BACKUP"
-    fi
-}
-
 merge_file () {
     path="$1"
 
@@ -201,7 +189,6 @@ merge_file () {
                    -o "$path" -- "$LOCAL" "$REMOTE" > /dev/null 2>&1)
            fi
            status=$?
-           remove_backup
            ;;
        tkdiff)
            if base_present ; then
@@ -210,20 +197,17 @@ merge_file () {
                "$merge_tool_path" -o "$path" -- "$LOCAL" "$REMOTE"
            fi
            status=$?
-           save_backup
            ;;
        meld|vimdiff)
            touch "$BACKUP"
            "$merge_tool_path" -- "$LOCAL" "$path" "$REMOTE"
            check_unchanged
-           save_backup
            ;;
        gvimdiff)
-               touch "$BACKUP"
-               "$merge_tool_path" -f -- "$LOCAL" "$path" "$REMOTE"
-               check_unchanged
-               save_backup
-               ;;
+           touch "$BACKUP"
+           "$merge_tool_path" -f -- "$LOCAL" "$path" "$REMOTE"
+           check_unchanged
+           ;;
        xxdiff)
            touch "$BACKUP"
            if base_present ; then
@@ -240,7 +224,6 @@ merge_file () {
                    --merged-file "$path" -- "$LOCAL" "$REMOTE"
            fi
            check_unchanged
-           save_backup
            ;;
        opendiff)
            touch "$BACKUP"
@@ -250,7 +233,6 @@ merge_file () {
                "$merge_tool_path" "$LOCAL" "$REMOTE" -merge "$path" | cat
            fi
            check_unchanged
-           save_backup
            ;;
        ecmerge)
            touch "$BACKUP"
@@ -260,7 +242,6 @@ merge_file () {
                "$merge_tool_path" "$LOCAL" "$REMOTE" --mode=merge2 --to="$path"
            fi
            check_unchanged
-           save_backup
            ;;
        emerge)
            if base_present ; then
@@ -269,7 +250,6 @@ merge_file () {
                "$merge_tool_path" -f emerge-files-command "$LOCAL" "$REMOTE" "$(basename "$path")"
            fi
            status=$?
-           save_backup
            ;;
     esac
     if test "$status" -ne 0; then
@@ -277,6 +257,13 @@ merge_file () {
        mv -- "$BACKUP" "$path"
        exit 1
     fi
+
+    if test "$merge_keep_backup" = "true"; then
+       mv -- "$BACKUP" "$path.orig"
+    else
+       rm -- "$BACKUP"
+    fi
+
     git add -- "$path"
     cleanup_temp_files
 }
@@ -380,6 +367,8 @@ else
 
     init_merge_tool_path "$merge_tool"
 
+    merge_keep_backup="$(git config --bool merge.keepBackup || echo true)"
+
     if ! type "$merge_tool_path" > /dev/null 2>&1; then
         echo "The merge tool $merge_tool is not available as '$merge_tool_path'"
         exit 1