99
branch=$(git rev-parse refs/remotes/origin/other) &&
100
test "z$head" = "z$branch"'
101
102
+test_expect_success "fetch test followRemoteHEAD never" '
103
+ test_when_finished "git config unset remote.origin.followRemoteHEAD" &&
104
+ (
105
+ cd "$D" &&
106
+ cd two &&
107
+ git update-ref --no-deref -d refs/remotes/origin/HEAD &&
108
+ git config set remote.origin.followRemoteHEAD "never" &&
109
+ git fetch &&
110
+ test_must_fail git rev-parse --verify refs/remotes/origin/HEAD
111
+ )
112
+'
113
+
114
+test_expect_success "fetch test followRemoteHEAD warn no change" '
115
+ test_when_finished "git config unset remote.origin.followRemoteHEAD" &&
116
+ (
117
+ cd "$D" &&
118
+ cd two &&
119
+ git rev-parse --verify refs/remotes/origin/other &&
120
+ git remote set-head origin other &&
121
+ git rev-parse --verify refs/remotes/origin/HEAD &&
122
+ git rev-parse --verify refs/remotes/origin/main &&
123
+ git config set remote.origin.followRemoteHEAD "warn" &&
124
+ git fetch >output &&
125
+ echo "${SQ}HEAD${SQ} at ${SQ}origin${SQ} is ${SQ}main${SQ}," \
126
+ "but we have ${SQ}other${SQ} locally." >expect &&
127
+ echo "Run ${SQ}git remote set-head origin main${SQ} to follow the change." >>expect &&
128
+ test_cmp expect output &&
129
+ head=$(git rev-parse refs/remotes/origin/HEAD) &&
130
+ branch=$(git rev-parse refs/remotes/origin/other) &&
131
+ test "z$head" = "z$branch"
132
+ )
133
+'
134
+
135
+test_expect_success "fetch test followRemoteHEAD warn create" '
136
+ test_when_finished "git config unset remote.origin.followRemoteHEAD" &&
137
+ (
138
+ cd "$D" &&
139
+ cd two &&
140
+ git update-ref --no-deref -d refs/remotes/origin/HEAD &&
141
+ git config set remote.origin.followRemoteHEAD "warn" &&
142
+ git rev-parse --verify refs/remotes/origin/main &&
143
+ output=$(git fetch) &&
144
+ test "z" = "z$output" &&
145
+ head=$(git rev-parse refs/remotes/origin/HEAD) &&
146
+ branch=$(git rev-parse refs/remotes/origin/main) &&
147
+ test "z$head" = "z$branch"
148
+ )
149
+'
150
+
151
+test_expect_success "fetch test followRemoteHEAD warn detached" '
152
+ test_when_finished "git config unset remote.origin.followRemoteHEAD" &&
153
+ (
154
+ cd "$D" &&
155
+ cd two &&
156
+ git update-ref --no-deref -d refs/remotes/origin/HEAD &&
157
+ git update-ref refs/remotes/origin/HEAD HEAD &&
158
+ HEAD=$(git log --pretty="%H") &&
159
+ git config set remote.origin.followRemoteHEAD "warn" &&
160
+ git fetch >output &&
161
+ echo "${SQ}HEAD${SQ} at ${SQ}origin${SQ} is ${SQ}main${SQ}," \
162
+ "but we have a detached HEAD pointing to" \
163
+ "${SQ}${HEAD}${SQ} locally." >expect &&
164
+ echo "Run ${SQ}git remote set-head origin main${SQ} to follow the change." >>expect &&
165
+ test_cmp expect output
166
+ )
167
+'
168
+
169
+test_expect_success "fetch test followRemoteHEAD warn quiet" '
170
+ test_when_finished "git config unset remote.origin.followRemoteHEAD" &&
171
+ (
172
+ cd "$D" &&
173
+ cd two &&
174
+ git rev-parse --verify refs/remotes/origin/other &&
175
+ git remote set-head origin other &&
176
+ git rev-parse --verify refs/remotes/origin/HEAD &&
177
+ git rev-parse --verify refs/remotes/origin/main &&
178
+ git config set remote.origin.followRemoteHEAD "warn" &&
179
+ output=$(git fetch --quiet) &&
180
+ test "z" = "z$output" &&
181
+ head=$(git rev-parse refs/remotes/origin/HEAD) &&
182
+ branch=$(git rev-parse refs/remotes/origin/other) &&
183
+ test "z$head" = "z$branch"
184
+ )
185
+'
186
+
187
+test_expect_success "fetch test followRemoteHEAD always" '
188
+ test_when_finished "git config unset remote.origin.followRemoteHEAD" &&
189
+ (
190
+ cd "$D" &&
191
+ cd two &&
192
+ git rev-parse --verify refs/remotes/origin/other &&
193
+ git remote set-head origin other &&
194
+ git rev-parse --verify refs/remotes/origin/HEAD &&
195
+ git rev-parse --verify refs/remotes/origin/main &&
196
+ git config set remote.origin.followRemoteHEAD "always" &&
197
+ git fetch &&
198
+ head=$(git rev-parse refs/remotes/origin/HEAD) &&
199
+ branch=$(git rev-parse refs/remotes/origin/main) &&
200
+ test "z$head" = "z$branch"
201
+ )
202
+'
203
+
204
test_expect_success 'fetch --prune on its own works as expected' '
205
cd "$D" &&
206
git clone . prune &&