Big tool rename.
[git.git] / git-ls-remote.sh
diff --git a/git-ls-remote.sh b/git-ls-remote.sh
new file mode 100755 (executable)
index 0000000..604c5f5
--- /dev/null
@@ -0,0 +1,100 @@
+#!/bin/sh
+#
+. git-sh-setup || die "Not a git archive"
+
+usage () {
+    echo >&2 "usage: $0 [--heads] [--tags] <repository> <refs>..."
+    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" || 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 |
+sort -t '      ' -k 2 |
+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
+       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