Author: rinrab
Date: Thu May 29 15:54:14 2025
New Revision: 1925937

URL: http://svn.apache.org/viewvc?rev=1925937&view=rev
Log:
Let svn_cmdline__be_interactive() to handle the whole --non-interactive and
--force-interactive logic and handle errors.

* subversion/include/private/svn_cmdline_private.h
  (svn_cmdline__be_interactive): Adjust definition to return an SVN error
   and set non_interactive with result value.
* subversion/libsvn_subr/cmdline.c
  (svn_cmdline__be_interactive): Update implementation to include error
   handling and set non_interactive with result value.

* subversion/svn/svn.c,
  subversion/svnmucc/svnmucc.c,
  subversion/svnrdump/svnrdump.c,
  subversion/svnsync/svnsync.c,
  tools/client-side/svn-mergeinfo-normalizer/svn-mergeinfo-normalizer.c:
  Update usages.

This also fixes potential issues with incomplete logic.

Modified:
    subversion/trunk/subversion/include/private/svn_cmdline_private.h
    subversion/trunk/subversion/libsvn_subr/cmdline.c
    subversion/trunk/subversion/svn/svn.c
    subversion/trunk/subversion/svnmucc/svnmucc.c
    subversion/trunk/subversion/svnrdump/svnrdump.c
    subversion/trunk/subversion/svnsync/svnsync.c
    
subversion/trunk/tools/client-side/svn-mergeinfo-normalizer/svn-mergeinfo-normalizer.c

Modified: subversion/trunk/subversion/include/private/svn_cmdline_private.h
URL: 
http://svn.apache.org/viewvc/subversion/trunk/subversion/include/private/svn_cmdline_private.h?rev=1925937&r1=1925936&r2=1925937&view=diff
==============================================================================
--- subversion/trunk/subversion/include/private/svn_cmdline_private.h (original)
+++ subversion/trunk/subversion/include/private/svn_cmdline_private.h Thu May 
29 15:54:14 2025
@@ -226,15 +226,18 @@ svn_cmdline__stdout_is_a_terminal(void);
 svn_boolean_t
 svn_cmdline__stderr_is_a_terminal(void);
 
-/* Determine whether interactive mode should be enabled, based on whether
- * the user passed the --non-interactive or --force-interactive options.
- * If neither option was passed, interactivity is enabled if standard
- * input is connected to a terminal device.
+/* Adjusts boolean described by @a non_interactive to whether interactive
+ * mode should be disabled, based on whether the user passed the
+ * --non-interactive or --force-interactive options. If neither option
+ * was passed, interactivity is enabled if standard input is connected to a 
terminal device.
+ *
+ * If both, @a non_interactive and @a force_interactive are @c TRUE, an
+ * @c SVN_ERR_CL_ARG_PARSING_ERROR error will be returned.
  *
  * @since New in 1.8.
  */
-svn_boolean_t
-svn_cmdline__be_interactive(svn_boolean_t non_interactive,
+svn_error_t *
+svn_cmdline__be_interactive(svn_boolean_t *non_interactive,
                             svn_boolean_t force_interactive);
 
 /* Parses the argument value of '--trust-server-cert-failures' OPT_ARG into

Modified: subversion/trunk/subversion/libsvn_subr/cmdline.c
URL: 
http://svn.apache.org/viewvc/subversion/trunk/subversion/libsvn_subr/cmdline.c?rev=1925937&r1=1925936&r2=1925937&view=diff
==============================================================================
--- subversion/trunk/subversion/libsvn_subr/cmdline.c (original)
+++ subversion/trunk/subversion/libsvn_subr/cmdline.c Thu May 29 15:54:14 2025
@@ -1222,21 +1222,29 @@ svn_cmdline__stderr_is_a_terminal(void)
 #endif
 }
 
-svn_boolean_t
-svn_cmdline__be_interactive(svn_boolean_t non_interactive,
+svn_error_t *
+svn_cmdline__be_interactive(svn_boolean_t *non_interactive,
                             svn_boolean_t force_interactive)
 {
+  /* The --non-interactive and --force-interactive options are mutually
+   * exclusive. */
+  if (*non_interactive && force_interactive)
+    {
+      return svn_error_create(SVN_ERR_CL_ARG_PARSING_ERROR, NULL,
+                              _("--non-interactive and --force-interactive "
+                                "are mutually exclusive"));
+    }
+
   /* If neither --non-interactive nor --force-interactive was passed,
    * be interactive if stdin is a terminal.
    * If --force-interactive was passed, always be interactive. */
-  if (!force_interactive && !non_interactive)
-    {
-      return svn_cmdline__stdin_is_a_terminal();
-    }
-  else if (force_interactive)
-    return TRUE;
+  if (!force_interactive && !*non_interactive)
+    *non_interactive = svn_cmdline__stdin_is_a_terminal();
+
+  if (force_interactive)
+    *non_interactive = FALSE;
 
-  return !non_interactive;
+  return SVN_NO_ERROR;
 }
 
 

Modified: subversion/trunk/subversion/svn/svn.c
URL: 
http://svn.apache.org/viewvc/subversion/trunk/subversion/svn/svn.c?rev=1925937&r1=1925936&r2=1925937&view=diff
==============================================================================
--- subversion/trunk/subversion/svn/svn.c (original)
+++ subversion/trunk/subversion/svn/svn.c Thu May 29 15:54:14 2025
@@ -2779,18 +2779,8 @@ sub_main(int *exit_code,
       }
     }
 
-  /* The --non-interactive and --force-interactive options are mutually
-   * exclusive. */
-  if (opt_state.non_interactive && force_interactive)
-    {
-      return svn_error_create(SVN_ERR_CL_ARG_PARSING_ERROR, NULL,
-                              _("--non-interactive and --force-interactive "
-                                "are mutually exclusive"));
-    }
-  else
-    opt_state.non_interactive = !svn_cmdline__be_interactive(
-                                  opt_state.non_interactive,
-                                  force_interactive);
+  SVN_ERR(svn_cmdline__be_interactive(&opt_state.non_interactive,
+                                      force_interactive));
 
   /* Turn our hash of changelists into an array of unique ones. */
   SVN_ERR(svn_hash_keys(&(opt_state.changelists), changelists, pool));

Modified: subversion/trunk/subversion/svnmucc/svnmucc.c
URL: 
http://svn.apache.org/viewvc/subversion/trunk/subversion/svnmucc/svnmucc.c?rev=1925937&r1=1925936&r2=1925937&view=diff
==============================================================================
--- subversion/trunk/subversion/svnmucc/svnmucc.c (original)
+++ subversion/trunk/subversion/svnmucc/svnmucc.c Thu May 29 15:54:14 2025
@@ -657,15 +657,7 @@ sub_main(int *exit_code,
       return SVN_NO_ERROR;
     }
 
-  if (non_interactive && force_interactive)
-    {
-      return svn_error_create(SVN_ERR_CL_ARG_PARSING_ERROR, NULL,
-                              _("--non-interactive and --force-interactive "
-                                "are mutually exclusive"));
-    }
-  else
-    non_interactive = !svn_cmdline__be_interactive(non_interactive,
-                                                   force_interactive);
+  SVN_ERR(svn_cmdline__be_interactive(&non_interactive, force_interactive));
 
   if (!non_interactive)
     {

Modified: subversion/trunk/subversion/svnrdump/svnrdump.c
URL: 
http://svn.apache.org/viewvc/subversion/trunk/subversion/svnrdump/svnrdump.c?rev=1925937&r1=1925936&r2=1925937&view=diff
==============================================================================
--- subversion/trunk/subversion/svnrdump/svnrdump.c (original)
+++ subversion/trunk/subversion/svnrdump/svnrdump.c Thu May 29 15:54:14 2025
@@ -1112,8 +1112,7 @@ sub_main(int *exit_code,
       SVN_ERR(svn_cmdline__stdin_readline(&password, pool, pool));
     }
 
-  non_interactive = !svn_cmdline__be_interactive(non_interactive,
-                                                 force_interactive);
+  SVN_ERR(svn_cmdline__be_interactive(&non_interactive, force_interactive));
 
   SVN_ERR(init_client_context(&(opt_baton->ctx),
                               non_interactive,

Modified: subversion/trunk/subversion/svnsync/svnsync.c
URL: 
http://svn.apache.org/viewvc/subversion/trunk/subversion/svnsync/svnsync.c?rev=1925937&r1=1925936&r2=1925937&view=diff
==============================================================================
--- subversion/trunk/subversion/svnsync/svnsync.c (original)
+++ subversion/trunk/subversion/svnsync/svnsync.c Thu May 29 15:54:14 2025
@@ -2202,18 +2202,8 @@ sub_main(int *exit_code,
   if (opt_baton.help)
     subcommand = svn_opt_get_canonical_subcommand3(svnsync_cmd_table, "help");
 
-  /* The --non-interactive and --force-interactive options are mutually
-   * exclusive. */
-  if (opt_baton.non_interactive && force_interactive)
-    {
-      return svn_error_create(SVN_ERR_CL_ARG_PARSING_ERROR, NULL,
-                              _("--non-interactive and --force-interactive "
-                                "are mutually exclusive"));
-    }
-  else
-    opt_baton.non_interactive = !svn_cmdline__be_interactive(
-                                  opt_baton.non_interactive,
-                                  force_interactive);
+  SVN_ERR(svn_cmdline__be_interactive(&opt_baton.non_interactive,
+                                      force_interactive));
 
   /* Disallow the mixing --username/password with their --source- and
      --sync- variants.  Treat "--username FOO" as "--source-username

Modified: 
subversion/trunk/tools/client-side/svn-mergeinfo-normalizer/svn-mergeinfo-normalizer.c
URL: 
http://svn.apache.org/viewvc/subversion/trunk/tools/client-side/svn-mergeinfo-normalizer/svn-mergeinfo-normalizer.c?rev=1925937&r1=1925936&r2=1925937&view=diff
==============================================================================
--- 
subversion/trunk/tools/client-side/svn-mergeinfo-normalizer/svn-mergeinfo-normalizer.c
 (original)
+++ 
subversion/trunk/tools/client-side/svn-mergeinfo-normalizer/svn-mergeinfo-normalizer.c
 Thu May 29 15:54:14 2025
@@ -607,18 +607,8 @@ sub_main(int *exit_code,
       }
     }
 
-  /* The --non-interactive and --force-interactive options are mutually
-   * exclusive. */
-  if (opt_state.non_interactive && force_interactive)
-    {
-      return svn_error_create(SVN_ERR_CL_ARG_PARSING_ERROR, NULL,
-                              _("--non-interactive and --force-interactive "
-                                "are mutually exclusive"));
-    }
-  else
-    opt_state.non_interactive = !svn_cmdline__be_interactive(
-                                  opt_state.non_interactive,
-                                  force_interactive);
+  SVN_ERR(svn_cmdline__be_interactive(&opt_state.non_interactive,
+                                      force_interactive));
 
   /* --password-from-stdin can only be used with --non-interactive */
   if (read_pass_from_stdin && !opt_state.non_interactive)


Reply via email to