merge-one-file: remove empty directories
[git.git] / git-merge-one-file.sh
index 32e17cb..b285990 100755 (executable)
@@ -25,7 +25,12 @@ case "${1:-.}${2:-.}${3:-.}" in
                echo "Removing $4"
        fi
        if test -f "$4"; then
-               rm -f -- "$4"
+               rm -f -- "$4" &&
+               dn="$4" &&
+               while dn=$(expr "$dn" : '\(.*\)/') && rmdir "$dn" 2>/dev/null
+               do
+                       :;
+               done
        fi &&
                exec git-update-index --remove -- "$4"
        ;;
@@ -57,18 +62,26 @@ case "${1:-.}${2:-.}${3:-.}" in
 # Modified in both, but differently.
 #
 "$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`
-               : >$orig
+               sz0=`wc -c <"$orig"`
+               diff -u -La/$orig -Lb/$orig $orig $src2 | git-apply --no-add 
+               sz1=`wc -c <"$orig"`
+
+               # If we do not have enough common material, it is not
+               # worth trying two-file merge using common subsections.
+               expr "$sz0" \< "$sz1" \* 2 >/dev/null || : >$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
        # git-diff-file useful