[PATCH] git-ls-remote: show and optionally store remote refs.

Retrieve and list the remote refs from git, http, and rsync
repositories, and optionally stores the retrieved refs in the
local repository under the same name.

To access a git URL, git-peek-remote command is used.  An http
URL needs to have an up-to-date info/refs file for discovery,
which will be introduced by a later update-server-info patch.

Signed-off-by: Junio C Hamano <junkio@cox.net>
Signed-off-by: Linus Torvalds <torvalds@osdl.org>
This commit is contained in:
Junio C Hamano 2005-07-23 17:54:26 -07:00 коммит произвёл Linus Torvalds
Родитель 508e67ab6e
Коммит 0fec082272
2 изменённых файлов: 106 добавлений и 1 удалений

Просмотреть файл

@ -36,7 +36,8 @@ SCRIPTS=git git-apply-patch-script git-merge-one-file-script git-prune-script \
git-reset-script git-add-script git-checkout-script git-clone-script \
gitk git-cherry git-rebase-script git-relink-script git-repack-script \
git-format-patch-script git-sh-setup-script git-push-script \
git-branch-script git-parse-remote git-verify-tag-script
git-branch-script git-parse-remote git-verify-tag-script \
git-ls-remote-script
PROG= git-update-cache git-diff-files git-init-db git-write-tree \
git-read-tree git-commit-tree git-cat-file git-fsck-cache \

104
git-ls-remote-script Executable file
Просмотреть файл

@ -0,0 +1,104 @@
#!/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