[augeas-devel] [PATCH] Add mke2fs.aug and associated test
Raphael Pinson
raphink at gmail.com
Mon Nov 1 12:58:15 UTC 2010
This patch adds a lens for /etc/mke2fs.conf.
---
lenses/mke2fs.aug | 140 ++++++++++++++++++++++++++++++++++++++++++
lenses/tests/test_mke2fs.aug | 76 +++++++++++++++++++++++
2 files changed, 216 insertions(+), 0 deletions(-)
create mode 100644 lenses/mke2fs.aug
create mode 100644 lenses/tests/test_mke2fs.aug
diff --git a/lenses/mke2fs.aug b/lenses/mke2fs.aug
new file mode 100644
index 0000000..6d1bdc6
--- /dev/null
+++ b/lenses/mke2fs.aug
@@ -0,0 +1,140 @@
+(*
+Module: Mke2fs
+ Parses /etc/mke2fs.conf
+
+Author: Raphael Pinson <raphink at gmail.com>
+
+About: Reference
+ This lens tries to keep as close as possible to `man 5 mke2fs.conf` where possible.
+
+About: License
+ This file is licenced under the LGPLv2+, like the rest of Augeas.
+
+About: Lens Usage
+ To be documented
+
+About: Configuration files
+ This lens applies to /etc/mke2fs.conf. See <filter>.
+*)
+
+
+module Mke2fs =
+ autoload xfm
+
+(************************************************************************
+ * Group: USEFUL PRIMITIVES
+ *************************************************************************)
+
+(* View: comment *)
+let comment = IniFile.comment IniFile.comment_re IniFile.comment_default
+
+(* View: sep *)
+let sep = IniFile.sep /=[ \t]*/ "="
+
+(* View: empty *)
+let empty = IniFile.empty
+
+
+(************************************************************************
+ * Group: RECORD TYPES
+ *************************************************************************)
+
+
+(* View: entry
+ A generic entry for lens lns *)
+let entry (kw:regexp) (lns:lens) = Build.key_value_line kw sep lns
+
+
+(* View: list_sto
+ A list of values with given lens *)
+let list_sto (kw:regexp) (lns:lens) = counter "item" .
+ entry kw
+ (Build.opt_list
+ [lns]
+ Sep.comma)
+
+(* View: entry_sto
+ Store a regexp as entry value *)
+let entry_sto (kw:regexp) (val:regexp) = entry kw (store val)
+
+
+(************************************************************************
+ * Group: COMMON ENTRIES
+ *************************************************************************)
+(* View: common_entry
+ Entries shared between <defaults> and <fs_types> sections *)
+let common_entry = list_sto ("base_features"|"default_features")
+ (key Rx.word)
+ | entry_sto "blocksize" ("-"? . Rx.integer)
+ | entry_sto "hash_alg" ("legacy"|"half_md4"|"tea")
+ | entry_sto ("inode_ratio"|"inode_size") Rx.integer
+
+(************************************************************************
+ * Group: DEFAULTS SECTION
+ *************************************************************************)
+
+(* View: defaults_entry
+ Possible entries under the <defaults> section *)
+let defaults_entry = entry_sto "force_undo" ("true"|"false")
+ | entry_sto "fs_type" Rx.word
+ | entry_sto "undo_dir" Rx.fspath
+
+(* View: defaults_title
+ Title for the <defaults> section *)
+let defaults_title = IniFile.title "defaults"
+
+(* View: defaults
+ A defaults section *)
+let defaults = IniFile.record defaults_title
+ ((Util.indent . (defaults_entry|common_entry)) | comment)
+
+
+(************************************************************************
+ * Group: FS_TYPES SECTION
+ *************************************************************************)
+
+(* View: fs_types_entry
+ Possible entries under a <fs_types_record> group *)
+let fs_types_entry =list_sto "features"
+ ([del /\^/ "^" . label "disable"]?
+ . key Rx.word)
+ | list_sto "options"
+ (key Rx.word . Util.del_str "="
+ . store Rx.word)
+ | entry_sto "lazy_itable_init" ("true"|"false")
+ | entry_sto "flex_bg_size" Rx.integer
+
+(* View: fs_types_record
+ Fs group records under the <fs_types> section *)
+let fs_types_record = [ label "filesystem"
+ . Util.indent . store Rx.word
+ . del /[ \t]*=[ \t]*\{[ \t]*\n/ " = {\n"
+ . ((Util.indent . (fs_types_entry|common_entry)) | empty | comment)*
+ . del /[ \t]*\}[ \t]*\n/ " }\n" ]
+
+(* View: fs_types_title
+ Title for the <fs_types> section *)
+let fs_types_title = IniFile.title "fs_types"
+
+(* View: fs_types
+ A fs_types section *)
+let fs_types = IniFile.record fs_types_title
+ (fs_types_record | comment)
+
+
+(************************************************************************
+ * Group: LENS AND FILTER
+ *************************************************************************)
+
+(* View: lns
+ The mke2fs lens
+*)
+let lns = (empty|comment)* . (defaults|fs_types)*
+
+(* Variable: filter *)
+let filter = incl "/etc/mke2fs.conf"
+ . Util.stdexcl
+
+let xfm = transform lns filter
+
+
diff --git a/lenses/tests/test_mke2fs.aug b/lenses/tests/test_mke2fs.aug
new file mode 100644
index 0000000..39ac9e2
--- /dev/null
+++ b/lenses/tests/test_mke2fs.aug
@@ -0,0 +1,76 @@
+(* Test for keepalived lens *)
+
+module Test_mke2fs =
+
+ let conf = "# This is a comment
+; and another comment
+
+[defaults]
+ base_features = sparse_super,filetype,resize_inode,dir_index,ext_attr
+ blocksize = 4096
+ inode_size = 256
+ ; here goes inode_ratio
+ inode_ratio = 16384
+
+[fs_types]
+ ; here we have fs_types
+ ext4dev = {
+ # this is ext4dev conf
+
+ features = has_journal,^extent
+ inode_size = 256
+ options = test_fs=1
+ }
+ small = {
+ blocksize = 1024
+ inode_size = 128
+ inode_ratio = 4096
+ }
+ largefile = {
+ inode_ratio = 1048576
+ blocksize = -1
+ }
+"
+
+ test Mke2fs.lns get conf =
+ { "#comment" = "This is a comment" }
+ { "#comment" = "and another comment" }
+ {}
+ { "defaults"
+ { "base_features"
+ { "sparse_super" }
+ { "filetype" }
+ { "resize_inode" }
+ { "dir_index" }
+ { "ext_attr" } }
+ { "blocksize" = "4096" }
+ { "inode_size" = "256" }
+ { "#comment" = "here goes inode_ratio" }
+ { "inode_ratio" = "16384" }
+ {} }
+ { "fs_types"
+ { "#comment" = "here we have fs_types" }
+ { "filesystem" = "ext4dev"
+ { "#comment" = "this is ext4dev conf" }
+ {}
+ { "features"
+ { "has_journal" }
+ { "extent"
+ { "disable" } } }
+ { "inode_size" = "256" }
+ { "options"
+ { "test_fs" = "1" } } }
+ { "filesystem" = "small"
+ { "blocksize" = "1024" }
+ { "inode_size" = "128" }
+ { "inode_ratio" = "4096" } }
+ { "filesystem" = "largefile"
+ { "inode_ratio" = "1048576" }
+ { "blocksize" = "-1" } } }
+
+
+test Mke2fs.fs_types_entry
+ put "features = has_journal,^extent\n"
+ after set "/features/has_journal/disable" "";
+ rm "/features/extent/disable" = "features = ^has_journal,extent\n"
+
--
1.7.0.4
More information about the augeas-devel
mailing list