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))
         {


Reply via email to