git-ls-remote-scripton commit Merge with gitk. (638ccfd)
   1#!/bin/sh
   2#
   3. git-sh-setup-script || die "Not a git archive"
   4
   5usage () {
   6    echo >&2 "usage: $0 [--heads] [--tags] [--overwrite | --store] repo"
   7    exit 1;
   8}
   9
  10while case "$#" in 0) break;; esac
  11do
  12  case "$1" in
  13  -h|--h|--he|--hea|--head|--heads)
  14  heads=heads; shift ;;
  15  -o|--o|--ov|--ove|--over|--overw|--overwr|--overwri|--overwrit|--overwrite)
  16  overwrite=overwrite; shift ;;
  17  -s|--s|--st|--sto|--stor|--store)
  18  store=store; shift ;;
  19  -t|--t|--ta|--tag|--tags)
  20  tags=tags; shift ;;
  21  --)
  22  shift; break ;;
  23  -*)
  24  usage ;;
  25  *)
  26  break ;;
  27  esac
  28done
  29
  30case "$#" in 1) ;; *) usage ;; esac
  31case ",$store,$overwrite," in *,,*) ;; *) usage ;; esac
  32
  33case ",$heads,$tags," in
  34,,,) heads=heads tags=tags other=other ;;
  35esac
  36
  37. git-parse-remote "$@"
  38peek_repo="$_remote_repo"
  39
  40tmp=.ls-remote-$$
  41trap "rm -fr $tmp-*" 0 1 2 3 15
  42tmpdir=$tmp-d
  43
  44case "$peek_repo" in
  45http://* | https://* )
  46        if [ -n "$GIT_SSL_NO_VERIFY" ]; then
  47            curl_extra_args="-k"
  48        fi
  49        curl -ns $curl_extra_args "$peek_repo/info/refs" || exit 1
  50        ;;
  51
  52rsync://* )
  53        mkdir $tmpdir
  54        rsync -rq "$peek_repo/refs" $tmpdir || exit 1
  55        (cd $tmpdir && find refs -type f) |
  56        while read path
  57        do
  58                cat "$tmpdir/$path" | tr -d '\012'
  59                echo "  $path"
  60        done &&
  61        rm -fr $tmpdir
  62        ;;
  63
  64* )
  65        git-peek-remote "$peek_repo"
  66        ;;
  67esac |
  68
  69while read sha1 path
  70do
  71        case "$path" in
  72        refs/heads/*)
  73                group=heads ;;
  74        refs/tags/*)
  75                group=tags ;;
  76        *)
  77                group=other ;;
  78        esac
  79        case ",$heads,$tags,$other," in
  80        *,$group,*)
  81                ;;
  82        *)
  83                continue;;
  84        esac
  85
  86        echo "$sha1     $path"
  87
  88        case "$path,$store,$overwrite," in
  89        *,,, | HEAD,*) continue ;;
  90        esac
  91
  92        if test -f "$GIT_DIR/$path" && test "$overwrite" == ""
  93        then
  94                continue
  95        fi
  96
  97        # Be careful.  We may not have that object yet!
  98        if git-cat-file -t "$sha1" >/dev/null 2>&1
  99        then
 100                echo "$sha1" >"$GIT_DIR/$path"
 101        else
 102                echo >&2 "* You have not fetched updated $path ($sha1)."
 103        fi
 104done