]>
Commit | Line | Data |
---|---|---|
0fec0822 JH |
1 | #!/bin/sh |
2 | # | |
3 | . git-sh-setup-script || die "Not a git archive" | |
4 | ||
5 | usage () { | |
6 | echo >&2 "usage: $0 [--heads] [--tags] [--overwrite | --store] repo" | |
7 | exit 1; | |
8 | } | |
9 | ||
10 | while case "$#" in 0) break;; esac | |
11 | do | |
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 | |
28 | done | |
29 | ||
30 | case "$#" in 1) ;; *) usage ;; esac | |
31 | case ",$store,$overwrite," in *,,*) ;; *) usage ;; esac | |
32 | ||
33 | case ",$heads,$tags," in | |
34 | ,,,) heads=heads tags=tags other=other ;; | |
35 | esac | |
36 | ||
37 | . git-parse-remote "$@" | |
38 | peek_repo="$_remote_repo" | |
39 | ||
40 | tmp=.ls-remote-$$ | |
41 | trap "rm -fr $tmp-*" 0 1 2 3 15 | |
42 | tmpdir=$tmp-d | |
43 | ||
44 | case "$peek_repo" in | |
45 | http://* | 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 | ||
52 | rsync://* ) | |
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 | ;; | |
67 | esac | | |
68 | ||
69 | while read sha1 path | |
70 | do | |
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 | |
104 | done |