t/test-lib: wire up NO_ICONV prerequisite

The iconv library is used by Git to reencode files, commit messages and
other things. As such it is a rather integral part, but given that many
platforms nowadays use UTF-8 everywhere you can live without support for
reencoding in many situations. It is thus optional to build Git with
iconv, and some of our platforms wired up in "config.mak.uname" disable
it. But while we support building without it, running our test suite
with "NO_ICONV=Yes" causes many test failures.

Wire up a new test prerequisite ICONV that gets populated via our
GIT-BUILD-OPTIONS. Annotate failing tests accordingly.

Note that this commit does not do a deep dive into every single test to
assess whether the failure is expected or not. Most of the tests do
smell like the expected kind of failure though.

Signed-off-by: Patrick Steinhardt <ps@pks.im>
Signed-off-by: Taylor Blau <me@ttaylorr.com>
maint
Patrick Steinhardt 2024-10-16 10:12:53 +02:00 committed by Taylor Blau
parent ed7634ebcc
commit df383b5842
22 changed files with 227 additions and 104 deletions

View File

@ -3171,6 +3171,7 @@ GIT-BUILD-OPTIONS: FORCE
@echo PYTHON_PATH=\''$(subst ','\'',$(PYTHON_PATH_SQ))'\' >>$@+ @echo PYTHON_PATH=\''$(subst ','\'',$(PYTHON_PATH_SQ))'\' >>$@+
@echo TAR=\''$(subst ','\'',$(subst ','\'',$(TAR)))'\' >>$@+ @echo TAR=\''$(subst ','\'',$(subst ','\'',$(TAR)))'\' >>$@+
@echo NO_CURL=\''$(subst ','\'',$(subst ','\'',$(NO_CURL)))'\' >>$@+ @echo NO_CURL=\''$(subst ','\'',$(subst ','\'',$(NO_CURL)))'\' >>$@+
@echo NO_ICONV=\''$(subst ','\'',$(subst ','\'',$(NO_ICONV)))'\' >>$@+
@echo NO_EXPAT=\''$(subst ','\'',$(subst ','\'',$(NO_EXPAT)))'\' >>$@+ @echo NO_EXPAT=\''$(subst ','\'',$(subst ','\'',$(NO_EXPAT)))'\' >>$@+
@echo USE_LIBPCRE2=\''$(subst ','\'',$(subst ','\'',$(USE_LIBPCRE2)))'\' >>$@+ @echo USE_LIBPCRE2=\''$(subst ','\'',$(subst ','\'',$(USE_LIBPCRE2)))'\' >>$@+
@echo NO_PERL=\''$(subst ','\'',$(subst ','\'',$(NO_PERL)))'\' >>$@+ @echo NO_PERL=\''$(subst ','\'',$(subst ','\'',$(NO_PERL)))'\' >>$@+

View File

@ -1109,6 +1109,7 @@ set(DIFF diff)
set(PYTHON_PATH /usr/bin/python) set(PYTHON_PATH /usr/bin/python)
set(TAR tar) set(TAR tar)
set(NO_CURL ) set(NO_CURL )
set(NO_ICONV )
set(NO_EXPAT ) set(NO_EXPAT )
set(USE_LIBPCRE2 ) set(USE_LIBPCRE2 )
set(NO_PERL ) set(NO_PERL )
@ -1122,6 +1123,10 @@ if(NOT CURL_FOUND)
set(NO_CURL 1) set(NO_CURL 1)
endif() endif()


if(NOT Iconv_FOUND)
SET(NO_ICONV 1)
endif()

if(NOT EXPAT_FOUND) if(NOT EXPAT_FOUND)
set(NO_EXPAT 1) set(NO_EXPAT 1)
endif() endif()
@ -1145,6 +1150,7 @@ file(APPEND ${CMAKE_BINARY_DIR}/GIT-BUILD-OPTIONS "DIFF='${DIFF}'\n")
file(APPEND ${CMAKE_BINARY_DIR}/GIT-BUILD-OPTIONS "PYTHON_PATH='${PYTHON_PATH}'\n") file(APPEND ${CMAKE_BINARY_DIR}/GIT-BUILD-OPTIONS "PYTHON_PATH='${PYTHON_PATH}'\n")
file(APPEND ${CMAKE_BINARY_DIR}/GIT-BUILD-OPTIONS "TAR='${TAR}'\n") file(APPEND ${CMAKE_BINARY_DIR}/GIT-BUILD-OPTIONS "TAR='${TAR}'\n")
file(APPEND ${CMAKE_BINARY_DIR}/GIT-BUILD-OPTIONS "NO_CURL='${NO_CURL}'\n") file(APPEND ${CMAKE_BINARY_DIR}/GIT-BUILD-OPTIONS "NO_CURL='${NO_CURL}'\n")
file(APPEND ${CMAKE_BINARY_DIR}/GIT-BUILD-OPTIONS "NO_ICONV='${NO_ICONV}'\n")
file(APPEND ${CMAKE_BINARY_DIR}/GIT-BUILD-OPTIONS "NO_EXPAT='${NO_EXPAT}'\n") file(APPEND ${CMAKE_BINARY_DIR}/GIT-BUILD-OPTIONS "NO_EXPAT='${NO_EXPAT}'\n")
file(APPEND ${CMAKE_BINARY_DIR}/GIT-BUILD-OPTIONS "NO_PERL='${NO_PERL}'\n") file(APPEND ${CMAKE_BINARY_DIR}/GIT-BUILD-OPTIONS "NO_PERL='${NO_PERL}'\n")
file(APPEND ${CMAKE_BINARY_DIR}/GIT-BUILD-OPTIONS "NO_PTHREADS='${NO_PTHREADS}'\n") file(APPEND ${CMAKE_BINARY_DIR}/GIT-BUILD-OPTIONS "NO_PTHREADS='${NO_PTHREADS}'\n")

View File

@ -12,6 +12,12 @@ TEST_CREATE_REPO_NO_TEMPLATE=1


GIT_TRACE_WORKING_TREE_ENCODING=1 && export GIT_TRACE_WORKING_TREE_ENCODING GIT_TRACE_WORKING_TREE_ENCODING=1 && export GIT_TRACE_WORKING_TREE_ENCODING


if ! test_have_prereq ICONV
then
skip_all='skipping working tree encoding tests; iconv not available'
test_done
fi

test_expect_success 'setup test files' ' test_expect_success 'setup test files' '
git config core.eol lf && git config core.eol lf &&



View File

@ -34,7 +34,7 @@ test_expect_success 'parallel-checkout with ident' '
) )
' '


test_expect_success 'parallel-checkout with re-encoding' ' test_expect_success ICONV 'parallel-checkout with re-encoding' '
set_checkout_config 2 0 && set_checkout_config 2 0 &&
git init encoding && git init encoding &&
( (

View File

@ -20,6 +20,12 @@ export GIT_TEST_DEFAULT_INITIAL_BRANCH_NAME
TEST_PASSES_SANITIZE_LEAK=true TEST_PASSES_SANITIZE_LEAK=true
. ./test-lib.sh . ./test-lib.sh


if ! test_have_prereq ICONV
then
skip_all='skipping rebase i18n tests; iconv not available'
test_done
fi

compare_msg () { compare_msg () {
iconv -f "$2" -t "$3" "$TEST_DIRECTORY/t3434/$1" >expect && iconv -f "$2" -t "$3" "$TEST_DIRECTORY/t3434/$1" >expect &&
git cat-file commit HEAD >raw && git cat-file commit HEAD >raw &&

View File

@ -8,6 +8,12 @@ test_description='commit and log output encodings'
TEST_PASSES_SANITIZE_LEAK=true TEST_PASSES_SANITIZE_LEAK=true
. ./test-lib.sh . ./test-lib.sh


if ! test_have_prereq ICONV
then
skip_all='skipping commit i18n tests; iconv not available'
test_done
fi

compare_with () { compare_with () {
git show -s $1 | sed -e '1,/^$/d' -e 's/^ //' >current && git show -s $1 | sed -e '1,/^$/d' -e 's/^ //' >current &&
case "$3" in case "$3" in

View File

@ -11,6 +11,12 @@ export GIT_TEST_DEFAULT_INITIAL_BRANCH_NAME
TEST_PASSES_SANITIZE_LEAK=true TEST_PASSES_SANITIZE_LEAK=true
. ./test-lib.sh . ./test-lib.sh


if ! test_have_prereq ICONV
then
skip_all='skipping patch i18n tests; iconv not available'
test_done
fi

check_encoding () { check_encoding () {
# Make sure characters are not corrupted # Make sure characters are not corrupted
cnt="$1" header="$2" i=1 j=0 cnt="$1" header="$2" i=1 j=0

View File

@ -15,12 +15,18 @@ export GIT_TEST_DEFAULT_INITIAL_BRANCH_NAME
TEST_PASSES_SANITIZE_LEAK=true TEST_PASSES_SANITIZE_LEAK=true
. ./test-lib.sh . ./test-lib.sh


# Tested non-UTF-8 encoding # Test non-UTF-8 encoding in case iconv is available.
test_encoding="ISO8859-1" if test_have_prereq ICONV
then
test_encoding="ISO8859-1"
# String "added" in German (translated with Google Translate), encoded in UTF-8,
# used in sample commit log messages in add_file() function below.
added=$(printf "hinzugef\303\274gt")
else
test_encoding="UTF-8"
added="added"
fi


# String "added" in German (translated with Google Translate), encoded in UTF-8,
# used in sample commit log messages in add_file() function below.
added=$(printf "hinzugef\303\274gt")
add_file () { add_file () {
( (
cd "$1" && cd "$1" &&

View File

@ -12,12 +12,18 @@ initialized previously but the checkout has since been removed.
TEST_PASSES_SANITIZE_LEAK=true TEST_PASSES_SANITIZE_LEAK=true
. ./test-lib.sh . ./test-lib.sh


# Tested non-UTF-8 encoding
test_encoding="ISO8859-1"


# String "added" in German (translated with Google Translate), encoded in UTF-8, # Test non-UTF-8 encoding in case iconv is available.
# used in sample commit log messages in add_file() function below. if test_have_prereq ICONV
added=$(printf "hinzugef\303\274gt") then
test_encoding="ISO8859-1"
# String "added" in German (translated with Google Translate), encoded in UTF-8,
# used in sample commit log messages in add_file() function below.
added=$(printf "hinzugef\303\274gt")
else
test_encoding="UTF-8"
added="added"
fi


add_file () { add_file () {
( (

View File

@ -13,12 +13,17 @@ This test tries to verify the sanity of --submodule=diff option of git diff.
TEST_PASSES_SANITIZE_LEAK=true TEST_PASSES_SANITIZE_LEAK=true
. ./test-lib.sh . ./test-lib.sh


# Tested non-UTF-8 encoding # Test non-UTF-8 encoding in case iconv is available.
test_encoding="ISO8859-1" if test_have_prereq ICONV

then
# String "added" in German (translated with Google Translate), encoded in UTF-8, test_encoding="ISO8859-1"
# used in sample commit log messages in add_file() function below. # String "added" in German (translated with Google Translate), encoded in UTF-8,
added=$(printf "hinzugef\303\274gt") # used in sample commit log messages in add_file() function below.
added=$(printf "hinzugef\303\274gt")
else
test_encoding="UTF-8"
added="added"
fi


add_file () { add_file () {
( (

View File

@ -105,7 +105,7 @@ test_expect_success 'output from user-defined format is re-wrapped' '
test_cmp expect log.predictable test_cmp expect log.predictable
' '


test_expect_success !MINGW 'shortlog wrapping' ' test_expect_success !MINGW,ICONV 'shortlog wrapping' '
cat >expect <<\EOF && cat >expect <<\EOF &&
A U Thor (5): A U Thor (5):
Test Test
@ -126,13 +126,13 @@ EOF
test_cmp expect out test_cmp expect out
' '


test_expect_success !MINGW 'shortlog from non-git directory' ' test_expect_success !MINGW,ICONV 'shortlog from non-git directory' '
git log --no-expand-tabs HEAD >log && git log --no-expand-tabs HEAD >log &&
GIT_DIR=non-existing git shortlog -w <log >out && GIT_DIR=non-existing git shortlog -w <log >out &&
test_cmp expect out test_cmp expect out
' '


test_expect_success !MINGW 'shortlog can read --format=raw output' ' test_expect_success !MINGW,ICONV 'shortlog can read --format=raw output' '
git log --format=raw HEAD >log && git log --format=raw HEAD >log &&
GIT_DIR=non-existing git shortlog -w <log >out && GIT_DIR=non-existing git shortlog -w <log >out &&
test_cmp expect out test_cmp expect out
@ -182,7 +182,7 @@ $DSCHO (2):


EOF EOF


test_expect_success !MINGW 'shortlog encoding' ' test_expect_success !MINGW,ICONV 'shortlog encoding' '
git reset --hard "$commit" && git reset --hard "$commit" &&
git config --unset i18n.commitencoding && git config --unset i18n.commitencoding &&
echo 2 > a1 && echo 2 > a1 &&

View File

@ -114,19 +114,19 @@ test_expect_success 'alias loop' '
test_must_fail git log --pretty=test-foo test_must_fail git log --pretty=test-foo
' '


test_expect_success 'NUL separation' ' test_expect_success ICONV 'NUL separation' '
printf "add bar\0$(commit_msg)" >expected && printf "add bar\0$(commit_msg)" >expected &&
git log -z --pretty="format:%s" >actual && git log -z --pretty="format:%s" >actual &&
test_cmp expected actual test_cmp expected actual
' '


test_expect_success 'NUL termination' ' test_expect_success ICONV 'NUL termination' '
printf "add bar\0$(commit_msg)\0" >expected && printf "add bar\0$(commit_msg)\0" >expected &&
git log -z --pretty="tformat:%s" >actual && git log -z --pretty="tformat:%s" >actual &&
test_cmp expected actual test_cmp expected actual
' '


test_expect_success 'NUL separation with --stat' ' test_expect_success ICONV 'NUL separation with --stat' '
stat0_part=$(git diff --stat HEAD^ HEAD) && stat0_part=$(git diff --stat HEAD^ HEAD) &&
stat1_part=$(git diff-tree --no-commit-id --stat --root 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 && printf "add bar\n$stat0_part\n\0$(commit_msg)\n$stat1_part\n" >expected &&
@ -181,7 +181,7 @@ test_expect_success 'setup more commits' '
head4=$(git rev-parse --verify --short HEAD~3) head4=$(git rev-parse --verify --short HEAD~3)
' '


test_expect_success 'left alignment formatting' ' test_expect_success ICONV 'left alignment formatting' '
git log --pretty="tformat:%<(40)%s" >actual && git log --pretty="tformat:%<(40)%s" >actual &&
qz_to_tab_space <<-EOF >expected && qz_to_tab_space <<-EOF >expected &&
message two Z message two Z
@ -192,7 +192,7 @@ test_expect_success 'left alignment formatting' '
test_cmp expected actual test_cmp expected actual
' '


test_expect_success 'left alignment formatting. i18n.logOutputEncoding' ' test_expect_success ICONV 'left alignment formatting. i18n.logOutputEncoding' '
git -c i18n.logOutputEncoding=$test_encoding log --pretty="tformat:%<(40)%s" >actual && git -c i18n.logOutputEncoding=$test_encoding log --pretty="tformat:%<(40)%s" >actual &&
qz_to_tab_space <<-EOF | iconv -f utf-8 -t $test_encoding >expected && qz_to_tab_space <<-EOF | iconv -f utf-8 -t $test_encoding >expected &&
message two Z message two Z
@ -203,7 +203,7 @@ test_expect_success 'left alignment formatting. i18n.logOutputEncoding' '
test_cmp expected actual test_cmp expected actual
' '


test_expect_success 'left alignment formatting at the nth column' ' test_expect_success ICONV 'left alignment formatting at the nth column' '
git log --pretty="tformat:%h %<|(40)%s" >actual && git log --pretty="tformat:%h %<|(40)%s" >actual &&
qz_to_tab_space <<-EOF >expected && qz_to_tab_space <<-EOF >expected &&
$head1 message two Z $head1 message two Z
@ -214,7 +214,7 @@ test_expect_success 'left alignment formatting at the nth column' '
test_cmp expected actual test_cmp expected actual
' '


test_expect_success 'left alignment formatting at the nth column' ' test_expect_success ICONV 'left alignment formatting at the nth column' '
COLUMNS=50 git log --pretty="tformat:%h %<|(-10)%s" >actual && COLUMNS=50 git log --pretty="tformat:%h %<|(-10)%s" >actual &&
qz_to_tab_space <<-EOF >expected && qz_to_tab_space <<-EOF >expected &&
$head1 message two Z $head1 message two Z
@ -225,7 +225,7 @@ test_expect_success 'left alignment formatting at the nth column' '
test_cmp expected actual test_cmp expected actual
' '


test_expect_success 'left alignment formatting at the nth column. i18n.logOutputEncoding' ' test_expect_success ICONV 'left alignment formatting at the nth column. i18n.logOutputEncoding' '
git -c i18n.logOutputEncoding=$test_encoding log --pretty="tformat:%h %<|(40)%s" >actual && git -c i18n.logOutputEncoding=$test_encoding log --pretty="tformat:%h %<|(40)%s" >actual &&
qz_to_tab_space <<-EOF | iconv -f utf-8 -t $test_encoding >expected && qz_to_tab_space <<-EOF | iconv -f utf-8 -t $test_encoding >expected &&
$head1 message two Z $head1 message two Z
@ -236,7 +236,7 @@ test_expect_success 'left alignment formatting at the nth column. i18n.logOutput
test_cmp expected actual test_cmp expected actual
' '


test_expect_success 'left alignment formatting with no padding' ' test_expect_success ICONV 'left alignment formatting with no padding' '
git log --pretty="tformat:%<(1)%s" >actual && git log --pretty="tformat:%<(1)%s" >actual &&
cat <<-EOF >expected && cat <<-EOF >expected &&
message two message two
@ -258,7 +258,7 @@ test_expect_success 'left alignment formatting with no padding. i18n.logOutputEn
test_cmp expected actual test_cmp expected actual
' '


test_expect_success 'left alignment formatting with trunc' ' test_expect_success ICONV 'left alignment formatting with trunc' '
git log --pretty="tformat:%<(10,trunc)%s" >actual && git log --pretty="tformat:%<(10,trunc)%s" >actual &&
qz_to_tab_space <<-\EOF >expected && qz_to_tab_space <<-\EOF >expected &&
message .. message ..
@ -269,7 +269,7 @@ test_expect_success 'left alignment formatting with trunc' '
test_cmp expected actual test_cmp expected actual
' '


test_expect_success 'left alignment formatting with trunc. i18n.logOutputEncoding' ' test_expect_success ICONV 'left alignment formatting with trunc. i18n.logOutputEncoding' '
git -c i18n.logOutputEncoding=$test_encoding log --pretty="tformat:%<(10,trunc)%s" >actual && git -c i18n.logOutputEncoding=$test_encoding log --pretty="tformat:%<(10,trunc)%s" >actual &&
qz_to_tab_space <<-\EOF | iconv -f utf-8 -t $test_encoding >expected && qz_to_tab_space <<-\EOF | iconv -f utf-8 -t $test_encoding >expected &&
message .. message ..
@ -280,7 +280,7 @@ test_expect_success 'left alignment formatting with trunc. i18n.logOutputEncodin
test_cmp expected actual test_cmp expected actual
' '


test_expect_success 'left alignment formatting with ltrunc' ' test_expect_success ICONV 'left alignment formatting with ltrunc' '
git log --pretty="tformat:%<(10,ltrunc)%s" >actual && git log --pretty="tformat:%<(10,ltrunc)%s" >actual &&
qz_to_tab_space <<-EOF >expected && qz_to_tab_space <<-EOF >expected &&
..sage two ..sage two
@ -291,7 +291,7 @@ test_expect_success 'left alignment formatting with ltrunc' '
test_cmp expected actual test_cmp expected actual
' '


test_expect_success 'left alignment formatting with ltrunc. i18n.logOutputEncoding' ' test_expect_success ICONV 'left alignment formatting with ltrunc. i18n.logOutputEncoding' '
git -c i18n.logOutputEncoding=$test_encoding log --pretty="tformat:%<(10,ltrunc)%s" >actual && git -c i18n.logOutputEncoding=$test_encoding log --pretty="tformat:%<(10,ltrunc)%s" >actual &&
qz_to_tab_space <<-EOF | iconv -f utf-8 -t $test_encoding >expected && qz_to_tab_space <<-EOF | iconv -f utf-8 -t $test_encoding >expected &&
..sage two ..sage two
@ -302,7 +302,7 @@ test_expect_success 'left alignment formatting with ltrunc. i18n.logOutputEncodi
test_cmp expected actual test_cmp expected actual
' '


test_expect_success 'left alignment formatting with mtrunc' ' test_expect_success ICONV 'left alignment formatting with mtrunc' '
git log --pretty="tformat:%<(10,mtrunc)%s" >actual && git log --pretty="tformat:%<(10,mtrunc)%s" >actual &&
qz_to_tab_space <<-\EOF >expected && qz_to_tab_space <<-\EOF >expected &&
mess.. two mess.. two
@ -313,7 +313,7 @@ test_expect_success 'left alignment formatting with mtrunc' '
test_cmp expected actual test_cmp expected actual
' '


test_expect_success 'left alignment formatting with mtrunc. i18n.logOutputEncoding' ' test_expect_success ICONV 'left alignment formatting with mtrunc. i18n.logOutputEncoding' '
git -c i18n.logOutputEncoding=$test_encoding log --pretty="tformat:%<(10,mtrunc)%s" >actual && git -c i18n.logOutputEncoding=$test_encoding log --pretty="tformat:%<(10,mtrunc)%s" >actual &&
qz_to_tab_space <<-\EOF | iconv -f utf-8 -t $test_encoding >expected && qz_to_tab_space <<-\EOF | iconv -f utf-8 -t $test_encoding >expected &&
mess.. two mess.. two
@ -324,7 +324,7 @@ test_expect_success 'left alignment formatting with mtrunc. i18n.logOutputEncodi
test_cmp expected actual test_cmp expected actual
' '


test_expect_success 'right alignment formatting' ' test_expect_success ICONV 'right alignment formatting' '
git log --pretty="tformat:%>(40)%s" >actual && git log --pretty="tformat:%>(40)%s" >actual &&
qz_to_tab_space <<-EOF >expected && qz_to_tab_space <<-EOF >expected &&
Z message two Z message two
@ -335,7 +335,7 @@ test_expect_success 'right alignment formatting' '
test_cmp expected actual test_cmp expected actual
' '


test_expect_success 'right alignment formatting. i18n.logOutputEncoding' ' test_expect_success ICONV 'right alignment formatting. i18n.logOutputEncoding' '
git -c i18n.logOutputEncoding=$test_encoding log --pretty="tformat:%>(40)%s" >actual && git -c i18n.logOutputEncoding=$test_encoding log --pretty="tformat:%>(40)%s" >actual &&
qz_to_tab_space <<-EOF | iconv -f utf-8 -t $test_encoding >expected && qz_to_tab_space <<-EOF | iconv -f utf-8 -t $test_encoding >expected &&
Z message two Z message two
@ -346,7 +346,7 @@ test_expect_success 'right alignment formatting. i18n.logOutputEncoding' '
test_cmp expected actual test_cmp expected actual
' '


test_expect_success 'right alignment formatting at the nth column' ' test_expect_success ICONV 'right alignment formatting at the nth column' '
git log --pretty="tformat:%h %>|(40)%s" >actual && git log --pretty="tformat:%h %>|(40)%s" >actual &&
qz_to_tab_space <<-EOF >expected && qz_to_tab_space <<-EOF >expected &&
$head1 message two $head1 message two
@ -357,7 +357,7 @@ test_expect_success 'right alignment formatting at the nth column' '
test_cmp expected actual test_cmp expected actual
' '


test_expect_success 'right alignment formatting at the nth column' ' test_expect_success ICONV 'right alignment formatting at the nth column' '
COLUMNS=50 git log --pretty="tformat:%h %>|(-10)%s" >actual && COLUMNS=50 git log --pretty="tformat:%h %>|(-10)%s" >actual &&
qz_to_tab_space <<-EOF >expected && qz_to_tab_space <<-EOF >expected &&
$head1 message two $head1 message two
@ -368,7 +368,7 @@ test_expect_success 'right alignment formatting at the nth column' '
test_cmp expected actual test_cmp expected actual
' '


test_expect_success 'right alignment formatting at the nth column. i18n.logOutputEncoding' ' test_expect_success ICONV 'right alignment formatting at the nth column. i18n.logOutputEncoding' '
git -c i18n.logOutputEncoding=$test_encoding log --pretty="tformat:%h %>|(40)%s" >actual && git -c i18n.logOutputEncoding=$test_encoding log --pretty="tformat:%h %>|(40)%s" >actual &&
qz_to_tab_space <<-EOF | iconv -f utf-8 -t $test_encoding >expected && qz_to_tab_space <<-EOF | iconv -f utf-8 -t $test_encoding >expected &&
$head1 message two $head1 message two
@ -381,7 +381,7 @@ test_expect_success 'right alignment formatting at the nth column. i18n.logOutpu


# Note: Space between 'message' and 'two' should be in the same column # Note: Space between 'message' and 'two' should be in the same column
# as in previous test. # as in previous test.
test_expect_success 'right alignment formatting at the nth column with --graph. i18n.logOutputEncoding' ' test_expect_success ICONV 'right alignment formatting at the nth column with --graph. i18n.logOutputEncoding' '
git -c i18n.logOutputEncoding=$test_encoding log --graph --pretty="tformat:%h %>|(40)%s" >actual && git -c i18n.logOutputEncoding=$test_encoding log --graph --pretty="tformat:%h %>|(40)%s" >actual &&
iconv -f utf-8 -t $test_encoding >expected <<-EOF && iconv -f utf-8 -t $test_encoding >expected <<-EOF &&
* $head1 message two * $head1 message two
@ -392,7 +392,7 @@ test_expect_success 'right alignment formatting at the nth column with --graph.
test_cmp expected actual test_cmp expected actual
' '


test_expect_success 'right alignment formatting with no padding' ' test_expect_success ICONV 'right alignment formatting with no padding' '
git log --pretty="tformat:%>(1)%s" >actual && git log --pretty="tformat:%>(1)%s" >actual &&
cat <<-EOF >expected && cat <<-EOF >expected &&
message two message two
@ -403,7 +403,7 @@ test_expect_success 'right alignment formatting with no padding' '
test_cmp expected actual test_cmp expected actual
' '


test_expect_success 'right alignment formatting with no padding and with --graph' ' test_expect_success ICONV 'right alignment formatting with no padding and with --graph' '
git log --graph --pretty="tformat:%>(1)%s" >actual && git log --graph --pretty="tformat:%>(1)%s" >actual &&
cat <<-EOF >expected && cat <<-EOF >expected &&
* message two * message two
@ -414,7 +414,7 @@ test_expect_success 'right alignment formatting with no padding and with --graph
test_cmp expected actual test_cmp expected actual
' '


test_expect_success 'right alignment formatting with no padding. i18n.logOutputEncoding' ' test_expect_success ICONV 'right alignment formatting with no padding. i18n.logOutputEncoding' '
git -c i18n.logOutputEncoding=$test_encoding log --pretty="tformat:%>(1)%s" >actual && git -c i18n.logOutputEncoding=$test_encoding log --pretty="tformat:%>(1)%s" >actual &&
cat <<-EOF | iconv -f utf-8 -t $test_encoding >expected && cat <<-EOF | iconv -f utf-8 -t $test_encoding >expected &&
message two message two
@ -425,7 +425,7 @@ test_expect_success 'right alignment formatting with no padding. i18n.logOutputE
test_cmp expected actual test_cmp expected actual
' '


test_expect_success 'center alignment formatting' ' test_expect_success ICONV 'center alignment formatting' '
git log --pretty="tformat:%><(40)%s" >actual && git log --pretty="tformat:%><(40)%s" >actual &&
qz_to_tab_space <<-EOF >expected && qz_to_tab_space <<-EOF >expected &&
Z message two Z Z message two Z
@ -436,7 +436,7 @@ test_expect_success 'center alignment formatting' '
test_cmp expected actual test_cmp expected actual
' '


test_expect_success 'center alignment formatting. i18n.logOutputEncoding' ' test_expect_success ICONV 'center alignment formatting. i18n.logOutputEncoding' '
git -c i18n.logOutputEncoding=$test_encoding log --pretty="tformat:%><(40)%s" >actual && git -c i18n.logOutputEncoding=$test_encoding log --pretty="tformat:%><(40)%s" >actual &&
qz_to_tab_space <<-EOF | iconv -f utf-8 -t $test_encoding >expected && qz_to_tab_space <<-EOF | iconv -f utf-8 -t $test_encoding >expected &&
Z message two Z Z message two Z
@ -446,7 +446,7 @@ test_expect_success 'center alignment formatting. i18n.logOutputEncoding' '
EOF EOF
test_cmp expected actual test_cmp expected actual
' '
test_expect_success 'center alignment formatting at the nth column' ' test_expect_success ICONV 'center alignment formatting at the nth column' '
git log --pretty="tformat:%h %><|(40)%s" >actual && git log --pretty="tformat:%h %><|(40)%s" >actual &&
qz_to_tab_space <<-EOF >expected && qz_to_tab_space <<-EOF >expected &&
$head1 message two Z $head1 message two Z
@ -457,7 +457,7 @@ test_expect_success 'center alignment formatting at the nth column' '
test_cmp expected actual test_cmp expected actual
' '


test_expect_success 'center alignment formatting at the nth column' ' test_expect_success ICONV 'center alignment formatting at the nth column' '
COLUMNS=70 git log --pretty="tformat:%h %><|(-30)%s" >actual && COLUMNS=70 git log --pretty="tformat:%h %><|(-30)%s" >actual &&
qz_to_tab_space <<-EOF >expected && qz_to_tab_space <<-EOF >expected &&
$head1 message two Z $head1 message two Z
@ -468,7 +468,7 @@ test_expect_success 'center alignment formatting at the nth column' '
test_cmp expected actual test_cmp expected actual
' '


test_expect_success 'center alignment formatting at the nth column. i18n.logOutputEncoding' ' test_expect_success ICONV 'center alignment formatting at the nth column. i18n.logOutputEncoding' '
git -c i18n.logOutputEncoding=$test_encoding log --pretty="tformat:%h %><|(40)%s" >actual && git -c i18n.logOutputEncoding=$test_encoding log --pretty="tformat:%h %><|(40)%s" >actual &&
qz_to_tab_space <<-EOF | iconv -f utf-8 -t $test_encoding >expected && qz_to_tab_space <<-EOF | iconv -f utf-8 -t $test_encoding >expected &&
$head1 message two Z $head1 message two Z
@ -479,7 +479,7 @@ test_expect_success 'center alignment formatting at the nth column. i18n.logOutp
test_cmp expected actual test_cmp expected actual
' '


test_expect_success 'center alignment formatting with no padding' ' test_expect_success ICONV 'center alignment formatting with no padding' '
git log --pretty="tformat:%><(1)%s" >actual && git log --pretty="tformat:%><(1)%s" >actual &&
cat <<-EOF >expected && cat <<-EOF >expected &&
message two message two
@ -493,7 +493,7 @@ test_expect_success 'center alignment formatting with no padding' '
# save HEAD's SHA-1 digest (with no abbreviations) to use it below # save HEAD's SHA-1 digest (with no abbreviations) to use it below
# as far as the next test amends HEAD # as far as the next test amends HEAD
old_head1=$(git rev-parse --verify HEAD~0) old_head1=$(git rev-parse --verify HEAD~0)
test_expect_success 'center alignment formatting with no padding. i18n.logOutputEncoding' ' test_expect_success ICONV 'center alignment formatting with no padding. i18n.logOutputEncoding' '
git -c i18n.logOutputEncoding=$test_encoding log --pretty="tformat:%><(1)%s" >actual && git -c i18n.logOutputEncoding=$test_encoding log --pretty="tformat:%><(1)%s" >actual &&
cat <<-EOF | iconv -f utf-8 -t $test_encoding >expected && cat <<-EOF | iconv -f utf-8 -t $test_encoding >expected &&
message two message two
@ -504,7 +504,7 @@ test_expect_success 'center alignment formatting with no padding. i18n.logOutput
test_cmp expected actual test_cmp expected actual
' '


test_expect_success 'left/right alignment formatting with stealing' ' test_expect_success ICONV 'left/right alignment formatting with stealing' '
git commit --amend -m short --author "long long long <long@me.com>" && git commit --amend -m short --author "long long long <long@me.com>" &&
git log --pretty="tformat:%<(10,trunc)%s%>>(10,ltrunc)% an" >actual && git log --pretty="tformat:%<(10,trunc)%s%>>(10,ltrunc)% an" >actual &&
cat <<-\EOF >expected && cat <<-\EOF >expected &&
@ -515,7 +515,7 @@ test_expect_success 'left/right alignment formatting with stealing' '
EOF EOF
test_cmp expected actual test_cmp expected actual
' '
test_expect_success 'left/right alignment formatting with stealing. i18n.logOutputEncoding' ' test_expect_success ICONV 'left/right alignment formatting with stealing. i18n.logOutputEncoding' '
git -c i18n.logOutputEncoding=$test_encoding log --pretty="tformat:%<(10,trunc)%s%>>(10,ltrunc)% an" >actual && git -c i18n.logOutputEncoding=$test_encoding log --pretty="tformat:%<(10,trunc)%s%>>(10,ltrunc)% an" >actual &&
cat <<-\EOF | iconv -f utf-8 -t $test_encoding >expected && cat <<-\EOF | iconv -f utf-8 -t $test_encoding >expected &&
short long long long short long long long
@ -564,22 +564,38 @@ test_expect_success 'log decoration properly follows tag chain' '
git tag -d tag1 && git tag -d tag1 &&
git commit --amend -m shorter && git commit --amend -m shorter &&
git log --no-walk --tags --pretty="%H %d" --decorate=full >actual && git log --no-walk --tags --pretty="%H %d" --decorate=full >actual &&
cat <<-EOF >expected && if test_have_prereq ICONV
$head2 (tag: refs/tags/message-one) then
$old_head1 (tag: refs/tags/message-two) cat <<-EOF >expected
$head1 (tag: refs/tags/tag2) $head2 (tag: refs/tags/message-one)
EOF $old_head1 (tag: refs/tags/message-two)
$head1 (tag: refs/tags/tag2)
EOF
else
cat <<-EOF >expected
$head2 (tag: refs/tags/message-one)
$old_head1 (tag: refs/tags/tag2, tag: refs/tags/message-two)
EOF
fi &&
sort -k3 actual >actual1 && sort -k3 actual >actual1 &&
test_cmp expected actual1 test_cmp expected actual1
' '


test_expect_success 'clean log decoration' ' test_expect_success 'clean log decoration' '
git log --no-walk --tags --pretty="%H %D" --decorate=full >actual && git log --no-walk --tags --pretty="%H %D" --decorate=full >actual &&
cat >expected <<-EOF && if test_have_prereq ICONV
$head2 tag: refs/tags/message-one then
$old_head1 tag: refs/tags/message-two cat <<-EOF >expected
$head1 tag: refs/tags/tag2 $head2 tag: refs/tags/message-one
EOF $old_head1 tag: refs/tags/message-two
$head1 tag: refs/tags/tag2
EOF
else
cat <<-EOF >expected
$head2 tag: refs/tags/message-one
$old_head1 tag: refs/tags/tag2, tag: refs/tags/message-two
EOF
fi &&
sort -k3 actual >actual1 && sort -k3 actual >actual1 &&
test_cmp expected actual1 test_cmp expected actual1
' '

View File

@ -5,6 +5,12 @@ test_description='test log with i18n features'
TEST_PASSES_SANITIZE_LEAK=true TEST_PASSES_SANITIZE_LEAK=true
. ./lib-gettext.sh . ./lib-gettext.sh


if ! test_have_prereq ICONV
then
skip_all='skipping log i18n tests; iconv not available'
test_done
fi

# two forms of é # two forms of é
utf8_e=$(printf '\303\251') utf8_e=$(printf '\303\251')
latin1_e=$(printf '\351') latin1_e=$(printf '\351')

View File

@ -5,6 +5,12 @@ test_description='git am with corrupt input'
TEST_PASSES_SANITIZE_LEAK=true TEST_PASSES_SANITIZE_LEAK=true
. ./test-lib.sh . ./test-lib.sh


if ! test_have_prereq ICONV
then
skip_all='skipping am encoding corruption tests; iconv not available'
test_done
fi

make_mbox_with_nul () { make_mbox_with_nul () {
space=' ' space=' '
q_nul_in_subject= q_nul_in_subject=

View File

@ -28,7 +28,12 @@ check_mailinfo () {


for mail in 00* for mail in 00*
do do
test_expect_success "mailinfo $mail" ' case "$mail" in
0004)
prereq=ICONV;;
esac

test_expect_success $prereq "mailinfo $mail" '
check_mailinfo "$mail" "" && check_mailinfo "$mail" "" &&
if test -f "$DATA/msg$mail--scissors" if test -f "$DATA/msg$mail--scissors"
then then
@ -56,7 +61,12 @@ test_expect_success 'split box with rfc2047 samples' \


for mail in rfc2047/00* for mail in rfc2047/00*
do do
test_expect_success "mailinfo $mail" ' case "$mail" in
rfc2047/0001)
prereq=ICONV;;
esac

test_expect_success $prereq "mailinfo $mail" '
git mailinfo -u "$mail-msg" "$mail-patch" <"$mail" >"$mail-info" && git mailinfo -u "$mail-msg" "$mail-patch" <"$mail" >"$mail-info" &&
echo msg && echo msg &&
test_cmp "$DATA/empty" "$mail-msg" && test_cmp "$DATA/empty" "$mail-msg" &&

View File

@ -344,12 +344,12 @@ test_expect_success 'git client shows text/plain with a charset' '
grep "this is the error message" stderr grep "this is the error message" stderr
' '


test_expect_success 'http error messages are reencoded' ' test_expect_success ICONV 'http error messages are reencoded' '
test_must_fail git clone "$HTTPD_URL/error/utf16" 2>stderr && test_must_fail git clone "$HTTPD_URL/error/utf16" 2>stderr &&
grep "this is the error message" stderr grep "this is the error message" stderr
' '


test_expect_success 'reencoding is robust to whitespace oddities' ' test_expect_success ICONV 'reencoding is robust to whitespace oddities' '
test_must_fail git clone "$HTTPD_URL/error/odd-spacing" 2>stderr && test_must_fail git clone "$HTTPD_URL/error/odd-spacing" 2>stderr &&
grep "this is the error message" stderr grep "this is the error message" stderr
' '

View File

@ -13,21 +13,41 @@ TEST_PASSES_SANITIZE_LEAK=true
. "$TEST_DIRECTORY"/lib-terminal.sh . "$TEST_DIRECTORY"/lib-terminal.sh


test_tick test_tick
# Tested non-UTF-8 encoding
test_encoding="ISO8859-1"


# String "added" in German if test_have_prereq ICONV
# (translated with Google Translate), then
# encoded in UTF-8, used as a commit log message below. # Tested non-UTF-8 encoding
added_utf8_part=$(printf "\303\274") test_encoding="ISO8859-1"
added_utf8_part_iso88591=$(echo "$added_utf8_part" | iconv -f utf-8 -t $test_encoding)
added=$(printf "added (hinzugef${added_utf8_part}gt) foo") # String "added" in German
added_iso88591=$(echo "$added" | iconv -f utf-8 -t $test_encoding) # (translated with Google Translate),
# same but "changed" # encoded in UTF-8, used as a commit log message below.
changed_utf8_part=$(printf "\303\244") added_utf8_part=$(printf "\303\274")
changed_utf8_part_iso88591=$(echo "$changed_utf8_part" | iconv -f utf-8 -t $test_encoding) added_utf8_part_iso88591=$(echo "$added_utf8_part" | iconv -f utf-8 -t $test_encoding)
changed=$(printf "changed (ge${changed_utf8_part}ndert) foo") added=$(printf "added (hinzugef${added_utf8_part}gt) foo")
changed_iso88591=$(echo "$changed" | iconv -f utf-8 -t $test_encoding) added_iso88591=$(echo "$added" | iconv -f utf-8 -t $test_encoding)
# same but "changed"
changed_utf8_part=$(printf "\303\244")
changed_utf8_part_iso88591=$(echo "$changed_utf8_part" | iconv -f utf-8 -t $test_encoding)
changed=$(printf "changed (ge${changed_utf8_part}ndert) foo")
changed_iso88591=$(echo "$changed" | iconv -f utf-8 -t $test_encoding)
else
# Tested non-UTF-8 encoding
test_encoding="UTF-8"

# String "added" in German
# (translated with Google Translate),
# encoded in UTF-8, used as a commit log message below.
added_utf8_part="u"
added_utf8_part_iso88591="u"
added=$(printf "added (hinzugef${added_utf8_part}gt) foo")
added_iso88591="$added"
# same but "changed"
changed_utf8_part="a"
changed_utf8_part_iso88591="a"
changed=$(printf "changed (ge${changed_utf8_part}ndert) foo")
changed_iso88591="$changed"
fi


# Count of char to truncate # Count of char to truncate
# Number is chosen so, that non-ACSII characters # Number is chosen so, that non-ACSII characters
@ -198,7 +218,7 @@ Thu, 7 Apr 2005 15:13:13 -0700
1112911993 1112911993
EOF EOF


test_format encoding %e <<EOF test_format ICONV encoding %e <<EOF
commit $head2 commit $head2
$test_encoding $test_encoding
commit $head1 commit $head1
@ -374,7 +394,7 @@ test_expect_success 'setup complex body' '
head3_short=$(git rev-parse --short $head3) head3_short=$(git rev-parse --short $head3)
' '


test_format complex-encoding %e <<EOF test_format ICONV complex-encoding %e <<EOF
commit $head3 commit $head3
$test_encoding $test_encoding
commit $head2 commit $head2

View File

@ -13,21 +13,31 @@ export GIT_TEST_DEFAULT_INITIAL_BRANCH_NAME
TEST_PASSES_SANITIZE_LEAK=true TEST_PASSES_SANITIZE_LEAK=true
. ./test-lib.sh . ./test-lib.sh


commit_msg () { if test_have_prereq ICONV
# String "modify 2nd file (changed)" partly in German then
# (translated with Google Translate), commit_msg () {
# encoded in UTF-8, used as a commit log message below. # String "modify 2nd file (changed)" partly in German
msg="modify 2nd file (ge\303\244ndert)\n" # (translated with Google Translate),
if test -n "$1" # encoded in UTF-8, used as a commit log message below.
then msg="modify 2nd file (ge\303\244ndert)\n"
printf "$msg" | iconv -f utf-8 -t "$1" if test -n "$1"
else then
printf "$msg" printf "$msg" | iconv -f utf-8 -t "$1"
fi else
} printf "$msg"
fi
}


# Tested non-UTF-8 encoding # Tested non-UTF-8 encoding
test_encoding="ISO8859-1" test_encoding="ISO8859-1"
else
commit_msg () {
echo "modify 2nd file (geandert)"
}

# Tested non-UTF-8 encoding
test_encoding="UTF-8"
fi


test_expect_success 'creating initial files and commits' ' test_expect_success 'creating initial files and commits' '
test_tick && test_tick &&

View File

@ -3,6 +3,12 @@
test_description='git blame encoding conversion' test_description='git blame encoding conversion'
. ./test-lib.sh . ./test-lib.sh


if ! test_have_prereq ICONV
then
skip_all='skipping blame i18n tests; iconv not available'
test_done
fi

. "$TEST_DIRECTORY"/t8005/utf8.txt . "$TEST_DIRECTORY"/t8005/utf8.txt
. "$TEST_DIRECTORY"/t8005/euc-japan.txt . "$TEST_DIRECTORY"/t8005/euc-japan.txt
. "$TEST_DIRECTORY"/t8005/sjis.txt . "$TEST_DIRECTORY"/t8005/sjis.txt

View File

@ -3676,7 +3676,7 @@ test_expect_success !MINGW 'W: get-mark & empty orphan commit with erroneous thi
### series X (other new features) ### series X (other new features)
### ###


test_expect_success 'X: handling encoding' ' test_expect_success ICONV 'X: handling encoding' '
test_tick && test_tick &&
cat >input <<-INPUT_END && cat >input <<-INPUT_END &&
commit refs/heads/encoding commit refs/heads/encoding

View File

@ -125,7 +125,7 @@ test_expect_success 'fast-export --show-original-ids | git fast-import' '
test $MUSS = $(git rev-parse --verify refs/tags/muss) test $MUSS = $(git rev-parse --verify refs/tags/muss)
' '


test_expect_success 'reencoding iso-8859-7' ' test_expect_success ICONV 'reencoding iso-8859-7' '


test_when_finished "git reset --hard HEAD~1" && test_when_finished "git reset --hard HEAD~1" &&
test_config i18n.commitencoding iso-8859-7 && test_config i18n.commitencoding iso-8859-7 &&
@ -421,7 +421,7 @@ M 100644 :1 there


EOF EOF


test_expect_success 'dropping tag of filtered out object' ' test_expect_success ICONV 'dropping tag of filtered out object' '
( (
cd limit-by-paths && cd limit-by-paths &&
git fast-export --tag-of-filtered-object=drop mytag -- there > output && git fast-export --tag-of-filtered-object=drop mytag -- there > output &&
@ -438,7 +438,7 @@ msg


EOF EOF


test_expect_success 'rewriting tag of filtered out object' ' test_expect_success ICONV 'rewriting tag of filtered out object' '
( (
cd limit-by-paths && cd limit-by-paths &&
git fast-export --tag-of-filtered-object=rewrite mytag -- there > output && git fast-export --tag-of-filtered-object=rewrite mytag -- there > output &&
@ -667,7 +667,7 @@ M 100644 :13 file


EOF EOF


test_expect_success 'avoid uninteresting refs' ' test_expect_success ICONV 'avoid uninteresting refs' '
> tmp-marks && > tmp-marks &&
git fast-export --import-marks=tmp-marks \ git fast-export --import-marks=tmp-marks \
--export-marks=tmp-marks main > /dev/null && --export-marks=tmp-marks main > /dev/null &&
@ -686,7 +686,7 @@ from :14


EOF EOF


test_expect_success 'refs are updated even if no commits need to be exported' ' test_expect_success ICONV 'refs are updated even if no commits need to be exported' '
> tmp-marks && > tmp-marks &&
git fast-export --import-marks=tmp-marks \ git fast-export --import-marks=tmp-marks \
--export-marks=tmp-marks main > /dev/null && --export-marks=tmp-marks main > /dev/null &&

View File

@ -1743,6 +1743,7 @@ esac


( COLUMNS=1 && test $COLUMNS = 1 ) && test_set_prereq COLUMNS_CAN_BE_1 ( COLUMNS=1 && test $COLUMNS = 1 ) && test_set_prereq COLUMNS_CAN_BE_1
test -z "$NO_CURL" && test_set_prereq LIBCURL test -z "$NO_CURL" && test_set_prereq LIBCURL
test -z "$NO_ICONV" && test_set_prereq ICONV
test -z "$NO_PERL" && test_set_prereq PERL test -z "$NO_PERL" && test_set_prereq PERL
test -z "$NO_PTHREADS" && test_set_prereq PTHREADS test -z "$NO_PTHREADS" && test_set_prereq PTHREADS
test -z "$NO_PYTHON" && test_set_prereq PYTHON test -z "$NO_PYTHON" && test_set_prereq PYTHON