[PATCH] Be more like the 'resolve' strategy.
[git.git] / git-fetch.sh
index 4928cd5..2273944 100755 (executable)
@@ -94,6 +94,7 @@ append_fetch_head () {
 }
 
 fast_forward_local () {
+    mkdir -p "$(dirname "$GIT_DIR/$1")"
     case "$1" in
     refs/tags/*)
        # Tags need not be pointing at commits so there
@@ -204,9 +205,16 @@ case "$remote" in
 http://* | https://* | rsync://* )
     ;; # we are already done.
 *)
-    git-fetch-pack "$remote" $rref |
+    (
+       git-fetch-pack "$remote" $rref || echo failed "$remote"
+    ) |
     while read sha1 remote_name
     do
+       case "$sha1" in
+       failed)
+               echo >&2 "Fetch failure: $remote"
+               exit 1 ;;
+       esac
        found=
        single_force=
        for ref in $refs
@@ -224,7 +232,7 @@ http://* | https://* | rsync://* )
 
        local_name=$(expr "$found" : '[^:]*:\(.*\)')
        append_fetch_head "$sha1" "$remote" "$remote_name" "$remote_nick" "$local_name"
-    done
+    done || exit
     ;;
 esac