Merge branch 'da/mergetool-winmerge'
authorJunio C Hamano <gitster@pobox.com>
Mon, 1 Jun 2015 19:45:14 +0000 (12:45 -0700)
committerJunio C Hamano <gitster@pobox.com>
Mon, 1 Jun 2015 19:45:14 +0000 (12:45 -0700)
"git mergetool" learned to drive WinMerge as a backend.

* da/mergetool-winmerge:
mergetools: add winmerge as a builtin tool
mergetool--lib: set IFS for difftool and mergetool

git-mergetool--lib.sh
git-mergetool.sh
mergetools/winmerge [new file with mode: 0644]
index fe61e89f31c44ca90dbfba468cf8b23d3993ba9f..14b039de6513459a7f39ec434638ed15eaf1d9b2 100644 (file)
@@ -2,6 +2,9 @@
 
 : ${MERGE_TOOLS_DIR=$(git --exec-path)/mergetools}
 
+IFS='
+'
+
 mode_ok () {
        if diff_mode
        then
index d20581c15c5086b02411cab618cde0a9ff14e7ed..9f77e3a8bb0b1197f860912b6d0e56b40b607cb9 100755 (executable)
@@ -451,8 +451,6 @@ fi
 printf "Merging:\n"
 printf "%s\n" "$files"
 
-IFS='
-'
 rc=0
 for i in $files
 do
diff --git a/mergetools/winmerge b/mergetools/winmerge
new file mode 100644 (file)
index 0000000..74a66d4
--- /dev/null
@@ -0,0 +1,36 @@
+diff_cmd () {
+       "$merge_tool_path" -u -e "$LOCAL" "$REMOTE"
+       return 0
+}
+
+merge_cmd () {
+       # mergetool.winmerge.trustExitCode is implicitly false.
+       # touch $BACKUP so that we can check_unchanged.
+       touch "$BACKUP"
+       "$merge_tool_path" -u -e -dl Local -dr Remote \
+               "$LOCAL" "$REMOTE" "$MERGED"
+       check_unchanged
+}
+
+translate_merge_tool_path() {
+       # Use WinMergeU.exe if it exists in $PATH
+       if type -p WinMergeU.exe >/dev/null 2>&1
+       then
+               printf WinMergeU.exe
+               return
+       fi
+
+       # Look for WinMergeU.exe in the typical locations
+       winmerge_exe="WinMerge/WinMergeU.exe"
+       for directory in $(env | grep -Ei '^PROGRAM(FILES(\(X86\))?|W6432)=' |
+               cut -d '=' -f 2- | sort -u)
+       do
+               if test -n "$directory" && test -x "$directory/$winmerge_exe"
+               then
+                       printf '%s' "$directory/$winmerge_exe"
+                       return
+               fi
+       done
+
+       printf WinMergeU.exe
+}