1 (* Apt/preferences module for Augeas *)
2 (* Author: Raphael Pinson <raphink@gmail.com> *)
4 module AptPreferences =
7 (* Define useful primitives *)
8 let colon = del /:[ \t]*/ ": "
9 let eol = del /[ \t]*\n/ "\n"
10 let value_to_eol = store /([^ \t\n].*[^ \t\n]|[^ \t\n])/
11 let value_to_spc = store /[^, \t\n]+/
12 let comma = del /,[ \t]*/ ", "
13 let equal = Util.del_str "="
14 let spc = Util.del_ws_spc
17 let empty = [ del /[ \t]*\n/ "\n" ]
21 let simple_entry (kw:string) = [ key kw . colon . value_to_eol . eol ]
23 let key_value (kw:string) = [ key kw . equal . value_to_spc ]
24 let pin_keys = key_value "a"
30 let pin_options = store /(origin|release)/ . spc . pin_keys . ( comma . pin_keys )*
31 let version_pin = store /version/ . [ label "version" . spc . store /[^ \t\n]+/ ]
33 let pin = [ key "Pin" . colon . (pin_options | version_pin) . eol ]
35 let entries = simple_entry "Explanation"
36 | simple_entry "Package"
37 | simple_entry "Pin-Priority"
40 let record = [ seq "record" . entries+ ]
43 let lns = (eol* . ( record . eol+ )* . record . eol* ) | eol
45 let filter = incl "/etc/apt/preferences"
48 let xfm = transform lns filter