X-Git-Url: https://git.octo.it/?a=blobdiff_plain;f=git-clone.sh;h=bfc6c2d79ff3d6c50fd397c36ee04693695ad814;hb=e6c310fd0d7384973efc6b1d5999a5e8a5b2f3bd;hp=4fdd6525148d50bd3a014bfc0f60eefd0f16efb9;hpb=72e5890b68e7199d92620d3bba91fa36dd259404;p=git.git diff --git a/git-clone.sh b/git-clone.sh index 4fdd6525..bfc6c2d7 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 "Usage: $0 [-l [-s]] [-q] [-u ] [-o ] [-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 () { @@ -67,14 +67,23 @@ use_local=no local_shared=no no_checkout= upload_pack= +origin=origin while case "$#,$1" in 0,*) break ;; *,-n) no_checkout=yes ;; *,-l|*,--l|*,--lo|*,--loc|*,--loca|*,--local) use_local=yes ;; *,-s|*,--s|*,--sh|*,--sha|*,--shar|*,--share|*,--shared) - local_shared=yes ;; + local_shared=yes; use_local=yes ;; *,-q|*,--quiet) quiet=-q ;; + 1,-o) usage;; + *,-o) + git-check-ref-format "$2" || { + echo >&2 "'$2' is not suitable for a branch name" + exit 1 + } + origin="$2"; shift + ;; 1,-u|1,--upload-pack) usage ;; *,-u|*,--upload-pack) shift @@ -96,7 +105,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) ) && @@ -163,7 +175,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 @@ -185,13 +197,16 @@ yes,yes) cd "$D" && case "$upload_pack" in '') git-clone-pack $quiet "$repo" ;; *) git-clone-pack $quiet "$upload_pack" "$repo" ;; - esac + esac || { + echo >&2 "clone-pack from '$repo' failed." + exit 1 + } ;; esac ;; esac -cd $D || exit +cd "$D" || exit if test -f ".git/HEAD" then @@ -202,14 +217,14 @@ then 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 && +Pull: $head_points_at:$origin" && + git-update-ref "refs/heads/$origin" $(git-rev-parse HEAD) && 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" || + test "$origin" = "$head" || echo "Pull: ${head}:${head}" done >>.git/remotes/origin esac