X-Git-Url: https://git.hcoop.net/hcoop/domtool2.git/blobdiff_plain/7db53a0b3693ddd01e6a36fc5bfb4ba56b4656eb..409542d7ec4496c61140e077e4885e267ab1c184:/src/slave.sml diff --git a/src/slave.sml b/src/slave.sml index b0148f1..44af4b3 100644 --- a/src/slave.sml +++ b/src/slave.sml @@ -56,7 +56,12 @@ fun registerPostHandler handler = end fun handleChanges fs = (!preHandler (); - app (!fileHandler) fs; + app (fn recd as {action, file, ...} => + (!fileHandler recd; + if action = Delete andalso Posix.FileSys.access (file, []) then + OS.FileSys.remove file + else + ())) fs; !postHandler ()) fun shell ss = OS.Process.isSuccess (OS.Process.system (String.concat ss)) @@ -176,4 +181,25 @@ fun writeList (fname, ls) = TextIO.closeOut outf end +fun lineInFile fname line = + let + val inf = TextIO.openIn fname + val line' = line ^ "\n" + + fun loop () = + case TextIO.inputLine inf of + NONE => false + | SOME line => line = line' orelse loop () + in + loop () + before TextIO.closeIn inf + end handle IO.Io _ => false + +fun inGroup {user, group} = + List.exists (fn x => x = user) + (Posix.SysDB.Group.members (Posix.SysDB.getgrnam group)) + handle OS.SysErr _ => false + +fun mkDirAll dir = ignore (OS.Process.system ("mkdir -p " ^ dir)) + end