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

Reply via email to