[augeas-devel] [PATCH] Typecheck del lens

David Lutterkort lutter at redhat.com
Wed Aug 27 00:07:19 UTC 2008


10 files changed, 27 insertions(+), 13 deletions(-)
lenses/aptpreferences.aug |    2 +-
lenses/aptsources.aug     |    2 +-
lenses/bbhosts.aug        |    2 +-
lenses/grub.aug           |    2 +-
lenses/hosts.aug          |    2 +-
lenses/logrotate.aug      |    2 +-
lenses/ntp.aug            |    2 +-
lenses/sudoers.aug        |   10 +++++-----
lenses/util.aug           |    2 +-
src/lens.c                |   14 ++++++++++++++


# HG changeset patch
# User David Lutterkort <dlutter at redhat.com>
# Date 1219795558 25200
# Node ID cd91fcc93b33ccc7459336a0cc96a7795e6f6be8
# Parent  019334b992371214e053175909590ee7893fa5c3
Typecheck del lens

The builtin lens 'del RE STR' was missing a typecheck: the default string
STR must match the regular expression RE, otherwise we might produce text
that we cant parse back in.

This patch fixes that, adds a test that the check is performed, and fixes
all the places in existing lenses where a use of 'del' failed the
typecheck.

diff -r 019334b99237 -r cd91fcc93b33 lenses/aptpreferences.aug
--- a/lenses/aptpreferences.aug	Mon Aug 18 11:37:26 2008 -0400
+++ b/lenses/aptpreferences.aug	Tue Aug 26 17:05:58 2008 -0700
@@ -14,7 +14,7 @@
    let spc   = Util.del_ws_spc
 
    (* Define empty *)
-   let empty = [ del /[ \t]*\n/ "" ]
+   let empty = [ del /[ \t]*\n/ "\n" ]
 
    (* Define record *)
 
diff -r 019334b99237 -r cd91fcc93b33 lenses/aptsources.aug
--- a/lenses/aptsources.aug	Mon Aug 18 11:37:26 2008 -0400
+++ b/lenses/aptsources.aug	Tue Aug 26 17:05:58 2008 -0700
@@ -7,7 +7,7 @@
 
   let eol = Util.del_str "\n"
 
-  let comment = [ del /([ \t]*\n)|(#.*\n)/ "# " ]
+  let comment = [ del /([ \t]*\n)|(#.*\n)/ "#\n" ]
 
   let word = /[^# \n\t]+/
 
diff -r 019334b99237 -r cd91fcc93b33 lenses/bbhosts.aug
--- a/lenses/bbhosts.aug	Mon Aug 18 11:37:26 2008 -0400
+++ b/lenses/bbhosts.aug	Tue Aug 26 17:05:58 2008 -0700
@@ -21,7 +21,7 @@
 
     (* Define comments and empty lines *)
     let comment = [ label "comment" . del /#[ \t]*/ "# " .  store /([^ \t\n][^\n]*)?/ . eol_no_spc ]
-    let empty   = [ del /[ \t]*\n/ "" ]
+    let empty   = [ del /[ \t]*\n/ "\n" ]
 
 
     (* Define host *)
diff -r 019334b99237 -r cd91fcc93b33 lenses/grub.aug
--- a/lenses/grub.aug	Mon Aug 18 11:37:26 2008 -0400
+++ b/lenses/grub.aug	Tue Aug 26 17:05:58 2008 -0700
@@ -40,7 +40,7 @@
 
     let boot = [ label "title" . title . boot_setting* ]
 
-    let comment = [ del /(#.*|[ \t]*)\n/ "# " ]
+    let comment = [ del /(#.*|[ \t]*)\n/ "#\n" ]
 
     let lns = (comment | menu_setting | boot)*
     let xfm = transform lns (incl "/etc/grub.conf")
diff -r 019334b99237 -r cd91fcc93b33 lenses/hosts.aug
--- a/lenses/hosts.aug	Mon Aug 18 11:37:26 2008 -0400
+++ b/lenses/hosts.aug	Tue Aug 26 17:05:58 2008 -0700
@@ -10,7 +10,7 @@
   let indent = del /[ \t]*/ ""
 
   let comment = [ indent . label "comment" . del /#[ \t]*/ "# " . store /([^ \t\n].*[^ \t\n]|[^ \t\n])/ . eol ]
-  let empty   = [ del /[ \t]*#?[ \t]*\n/ "" ]
+  let empty   = [ del /[ \t]*#?[ \t]*\n/ "\n" ]
 
   let word = /[^# \n\t]+/
   let record = [ seq "host" . indent .
diff -r 019334b99237 -r cd91fcc93b33 lenses/logrotate.aug
--- a/lenses/logrotate.aug	Mon Aug 18 11:37:26 2008 -0400
+++ b/lenses/logrotate.aug	Tue Aug 26 17:05:58 2008 -0700
@@ -20,7 +20,7 @@
 
    (* define comments and empty lines *)
    let comment (indent:string) = [ label "comment" . del /[ \t]*/ indent . del /#[ \t]*/ "# " .  store /([^ \t\n][^\n]*)?/ . eol ]
-   let empty   = [ del /[ \t]*\n/ "" ]
+   let empty   = [ del /[ \t]*\n/ "\n" ]
 
 
    (* Useful functions *)
diff -r 019334b99237 -r cd91fcc93b33 lenses/ntp.aug
--- a/lenses/ntp.aug	Mon Aug 18 11:37:26 2008 -0400
+++ b/lenses/ntp.aug	Tue Aug 26 17:05:58 2008 -0700
@@ -17,7 +17,7 @@
 
     (* define comments and empty lines *)
     let comment = [ label "comment" . del /#[ \t]*/ "#" .  store /([^ \t\n][^\n]*)?/ . eol ]
-    let empty   = [ del /[ \t]*\n/ "" ]
+    let empty   = [ del /[ \t]*\n/ "\n" ]
 
 
     (* Define generic record *)
diff -r 019334b99237 -r cd91fcc93b33 lenses/sudoers.aug
--- a/lenses/sudoers.aug	Mon Aug 18 11:37:26 2008 -0400
+++ b/lenses/sudoers.aug	Tue Aug 26 17:05:58 2008 -0700
@@ -27,7 +27,7 @@
  *************************************************************************)
 
 let eol       = del /[ \t]*\n/ "\n"
-let indent    = del /[ \t]+/ ""
+let indent    = del /[ \t]*/ ""
 
 (* Define separators *)
 let sep_spc  = del /[ \t]+/ " " 
@@ -53,7 +53,7 @@
   let sto_to_eol = store /([^ \t\n].*[^ \t\n]|[^ \t\n])/ in
   [ label "comment" . del /[ \t]*#[ \t]*/ "# " . sto_to_eol . eol ]
  
-let empty   = [ del /[ \t]*#?[ \t]*\n/ "" ]
+let empty   = [ del /[ \t]*#?[ \t]*\n/ "\n" ]
 
 (************************************************************************
  *                                     ALIASES
@@ -85,7 +85,7 @@
  *  Alias_Type NAME = item1, item2, item3 : NAME = item4, item5
  *************************************************************************)
 let alias_entry (kw:string) (field:string) (sto:lens)
-    = [ indent? . key kw . sep_cont . alias_entry_single field sto
+    = [ indent . key kw . sep_cont . alias_entry_single field sto
           . ( sep_col . alias_entry_single field sto )* . eol ]
 
 (* TODO: go further in user definitions *)
@@ -138,7 +138,7 @@
 (************************************************************************
  *  Default_Entry ::= Default_Type Parameter_List
  *************************************************************************)
-let defaults = [ indent? . key "Defaults" . default_type? . sep_cont 
+let defaults = [ indent . key "Defaults" . default_type? . sep_cont 
                    . parameter_list . eol ]
 
 
@@ -180,7 +180,7 @@
 let spec_list = [ label "host_group" . alias_list "host" sto_to_com 
                     . sep_eq . cmnd_spec_list ]
 
-let spec = [ label "spec" . indent?
+let spec = [ label "spec" . indent
                . alias_list "user" sto_to_com_user . sep_cont
                . spec_list
     	       . ( sep_col . spec_list )* . eol ]
diff -r 019334b99237 -r cd91fcc93b33 lenses/util.aug
--- a/lenses/util.aug	Mon Aug 18 11:37:26 2008 -0400
+++ b/lenses/util.aug	Tue Aug 26 17:05:58 2008 -0700
@@ -21,7 +21,7 @@
     [ indent . label "#comment" . del /#[ \t]*/ "# " 
         . store /([^ \t\n].*[^ \t\n]|[^ \t\n])/ . eol ]
 
-  let empty   = [ del /[ \t]*#?[ \t]*\n/ "" ]
+  let empty   = [ del /[ \t]*#?[ \t]*\n/ "\n" ]
 
   (* Split (SEP . ELT)* into an array-like tree where each match for ELT *)
   (* appears in a separate subtree. The labels for the subtrees are      *)
diff -r 019334b99237 -r cd91fcc93b33 src/lens.c
--- a/src/lens.c	Mon Aug 18 11:37:26 2008 -0400
+++ b/src/lens.c	Tue Aug 26 17:05:58 2008 -0700
@@ -274,6 +274,20 @@
             exn = make_exn_value(info,
                                  "The label string \"%s\" contains a '/'",
                                  string->str);
+            goto error;
+        }
+    } else if (tag == L_DEL) {
+        int cnt;
+        const char *dflt = string->str;
+        cnt = regexp_match(regexp, dflt, strlen(dflt), 0, NULL);
+        if (cnt != strlen(dflt)) {
+            char *s = escape(dflt, -1);
+            char *r = escape(regexp->pattern->str, -1);
+            exn = make_exn_value(info,
+                   "del: the default value '%s' does not match /%s/",
+                   s, r);
+            FREE(s);
+            FREE(r);
             goto error;
         }
     }




More information about the augeas-devel mailing list