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)