1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132
|
#!/bin/sh
#
usage () {
echo >&2 "usage: $0 [--heads] [--tags] [-u|--upload-pack <upload-pack>]"
echo >&2 " <repository> <refs>..."
exit 1;
}
die () {
echo >&2 "$*"
exit 1
}
exec=
while case "$#" in 0) break;; esac
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="--exec=$1"
shift;;
--)
shift; break ;;
-*)
usage ;;
*)
break ;;
esac
done
case "$#" in 0) usage ;; esac
case ",$heads,$tags," in
,,,) heads=heads tags=tags other=other ;;
esac
. git-parse-remote
peek_repo="$(get_remote_url "$@")"
shift
tmp=.ls-remote-$$
trap "rm -fr $tmp-*" 0 1 2 3 15
tmpdir=$tmp-d
case "$peek_repo" in
http://* | https://* | ftp://* )
if [ -n "$GIT_SSL_NO_VERIFY" ]; then
curl_extra_args="-k"
fi
if [ -n "$GIT_CURL_FTP_NO_EPSV" -o \
"`git-repo-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 -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'
echo " $path"
done &&
rm -fr $tmpdir
;;
* )
git-peek-remote $exec "$peek_repo" ||
echo "failed slurping"
;;
esac |
sort -t ' ' -k 2 |
while read sha1 path
do
case "$sha1" in
failed)
die "Failed to find remote refs"
esac
case "$path" in
refs/heads/*)
group=heads ;;
refs/tags/*)
group=tags ;;
*)
group=other ;;
esac
case ",$heads,$tags,$other," in
*,$group,*)
;;
*)
continue;;
esac
case "$#" in
0)
match=yes ;;
*)
match=no
for pat
do
case "/$path" in
*/$pat )
match=yes
break ;;
esac
done
esac
case "$match" in
no)
continue ;;
esac
echo "$sha1 $path"
done
|