subversion-dev mailing list archives

Site index · List index
Message view « Date » · « Thread »
Top « Date » · « Thread »
From Daniel Shahaf <>
Subject Re: wildcard authz docs question
Date Tue, 28 Mar 2017 21:43:20 GMT
Doug Robinson wrote on Tue, Mar 28, 2017 at 09:05:53 -0400:
> Daniel:
> Sorry for the delay - I missed the post.

No worries.

> That said, in discussions I've had I think about the SVN regex "**"
> differently than the zsh construct.  The way that I interpret "/**" is
> "everything below and including slash" - so "**" is the moral equivalent of
> Perl's ".*" wildcard.  It need not be followed by any terminal pattern to
> match anything - since it matches them all.  If it was followed by
> something then that something would be required.

Note that your terminology is backwards: "**" is a wildcard and ".*" is
a regex.

> So let me break the 3 patterns down:
> /*/*/**   This requires 2 directories. It will match all directories 2
> levels down - and then everything in all of the rest of those trees however
> deep.  It should not, however, match a file or symlink in a directory, e.g.
> "/dirA/fileB".  Whereas it will match "/dirA/dirB" along with
> "/dirA/dirB/fileC", etc.

That's an interesting one.  Neither vim nor zsh matches dirA/dirB here —
they only match dirents _under_ it — but it's certainly defensible to
match it, exactly as you say.

To clarify, if foo/bar is a symlink then it is not a directory, no
matter what its target is and what else exists in the repository.  (In
particular, if its target is "baz" and foo/baz/ exists, foo/bar is still
not a directory.)

So, for example, [foo/bar/**] would apply to foo/bar/, iff it exists and
is a directory.  That sounds good.

> /*/**/*   This requires 1 directory and then something else.  It will match
> "/dirA/fileB" or "/dirA/symlinkX" since "/**" can simply go to nothing.  Or
> perhaps a different way to look at it is that "/**" can match "/" which, in
> its simplest will mean "/*/**/*" becomes "/*//*" and given that multiple
> '/' always collapse to a single '/' in "path arithmetic" becomes "/*/*" for
> its shortest match.


> /**/*/*   This requires 1 directory and then something else.  Pretty much
> the same as the prior example and for the same reasons.




View raw message