aboutsummaryrefslogtreecommitdiff
path: root/stdlib/source/program/aedifex
diff options
context:
space:
mode:
Diffstat (limited to 'stdlib/source/program/aedifex')
-rw-r--r--stdlib/source/program/aedifex/cli.lux4
-rw-r--r--stdlib/source/program/aedifex/command/clean.lux47
2 files changed, 51 insertions, 0 deletions
diff --git a/stdlib/source/program/aedifex/cli.lux b/stdlib/source/program/aedifex/cli.lux
index 666e5a701..9d73f9181 100644
--- a/stdlib/source/program/aedifex/cli.lux
+++ b/stdlib/source/program/aedifex/cli.lux
@@ -32,6 +32,7 @@
(cli.this "test")))
(type: #export Command
+ #Clean
#POM
#Dependencies
#Install
@@ -42,6 +43,8 @@
(def: #export equivalence
(Equivalence Command)
($_ equivalence.sum
+ ## #Clean
+ ..any-equivalence
## #POM
..any-equivalence
## #Dependencies
@@ -61,6 +64,7 @@
(def: command'
(Parser Command)
($_ <>.or
+ (cli.this "clean")
(cli.this "pom")
(cli.this "deps")
(cli.this "install")
diff --git a/stdlib/source/program/aedifex/command/clean.lux b/stdlib/source/program/aedifex/command/clean.lux
new file mode 100644
index 000000000..f4f5e1f9e
--- /dev/null
+++ b/stdlib/source/program/aedifex/command/clean.lux
@@ -0,0 +1,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 []))))