X-Git-Url: https://git.verplant.org/?a=blobdiff_plain;f=git-clone-script;h=0848a5d7a7d12cb60673a5d1a8e3e328a31dbd35;hb=5077fa9c1e3af760dd3573ac94be6cb27ad74849;hp=f988b8c9c79fbb9ec9c3cad556cb4c9d51984475;hpb=434d6ba03122c160f98713a009cf8a32d02982f3;p=git.git diff --git a/git-clone-script b/git-clone-script index f988b8c9..0848a5d7 100755 --- a/git-clone-script +++ b/git-clone-script @@ -14,6 +14,47 @@ get_repo_base() { (cd "$1" && (cd .git ; pwd)) 2> /dev/null } +if [ -n "$GIT_SSL_NO_VERIFY" ]; then + curl_extra_args="-k" +fi + +http_fetch () { + # $1 = Remote, $2 = Local + curl -nsf $curl_extra_args "$1" >"$2" +} + +clone_dumb_http () { + # $1 - remote, $2 - local + cd "$2" && + clone_tmp='.git/clone-tmp' && + mkdir -p "$clone_tmp" || exit 1 + http_fetch "$1/info/refs" "$clone_tmp/refs" && + http_fetch "$1/objects/info/packs" "$clone_tmp/packs" || { + echo >&2 "Cannot get remote repository information. +Perhaps git-update-server-info needs to be run there?" + exit 1; + } + while read type name + do + case "$type" in + P) ;; + *) continue ;; + esac && + + idx=`expr "$name" : '\(.*\)\.pack'`.idx + http_fetch "$1/objects/pack/$name" ".git/objects/pack/$name" && + http_fetch "$1/objects/pack/$idx" ".git/objects/pack/$idx" && + git-verify-pack ".git/objects/pack/$idx" || exit 1 + done <"$clone_tmp/packs" + + while read sha1 refname + do + name=`expr "$refname" : 'refs/\(.*\)'` && + git-http-pull -v -a -w "$name" "$name" "$1/" || exit 1 + done <"$clone_tmp/refs" + rm -fr "$clone_tmp" +} + quiet= use_local=no local_shared=no @@ -104,17 +145,7 @@ yes,yes) rsync $quiet -avz --ignore-existing "$repo/refs/" "$D/.git/refs/" ;; http://*) - git-clone-dumb-http "$repo" "$D" - case "$?" in - 2) - echo "Somebody should define smarter http server protocol" >&2 - exit 1 - ;; - 0) - ;; - *) - exit - esac + clone_dumb_http "$repo" "$D" ;; *) cd "$D" && case "$upload_pack" in