In the preceding commit we got rid of a bunch of copy/pasted test code from t0000-basic.sh in favor of re-using earlier already set up tests. Since copy/pasting the tests is likely to be something done by mistake in the future, let's add an assertion that detects whether this has happened. Now that we don't provide a unique test_description="" to these tests we can rely on the content written out being the same in this case. Let's use the object store to hash it, and attempt to create a "blob-<CONTENT_OID>" tag. If another test has already written out the same content we'll fail, and the tag envelope will provide an error message pointing us in the right direction.. Signed-off-by: Ævar Arnfjörð Bjarmason <avarab@xxxxxxxxx> --- t/lib-subtest.sh | 34 +++++++++++++++++++++++++++++++++- 1 file changed, 33 insertions(+), 1 deletion(-) diff --git a/t/lib-subtest.sh b/t/lib-subtest.sh index cdbc2d9332..6857afdaa5 100644 --- a/t/lib-subtest.sh +++ b/t/lib-subtest.sh @@ -1,3 +1,34 @@ +_assert_unique_sub_test () { + name=$1 && + + # Alert about the copy/paste programming + hash=$(git hash-object -w "$name") && + cat >tag.sig <<-EOF && + object $hash + type blob + tag $hash + tagger . <> 0 +0000 + + duplicate script detected! + + This test script was already written as: + + $name + + You can just re-use its test code with your own + run_sub_test_lib_test*() + EOF + + tag=$(git mktag <tag.sig) && + if ! git update-ref refs/tags/blob-$hash $tag $(test_oid zero) 2>/dev/null + then + msg=$(git for-each-ref refs/tags/blob-$hash \ + --format='%(contents)' refs/tags/blob-$hash) + error "on write of $name: $msg" + return 1 + fi +} + write_sub_test_lib_test () { name="$1" # stdin is the body of the test code mkdir "$name" && @@ -7,7 +38,8 @@ write_sub_test_lib_test () { # Point to the t/test-lib.sh, which isn't in ../ as usual . "\$TEST_DIRECTORY"/test-lib.sh EOF - cat >>"$name/$name.sh" + cat >>"$name/$name.sh" && + _assert_unique_sub_test "$name/$name.sh" } _run_sub_test_lib_test_common () { -- 2.33.0.rc0.635.g0ab9d6d3b5a