On Monday 17 April 2006 17:41, Robert Nelson wrote:
> How very strange, I originally had FNM_PATHNAME in the email and then did a
> grep to see which of the two names were used in the source.  However
> sometime between doing the grep and editting the email I swapped the two in
> my head.  The source refers to FNM_PATHNAME not FNM_FILE_NAME.  But it is
> kind of academic anyways since the routine that uses it is match_files()
> and it is only called by a couple of test tools.
>
> Ok, I'll put together a proposal, and submit it to the dev alias.

OK.  Perhaps WildFileOnly would be a good directive name.

>
> -----Original Message-----
> From: Kern Sibbald [mailto:[EMAIL PROTECTED]
> Sent: Monday, April 17, 2006 8:03 AM
> To: Robert Nelson
> Cc: 'Martin Simmons'; [EMAIL PROTECTED];
> bacula-users@lists.sourceforge.net
> Subject: Re: [Bacula-devel] fnmatch
>
> On Monday 17 April 2006 16:12, Robert Nelson wrote:
> > It seems from this discussion the manual needs changing anyways.
> >
> > FNM_FILE_NAME is GNU specific, posix uses FNM_PATHNAME, behaviour is
> > the same.  I just used FNM_FILE_NAME because that is what you already
> > use in some places in the source.  So I don't believe there is any
> > portability issue, particularly since you have a copy of that routine
> > in the source and aren't using the platform version anyhow.
>
> As far as I know, FNM_FILE_NAME is not used in Bacula source.  It is indeed
> in fnmatch.h and fnmatch.c, but neither of those routines are used by any
> Bacula code unless fnmatch doesn't exist in the host machine libraries,
> which to the best of my knowledge is never the case.  If Bacula code were
> to use FNM_FILE_NAME, in the source, there would be some platform (e.g.
> Solaris) where the compile would fail.
>
> > I offered to put this and the other changes I've suggested under an
> > option like EnhancedWild or AlternateWild, but it doesn't seem you are
> > open to any suggestions so I'll just fix my version and not bother you
> > with any more suggestions.
>
> I missed the above suggestion.  I am not and have noot been opposed to
> someone adding an additional directive, though, I think the exact name
> should be openly discussed on the list ...
>
> > -----Original Message-----
> > From: [EMAIL PROTECTED]
> > [mailto:[EMAIL PROTECTED] On Behalf Of Kern
>
> Sibbald
>
> > Sent: Monday, April 17, 2006 5:41 AM
> > To: Robert Nelson
> > Cc: 'Martin Simmons'; [EMAIL PROTECTED];
> > bacula-users@lists.sourceforge.net
> > Subject: [Bacula-devel] fnmatch
> >
> > 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=1216
> > > 42 _______________________________________________
> > > 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-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