merge toplevel-dynamic-environment
[hcoop/domtool2.git] / src / slave.sig
1 (* HCoop Domtool (http://hcoop.sourceforge.net/)
2 * Copyright (c) 2006, Adam Chlipala
3 *
4 * This program is free software; you can redistribute it and/or
5 * modify it under the terms of the GNU General Public License
6 * as published by the Free Software Foundation; either version 2
7 * of the License, or (at your option) any later version.
8 *
9 * This program is distributed in the hope that it will be useful,
10 * but WITHOUT ANY WARRANTY; without even the implied warranty of
11 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
12 * GNU General Public License for more details.
13 *
14 * You should have received a copy of the GNU General Public License
15 * along with this program; if not, write to the Free Software
16 * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
17 *)
18
19 (* Code for receiving and executing configuration files *)
20
21 signature SLAVE = sig
22
23 datatype file_action =
24 Add
25 | Delete of bool (* Set to true to really delete the file *)
26 | Modify
27
28 val isDelete : file_action -> bool
29
30 type file_status = {action : file_action,
31 domain : string,
32 dir : string,
33 file : string}
34
35 val registerFileHandler : (file_status -> unit) -> unit
36 (* Register a function to be called when a result configuration file's
37 * status has changed. Registered handlers are called in the reverse order
38 * from registration order. *)
39
40 val registerPreHandler : (unit -> unit) -> unit
41 val registerPostHandler : (unit -> unit) -> unit
42 (* Register code to run before or after making all changes. *)
43
44 val handleChanges : file_status list -> unit
45
46 val shell : string list -> bool
47 val shellF : string list * (string -> string) -> unit
48 val shellOutput : string list -> string option
49
50 val concatTo : (string -> bool) -> string -> unit
51 (* Search through the result configuration hierarchy for all files matching
52 * the predicate, concatenating their contents in arbitrary order to the
53 * given file. *)
54
55 val enumerateTo : (string -> bool) -> string -> string -> unit
56 (* Search through the result configuration hierarchy for all files matching
57 * the predicate, writing a list of their domains to the file named by the
58 * third argument, delimiting the entries with the second argument. *)
59
60 val hostname : unit -> string
61 (* Get hostname of this machine *)
62
63 val readList : string -> string list
64 val writeList : string * string list -> unit
65 (* Reading and writing lists of strings stored on separate lines in files *)
66
67 val lineInFile : string -> string -> bool
68 (* Is there a line in the file (first arg) that matches that given? *)
69
70 val inGroup : {user : string, group : string} -> bool
71 (* Check membership in a UNIX group. *)
72
73 val mkDirAll : string -> unit
74 (* [mkDirAll p] creates directory "p", creating all parent directories, as
75 * necessary. *)
76
77 val remove : ''a list * ''a -> ''a list
78 val removeDups : ''a list -> ''a list
79
80 val moveDirCreate : { from : string, to : string } -> unit
81 end