Julian Foad <julian.f...@wandisco.com> writes: > On Sat, 2010-12-04, Noorul Islam K M wrote: > >> Julian Foad <julian.f...@wandisco.com> writes: >> > Noorul Islam K M wrote: >> >> Julian Foad <julian.f...@wandisco.com> writes: >> >> > * "svn info ^/b" -> "Not a valid URL"; should be "path '/b' not found >> >> > in revision REV"? > [...] >> >> - SVN_ERR(svn_cmdline_fprintf >> >> - (stderr, subpool, >> >> - _("%s: (Not a valid URL)\n\n"), >> >> - svn_path_is_url(truepath) >> >> - ? truepath >> >> - : svn_dirent_local_style(truepath, pool))); >> >> + SVN_ERR(svn_cmdline_fprintf (stderr, subpool, >> >> + _("%s\n\n"), >> >> err->message)); >> > >> > Unfortunately we cannot assume that err->message is a good user-friendly >> > description of the problem. It appears that it *is* in the specific >> > case we're looking at: >> > >> > $ svn info ^/b >> > URL 'https://svn.apache.org/repos/asf/b' non-existent in revision >> > 1041775 >> > >> > That's lovely. But in other cases it's not: >> > >> > $ svn info hhh://aa.cc.dd/foo >> > traced call >> > >> > See how err->message is just "traced call" in this case. We can't even >> > assume it is not NULL, in fact. >> > >> > I can think of two options. We could try to use one of the >> > svn_error_*() functions to print out a "nice" description of the actual >> > returned error. Alternatively, we could ignore 'err' and print a simple >> > message here, like the existing code is doing but saying something more >> > helpful than "Not a valid URL". What do you think? >> > >> > Does the documentation for svn_client_info3() say under what conditions >> > it returns the error code SVN_ERR_RA_ILLEGAL_URL? Does that help? >> >> Attached is the updated patch using svn_err_best_message() > > Hi Noorul. > > Thank you for the updated patch. Even though this is a very > simple-looking patch, I need a bit more information to help me review > it. > > Do you think both of the options I suggested are possible solutions? > What are the advantages of the option you chose? What disadvantages do > you know about? What are the risks with it - in what ways could it > possibly go wrong or make a user unhappy? For example, what other error > conditions might this code possibly handle? Which of them did you try? > Show us the results. Do you think they are user-friendly? >
One of the solution that you suggested was to keep what the existing code is doing but saying something more helpful than "Not a valid URL". I thought that the error returned by the API might have useful information and could be printed using svn_err_best_message(). For example, take the following two cases. 1. a) With the patch noo...@noorul:/tmp/wc/latestrepo$ ~/projects/subversion/builds/trunk/bin/svn info ^/non-existing URL 'file:///tmp/latestrepo/non-existing' non-existent in revision 0 svn: A problem occurred; see other errors for details 1. b) Without the patch noo...@noorul:/tmp/wc/latestrepo$ ~/projects/subversion/builds/trunk/bin/svn info ^/non-existing file:///tmp/latestrepo/non-existing: (Not a valid URL) svn: A problem occurred; see other errors for details 2. a) With the patch noo...@noorul:/tmp/wc/latestrepo$ ~/projects/subversion/builds/trunk/bin/svn info invalid://no-domain Unrecognized URL scheme for 'invalid://non-domain' svn: A problem occurred; see other errors for details 2. b) Without patch noo...@noorul:/tmp/wc/latestrepo$ ~/projects/subversion/builds/trunk/bin/svn info invalid://no-domain invalid://no-domain: (Not a valid URL) svn: A problem occurred; see other errors for details In both the above cases the patch helps the user to have better information (what actually went wrong). Also If a user is using the client API, I think he will be having these messages than the one that we hard coded as of today. I ran the test suite and found that one of the test cases was failing and I fixed the same. There were no other failures. > Checking those sorts of things normally takes much more effort than > actually writing the few lines of source code. That's all part of > making a patch. Whenever you send a patch, it's helpful to say these > things. When the reviewer knows what's already been checked, he or she > can then concentrate on verifying the correctness of the reasoning and > of the code. > > Please take a little extra time to provide this help. I will keep this in mind. Please find attached the updated patch. Log [[[ Make "svn info" to display the actual error message returned by API when illegal URL is passed. * subversion/svn/info-cmd.c (svn_cl__info): Display the actual error message returned by svn_client_info3() instead of a custom one. * subversion/tests/cmdline/basic_tests.py (info_nonexisting_file): Modify test case Patch by: Noorul Islam K M <noorul{_AT_}collab.net> ]]] Thanks and Regards Noorul
Index: subversion/tests/cmdline/basic_tests.py =================================================================== --- subversion/tests/cmdline/basic_tests.py (revision 1042948) +++ subversion/tests/cmdline/basic_tests.py (working copy) @@ -2270,7 +2270,8 @@ # Check for the correct error message for line in errput: - if re.match(".*\(Not a valid URL\).*", line): + if re.match(".*" + idonotexist_url + ".*non-existent in revision 1.*", + line): return # Else never matched the expected error output, so the test failed. Index: subversion/svn/info-cmd.c =================================================================== --- subversion/svn/info-cmd.c (revision 1042948) +++ subversion/svn/info-cmd.c (working copy) @@ -504,6 +504,7 @@ svn_opt_revision_t peg_revision; svn_info_receiver_t receiver; const char *path_prefix; + char errbuf[256]; SVN_ERR(svn_cl__args_to_target_array_print_reserved(&targets, os, opt_state->targets, @@ -584,12 +585,9 @@ } else if (err->apr_err == SVN_ERR_RA_ILLEGAL_URL) { - SVN_ERR(svn_cmdline_fprintf - (stderr, subpool, - _("%s: (Not a valid URL)\n\n"), - svn_path_is_url(truepath) - ? truepath - : svn_dirent_local_style(truepath, pool))); + SVN_ERR(svn_cmdline_fprintf( + stderr, subpool, _("%s\n\n"), + svn_err_best_message(err, errbuf, sizeof(errbuf)))); } else {