]> asedeno.scripts.mit.edu Git - git.git/blob - t/t5505-remote.sh
remote: fix "update [group...]"
[git.git] / t / t5505-remote.sh
1 #!/bin/sh
2
3 test_description='git remote porcelain-ish'
4
5 . ./test-lib.sh
6
7 setup_repository () {
8         mkdir "$1" && (
9         cd "$1" &&
10         git init &&
11         >file &&
12         git add file &&
13         test_tick &&
14         git commit -m "Initial" &&
15         git checkout -b side &&
16         >elif &&
17         git add elif &&
18         test_tick &&
19         git commit -m "Second" &&
20         git checkout master
21         )
22 }
23
24 tokens_match () {
25         echo "$1" | tr ' ' '\012' | sort | sed -e '/^$/d' >expect &&
26         echo "$2" | tr ' ' '\012' | sort | sed -e '/^$/d' >actual &&
27         diff -u expect actual
28 }
29
30 check_remote_track () {
31         actual=$(git remote show "$1" | sed -n -e '$p') &&
32         shift &&
33         tokens_match "$*" "$actual"
34 }
35
36 check_tracking_branch () {
37         f="" &&
38         r=$(git for-each-ref "--format=%(refname)" |
39                 sed -ne "s|^refs/remotes/$1/||p") &&
40         shift &&
41         tokens_match "$*" "$r"
42 }
43
44 test_expect_success setup '
45
46         setup_repository one &&
47         setup_repository two &&
48         (
49                 cd two && git branch another
50         ) &&
51         git clone one test
52
53 '
54
55 test_expect_success 'remote information for the origin' '
56 (
57         cd test &&
58         tokens_match origin "$(git remote)" &&
59         check_remote_track origin master side &&
60         check_tracking_branch origin HEAD master side
61 )
62 '
63
64 test_expect_success 'add another remote' '
65 (
66         cd test &&
67         git remote add -f second ../two &&
68         tokens_match "origin second" "$(git remote)" &&
69         check_remote_track origin master side &&
70         check_remote_track second master side another &&
71         check_tracking_branch second master side another &&
72         git for-each-ref "--format=%(refname)" refs/remotes |
73         sed -e "/^refs\/remotes\/origin\//d" \
74             -e "/^refs\/remotes\/second\//d" >actual &&
75         >expect &&
76         diff -u expect actual
77 )
78 '
79
80 test_expect_success 'remove remote' '
81 (
82         cd test &&
83         git remote rm second
84 )
85 '
86
87 test_expect_success 'remove remote' '
88 (
89         cd test &&
90         tokens_match origin "$(git remote)" &&
91         check_remote_track origin master side &&
92         git for-each-ref "--format=%(refname)" refs/remotes |
93         sed -e "/^refs\/remotes\/origin\//d" >actual &&
94         >expect &&
95         diff -u expect actual
96 )
97 '
98
99 cat > test/expect << EOF
100 * remote origin
101   URL: $(pwd)/one/.git
102   Remote branch merged with 'git pull' while on branch master
103     master
104   New remote branch (next fetch will store in remotes/origin)
105     master
106   Tracked remote branches
107     side master
108 EOF
109
110 test_expect_success 'show' '
111         (cd test &&
112          git config --add remote.origin.fetch \
113                 refs/heads/master:refs/heads/upstream &&
114          git fetch &&
115          git branch -d -r origin/master &&
116          (cd ../one &&
117           echo 1 > file &&
118           test_tick &&
119           git commit -m update file) &&
120          git remote show origin > output &&
121          git diff expect output)
122 '
123
124 test_expect_success 'prune' '
125         (cd one &&
126          git branch -m side side2) &&
127         (cd test &&
128          git fetch origin &&
129          git remote prune origin &&
130          git rev-parse refs/remotes/origin/side2 &&
131          ! git rev-parse refs/remotes/origin/side)
132 '
133
134 test_expect_success 'add --mirror && prune' '
135         (mkdir mirror &&
136          cd mirror &&
137          git init &&
138          git remote add --mirror -f origin ../one) &&
139         (cd one &&
140          git branch -m side2 side) &&
141         (cd mirror &&
142          git rev-parse --verify refs/heads/side2 &&
143          ! git rev-parse --verify refs/heads/side &&
144          git fetch origin &&
145          git remote prune origin &&
146          ! git rev-parse --verify refs/heads/side2 &&
147          git rev-parse --verify refs/heads/side)
148 '
149
150 cat > one/expect << EOF
151   apis/master
152   apis/side
153   drosophila/another
154   drosophila/master
155   drosophila/side
156 EOF
157
158 test_expect_success 'update' '
159
160         (cd one &&
161          git remote add drosophila ../two &&
162          git remote add apis ../mirror &&
163          git remote update &&
164          git branch -r > output &&
165          git diff expect output)
166
167 '
168
169 cat > one/expect << EOF
170   drosophila/another
171   drosophila/master
172   drosophila/side
173   manduca/master
174   manduca/side
175   megaloprepus/master
176   megaloprepus/side
177 EOF
178
179 test_expect_success 'update with arguments' '
180
181         (cd one &&
182          for b in $(git branch -r)
183          do
184                 git branch -r -d $b || break
185          done &&
186          git remote add manduca ../mirror &&
187          git remote add megaloprepus ../mirror &&
188          git config remotes.phobaeticus "drosophila megaloprepus" &&
189          git config remotes.titanus manduca &&
190          git remote update phobaeticus titanus &&
191          git branch -r > output &&
192          git diff expect output)
193
194 '
195
196 cat > one/expect << EOF
197   apis/master
198   apis/side
199   manduca/master
200   manduca/side
201   megaloprepus/master
202   megaloprepus/side
203 EOF
204
205 test_expect_success 'update default' '
206
207         (cd one &&
208          for b in $(git branch -r)
209          do
210                 git branch -r -d $b || break
211          done &&
212          git config remote.drosophila.skipDefaultUpdate true &&
213          git remote update default &&
214          git branch -r > output &&
215          git diff expect output)
216
217 '
218
219 cat > one/expect << EOF
220   drosophila/another
221   drosophila/master
222   drosophila/side
223 EOF
224
225 test_expect_success 'update default (overridden, with funny whitespace)' '
226
227         (cd one &&
228          for b in $(git branch -r)
229          do
230                 git branch -r -d $b || break
231          done &&
232          git config remotes.default "$(printf "\t drosophila  \n")" &&
233          git remote update default &&
234          git branch -r > output &&
235          git diff expect output)
236
237 '
238
239 test_done