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 <[email protected]> + +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 _______________________________________________ augeas-devel mailing list [email protected] https://www.redhat.com/mailman/listinfo/augeas-devel
