Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Few improvements to the Mke2fs lens #642

Merged
merged 4 commits into from
Aug 20, 2019
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
87 changes: 66 additions & 21 deletions lenses/mke2fs.aug
Original file line number Diff line number Diff line change
Expand Up @@ -34,6 +34,11 @@ let sep = IniFile.sep /=[ \t]*/ "="
(* View: empty *)
let empty = IniFile.empty

(* View: boolean
The configuration parser of e2fsprogs recognizes different values
for booleans, so list all the recognized values *)
let boolean = ("y"|"yes"|"true"|"t"|"1"|"on"|"n"|"no"|"false"|"nil"|"0"|"off")


(************************************************************************
* Group: RECORD TYPES
Expand Down Expand Up @@ -61,25 +66,55 @@ let entry_sto (kw:regexp) (val:regexp) = entry kw (store val)
(************************************************************************
* Group: COMMON ENTRIES
*************************************************************************)

(* View: common_entries_list
Entries with a list value *)
let common_entries_list = ("base_features"|"default_features"|"default_mntopts")

(* View: common_entries_int
Entries with an integer value *)
let common_entries_int = ("cluster_size"|"flex_bg_size"|"force_undo"
|"inode_ratio"|"inode_size"|"num_backup_sb")

(* View: common_entries_bool
Entries with a boolean value *)
let common_entries_bool = ("auto_64-bit_support"|"discard"
|"enable_periodic_fsck"|"lazy_itable_init"
|"lazy_journal_init"|"packed_meta_blocks")

(* View: common_entries_string
Entries with a string value *)
let common_entries_string = ("encoding"|"journal_location")

(* View: common_entries_double
Entries with a double value *)
let common_entries_double = ("reserved_ratio")

(* View: common_entry
Entries shared between <defaults> and <fs_types> sections *)
let common_entry = list_sto ("base_features"|"default_features")
(key Rx.word)
let common_entry = list_sto common_entries_list (key Rx.word)
| entry_sto common_entries_int Rx.integer
| entry_sto common_entries_bool boolean
| entry_sto common_entries_string Rx.word
| entry_sto common_entries_double Rx.decimal
| entry_sto "blocksize" ("-"? . Rx.integer)
| entry_sto "hash_alg" ("legacy"|"half_md4"|"tea")
| entry_sto ("inode_ratio"|"inode_size") Rx.integer
| entry_sto "errors" ("continue"|"remount-ro"|"panic")
| list_sto "features"
([del /\^/ "^" . label "disable"]?
. key Rx.word)
| list_sto "options"
(key Rx.word . Util.del_str "="
. store Rx.word)

(************************************************************************
* 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
let defaults_entry = entry_sto "fs_type" Rx.word
| entry_sto "undo_dir" Rx.fspath
| list_sto "default_mntopts" (key Rx.word)
| entry_sto "enable_periodic_fsck" Rx.integer

(* View: defaults_title
Title for the <defaults> section *)
Expand All @@ -95,24 +130,12 @@ let defaults = IniFile.record defaults_title
* Group: FS_TYPES SECTION
*************************************************************************)
Copy link
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Is there a reason for reorganizing these entries under common?

Copy link
Contributor Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

You mean all the content of fs_types_entry? As I wrote in the commit message, the documentation says that they are allowed both in [defaults], and for each tag in [fs_types]. Since common_entry represents exactly this, then this is why they were moved.

Copy link
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Ah right, sorry I missed that!


(* 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"|"auto_64-bit_support")
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)*
. ((Util.indent . common_entry) | empty | comment)*
. del /[ \t]*\}[ \t]*\n/ " }\n" ]

(* View: fs_types_title
Expand All @@ -125,14 +148,36 @@ let fs_types = IniFile.record fs_types_title
(fs_types_record | comment)


(************************************************************************
* Group: OPTIONS SECTION
*************************************************************************)

(* View: options_entries_int
Entries with an integer value *)
let options_entries_int = ("proceed_delay"|"sync_kludge")

(* View: options_entry
Possible entries under the <options> section *)
let options_entry = entry_sto options_entries_int Rx.integer

(* View: defaults_title
Title for the <options> section *)
let options_title = IniFile.title "options"

(* View: options
A options section *)
let options = IniFile.record options_title
((Util.indent . options_entry) | comment)


(************************************************************************
* Group: LENS AND FILTER
*************************************************************************)

(* View: lns
The mke2fs lens
*)
let lns = (empty|comment)* . (defaults|fs_types)*
let lns = (empty|comment)* . (defaults|fs_types|options)*

(* Variable: filter *)
let filter = incl "/etc/mke2fs.conf"
Expand Down
12 changes: 10 additions & 2 deletions lenses/tests/test_mke2fs.aug
Original file line number Diff line number Diff line change
Expand Up @@ -33,6 +33,10 @@ module Test_mke2fs =
inode_ratio = 1048576
blocksize = -1
}

[options]
proceed_delay = 1
sync_kludge = 1
"

test Mke2fs.lns get conf =
Expand Down Expand Up @@ -74,10 +78,14 @@ module Test_mke2fs =
{ "inode_ratio" = "4096" } }
{ "filesystem" = "largefile"
{ "inode_ratio" = "1048576" }
{ "blocksize" = "-1" } } }
{ "blocksize" = "-1" } }
{} }
{ "options"
{ "proceed_delay" = "1" }
{ "sync_kludge" = "1" } }


test Mke2fs.fs_types_entry
test Mke2fs.common_entry
put "features = has_journal,^extent\n"
after set "/features/has_journal/disable" "";
rm "/features/extent/disable" = "features = ^has_journal,extent\n"
Expand Down