t5510: make confusing config cleanup more explicit

Several tests set a config variable in a sub-repo we chdir into via a subshell, like this: ( cd "$D" && cd two && git config foo.bar baz ) But they also clean up the variable with a when_finished directive outside of the subshell, like this: test_when_finished "git config unset foo.bar" At first glance, this shouldn't work! The cleanup clause cannot be run from the subshell (since environment changes there are lost by the time the test snippet finishes). But since the cleanup command runs outside the subshell, our working directory will not have been switched into "two". But it does work. Why? The answer is that an earlier test does a "cd two" that moves the whole test's working directory out of $TRASH_DIRECTORY and into "two". So the subshell is a bit of a red herring; we are already in the right directory! That's why we need the "cd $D" at the top of the shell, to put us back to a known spot. Let's make this cleanup code more explicitly specify where we expect the config command to run. That makes the script more robust against running a subset of the tests, and ultimately will make it easier to refactor the script to avoid these top-level chdirs. Signed-off-by: Jeff King <peff@peff.net> Signed-off-by: Junio C Hamano <gitster@pobox.com>

Jeff King committed Aug 19, 2025 at 15:24 UTC 217e4a23d76fe95a0f6ab0f6159de2460db6fcd9
1 file changed +9 -9
t/t5510-fetch.sh
+9 -9
@@ -119,7 +119,7 @@ test_expect_success "fetch test remote HEAD change" '
119 test "z$head" = "z$branch"'
120
121 test_expect_success "fetch test followRemoteHEAD never" '
122 - test_when_finished "git config unset remote.origin.followRemoteHEAD" &&
122 + test_when_finished "git -C \"$D/two\" config unset remote.origin.followRemoteHEAD" &&
123 (
124 cd "$D" &&
125 cd two &&
@@ -134,7 +134,7 @@ test_expect_success "fetch test followRemoteHEAD never" '
134 '
135
136 test_expect_success "fetch test followRemoteHEAD warn no change" '
137 - test_when_finished "git config unset remote.origin.followRemoteHEAD" &&
137 + test_when_finished "git -C \"$D/two\" config unset remote.origin.followRemoteHEAD" &&
138 (
139 cd "$D" &&
140 cd two &&
@@ -154,7 +154,7 @@ test_expect_success "fetch test followRemoteHEAD warn no change" '
154 '
155
156 test_expect_success "fetch test followRemoteHEAD warn create" '
157 - test_when_finished "git config unset remote.origin.followRemoteHEAD" &&
157 + test_when_finished "git -C \"$D/two\" config unset remote.origin.followRemoteHEAD" &&
158 (
159 cd "$D" &&
160 cd two &&
@@ -170,7 +170,7 @@ test_expect_success "fetch test followRemoteHEAD warn create" '
170 '
171
172 test_expect_success "fetch test followRemoteHEAD warn detached" '
173 - test_when_finished "git config unset remote.origin.followRemoteHEAD" &&
173 + test_when_finished "git -C \"$D/two\" config unset remote.origin.followRemoteHEAD" &&
174 (
175 cd "$D" &&
176 cd two &&
@@ -187,7 +187,7 @@ test_expect_success "fetch test followRemoteHEAD warn detached" '
187 '
188
189 test_expect_success "fetch test followRemoteHEAD warn quiet" '
190 - test_when_finished "git config unset remote.origin.followRemoteHEAD" &&
190 + test_when_finished "git -C \"$D/two\" config unset remote.origin.followRemoteHEAD" &&
191 (
192 cd "$D" &&
193 cd two &&
@@ -205,7 +205,7 @@ test_expect_success "fetch test followRemoteHEAD warn quiet" '
205 '
206
207 test_expect_success "fetch test followRemoteHEAD warn-if-not-branch branch is same" '
208 - test_when_finished "git config unset remote.origin.followRemoteHEAD" &&
208 + test_when_finished "git -C \"$D/two\" config unset remote.origin.followRemoteHEAD" &&
209 (
210 cd "$D" &&
211 cd two &&
@@ -223,7 +223,7 @@ test_expect_success "fetch test followRemoteHEAD warn-if-not-branch branch is sa
223 '
224
225 test_expect_success "fetch test followRemoteHEAD warn-if-not-branch branch is different" '
226 - test_when_finished "git config unset remote.origin.followRemoteHEAD" &&
226 + test_when_finished "git -C \"$D/two\" config unset remote.origin.followRemoteHEAD" &&
227 (
228 cd "$D" &&
229 cd two &&
@@ -243,7 +243,7 @@ test_expect_success "fetch test followRemoteHEAD warn-if-not-branch branch is di
243 '
244
245 test_expect_success "fetch test followRemoteHEAD always" '
246 - test_when_finished "git config unset remote.origin.followRemoteHEAD" &&
246 + test_when_finished "git -C \"$D/two\" config unset remote.origin.followRemoteHEAD" &&
247 (
248 cd "$D" &&
249 cd two &&
@@ -260,7 +260,7 @@ test_expect_success "fetch test followRemoteHEAD always" '
260 '
261
262 test_expect_success 'followRemoteHEAD does not kick in with refspecs' '
263 - test_when_finished "git config unset remote.origin.followRemoteHEAD" &&
263 + test_when_finished "git -C \"$D/two\" config unset remote.origin.followRemoteHEAD" &&
264 (
265 cd "$D" &&
266 cd two &&