diff options
-rw-r--r-- | Documentation/git-clone-dumb-http.txt | 36 | ||||
-rw-r--r-- | Documentation/git.txt | 3 | ||||
-rw-r--r-- | Makefile | 2 | ||||
-rwxr-xr-x | git-clone-dumb-http | 51 | ||||
-rwxr-xr-x | git-clone-script | 53 |
5 files changed, 43 insertions, 102 deletions
diff --git a/Documentation/git-clone-dumb-http.txt b/Documentation/git-clone-dumb-http.txt deleted file mode 100644 index 1704649229..0000000000 --- a/Documentation/git-clone-dumb-http.txt +++ /dev/null @@ -1,36 +0,0 @@ -git-clone-dumb-http(1) -====================== - -NAME ----- -git-clone-dumb-http - Client to clone a repository via HTTP. - -SYNOPSIS --------- -'git-clone-dumb-http' <remote-repo> <local-dir> - -DESCRIPTION ------------ -Client to clone, via HTTP, a repository that has been prepared with -update-server-info. - -OPTIONS -------- -<remote-repo>:: - Remote repository to clone from. - -<local-dir>:: - Directory to clone to. - -Author ------- -Written by Junio C Hamano <junkio@cox.net> - -Documentation --------------- -Documentation by Junio C Hamano and the git-list <git@vger.kernel.org>. - -GIT ---- -Part of the link:git.html[git] suite - diff --git a/Documentation/git.txt b/Documentation/git.txt index 2f8a6479e1..0bcd99027d 100644 --- a/Documentation/git.txt +++ b/Documentation/git.txt @@ -329,9 +329,6 @@ link:git-build-rev-cache.html[git-build-rev-cache]:: link:git-checkout-script.html[git-checkout-script]:: git-checkout-script. -link:git-clone-dumb-http.html[git-clone-dumb-http]:: - git-clone-dumb-http. - link:git-daemon.html[git-daemon]:: git-daemon. @@ -65,7 +65,7 @@ SCRIPTS=git git-merge-one-file-script git-prune-script \ gitk git-cherry git-rebase-script git-relink-script git-repack-script \ git-format-patch-script git-sh-setup-script git-push-script \ git-branch-script git-parse-remote-script git-verify-tag-script \ - git-ls-remote-script git-clone-dumb-http git-rename-script \ + git-ls-remote-script git-rename-script \ git-request-pull-script git-bisect-script SCRIPTS += git-count-objects-script diff --git a/git-clone-dumb-http b/git-clone-dumb-http deleted file mode 100755 index 50527086a0..0000000000 --- a/git-clone-dumb-http +++ /dev/null @@ -1,51 +0,0 @@ -#!/bin/sh -# -# Copyright (c) 2005, Junio C Hamano -# -# Called by git-clone-script -# Exits 2 when the remote site does not support dumb server protocol. - -# Usage: git-clone-dumb-http <remote-repo> <local-dir> - -R=${1?"remote repository"} D=${2?"local directory"} - -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" -} - -cd "$D" && -clone_tmp=".git/clone-tmp" && -mkdir -p "$clone_tmp" || exit 1 -trap "rm -rf .git/clone-tmp" 0 1 2 3 15 - -http_fetch "$R/info/refs" "$clone_tmp/refs" && -http_fetch "$R/objects/info/packs" "$clone_tmp/packs" || exit 2 - -# We do not have to worry about rev-cache when cloning. -# http_fetch "$R/info/rev-cache" "$clone_tmp/rev-cache" - -# Clone packs -while read type name -do - case "$type" in - P) ;; - *) continue ;; - esac && - - idx=`expr "$name" : '\(.*\)\.pack'`.idx - http_fetch "$R/objects/pack/$name" ".git/objects/pack/$name" && - http_fetch "$R/objects/pack/$idx" ".git/objects/pack/$idx" && - git-verify-pack ".git/objects/pack/$idx" || exit 1 - -done <"$clone_tmp/packs" - -# Then clone refs. -while read sha1 refname -do - name=`expr "$refname" : 'refs/\(.*\)'` && - git-http-pull -v -a -w "$name" "$name" "$R/" || exit 1 -done <"$clone_tmp/refs" diff --git a/git-clone-script b/git-clone-script index f988b8c9c7..0848a5d7a7 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 |