blob: 2aa89a7df8ecd1ca8655fda650a4abd4a08a4cc6 [file] [log] [blame]
Junio C Hamano0fec0822005-07-23 17:54:26 -07001#!/bin/sh
2#
Junio C Hamano0fec0822005-07-23 17:54:26 -07003
4usage () {
Michal Ostrowski96b086d2006-01-20 13:38:16 -05005 echo >&2 "usage: $0 [--heads] [--tags] [-u|--upload-pack <upload-pack>]"
6 echo >&2 " <repository> <refs>..."
Junio C Hamano0fec0822005-07-23 17:54:26 -07007 exit 1;
8}
9
Junio C Hamano1abacf32005-11-27 23:15:02 -080010die () {
11 echo >&2 "$*"
12 exit 1
13}
14
Michal Ostrowski96b086d2006-01-20 13:38:16 -050015exec=
David Kastrup822f7c72007-09-23 22:42:08 +020016while test $# != 0
Junio C Hamano0fec0822005-07-23 17:54:26 -070017do
18 case "$1" in
19 -h|--h|--he|--hea|--head|--heads)
20 heads=heads; shift ;;
Junio C Hamano0fec0822005-07-23 17:54:26 -070021 -t|--t|--ta|--tag|--tags)
22 tags=tags; shift ;;
Michal Ostrowski96b086d2006-01-20 13:38:16 -050023 -u|--u|--up|--upl|--uploa|--upload|--upload-|--upload-p|--upload-pa|\
24 --upload-pac|--upload-pack)
25 shift
Junio C Hamanoae1dffc2007-01-23 00:51:53 -080026 exec="--upload-pack=$1"
27 shift;;
28 -u=*|--u=*|--up=*|--upl=*|--uplo=*|--uploa=*|--upload=*|\
29 --upload-=*|--upload-p=*|--upload-pa=*|--upload-pac=*|--upload-pack=*)
Shawn O. Pearce4a91a1f2007-01-30 13:11:49 -050030 exec=--upload-pack=$(expr "z$1" : 'z-[^=]*=\(.*\)')
Michal Ostrowski96b086d2006-01-20 13:38:16 -050031 shift;;
Junio C Hamano0fec0822005-07-23 17:54:26 -070032 --)
33 shift; break ;;
34 -*)
35 usage ;;
36 *)
37 break ;;
38 esac
39done
40
Junio C Hamano972b6fe2005-08-08 01:20:03 -070041case "$#" in 0) usage ;; esac
Junio C Hamano0fec0822005-07-23 17:54:26 -070042
43case ",$heads,$tags," in
44,,,) heads=heads tags=tags other=other ;;
45esac
46
Junio C Hamano215a7ad2005-09-07 17:26:23 -070047. git-parse-remote
Junio C Hamanoe0bfc812005-08-20 02:57:26 -070048peek_repo="$(get_remote_url "$@")"
Junio C Hamano972b6fe2005-08-08 01:20:03 -070049shift
Junio C Hamano0fec0822005-07-23 17:54:26 -070050
51tmp=.ls-remote-$$
52trap "rm -fr $tmp-*" 0 1 2 3 15
53tmpdir=$tmp-d
54
55case "$peek_repo" in
Sasha Khapyorsky38529e22006-09-14 05:24:04 +030056http://* | https://* | ftp://* )
Aurelien Bompard1c1f79a2007-10-28 18:47:30 +010057 if [ -n "$GIT_SSL_NO_VERIFY" -o \
Elia Pinto1b3cddd2014-04-16 10:29:51 -070058 "$(git config --bool http.sslVerify)" = false ]; then
Aurelien Bompard1c1f79a2007-10-28 18:47:30 +010059 curl_extra_args="-k"
60 fi
Sasha Khapyorsky3ea099d2006-09-29 03:10:44 +030061 if [ -n "$GIT_CURL_FTP_NO_EPSV" -o \
Elia Pinto1b3cddd2014-04-16 10:29:51 -070062 "$(git config --bool http.noEPSV)" = true ]; then
Sasha Khapyorsky3ea099d2006-09-29 03:10:44 +030063 curl_extra_args="${curl_extra_args} --disable-epsv"
64 fi
Nick Hengeveld7fa8ddd2006-04-04 11:01:30 -070065 curl -nsf $curl_extra_args --header "Pragma: no-cache" "$peek_repo/info/refs" ||
Junio C Hamanoa5cd85e2005-09-13 13:16:45 -070066 echo "failed slurping"
Junio C Hamano0fec0822005-07-23 17:54:26 -070067 ;;
68
69rsync://* )
Junio C Hamanoe686eba2006-05-24 21:36:14 -070070 mkdir $tmpdir &&
71 rsync -rlq "$peek_repo/HEAD" $tmpdir &&
Junio C Hamanoa5cd85e2005-09-13 13:16:45 -070072 rsync -rq "$peek_repo/refs" $tmpdir || {
73 echo "failed slurping"
74 exit
75 }
Junio C Hamanoe686eba2006-05-24 21:36:14 -070076 head=$(cat "$tmpdir/HEAD") &&
77 case "$head" in
78 ref:' '*)
79 head=$(expr "z$head" : 'zref: \(.*\)') &&
80 head=$(cat "$tmpdir/$head") || exit
81 esac &&
82 echo "$head HEAD"
Junio C Hamano0fec0822005-07-23 17:54:26 -070083 (cd $tmpdir && find refs -type f) |
84 while read path
85 do
Josh Triplett9d6f2202007-07-14 01:05:43 -070086 tr -d '\012' <"$tmpdir/$path"
Junio C Hamano0fec0822005-07-23 17:54:26 -070087 echo " $path"
88 done &&
89 rm -fr $tmpdir
90 ;;
91
92* )
Johannes Schindelin2e0afaf2007-02-22 01:59:14 +010093 if test -f "$peek_repo" ; then
94 git bundle list-heads "$peek_repo" ||
Junio C Hamanoa5cd85e2005-09-13 13:16:45 -070095 echo "failed slurping"
Johannes Schindelin2e0afaf2007-02-22 01:59:14 +010096 else
97 git-peek-remote $exec "$peek_repo" ||
98 echo "failed slurping"
99 fi
Junio C Hamano0fec0822005-07-23 17:54:26 -0700100 ;;
101esac |
Junio C Hamano972b6fe2005-08-08 01:20:03 -0700102sort -t ' ' -k 2 |
Junio C Hamano0fec0822005-07-23 17:54:26 -0700103while read sha1 path
104do
Junio C Hamanoa5cd85e2005-09-13 13:16:45 -0700105 case "$sha1" in
106 failed)
Nicolas Pitreb3d98992006-12-18 15:16:58 -0500107 exit 1 ;;
Junio C Hamanoa5cd85e2005-09-13 13:16:45 -0700108 esac
Junio C Hamano0fec0822005-07-23 17:54:26 -0700109 case "$path" in
110 refs/heads/*)
111 group=heads ;;
112 refs/tags/*)
113 group=tags ;;
114 *)
115 group=other ;;
116 esac
117 case ",$heads,$tags,$other," in
118 *,$group,*)
119 ;;
120 *)
121 continue;;
122 esac
Junio C Hamano972b6fe2005-08-08 01:20:03 -0700123 case "$#" in
124 0)
125 match=yes ;;
126 *)
127 match=no
128 for pat
129 do
130 case "/$path" in
131 */$pat )
132 match=yes
133 break ;;
134 esac
135 done
Junio C Hamano0fec0822005-07-23 17:54:26 -0700136 esac
Junio C Hamano972b6fe2005-08-08 01:20:03 -0700137 case "$match" in
138 no)
139 continue ;;
140 esac
141 echo "$sha1 $path"
Junio C Hamano0fec0822005-07-23 17:54:26 -0700142done