On Thu, 2010-05-06 at 16:29 +0200, Frederik Wagner wrote: > Lens shellvars_list has been added to treat variables in specific files > as lists of words, e.g. in /etc/sysconfig/ 'kernel' and 'bootloader'.
Very nice ... I am impressed you got this to work. I have a few small comments: > diff --git a/lenses/shellvars_list.aug b/lenses/shellvars_list.aug > new file mode 100644 > index 0000000..25cbfc2 > --- /dev/null > +++ b/lenses/shellvars_list.aug > @@ -0,0 +1,54 @@ > +(* Generic lens for shell-script config files like the ones found *) > +(* in /etc/sysconfig, where a string needs to be split into *) > +(* single words. *) > +module Shellvars_list = > + autoload xfm > + > + let eol = Util.eol > + > + let key_re = /[A-Za-z0-9_]+/ > + let eq = Util.del_str "=" > + let comment = Util.comment > + let empty = Util.empty > + let indent = Util.indent > + > + let sqchar = /[^ '\t\n]/ > + let dqchar = /[^ "\t\n]/ > + let char = /[^ "'\t\n]/ > + > + (* lists values of the form ... val1 val2 val3 ... *) > + let list(ch:regexp) = > + let list_value = store ch+ in > + indent . counter "values" . > + [ seq "values" . list_value ] . > + [ del /[ \t\n]+/ " " . seq "values" . list_value ]* . indent I would prefer if you don't use 'seq' here - the tree is a little easier to handle if you just stick with a fixed label, like 'value' or some such. I've attached a patch on top of yours that makes the change I have in mind - if you are ok with that, I'll commit both patches. David
>From f6462ceafd3cc518fc4c0ed91fc34726e23355fe Mon Sep 17 00:00:00 2001 From: David Lutterkort <[email protected]> Date: Fri, 7 May 2010 15:54:24 -0700 Subject: [PATCH] Shellvars_list: switch from seq to fixed label for 'value' --- lenses/shellvars_list.aug | 8 ++-- lenses/tests/test_shellvars_list.aug | 75 ++++++++++++++------------------- 2 files changed, 36 insertions(+), 47 deletions(-) diff --git a/lenses/shellvars_list.aug b/lenses/shellvars_list.aug index acb01ac..a0b023d 100644 --- a/lenses/shellvars_list.aug +++ b/lenses/shellvars_list.aug @@ -19,9 +19,9 @@ module Shellvars_list = (* lists values of the form ... val1 val2 val3 ... *) let list(ch:regexp) = let list_value = store ch+ in - indent . counter "values" . - [ seq "values" . list_value ] . - [ del /[ \t\n]+/ " " . seq "values" . list_value ]* . indent + indent . + [ label "value" . list_value ] . + [ del /[ \t\n]+/ " " . label "value" . list_value ]* . indent (* handle single quoted lists *) @@ -31,7 +31,7 @@ module Shellvars_list = let dquote_arr = [ label "quote" . store /"/ ] . (list dqchar)? . del /"/ "\"" (* handle unquoted single value *) - let unquot_val = [ label "quote" . store "" ] . counter "vals" . [seq "vals" . store char+]? + let unquot_val = [ label "quote" . store "" ] . [label "value" . store char+]? (* lens for key value pairs *) diff --git a/lenses/tests/test_shellvars_list.aug b/lenses/tests/test_shellvars_list.aug index dd48b09..612ab47 100644 --- a/lenses/tests/test_shellvars_list.aug +++ b/lenses/tests/test_shellvars_list.aug @@ -10,50 +10,45 @@ LOADER_TYPE=\"grub\" " test Shellvars_list.lns get list_vals = - { "#comment" = "Some comment" } - { "MODULES_LOADED_ON_BOOT" - { "quote" = "\"" } - { "1" = "ipv6" } - { "2" = "sunrpc" } - } - { } - { "DEFAULT_APPEND" - { "quote" = "\"" } - { "1" = "showopts" } - { "2" = "noresume" } - { "3" = "console=tty0" } - { "4" = "console=ttyS0,115200n8" } - { "5" = "ro" } - } - { } - { "LOADER_TYPE" - { "quote" = "\"" } - { "1" = "grub" } - } - + { "#comment" = "Some comment" } + { "MODULES_LOADED_ON_BOOT" + { "quote" = "\"" } + { "value" = "ipv6" } + { "value" = "sunrpc" } } + { } + { "DEFAULT_APPEND" + { "quote" = "\"" } + { "value" = "showopts" } + { "value" = "noresume" } + { "value" = "console=tty0" } + { "value" = "console=ttyS0,115200n8" } + { "value" = "ro" } } + { } + { "LOADER_TYPE" + { "quote" = "\"" } + { "value" = "grub" } } (* append a value *) test Shellvars_list.lns put "VAR=\"test1\t \ntest2\"\n" after - set "VAR/01" "test3" + set "VAR/value[last()+1]" "test3" = "VAR=\"test1\t \ntest2 test3\"\n" (* in double quoted lists, single quotes are allowed *) test Shellvars_list.lns get "VAR=\"test'1 test2\"\n" = { "VAR" { "quote" = "\"" } - { "1" = "test'1" } - { "2" = "test2" } - } + { "value" = "test'1" } + { "value" = "test2" } } (* add new value, delete one and append something *) (* !!! order of adding 'quote' key and values seeems to be relevant!!! *) (* ---> first the quote *) test Shellvars_list.lns put list_vals after set "FAILSAVE_APPEND/quote" "\"" ; - set "FAILSAVE_APPEND/01" "console=ttyS0" ; + set "FAILSAVE_APPEND/value[last()+1]" "console=ttyS0" ; rm "LOADER_TYPE" ; - rm "MODULES_LOADED_ON_BOOT/1" ; - set "DEFAULT_APPEND/01" "teststring" + rm "MODULES_LOADED_ON_BOOT/value[1]" ; + set "DEFAULT_APPEND/value[last()+1]" "teststring" = "# Some comment MODULES_LOADED_ON_BOOT=\"sunrpc\" @@ -65,7 +60,7 @@ FAILSAVE_APPEND=\"console=ttyS0\" (* test of single quotes (leading/trailing whitespaces are kept *) (* leading/trailing) *) test Shellvars_list.lns put "VAR=' \t test1\t \ntest2 '\n" after - set "VAR/01" "test3" + set "VAR/value[last()+1]" "test3" = "VAR=' \t test1\t \ntest2 test3 '\n" (* change quotes (leading/trailing whitespaces are lost *) @@ -77,44 +72,38 @@ FAILSAVE_APPEND=\"console=ttyS0\" test Shellvars_list.lns get "VAR='test\"1 test2'\n" = { "VAR" { "quote" = "'" } - { "1" = "test\"1" } - { "2" = "test2" } - } + { "value" = "test\"1" } + { "value" = "test2" } } (* emtpy list with quotes *) test Shellvars_list.lns get "VAR=''\n" = - { "VAR" - { "quote" = "'" } - } + { "VAR" { "quote" = "'" } } (* unquoted value *) test Shellvars_list.lns get "VAR=test\n" = { "VAR" { "quote" = "" } - { "1" = "test" } - } + { "value" = "test" } } (* append to unquoted value *) test Shellvars_list.lns put "VAR=test1\n" after set "VAR/quote" "\""; - set "VAR/01" "test2" + set "VAR/value[last()+1]" "test2" = "VAR=\"test1 test2\"\n" (* empty entry *) test Shellvars_list.lns get "VAR=\n" = - { "VAR" - { "quote" = "" } - } + { "VAR" { "quote" = "" } } (* set value w/o quotes to empty value... *) test Shellvars_list.lns put "VAR=\n" after - set "VAR/01" "test" + set "VAR/value[last()+1]" "test" = "VAR=test\n" (* ... or no value *) test Shellvars_list.lns put "" after set "VAR/quote" ""; - set "VAR/1" "test" + set "VAR/value" "test" = "VAR=test\n" (* Local Variables: *) -- 1.6.6.1
_______________________________________________ augeas-devel mailing list [email protected] https://www.redhat.com/mailman/listinfo/augeas-devel
