]> git.ipfire.org Git - thirdparty/git.git/commitdiff
t: convert tests to not access symrefs via the filesystem
authorPatrick Steinhardt <ps@pks.im>
Thu, 2 Nov 2023 08:46:49 +0000 (09:46 +0100)
committerJunio C Hamano <gitster@pobox.com>
Thu, 2 Nov 2023 23:37:06 +0000 (08:37 +0900)
Some of our tests access symbolic references via the filesystem
directly. While this works with the current files reference backend, it
this will break once we have a second reference backend in our codebase.

Refactor these tests to instead use git-symbolic-ref(1) or our
`ref-store` test tool. The latter is required in some cases where safety
checks of git-symbolic-ref(1) would otherwise reject writing a symbolic
reference.

Signed-off-by: Patrick Steinhardt <ps@pks.im>
Signed-off-by: Junio C Hamano <gitster@pobox.com>
t/t1400-update-ref.sh
t/t1430-bad-ref-name.sh
t/t1450-fsck.sh
t/t3200-branch.sh
t/t4013-diff-various.sh
t/t4202-log.sh
t/t5605-clone-local.sh
t/t5702-protocol-v2.sh
t/t9133-git-svn-nested-git-repo.sh

index 91cc6dff7242e78ad10e405aa68f92ca17447356..51a8d0bba98400c982f9f0fa93cdfca3c89f1217 100755 (executable)
@@ -221,15 +221,15 @@ test_expect_success 'delete symref without dereference when the referred ref is
 test_expect_success 'update-ref -d is not confused by self-reference' '
        test_when_finished "test-tool ref-store main delete-refs REF_NO_DEREF refs/heads/self" &&
        git symbolic-ref refs/heads/self refs/heads/self &&
-       test_path_is_file .git/refs/heads/self &&
+       git symbolic-ref --no-recurse refs/heads/self &&
        test_must_fail git update-ref -d refs/heads/self &&
-       test_path_is_file .git/refs/heads/self
+       git symbolic-ref --no-recurse refs/heads/self
 '
 
 test_expect_success 'update-ref --no-deref -d can delete self-reference' '
        test_when_finished "test-tool ref-store main delete-refs REF_NO_DEREF refs/heads/self" &&
        git symbolic-ref refs/heads/self refs/heads/self &&
-       test_path_is_file .git/refs/heads/self &&
+       git symbolic-ref --no-recurse refs/heads/self &&
        git update-ref --no-deref -d refs/heads/self &&
        test_must_fail git show-ref --verify -q refs/heads/self
 '
@@ -239,7 +239,7 @@ test_expect_success 'update-ref --no-deref -d can delete reference to bad ref' '
        test_when_finished "rm -f .git/refs/heads/bad" &&
        git symbolic-ref refs/heads/ref-to-bad refs/heads/bad &&
        test_when_finished "git update-ref -d refs/heads/ref-to-bad" &&
-       test_path_is_file .git/refs/heads/ref-to-bad &&
+       git symbolic-ref --no-recurse refs/heads/ref-to-bad &&
        git update-ref --no-deref -d refs/heads/ref-to-bad &&
        test_must_fail git show-ref --verify -q refs/heads/ref-to-bad
 '
index 7b7d6953c62d1be63c7f16e0c561b46b5e678e23..5debb91f7b753f81e080aeb396834c8cccf388a6 100755 (executable)
@@ -164,9 +164,9 @@ test_expect_success 'rev-parse skips symref pointing to broken name' '
 test_expect_success 'for-each-ref emits warnings for broken names' '
        test-tool ref-store main update-ref msg "refs/heads/broken...ref" $main_sha1 $ZERO_OID REF_SKIP_REFNAME_VERIFICATION &&
        test_when_finished "test-tool ref-store main delete-refs REF_NO_DEREF msg refs/heads/broken...ref" &&
-       printf "ref: refs/heads/broken...ref\n" >.git/refs/heads/badname &&
+       test-tool ref-store main create-symref refs/heads/badname refs/heads/broken...ref &&
        test_when_finished "test-tool ref-store main delete-refs REF_NO_DEREF msg refs/heads/badname" &&
-       printf "ref: refs/heads/main\n" >.git/refs/heads/broken...symref &&
+       test-tool ref-store main create-symref refs/heads/broken...symref refs/heads/main &&
        test_when_finished "test-tool ref-store main delete-refs REF_NO_DEREF msg refs/heads/broken...symref" &&
        git for-each-ref >output 2>error &&
        ! grep -e "broken\.\.\.ref" output &&
@@ -257,7 +257,7 @@ test_expect_success 'update-ref -d can delete broken name through symref' '
 '
 
 test_expect_success 'update-ref --no-deref -d can delete symref with broken name' '
-       printf "ref: refs/heads/main\n" >.git/refs/heads/broken...symref &&
+       test-tool ref-store main create-symref refs/heads/broken...symref refs/heads/main &&
        test_when_finished "test-tool ref-store main delete-refs REF_NO_DEREF msg refs/heads/broken...symref" &&
        test_ref_exists refs/heads/broken...symref &&
        git update-ref --no-deref -d refs/heads/broken...symref >output 2>error &&
@@ -267,7 +267,7 @@ test_expect_success 'update-ref --no-deref -d can delete symref with broken name
 '
 
 test_expect_success 'branch -d can delete symref with broken name' '
-       printf "ref: refs/heads/main\n" >.git/refs/heads/broken...symref &&
+       test-tool ref-store main create-symref refs/heads/broken...symref refs/heads/main &&
        test_when_finished "test-tool ref-store main delete-refs REF_NO_DEREF msg refs/heads/broken...symref" &&
        test_ref_exists refs/heads/broken...symref &&
        git branch -d broken...symref >output 2>error &&
@@ -277,7 +277,7 @@ test_expect_success 'branch -d can delete symref with broken name' '
 '
 
 test_expect_success 'update-ref --no-deref -d can delete dangling symref with broken name' '
-       printf "ref: refs/heads/idonotexist\n" >.git/refs/heads/broken...symref &&
+       test-tool ref-store main create-symref refs/heads/broken...symref refs/heads/idonotexist &&
        test_when_finished "test-tool ref-store main delete-refs REF_NO_DEREF msg refs/heads/broken...symref" &&
        test_ref_exists refs/heads/broken...symref &&
        git update-ref --no-deref -d refs/heads/broken...symref >output 2>error &&
@@ -287,7 +287,7 @@ test_expect_success 'update-ref --no-deref -d can delete dangling symref with br
 '
 
 test_expect_success 'branch -d can delete dangling symref with broken name' '
-       printf "ref: refs/heads/idonotexist\n" >.git/refs/heads/broken...symref &&
+       test-tool ref-store main create-symref refs/heads/broken...symref refs/heads/idonotexist &&
        test_when_finished "test-tool ref-store main delete-refs REF_NO_DEREF msg refs/heads/broken...symref" &&
        test_ref_exists refs/heads/broken...symref &&
        git branch -d broken...symref >output 2>error &&
index f55b539b08389348ac945ba09bb4e3d9a9763337..a3c97b9c7fc7a385f7552ba063fe95e3ff92bc36 100755 (executable)
@@ -133,7 +133,7 @@ test_expect_success 'HEAD link pointing at a funny object' '
 
 test_expect_success 'HEAD link pointing at a funny place' '
        test_when_finished "git update-ref --no-deref HEAD $orig_head" &&
-       echo "ref: refs/funny/place" >.git/HEAD &&
+       test-tool ref-store main create-symref HEAD refs/funny/place &&
        # avoid corrupt/broken HEAD from interfering with repo discovery
        test_must_fail env GIT_DIR=.git git fsck 2>out &&
        test_i18ngrep "HEAD points to something strange" out
@@ -169,7 +169,7 @@ test_expect_success 'other worktree HEAD link pointing at missing object' '
 test_expect_success 'other worktree HEAD link pointing at a funny place' '
        test_when_finished "rm -rf .git/worktrees other" &&
        git worktree add other &&
-       echo "ref: refs/funny/place" >.git/worktrees/other/HEAD &&
+       git -C other symbolic-ref HEAD refs/funny/place &&
        test_must_fail git fsck 2>out &&
        test_i18ngrep "worktrees/other/HEAD points to something strange" out
 '
index 964bc3651403bf678d9ce49b84abe836ef8098fd..1197a44fcad77bb2bc95d2b27a4aaab0e5bbd503 100755 (executable)
@@ -215,10 +215,13 @@ test_expect_success 'git branch -M should leave orphaned HEAD alone' '
                cd orphan &&
                test_commit initial &&
                git checkout --orphan lonely &&
-               grep lonely .git/HEAD &&
+               git symbolic-ref HEAD >expect &&
+               echo refs/heads/lonely >actual &&
+               test_cmp expect actual &&
                test_ref_missing refs/head/lonely &&
                git branch -M main mistress &&
-               grep lonely .git/HEAD
+               git symbolic-ref HEAD >expect &&
+               test_cmp expect actual
        )
 '
 
@@ -809,7 +812,7 @@ test_expect_success 'deleting a symref' '
 
 test_expect_success 'deleting a dangling symref' '
        git symbolic-ref refs/heads/dangling-symref nowhere &&
-       test_path_is_file .git/refs/heads/dangling-symref &&
+       git symbolic-ref --no-recurse refs/heads/dangling-symref &&
        echo "Deleted branch dangling-symref (was nowhere)." >expect &&
        git branch -d dangling-symref >actual &&
        test_ref_missing refs/heads/dangling-symref &&
index 4b474808311e3e654258445128acaacb7b988240..fc8a0588acc4ff7fccddd60f1d316a5e9987d6e8 100755 (executable)
@@ -522,7 +522,7 @@ test_expect_success 'log -S requires an argument' '
 '
 
 test_expect_success 'diff --cached on unborn branch' '
-       echo ref: refs/heads/unborn >.git/HEAD &&
+       git symbolic-ref HEAD refs/heads/unborn &&
        git diff --cached >result &&
        process_diffs result >actual &&
        process_diffs "$TEST_DIRECTORY/t4013/diff.diff_--cached" >expected &&
index af4a123cd223ef5a3cdff9c97cf6af35abe53854..57b298a4e22aa3d207698fff3e1ea909c0be5461 100755 (executable)
@@ -2265,7 +2265,7 @@ test_expect_success REFFILES 'log diagnoses bogus HEAD hash' '
 
 test_expect_success REFFILES 'log diagnoses bogus HEAD symref' '
        git init empty &&
-       echo "ref: refs/heads/invalid.lock" > empty/.git/HEAD &&
+       test-tool -C empty ref-store main create-symref HEAD refs/heads/invalid.lock &&
        test_must_fail git -C empty log 2>stderr &&
        test_i18ngrep broken stderr &&
        test_must_fail git -C empty log --default totally-bogus 2>stderr &&
index 946c5751885671859ae309458c34106b79d67966..bedd29d05509ccb46a3ba6cddbc91f4d76a38d2e 100755 (executable)
@@ -65,7 +65,7 @@ test_expect_success 'Even without -l, local will make a hardlink' '
 '
 
 test_expect_success 'local clone of repo with nonexistent ref in HEAD' '
-       echo "ref: refs/heads/nonexistent" > a.git/HEAD &&
+       git -C a.git symbolic-ref HEAD refs/heads/nonexistent &&
        git clone a d &&
        (cd d &&
        git fetch &&
index 6af5c2062fd16cc8c5549ee888d952966d41c4a3..dcc4cd95fe7ad83aace481025c08ddc9ee987684 100755 (executable)
@@ -221,7 +221,9 @@ test_expect_success 'clone of empty repo propagates name of default branch' '
        GIT_TEST_DEFAULT_INITIAL_BRANCH_NAME= \
        git -c init.defaultBranch=main -c protocol.version=2 \
                clone "file://$(pwd)/file_empty_parent" file_empty_child &&
-       grep "refs/heads/mydefaultbranch" file_empty_child/.git/HEAD
+       echo refs/heads/mydefaultbranch >expect &&
+       git -C file_empty_child symbolic-ref HEAD >actual &&
+       test_cmp expect actual
 '
 
 test_expect_success '...but not if explicitly forbidden by config' '
@@ -234,7 +236,9 @@ test_expect_success '...but not if explicitly forbidden by config' '
        GIT_TEST_DEFAULT_INITIAL_BRANCH_NAME= \
        git -c init.defaultBranch=main -c protocol.version=2 \
                clone "file://$(pwd)/file_empty_parent" file_empty_child &&
-       ! grep "refs/heads/mydefaultbranch" file_empty_child/.git/HEAD
+       echo refs/heads/main >expect &&
+       git -C file_empty_child symbolic-ref HEAD >actual &&
+       test_cmp expect actual
 '
 
 test_expect_success 'bare clone propagates empty default branch' '
@@ -247,7 +251,9 @@ test_expect_success 'bare clone propagates empty default branch' '
        git -c init.defaultBranch=main -c protocol.version=2 \
                clone --bare \
                "file://$(pwd)/file_empty_parent" file_empty_child.git &&
-       grep "refs/heads/mydefaultbranch" file_empty_child.git/HEAD
+       echo "refs/heads/mydefaultbranch" >expect &&
+       git -C file_empty_child.git symbolic-ref HEAD >actual &&
+       test_cmp expect actual
 '
 
 test_expect_success 'clone propagates unborn HEAD from non-empty repo' '
@@ -265,7 +271,9 @@ test_expect_success 'clone propagates unborn HEAD from non-empty repo' '
        git -c init.defaultBranch=main -c protocol.version=2 \
                clone "file://$(pwd)/file_unborn_parent" \
                file_unborn_child 2>stderr &&
-       grep "refs/heads/mydefaultbranch" file_unborn_child/.git/HEAD &&
+       echo "refs/heads/mydefaultbranch" >expect &&
+       git -C file_unborn_child symbolic-ref HEAD >actual &&
+       test_cmp expect actual &&
        grep "warning: remote HEAD refers to nonexistent ref" stderr
 '
 
@@ -295,7 +303,9 @@ test_expect_success 'bare clone propagates unborn HEAD from non-empty repo' '
        git -c init.defaultBranch=main -c protocol.version=2 \
                clone --bare "file://$(pwd)/file_unborn_parent" \
                file_unborn_child.git 2>stderr &&
-       grep "refs/heads/mydefaultbranch" file_unborn_child.git/HEAD &&
+       echo "refs/heads/mydefaultbranch" >expect &&
+       git -C file_unborn_child.git symbolic-ref HEAD >actual &&
+       test_cmp expect actual &&
        ! grep "warning:" stderr
 '
 
@@ -315,7 +325,9 @@ test_expect_success 'defaulted HEAD uses remote branch if available' '
        git -c init.defaultBranch=branchwithstuff -c protocol.version=2 \
                clone "file://$(pwd)/file_unborn_parent" \
                file_unborn_child 2>stderr &&
-       grep "refs/heads/branchwithstuff" file_unborn_child/.git/HEAD &&
+       echo "refs/heads/branchwithstuff" >expect &&
+       git -C file_unborn_child symbolic-ref HEAD >actual &&
+       test_cmp expect actual &&
        test_path_is_file file_unborn_child/stuff.t &&
        ! grep "warning:" stderr
 '
index d8d536269cf73d64d9d2df593667c17c826479c5..8ca24670acb5a9280a163b11682e9a0dd52eaaa5 100755 (executable)
@@ -11,7 +11,7 @@ test_expect_success 'setup repo with a git repo inside it' '
        (
                cd s &&
                git init &&
-               test -f .git/HEAD &&
+               git symbolic-ref HEAD &&
                > .git/a &&
                echo a > a &&
                svn_cmd add .git a &&