blob: 900de2cc4e5bf49fe16b80ce44e5d585c4f8e214 (
plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
|
(.module:
[lux #*
[abstract
["." monad (#+ do)]]
[control
["." try (#+ Try)]
[security
["!" capability]]
[concurrency
["." promise (#+ Promise)]]]
[world
["." file (#+ Path File Directory)]
["." console (#+ Console)]]]
["." /// #_
[command (#+ Command)]
["#" profile]
["#." action (#+ Action)]])
(def: (clean_files! root)
(-> (Directory Promise) (Promise (Try Any)))
(do {! ///action.monad}
[nodes (: (Promise (Try (List (File Promise))))
(!.use (\ root files) []))
_ (monad.map ! (function (_ node)
(!.use (\ node delete) []))
nodes)]
(wrap [])))
(def: #export success
"Success")
(def: #export failure
"Failure: No 'target' defined for clean-up.")
(def: #export (do! console fs profile)
(-> (Console Promise) (file.System Promise) (Command Any))
(case (get@ #///.target profile)
(#.Some target)
(do {! ///action.monad}
[target (: (Promise (Try (Directory Promise)))
(!.use (\ fs directory) target))
_ (loop [root target]
(do !
[_ (..clean_files! root)
subs (: (Promise (Try (List (Directory Promise))))
(!.use (\ root directories) []))
_ (monad.map ! recur subs)]
(!.use (\ root discard) [])))]
(console.write_line ..success console))
#.None
(console.write_line ..failure console)))
|