Skip to content

Commit 5f23aa6

Browse files
bk2204gitster
authored andcommitted
t: allow specifying compatibility hash
We want to specify a compatibility hash for testing interactions for SHA-256 repositories where we have SHA-1 compatibility enabled. Allow the user to specify this scenario in the test suite by setting GIT_TEST_DEFAULT_HASH to "sha256:sha1". Note that this will get passed into GIT_DEFAULT_HASH, which Git itself does not presently support. However, we will support this in a future commit. Since we'll now want to know the value for a specific version, let's add the ability to specify either the storage hash (in this case, SHA-256) or the compatibility hash (SHA-1). We use a different value for the compatibility hash that will be enabled for all repositories (test_repo_compat_hash_algo) versus the one that is used individually in some tests (test_compat_hash_algo), since we want to still run those individual tests without requiring that the testsuite be run fully in a compatibility mode. In some cases, we'll need to adjust our test suite to work in a proper way with a compatibility hash. For example, in such a case, we'll only use pack index v3, since v1 and v2 lack support for multiple algorithms. Since we won't want to write those older formats, we'll need to skip tests that do so. Let's add a COMPAT_HASH prerequisite for this purpose. Finally, in this scenario, we can no longer rely on having broken objects work since we lack compatibility mappings to rewrite objects in the repository. Add a prerequisite, BROKEN_OBJECTS, that we define in terms of COMPAT_HASH and checks to see if creating deliberately broken objects is possible, so that we can disable these tests if not. Signed-off-by: brian m. carlson <sandals@crustytoothpaste.net> Signed-off-by: Junio C Hamano <gitster@pobox.com>
1 parent 51acda7 commit 5f23aa6

File tree

2 files changed

+20
-2
lines changed

2 files changed

+20
-2
lines changed

t/test-lib-functions.sh

Lines changed: 7 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1708,11 +1708,16 @@ test_set_hash () {
17081708
# Detect the hash algorithm in use.
17091709
test_detect_hash () {
17101710
case "${GIT_TEST_DEFAULT_HASH:-$GIT_TEST_BUILTIN_HASH}" in
1711-
"sha256")
1711+
*:*)
1712+
test_hash_algo="${GIT_TEST_DEFAULT_HASH%%:*}"
1713+
test_compat_hash_algo="${GIT_TEST_DEFAULT_HASH##*:}"
1714+
test_repo_compat_hash_algo="$test_compat_hash_algo"
1715+
;;
1716+
sha256)
17121717
test_hash_algo=sha256
17131718
test_compat_hash_algo=sha1
17141719
;;
1715-
*)
1720+
sha1)
17161721
test_hash_algo=sha1
17171722
test_compat_hash_algo=sha256
17181723
;;

t/test-lib.sh

Lines changed: 13 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1917,6 +1917,19 @@ test_lazy_prereq DEFAULT_HASH_ALGORITHM '
19171917
test_lazy_prereq DEFAULT_REPO_FORMAT '
19181918
test_have_prereq SHA1,REFFILES
19191919
'
1920+
# BROKEN_OBJECTS is a test whether we can write deliberately broken objects and
1921+
# expect them to work. When running using SHA-256 mode with SHA-1
1922+
# compatibility, we cannot write such objects because there's no SHA-1
1923+
# compatibility value for a nonexistent object.
1924+
test_lazy_prereq BROKEN_OBJECTS '
1925+
! test_have_prereq COMPAT_HASH
1926+
'
1927+
1928+
# COMPAT_HASH is a test if we're operating in a repository with SHA-256 with
1929+
# SHA-1 compatibility.
1930+
test_lazy_prereq COMPAT_HASH '
1931+
test -n "$test_repo_compat_hash_algo"
1932+
'
19201933

19211934
# Ensure that no test accidentally triggers a Git command
19221935
# that runs the actual maintenance scheduler, affecting a user's

0 commit comments

Comments
 (0)