t: use user-specified utf-8 locale for testing svn
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>
Đoàn Trần Công Danh committedJun 8, 2021 at 13:56 UTC482c962de4af32471a5ab770160731a028fcd9d6
6 files changed+32-22
Makefile
+7
index f3dc217832..5d6a50f118 100644--- 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 547eb3c31a..2fde2353fd 100644--- a/t/lib-git-svn.sh+++ b/t/lib-git-svn.sh@@ -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
t/t9100-git-svn-basic.sh
+3-11
index 1d3fdcc997..d5563ec35f 100755--- a/t/t9100-git-svn-basic.sh+++ b/t/t9100-git-svn-basic.sh@@ -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" "
t/t9115-git-svn-dcommit-funky-renames.sh
+3-3
index 9b44a44bc1..743fbe1fe4 100755--- a/t/t9115-git-svn-dcommit-funky-renames.sh+++ b/t/t9115-git-svn-dcommit-funky-renames.sh@@ -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 &&
t/t9129-git-svn-i18n-commitencoding.sh
+2-2
index 2c213ae654..01e1e8a8f7 100755--- a/t/t9129-git-svn-i18n-commitencoding.sh+++ b/t/t9129-git-svn-i18n-commitencoding.sh@@ -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>;