Fix up git-merge-one-file-script
authorLinus Torvalds <torvalds@ppc970.osdl.org>
Thu, 9 Jun 2005 00:36:47 +0000 (17:36 -0700)
committerLinus Torvalds <torvalds@ppc970.osdl.org>
Thu, 9 Jun 2005 00:36:47 +0000 (17:36 -0700)
Junio points out that we may need to create the path leading
up the the file we merge.

And we need to be more careful with the "exec"s we've done
to exit on success - only do the on the last command in the
pipeline, not the first one ;)

git-merge-one-file-script

index f0353c14b4c116a07a4a2b67453707767e4a1a3f..004c2bd44684c56a26e68879facdf50875b4dcf6 100755 (executable)
 # been handled already by git-read-tree, but that one doesn't
 # do any merges that might change the tree layout.
 
+verify_path() {
+    file="$1"
+    dir=`dirname "$file"` &&
+    mkdir -p "$dir" &&
+    rm -f -- "$file" &&
+    : >"$file"
+}
+
 case "${1:-.}${2:-.}${3:-.}" in
 #
 # Deleted in both.
@@ -32,8 +40,8 @@ case "${1:-.}${2:-.}${3:-.}" in
 #
 "$1.$1" | "$1$1.")
        echo "Removing $4"
-       exec rm -f -- "$4" &&
-               git-update-cache --remove -- "$4"
+       rm -f -- "$4" &&
+               exec git-update-cache --remove -- "$4"
        ;;
 
 #
@@ -42,9 +50,10 @@ case "${1:-.}${2:-.}${3:-.}" in
 ".$2." | "..$3" )
        case "$6$7" in *7??) mode=+x;; *) mode=-x;; esac
        echo "Adding $4 with perm $mode."
-       exec git-cat-file blob "$2$3" >"$4" &&
+       verify_path "$4" &&
+               git-cat-file blob "$2$3" >"$4" &&
                chmod $mode -- "$4" &&
-               git-update-cache --add -- "$4"
+               exec git-update-cache --add -- "$4"
        ;;
 
 #
@@ -58,9 +67,10 @@ case "${1:-.}${2:-.}${3:-.}" in
        fi
        case "$6" in *7??) mode=+x;; *) mode=-x;; esac
        echo "Adding $4 with perm $mode"
-       exec git-cat-file blob "$2" >"$4" &&
+       verify_path "$4" &&
+               git-cat-file blob "$2" >"$4" &&
                chmod $mode -- "$4" &&
-               git-update-cache --add -- "$4"
+               exec git-update-cache --add -- "$4"
        ;;
 
 #
@@ -72,7 +82,8 @@ case "${1:-.}${2:-.}${3:-.}" in
        src1=`git-unpack-file $2`
        src2=`git-unpack-file $3`
 
-       merge -p "$src1" "$orig" "$src2" > "$4"
+       verify_path "$4" &&
+               merge -p "$src1" "$orig" "$src2" > "$4"
        ret=$?
        rm -f -- "$orig" "$src1" "$src2"