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)