|
|
@ -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 |
|
|
|
;; |
|
|
|
;; |
|
|
|