summaryrefslogtreecommitdiff
path: root/git-fetch-script
diff options
context:
space:
mode:
Diffstat (limited to 'git-fetch-script')
-rwxr-xr-xgit-fetch-script24
1 files changed, 22 insertions, 2 deletions
diff --git a/git-fetch-script b/git-fetch-script
index 34ddfc8cb9..2040c125f9 100755
--- a/git-fetch-script
+++ b/git-fetch-script
@@ -13,9 +13,29 @@ http://* | https://*)
if [ -n "$GIT_SSL_NO_VERIFY" ]; then
curl_extra_args="-k"
fi
- head=$(curl -ns $curl_extra_args "$merge_repo/$merge_head") || exit 1
+ _x40='[0-9a-f][0-9a-f][0-9a-f][0-9a-f][0-9a-f]' &&
+ _x40="$_x40$_x40$_x40$_x40$_x40$_x40$_x40$_x40" &&
+ head=$(curl -ns $curl_extra_args "$merge_repo/$merge_head") &&
+ expr "$head" : "$_x40\$" >/dev/null || {
+ echo >&2 "Failed to fetch $merge_head from $merge_repo"
+ exit 1
+ }
+ git-fetch-dumb-http "$head" "$@"
+ case "$?" in
+ 0) ;;
+ 2) no_dumb_http_support=1 ;;
+ *) exit;;
+ esac
echo Fetching "$merge_head" using http
- git-http-pull -v -a "$head" "$merge_repo/"
+ git-http-pull -v -a "$head" "$merge_repo/" || {
+ case "$no_dumb_http_support" in
+ 1)
+ echo >&2 "* This could be because the $merge_repo is packed without"
+ echo >&2 " preparing dumb server support files."
+ ;;
+ esac
+ exit 1
+ }
;;
rsync://*)
rsync -L "$merge_repo/$merge_head" "$TMP_HEAD" || exit 1