[augeas-devel] Wildcarded key/value pairs and nested blocks (dovecot lens development)

Serge Smetana serge.smetana at gmail.com
Tue Mar 5 18:28:17 UTC 2013


Hello,

I'm trying to create lens for Dovecot config.
I'm already have working lens here:
https://github.com/smetana/augeas/commit/0cbd6b88e0f1bf2e281fa3ea16803abbf8b3d770

But it is too "tight" because of the fixed list of keywords for the entries.
Dovecot supports blocks and nested blocks like

service auth {
  unix_listener auth-userdb {
     ...
  }
}

and if I create wildcarded lens for simple entry

   let entry = [ indent . key Rx.word. eq . (store value)? . eol ]

I am unable to create lens for the block

   let block_names = ("protocol" | "service" | "plugin" | "namespace" | "map" )
   let block =
       [ indent . key block_names . block_args? . block_open . eol
       . (entry | empty | comment)*
       . indent . block_close . eol ]

I end up with exception: overlapping lenses in tree union.put
    Example matched by both:  { "protocol" }

Is there any way to define possible keys as something like a
subsctraction (Rx.word - block_names)
meaning "match anything but not /protocol|service|map/"?

Thank you!
Great job!

Serge




More information about the augeas-devel mailing list