mergetools: add winmerge as a builtin tool
authorDavid Aguilar <davvid@gmail.com>
Wed, 20 May 2015 09:07:23 +0000 (02:07 -0700)
committerJunio C Hamano <gitster@pobox.com>
Wed, 20 May 2015 20:13:44 +0000 (13:13 -0700)
Add a winmerge scriptlet with the commands described in [1] so
that users can use winmerge without needing to perform any
additional configuration.

[1] http://thread.gmane.org/gmane.comp.version-control.git/268631

Helped-by: Philip Oakley <philipoakley@iee.org>
Helped-by: Johannes Schindelin <johannes.schindelin@gmx.de>
Helped-by: Sebastian Schuberth <sschuberth@gmail.com>
Helped-by: SZEDER Gábor <szeder@ira.uka.de>
Signed-off-by: David Aguilar <davvid@gmail.com>
Signed-off-by: Junio C Hamano <gitster@pobox.com>
mergetools/winmerge [new file with mode: 0644]
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
+}