]> git.ipfire.org Git - thirdparty/git.git/commitdiff
t: use user-specified utf-8 locale for testing svn
authorĐoàn Trần Công Danh <congdanhqx@gmail.com>
Tue, 8 Jun 2021 06:56:28 +0000 (13:56 +0700)
committerJunio C Hamano <gitster@pobox.com>
Tue, 8 Jun 2021 07:07:37 +0000 (16:07 +0900)
In some test-cases, UTF-8 locale is required. To find such locale,
we're using the first available UTF-8 locale that returned by
"locale -a".

However, the locale(1) utility is unavailable on some systems,
e.g. Linux with musl libc.

However, without "locale -a", we can't guess provided UTF-8 locale.

Add a Makefile knob GIT_TEST_UTF8_LOCALE and activate it for
linux-musl in our CI system.

Rename t/lib-git-svn.sh:prepare_a_utf8_locale to prepare_utf8_locale,
since we no longer prepare the variable named "a_utf8_locale",
but set up a fallback value for GIT_TEST_UTF8_LOCALE instead.
The fallback will be LC_ALL, LANG environment variable,
or the first UTF-8 locale from output of "locale -a", in that order.

Signed-off-by: Đoàn Trần Công Danh <congdanhqx@gmail.com>
Signed-off-by: Junio C Hamano <gitster@pobox.com>
Makefile
ci/lib.sh
t/lib-git-svn.sh
t/t9100-git-svn-basic.sh
t/t9115-git-svn-dcommit-funky-renames.sh
t/t9129-git-svn-i18n-commitencoding.sh

index f3dc2178324e4f7270c053a7fad070ead9f0c21e..5d6a50f118ab605550208203f377d9bbaf8f9a18 100644 (file)
--- a/Makefile
+++ b/Makefile
@@ -398,6 +398,10 @@ all::
 # with a different indexfile format version.  If it isn't set the index
 # file format used is index-v[23].
 #
+# Define GIT_TEST_UTF8_LOCALE to preferred utf-8 locale for testing.
+# If it isn't set, fallback to $LC_ALL, $LANG or use the first utf-8
+# locale returned by "locale -a".
+#
 # Define HAVE_CLOCK_GETTIME if your platform has clock_gettime.
 #
 # Define HAVE_CLOCK_MONOTONIC if your platform has CLOCK_MONOTONIC.
@@ -2740,6 +2744,9 @@ ifdef GIT_TEST_CMP
 endif
 ifdef GIT_TEST_CMP_USE_COPIED_CONTEXT
        @echo GIT_TEST_CMP_USE_COPIED_CONTEXT=YesPlease >>$@+
+endif
+ifdef GIT_TEST_UTF8_LOCALE
+       @echo GIT_TEST_UTF8_LOCALE=\''$(subst ','\'',$(subst ','\'',$(GIT_TEST_UTF8_LOCALE)))'\' >>$@+
 endif
        @echo NO_GETTEXT=\''$(subst ','\'',$(subst ','\'',$(NO_GETTEXT)))'\' >>$@+
 ifdef GIT_PERF_REPEAT_COUNT
index d848c036c50f92725b2bfddcb8c7203a25c1819b..476c3f369f549d69f52723c21d65bd4bf8e93da6 100755 (executable)
--- a/ci/lib.sh
+++ b/ci/lib.sh
@@ -229,6 +229,7 @@ linux-musl)
        CC=gcc
        MAKEFLAGS="$MAKEFLAGS PYTHON_PATH=/usr/bin/python3 USE_LIBPCRE2=Yes"
        MAKEFLAGS="$MAKEFLAGS NO_REGEX=Yes ICONV_OMITS_BOM=Yes"
+       MAKEFLAGS="$MAKEFLAGS GIT_TEST_UTF8_LOCALE=C.UTF-8"
        ;;
 esac
 
index 547eb3c31a5a1ad7610f640bfccde823153bd283..2fde2353fd38356548fd40e4808984618b0d9585 100644 (file)
@@ -121,12 +121,22 @@ start_svnserve () {
                 --listen-host 127.0.0.1 &
 }
 
-prepare_a_utf8_locale () {
-       a_utf8_locale=$(locale -a | sed -n '/\.[uU][tT][fF]-*8$/{
-       p
-       q
-}')
-       if test -n "$a_utf8_locale"
+prepare_utf8_locale () {
+       if test -z "$GIT_TEST_UTF8_LOCALE"
+       then
+               case "${LC_ALL:-$LANG}" in
+               *.[Uu][Tt][Ff]8 | *.[Uu][Tt][Ff]-8)
+                       GIT_TEST_UTF8_LOCALE="${LC_ALL:-$LANG}"
+                       ;;
+               *)
+                       GIT_TEST_UTF8_LOCALE=$(locale -a | sed -n '/\.[uU][tT][fF]-*8$/{
+                               p
+                               q
+                       }')
+                       ;;
+               esac
+       fi
+       if test -n "$GIT_TEST_UTF8_LOCALE"
        then
                test_set_prereq UTF8
        else
index 1d3fdcc997a4c4f67c0801bdca7020f222aa0150..d5563ec35f01adbbfdc43823586baab3bd90e955 100755 (executable)
@@ -4,21 +4,13 @@
 #
 
 test_description='git svn basic tests'
-GIT_SVN_LC_ALL=${LC_ALL:-$LANG}
 
 GIT_TEST_DEFAULT_INITIAL_BRANCH_NAME=main
 export GIT_TEST_DEFAULT_INITIAL_BRANCH_NAME
 
 . ./lib-git-svn.sh
 
-case "$GIT_SVN_LC_ALL" in
-*.UTF-8)
-       test_set_prereq UTF8
-       ;;
-*)
-       say "# UTF-8 locale not set, some tests skipped ($GIT_SVN_LC_ALL)"
-       ;;
-esac
+prepare_utf8_locale
 
 test_expect_success 'git svn --version works anywhere' '
        nongit git svn --version
@@ -187,8 +179,8 @@ test_expect_success POSIXPERM,SYMLINKS "$name" '
        test ! -h "$SVN_TREE"/exec-2.sh &&
        test_cmp help "$SVN_TREE"/exec-2.sh'
 
-name="commit with UTF-8 message: locale: $GIT_SVN_LC_ALL"
-LC_ALL="$GIT_SVN_LC_ALL"
+name="commit with UTF-8 message: locale: $GIT_TEST_UTF8_LOCALE"
+LC_ALL="$GIT_TEST_UTF8_LOCALE"
 export LC_ALL
 # This test relies on the previous test, hence requires POSIXPERM,SYMLINKS
 test_expect_success UTF8,POSIXPERM,SYMLINKS "$name" "
index 9b44a44bc1f917e2a05956e3300e2cb673a3fec3..743fbe1fe46929583aacacc60ba959c38d8a2f09 100755 (executable)
@@ -93,9 +93,9 @@ test_expect_success 'git svn rebase works inside a fresh-cloned repository' '
 # > ... All of the above characters, except for the backslash, are converted
 # > to special UNICODE characters in the range 0xf000 to 0xf0ff (the
 # > "Private use area") when creating or accessing files.
-prepare_a_utf8_locale
+prepare_utf8_locale
 test_expect_success UTF8,!MINGW,!UTF8_NFD_TO_NFC 'svn.pathnameencoding=cp932 new file on dcommit' '
-       LC_ALL=$a_utf8_locale &&
+       LC_ALL=$GIT_TEST_UTF8_LOCALE &&
        export LC_ALL &&
        neq=$(printf "\201\202") &&
        git config svn.pathnameencoding cp932 &&
@@ -107,7 +107,7 @@ test_expect_success UTF8,!MINGW,!UTF8_NFD_TO_NFC 'svn.pathnameencoding=cp932 new
 
 # See the comment on the above test for setting of LC_ALL.
 test_expect_success !MINGW,!UTF8_NFD_TO_NFC 'svn.pathnameencoding=cp932 rename on dcommit' '
-       LC_ALL=$a_utf8_locale &&
+       LC_ALL=$GIT_TEST_UTF8_LOCALE &&
        export LC_ALL &&
        inf=$(printf "\201\207") &&
        git config svn.pathnameencoding cp932 &&
index 2c213ae65405ecc5253a01369ce4b76f96272f10..01e1e8a8f76765d081270d37a980778fad4189d0 100755 (executable)
@@ -14,12 +14,12 @@ compare_git_head_with () {
        test_cmp current "$1"
 }
 
-prepare_a_utf8_locale
+prepare_utf8_locale
 
 compare_svn_head_with () {
        # extract just the log message and strip out committer info.
        # don't use --limit here since svn 1.1.x doesn't have it,
-       LC_ALL="$a_utf8_locale" svn log $(git svn info --url) | perl -w -e '
+       LC_ALL="$GIT_TEST_UTF8_LOCALE" svn log $(git svn info --url) | perl -w -e '
                use bytes;
                $/ = ("-"x72) . "\n";
                my @x = <STDIN>;