Author: rinrab
Date: Thu May 29 17:51:37 2025
New Revision: 1925951

URL: http://svn.apache.org/viewvc?rev=1925951&view=rev
Log:
On the 'utf8-cmdline-prototype' branch: Minimize difference between
svn_opt__process_target_array() and svn_client__process_target_array().

* subversion/libsvn_subr/opt.c
  (svn_opt__process_target_array):
  - Cosmetic/formatting fixes.
  - Add separate input_targets var where the targets are collected into.
  - Save bad targets into reserved_names var and handle them later.

Modified:
    subversion/branches/utf8-cmdline-prototype/subversion/libsvn_subr/opt.c

Modified: 
subversion/branches/utf8-cmdline-prototype/subversion/libsvn_subr/opt.c
URL: 
http://svn.apache.org/viewvc/subversion/branches/utf8-cmdline-prototype/subversion/libsvn_subr/opt.c?rev=1925951&r1=1925950&r2=1925951&view=diff
==============================================================================
--- subversion/branches/utf8-cmdline-prototype/subversion/libsvn_subr/opt.c 
(original)
+++ subversion/branches/utf8-cmdline-prototype/subversion/libsvn_subr/opt.c Thu 
May 29 17:51:37 2025
@@ -296,30 +296,33 @@ svn_opt__collect_targets(apr_array_heade
  * order to move to libsvn_client while maintaining backward compatibility. */
 svn_error_t *
 svn_opt__process_target_array(apr_array_header_t **targets_p,
-                              apr_array_header_t *input_targets,
+                              apr_array_header_t *utf8_targets,
                               const apr_array_header_t *known_targets,
                               apr_pool_t *pool)
 {
   int i;
-  svn_error_t *err = SVN_NO_ERROR;
-  apr_array_header_t *output_targets =
-    apr_array_make(pool, DEFAULT_ARRAY_SIZE, sizeof(const char *));
+  apr_array_header_t *input_targets;
+  apr_array_header_t *output_targets;
+  apr_array_header_t *reserved_names = NULL;
 
   /* Step 1:  create a master array of targets, and come from concatenating
      the targets left by apr_getopt, plus any extra targets (e.g., from the
      --targets switch.) */
 
-  SVN_ERR(svn_opt__collect_targets(&input_targets, NULL, input_targets,
-                                   known_targets, pool));
+  SVN_ERR(svn_opt__collect_targets(&input_targets, NULL,
+                                   utf8_targets, known_targets, pool));
 
   /* Step 2:  process each target.  */
 
+  output_targets = apr_array_make(pool, input_targets->nelts,
+                                  sizeof(const char *));
+
   for (i = 0; i < input_targets->nelts; i++)
     {
       const char *utf8_target = APR_ARRAY_IDX(input_targets, i, const char *);
       const char *true_target;
-      const char *target;      /* after all processing is finished */
       const char *peg_rev;
+      const char *target;      /* after all processing is finished */
 
       /*
        * This is needed so that the target can be properly canonicalized,
@@ -339,15 +342,15 @@ svn_opt__process_target_array(apr_array_
       /* URLs and wc-paths get treated differently. */
       if (svn_path_is_url(true_target))
         {
-          SVN_ERR(svn_opt__arg_canonicalize_url(&true_target, true_target,
-                                                 pool));
+          SVN_ERR(svn_opt__arg_canonicalize_url(&true_target,
+                                                true_target, pool));
         }
       else  /* not a url, so treat as a path */
         {
           const char *base_name;
 
-          SVN_ERR(svn_opt__arg_canonicalize_path(&true_target, true_target,
-                                                 pool));
+          SVN_ERR(svn_opt__arg_canonicalize_path(&true_target,
+                                                  true_target, pool));
 
           /* If the target has the same name as a Subversion
              working copy administrative dir, skip it. */
@@ -363,9 +366,11 @@ svn_opt__process_target_array(apr_array_
           if (0 == strcmp(base_name, ".svn")
               || 0 == strcmp(base_name, "_svn"))
             {
-              err = svn_error_createf(SVN_ERR_RESERVED_FILENAME_SPECIFIED,
-                                      err, _("'%s' ends in a reserved name"),
-                                      utf8_target);
+              if (!reserved_names)
+                reserved_names = apr_array_make(pool, 1,
+                                                sizeof(const char *));
+
+              APR_ARRAY_PUSH(reserved_names, const char *) = utf8_target;
               continue;
             }
         }
@@ -381,7 +386,19 @@ svn_opt__process_target_array(apr_array_
 
   *targets_p = output_targets;
 
-  return err;
+  if (reserved_names)
+    {
+      svn_error_t *err = SVN_NO_ERROR;
+
+      for (i = 0; i < reserved_names->nelts; ++i)
+        err = svn_error_createf(SVN_ERR_RESERVED_FILENAME_SPECIFIED, err,
+                                _("'%s' ends in a reserved name"),
+                                APR_ARRAY_IDX(reserved_names, i,
+                                              const char *));
+      return svn_error_trace(err);
+    }
+
+  return SVN_NO_ERROR;
 }
 
 svn_error_t *


Reply via email to