aboutsummaryrefslogtreecommitdiff
path: root/t
diff options
context:
space:
mode:
authorPatrick Steinhardt <ps@pks.im>2026-02-20 09:25:59 +0100
committerJunio C Hamano <gitster@pobox.com>2026-02-20 07:52:26 -0800
commit68ac70b6c9ea7b564217a994c3dcd56cba629fdf (patch)
tree55640df816bd78502fc56b2016e0c770b6db50fc /t
parent9a2fb147f2c61d0cab52c883e7e26f5b7948e3ed (diff)
downloadgit-68ac70b6c9ea7b564217a994c3dcd56cba629fdf.tar.xz
t: don't set ICONV prereq when iconv(1) is missing
We've got a couple of tests that exercise Git with different encodings, typically around commit messages. All of these tests depend on the ICONV prerequisite, which is set when Git was built with support for iconv. Many of those tests also end up using the iconv(1) executable to reencode text. But while tests can rely on the fact that Git does have support for iconv, they cannot assume that the iconv(1) executable exists. The consequence is thus that tests will break in case Git is built with iconv, but the executable doesn't exist. In fact, some of the tests even use the iconv(1) executable unconditionally, regardless of whether or not the ICONV prerequisite is set. Git for Windows has recently (unintentionally) shipped a change where the iconv(1) binary is not getting installed anymore [1]. And as we use Git for Windows directly in MSVC+Meson jobs in GitLab CI this has caused such tests to break. The missing iconv(1) binary is considered a bug that will be fixed in Git for Windows. But regardless of that it makes sense to not assume the binary to always exist so that our test suite passes on platforms that don't have iconv at all. Extend the ICONV prerequisite so that we know to skip tests in case the iconv(1) binary doesn't exist. We'll adapt tests that are currently broken in subsequent commits. [1]: https://github.com/git-for-windows/git/issues/6083 Signed-off-by: Patrick Steinhardt <ps@pks.im> Signed-off-by: Junio C Hamano <gitster@pobox.com>
Diffstat (limited to 't')
-rw-r--r--t/test-lib.sh12
1 files changed, 11 insertions, 1 deletions
diff --git a/t/test-lib.sh b/t/test-lib.sh
index ef0ab7ec2d..b3f82e32cf 100644
--- a/t/test-lib.sh
+++ b/t/test-lib.sh
@@ -1719,7 +1719,6 @@ esac
( COLUMNS=1 && test $COLUMNS = 1 ) && test_set_prereq COLUMNS_CAN_BE_1
test -z "$NO_CURL" && test_set_prereq LIBCURL
test -z "$NO_GITWEB" && test_set_prereq GITWEB
-test -z "$NO_ICONV" && test_set_prereq ICONV
test -z "$NO_PERL" && test_set_prereq PERL
test -z "$NO_PTHREADS" && test_set_prereq PTHREADS
test -z "$NO_PYTHON" && test_set_prereq PYTHON
@@ -1730,6 +1729,17 @@ test -n "$SANITIZE_LEAK" && test_set_prereq SANITIZE_LEAK
test -n "$GIT_VALGRIND_ENABLED" && test_set_prereq VALGRIND
test -n "$PERL_PATH" && test_set_prereq PERL_TEST_HELPERS
+test_lazy_prereq ICONV '
+ # We require Git to be built with iconv support, and we require the
+ # iconv binary to exist.
+ #
+ # NEEDSWORK: We might eventually want to split this up into two
+ # prerequisites: one for NO_ICONV, and one for the iconv(1) binary, as
+ # some tests only depend on either of these.
+ test -z "$NO_ICONV" &&
+ iconv -f utf8 -t utf8 </dev/null
+'
+
if test -z "$GIT_TEST_CHECK_CACHE_TREE"
then
GIT_TEST_CHECK_CACHE_TREE=true