Merge branch 'ps/tests-wo-iconv-fixes' into jch

Some tests assumed "iconv" is available without honoring ICONV
prerequisite, which has been corrected.

* ps/tests-wo-iconv-fixes:
  t6006: don't use iconv(1) without ICONV prereq
  t5550: add ICONV prereq to tests that use "$HTTPD_URL/error"
  t4205: improve handling of ICONV prerequisite
  t40xx: don't use iconv(1) without ICONV prereq
  t: don't set ICONV prereq when iconv(1) is missing
This commit is contained in:
Junio C Hamano
2026-02-23 14:25:45 -08:00
7 changed files with 89 additions and 48 deletions

View File

@@ -37,8 +37,12 @@ add_file () {
test_tick &&
# "git commit -m" would break MinGW, as Windows refuse to pass
# $test_encoding encoded parameter to git.
echo "Add $name ($added $name)" | iconv -f utf-8 -t $test_encoding |
git -c "i18n.commitEncoding=$test_encoding" commit -F -
message="Add $name ($added $name)" &&
if test_have_prereq ICONV
then
message=$(echo "$message" | iconv -f utf-8 -t $test_encoding)
fi &&
echo "$message" | git -c "i18n.commitEncoding=$test_encoding" commit -F -
done >/dev/null &&
git rev-parse --short --verify HEAD
)

View File

@@ -35,8 +35,12 @@ add_file () {
test_tick &&
# "git commit -m" would break MinGW, as Windows refuse to pass
# $test_encoding encoded parameter to git.
echo "Add $name ($added $name)" | iconv -f utf-8 -t $test_encoding |
git -c "i18n.commitEncoding=$test_encoding" commit -F -
message="Add $name ($added $name)" &&
if test_have_prereq ICONV
then
message=$(echo "$message" | iconv -f utf-8 -t $test_encoding)
fi &&
echo "$message" | git -c "i18n.commitEncoding=$test_encoding" commit -F -
done >/dev/null &&
git rev-parse --short --verify HEAD
)

View File

@@ -35,8 +35,12 @@ add_file () {
test_tick &&
# "git commit -m" would break MinGW, as Windows refuse to pass
# $test_encoding encoded parameter to git.
echo "Add $name ($added $name)" | iconv -f utf-8 -t $test_encoding |
git -c "i18n.commitEncoding=$test_encoding" commit -F -
message="Add $name ($added $name)" &&
if test_have_prereq ICONV
then
message=$(echo "$message" | iconv -f utf-8 -t $test_encoding)
fi &&
echo "$message" | git -c "i18n.commitEncoding=$test_encoding" commit -F -
done >/dev/null &&
git rev-parse --short --verify HEAD
)

View File

@@ -9,7 +9,12 @@ test_description='Test pretty formats'
. ./test-lib.sh
# Tested non-UTF-8 encoding
test_encoding="ISO8859-1"
if test_have_prereq ICONV
then
test_encoding="ISO8859-1"
else
test_encoding="UTF-8"
fi
sample_utf8_part=$(printf "f\303\244ng")
@@ -18,7 +23,7 @@ commit_msg () {
# (translated with Google Translate),
# encoded in UTF-8, used as a commit log message below.
msg="initial. an${sample_utf8_part}lich\n"
if test -n "$1"
if test -n "$1" && test "$1" != "UTF-8"
then
printf "$msg" | iconv -f utf-8 -t "$1"
else
@@ -113,19 +118,19 @@ test_expect_success 'alias loop' '
test_must_fail git log --pretty=test-foo
'
test_expect_success ICONV 'NUL separation' '
test_expect_success 'NUL separation' '
printf "add bar\0$(commit_msg)" >expected &&
git log -z --pretty="format:%s" >actual &&
test_cmp expected actual
'
test_expect_success ICONV 'NUL termination' '
test_expect_success 'NUL termination' '
printf "add bar\0$(commit_msg)\0" >expected &&
git log -z --pretty="tformat:%s" >actual &&
test_cmp expected actual
'
test_expect_success ICONV 'NUL separation with --stat' '
test_expect_success 'NUL separation with --stat' '
stat0_part=$(git diff --stat HEAD^ HEAD) &&
stat1_part=$(git diff-tree --no-commit-id --stat --root HEAD^) &&
printf "add bar\n$stat0_part\n\0$(commit_msg)\n$stat1_part\n" >expected &&
@@ -180,7 +185,7 @@ test_expect_success 'setup more commits' '
head4=$(git rev-parse --verify --short HEAD~3)
'
test_expect_success ICONV 'left alignment formatting' '
test_expect_success 'left alignment formatting' '
git log --pretty="tformat:%<(40)%s" >actual &&
qz_to_tab_space <<-EOF >expected &&
message two Z
@@ -202,7 +207,7 @@ test_expect_success ICONV 'left alignment formatting. i18n.logOutputEncoding' '
test_cmp expected actual
'
test_expect_success ICONV 'left alignment formatting at the nth column' '
test_expect_success 'left alignment formatting at the nth column' '
git log --pretty="tformat:%h %<|(40)%s" >actual &&
qz_to_tab_space <<-EOF >expected &&
$head1 message two Z
@@ -213,7 +218,7 @@ test_expect_success ICONV 'left alignment formatting at the nth column' '
test_cmp expected actual
'
test_expect_success ICONV 'left alignment formatting at the nth column' '
test_expect_success 'left alignment formatting at the nth column' '
COLUMNS=50 git log --pretty="tformat:%h %<|(-10)%s" >actual &&
qz_to_tab_space <<-EOF >expected &&
$head1 message two Z
@@ -235,7 +240,7 @@ test_expect_success ICONV 'left alignment formatting at the nth column. i18n.log
test_cmp expected actual
'
test_expect_success ICONV 'left alignment formatting with no padding' '
test_expect_success 'left alignment formatting with no padding' '
git log --pretty="tformat:%<(1)%s" >actual &&
cat <<-EOF >expected &&
message two
@@ -246,7 +251,7 @@ test_expect_success ICONV 'left alignment formatting with no padding' '
test_cmp expected actual
'
test_expect_success 'left alignment formatting with no padding. i18n.logOutputEncoding' '
test_expect_success ICONV 'left alignment formatting with no padding. i18n.logOutputEncoding' '
git -c i18n.logOutputEncoding=$test_encoding log --pretty="tformat:%<(1)%s" >actual &&
cat <<-EOF | iconv -f utf-8 -t $test_encoding >expected &&
message two
@@ -257,7 +262,7 @@ test_expect_success 'left alignment formatting with no padding. i18n.logOutputEn
test_cmp expected actual
'
test_expect_success ICONV 'left alignment formatting with trunc' '
test_expect_success 'left alignment formatting with trunc' '
git log --pretty="tformat:%<(10,trunc)%s" >actual &&
qz_to_tab_space <<-\EOF >expected &&
message ..
@@ -279,7 +284,7 @@ test_expect_success ICONV 'left alignment formatting with trunc. i18n.logOutputE
test_cmp expected actual
'
test_expect_success ICONV 'left alignment formatting with ltrunc' '
test_expect_success 'left alignment formatting with ltrunc' '
git log --pretty="tformat:%<(10,ltrunc)%s" >actual &&
qz_to_tab_space <<-EOF >expected &&
..sage two
@@ -301,7 +306,7 @@ test_expect_success ICONV 'left alignment formatting with ltrunc. i18n.logOutput
test_cmp expected actual
'
test_expect_success ICONV 'left alignment formatting with mtrunc' '
test_expect_success 'left alignment formatting with mtrunc' '
git log --pretty="tformat:%<(10,mtrunc)%s" >actual &&
qz_to_tab_space <<-\EOF >expected &&
mess.. two
@@ -323,7 +328,7 @@ test_expect_success ICONV 'left alignment formatting with mtrunc. i18n.logOutput
test_cmp expected actual
'
test_expect_success ICONV 'right alignment formatting' '
test_expect_success 'right alignment formatting' '
git log --pretty="tformat:%>(40)%s" >actual &&
qz_to_tab_space <<-EOF >expected &&
Z message two
@@ -345,7 +350,7 @@ test_expect_success ICONV 'right alignment formatting. i18n.logOutputEncoding' '
test_cmp expected actual
'
test_expect_success ICONV 'right alignment formatting at the nth column' '
test_expect_success 'right alignment formatting at the nth column' '
git log --pretty="tformat:%h %>|(40)%s" >actual &&
qz_to_tab_space <<-EOF >expected &&
$head1 message two
@@ -356,7 +361,7 @@ test_expect_success ICONV 'right alignment formatting at the nth column' '
test_cmp expected actual
'
test_expect_success ICONV 'right alignment formatting at the nth column' '
test_expect_success 'right alignment formatting at the nth column' '
COLUMNS=50 git log --pretty="tformat:%h %>|(-10)%s" >actual &&
qz_to_tab_space <<-EOF >expected &&
$head1 message two
@@ -391,7 +396,7 @@ test_expect_success ICONV 'right alignment formatting at the nth column with --g
test_cmp expected actual
'
test_expect_success ICONV 'right alignment formatting with no padding' '
test_expect_success 'right alignment formatting with no padding' '
git log --pretty="tformat:%>(1)%s" >actual &&
cat <<-EOF >expected &&
message two
@@ -402,7 +407,7 @@ test_expect_success ICONV 'right alignment formatting with no padding' '
test_cmp expected actual
'
test_expect_success ICONV 'right alignment formatting with no padding and with --graph' '
test_expect_success 'right alignment formatting with no padding and with --graph' '
git log --graph --pretty="tformat:%>(1)%s" >actual &&
cat <<-EOF >expected &&
* message two
@@ -424,7 +429,7 @@ test_expect_success ICONV 'right alignment formatting with no padding. i18n.logO
test_cmp expected actual
'
test_expect_success ICONV 'center alignment formatting' '
test_expect_success 'center alignment formatting' '
git log --pretty="tformat:%><(40)%s" >actual &&
qz_to_tab_space <<-EOF >expected &&
Z message two Z
@@ -445,7 +450,8 @@ test_expect_success ICONV 'center alignment formatting. i18n.logOutputEncoding'
EOF
test_cmp expected actual
'
test_expect_success ICONV 'center alignment formatting at the nth column' '
test_expect_success 'center alignment formatting at the nth column' '
git log --pretty="tformat:%h %><|(40)%s" >actual &&
qz_to_tab_space <<-EOF >expected &&
$head1 message two Z
@@ -456,7 +462,7 @@ test_expect_success ICONV 'center alignment formatting at the nth column' '
test_cmp expected actual
'
test_expect_success ICONV 'center alignment formatting at the nth column' '
test_expect_success 'center alignment formatting at the nth column' '
COLUMNS=70 git log --pretty="tformat:%h %><|(-30)%s" >actual &&
qz_to_tab_space <<-EOF >expected &&
$head1 message two Z
@@ -478,7 +484,7 @@ test_expect_success ICONV 'center alignment formatting at the nth column. i18n.l
test_cmp expected actual
'
test_expect_success ICONV 'center alignment formatting with no padding' '
test_expect_success 'center alignment formatting with no padding' '
git log --pretty="tformat:%><(1)%s" >actual &&
cat <<-EOF >expected &&
message two

View File

@@ -339,32 +339,32 @@ test_expect_success 'fetch can handle previously-fetched .idx files' '
'
test_expect_success 'did not use upload-pack service' '
! grep "/git-upload-pack" "$HTTPD_ROOT_PATH/access.log"
test_grep ! "/git-upload-pack" "$HTTPD_ROOT_PATH/access.log"
'
test_expect_success 'git client shows text/plain errors' '
test_expect_success ICONV 'git client shows text/plain errors' '
test_must_fail git clone "$HTTPD_URL/error/text" 2>stderr &&
grep "this is the error message" stderr
test_grep "this is the error message" stderr
'
test_expect_success 'git client does not show html errors' '
test_expect_success ICONV 'git client does not show html errors' '
test_must_fail git clone "$HTTPD_URL/error/html" 2>stderr &&
! grep "this is the error message" stderr
test_grep ! "this is the error message" stderr
'
test_expect_success 'git client shows text/plain with a charset' '
test_expect_success ICONV 'git client shows text/plain with a charset' '
test_must_fail git clone "$HTTPD_URL/error/charset" 2>stderr &&
grep "this is the error message" stderr
test_grep "this is the error message" stderr
'
test_expect_success ICONV 'http error messages are reencoded' '
test_must_fail git clone "$HTTPD_URL/error/utf16" 2>stderr &&
grep "this is the error message" stderr
test_grep "this is the error message" stderr
'
test_expect_success ICONV 'reencoding is robust to whitespace oddities' '
test_must_fail git clone "$HTTPD_URL/error/odd-spacing" 2>stderr &&
grep "this is the error message" stderr
test_grep "this is the error message" stderr
'
check_language () {
@@ -406,7 +406,7 @@ ja;q=0.95, zh;q=0.94, sv;q=0.93, pt;q=0.92, nb;q=0.91, *;q=0.90" \
test_expect_success 'git client send an empty Accept-Language' '
GIT_TRACE_CURL=true LANGUAGE= git ls-remote "$HTTPD_URL/dumb/repo.git" 2>stderr &&
! grep "^=> Send header: Accept-Language:" stderr
test_grep ! "^=> Send header: Accept-Language:" stderr
'
test_expect_success 'remote-http complains cleanly about malformed urls' '

View File

@@ -378,15 +378,23 @@ test_expect_success 'rev-list %C(auto,...) respects --color' '
test_cmp expect actual
'
iconv -f utf-8 -t $test_encoding > commit-msg <<EOF
Test printing of complex bodies
This commit message is much longer than the others,
and it will be encoded in $test_encoding. We should therefore
include an ISO8859 character: ¡bueno!
EOF
test_expect_success 'setup complex body' '
message=$(cat <<-EOF
Test printing of complex bodies
This commit message is much longer than the others,
and it will be encoded in $test_encoding. We should therefore
include an ISO8859 character: ¡bueno!
EOF
) &&
if test_have_prereq ICONV
then
echo "$message" | iconv -f utf-8 -t $test_encoding >commit-msg
else
echo "$message" >commit-msg
fi &&
git config i18n.commitencoding $test_encoding &&
echo change2 >foo && git commit -a -F commit-msg &&
head3=$(git rev-parse --verify HEAD) &&
@@ -448,7 +456,12 @@ test_expect_success 'setup expected messages (for test %b)' '
commit $head2
commit $head1
EOF
iconv -f utf-8 -t $test_encoding expected.utf-8 >expected.ISO8859-1
if test_have_prereq ICONV
then
iconv -f utf-8 -t $test_encoding expected.utf-8 >expected.ISO8859-1
else
cp expected.utf-8 expected.ISO8859-1
fi
'
test_format complex-body %b <expected.ISO8859-1

View File

@@ -1720,7 +1720,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
@@ -1731,6 +1730,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