Hi, I would like to suggest adding a line to svn --version command to display the current locale name.
This could be helpful for us receiving or investigating any encoding-related bugs, and seems generally useful to a part of platform information. So, I decided to draft a patch (attached to the email) to implement this feature. Providing examples of the machine info section of the new svn --version --verbose command below: * running on x86_64-microsoft-windows6.2.9200 - Windows 10 Pro, build 26100 [6.3 Client Multiprocessor Free] - locale encoding: CP1252 --- * running on x86_64-unknown-linux-gnu - "Debian GNU/Linux 12 (bookworm)" [Linux 6.6.87.1-microsoft-standard-WSL2] - locale encoding: UTF-8 --- * running on x86_64-unknown-linux-gnu - "Debian GNU/Linux 12 (bookworm)" [Linux 6.6.87.1-microsoft-standard-WSL2] - locale encoding: ISO-8859-15 - I didn't yet find a good way to display this part: *en_US*.UTF-8 of locale info, but I think it's not mandatory for us. So it's fine. Thoughts? -- Timofei Zhakov
Index: subversion/include/svn_version.h =================================================================== --- subversion/include/svn_version.h (revision 1926036) +++ subversion/include/svn_version.h (working copy) @@ -391,6 +391,16 @@ 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_locale_encoding(const svn_version_extended_t *ext_info); + +/** * Dependent library information. * Describes the name and versions of known dependencies * used by libsvn_subr. Index: subversion/libsvn_subr/opt_subcommand.c =================================================================== --- subversion/libsvn_subr/opt_subcommand.c (revision 1926036) +++ subversion/libsvn_subr/opt_subcommand.c (working copy) @@ -29,6 +29,7 @@ #include <assert.h> #include <apr_general.h> +#include <apr_portable.h> #include "svn_hash.h" #include "svn_cmdline.h" @@ -491,6 +492,9 @@ svn_version_ext_runtime_osname(info))); } + SVN_ERR(svn_cmdline_printf(pool, _(" - locale encoding: %s\n"), + svn_version_ext_locale_encoding(info))); + libs = svn_version_ext_linked_libs(info); if (libs && libs->nelts) { Index: subversion/libsvn_subr/sysinfo.c =================================================================== --- subversion/libsvn_subr/sysinfo.c (revision 1926036) +++ subversion/libsvn_subr/sysinfo.c (working copy) @@ -35,6 +35,7 @@ #include <apr_thread_proc.h> #include <apr_version.h> #include <apu_version.h> +#include <apr_portable.h> #include "svn_pools.h" #include "svn_ctype.h" @@ -137,6 +138,12 @@ #endif } +const char * +svn_sysinfo__locale_encoding(apr_pool_t *pool) +{ + return apr_os_locale_encoding(pool); +} + const apr_array_header_t * svn_sysinfo__linked_libs(apr_pool_t *pool) { Index: subversion/libsvn_subr/sysinfo.h =================================================================== --- subversion/libsvn_subr/sysinfo.h (revision 1926036) +++ subversion/libsvn_subr/sysinfo.h (working copy) @@ -45,6 +45,12 @@ */ 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__locale_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. Index: subversion/libsvn_subr/version.c =================================================================== --- subversion/libsvn_subr/version.c (revision 1926036) +++ subversion/libsvn_subr/version.c (working copy) @@ -122,6 +122,7 @@ const char *copyright; /* Copyright notice (localized) */ const char *runtime_host; /* Runtime canonical host name */ const char *runtime_osname; /* Running OS release name */ + const char *locale_encoding; /* Encoding of the current locale */ /* Array of svn_version_ext_linked_lib_t describing dependent libraries. */ @@ -153,6 +154,7 @@ { info->runtime_host = svn_sysinfo__canonical_host(pool); info->runtime_osname = svn_sysinfo__release_name(pool); + info->locale_encoding = svn_sysinfo__locale_encoding(pool); info->linked_libs = svn_sysinfo__linked_libs(pool); info->loaded_libs = svn_sysinfo__loaded_libs(pool); } @@ -197,6 +199,12 @@ return ext_info->runtime_osname; } +const char * +svn_version_ext_locale_encoding(const svn_version_extended_t *ext_info) +{ + return ext_info->locale_encoding; +} + const apr_array_header_t * svn_version_ext_linked_libs(const svn_version_extended_t *ext_info) {