X-Git-Url: https://git.octo.it/?a=blobdiff_plain;f=git-clone.sh;h=4ed861d576bfaefa768f811a59d2ec53d233b5df;hb=a7cfb4a43fce841cd673057cf4137f85e6f804eb;hp=168eb963ba7a611860e6272bf419f09e8ff33929;hpb=8a1a120c55a67c3193e136a06826585711717399;p=git.git diff --git a/git-clone.sh b/git-clone.sh index 168eb963..4ed861d5 100755 --- a/git-clone.sh +++ b/git-clone.sh @@ -9,7 +9,7 @@ unset CDPATH usage() { - echo >&2 "Usage: $0 [--naked] [-l [-s]] [-q] [-u ] [-o ] [-n] []" + echo >&2 "Usage: $0 [--bare] [-l [-s]] [-q] [-u ] [-o ] [-n] []" exit 1 } @@ -53,15 +53,17 @@ use_local=no local_shared=no no_checkout= upload_pack= -naked= +bare= origin=origin +origin_override= while case "$#,$1" in 0,*) break ;; *,-n|*,--no|*,--no-|*,--no-c|*,--no-ch|*,--no-che|*,--no-chec|\ *,--no-check|*,--no-checko|*,--no-checkou|*,--no-checkout) no_checkout=yes ;; - *,--na|*,--nak|*,--nake|*,--naked) naked=yes ;; + *,--na|*,--nak|*,--nake|*,--naked|\ + *,-b|*,--b|*,--ba|*,--bar|*,--bare) bare=yes ;; *,-l|*,--l|*,--lo|*,--loc|*,--loca|*,--local) use_local=yes ;; *,-s|*,--s|*,--sh|*,--sha|*,--shar|*,--share|*,--shared) local_shared=yes; use_local=yes ;; @@ -72,6 +74,11 @@ while echo >&2 "'$2' is not suitable for a branch name" exit 1 } + test -z "$origin_override" || { + echo >&2 "Do not give more than one -o options." + exit 1 + } + origin_override=yes origin="$2"; shift ;; 1,-u|1,--upload-pack) usage ;; @@ -85,8 +92,16 @@ do shift done -# --naked implies --no-checkout -test -z "$naked" || no_checkout=yes +# --bare implies --no-checkout +if test yes = "$bare" +then + if test yes = "$origin_override" + then + echo >&2 '--bare and -o $origin options are incompatible.' + exit 1 + fi + no_checkout=yes +fi # Turn the source into an absolute path if # it is local @@ -99,15 +114,16 @@ fi dir="$2" # 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') +[ -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" && pwd) && -case "$naked" in +trap 'err=$?; cd ..; rm -r "$D"; exit $err' exit +case "$bare" in yes) GIT_DIR="$D" ;; *) GIT_DIR="$D/.git" ;; esac && export GIT_DIR && git-init-db || usage -case "$naked" in +case "$bare" in yes) GIT_DIR="$D" ;; *) @@ -138,7 +154,7 @@ yes,yes) fi && rm -f "$GIT_DIR/objects/sample" && cd "$repo" && - find objects -depth -print | cpio -puamd$l "$GIT_DIR/" || exit 1 + find objects -depth -print | cpio -pumd$l "$GIT_DIR/" || exit 1 ;; yes) mkdir -p "$GIT_DIR/objects/info" @@ -191,7 +207,13 @@ yes,yes) fi ;; http://*) - clone_dumb_http "$repo" "$D" + if test -z "@@NO_CURL@@" + then + clone_dumb_http "$repo" "$D" + else + echo >&2 "http transport not supported, rebuild Git with curl support" + exit 1 + fi ;; *) cd "$D" && case "$upload_pack" in @@ -208,7 +230,7 @@ esac cd "$D" || exit -if test -f "$GIT_DIR/HEAD" +if test -f "$GIT_DIR/HEAD" && test -z "$bare" then head_points_at=`git-symbolic-ref HEAD` case "$head_points_at" in @@ -231,6 +253,9 @@ Pull: $head_points_at:$origin" && case "$no_checkout" in '') - git checkout + git-read-tree -m -u -v HEAD HEAD esac fi + +trap - exit +