From: Adam Chlipala Date: Sat, 16 Dec 2006 00:56:20 +0000 (+0000) Subject: Recursive rmdom X-Git-Tag: release_2010-11-19~293 X-Git-Url: https://git.hcoop.net/hcoop/domtool2.git/commitdiff_plain/93c2f623c645cc089118a699874981d113540141 Recursive rmdom --- diff --git a/src/domain.sml b/src/domain.sml index 9913dfc..9234c7c 100644 --- a/src/domain.sml +++ b/src/domain.sml @@ -97,6 +97,8 @@ fun yourDomainHost s = (Substring.slice (suf, 1, NONE))) end +val yourDomain = yourDomainHost + fun validUser s = size s > 0 andalso size s < 20 andalso CharVector.all Char.isAlphaNum s @@ -662,20 +664,35 @@ fun rmdom dom = file = node} val dname = OS.Path.concat (dname, domPath) - val dir = Posix.FileSys.opendir dname - - fun loop actions = - case Posix.FileSys.readdir dir of - NONE => actions - | SOME fname => loop ({action = Slave.Delete, - domain = dom, - dir = dname, - file = OS.Path.joinDirFile {dir = dname, - file = fname}} :: actions) - - val actions = loop [] + fun visitDom (dom, dname, actions) = + let + val dir = Posix.FileSys.opendir dname + + fun loop actions = + case Posix.FileSys.readdir dir of + NONE => actions + | SOME fname => + let + val fnameFull = OS.Path.joinDirFile {dir = dname, + file = fname} + in + if Posix.FileSys.ST.isDir (Posix.FileSys.stat fnameFull) then + loop (visitDom (fname ^ "." ^ dom, + fnameFull, + actions)) + else + loop ({action = Slave.Delete, + domain = dom, + dir = dname, + file = fname} :: actions) + end + in + loop actions + before Posix.FileSys.closedir dir + end + + val actions = visitDom (dom, dname, []) in - Posix.FileSys.closedir dir; handleSite (node, actions) end handle IO.Io _ => print ("Warning: IO error deleting domain " ^ dom ^ " on " ^ node ^ ".\n")