| #!/bin/sh |
| # |
| . git-sh-setup-script || die "Not a git archive" |
| |
| usage () { |
| echo >&2 "usage: $0 [--heads] [--tags] [--overwrite | --store] repo" |
| exit 1; |
| } |
| |
| while case "$#" in 0) break;; esac |
| do |
| case "$1" in |
| -h|--h|--he|--hea|--head|--heads) |
| heads=heads; shift ;; |
| -o|--o|--ov|--ove|--over|--overw|--overwr|--overwri|--overwrit|--overwrite) |
| overwrite=overwrite; shift ;; |
| -s|--s|--st|--sto|--stor|--store) |
| store=store; shift ;; |
| -t|--t|--ta|--tag|--tags) |
| tags=tags; shift ;; |
| --) |
| shift; break ;; |
| -*) |
| usage ;; |
| *) |
| break ;; |
| esac |
| done |
| |
| case "$#" in 1) ;; *) usage ;; esac |
| case ",$store,$overwrite," in *,,*) ;; *) usage ;; esac |
| |
| case ",$heads,$tags," in |
| ,,,) heads=heads tags=tags other=other ;; |
| esac |
| |
| . git-parse-remote "$@" |
| peek_repo="$_remote_repo" |
| |
| 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 -ns $curl_extra_args "$peek_repo/info/refs" || exit 1 |
| ;; |
| |
| rsync://* ) |
| mkdir $tmpdir |
| rsync -rq "$peek_repo/refs" $tmpdir || exit 1 |
| (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" |
| ;; |
| esac | |
| |
| while read sha1 path |
| do |
| case "$path" in |
| refs/heads/*) |
| group=heads ;; |
| refs/tags/*) |
| group=tags ;; |
| *) |
| group=other ;; |
| esac |
| case ",$heads,$tags,$other," in |
| *,$group,*) |
| ;; |
| *) |
| continue;; |
| esac |
| |
| echo "$sha1 $path" |
| |
| case "$path,$store,$overwrite," in |
| *,,, | HEAD,*) continue ;; |
| esac |
| |
| if test -f "$GIT_DIR/$path" && test "$overwrite" == "" |
| then |
| continue |
| fi |
| |
| # Be careful. We may not have that object yet! |
| if git-cat-file -t "$sha1" >/dev/null 2>&1 |
| then |
| echo "$sha1" >"$GIT_DIR/$path" |
| else |
| echo >&2 "* You have not fetched updated $path ($sha1)." |
| fi |
| done |