]> git.ipfire.org Git - thirdparty/git.git/commitdiff
t/test-lib: wire up NO_ICONV prerequisite
authorPatrick Steinhardt <ps@pks.im>
Wed, 16 Oct 2024 08:12:53 +0000 (10:12 +0200)
committerTaylor Blau <me@ttaylorr.com>
Wed, 16 Oct 2024 21:00:49 +0000 (17:00 -0400)
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>
22 files changed:
Makefile
contrib/buildsystems/CMakeLists.txt
t/t0028-working-tree-encoding.sh
t/t2082-parallel-checkout-attributes.sh
t/t3434-rebase-i18n.sh
t/t3900-i18n-commit.sh
t/t3901-i18n-patch.sh
t/t4041-diff-submodule-option.sh
t/t4059-diff-submodule-not-initialized.sh
t/t4060-diff-submodule-option-diff-format.sh
t/t4201-shortlog.sh
t/t4205-log-pretty-formats.sh
t/t4210-log-i18n.sh
t/t4254-am-corrupt.sh
t/t5100-mailinfo.sh
t/t5550-http-fetch-dumb.sh
t/t6006-rev-list-format.sh
t/t7102-reset.sh
t/t8005-blame-i18n.sh
t/t9300-fast-import.sh
t/t9350-fast-export.sh
t/test-lib.sh

index feeed6f9321a5069424c3adb21f92ad4abec82e8..5db103473416ad19615b883cf8483f1f960087d9 100644 (file)
--- a/Makefile
+++ b/Makefile
@@ -3171,6 +3171,7 @@ GIT-BUILD-OPTIONS: FORCE
        @echo PYTHON_PATH=\''$(subst ','\'',$(PYTHON_PATH_SQ))'\' >>$@+
        @echo TAR=\''$(subst ','\'',$(subst ','\'',$(TAR)))'\' >>$@+
        @echo NO_CURL=\''$(subst ','\'',$(subst ','\'',$(NO_CURL)))'\' >>$@+
+       @echo NO_ICONV=\''$(subst ','\'',$(subst ','\'',$(NO_ICONV)))'\' >>$@+
        @echo NO_EXPAT=\''$(subst ','\'',$(subst ','\'',$(NO_EXPAT)))'\' >>$@+
        @echo USE_LIBPCRE2=\''$(subst ','\'',$(subst ','\'',$(USE_LIBPCRE2)))'\' >>$@+
        @echo NO_PERL=\''$(subst ','\'',$(subst ','\'',$(NO_PERL)))'\' >>$@+
index 62af7b33d2fa14f7d3bb94505749abba6f4b6c21..1384c0eb6d3ddd37c5ed95d471de4bd6c6415a75 100644 (file)
@@ -1109,6 +1109,7 @@ set(DIFF diff)
 set(PYTHON_PATH /usr/bin/python)
 set(TAR tar)
 set(NO_CURL )
+set(NO_ICONV )
 set(NO_EXPAT )
 set(USE_LIBPCRE2 )
 set(NO_PERL )
@@ -1122,6 +1123,10 @@ if(NOT CURL_FOUND)
        set(NO_CURL 1)
 endif()
 
+if(NOT Iconv_FOUND)
+       SET(NO_ICONV 1)
+endif()
+
 if(NOT EXPAT_FOUND)
        set(NO_EXPAT 1)
 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 "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_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_PERL='${NO_PERL}'\n")
 file(APPEND ${CMAKE_BINARY_DIR}/GIT-BUILD-OPTIONS "NO_PTHREADS='${NO_PTHREADS}'\n")
index ad151a346708a5898eb5bdc536131baddafdf987..510da4ca12dfbabe6e093baa14c9a1873cacbde3 100755 (executable)
@@ -12,6 +12,12 @@ TEST_CREATE_REPO_NO_TEMPLATE=1
 
 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' '
        git config core.eol lf &&
 
index aec55496eb1588f022ada0e967251d4b6833c574..a040aa54cee46db75c2dc7a8266a679a8bc5e66e 100755 (executable)
@@ -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 &&
        git init encoding &&
        (
index 26a48d6b1039a57e3111e9dafc1c8caf5422746d..97fc9a23f21f9b02b0b6e0e132dd56dbe82eafcb 100755 (executable)
@@ -20,6 +20,12 @@ export GIT_TEST_DEFAULT_INITIAL_BRANCH_NAME
 TEST_PASSES_SANITIZE_LEAK=true
 . ./test-lib.sh
 
+if ! test_have_prereq ICONV
+then
+       skip_all='skipping rebase i18n tests; iconv not available'
+       test_done
+fi
+
 compare_msg () {
        iconv -f "$2" -t "$3" "$TEST_DIRECTORY/t3434/$1" >expect &&
        git cat-file commit HEAD >raw &&
index db7b403bc1541d8eed62eb65f21ce5ba262d8128..9d4b5ab1f9520f3892a32e17239ae6cb34184269 100755 (executable)
@@ -8,6 +8,12 @@ test_description='commit and log output encodings'
 TEST_PASSES_SANITIZE_LEAK=true
 . ./test-lib.sh
 
+if ! test_have_prereq ICONV
+then
+       skip_all='skipping commit i18n tests; iconv not available'
+       test_done
+fi
+
 compare_with () {
        git show -s $1 | sed -e '1,/^$/d' -e 's/^    //' >current &&
        case "$3" in
index 5f0b9afc3faa7d09013c8eaa6958e7c6786f1095..e0659c92935e7f7582e03fd1121df7488e0e2b4a 100755 (executable)
@@ -11,6 +11,12 @@ export GIT_TEST_DEFAULT_INITIAL_BRANCH_NAME
 TEST_PASSES_SANITIZE_LEAK=true
 . ./test-lib.sh
 
+if ! test_have_prereq ICONV
+then
+       skip_all='skipping patch i18n tests; iconv not available'
+       test_done
+fi
+
 check_encoding () {
        # Make sure characters are not corrupted
        cnt="$1" header="$2" i=1 j=0
index 8fc40e75eb3c78d911cc48ca535abbd1c569cba9..aa149e0085ec991046b1a56e21444fbc89a69de0 100755 (executable)
@@ -15,12 +15,18 @@ export GIT_TEST_DEFAULT_INITIAL_BRANCH_NAME
 TEST_PASSES_SANITIZE_LEAK=true
 . ./test-lib.sh
 
-# Tested non-UTF-8 encoding
-test_encoding="ISO8859-1"
+# Test non-UTF-8 encoding in case iconv is available.
+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 () {
        (
                cd "$1" &&
index 668f5263038374ec0a2584230041cbdfef674652..28fd3cdb154e28d3183dcc13e8eec047c51bbecc 100755 (executable)
@@ -12,12 +12,18 @@ initialized previously but the checkout has since been removed.
 TEST_PASSES_SANITIZE_LEAK=true
 . ./test-lib.sh
 
-# Tested non-UTF-8 encoding
-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")
+# Test non-UTF-8 encoding in case iconv is available.
+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
 
 add_file () {
        (
index 8ce67442d96b2ce8e659a907e47982ebd7c2facf..918334fa4c84bb572b82f709612feabca9005dbe 100755 (executable)
@@ -13,12 +13,17 @@ This test tries to verify the sanity of --submodule=diff option of git diff.
 TEST_PASSES_SANITIZE_LEAK=true
 . ./test-lib.sh
 
-# Tested non-UTF-8 encoding
-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")
+# Test non-UTF-8 encoding in case iconv is available.
+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
 
 add_file () {
        (
index c20c88572445dcc835218509aa280e66dc5b5cf4..0ecb0597c9af8f9b671e0494cd94f3ffafe014cf 100755 (executable)
@@ -105,7 +105,7 @@ test_expect_success 'output from user-defined format is re-wrapped' '
        test_cmp expect log.predictable
 '
 
-test_expect_success !MINGW 'shortlog wrapping' '
+test_expect_success !MINGW,ICONV 'shortlog wrapping' '
        cat >expect <<\EOF &&
 A U Thor (5):
       Test
@@ -126,13 +126,13 @@ EOF
        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_DIR=non-existing git shortlog -w <log >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_DIR=non-existing git shortlog -w <log >out &&
        test_cmp expect out
@@ -182,7 +182,7 @@ $DSCHO (2):
 
 EOF
 
-test_expect_success !MINGW 'shortlog encoding' '
+test_expect_success !MINGW,ICONV 'shortlog encoding' '
        git reset --hard "$commit" &&
        git config --unset i18n.commitencoding &&
        echo 2 > a1 &&
index eb63ce011fa646d0a8992bc505068fd5ac1a57e8..dbbd61255100f09ce21466e68b0c84f8f673dcaf 100755 (executable)
@@ -114,19 +114,19 @@ test_expect_success 'alias loop' '
        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 &&
        git log -z --pretty="format:%s" >actual &&
        test_cmp expected actual
 '
 
-test_expect_success 'NUL termination' '
+test_expect_success ICONV 'NUL termination' '
        printf "add bar\0$(commit_msg)\0" >expected &&
        git log -z --pretty="tformat:%s" >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) &&
        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 &&
@@ -181,7 +181,7 @@ test_expect_success 'setup more commits' '
        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 &&
        qz_to_tab_space <<-EOF >expected &&
        message two                            Z
@@ -192,7 +192,7 @@ test_expect_success 'left alignment formatting' '
        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 &&
        qz_to_tab_space <<-EOF | iconv -f utf-8 -t $test_encoding >expected &&
        message two                            Z
@@ -203,7 +203,7 @@ test_expect_success 'left alignment formatting. i18n.logOutputEncoding' '
        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 &&
        qz_to_tab_space <<-EOF >expected &&
        $head1 message two                    Z
@@ -214,7 +214,7 @@ test_expect_success 'left alignment formatting at the nth column' '
        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 &&
        qz_to_tab_space <<-EOF >expected &&
        $head1 message two                    Z
@@ -225,7 +225,7 @@ test_expect_success 'left alignment formatting at the nth column' '
        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 &&
        qz_to_tab_space <<-EOF | iconv -f utf-8 -t $test_encoding >expected &&
        $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_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 &&
        cat <<-EOF >expected &&
        message two
@@ -258,7 +258,7 @@ test_expect_success 'left alignment formatting with no padding. i18n.logOutputEn
        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 &&
        qz_to_tab_space <<-\EOF >expected &&
        message ..
@@ -269,7 +269,7 @@ test_expect_success 'left alignment formatting with trunc' '
        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 &&
        qz_to_tab_space <<-\EOF | iconv -f utf-8 -t $test_encoding >expected &&
        message ..
@@ -280,7 +280,7 @@ test_expect_success 'left alignment formatting with trunc. i18n.logOutputEncodin
        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 &&
        qz_to_tab_space <<-EOF >expected &&
        ..sage two
@@ -291,7 +291,7 @@ test_expect_success 'left alignment formatting with ltrunc' '
        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 &&
        qz_to_tab_space <<-EOF | iconv -f utf-8 -t $test_encoding >expected &&
        ..sage two
@@ -302,7 +302,7 @@ test_expect_success 'left alignment formatting with ltrunc. i18n.logOutputEncodi
        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 &&
        qz_to_tab_space <<-\EOF >expected &&
        mess.. two
@@ -313,7 +313,7 @@ test_expect_success 'left alignment formatting with mtrunc' '
        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 &&
        qz_to_tab_space <<-\EOF | iconv -f utf-8 -t $test_encoding >expected &&
        mess.. two
@@ -324,7 +324,7 @@ test_expect_success 'left alignment formatting with mtrunc. i18n.logOutputEncodi
        test_cmp expected actual
 '
 
-test_expect_success 'right alignment formatting' '
+test_expect_success ICONV 'right alignment formatting' '
        git log --pretty="tformat:%>(40)%s" >actual &&
        qz_to_tab_space <<-EOF >expected &&
        Z                            message two
@@ -335,7 +335,7 @@ test_expect_success 'right alignment formatting' '
        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 &&
        qz_to_tab_space <<-EOF | iconv -f utf-8 -t $test_encoding >expected &&
        Z                            message two
@@ -346,7 +346,7 @@ test_expect_success 'right alignment formatting. i18n.logOutputEncoding' '
        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 &&
        qz_to_tab_space <<-EOF >expected &&
        $head1                      message two
@@ -357,7 +357,7 @@ test_expect_success 'right alignment formatting at the nth column' '
        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 &&
        qz_to_tab_space <<-EOF >expected &&
        $head1                      message two
@@ -368,7 +368,7 @@ test_expect_success 'right alignment formatting at the nth column' '
        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 &&
        qz_to_tab_space <<-EOF | iconv -f utf-8 -t $test_encoding >expected &&
        $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
 # 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 &&
        iconv -f utf-8 -t $test_encoding >expected <<-EOF &&
        * $head1                    message two
@@ -392,7 +392,7 @@ test_expect_success 'right alignment formatting at the nth column with --graph.
        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 &&
        cat <<-EOF >expected &&
        message two
@@ -403,7 +403,7 @@ test_expect_success 'right alignment formatting with no padding' '
        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 &&
        cat <<-EOF >expected &&
        * message two
@@ -414,7 +414,7 @@ test_expect_success 'right alignment formatting with no padding and with --graph
        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 &&
        cat <<-EOF | iconv -f utf-8 -t $test_encoding >expected &&
        message two
@@ -425,7 +425,7 @@ test_expect_success 'right alignment formatting with no padding. i18n.logOutputE
        test_cmp expected actual
 '
 
-test_expect_success 'center alignment formatting' '
+test_expect_success ICONV 'center alignment formatting' '
        git log --pretty="tformat:%><(40)%s" >actual &&
        qz_to_tab_space <<-EOF >expected &&
        Z             message two              Z
@@ -436,7 +436,7 @@ test_expect_success 'center alignment formatting' '
        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 &&
        qz_to_tab_space <<-EOF | iconv -f utf-8 -t $test_encoding >expected &&
        Z             message two              Z
@@ -446,7 +446,7 @@ test_expect_success 'center alignment formatting. i18n.logOutputEncoding' '
        EOF
        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 &&
        qz_to_tab_space <<-EOF >expected &&
        $head1           message two          Z
@@ -457,7 +457,7 @@ test_expect_success 'center alignment formatting at the nth column' '
        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 &&
        qz_to_tab_space <<-EOF >expected &&
        $head1           message two          Z
@@ -468,7 +468,7 @@ test_expect_success 'center alignment formatting at the nth column' '
        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 &&
        qz_to_tab_space <<-EOF | iconv -f utf-8 -t $test_encoding >expected &&
        $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_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 &&
        cat <<-EOF >expected &&
        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
 # as far as the next test amends HEAD
 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 &&
        cat <<-EOF | iconv -f utf-8 -t $test_encoding >expected &&
        message two
@@ -504,7 +504,7 @@ test_expect_success 'center alignment formatting with no padding. i18n.logOutput
        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 log --pretty="tformat:%<(10,trunc)%s%>>(10,ltrunc)% an" >actual &&
        cat <<-\EOF >expected &&
@@ -515,7 +515,7 @@ test_expect_success 'left/right alignment formatting with stealing' '
        EOF
        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 &&
        cat <<-\EOF | iconv -f utf-8 -t $test_encoding >expected &&
        short long  long long
@@ -564,22 +564,38 @@ test_expect_success 'log decoration properly follows tag chain' '
        git tag -d tag1 &&
        git commit --amend -m shorter &&
        git log --no-walk --tags --pretty="%H %d" --decorate=full >actual &&
-       cat <<-EOF >expected &&
-       $head2  (tag: refs/tags/message-one)
-       $old_head1  (tag: refs/tags/message-two)
-       $head1  (tag: refs/tags/tag2)
-       EOF
+       if test_have_prereq ICONV
+       then
+               cat <<-EOF >expected
+               $head2  (tag: refs/tags/message-one)
+               $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 &&
        test_cmp expected actual1
 '
 
 test_expect_success 'clean log decoration' '
        git log --no-walk --tags --pretty="%H %D" --decorate=full >actual &&
-       cat >expected <<-EOF &&
-       $head2 tag: refs/tags/message-one
-       $old_head1 tag: refs/tags/message-two
-       $head1 tag: refs/tags/tag2
-       EOF
+       if test_have_prereq ICONV
+       then
+               cat <<-EOF >expected
+               $head2 tag: refs/tags/message-one
+               $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 &&
        test_cmp expected actual1
 '
index 7120030b5c650d91da5cf9ab9e3e0d6782936521..4a12b2b4979e5855584f189512ab84a563638a7e 100755 (executable)
@@ -5,6 +5,12 @@ test_description='test log with i18n features'
 TEST_PASSES_SANITIZE_LEAK=true
 . ./lib-gettext.sh
 
+if ! test_have_prereq ICONV
+then
+       skip_all='skipping log i18n tests; iconv not available'
+       test_done
+fi
+
 # two forms of é
 utf8_e=$(printf '\303\251')
 latin1_e=$(printf '\351')
index 661feb60709f2380e72cf894a6c62bac8d097a73..cb03522d02176fd601cecf25890458e79e25237c 100755 (executable)
@@ -5,6 +5,12 @@ test_description='git am with corrupt input'
 TEST_PASSES_SANITIZE_LEAK=true
 . ./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 () {
        space=' '
        q_nul_in_subject=
index 065156c1f39b1493ab7b2cb6fcb94adafe19748a..23b2f218725e0fa7caacb3c84f5fc5264b476d14 100755 (executable)
@@ -28,7 +28,12 @@ check_mailinfo () {
 
 for mail in 00*
 do
-       test_expect_success "mailinfo $mail" '
+       case "$mail" in
+       0004)
+               prereq=ICONV;;
+       esac
+
+       test_expect_success $prereq "mailinfo $mail" '
                check_mailinfo "$mail" "" &&
                if test -f "$DATA/msg$mail--scissors"
                then
@@ -56,7 +61,12 @@ test_expect_success 'split box with rfc2047 samples' \
 
 for mail in rfc2047/00*
 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" &&
                echo msg &&
                test_cmp "$DATA/empty" "$mail-msg" &&
index 58189c9f7dc9bd8dc715ea903013ea8018dad360..3c873de17eced491a3fca05e08334400a5ec16bc 100755 (executable)
@@ -344,12 +344,12 @@ test_expect_success 'git client shows text/plain with a charset' '
        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 &&
        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 &&
        grep "this is the error message" stderr
 '
index f1623b1c06d0fa177dd2ae05c688238b927b3b9f..2a01a62a2f3ab0f1b30590f63d1e7ff99705792c 100755 (executable)
@@ -13,21 +13,41 @@ TEST_PASSES_SANITIZE_LEAK=true
 . "$TEST_DIRECTORY"/lib-terminal.sh
 
 test_tick
-# Tested non-UTF-8 encoding
-test_encoding="ISO8859-1"
-
-# String "added" in German
-# (translated with Google Translate),
-# encoded in UTF-8, used as a commit log message below.
-added_utf8_part=$(printf "\303\274")
-added_utf8_part_iso88591=$(echo "$added_utf8_part" | iconv -f utf-8 -t $test_encoding)
-added=$(printf "added (hinzugef${added_utf8_part}gt) foo")
-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)
+
+if test_have_prereq ICONV
+then
+       # Tested non-UTF-8 encoding
+       test_encoding="ISO8859-1"
+
+       # String "added" in German
+       # (translated with Google Translate),
+       # encoded in UTF-8, used as a commit log message below.
+       added_utf8_part=$(printf "\303\274")
+       added_utf8_part_iso88591=$(echo "$added_utf8_part" | iconv -f utf-8 -t $test_encoding)
+       added=$(printf "added (hinzugef${added_utf8_part}gt) foo")
+       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
 # Number is chosen so, that non-ACSII characters
@@ -198,7 +218,7 @@ Thu, 7 Apr 2005 15:13:13 -0700
 1112911993
 EOF
 
-test_format encoding %e <<EOF
+test_format ICONV encoding %e <<EOF
 commit $head2
 $test_encoding
 commit $head1
@@ -374,7 +394,7 @@ test_expect_success 'setup complex body' '
        head3_short=$(git rev-parse --short $head3)
 '
 
-test_format complex-encoding %e <<EOF
+test_format ICONV complex-encoding %e <<EOF
 commit $head3
 $test_encoding
 commit $head2
index 2add26d76844deb04aee4568bc467f66df965d57..e9a6cc72658c53090077aa9d37a88f5c3826b047 100755 (executable)
@@ -13,21 +13,31 @@ export GIT_TEST_DEFAULT_INITIAL_BRANCH_NAME
 TEST_PASSES_SANITIZE_LEAK=true
 . ./test-lib.sh
 
-commit_msg () {
-       # String "modify 2nd file (changed)" partly in German
-       # (translated with Google Translate),
-       # encoded in UTF-8, used as a commit log message below.
-       msg="modify 2nd file (ge\303\244ndert)\n"
-       if test -n "$1"
-       then
-               printf "$msg" | iconv -f utf-8 -t "$1"
-       else
-               printf "$msg"
-       fi
-}
-
-# Tested non-UTF-8 encoding
-test_encoding="ISO8859-1"
+if test_have_prereq ICONV
+then
+       commit_msg () {
+               # String "modify 2nd file (changed)" partly in German
+               # (translated with Google Translate),
+               # encoded in UTF-8, used as a commit log message below.
+               msg="modify 2nd file (ge\303\244ndert)\n"
+               if test -n "$1"
+               then
+                       printf "$msg" | iconv -f utf-8 -t "$1"
+               else
+                       printf "$msg"
+               fi
+       }
+
+       # Tested non-UTF-8 encoding
+       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_tick &&
index 75da219ed1be95c8279b363816d46bc3e2686fc3..7a1f581c240c71106c709a830d3897d84fd8b32d 100755 (executable)
@@ -3,6 +3,12 @@
 test_description='git blame encoding conversion'
 . ./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/euc-japan.txt
 . "$TEST_DIRECTORY"/t8005/sjis.txt
index 3b3c371740a3922013e3be4c792eeb1d03e9699a..6224f54d4d26ce9d481cf34d87ce1a470580270b 100755 (executable)
@@ -3676,7 +3676,7 @@ test_expect_success !MINGW 'W: get-mark & empty orphan commit with erroneous thi
 ### series X (other new features)
 ###
 
-test_expect_success 'X: handling encoding' '
+test_expect_success ICONV 'X: handling encoding' '
        test_tick &&
        cat >input <<-INPUT_END &&
        commit refs/heads/encoding
index 2bdc02b4599c55339c4d5d01683d1f517e83d3c1..9595dfef2ee660ca79789021326fb6b9c85adcb5 100755 (executable)
@@ -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_expect_success 'reencoding iso-8859-7' '
+test_expect_success ICONV 'reencoding iso-8859-7' '
 
        test_when_finished "git reset --hard HEAD~1" &&
        test_config i18n.commitencoding iso-8859-7 &&
@@ -421,7 +421,7 @@ M 100644 :1 there
 
 EOF
 
-test_expect_success 'dropping tag of filtered out object' '
+test_expect_success ICONV 'dropping tag of filtered out object' '
 (
        cd limit-by-paths &&
        git fast-export --tag-of-filtered-object=drop mytag -- there > output &&
@@ -438,7 +438,7 @@ msg
 
 EOF
 
-test_expect_success 'rewriting tag of filtered out object' '
+test_expect_success ICONV 'rewriting tag of filtered out object' '
 (
        cd limit-by-paths &&
        git fast-export --tag-of-filtered-object=rewrite mytag -- there > output &&
@@ -667,7 +667,7 @@ M 100644 :13 file
 
 EOF
 
-test_expect_success 'avoid uninteresting refs' '
+test_expect_success ICONV 'avoid uninteresting refs' '
        > tmp-marks &&
        git fast-export --import-marks=tmp-marks \
                --export-marks=tmp-marks main > /dev/null &&
@@ -686,7 +686,7 @@ from :14
 
 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 &&
        git fast-export --import-marks=tmp-marks \
                --export-marks=tmp-marks main > /dev/null &&
index 241198ba95f7e73b44519c4c13584cad4b5d5d8a..a278181a0568a2422ab1e7f007bc016b95a58e63 100644 (file)
@@ -1743,6 +1743,7 @@ esac
 
 ( COLUMNS=1 && test $COLUMNS = 1 ) && test_set_prereq COLUMNS_CAN_BE_1
 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_PTHREADS" && test_set_prereq PTHREADS
 test -z "$NO_PYTHON" && test_set_prereq PYTHON