On Mon, 2010-06-14 at 03:44 +0200, Uwe Stuehler wrote: > On 06/13/10 06:25 PM, Uwe Stuehler wrote: > > Index: subversion/libsvn_client/cmdline.c > > =================================================================== > > --- subversion/libsvn_client/cmdline.c (revision 953325) > > +++ subversion/libsvn_client/cmdline.c (working copy) > > @@ -123,6 +123,7 @@ check_root_url_of_target(const char **root_url, > > * argument. > > */ > > if ((err->apr_err == SVN_ERR_ENTRY_NOT_FOUND) > > + || (err->apr_err == SVN_ERR_WC_PATH_NOT_FOUND) > > || (err->apr_err == SVN_ERR_WC_NOT_WORKING_COPY)) > > { > > svn_error_clear(err); > > > > With this change svn_cl__status() actually makes it past the > > argument parsing phase: > > Sorry, replying to myself since I forgot to include a log message. > > [[[ > Fix handling of non-WC paths in presence of repository relative URLs > > * subversion/libsvn_client/cmdline.c: > (check_root_url_of_target): Catch a new error constant for paths > that are not registered in a working copy, and thereby allow the > argument processing to continue as expected. > > Patch by: Uwe Stuehler (subversion-li...@bsdx.de) > ]]] > > Actually, in the example that I used in my previous mail: > > $ cd /path/to/wc > $ svn status ^/ foo
Your example is a bit unclear because it does (for me at least) generate a sensible error message: [[[ $ svn st ^/ foo svn: The node '/home/julianfoad/src/subversion-a/foo' was not found. ]]] However, if I specify an existing file instead of 'foo' I get a much clearer indication of a bug: [[[ $ svn st ^/ COMMITTERS /home/julianfoad/src/subversion-a/subversion/libsvn_client/cmdline.c:320: (apr_err=235000) svn: In file '/home/julianfoad/src/subversion-a/subversion/libsvn_subr/dirent_uri.c' line 1641: assertion failed (! svn_path_is_url(relative)) Aborted ]]] When I try your patch (above), *both* of these commands fail with that assertion failure. Can you try them? If you don't get an assertion failure, check that you are compiling with assertions enabled ("configure --enable-maintainer-mode" should do it). > As far as I understood the purpose of check_root_url_of_target(), > it is applied in order to make sure that if ^/ is being used, all > other arguments refer to the same repository. Is that correct? Yes. > (That got me a bit confused, since I previously assumed that ^/ > is always expanded to the repository URL of the current working > directory and not based on any other arguments that I supply.) (Hmm, I thought it was documented somewhere, but it doesn't seem to be documented properly in the book.) > Even though 'foo' is not under SVN control and does not exist yet, > the argument points to a path *inside* the current working copy. > So I wonder: shouldn't it be possible to retrieve the repository > URL of that (nonexistent) path anyway? It would be possible to > infer this from the parent directory ("." in this case). Well, yes, and some commands do that. "svn update foo" is one example: even if "foo" doesn't exist on disk, it looks in the WC metadata to see if it can update it. But that's a completely different subject, I think. - Julian