diff options
Diffstat (limited to '')
-rw-r--r-- | stdlib/source/program/aedifex.lux | 15 | ||||
-rw-r--r-- | stdlib/source/program/aedifex/command/install.lux | 62 | ||||
-rw-r--r-- | stdlib/source/program/aedifex/local.lux | 18 | ||||
-rw-r--r-- | stdlib/source/program/aedifex/shell.lux | 19 |
4 files changed, 73 insertions, 41 deletions
diff --git a/stdlib/source/program/aedifex.lux b/stdlib/source/program/aedifex.lux index d8d855bd0..f3f222d90 100644 --- a/stdlib/source/program/aedifex.lux +++ b/stdlib/source/program/aedifex.lux @@ -42,23 +42,12 @@ ["#" resolution]] ["#." command ["#/." pom] + ["#/." install] ["#/." build] ["#/." test] ["#/." auto] ["#/." deploy]]]) -(def: (install! profile) - (-> /.Profile (Promise Any)) - (do promise.monad - [outcome (/local.install (file.async file.default) profile)] - (wrap (case outcome - (#try.Success _) - (log! "Successfully installed locally!") - - (#try.Failure error) - (log! (format "Could not install locally:" text.new-line - error)))))) - (def: (fetch-dependencies! profile) (-> /.Profile (Promise Any)) (do promise.monad @@ -95,7 +84,7 @@ (wrap [])) #/cli.Install - (exec (..install! profile) + (exec (/command/install.do! (file.async file.default) profile) (wrap [])) (#/cli.Deploy repository user password) diff --git a/stdlib/source/program/aedifex/command/install.lux b/stdlib/source/program/aedifex/command/install.lux new file mode 100644 index 000000000..818283cc5 --- /dev/null +++ b/stdlib/source/program/aedifex/command/install.lux @@ -0,0 +1,62 @@ +(.module: + [lux #* + [abstract + [monad (#+ do)]] + [control + ["." try (#+ Try)] + ["." exception] + [concurrency + ["." promise (#+ Promise)]] + [security + ["!" capability]]] + [data + [binary (#+ Binary)] + [text + ["%" format (#+ format)] + ["." encoding]] + [collection + ["." set]] + [format + ["." binary] + ["." tar] + ["." xml]]] + [world + ["." file (#+ Path File)]]] + [program + [compositor + ["." export]]] + ["." /// #_ + ["/" profile (#+ Profile)] + ["#." action (#+ Action)] + ["#." command (#+ Command)] + ["#." local] + ["#." pom] + ["#." artifact (#+ Artifact) + ["#/." extension]]]) + +(def: (save! system content file) + (-> (file.System Promise) Binary Path (Promise (Try Any))) + (do (try.with promise.monad) + [file (: (Promise (Try (File Promise))) + (file.get-file promise.monad system file))] + (!.use (:: file over-write) [content]))) + +(def: #export (do! system profile) + (-> (file.System Promise) (Command Any)) + (case (get@ #/.identity profile) + (#.Some identity) + (do ///action.monad + [package (export.library system (set.to-list (get@ #/.sources profile))) + repository (: (Promise (Try Path)) + (file.make-directories promise.monad system (///local.path system identity))) + #let [artifact-name (format repository (:: system separator) (///artifact.identity identity))] + _ (..save! system (binary.run tar.writer package) + (format artifact-name ///artifact/extension.lux-library)) + pom (:: promise.monad wrap (///pom.write profile)) + _ (..save! system (|> pom (:: xml.codec encode) encoding.to-utf8) + (format artifact-name ///artifact/extension.pom)) + #let [_ (log! "Successfully installed locally!")]] + (wrap [])) + + _ + (:: promise.monad wrap (exception.throw /.no-identity [])))) diff --git a/stdlib/source/program/aedifex/local.lux b/stdlib/source/program/aedifex/local.lux index 7a4cf070e..3c06f0222 100644 --- a/stdlib/source/program/aedifex/local.lux +++ b/stdlib/source/program/aedifex/local.lux @@ -58,24 +58,6 @@ (file.get-file promise.monad system file))] (!.use (:: file over-write) [content]))) -(def: #export (install system profile) - (-> (file.System Promise) Profile (Promise (Try Any))) - (case (get@ #/.identity profile) - (#.Some identity) - (do (try.with promise.monad) - [repository (: (Promise (Try Path)) - (file.make-directories promise.monad system (..path system identity))) - #let [artifact-name (format repository (:: system separator) (//artifact.identity identity))] - package (export.library system (set.to-list (get@ #/.sources profile))) - _ (..save! system (binary.run tar.writer package) - (format artifact-name //artifact/extension.lux-library)) - pom (:: promise.monad wrap (//pom.write profile))] - (..save! system (|> pom (:: xml.codec encode) encoding.to-utf8) - (format artifact-name //artifact/extension.pom))) - - _ - (:: promise.monad wrap (exception.throw /.no-identity [])))) - (def: #export (cache system [artifact type] package) (-> (file.System Promise) Dependency Package (Promise (Try Any))) (do (try.with promise.monad) diff --git a/stdlib/source/program/aedifex/shell.lux b/stdlib/source/program/aedifex/shell.lux index 5ef30cf91..0215c08da 100644 --- a/stdlib/source/program/aedifex/shell.lux +++ b/stdlib/source/program/aedifex/shell.lux @@ -44,17 +44,16 @@ (#static getRuntime [] #io java/lang/Runtime) (exec [java/lang/String #? [java/lang/String] java/io/File] #io #try java/lang/Process)) -(exception: #export (failure-to-execute-command {working-directory Text} {command Text} {error Text}) - (exception.report - ["Working Directory" (%.text working-directory)] - ["Command" (%.text command)] - ["Error" (%.text error)])) +(template [<exception>] + [(exception: #export (<exception> {working-directory Text} {command Text} {error Text}) + (exception.report + ["Working directory" (%.text working-directory)] + ["Command" (%.text command)] + ["Error" (%.text error)]))] -(exception: #export (failure-during-command-execution {working-directory Text} {command Text} {error Text}) - (exception.report - ["Working Directory" (%.text working-directory)] - ["Command" (%.text command)] - ["Error" (%.text error)])) + [failure-to-execute-command] + [failure-during-command-execution] + ) (exception: #export (abnormal-exit {working-directory Text} {command Text} {code Int}) (exception.report |