Author: rinrab
Date: Tue May 27 21:34:31 2025
New Revision: 1925879
URL: http://svn.apache.org/viewvc?rev=1925879&view=rev
Log:
On the 'utf8-cmdline-prototype' branch: utf8-ize svnadmin program 🧑💻
* subversion/svnadmin/svnadmin.c
(parse_args,
subcommand_freeze): Remove conversion to UTF8; we work with normalized
strings.
(subcommand_lslocks): Use svn_opt_args_to_target_array4 instead of
svn_opt__args_to_target_array which does exactly the same thing, but
without utf conversion.
(sub_main): Initialize argv using svn_cmdline__get_utf8_argv() instead of
svn_cmdline__get_cstring_argv() which returns utf8 array straight away and
read args directly to utf8_opt_arg in the loop.
(-r, -F, svnadmin__fs_type, svnadmin__parent_dir, svnadmin__config_dir,
svnadmin__exclude, svnadmin__include, first_arg, repos_path):
Remove conversion to UTF8; we work with normalized strings.
(-r, -t, -M, svnadmin__compatible_version): Silently migrate to use utf8
encoded strings instead of hell-encoded ones; it should not matter at all.
Modified:
subversion/branches/utf8-cmdline-prototype/subversion/svnadmin/svnadmin.c
Modified:
subversion/branches/utf8-cmdline-prototype/subversion/svnadmin/svnadmin.c
URL:
http://svn.apache.org/viewvc/subversion/branches/utf8-cmdline-prototype/subversion/svnadmin/svnadmin.c?rev=1925879&r1=1925878&r2=1925879&view=diff
==============================================================================
--- subversion/branches/utf8-cmdline-prototype/subversion/svnadmin/svnadmin.c
(original)
+++ subversion/branches/utf8-cmdline-prototype/subversion/svnadmin/svnadmin.c
Tue May 27 21:34:31 2025
@@ -803,10 +803,7 @@ parse_args(apr_array_header_t **args,
if (num_args)
while (os->ind < os->argc)
{
- const char *arg;
-
- SVN_ERR(svn_utf_cstring_to_utf8(&arg, os->argv[os->ind++], pool));
- APR_ARRAY_PUSH(*args, const char *) = arg;
+ APR_ARRAY_PUSH(*args, const char *) = os->argv[os->ind++];
}
}
@@ -1591,11 +1588,9 @@ subcommand_freeze(apr_getopt_t *os, void
else
{
svn_stringbuf_t *buf;
- const char *utf8;
/* Read repository paths from the -F file. */
SVN_ERR(svn_stringbuf_from_file2(&buf, opt_state->file, pool));
- SVN_ERR(svn_utf_cstring_to_utf8(&utf8, buf->data, pool));
- paths = svn_cstring_split(utf8, "\r\n", FALSE, pool);
+ paths = svn_cstring_split(buf->data, "\r\n", FALSE, pool);
}
b.command = APR_ARRAY_IDX(args, 0, const char *);
@@ -2595,7 +2590,7 @@ subcommand_lslocks(apr_getopt_t *os, voi
apr_hash_index_t *hi;
apr_pool_t *iterpool = svn_pool_create(pool);
- SVN_ERR(svn_opt__args_to_target_array(&targets, os,
+ SVN_ERR(svn_opt_args_to_target_array4(&targets, os,
apr_array_make(pool, 0,
sizeof(const char *)),
pool));
@@ -3075,7 +3070,7 @@ sub_main(int *exit_code,
/* Check library versions */
SVN_ERR(check_lib_versions());
- SVN_ERR(svn_cmdline__get_cstring_argv(&argv, argc, cmdline_argv, pool));
+ SVN_ERR(svn_cmdline__get_utf8_argv(&argv, argc, cmdline_argv, pool));
/* Initialize the FS library. */
SVN_ERR(svn_fs_initialize(pool));
@@ -3099,11 +3094,10 @@ sub_main(int *exit_code,
while (1)
{
- const char *opt_arg;
const char *utf8_opt_arg;
/* Parse the next option. */
- apr_err = apr_getopt_long(os, options_table, &opt_id, &opt_arg);
+ apr_err = apr_getopt_long(os, options_table, &opt_id, &utf8_opt_arg);
if (APR_STATUS_IS_EOF(apr_err))
break;
else if (apr_err)
@@ -3127,10 +3121,8 @@ sub_main(int *exit_code,
}
if (svn_opt_parse_revision(&(opt_state.start_revision),
&(opt_state.end_revision),
- opt_arg, pool) != 0)
+ utf8_opt_arg, pool) != 0)
{
- SVN_ERR(svn_utf_cstring_to_utf8(&utf8_opt_arg, opt_arg, pool));
-
return svn_error_createf(SVN_ERR_CL_ARG_PARSING_ERROR, NULL,
_("Syntax error in revision argument '%s'"),
utf8_opt_arg);
@@ -3138,7 +3130,7 @@ sub_main(int *exit_code,
}
break;
case 't':
- opt_state.txn_id = opt_arg;
+ opt_state.txn_id = utf8_opt_arg;
break;
case 'q':
@@ -3151,13 +3143,13 @@ sub_main(int *exit_code,
case 'M':
{
apr_uint64_t sz_val;
- SVN_ERR(svn_cstring_atoui64(&sz_val, opt_arg));
+ SVN_ERR(svn_cstring_atoui64(&sz_val, utf8_opt_arg));
opt_state.memory_cache_size = 0x100000 * sz_val;
}
break;
case 'F':
- SVN_ERR(svn_utf_cstring_to_utf8(&(opt_state.file), opt_arg, pool));
+ opt_state.file = utf8_opt_arg;
dash_F_arg = TRUE;
break;
case svnadmin__version:
@@ -3199,7 +3191,7 @@ sub_main(int *exit_code,
/* Parse the version string which carries our target
compatibility. */
SVN_ERR(svn_version__parse_version_string(&compatible_version,
- opt_arg, pool));
+ utf8_opt_arg, pool));
/* We can't create repository with a version older than 1.0.0. */
if (! svn_version__at_least(compatible_version, 1, 0, 0))
@@ -3236,13 +3228,10 @@ sub_main(int *exit_code,
opt_state.metadata_only = TRUE;
break;
case svnadmin__fs_type:
- SVN_ERR(svn_utf_cstring_to_utf8(&opt_state.fs_type, opt_arg, pool));
+ opt_state.fs_type = utf8_opt_arg;
break;
case svnadmin__parent_dir:
- SVN_ERR(svn_utf_cstring_to_utf8(&opt_state.parent_dir, opt_arg,
- pool));
- opt_state.parent_dir
- = svn_dirent_internal_style(opt_state.parent_dir, pool);
+ opt_state.parent_dir = svn_dirent_internal_style(utf8_opt_arg, pool);
break;
case svnadmin__use_pre_commit_hook:
opt_state.use_pre_commit_hook = TRUE;
@@ -3275,7 +3264,6 @@ sub_main(int *exit_code,
opt_state.clean_logs = TRUE;
break;
case svnadmin__config_dir:
- SVN_ERR(svn_utf_cstring_to_utf8(&utf8_opt_arg, opt_arg, pool));
opt_state.config_dir =
apr_pstrdup(pool, svn_dirent_canonicalize(utf8_opt_arg, pool));
break;
@@ -3289,15 +3277,11 @@ sub_main(int *exit_code,
opt_state.normalize_props = TRUE;
break;
case svnadmin__exclude:
- SVN_ERR(svn_utf_cstring_to_utf8(&utf8_opt_arg, opt_arg, pool));
-
if (! opt_state.exclude)
opt_state.exclude = apr_array_make(pool, 1, sizeof(const char *));
APR_ARRAY_PUSH(opt_state.exclude, const char *) = utf8_opt_arg;
break;
case svnadmin__include:
- SVN_ERR(svn_utf_cstring_to_utf8(&utf8_opt_arg, opt_arg, pool));
-
if (! opt_state.include)
opt_state.include = apr_array_make(pool, 1, sizeof(const char *));
APR_ARRAY_PUSH(opt_state.include, const char *) = utf8_opt_arg;
@@ -3349,10 +3333,8 @@ sub_main(int *exit_code,
}
else
{
- const char *first_arg;
+ const char *first_arg = os->argv[os->ind++];
- SVN_ERR(svn_utf_cstring_to_utf8(&first_arg, os->argv[os->ind++],
- pool));
subcommand = svn_opt_get_canonical_subcommand3(cmd_table, first_arg);
if (subcommand == NULL)
{
@@ -3381,7 +3363,7 @@ sub_main(int *exit_code,
_("Repository argument required"));
}
- SVN_ERR(svn_utf_cstring_to_utf8(&repos_path, os->argv[os->ind++], pool));
+ repos_path = os->argv[os->ind++], pool;
if (svn_path_is_url(repos_path))
{