about summary refs log tree commit diff
path: root/third_party/git/mergetools/p4merge
diff options
context:
space:
mode:
Diffstat (limited to 'third_party/git/mergetools/p4merge')
-rw-r--r--third_party/git/mergetools/p4merge36
1 files changed, 36 insertions, 0 deletions
diff --git a/third_party/git/mergetools/p4merge b/third_party/git/mergetools/p4merge
new file mode 100644
index 000000000000..7a5b291dd28a
--- /dev/null
+++ b/third_party/git/mergetools/p4merge
@@ -0,0 +1,36 @@
+diff_cmd () {
+	empty_file=
+
+	# p4merge does not like /dev/null
+	if test "/dev/null" = "$LOCAL"
+	then
+		LOCAL="$(create_empty_file)"
+	fi
+	if test "/dev/null" = "$REMOTE"
+	then
+		REMOTE="$(create_empty_file)"
+	fi
+
+	"$merge_tool_path" "$LOCAL" "$REMOTE"
+
+	if test -n "$empty_file"
+	then
+		rm -f "$empty_file"
+	fi
+}
+
+merge_cmd () {
+	if ! $base_present
+	then
+		cp -- "$LOCAL" "$BASE"
+		create_virtual_base "$BASE" "$REMOTE"
+	fi
+	"$merge_tool_path" "$BASE" "$REMOTE" "$LOCAL" "$MERGED"
+}
+
+create_empty_file () {
+	empty_file="${TMPDIR:-/tmp}/git-difftool-p4merge-empty-file.$$"
+	>"$empty_file"
+
+	printf "%s" "$empty_file"
+}