Browse Source

git-clone: define die() and use it.

Signed-off-by: Dmitry V. Levin <ldv@altlinux.org>
Signed-off-by: Junio C Hamano <junkio@cox.net>
maint
Dmitry V. Levin 18 years ago committed by Junio C Hamano
parent
commit
87b787ac77
  1. 61
      git-clone.sh

61
git-clone.sh

@ -8,11 +8,15 @@
# See git-sh-setup why. # See git-sh-setup why.
unset CDPATH unset CDPATH


usage() { die() {
echo >&2 "Usage: $0 [--template=<template_directory>] [--use-separate-remote] [--reference <reference-repo>] [--bare] [-l [-s]] [-q] [-u <upload-pack>] [--origin <name>] [-n] <repo> [<dir>]" echo >&2 "$@"
exit 1 exit 1
} }


usage() {
die "Usage: $0 [--template=<template_directory>] [--use-separate-remote] [--reference <reference-repo>] [--bare] [-l [-s]] [-q] [-u <upload-pack>] [--origin <name>] [-n] <repo> [<dir>]"
}

get_repo_base() { get_repo_base() {
(cd "$1" && (cd .git ; pwd)) 2> /dev/null (cd "$1" && (cd .git ; pwd)) 2> /dev/null
} }
@ -35,11 +39,9 @@ clone_dumb_http () {
"`git-repo-config --bool http.noEPSV`" = true ]; then "`git-repo-config --bool http.noEPSV`" = true ]; then
curl_extra_args="${curl_extra_args} --disable-epsv" curl_extra_args="${curl_extra_args} --disable-epsv"
fi fi
http_fetch "$1/info/refs" "$clone_tmp/refs" || { http_fetch "$1/info/refs" "$clone_tmp/refs" ||
echo >&2 "Cannot get remote repository information. die "Cannot get remote repository information.
Perhaps git-update-server-info needs to be run there?" Perhaps git-update-server-info needs to be run there?"
exit 1;
}
while read sha1 refname while read sha1 refname
do do
name=`expr "z$refname" : 'zrefs/\(.*\)'` && name=`expr "z$refname" : 'zrefs/\(.*\)'` &&
@ -143,17 +145,12 @@ while
'') '')
usage ;; usage ;;
*/*) */*)
echo >&2 "'$2' is not suitable for an origin name" die "'$2' is not suitable for an origin name"
exit 1
esac esac
git-check-ref-format "heads/$2" || { git-check-ref-format "heads/$2" ||
echo >&2 "'$2' is not suitable for a branch name" die "'$2' is not suitable for a branch name"
exit 1 test -z "$origin_override" ||
} die "Do not give more than one --origin options."
test -z "$origin_override" || {
echo >&2 "Do not give more than one --origin options."
exit 1
}
origin_override=yes origin_override=yes
origin="$2"; shift origin="$2"; shift
;; ;;
@ -169,24 +166,19 @@ do
done done


repo="$1" repo="$1"
if test -z "$repo" test -n "$repo" ||
then die 'you must specify a repository to clone.'
echo >&2 'you must specify a repository to clone.'
exit 1
fi


# --bare implies --no-checkout # --bare implies --no-checkout
if test yes = "$bare" if test yes = "$bare"
then then
if test yes = "$origin_override" if test yes = "$origin_override"
then then
echo >&2 '--bare and --origin $origin options are incompatible.' die '--bare and --origin $origin options are incompatible.'
exit 1
fi fi
if test t = "$use_separate_remote" if test t = "$use_separate_remote"
then then
echo >&2 '--bare and --use-separate-remote options are incompatible.' die '--bare and --use-separate-remote options are incompatible.'
exit 1
fi fi
no_checkout=yes no_checkout=yes
fi fi
@ -206,7 +198,7 @@ fi
dir="$2" dir="$2"
# Try using "humanish" part of source repo if user didn't specify one # 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 [ -e "$dir" ] && die "destination directory '$dir' already exists."
mkdir -p "$dir" && mkdir -p "$dir" &&
D=$(cd "$dir" && pwd) && D=$(cd "$dir" && pwd) &&
trap 'err=$?; cd ..; rm -rf "$D"; exit $err' 0 trap 'err=$?; cd ..; rm -rf "$D"; exit $err' 0
@ -233,7 +225,7 @@ then
cd reference-tmp && cd reference-tmp &&
tar xf -) tar xf -)
else else
echo >&2 "$reference: not a local directory." && usage die "reference repository '$reference' is not a local directory."
fi fi
fi fi


@ -242,10 +234,8 @@ rm -f "$GIT_DIR/CLONE_HEAD"
# We do local magic only when the user tells us to. # We do local magic only when the user tells us to.
case "$local,$use_local" in case "$local,$use_local" in
yes,yes) yes,yes)
( cd "$repo/objects" ) || { ( cd "$repo/objects" ) ||
echo >&2 "-l flag seen but $repo is not local." die "-l flag seen but repository '$repo' is not local."
exit 1
}


case "$local_shared" in case "$local_shared" in
no) no)
@ -307,18 +297,15 @@ yes,yes)
then then
clone_dumb_http "$repo" "$D" clone_dumb_http "$repo" "$D"
else else
echo >&2 "http transport not supported, rebuild Git with curl support" die "http transport not supported, rebuild Git with curl support"
exit 1
fi fi
;; ;;
*) *)
case "$upload_pack" in case "$upload_pack" in
'') git-fetch-pack --all -k $quiet "$repo" ;; '') git-fetch-pack --all -k $quiet "$repo" ;;
*) git-fetch-pack --all -k $quiet "$upload_pack" "$repo" ;; *) git-fetch-pack --all -k $quiet "$upload_pack" "$repo" ;;
esac >"$GIT_DIR/CLONE_HEAD" || { esac >"$GIT_DIR/CLONE_HEAD" ||
echo >&2 "fetch-pack from '$repo' failed." die "fetch-pack from '$repo' failed."
exit 1
}
;; ;;
esac esac
;; ;;

Loading…
Cancel
Save