diff --git a/lenses/mysql.aug b/lenses/mysql.aug index eaeb34e2e..4038a6670 100644 --- a/lenses/mysql.aug +++ b/lenses/mysql.aug @@ -14,13 +14,20 @@ let comment = IniFile.comment IniFile.comment_re "#" let sep = IniFile.sep IniFile.sep_re IniFile.sep_default +(* Like Rx.fspath, but we also disallow characters that start comments *) +let fspath = store /[^ \t\r\n#;]+/ + let entry = - let bare = Quote.do_dquote_opt_nil (store /[^#;" \t\r\n]+([ \t]+[^#;" \t\r\n]+)*/) - in let quoted = Quote.do_dquote (store /[^"\r\n]*[#;]+[^"\r\n]*/) - in [ Util.indent . key IniFile.entry_re . sep . Sep.opt_space . bare . (comment|IniFile.eol) ] - | [ Util.indent . key IniFile.entry_re . sep . Sep.opt_space . quoted . (comment|IniFile.eol) ] - | [ Util.indent . key IniFile.entry_re . store // . (comment|IniFile.eol) ] - | comment + let bare = + Quote.do_dquote_opt_nil (store /[^#;" \t\r\n]+([ \t]+[^#;" \t\r\n]+)*/) in + let quoted = Quote.do_dquote (store /[^"\r\n]*[#;]+[^"\r\n]*/) in + let eol = comment|IniFile.eol in + let line (content:lens) = [ Util.indent . content . eol ] in + line (key IniFile.entry_re . sep . Sep.opt_space . bare) + | line (key IniFile.entry_re . sep . Sep.opt_space . quoted) + | line (key IniFile.entry_re . store //) + | line (key /!include(dir)?/ . Sep.space . fspath) + | comment (************************************************************************ * sections, led by a "[section]" header @@ -36,11 +43,10 @@ let record = IniFile.record title entry let includedir = Build.key_value_line /!include(dir)?/ Sep.space (store Rx.fspath) . (comment|IniFile.empty)* -let lns = (comment|IniFile.empty)* . (record|includedir)* +let lns = (comment|IniFile.empty)* . record* let filter = (incl "/etc/mysql/my.cnf") . (incl "/etc/mysql/conf.d/*.cnf") . (incl "/etc/my.cnf") let xfm = transform lns filter - diff --git a/lenses/tests/test_mysql.aug b/lenses/tests/test_mysql.aug index 9356204b2..fd041cd97 100644 --- a/lenses/tests/test_mysql.aug +++ b/lenses/tests/test_mysql.aug @@ -274,10 +274,8 @@ key_buffer = 16M {} { "#comment" = "* IMPORTANT: Additional settings that can override those from this file!" } {} + { "!includedir" = "/etc/mysql/conf.d/" } + { "!include" = "/etc/mysql/other_conf.d/someconf.cnf" } + { "#comment" = "Another comment" } + { } } - { "!includedir" = "/etc/mysql/conf.d/" } - { "!include" = "/etc/mysql/other_conf.d/someconf.cnf" } - { "#comment" = "Another comment" } - { } - -