1
(* Apt/preferences module for Augeas *)
2
(* Author: Raphael Pinson <raphink@gmail.com> *)
3
Apt/preferences module for Augeas
5
Author: Raphael Pinson <raphael.pinson@camptocamp.com>
4
8
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 "release" . spc . pin_keys . ( comma . pin_keys )*
31
let version_pin = store "version" . [ label "version" . spc . store /[^ \t\n]+/ ]
32
let origin_pin = store "origin" . [ label "origin" . spc . store /[^ \t\n]+/ ]
34
let pin = [ key "Pin" . colon . (pin_options | version_pin | origin_pin) . eol ]
36
let entries = simple_entry "Explanation"
37
| simple_entry "Package"
38
| simple_entry "Pin-Priority"
42
let record = [ seq "record" . entries+ ]
45
let lns = (eol* . ( record . eol+ )* . record . eol* ) | eol
47
let filter = incl "/etc/apt/preferences"
50
let xfm = transform lns filter
11
(************************************************************************
13
************************************************************************)
16
let colon = del /:[ \t]*/ ": "
22
lbl:string - the label *)
23
let pin_gen (lbl:string) = store lbl
24
. [ label lbl . Sep.space . store Rx.no_spaces ]
28
let space_in = store /[^, \r\t\n][^,\n]*[^, \r\t\n]|[^, \t\n\r]/
29
in Build.key_value /[aclnov]/ Sep.equal space_in
31
(* View: pin_options *)
33
let comma = Util.delim ","
34
in store "release" . Sep.space
35
. Build.opt_list pin_keys comma
37
(* View: version_pin *)
38
let version_pin = pin_gen "version"
40
(* View: origin_pin *)
41
let origin_pin = pin_gen "origin"
45
let pin_value = pin_options | version_pin | origin_pin
46
in Build.key_value_line "Pin" colon pin_value
49
let entries = Build.key_value_line ("Explanation"|"Package"|"Pin-Priority")
50
colon (store Rx.space_in)
55
let record = [ seq "record" . entries+ ]
57
(************************************************************************
59
************************************************************************)
62
let lns = Util.empty* . (Build.opt_list record Util.eol+ . Util.empty*)?
65
let filter = incl "/etc/apt/preferences"
66
. incl "/etc/apt/preferences.d/*"
69
let xfm = transform lns filter