blob: f4f5e1f9edeae2801e5344a953958ca58004d290 (
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
|
(.module:
[lux #*
[abstract
["." monad (#+ do)]]
[control
["." try (#+ Try)]
[security
["!" capability]]
[concurrency
["." promise (#+ Promise)]]]
[world
["." file (#+ Path File Directory)]]]
["." /// #_
[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 (do! fs profile)
(-> (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) [])))]
(exec (log! "No 'target' defined for clean-up.")
(wrap [])))
#.None
(exec (log! "No 'target' defined for clean-up.")
(:: ///action.monad wrap []))))
|