[svn.haxx.se] · SVN Dev · SVN Users · SVN Org · TSVN Dev · TSVN Users · Subclipse Dev · Subclipse Users · this month's index

PATCH: client shows help instead of certain specific error messages

From: Julian Foad <julianfoad_at_btopenworld.com>
Date: 2003-04-09 01:30:21 CEST

For certain argument parsing errors, "svn diff" and other commands show help text even though a specific error message has been set up by the code that detected the error.

Reproduction transcript:

> ~/src/subversion> svn diff http://any.url/
> diff (di): display the differences between two paths.
> usage: 1. diff [-r N[:M]] [TARGET [TARGET ... ]]
> 2. diff URL1[@N] URL2[@M]
>
> 1. Each TARGET can be either a working copy path or URL. If no
> TARGET is specified, a value of '.' is assumed.
>
> If TARGET is a URL, then revs N and M must be given via -r.
...[blah blah]...

This is what it wanted to display (the code in diff-cmd.c sets up this error message):

> ~/src/subversion> svn diff http://any.url/
> subversion/clients/cmdline/diff-cmd.c:92: (apr_err=205000)
> svn: Client error in parsing arguments
> svn: Second URL is required.

The current behaviour was introduced in revision 1882 to ensure that something useful would be displayed for argument parsing errors, rather than nothing at all. Presumably at that time specific error messages were not being created, but now in some cases they are.

Here is a log message for the attached patch to improve the behaviour:

For argument parsing errors, do not just show the help message, because useful
information is thrown away. Instead, show an explicit error message if one is
available, otherwise show the help.

* subversion/clients/cmdline/main.c:
  (main) If an argument parsing error has a non-empty message, display that
  message instead of the help.

This patch assumes that null error messages are represented by an empty string rather than by a null pointer, which is the case throughout the command-line client at present. I do not know whether this policy is or should be written down anywhere - perhaps it should be in the documentation of svn_error_create.

- Julian

Index: subversion/clients/cmdline/main.c
===================================================================
--- subversion/clients/cmdline/main.c (revision 5577)
+++ subversion/clients/cmdline/main.c (working copy)
@@ -1093,7 +1093,7 @@
     {
       svn_error_t *tmp_err;
 
- if (err->apr_err == SVN_ERR_CL_ARG_PARSING_ERROR)
+ if (err->apr_err == SVN_ERR_CL_ARG_PARSING_ERROR && *err->message == '\0')
         svn_opt_subcommand_help (subcommand->name, svn_cl__cmd_table,
                                  svn_cl__options, pool);
       else

---------------------------------------------------------------------
To unsubscribe, e-mail: dev-unsubscribe@subversion.tigris.org
For additional commands, e-mail: dev-help@subversion.tigris.org
Received on Wed Apr 9 01:25:26 2003

This is an archived mail posted to the Subversion Dev mailing list.