#!/bin/sh # usage () { echo >&2 "usage: $0 [--heads] [--tags] ..." exit 1; } die () { echo >&2 "$*" exit 1 } 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 ;; --) 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://* ) if [ -n "$GIT_SSL_NO_VERIFY" ]; then curl_extra_args="-k" fi curl -nsf $curl_extra_args "$peek_repo/info/refs" || echo "failed slurping" ;; rsync://* ) mkdir $tmpdir rsync -rq "$peek_repo/refs" $tmpdir || { echo "failed slurping" exit } (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 "$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