#!/bin/sh
#
-. git-sh-setup || die "Not a git archive"
usage () {
- echo >&2 "usage: $0 [--heads] [--tags] <repository> <refs>..."
+ echo >&2 "usage: $0 [--heads] [--tags] [-u|--upload-pack <upload-pack>]"
+ echo >&2 " <repository> <refs>..."
exit 1;
}
-while case "$#" in 0) break;; esac
+die () {
+ echo >&2 "$*"
+ exit 1
+}
+
+exec=
+while test $# != 0
do
case "$1" in
-h|--h|--he|--hea|--head|--heads)
heads=heads; shift ;;
-t|--t|--ta|--tag|--tags)
tags=tags; shift ;;
+ -u|--u|--up|--upl|--uploa|--upload|--upload-|--upload-p|--upload-pa|\
+ --upload-pac|--upload-pack)
+ shift
+ exec="--upload-pack=$1"
+ shift;;
+ -u=*|--u=*|--up=*|--upl=*|--uplo=*|--uploa=*|--upload=*|\
+ --upload-=*|--upload-p=*|--upload-pa=*|--upload-pac=*|--upload-pack=*)
+ exec=--upload-pack=$(expr "z$1" : 'z-[^=]*=\(.*\)')
+ shift;;
--)
shift; break ;;
-*)
tmpdir=$tmp-d
case "$peek_repo" in
-http://* | https://* )
- if [ -n "$GIT_SSL_NO_VERIFY" ]; then
- curl_extra_args="-k"
- fi
- curl -nsf $curl_extra_args "$peek_repo/info/refs" || exit 1
+http://* | https://* | ftp://* )
+ if [ -n "$GIT_SSL_NO_VERIFY" -o \
+ "`git config --bool http.sslVerify`" = false ]; then
+ curl_extra_args="-k"
+ fi
+ if [ -n "$GIT_CURL_FTP_NO_EPSV" -o \
+ "`git config --bool http.noEPSV`" = true ]; then
+ curl_extra_args="${curl_extra_args} --disable-epsv"
+ fi
+ curl -nsf $curl_extra_args --header "Pragma: no-cache" "$peek_repo/info/refs" ||
+ echo "failed slurping"
;;
rsync://* )
- mkdir $tmpdir
- rsync -rq "$peek_repo/refs" $tmpdir || exit 1
+ mkdir $tmpdir &&
+ rsync -rlq "$peek_repo/HEAD" $tmpdir &&
+ rsync -rq "$peek_repo/refs" $tmpdir || {
+ echo "failed slurping"
+ exit
+ }
+ head=$(cat "$tmpdir/HEAD") &&
+ case "$head" in
+ ref:' '*)
+ head=$(expr "z$head" : 'zref: \(.*\)') &&
+ head=$(cat "$tmpdir/$head") || exit
+ esac &&
+ echo "$head HEAD"
(cd $tmpdir && find refs -type f) |
while read path
do
- cat "$tmpdir/$path" | tr -d '\012'
+ tr -d '\012' <"$tmpdir/$path"
echo " $path"
done &&
rm -fr $tmpdir
;;
* )
- git-peek-remote "$peek_repo"
+ if test -f "$peek_repo" ; then
+ git bundle list-heads "$peek_repo" ||
+ echo "failed slurping"
+ else
+ git-peek-remote $exec "$peek_repo" ||
+ echo "failed slurping"
+ fi
;;
esac |
sort -t ' ' -k 2 |
while read sha1 path
do
+ case "$sha1" in
+ failed)
+ exit 1 ;;
+ esac
case "$path" in
refs/heads/*)
group=heads ;;