merge-one-file: use common as base, instead of emptiness.
[git.git] / git-merge-one-file.sh
index 5419e59..d9ee458 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,10 +56,21 @@ 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")
        src2=`git-unpack-file $3`
+       case "$1" in
+       '')
+               echo "Added $4 in both, but differently."
+               # This extracts OUR file in $orig, and uses git-apply to
+               # remove lines that are unique to ours.
+               orig=`git-unpack-file $2`
+               diff -u -La/$orig -Lb/$orig $orig $src2 | git-apply --no-add 
+               ;;
+       *)
+               echo "Auto-merging $4."
+               orig=`git-unpack-file $1`
+               ;;
+       esac
 
        # We reset the index to the first branch, making
        # git-diff-file useful
@@ -73,6 +84,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."