X-Git-Url: https://git.octo.it/?a=blobdiff_plain;f=git-clone.sh;h=c09979a7a49e36b35e333b902cb0e0d689b693f4;hb=f8348be3be8493a62110a09ab0343213990b416b;hp=71431319c008fbc5771d97c4229e7054efd76395;hpb=036a72d8fa25d9c56c19ae4c761401a58c43b8f6;p=git.git diff --git a/git-clone.sh b/git-clone.sh index 71431319..c09979a7 100755 --- a/git-clone.sh +++ b/git-clone.sh @@ -9,7 +9,7 @@ unset CDPATH usage() { - echo >&2 "* git clone [-l [-s]] [-q] [-u ] [-n] " + echo >&2 "* git clone [-l [-s]] [-q] [-u ] [-n] []" exit 1 } @@ -23,7 +23,7 @@ fi http_fetch () { # $1 = Remote, $2 = Local - curl -nsf $curl_extra_args "$1" >"$2" + curl -nsfL $curl_extra_args "$1" >"$2" } clone_dumb_http () { @@ -53,7 +53,11 @@ Perhaps git-update-server-info needs to be run there?" while read sha1 refname do name=`expr "$refname" : 'refs/\(.*\)'` && - git-http-fetch -v -a -w "$name" "$name" "$1/" || exit 1 + case "$name" in + *^*) ;; + *) + git-http-fetch -v -a -w "$name" "$name" "$1/" || exit 1 + esac done <"$clone_tmp/refs" rm -fr "$clone_tmp" } @@ -92,7 +96,10 @@ if base=$(get_repo_base "$repo"); then fi dir="$2" -mkdir "$dir" && +# Try using "humanish" part of source repo if user didn't specify one +[ -z "$dir" ] && dir=$(echo "$repo" | sed -e 's|/$||' -e 's|:*/*\.git$||' -e 's|.*/||g') +[ -e "$dir" ] && echo "$dir already exists." && usage +mkdir -p "$dir" && D=$( (cd "$dir" && git-init-db && pwd) ) && @@ -122,8 +129,7 @@ yes,yes) fi && rm -f "$D/.git/objects/sample" && cd "$repo" && - find objects -type f -print | - cpio -puamd$l "$D/.git/" || exit 1 + find objects -depth -print | cpio -puamd$l "$D/.git/" || exit 1 ;; yes) mkdir -p "$D/.git/objects/info" @@ -160,7 +166,7 @@ yes,yes) rm -f "$D/.git/TMP_ALT" if test -f "$D/.git/TMP_ALT" then - ( cd $D && + ( cd "$D" && . git-parse-remote && resolve_alternates "$repo" <"./.git/TMP_ALT" ) | while read alt @@ -188,14 +194,29 @@ yes,yes) ;; esac -cd $D || exit +cd "$D" || exit if test -f ".git/HEAD" then - mkdir -p .git/remotes || exit - echo >.git/remotes/origin \ - "URL: $repo -Pull: master:origin" + head_points_at=`git-symbolic-ref HEAD` + case "$head_points_at" in + refs/heads/*) + head_points_at=`expr "$head_points_at" : 'refs/heads/\(.*\)'` + mkdir -p .git/remotes && + echo >.git/remotes/origin \ + "URL: $repo +Pull: $head_points_at:origin" && + cp ".git/refs/heads/$head_points_at" .git/refs/heads/origin && + find .git/refs/heads -type f -print | + while read ref + do + head=`expr "$ref" : '.git/refs/heads/\(.*\)'` && + test "$head_points_at" = "$head" || + test "origin" = "$head" || + echo "Pull: ${head}:${head}" + done >>.git/remotes/origin + esac + case "$no_checkout" in '') git checkout