On Fri, Jun 11, 2010 at 05:37:11PM +0200, Uwe Stuehler wrote:
> Meanwhile Michael Pilato and Stefan Sperling gave me even
> more input (thank you) and I was able to prepare a suite of tests
> modeled after others in subversion/tests in order to check most
> of the other commands which, like 'add' and 'status', only accept
> paths or URLs in certain argument positions.

> a) Validating all input in the libsvn_client library and gracefully
>    handling any errors instead of triggering an assertion allows the
>    client to recover.  I think everyone agreed that this is good.

Yes, I think so, too.

> b) Checking the arguments in the CLI commands before calling
>    libsvn_client functions makes it possible to abort early and not
>    in the middle of processing the command.

I agree we should check at both layers.

>    But svn_path_is_url() only does a syntactic check, and ^/ (or the
>    expanded URL) is in fact a syntactically correct POSIX pathname.
>    That is why c) also appeals to me.
> 
> c) Stefan's suggested fix through canonicalization of path arguments
>    produces an error message that seems more rational to me than, say,
>    "Path '%s' is not a working copy path, but a URL" - since even a URL
>    is a syntactically correct pathname (on POSIX systems).  However,
>    this would imply that target arguments aren't parsed and interpreted
>    in a uniform way and could lead to confusion? That is why d) also
>    seems plausible.

The CLI client needs to canonicalise paths it passes to the client library.
This is an independent issue, really. It just happens that passing
canonicalised paths triggers a code path that does not run into the
assertion. But we need to fix the assertion failure either way,
by rejecting invalid arguments with proper error codes.

> d) With consistent expansion of ^/ to the repository URL and consistent
>    parsing of @peg-revisions in all target arguments, and behavioral
>    differences depending on the kind of target given, I could understand
>    a policy that treats pathnames which look like URLs as syntactically
>    incorrect and rejects them where only local pathnames are expected
>    and vice versa.

If we enforce a certain syntax for certain types of arguments, we should
probably provide a way to relax the checks in case someone really
wants to version files or directories called http://www.example.com.
We don't currently impose restrictions on names of versioned nodes,
and I don't think we should do so.

I'd like to move forward with this.
Any objections regarding the above points? Else I will try to finish
this work myself, unless Uwe finds time to continue it soon.

Stefan

Reply via email to