Upload Tizen:Main source
[external/augeas.git] / lenses / aptpreferences.aug
1 (* Apt/preferences module for Augeas          *)
2 (* Author: Raphael Pinson <raphink@gmail.com> *)
3
4 module AptPreferences =
5    autoload xfm
6
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
15
16    (* Define empty *)
17    let empty = [ del /[ \t]*\n/ "\n" ]
18
19    (* Define record *)
20
21    let simple_entry (kw:string) = [ key kw . colon . value_to_eol . eol ]
22
23    let key_value (kw:string)    = [ key kw . equal . value_to_spc ]
24    let pin_keys = key_value "a"
25                 | key_value "c"
26                 | key_value "l"
27                 | key_value "o"
28                 | key_value "v"
29
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]+/ ]
32
33    let pin = [ key "Pin" . colon . (pin_options | version_pin) . eol ]
34
35    let entries = simple_entry "Explanation"
36                | simple_entry "Package"
37                | simple_entry "Pin-Priority"
38                | pin
39
40    let record = [ seq "record" . entries+ ]
41
42    (* Define lens *)
43    let lns = (eol* . ( record . eol+ )* . record . eol* ) | eol
44
45    let filter = incl "/etc/apt/preferences"
46               . Util.stdexcl
47
48    let xfm = transform lns filter