~jorge/charms/precise/mysql/fix-metadata

« back to all changes in this revision

Viewing changes to formulas/mysql/inifile.aug

  • Committer: Clint Byrum
  • Date: 2011-03-17 20:43:05 UTC
  • mto: This revision was merged to the branch mainline in revision 38.
  • Revision ID: clint@ubuntu.com-20110317204305-8mfbh9bto61lndcs
- adding master/slave replication
- setting default storage engine to innodb to make replication snaps faster and provide better data integrity

Show diffs side-by-side

added added

removed removed

Lines of Context:
 
1
(*
 
2
Module: IniFile
 
3
  Generic module to create INI files lenses
 
4
 
 
5
Author: Raphael Pinson <raphink@gmail.com>
 
6
 
 
7
About: License
 
8
  This file is licensed under the LGPLv2+, like the rest of Augeas.
 
9
 
 
10
About: TODO
 
11
  Things to add in the future
 
12
  - Support double quotes in value
 
13
  - Support multiline values (is it standard?)
 
14
 
 
15
About: Lens usage
 
16
  This lens is made to provide generic primitives to construct INI File lenses.
 
17
  See <Puppet>, <PHP>, <MySQL> or <Dput> for examples of real life lenses using it.
 
18
 
 
19
*)
 
20
 
 
21
module IniFile  =
 
22
 
 
23
 
 
24
(************************************************************************
 
25
 * Group:               USEFUL PRIMITIVES
 
26
 *************************************************************************)
 
27
 
 
28
(* Group: Internal primitives *)
 
29
 
 
30
(*
 
31
Variable: eol
 
32
  End of line, inherited from <Util.eol>
 
33
*)
 
34
let eol                = Util.eol
 
35
 
 
36
(*
 
37
View: empty
 
38
  Empty line, an <eol> subnode
 
39
*)
 
40
let empty              = [ eol ]
 
41
 
 
42
 
 
43
(* Group: Separators *)
 
44
 
 
45
 
 
46
 
 
47
(*
 
48
Variable: sep
 
49
  Generic separator
 
50
 
 
51
  Parameters:
 
52
    pat:regexp - the pattern to delete
 
53
    default:string - the default string to use
 
54
*)
 
55
let sep (pat:regexp) (default:string)
 
56
                       = Sep.opt_space . del pat default
 
57
 
 
58
(*
 
59
Variable: sep_re
 
60
  The default regexp for a separator
 
61
*)
 
62
 
 
63
let sep_re             = /[=:]/
 
64
 
 
65
(*
 
66
Variable: sep_default
 
67
  The default separator value
 
68
*)
 
69
let sep_default        = "="
 
70
 
 
71
 
 
72
(* Group: Stores *)
 
73
 
 
74
 
 
75
(*
 
76
Variable: sto_to_eol
 
77
  Store until end of line
 
78
*)
 
79
let sto_to_eol         = Sep.opt_space . store Rx.space_in
 
80
 
 
81
(*
 
82
Variable: sto_to_comment
 
83
  Store until comment
 
84
*)
 
85
let sto_to_comment     = Sep.opt_space
 
86
                         . store /[^;# \t\n][^;#\n]*[^;# \t\n]|[^;# \t\n]/
 
87
 
 
88
 
 
89
(* Group: Define comment and defaults *)
 
90
 
 
91
(*
 
92
View: comment
 
93
  Map comments into "#comment" nodes
 
94
 
 
95
  Parameters:
 
96
    pat:regexp - pattern to delete before commented data
 
97
    default:string - default pattern before commented data
 
98
 
 
99
  Sample Usage:
 
100
  (start code)
 
101
    let comment  = IniFile.comment "#" "#"
 
102
    let comment  = IniFile.comment IniFile.comment_re IniFile.comment_default
 
103
  (end code)
 
104
*)
 
105
let comment (pat:regexp) (default:string)
 
106
                       = [ label "#comment" . sep pat default
 
107
                         . sto_to_eol? . eol ]
 
108
(*
 
109
Variable: comment_re
 
110
  Default regexp for <comment> pattern
 
111
*)
 
112
 
 
113
let comment_re         = /[;#]/
 
114
 
 
115
(*
 
116
Variable: comment_default
 
117
  Default value for <comment> pattern
 
118
*)
 
119
let comment_default    = ";"
 
120
 
 
121
 
 
122
(************************************************************************
 
123
 * Group:                     ENTRY
 
124
 *************************************************************************)
 
125
 
 
126
(* Group: entry includes comments *)
 
127
 
 
128
(*
 
129
View: entry
 
130
  Generic INI File entry
 
131
 
 
132
  Parameters:
 
133
    kw:regexp    - keyword regexp for the label
 
134
    sep:lens     - lens to use as key/value separator
 
135
    comment:lens - lens to use as comment
 
136
 
 
137
  Sample Usage:
 
138
     > let entry = IniFile.entry setting sep comment
 
139
*)
 
140
let entry (kw:regexp) (sep:lens) (comment:lens)
 
141
                       = [ key kw . sep . sto_to_comment? . (comment|eol) ] | comment
 
142
 
 
143
(*
 
144
View: indented_entry
 
145
  Generic INI File entry that might be indented with an arbitrary
 
146
  amount of whitespace
 
147
 
 
148
  Parameters:
 
149
    kw:regexp    - keyword regexp for the label
 
150
    sep:lens     - lens to use as key/value separator
 
151
    comment:lens - lens to use as comment
 
152
 
 
153
  Sample Usage:
 
154
     > let entry = IniFile.indented_entry setting sep comment
 
155
*)
 
156
let indented_entry (kw:regexp) (sep:lens) (comment:lens)
 
157
                       = [ Util.del_opt_ws "" .
 
158
                           key kw . sep . sto_to_comment? .
 
159
                           (comment|eol)
 
160
                         ]
 
161
                         | comment
 
162
 
 
163
(*
 
164
Variable: entry_re
 
165
  Default regexp for <entry> keyword
 
166
*)
 
167
let entry_re           = ( /[A-Za-z][A-Za-z0-9\._-]+/ )
 
168
 
 
169
 
 
170
(************************************************************************
 
171
 * Group:                      RECORD
 
172
 *************************************************************************)
 
173
 
 
174
(* Group: Title definition *)
 
175
 
 
176
(*
 
177
View: title
 
178
  Title for <record>. This maps the title of a record as a node in the abstract tree.
 
179
 
 
180
  Parameters:
 
181
    kw:regexp - keyword regexp for the label
 
182
 
 
183
  Sample Usage:
 
184
    > let title   = IniFile.title IniFile.record_re
 
185
*)
 
186
let title (kw:regexp)
 
187
                       = Util.del_str "[" . key kw
 
188
                         . Util.del_str "]". eol
 
189
 
 
190
(*
 
191
View: indented_title
 
192
  Title for <record>. This maps the title of a record as a node in the abstract tree. The title may be indented with arbitrary amounts of whitespace
 
193
 
 
194
  Parameters:
 
195
    kw:regexp - keyword regexp for the label
 
196
 
 
197
  Sample Usage:
 
198
    > let title   = IniFile.title IniFile.record_re
 
199
*)
 
200
let indented_title (kw:regexp)
 
201
                       = Util.indent . title kw
 
202
 
 
203
(*
 
204
View: title_label
 
205
  Title for <record>. This maps the title of a record as a value in the abstract tree.
 
206
 
 
207
  Parameters:
 
208
    name:string - name for the title label
 
209
    kw:regexp   - keyword regexp for the label
 
210
 
 
211
  Sample Usage:
 
212
    > let title   = IniFile.title_label "target" IniFile.record_label_re
 
213
*)
 
214
let title_label (name:string) (kw:regexp)
 
215
                       = label name
 
216
                         . Util.del_str "[" . store kw
 
217
                         . Util.del_str "]". eol
 
218
 
 
219
(*
 
220
View: indented_title_label
 
221
  Title for <record>. This maps the title of a record as a value in the abstract tree. The title may be indented with arbitrary amounts of whitespace
 
222
 
 
223
  Parameters:
 
224
    name:string - name for the title label
 
225
    kw:regexp   - keyword regexp for the label
 
226
 
 
227
  Sample Usage:
 
228
    > let title   = IniFile.title_label "target" IniFile.record_label_re
 
229
*)
 
230
let indented_title_label (name:string) (kw:regexp)
 
231
                       = Util.indent . title_label name kw
 
232
 
 
233
 
 
234
(*
 
235
Variable: record_re
 
236
  Default regexp for <title> keyword pattern
 
237
*)
 
238
let record_re          = ( /[^]\n\/]+/ - /#comment/ )
 
239
 
 
240
(*
 
241
Variable: record_label_re
 
242
  Default regexp for <title_label> keyword pattern
 
243
*)
 
244
let record_label_re    = /[^]\n]+/
 
245
 
 
246
 
 
247
(* Group: Record definition *)
 
248
 
 
249
(*
 
250
View: record_noempty
 
251
  INI File Record with no empty lines allowed.
 
252
 
 
253
  Parameters:
 
254
    title:lens - lens to use for title. Use either <title> or <title_label>.
 
255
    entry:lens - lens to use for entries in the record. See <entry>.
 
256
*)
 
257
let record_noempty (title:lens) (entry:lens)
 
258
                       = [ title
 
259
                       . entry* ]
 
260
 
 
261
(*
 
262
View: record
 
263
  Generic INI File record
 
264
 
 
265
  Parameters:
 
266
    title:lens - lens to use for title. Use either <title> or <title_label>.
 
267
    entry:lens - lens to use for entries in the record. See <entry>.
 
268
 
 
269
  Sample Usage:
 
270
    > let record  = IniFile.record title entry
 
271
*)
 
272
let record (title:lens) (entry:lens)
 
273
                       = record_noempty title ( entry | empty )
 
274
 
 
275
 
 
276
(************************************************************************
 
277
 * Group:                      LENS
 
278
 *************************************************************************)
 
279
 
 
280
 
 
281
(*
 
282
 
 
283
Group: Lens definition
 
284
 
 
285
View: lns_noempty
 
286
  Generic INI File lens with no empty lines
 
287
 
 
288
  Parameters:
 
289
    record:lens  - record lens to use. See <record_noempty>.
 
290
    comment:lens - comment lens to use. See <comment>.
 
291
 
 
292
  Sample Usage:
 
293
    > let lns     = IniFile.lns_noempty record comment
 
294
*)
 
295
let lns_noempty (record:lens) (comment:lens)
 
296
                       = comment* . record*
 
297
 
 
298
(*
 
299
View: lns
 
300
  Generic INI File lens
 
301
 
 
302
  Parameters:
 
303
    record:lens  - record lens to use. See <record>.
 
304
    comment:lens - comment lens to use. See <comment>.
 
305
 
 
306
  Sample Usage:
 
307
    > let lns     = IniFile.lns record comment
 
308
*)
 
309
let lns (record:lens) (comment:lens)
 
310
                       = lns_noempty record (comment|empty)
 
311
 
 
312