Merge git://ozlabs.org/~paulus/gitk
[git] / t / t5709-clone-refspec.sh
1 #!/bin/sh
2
3 test_description='test refspec written by clone-command'
4 . ./test-lib.sh
5
6 test_expect_success 'setup' '
7         # Make two branches, "master" and "side"
8         echo one >file &&
9         git add file &&
10         git commit -m one &&
11         echo two >file &&
12         git commit -a -m two &&
13         git tag two &&
14         echo three >file &&
15         git commit -a -m three &&
16         git checkout -b side &&
17         echo four >file &&
18         git commit -a -m four &&
19         git checkout master &&
20
21         # default clone
22         git clone . dir_all &&
23
24         # default --single that follows HEAD=master
25         git clone --single-branch . dir_master &&
26
27         # default --single that follows HEAD=side
28         git checkout side &&
29         git clone --single-branch . dir_side &&
30
31         # explicit --single that follows side
32         git checkout master &&
33         git clone --single-branch --branch side . dir_side2 &&
34
35         # default --single with --mirror
36         git clone --single-branch --mirror . dir_mirror &&
37
38         # default --single with --branch and --mirror
39         git clone --single-branch --mirror --branch side . dir_mirror_side &&
40
41         # --single that does not know what branch to follow
42         git checkout two^ &&
43         git clone --single-branch . dir_detached &&
44
45         # explicit --single with tag
46         git clone --single-branch --branch two . dir_tag &&
47
48         # advance both "master" and "side" branches
49         git checkout side &&
50         echo five >file &&
51         git commit -a -m five &&
52         git checkout master &&
53         echo six >file &&
54         git commit -a -m six &&
55
56         # update tag
57         git tag -d two && git tag two
58 '
59
60 test_expect_success 'by default all branches will be kept updated' '
61         (
62                 cd dir_all && git fetch &&
63                 git for-each-ref refs/remotes/origin |
64                 sed -e "/HEAD$/d" \
65                     -e "s|/remotes/origin/|/heads/|" >../actual
66         ) &&
67         # follow both master and side
68         git for-each-ref refs/heads >expect &&
69         test_cmp expect actual
70 '
71
72 test_expect_success 'by default no tags will be kept updated' '
73         (
74                 cd dir_all && git fetch &&
75                 git for-each-ref refs/tags >../actual
76         ) &&
77         git for-each-ref refs/tags >expect &&
78         test_must_fail test_cmp expect actual
79 '
80
81 test_expect_success '--single-branch while HEAD pointing at master' '
82         (
83                 cd dir_master && git fetch &&
84                 git for-each-ref refs/remotes/origin |
85                 sed -e "/HEAD$/d" \
86                     -e "s|/remotes/origin/|/heads/|" >../actual
87         ) &&
88         # only follow master
89         git for-each-ref refs/heads/master >expect &&
90         test_cmp expect actual
91 '
92
93 test_expect_success '--single-branch while HEAD pointing at side' '
94         (
95                 cd dir_side && git fetch &&
96                 git for-each-ref refs/remotes/origin |
97                 sed -e "/HEAD$/d" \
98                     -e "s|/remotes/origin/|/heads/|" >../actual
99         ) &&
100         # only follow side
101         git for-each-ref refs/heads/side >expect &&
102         test_cmp expect actual
103 '
104
105 test_expect_success '--single-branch with explicit --branch side' '
106         (
107                 cd dir_side2 && git fetch &&
108                 git for-each-ref refs/remotes/origin |
109                 sed -e "/HEAD$/d" \
110                     -e "s|/remotes/origin/|/heads/|" >../actual
111         ) &&
112         # only follow side
113         git for-each-ref refs/heads/side >expect &&
114         test_cmp expect actual
115 '
116
117 test_expect_success '--single-branch with explicit --branch with tag fetches updated tag' '
118         (
119                 cd dir_tag && git fetch &&
120                 git for-each-ref refs/tags >../actual
121         ) &&
122         git for-each-ref refs/tags >expect &&
123         test_cmp expect actual
124 '
125
126 test_expect_success '--single-branch with --mirror' '
127         (
128                 cd dir_mirror && git fetch &&
129                 git for-each-ref refs > ../actual
130         ) &&
131         git for-each-ref refs >expect &&
132         test_cmp expect actual
133 '
134
135 test_expect_success '--single-branch with explicit --branch and --mirror' '
136         (
137                 cd dir_mirror_side && git fetch &&
138                 git for-each-ref refs > ../actual
139         ) &&
140         git for-each-ref refs >expect &&
141         test_cmp expect actual
142 '
143
144 test_expect_success '--single-branch with detached' '
145         (
146                 cd dir_detached && git fetch &&
147                 git for-each-ref refs/remotes/origin |
148                 sed -e "/HEAD$/d" \
149                     -e "s|/remotes/origin/|/heads/|" >../actual
150         ) &&
151         # nothing
152         >expect &&
153         test_cmp expect actual
154 '
155
156 test_done