Merge branch 'yd/doc-merge-annotated-tag'
[gitweb.git] / mergetools / p4merge
index 1a45c1b0c5128335fc340e7d6409b4e772419a07..5a608abf9c77f436ab1472592e3d5777ef83805d 100644 (file)
@@ -1,10 +1,38 @@
 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 () {
        touch "$BACKUP"
-       $base_present || >"$BASE"
-       "$merge_tool_path" "$BASE" "$LOCAL" "$REMOTE" "$MERGED"
+       if ! $base_present
+       then
+               cp -- "$LOCAL" "$BASE"
+               create_virtual_base "$BASE" "$REMOTE"
+       fi
+       "$merge_tool_path" "$BASE" "$REMOTE" "$LOCAL" "$MERGED"
        check_unchanged
 }
+
+create_empty_file () {
+       empty_file="${TMPDIR:-/tmp}/git-difftool-p4merge-empty-file.$$"
+       >"$empty_file"
+
+       printf "%s" "$empty_file"
+}