Code

merge with /dev/null as base, instead of punting O==empty case
authorJunio C Hamano <junkio@cox.net>
Tue, 8 Nov 2005 06:03:46 +0000 (22:03 -0800)
committerJunio C Hamano <junkio@cox.net>
Sat, 12 Nov 2005 05:18:17 +0000 (21:18 -0800)
Instead of leaving the path unmerged in a case where each side
adds different version of the same path, attempt to merge it
with empty base and leave "our" version in the index file, just
like we do for the case in conflicting merge.

Signed-off-by: Junio C Hamano <junkio@cox.net>
git-merge-one-file.sh

index 5419e598c52eec1b8e40b4179b0bd6ebae40b682..32e17cbc61341a0b6b04d0556aa59bd95a73cb45 100755 (executable)
@@ -40,7 +40,7 @@ case "${1:-.}${2:-.}${3:-.}" in
        ;;
 
 #
-# Added in both (check for same permissions).
+# Added in both, identically (check for same permissions).
 #
 ".$3$2")
        if [ "$6" != "$7" ]; then
@@ -56,9 +56,18 @@ case "${1:-.}${2:-.}${3:-.}" in
 #
 # Modified in both, but differently.
 #
-"$1$2$3")
-       echo "Auto-merging $4."
-       orig=`git-unpack-file $1`
+"$1$2$3" | ".$2$3")
+       case "$1" in
+       '')
+               echo "Added $4 in both, but differently."
+               orig=`git-unpack-file $2`
+               : >$orig
+               ;;
+       *)
+               echo "Auto-merging $4."
+               orig=`git-unpack-file $1`
+               ;;
+       esac
        src2=`git-unpack-file $3`
 
        # We reset the index to the first branch, making
@@ -73,6 +82,9 @@ case "${1:-.}${2:-.}${3:-.}" in
                echo "ERROR: Permissions conflict: $5->$6,$7."
                ret=1
        fi
+       if [ "$1" = '' ]; then
+               ret=1
+       fi
 
        if [ $ret -ne 0 ]; then
                echo "ERROR: Merge conflict in $4."