hcoop: add new server shelob.hcoop.net
[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 val run : string * string list -> bool
50 val runOutput : string * string list -> bool * string option
51 (* Like shellOutput, but return status and lines and don't use the shell *)
52
53 val concatTo : (string -> bool) -> string -> unit
54 (* Search through the result configuration hierarchy for all files matching
55 * the predicate, concatenating their contents in arbitrary order to the
56 * given file. *)
57
58 val enumerateTo : (string -> bool) -> string -> string -> unit
59 (* Search through the result configuration hierarchy for all files matching
60 * the predicate, writing a list of their domains to the file named by the
61 * third argument, delimiting the entries with the second argument. *)
62
63 val hostname : unit -> string
64 (* Get hostname of this machine *)
65
66 val readList : string -> string list
67 val writeList : string * string list -> unit
68 (* Reading and writing lists of strings stored on separate lines in files *)
69
70 val lineInFile : string -> string -> bool
71 (* Is there a line in the file (first arg) that matches that given? *)
72
73 val inGroup : {user : string, group : string} -> bool
74 (* Check membership in a UNIX group. *)
75
76 val mkDirAll : string -> unit
77 (* [mkDirAll p] creates directory "p", creating all parent directories, as
78 * necessary. *)
79
80 val remove : ''a list * ''a -> ''a list
81 val removeDups : ''a list -> ''a list
82
83 val moveDirCreate : { from : string, to : string } -> unit
84 end