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@xxxxxxxxxxxxx> --- Documentation/config.txt | 5 +++++ git-mergetool.sh | 31 ++++++++++--------------------- 2 files changed, 15 insertions(+), 21 deletions(-) diff --git a/Documentation/config.txt b/Documentation/config.txt index 06a93e0..d9f62f2 100644 --- a/Documentation/config.txt +++ b/Documentation/config.txt @@ -744,6 +744,11 @@ mergetool.<tool>.trustExitCode:: if the file has been updated, otherwise the user is prompted to indicate the success of the merge. +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. + 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. diff --git a/git-mergetool.sh b/git-mergetool.sh index 2437c37..4397f47 100755 --- a/git-mergetool.sh +++ b/git-mergetool.sh @@ -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,19 +197,16 @@ 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 ;; xxdiff) touch "$BACKUP" @@ -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 ;; *) if test -n "$merge_tool_cmd"; then @@ -286,15 +266,22 @@ merge_file () { ( MERGED="$path" eval $tool ) status=$? fi - save_backup fi ;; esac + if test "$status" -ne 0; then echo "merge of $path failed" 1>&2 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 } @@ -406,6 +393,8 @@ else init_merge_tool_path "$merge_tool" + merge_keep_backup="$(git config --bool merge.keepBackup || echo true)" + if test -z "$merge_tool_cmd" && ! type "$merge_tool_path" > /dev/null 2>&1; then echo "The merge tool $merge_tool is not available as '$merge_tool_path'" exit 1 -- 1.5.4.1.34.g94bf - To unsubscribe from this list: send the line "unsubscribe git" in the body of a message to majordomo@xxxxxxxxxxxxxxx More majordomo info at http://vger.kernel.org/majordomo-info.html