Merge branch 'jc/detached-head-doc' into maint
[git] / t / t5514-fetch-multiple.sh
1 #!/bin/sh
2
3 test_description='fetch --all works correctly'
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 test_expect_success setup '
25         setup_repository one &&
26         setup_repository two &&
27         (
28                 cd two && git branch another
29         ) &&
30         git clone --mirror two three &&
31         git clone one test
32 '
33
34 cat > test/expect << EOF
35   one/master
36   one/side
37   origin/HEAD -> origin/master
38   origin/master
39   origin/side
40   three/another
41   three/master
42   three/side
43   two/another
44   two/master
45   two/side
46 EOF
47
48 test_expect_success 'git fetch --all' '
49         (cd test &&
50          git remote add one ../one &&
51          git remote add two ../two &&
52          git remote add three ../three &&
53          git fetch --all &&
54          git branch -r > output &&
55          test_cmp expect output)
56 '
57
58 test_expect_success 'git fetch --all should continue if a remote has errors' '
59         (git clone one test2 &&
60          cd test2 &&
61          git remote add bad ../non-existing &&
62          git remote add one ../one &&
63          git remote add two ../two &&
64          git remote add three ../three &&
65          test_must_fail git fetch --all &&
66          git branch -r > output &&
67          test_cmp ../test/expect output)
68 '
69
70 test_expect_success 'git fetch --all does not allow non-option arguments' '
71         (cd test &&
72          test_must_fail git fetch --all origin &&
73          test_must_fail git fetch --all origin master)
74 '
75
76 cat > expect << EOF
77   origin/HEAD -> origin/master
78   origin/master
79   origin/side
80   three/another
81   three/master
82   three/side
83 EOF
84
85 test_expect_success 'git fetch --multiple (but only one remote)' '
86         (git clone one test3 &&
87          cd test3 &&
88          git remote add three ../three &&
89          git fetch --multiple three &&
90          git branch -r > output &&
91          test_cmp ../expect output)
92 '
93
94 cat > expect << EOF
95   one/master
96   one/side
97   two/another
98   two/master
99   two/side
100 EOF
101
102 test_expect_success 'git fetch --multiple (two remotes)' '
103         (git clone one test4 &&
104          cd test4 &&
105          git remote rm origin &&
106          git remote add one ../one &&
107          git remote add two ../two &&
108          git fetch --multiple one two &&
109          git branch -r > output &&
110          test_cmp ../expect output)
111 '
112
113 test_expect_success 'git fetch --multiple (bad remote names)' '
114         (cd test4 &&
115          test_must_fail git fetch --multiple four)
116 '
117
118
119 test_expect_success 'git fetch --all (skipFetchAll)' '
120         (cd test4 &&
121          for b in $(git branch -r)
122          do
123                 git branch -r -d $b || break
124          done &&
125          git remote add three ../three &&
126          git config remote.three.skipFetchAll true &&
127          git fetch --all &&
128          git branch -r > output &&
129          test_cmp ../expect output)
130 '
131
132 cat > expect << EOF
133   one/master
134   one/side
135   three/another
136   three/master
137   three/side
138   two/another
139   two/master
140   two/side
141 EOF
142
143 test_expect_success 'git fetch --multiple (ignoring skipFetchAll)' '
144         (cd test4 &&
145          for b in $(git branch -r)
146          do
147                 git branch -r -d $b || break
148          done &&
149          git fetch --multiple one two three &&
150          git branch -r > output &&
151          test_cmp ../expect output)
152 '
153
154 test_expect_success 'git fetch --all --no-tags' '
155         >expect &&
156         git clone one test5 &&
157         git clone test5 test6 &&
158         (cd test5 && git tag test-tag) &&
159         (
160                 cd test6 &&
161                 git fetch --all --no-tags &&
162                 git tag >output
163         ) &&
164         test_cmp expect test6/output
165 '
166
167 test_expect_success 'git fetch --all --tags' '
168         echo test-tag >expect &&
169         git clone one test7 &&
170         git clone test7 test8 &&
171         (
172                 cd test7 &&
173                 test_commit test-tag &&
174                 git reset --hard HEAD^
175         ) &&
176         (
177                 cd test8 &&
178                 git fetch --all --tags &&
179                 git tag >output
180         ) &&
181         test_cmp expect test8/output
182 '
183
184 test_done