aboutsummaryrefslogtreecommitdiff
path: root/stdlib/source/program/aedifex/local.lux
diff options
context:
space:
mode:
authorEduardo Julian2020-11-01 22:56:30 -0400
committerEduardo Julian2020-11-01 22:56:30 -0400
commit3e67e244ad1f58a7bab0094967a86be72aae2482 (patch)
tree5e8677dd7401134cac932c423a766bcff69c41e2 /stdlib/source/program/aedifex/local.lux
parent69272f598d831e89da83bdc8c9290d5607dfb14d (diff)
Improved the design of actors.
Diffstat (limited to 'stdlib/source/program/aedifex/local.lux')
-rw-r--r--stdlib/source/program/aedifex/local.lux58
1 files changed, 32 insertions, 26 deletions
diff --git a/stdlib/source/program/aedifex/local.lux b/stdlib/source/program/aedifex/local.lux
index 3c06f0222..dc769bcc1 100644
--- a/stdlib/source/program/aedifex/local.lux
+++ b/stdlib/source/program/aedifex/local.lux
@@ -34,11 +34,12 @@
["/" profile (#+ Profile)]
["#." pom]
["#." hash]
+ ["#." package (#+ Package)]
["#." artifact (#+ Artifact)
["#/." type]
["#/." extension]]
["#." dependency (#+ Dependency)
- ["#/." resolution (#+ Package Resolution)]]])
+ ["#/." resolution (#+ Resolution)]]])
(def: #export (repository system)
(All [a] (-> (file.System a) Path))
@@ -67,16 +68,22 @@
directory (: (Promise (Try (Directory Promise)))
(file.get-directory promise.monad system directory))
_ (..save! system
- (get@ #//dependency/resolution.library package)
+ (get@ #//package.library package)
(format prefix (//artifact/extension.extension type)))
_ (..save! system
- (encoding.to-utf8 (get@ #//dependency/resolution.sha1 package))
- (format prefix //artifact/extension.sha1))
+ (|> package
+ (get@ #//package.sha-1)
+ (:: //hash.sha-1-codec encode)
+ encoding.to-utf8)
+ (format prefix //artifact/extension.sha-1))
_ (..save! system
- (encoding.to-utf8 (get@ #//dependency/resolution.md5 package))
+ (|> package
+ (get@ #//package.md5)
+ (:: //hash.md5-codec encode)
+ encoding.to-utf8)
(format prefix //artifact/extension.md5))
_ (..save! system
- (|> package (get@ #//dependency/resolution.pom) (:: xml.codec encode) encoding.to-utf8)
+ (|> package (get@ #//package.pom) (:: xml.codec encode) encoding.to-utf8)
(format prefix //artifact/extension.pom))]
(wrap [])))
@@ -102,24 +109,19 @@
(file.make-directories promise.monad system (..path system artifact)))
#let [prefix (format directory (:: system separator) (//artifact.identity artifact))]
pom (..read! system (format prefix //artifact/extension.pom))
- [pom dependencies] (:: promise.monad wrap
- (do try.monad
- [pom (encoding.from-utf8 pom)
- pom (:: xml.codec decode pom)
- profile (<xml>.run //pom.parser pom)]
- (wrap [pom (get@ #/.dependencies profile)])))
library (..read! system (format prefix (//artifact/extension.extension type)))
- sha1 (..read! system (format prefix //artifact/extension.sha1))
+ sha-1 (..read! system (format prefix //artifact/extension.sha-1))
md5 (..read! system (format prefix //artifact/extension.md5))]
- (wrap {#//dependency/resolution.library library
- #//dependency/resolution.pom pom
- #//dependency/resolution.dependencies (set.to-list dependencies)
- #//dependency/resolution.sha1 (|> sha1
- (:coerce (//hash.Hash //hash.SHA-1))
- (:: //hash.sha1-codec encode))
- #//dependency/resolution.md5 (|> md5
- (:coerce (//hash.Hash //hash.MD5))
- (:: //hash.md5-codec encode))})))
+ (:: promise.monad wrap
+ (do try.monad
+ [pom (encoding.from-utf8 pom)
+ pom (:: xml.codec decode pom)
+ sha-1 (//hash.as-sha-1 sha-1)
+ md5 (//hash.as-md5 md5)]
+ (wrap {#//package.library library
+ #//package.pom pom
+ #//package.sha-1 sha-1
+ #//package.md5 md5})))))
(def: #export (all-cached system dependencies resolution)
(-> (file.System Promise) (List Dependency) Resolution (Promise (Try Resolution)))
@@ -138,10 +140,14 @@
(with-expansions [<next> (as-is (all-cached system tail resolution))]
(case package
(#try.Success package)
- (let [resolution (dictionary.put head package resolution)]
- (do (try.with promise.monad)
- [resolution (all-cached system (get@ #//dependency/resolution.dependencies package) resolution)]
- <next>))
+ (do (try.with promise.monad)
+ [sub-dependencies (|> package
+ //package.dependencies
+ (:: promise.monad wrap))
+ resolution (|> resolution
+ (dictionary.put head package)
+ (all-cached system (set.to-list sub-dependencies)))]
+ <next>)
(#try.Failure error)
<next>)))))