[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