Teach the --multiple option to 'git fetch'
[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   origin/HEAD -> origin/master
98   origin/master
99   origin/side
100   two/another
101   two/master
102   two/side
103 EOF
104
105 test_expect_success 'git fetch --multiple (two remotes)' '
106         (git clone one test4 &&
107          cd test4 &&
108          git remote add one ../one &&
109          git remote add two ../two &&
110          git fetch --multiple one two &&
111          git branch -r > output &&
112          test_cmp ../expect output)
113 '
114
115 test_expect_success 'git fetch --multiple (bad remote names)' '
116         (cd test4 &&
117          test_must_fail git fetch --multiple four)
118 '
119
120 test_done