X-Git-Url: https://git.verplant.org/?a=blobdiff_plain;f=git-clone-script;h=0848a5d7a7d12cb60673a5d1a8e3e328a31dbd35;hb=78938b0d8a95b09d94af214fdb6b5f053a5edb98;hp=99c2459631f2bdcc6382bd2b5fc03090e1888ee3;hpb=379955c696a417f0fb6118f2fd91dbffd2816ad1;p=git.git diff --git a/git-clone-script b/git-clone-script index 99c24596..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 @@ -127,6 +158,8 @@ yes,yes) esac # Update origin. -mkdir -p "$D/.git/branches/" && -rm -f "$D/.git/branches/origin" && -echo "$repo" >"$D/.git/branches/origin" +mkdir -p "$D/.git/remotes/" && +rm -f "$D/.git/remotes/origin" && +echo >"$D/.git/remotes/origin" \ +"URL: $repo +Pull: master:origin"