From: "Torsten Bögershausen" <tboegi@web.de>
To: "Đoàn Trần Công Danh" <congdanhqx@gmail.com>
Cc: git@vger.kernel.org, Taylor Blau <ttaylorr@github.com>,
Jeff King <peff@peff.net>, Bagas Sanjaya <bagasdotme@gmail.com>
Subject: Re: [PATCH v2] t: use user-specific utf-8 locale for testing
Date: Sun, 6 Jun 2021 22:06:13 +0200 [thread overview]
Message-ID: <20210606200613.muanikoqgpjsgk66@tb-raspi4> (raw)
In-Reply-To: <20210606163316.8630-1-congdanhqx@gmail.com>
This all looks good.
Some suggestions about the commit message are inline.
On Sun, Jun 06, 2021 at 11:33:16PM +0700, Đoàn Trần Công Danh wrote:
> 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".
Good explanation.
I think that in generaral "utf-8" as a specification/specifier is better
written as "UTF-8", with uppercase.
"utf-8" or utf8 may be used inside the code, depending on the language.
>
> Despite being required by POSIX, locale(1) is unavailable in some
> systems, e.g. Linux with musl libc. Some of those systems support
> utf-8 locale out of the box.
This reads a little bit harsh (the first sentence) and it is not
fully clear which systems do what (the second sentence).
Or are 2 things mentioned - the locale(1) utility and the support
of one UTF-8 locale "out of the box" ?
Does Linux with musl libs support an UTF-8 locale, but not
the locale(1) untility ?
Git itself supports many systems, that are not POSIX compliant,
strictly speaking. But if avaliable, the functions defined in POSIX
are used, whenever available.
Could we write:
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.
>
> Let's give users of those systems an option to have better test
> coverage.
Add a Makefile knob GIT_TEST_UTF8_LOCALE and activate it for linux-musl
>
> This change also 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.
rename -> renames, may be drop "This change", like this ?
Rename t/lib-git-svn.sh:prepare_a_utf8_locale into 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>
> ---
> Range-diff against v1:
> 1: d242ce64c4 ! 1: f299ae2239 t: use user-specific utf-8 locale for testing
> @@ Commit message
> Let's give users of those systems an option to have better test
> coverage.
>
> + This change also 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>
>
> ## Makefile ##
> @@ Makefile: 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 prefered utf-8 locale for testing.
> -+# If it isn't set, use the first utf-8 locale returned by "locale -a".
> ++# 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.
> #
> @@ Makefile: ifdef GIT_TEST_CMP
> @echo NO_GETTEXT=\''$(subst ','\'',$(subst ','\'',$(NO_GETTEXT)))'\' >>$@+
> ifdef GIT_PERF_REPEAT_COUNT
>
> + ## ci/lib.sh ##
> +@@ ci/lib.sh: 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
> +
> +
> ## t/lib-git-svn.sh ##
> @@ t/lib-git-svn.sh: start_svnserve () {
> --listen-host 127.0.0.1 &
> @@ t/lib-git-svn.sh: start_svnserve () {
> -}')
> - if test -n "$a_utf8_locale"
> +prepare_utf8_locale () {
> -+ if test -z "$GIT_TEST_UTF8_LOCALE"
> ++ if test -n "$GIT_TEST_UTF8_LOCALE"
> ++ then
> ++ : test_set_prereq UTF8
> ++ elif test -n "${LC_ALL:-$LANG}"
> + then
> ++ case "${LC_ALL:-$LANG}" in
> ++ *.[Uu][Tt][Ff]8 | *.[Uu][Tt][Ff]-8)
> ++ GIT_TEST_UTF8_LOCALE="${LC_ALL:-$LANG}"
> ++ ;;
> ++ esac
> ++ else
> + GIT_TEST_UTF8_LOCALE=$(locale -a | sed -n '/\.[uU][tT][fF]-*8$/{
> + p
> + q
>
> Makefile | 7 +++++++
> ci/lib.sh | 1 +
> t/lib-git-svn.sh | 24 ++++++++++++++++++------
> t/t9100-git-svn-basic.sh | 14 +++-----------
> t/t9115-git-svn-dcommit-funky-renames.sh | 6 +++---
> t/t9129-git-svn-i18n-commitencoding.sh | 4 ++--
> 6 files changed, 34 insertions(+), 22 deletions(-)
>
> diff --git a/Makefile b/Makefile
> index c3565fc0f8..502e0c9a81 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.
> @@ -2801,6 +2805,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
> diff --git a/ci/lib.sh b/ci/lib.sh
> index d848c036c5..476c3f369f 100755
> --- 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
>
> diff --git a/t/lib-git-svn.sh b/t/lib-git-svn.sh
> index 547eb3c31a..83efc17661 100644
> --- a/t/lib-git-svn.sh
> +++ b/t/lib-git-svn.sh
> @@ -121,12 +121,24 @@ 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 -n "$GIT_TEST_UTF8_LOCALE"
> + then
> + : test_set_prereq UTF8
> + elif test -n "${LC_ALL:-$LANG}"
> + then
> + case "${LC_ALL:-$LANG}" in
> + *.[Uu][Tt][Ff]8 | *.[Uu][Tt][Ff]-8)
> + GIT_TEST_UTF8_LOCALE="${LC_ALL:-$LANG}"
> + ;;
> + esac
> + else
> + GIT_TEST_UTF8_LOCALE=$(locale -a | sed -n '/\.[uU][tT][fF]-*8$/{
> + p
> + q
> + }')
> + fi
> + if test -n "$GIT_TEST_UTF8_LOCALE"
> then
> test_set_prereq UTF8
> else
> diff --git a/t/t9100-git-svn-basic.sh b/t/t9100-git-svn-basic.sh
> 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" "
> diff --git a/t/t9115-git-svn-dcommit-funky-renames.sh b/t/t9115-git-svn-dcommit-funky-renames.sh
> 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 &&
> diff --git a/t/t9129-git-svn-i18n-commitencoding.sh b/t/t9129-git-svn-i18n-commitencoding.sh
> 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>;
> --
> 2.32.0.rc3.5.gf3d78db977
>
next prev parent reply other threads:[~2021-06-06 20:07 UTC|newest]
Thread overview: 19+ messages / expand[flat|nested] mbox.gz Atom feed top
2021-06-02 11:46 [PATCH] t: use user-specific utf-8 locale for testing Đoàn Trần Công Danh
2021-06-02 19:56 ` Taylor Blau
2021-06-08 10:49 ` Ævar Arnfjörð Bjarmason
2021-06-03 19:27 ` Jeff King
2021-06-04 3:32 ` Bagas Sanjaya
2021-06-04 5:20 ` Đoàn Trần Công Danh
2021-06-06 16:33 ` [PATCH v2] " Đoàn Trần Công Danh
2021-06-06 20:06 ` Torsten Bögershausen [this message]
2021-06-07 0:20 ` Junio C Hamano
2021-06-07 0:48 ` [PATCH v3] t: use pre-defined utf-8 locale for testing svn Đoàn Trần Công Danh
2021-06-07 1:01 ` Junio C Hamano
2021-06-07 14:38 ` Torsten Bögershausen
2021-06-07 15:42 ` Đoàn Trần Công Danh
2021-06-08 6:35 ` Jeff King
2021-06-08 6:45 ` Đoàn Trần Công Danh
2021-06-07 1:08 ` [PATCH v4] t: use user-specified " Đoàn Trần Công Danh
2021-06-08 6:38 ` Jeff King
2021-06-08 6:56 ` [PATCH v5] " Đoàn Trần Công Danh
2021-06-08 7:26 ` Jeff King
Reply instructions:
You may reply publicly to this message via plain-text email
using any one of the following methods:
* Save the following mbox file, import it into your mail client,
and reply-to-all from there: mbox
Avoid top-posting and favor interleaved quoting:
https://en.wikipedia.org/wiki/Posting_style#Interleaved_style
List information: http://vger.kernel.org/majordomo-info.html
* Reply using the --to, --cc, and --in-reply-to
switches of git-send-email(1):
git send-email \
--in-reply-to=20210606200613.muanikoqgpjsgk66@tb-raspi4 \
--to=tboegi@web.de \
--cc=bagasdotme@gmail.com \
--cc=congdanhqx@gmail.com \
--cc=git@vger.kernel.org \
--cc=peff@peff.net \
--cc=ttaylorr@github.com \
/path/to/YOUR_REPLY
https://kernel.org/pub/software/scm/git/docs/git-send-email.html
* If your mail client supports setting the In-Reply-To header
via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line
before the message body.
Code repositories for project(s) associated with this public inbox
https://80x24.org/mirrors/git.git
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox;
as well as URLs for read-only IMAP folder(s) and NNTP newsgroup(s).