Sharp.Augeas/Sharp.Augeas.Test/lens/subversion.aug

97 lines
2.8 KiB
Plaintext

(*
Module: Subversion
Parses subversion's INI files
Authors:
Marc Fournier <marc.fournier@camptocamp.com>
Raphael Pinson <raphael.pinson@camptocamp.com>
About: License
This file is licenced under the LGPL v2+, like the rest of Augeas.
About: Examples
The <Test_Subversion> file contains various examples and tests.
*)
module Subversion =
autoload xfm
(************************************************************************
* Group: INI File settings
*
* subversion only supports comments starting with "#"
*
*************************************************************************)
(* View: comment *)
let comment = IniFile.comment_noindent "#" "#"
(* View: empty
An empty line or a non-indented empty comment *)
let empty = IniFile.empty_noindent
(* View: sep *)
let sep = IniFile.sep IniFile.sep_default IniFile.sep_default
(************************************************************************
* Group: ENTRY
*
* subversion doesn't support indented entries
*
*************************************************************************)
(* Variable: comma_list_re *)
let comma_list_re = "password-stores"
(* Variable: space_list_re *)
let space_list_re = "global-ignores" | "preserved-conflict-file-exts"
(* Variable: std_re *)
let std_re = /[^ \t\r\n\/=#]+/ - (comma_list_re | space_list_re)
(* View: entry_std
A standard entry
Similar to a <IniFile.entry_multiline_nocomment> entry,
but allows ';' *)
let entry_std =
IniFile.entry_multiline_generic (key std_re) sep "#" comment IniFile.eol
(* View: entry *)
let entry =
let comma_list_re = "password-stores"
in let space_list_re = "global-ignores" | "preserved-conflict-file-exts"
in let std_re = /[^ \t\r\n\/=#]+/ - (comma_list_re | space_list_re)
in entry_std
| IniFile.entry_list_nocomment comma_list_re sep Rx.word Sep.comma
| IniFile.entry_list_nocomment space_list_re sep Rx.no_spaces (del /(\r?\n)?[ \t]+/ " ")
(************************************************************************
* Group: TITLE
*
* subversion doesn't allow anonymous entries (outside sections)
*
*************************************************************************)
(* View: title *)
let title = IniFile.title IniFile.entry_re
(* View: record
Use the non-indented <empty> *)
let record = IniFile.record_noempty title (entry|empty)
(************************************************************************
* Group: LENS & FILTER
*************************************************************************)
(* View: lns *)
let lns = IniFile.lns record comment
(* Variable: filter *)
let filter = incl "/etc/subversion/config"
. incl "/etc/subversion/servers"
let xfm = transform lns filter