[augeas-devel] shellvars - regex parsing help

David Lutterkort lutter at redhat.com
Mon Jan 18 22:01:09 UTC 2010


On Mon, 2010-01-18 at 16:39 -0500, Adam Stokes wrote:
> ----- "David Lutterkort" <lutter at redhat.com> wrote:
> 
> > On Thu, 2010-01-14 at 12:03 -0500, Adam Stokes wrote:
> 
> > 
> > The expression after the '-' is not right: you have
> >         /([ \t]key_re . [ \t]*=[ \t]*.*[ \t\n])/
> > 
> > That's one literal regexp; you're missing a bunch of '/' to end/start
> > regular expression literals.
> > 
> > I think what you mean is
> >         /[ \t]*/ . key_re . /[ \t]*=[ \t]*.*/
> >         
> > David
> 
> Once setting this as above augparse takes about 5 minutes longer to
> run through the test module:

Ugh .. yeah. The culprit is that key_re is defined as 

  let key_re = /[A-Za-z0-9_]+(\[[0-9]+\])?/ - "unset" - "export"

subtracting that out of line_re produces a heinously big regexp. If you
ignore unset and export, and only subtract out the first part of key_re:

let comment =
      let simple_key = /[A-Za-z0-9_]+(\[[0-9]+\])?/ in
      let line_re = /([^ \t\n].*[^ \t\n]|[^ \t\n])/ - /[ \t]*/ . simple_key . /[ \t]*=[ \t]*.*/ in
      [ label "#comment" . del /#[ \t]*/ "# " . store line_re . del /\n/ "\n" ]

the test fails much faster ;)

> [root at jak dist]# augparse t.aug 
> t.aug:5.4-6.28:exception thrown in test
> t.aug:5.9-.47:exception: Iterated lens matched less than it should
>     Lens: /usr/share/augeas/lenses/dist/shellvars.aug:48.12-.53:
>     Error encountered at 1:0 (0 characters into string)
>                                <|=|# TESTINGVAR=VAL\n>         

That (and the next error) just shows that you've successfully removed
such a line from being a comment; you still need to add logic to kv to
parse such a line and create a 'commented' subnode, similar to how you
did that for the NFS lens.

David





More information about the augeas-devel mailing list