Hello,

I'm sorry, I'm not interested in changing how WildFile currently works. I 
thought about it a long time, and IMO changing it would create lots of 
problems with current users, not to mention require changing the manual.

In addition, I am not interested in FNM_FILE_NAME, because unless POSIX has 
added something new, it is a GNU extention, which means it is not portable.

I consider this a non-problem and have already provided a resonable solution 
for the few users who really care.

On Monday 17 April 2006 10:21, Robert Nelson wrote:
> At first I was somewhat confused about what the current behaviour is, both
> by this thread, the documentation and my experience with file matching
> algorithms used by other programs such as the various shells.
>
> Judging from your example below I believe you may be confused about the
> current behaviour as well.
>
> The current code allows "*" to match any character INCLUDING the "/".
>
> This means, given the pattern "*kern", and using WildFile, the following
> files would match:
>
> /xxx/kern
> /xxx/abc_kern
> /xxx/yyy/kern
>
> But the following would not unless an asterisk is added to the end of the
> pattern or WildDir or Wild was used.
>
> /xxx/kern/yyy
> /xxx/abc_kern/yyy
>
> If you wanted "*kern" to match as part of the path or as a file then you
> would have to use Wild rather than WildFile.  This will be matched when
> that directory is processed as the tree is descended.
>
> Perhaps most worrisome of all is that the following would match the pattern
> "/test*.dat"
>
> /test/archive/important/file1.dat
>
> Or given the pattern "/xxx/yyy/*.c" the following would match
>
> /xxx/yyy/abc.c
> /xxx/yyy/backup_copy/abc.c
>
> This is how the code works today.  I think these last two cases are
> counter-intuitive and likely to cause someone problems at some point.  Off
> the top of my head, I can't think of a case where it would be desirable
> behaviour.
>
> With this understanding of the current behaviour I believe it is important
> to make FNM_FILE_NAME work properly and specify it.  This would just
> require adding one missing check for a "/" in fnmatch() when FNM_FILE_NAME
> is set. There isn't much difference in the current code when this flag is
> specified. It certainly doesn't behave the way it is documented in GNU or
> POSIX.
>
> However fixing this "bug" would mean that the pattern "*.tmp" would no
> longer match anything since absolute paths are always supplied.  Thus the
> origins of my original suggestion.  While you could add a new keyword for
> matching against just the base name you would either have to not fix the
> above behaviour or break existing configurations.
>
> As far as the code example is concerned I wouldn't implement it that way in
> production code either.  I just included it to illustrate what I was
> suggesting using the minimum changes required.  In production code I would
> only scan the filename and patterns once.
>
> While you could use regex the patterns would be much more complicated and
> harder for the average user, who is familiar with using the shell, to
> understand.  There is a reason why programs that deal with just filenames
> use the glob(7) and fnmatch(3) patterns.
>
> I think the reason that only one user has mentioned it in the last 5 years
> is due to a few factors,
>
>       the code mostly works as expected,
>
>       I believe that Wild patterns are primarily used for exclusions and
> most users don't examine which files are being excluded until they aren't
> there when you try to restore.
>
>
> -----Original Message-----
> From: [EMAIL PROTECTED]
> [mailto:[EMAIL PROTECTED] On Behalf Of Kern Sibbald
> Sent: Sunday, April 16, 2006 10:19 AM
> To: Robert Nelson
> Cc: 'Martin Simmons'; [EMAIL PROTECTED];
> bacula-users@lists.sourceforge.net
> Subject: Re: [Bacula-devel] Surprise bug + Scratch pool algorithm
>
> On Sunday 16 April 2006 11:52, Robert Nelson wrote:
> > But I think the behaviour would be very intuitive.  If you look at how
> > it is used below in the example from the Windows FileSet I think it is
> > fairly obvious.  I also think it is much clearer and easier to
> > maintain than the corresponding regex would be.  The code change was
> > minimal and didn't require any modification of the buffers themselves.
> > Here is the diff for
> > WildFile:
>
> Well, I am sorry, but I don't agree with you on the point of it being very
> intuitive.  With your change, I would no longer be able to do something
> based on a part of the path -- for example, suppose I want to compress all
> files where any part of the path has kern in the name.  I can do it with
>
>    WildFile = "*kern"
>
> With your suggestion, that would only match the filename part and would
> never match against something in the path.
>
> In addition, if I did implement it, I wouldn't do it as in the code below
> because that code has a huge performance penalty especially if you are
> dealing with 3 million files.  I leave it to you to work out why.
>
> After a good deal of thought, IMO the correct way to solve the problem is
> with regex, or possibly if it is really necessary with another directive
> that explicitly lets the user match against only the filename part rather
> than the full path, but I don't think a new directive will really be
> necessary since no one has asked for it in the 5 years it has been
> programmed.
>
> >        } else  {
> >           for (k=0; k<fo->wildfile.size(); k++) {
> > -            if (fnmatch((char *)fo->wildfile.get(k), ff->fname,
>
> fnmode|ic)
>
> > == 0) {
> > +            const char *pattern = (const char *)fo->wildfile.get(k);
> > +            const char *fname;
> > +
> > +            if (strchr(pattern, '/') != NULL || (fname =
> > strrchr(ff->fname, '/')) == NULL)
> > +               fname = ff->fname;
> > +            else
> > +               fname++;
> > +
> > +            if (fnmatch(pattern, fname, fnmode|ic) == 0) {
> >                 if (ff->flags & FO_EXCLUDE) {
> >
> > -----Original Message-----
> > From: Kern Sibbald [mailto:[EMAIL PROTECTED]
> > Sent: Sunday, April 16, 2006 1:18 AM
> > To: Robert Nelson
> > Cc: 'Martin Simmons'; [EMAIL PROTECTED];
> > bacula-users@lists.sourceforge.net
> > Subject: Re: [Bacula-devel] Surprise bug + Scratch pool algorithm
> >
> > On Sunday 16 April 2006 00:21, Robert Nelson wrote:
> > > Couldn't you handle both cases transparently.  If the pattern has a
> > > "/" in it then pass the full name, otherwise just pass the basename
> > > to
> >
> > fnmatch().
> >
> > > That way you get both behaviours without breaking existing examples
> > > and configs.
> > >
> > > Ironically the Windows example FileSet in the manual expects the
> > > above behaviour since it has both
> > >
> > >   WildFile = "[A-Z]:/WINNT/system32/dhcp/tmp.edb"
> > > And
> > >   WildFile = "*.tmp"
> >
> > That is an interesting idea, but probably not something I would do,
> > because it makes matching more complicated by altering the input data
> > (filenames) depending on the pattern.
> >
> > Tar has a similar feature, and I doubt that many on this list know
> > about it or that anyone on this list can explain exactly how it works.
> >
> > Since wild-cards are terribly incomplete, the solution to the
> > limitations users will have with wild-cards is to use Bacula's regular
> > expressions, which are now implemented (experimentally) in Win32 in
> > version 1.38.8.  The only problem with the Win32 regex is that it is
> > untested and it does not have an "ignore case", which I will probably add
>
> in a future version.
>
> > > -----Original Message-----
> > > From: [EMAIL PROTECTED]
> > > [mailto:[EMAIL PROTECTED] On Behalf Of Kern
> > > Sibbald
> > > Sent: Monday, April 10, 2006 5:09 AM
> > > To: Martin Simmons
> > > Cc: [EMAIL PROTECTED];
> > > bacula-users@lists.sourceforge.net
> > > Subject: Re: [Bacula-devel] Surprise bug + Scratch pool algorithm
> > >
> > > On Monday 10 April 2006 13:15, Martin Simmons wrote:
> > > > >>>>> On Mon, 10 Apr 2006 12:22:59 +0200, Kern Sibbald
> > > > >>>>> <[EMAIL PROTECTED]>
> > > > >>>>> said:
> > > > >
> > > > > Hello,
> > > > >
> > > > > It seems that it is becoming more frequent (probably because of
> > > > > the increasing number of Bacula users) that users submit support
> > > > > questions to the bugs database.  This morning a user submitted a
> > > > > bug stating that the WildFile option was broken. Normally, I
> > > > > would have dismissed this as a support problem because most of
> > > > > us realize that wild-cards and regexes are awfully tricky.
> > > > >
> > > > > However, this user presented a *really* simple case with debug
> > > > > output, so I took a look at it, and surprise both WildFile and
> > > > > RegexFile are broken because they match against the full path
> > > > > and filename rather than just the filename.
> > > > >
> > > > > I wonder how many users have torn out their hair trying to
> > > > > figure out why WildFile or RegexFile didn't work :-(
> > > >
> > > > Are you really sure that is a bug?  I think the word "filename" in
> > > > the documentation is ambiguous, but when it says "No directories
> > > > will be matched by this directive" it does not mean that the
> > > > matching is performed only on the basename part.
> > > >
> > > > The examples in "A Windows Example FileSet" are also written to
> > > > assume that WildFile compares the whole name.
> > > >
> > > > The current behaviour is very useful because it allows files in
> > > > selected directories to be matched, without accidentally matching
> > > > subdirectories (as Wild will do).
> > >
> > > After a little more thought about this, I'm not so sure I should
> > > change the behavior. It is not what I had originally intended (I
> > > didn't program it), but to change it now, given all the examples in
> > > the doc would create a number of problems.
> > >
> > > I think the best solution is to ensure that the documentation is
> > > extremely clear, then if there is really a demand, implement a new
> > > option such as WildFilename that matches against only the filename
> >
> > (basename).
> >
> > > --
> > > Best regards,
> > >
> > > Kern
> > >
> > >   (">
> > >   /\
> > >   V_V
> > >
> > >
> > > -------------------------------------------------------
> > > This SF.Net email is sponsored by xPML, a groundbreaking scripting
> > > language that extends applications into web and mobile media. Attend
> > > the live webcast and join the prime developer group breaking into
> > > this new coding territory!
> > > http://sel.as-us.falkag.net/sel?cmd=lnk&kid=110944&bid=241720&dat=12
> > > 16
> > > 42 _______________________________________________
> > > Bacula-devel mailing list
> > > [EMAIL PROTECTED]
> > > https://lists.sourceforge.net/lists/listinfo/bacula-devel
> >
> > --
> > Best regards,
> >
> > Kern
> >
> >   (">
> >   /\
> >   V_V
>
> --
> Best regards,
>
> Kern
>
>   (">
>   /\
>   V_V
>
>
> -------------------------------------------------------
> This SF.Net email is sponsored by xPML, a groundbreaking scripting language
> that extends applications into web and mobile media. Attend the live
> webcast and join the prime developer group breaking into this new coding
> territory!
> http://sel.as-us.falkag.net/sel?cmd=lnk&kid=110944&bid=241720&dat=121642
> _______________________________________________
> Bacula-devel mailing list
> [EMAIL PROTECTED]
> https://lists.sourceforge.net/lists/listinfo/bacula-devel

-- 
Best regards,

Kern

  (">
  /\
  V_V


-------------------------------------------------------
This SF.Net email is sponsored by xPML, a groundbreaking scripting language
that extends applications into web and mobile media. Attend the live webcast
and join the prime developer group breaking into this new coding territory!
http://sel.as-us.falkag.net/sel?cmd=lnk&kid=110944&bid=241720&dat=121642
_______________________________________________
Bacula-users mailing list
Bacula-users@lists.sourceforge.net
https://lists.sourceforge.net/lists/listinfo/bacula-users

Reply via email to