Author: rinrab Date: Sun Jun 8 13:52:15 2025 New Revision: 1926252 URL: http://svn.apache.org/viewvc?rev=1926252&view=rev Log: Print character encoding in `svn --version --verbose`.
- Add `locale encoding:` line to under machine information. - Use apr_os_locale_encoding() to retrieve the name of the encoding. The same function is used to determine the encoding during xlate work, when converting from APR_LOCALE_CHARSET. - The character encoding is being retrieved through the svn_version_extended_t structure. Expected behaviors: --- * running on x86_64-microsoft-windows6.2.9200 - Windows 10 Pro, build 26100 [6.3 Client Multiprocessor Free] - character encoding: CP1252 --- * running on x86_64-unknown-linux-gnu - "Debian GNU/Linux 12 (bookworm)" [Linux 6.6.87.1-microsoft-standard-WSL2] - character encoding: UTF-8 --- * running on x86_64-unknown-linux-gnu - "Debian GNU/Linux 12 (bookworm)" [Linux 6.6.87.1-microsoft-standard-WSL2] - character encoding: ISO-8859-15 --- * subversion/include/svn_version.h (svn_version_ext_character_encoding): New function; Accesses character encoding. * subversion/libsvn_subr/opt_subcommand.c (svn_opt__print_version_info): Add `character encoding` section and use the svn_version_ext_character_encoding() function to retrieve the name of the encoding. * subversion/libsvn_subr/sysinfo.h (svn_sysinfo__character_encoding): Declare function; Detects the encoding. * subversion/libsvn_subr/sysinfo.c (includes): Add apr_portable.h for apr_os_locale_encoding() function. (svn_sysinfo__character_encoding): Implement function; For now just a wrapper around apr_os_locale_encoding(). * subversion/libsvn_subr/version.c (svn_version_extended_t): Add character_encoding field and format code. (svn_version_extended): Initialize svn_version_extended_t::character_encoding using svn_sysinfo__character_encoding(). (svn_version_ext_character_encoding): Implement accessor to character_encoding. See related discussion on dev@s.a.o: - https://lists.apache.org/thread/qyxgtkfmybwozz4ny8zxvc5hz16km8y7 Reviewed by: brane Modified: subversion/trunk/subversion/include/svn_version.h subversion/trunk/subversion/libsvn_subr/opt_subcommand.c subversion/trunk/subversion/libsvn_subr/sysinfo.c subversion/trunk/subversion/libsvn_subr/sysinfo.h subversion/trunk/subversion/libsvn_subr/version.c Modified: subversion/trunk/subversion/include/svn_version.h URL: http://svn.apache.org/viewvc/subversion/trunk/subversion/include/svn_version.h?rev=1926252&r1=1926251&r2=1926252&view=diff ============================================================================== --- subversion/trunk/subversion/include/svn_version.h (original) +++ subversion/trunk/subversion/include/svn_version.h Sun Jun 8 13:52:15 2025 @@ -391,6 +391,16 @@ const char * svn_version_ext_runtime_osname(const svn_version_extended_t *ext_info); /** + * Accessor for svn_version_extended_t. + * + * @return The name of the current locale character set. + * + * @since New in 1.15. + */ +const char * +svn_version_ext_character_encoding(const svn_version_extended_t *ext_info); + +/** * Dependent library information. * Describes the name and versions of known dependencies * used by libsvn_subr. Modified: subversion/trunk/subversion/libsvn_subr/opt_subcommand.c URL: http://svn.apache.org/viewvc/subversion/trunk/subversion/libsvn_subr/opt_subcommand.c?rev=1926252&r1=1926251&r2=1926252&view=diff ============================================================================== --- subversion/trunk/subversion/libsvn_subr/opt_subcommand.c (original) +++ subversion/trunk/subversion/libsvn_subr/opt_subcommand.c Sun Jun 8 13:52:15 2025 @@ -491,6 +491,9 @@ svn_opt__print_version_info(const char * svn_version_ext_runtime_osname(info))); } + SVN_ERR(svn_cmdline_printf(pool, _(" - character encoding: %s\n"), + svn_version_ext_character_encoding(info))); + libs = svn_version_ext_linked_libs(info); if (libs && libs->nelts) { Modified: subversion/trunk/subversion/libsvn_subr/sysinfo.c URL: http://svn.apache.org/viewvc/subversion/trunk/subversion/libsvn_subr/sysinfo.c?rev=1926252&r1=1926251&r2=1926252&view=diff ============================================================================== --- subversion/trunk/subversion/libsvn_subr/sysinfo.c (original) +++ subversion/trunk/subversion/libsvn_subr/sysinfo.c Sun Jun 8 13:52:15 2025 @@ -35,6 +35,7 @@ #include <apr_thread_proc.h> #include <apr_version.h> #include <apu_version.h> +#include <apr_portable.h> /* for apr_os_locale_encoding() */ #include "svn_pools.h" #include "svn_ctype.h" @@ -137,6 +138,12 @@ svn_sysinfo__release_name(apr_pool_t *po #endif } +const char * +svn_sysinfo__character_encoding(apr_pool_t *pool) +{ + return apr_os_locale_encoding(pool); +} + const apr_array_header_t * svn_sysinfo__linked_libs(apr_pool_t *pool) { Modified: subversion/trunk/subversion/libsvn_subr/sysinfo.h URL: http://svn.apache.org/viewvc/subversion/trunk/subversion/libsvn_subr/sysinfo.h?rev=1926252&r1=1926251&r2=1926252&view=diff ============================================================================== --- subversion/trunk/subversion/libsvn_subr/sysinfo.h (original) +++ subversion/trunk/subversion/libsvn_subr/sysinfo.h Sun Jun 8 13:52:15 2025 @@ -45,6 +45,12 @@ const char *svn_sysinfo__canonical_host( */ const char *svn_sysinfo__release_name(apr_pool_t *pool); +/* Return the name of the current locale character set. + * + * All allocations are done in POOL. + */ +const char *svn_sysinfo__character_encoding(apr_pool_t *pool); + /* Return an array of svn_version_linked_lib_t of descriptions of the * link-time and run-time versions of dependent libraries, or NULL of * the info is not available. Modified: subversion/trunk/subversion/libsvn_subr/version.c URL: http://svn.apache.org/viewvc/subversion/trunk/subversion/libsvn_subr/version.c?rev=1926252&r1=1926251&r2=1926252&view=diff ============================================================================== --- subversion/trunk/subversion/libsvn_subr/version.c (original) +++ subversion/trunk/subversion/libsvn_subr/version.c Sun Jun 8 13:52:15 2025 @@ -116,12 +116,13 @@ svn_ver_check_list2(const svn_version_t struct svn_version_extended_t { - const char *build_date; /* Compilation date */ - const char *build_time; /* Compilation time */ - const char *build_host; /* Build canonical host name */ - const char *copyright; /* Copyright notice (localized) */ - const char *runtime_host; /* Runtime canonical host name */ - const char *runtime_osname; /* Running OS release name */ + const char *build_date; /* Compilation date */ + const char *build_time; /* Compilation time */ + const char *build_host; /* Build canonical host name */ + const char *copyright; /* Copyright notice (localized) */ + const char *runtime_host; /* Runtime canonical host name */ + const char *runtime_osname; /* Running OS release name */ + const char *character_encoding; /* Encoding of the current locale */ /* Array of svn_version_ext_linked_lib_t describing dependent libraries. */ @@ -153,6 +154,7 @@ svn_version_extended(svn_boolean_t verbo { info->runtime_host = svn_sysinfo__canonical_host(pool); info->runtime_osname = svn_sysinfo__release_name(pool); + info->character_encoding = svn_sysinfo__character_encoding(pool); info->linked_libs = svn_sysinfo__linked_libs(pool); info->loaded_libs = svn_sysinfo__loaded_libs(pool); } @@ -197,6 +199,12 @@ svn_version_ext_runtime_osname(const svn return ext_info->runtime_osname; } +const char * +svn_version_ext_character_encoding(const svn_version_extended_t *ext_info) +{ + return ext_info->character_encoding; +} + const apr_array_header_t * svn_version_ext_linked_libs(const svn_version_extended_t *ext_info) {