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