Junio C Hamano | 0fec082 | 2005-07-23 17:54:26 -0700 | [diff] [blame] | 1 | #!/bin/sh |
| 2 | # |
Junio C Hamano | 0fec082 | 2005-07-23 17:54:26 -0700 | [diff] [blame] | 3 | |
| 4 | usage () { |
Michal Ostrowski | 96b086d | 2006-01-20 13:38:16 -0500 | [diff] [blame] | 5 | echo >&2 "usage: $0 [--heads] [--tags] [-u|--upload-pack <upload-pack>]" |
| 6 | echo >&2 " <repository> <refs>..." |
Junio C Hamano | 0fec082 | 2005-07-23 17:54:26 -0700 | [diff] [blame] | 7 | exit 1; |
| 8 | } |
| 9 | |
Junio C Hamano | 1abacf3 | 2005-11-27 23:15:02 -0800 | [diff] [blame] | 10 | die () { |
| 11 | echo >&2 "$*" |
| 12 | exit 1 |
| 13 | } |
| 14 | |
Michal Ostrowski | 96b086d | 2006-01-20 13:38:16 -0500 | [diff] [blame] | 15 | exec= |
David Kastrup | 822f7c7 | 2007-09-23 22:42:08 +0200 | [diff] [blame] | 16 | while test $# != 0 |
Junio C Hamano | 0fec082 | 2005-07-23 17:54:26 -0700 | [diff] [blame] | 17 | do |
| 18 | case "$1" in |
| 19 | -h|--h|--he|--hea|--head|--heads) |
| 20 | heads=heads; shift ;; |
Junio C Hamano | 0fec082 | 2005-07-23 17:54:26 -0700 | [diff] [blame] | 21 | -t|--t|--ta|--tag|--tags) |
| 22 | tags=tags; shift ;; |
Michal Ostrowski | 96b086d | 2006-01-20 13:38:16 -0500 | [diff] [blame] | 23 | -u|--u|--up|--upl|--uploa|--upload|--upload-|--upload-p|--upload-pa|\ |
| 24 | --upload-pac|--upload-pack) |
| 25 | shift |
Junio C Hamano | ae1dffc | 2007-01-23 00:51:53 -0800 | [diff] [blame] | 26 | 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. Pearce | 4a91a1f | 2007-01-30 13:11:49 -0500 | [diff] [blame] | 30 | exec=--upload-pack=$(expr "z$1" : 'z-[^=]*=\(.*\)') |
Michal Ostrowski | 96b086d | 2006-01-20 13:38:16 -0500 | [diff] [blame] | 31 | shift;; |
Junio C Hamano | 0fec082 | 2005-07-23 17:54:26 -0700 | [diff] [blame] | 32 | --) |
| 33 | shift; break ;; |
| 34 | -*) |
| 35 | usage ;; |
| 36 | *) |
| 37 | break ;; |
| 38 | esac |
| 39 | done |
| 40 | |
Junio C Hamano | 972b6fe | 2005-08-08 01:20:03 -0700 | [diff] [blame] | 41 | case "$#" in 0) usage ;; esac |
Junio C Hamano | 0fec082 | 2005-07-23 17:54:26 -0700 | [diff] [blame] | 42 | |
| 43 | case ",$heads,$tags," in |
| 44 | ,,,) heads=heads tags=tags other=other ;; |
| 45 | esac |
| 46 | |
Junio C Hamano | 215a7ad | 2005-09-07 17:26:23 -0700 | [diff] [blame] | 47 | . git-parse-remote |
Junio C Hamano | e0bfc81 | 2005-08-20 02:57:26 -0700 | [diff] [blame] | 48 | peek_repo="$(get_remote_url "$@")" |
Junio C Hamano | 972b6fe | 2005-08-08 01:20:03 -0700 | [diff] [blame] | 49 | shift |
Junio C Hamano | 0fec082 | 2005-07-23 17:54:26 -0700 | [diff] [blame] | 50 | |
| 51 | tmp=.ls-remote-$$ |
| 52 | trap "rm -fr $tmp-*" 0 1 2 3 15 |
| 53 | tmpdir=$tmp-d |
| 54 | |
| 55 | case "$peek_repo" in |
Sasha Khapyorsky | 38529e2 | 2006-09-14 05:24:04 +0300 | [diff] [blame] | 56 | http://* | https://* | ftp://* ) |
Aurelien Bompard | 1c1f79a | 2007-10-28 18:47:30 +0100 | [diff] [blame] | 57 | if [ -n "$GIT_SSL_NO_VERIFY" -o \ |
Elia Pinto | 1b3cddd | 2014-04-16 10:29:51 -0700 | [diff] [blame] | 58 | "$(git config --bool http.sslVerify)" = false ]; then |
Aurelien Bompard | 1c1f79a | 2007-10-28 18:47:30 +0100 | [diff] [blame] | 59 | curl_extra_args="-k" |
| 60 | fi |
Sasha Khapyorsky | 3ea099d | 2006-09-29 03:10:44 +0300 | [diff] [blame] | 61 | if [ -n "$GIT_CURL_FTP_NO_EPSV" -o \ |
Elia Pinto | 1b3cddd | 2014-04-16 10:29:51 -0700 | [diff] [blame] | 62 | "$(git config --bool http.noEPSV)" = true ]; then |
Sasha Khapyorsky | 3ea099d | 2006-09-29 03:10:44 +0300 | [diff] [blame] | 63 | curl_extra_args="${curl_extra_args} --disable-epsv" |
| 64 | fi |
Nick Hengeveld | 7fa8ddd | 2006-04-04 11:01:30 -0700 | [diff] [blame] | 65 | curl -nsf $curl_extra_args --header "Pragma: no-cache" "$peek_repo/info/refs" || |
Junio C Hamano | a5cd85e | 2005-09-13 13:16:45 -0700 | [diff] [blame] | 66 | echo "failed slurping" |
Junio C Hamano | 0fec082 | 2005-07-23 17:54:26 -0700 | [diff] [blame] | 67 | ;; |
| 68 | |
| 69 | rsync://* ) |
Junio C Hamano | e686eba | 2006-05-24 21:36:14 -0700 | [diff] [blame] | 70 | mkdir $tmpdir && |
| 71 | rsync -rlq "$peek_repo/HEAD" $tmpdir && |
Junio C Hamano | a5cd85e | 2005-09-13 13:16:45 -0700 | [diff] [blame] | 72 | rsync -rq "$peek_repo/refs" $tmpdir || { |
| 73 | echo "failed slurping" |
| 74 | exit |
| 75 | } |
Junio C Hamano | e686eba | 2006-05-24 21:36:14 -0700 | [diff] [blame] | 76 | 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 Hamano | 0fec082 | 2005-07-23 17:54:26 -0700 | [diff] [blame] | 83 | (cd $tmpdir && find refs -type f) | |
| 84 | while read path |
| 85 | do |
Josh Triplett | 9d6f220 | 2007-07-14 01:05:43 -0700 | [diff] [blame] | 86 | tr -d '\012' <"$tmpdir/$path" |
Junio C Hamano | 0fec082 | 2005-07-23 17:54:26 -0700 | [diff] [blame] | 87 | echo " $path" |
| 88 | done && |
| 89 | rm -fr $tmpdir |
| 90 | ;; |
| 91 | |
| 92 | * ) |
Johannes Schindelin | 2e0afaf | 2007-02-22 01:59:14 +0100 | [diff] [blame] | 93 | if test -f "$peek_repo" ; then |
| 94 | git bundle list-heads "$peek_repo" || |
Junio C Hamano | a5cd85e | 2005-09-13 13:16:45 -0700 | [diff] [blame] | 95 | echo "failed slurping" |
Johannes Schindelin | 2e0afaf | 2007-02-22 01:59:14 +0100 | [diff] [blame] | 96 | else |
| 97 | git-peek-remote $exec "$peek_repo" || |
| 98 | echo "failed slurping" |
| 99 | fi |
Junio C Hamano | 0fec082 | 2005-07-23 17:54:26 -0700 | [diff] [blame] | 100 | ;; |
| 101 | esac | |
Junio C Hamano | 972b6fe | 2005-08-08 01:20:03 -0700 | [diff] [blame] | 102 | sort -t ' ' -k 2 | |
Junio C Hamano | 0fec082 | 2005-07-23 17:54:26 -0700 | [diff] [blame] | 103 | while read sha1 path |
| 104 | do |
Junio C Hamano | a5cd85e | 2005-09-13 13:16:45 -0700 | [diff] [blame] | 105 | case "$sha1" in |
| 106 | failed) |
Nicolas Pitre | b3d9899 | 2006-12-18 15:16:58 -0500 | [diff] [blame] | 107 | exit 1 ;; |
Junio C Hamano | a5cd85e | 2005-09-13 13:16:45 -0700 | [diff] [blame] | 108 | esac |
Junio C Hamano | 0fec082 | 2005-07-23 17:54:26 -0700 | [diff] [blame] | 109 | 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 Hamano | 972b6fe | 2005-08-08 01:20:03 -0700 | [diff] [blame] | 123 | 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 Hamano | 0fec082 | 2005-07-23 17:54:26 -0700 | [diff] [blame] | 136 | esac |
Junio C Hamano | 972b6fe | 2005-08-08 01:20:03 -0700 | [diff] [blame] | 137 | case "$match" in |
| 138 | no) |
| 139 | continue ;; |
| 140 | esac |
| 141 | echo "$sha1 $path" |
Junio C Hamano | 0fec082 | 2005-07-23 17:54:26 -0700 | [diff] [blame] | 142 | done |