]> git.ipfire.org Git - thirdparty/git.git/commitdiff
t5510: make confusing config cleanup more explicit
authorJeff King <peff@peff.net>
Tue, 19 Aug 2025 19:24:55 +0000 (15:24 -0400)
committerJunio C Hamano <gitster@pobox.com>
Tue, 19 Aug 2025 23:05:57 +0000 (16:05 -0700)
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>
t/t5510-fetch.sh

index ebc696546bc33252d582ec5a15f2e1f031d19065..64fea9f4a5144644f911b7e6095dc3bff4118028 100755 (executable)
@@ -119,7 +119,7 @@ test_expect_success "fetch test remote HEAD change" '
        test "z$head" = "z$branch"'
 
 test_expect_success "fetch test followRemoteHEAD never" '
-       test_when_finished "git config unset remote.origin.followRemoteHEAD" &&
+       test_when_finished "git -C \"$D/two\" config unset remote.origin.followRemoteHEAD" &&
        (
                cd "$D" &&
                cd two &&
@@ -134,7 +134,7 @@ test_expect_success "fetch test followRemoteHEAD never" '
 '
 
 test_expect_success "fetch test followRemoteHEAD warn no change" '
-       test_when_finished "git config unset remote.origin.followRemoteHEAD" &&
+       test_when_finished "git -C \"$D/two\" config unset remote.origin.followRemoteHEAD" &&
        (
                cd "$D" &&
                cd two &&
@@ -154,7 +154,7 @@ test_expect_success "fetch test followRemoteHEAD warn no change" '
 '
 
 test_expect_success "fetch test followRemoteHEAD warn create" '
-       test_when_finished "git config unset remote.origin.followRemoteHEAD" &&
+       test_when_finished "git -C \"$D/two\" config unset remote.origin.followRemoteHEAD" &&
        (
                cd "$D" &&
                cd two &&
@@ -170,7 +170,7 @@ test_expect_success "fetch test followRemoteHEAD warn create" '
 '
 
 test_expect_success "fetch test followRemoteHEAD warn detached" '
-       test_when_finished "git config unset remote.origin.followRemoteHEAD" &&
+       test_when_finished "git -C \"$D/two\" config unset remote.origin.followRemoteHEAD" &&
        (
                cd "$D" &&
                cd two &&
@@ -187,7 +187,7 @@ test_expect_success "fetch test followRemoteHEAD warn detached" '
 '
 
 test_expect_success "fetch test followRemoteHEAD warn quiet" '
-       test_when_finished "git config unset remote.origin.followRemoteHEAD" &&
+       test_when_finished "git -C \"$D/two\" config unset remote.origin.followRemoteHEAD" &&
        (
                cd "$D" &&
                cd two &&
@@ -205,7 +205,7 @@ test_expect_success "fetch test followRemoteHEAD warn quiet" '
 '
 
 test_expect_success "fetch test followRemoteHEAD warn-if-not-branch branch is same" '
-       test_when_finished "git config unset remote.origin.followRemoteHEAD" &&
+       test_when_finished "git -C \"$D/two\" config unset remote.origin.followRemoteHEAD" &&
        (
                cd "$D" &&
                cd two &&
@@ -223,7 +223,7 @@ test_expect_success "fetch test followRemoteHEAD warn-if-not-branch branch is sa
 '
 
 test_expect_success "fetch test followRemoteHEAD warn-if-not-branch branch is different" '
-       test_when_finished "git config unset remote.origin.followRemoteHEAD" &&
+       test_when_finished "git -C \"$D/two\" config unset remote.origin.followRemoteHEAD" &&
        (
                cd "$D" &&
                cd two &&
@@ -243,7 +243,7 @@ test_expect_success "fetch test followRemoteHEAD warn-if-not-branch branch is di
 '
 
 test_expect_success "fetch test followRemoteHEAD always" '
-       test_when_finished "git config unset remote.origin.followRemoteHEAD" &&
+       test_when_finished "git -C \"$D/two\" config unset remote.origin.followRemoteHEAD" &&
        (
                cd "$D" &&
                cd two &&
@@ -260,7 +260,7 @@ test_expect_success "fetch test followRemoteHEAD always" '
 '
 
 test_expect_success 'followRemoteHEAD does not kick in with refspecs' '
-       test_when_finished "git config unset remote.origin.followRemoteHEAD" &&
+       test_when_finished "git -C \"$D/two\" config unset remote.origin.followRemoteHEAD" &&
        (
                cd "$D" &&
                cd two &&