about summary refs log tree commit diff
path: root/third_party/git/mergetools/meld
diff options
context:
space:
mode:
Diffstat (limited to 'third_party/git/mergetools/meld')
-rw-r--r--third_party/git/mergetools/meld36
1 files changed, 36 insertions, 0 deletions
diff --git a/third_party/git/mergetools/meld b/third_party/git/mergetools/meld
new file mode 100644
index 000000000000..7a08470f8836
--- /dev/null
+++ b/third_party/git/mergetools/meld
@@ -0,0 +1,36 @@
+diff_cmd () {
+	"$merge_tool_path" "$LOCAL" "$REMOTE"
+}
+
+merge_cmd () {
+	if test -z "${meld_has_output_option:+set}"
+	then
+		check_meld_for_output_version
+	fi
+
+	if test "$meld_has_output_option" = true
+	then
+		"$merge_tool_path" --output="$MERGED" \
+			"$LOCAL" "$BASE" "$REMOTE"
+	else
+		"$merge_tool_path" "$LOCAL" "$MERGED" "$REMOTE"
+	fi
+}
+
+# Check whether we should use 'meld --output <file>'
+check_meld_for_output_version () {
+	meld_path="$(git config mergetool.meld.path)"
+	meld_path="${meld_path:-meld}"
+
+	if meld_has_output_option=$(git config --bool mergetool.meld.hasOutput)
+	then
+		: use configured value
+	elif "$meld_path" --help 2>&1 |
+		grep -e '--output=' -e '\[OPTION\.\.\.\]' >/dev/null
+	then
+		: old ones mention --output and new ones just say OPTION...
+		meld_has_output_option=true
+	else
+		meld_has_output_option=false
+	fi
+}