aboutsummaryrefslogtreecommitdiff
path: root/stdlib/source/program/aedifex/dependency/resolution.lux
diff options
context:
space:
mode:
authorEduardo Julian2020-12-29 23:29:54 -0400
committerEduardo Julian2020-12-29 23:29:54 -0400
commit02d27daeacac74785c2b0f4d1ce03d432377a36e (patch)
tree5129c496d136deb57880f202153e96f4f585e355 /stdlib/source/program/aedifex/dependency/resolution.lux
parent832a9361b632331e82a64c07baa560487ca8abde (diff)
Unified repository abstraction for Aedifex.
Diffstat (limited to 'stdlib/source/program/aedifex/dependency/resolution.lux')
-rw-r--r--stdlib/source/program/aedifex/dependency/resolution.lux49
1 files changed, 32 insertions, 17 deletions
diff --git a/stdlib/source/program/aedifex/dependency/resolution.lux b/stdlib/source/program/aedifex/dependency/resolution.lux
index 1b40a3004..e6b24b152 100644
--- a/stdlib/source/program/aedifex/dependency/resolution.lux
+++ b/stdlib/source/program/aedifex/dependency/resolution.lux
@@ -60,28 +60,43 @@
(-> Binary (Repository Promise) Artifact Extension
(-> Binary (Hash h)) (Codec Text (Hash h))
(Exception [Artifact Extension Text])
- (Promise (Try (Hash h)))))
- (do (try.with promise.monad)
- [actual (\ repository download (///repository/remote.uri artifact extension))]
- (\ promise.monad wrap
- (do try.monad
- [output (\ encoding.utf8 decode actual)
- actual (\ codec decode output)
- _ (exception.assert exception [artifact extension output]
- (\ ///hash.equivalence = (hash library) actual))]
- (wrap actual)))))
+ (Promise (Try (Maybe (Hash h))))))
+ (do promise.monad
+ [?actual (\ repository download (///repository/remote.uri artifact extension))]
+ (case ?actual
+ (#try.Success actual)
+ (wrap (do try.monad
+ [output (\ encoding.utf8 decode actual)
+ actual (\ codec decode output)
+ _ (exception.assert exception [artifact extension output]
+ (\ ///hash.equivalence = (hash library) actual))]
+ (wrap (#.Some actual))))
+
+ (#try.Failure error)
+ (wrap (#try.Success #.None)))))
(def: (hashed repository artifact extension)
(-> (Repository Promise) Artifact Extension (Promise (Try [Binary Status])))
(do (try.with promise.monad)
[data (\ repository download (///repository/remote.uri artifact extension))
- sha-1 (..verified_hash data
- repository artifact (format extension ///artifact/extension.sha-1)
- ///hash.sha-1 ///hash.sha-1_codec ..sha-1_does_not_match)
- md5 (..verified_hash data
- repository artifact (format extension ///artifact/extension.md5)
- ///hash.md5 ///hash.md5_codec ..md5_does_not_match)]
- (wrap [data (#//status.Verified sha-1 md5)])))
+ ?sha-1 (..verified_hash data
+ repository artifact (format extension ///artifact/extension.sha-1)
+ ///hash.sha-1 ///hash.sha-1_codec ..sha-1_does_not_match)
+ ?md5 (..verified_hash data
+ repository artifact (format extension ///artifact/extension.md5)
+ ///hash.md5 ///hash.md5_codec ..md5_does_not_match)]
+ (wrap [data (case [?sha-1 ?md5]
+ [(#.Some sha-1) (#.Some md5)]
+ (#//status.Verified sha-1 md5)
+
+ [(#.Some sha-1) _]
+ (#//status.Partial (#.Left sha-1))
+
+ [_ (#.Some md5)]
+ (#//status.Partial (#.Right md5))
+
+ [#.None #.None]
+ #//status.Unverified)])))
(def: #export (one repository dependency)
(-> (Repository Promise) Dependency (Promise (Try Package)))