blob: 04b82d7e2fc0528141a875b72316dd81c9267a04 (
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
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
|
(.module:
[lux #*
[abstract
[codec (#+ Codec)]
["." monad (#+ do)]]
[control
["." try (#+ Try)]
[concurrency
["." promise (#+ Promise)]]
[security
["!" capability]]]
[data
[binary (#+ Binary)]
["." product]
[text
["%" format (#+ format)]
["." encoding]]
[collection
["." dictionary]
["." set (#+ Set)]
["." list ("#\." monoid)]]
[format
["." xml]]]
[time
["." instant]]
[world
[program (#+ Program)]
["." file (#+ Path File Directory)]]]
["." /// #_
["#" local]
["#." hash (#+ Hash SHA-1 MD5)]
["#." package (#+ Package)]
["#." artifact (#+ Artifact)
["#/." type]
["#/." extension (#+ Extension)]
["#/." versioning]
["#/." snapshot
["#/." version (#+ Version)
["#/." value]]]]
["#." metadata
["#/." artifact]
["#/." snapshot]]
["#." dependency (#+ Dependency)
[resolution (#+ Resolution)]
["#/." status (#+ Status)]]
["#." repository (#+ Repository)
["#/." origin]]])
(def: (with_status repository version_template [artifact type] [data status])
(-> (Repository Promise) ///artifact.Version Dependency [Binary Status] (Promise (Try Any)))
(let [artifact (format (///artifact.uri version_template artifact)
(///artifact/extension.extension type))
deploy_hash (: (All [h] (-> (Codec Text (Hash h)) Extension (Hash h) (Promise (Try Any))))
(function (_ codec extension hash)
(|> hash
(\ codec encode)
(\ encoding.utf8 encode)
(\ repository upload (format artifact extension)))))]
(do {! (try.with promise.monad)}
[_ (\ repository upload artifact data)]
(case status
#///dependency/status.Unverified
(wrap [])
(#///dependency/status.Partial partial)
(case partial
(#.Left sha-1)
(deploy_hash ///hash.sha-1_codec ///artifact/extension.sha-1 sha-1)
(#.Right md5)
(deploy_hash ///hash.md5_codec ///artifact/extension.md5 md5))
(#///dependency/status.Verified sha-1 md5)
(do !
[_ (deploy_hash ///hash.sha-1_codec ///artifact/extension.sha-1 sha-1)]
(deploy_hash ///hash.md5_codec ///artifact/extension.md5 md5))))))
(def: (artifacts type status)
(-> ///artifact/type.Type Status (List ///artifact/type.Type))
(with_expansions [<sha-1> (format type ///artifact/extension.sha-1)
<md5> (format type ///artifact/extension.md5)]
(list& type
(case status
#///dependency/status.Unverified
(list)
(#///dependency/status.Partial partial)
(list (case partial
(#.Left _) <sha-1>
(#.Right _) <md5>))
(#///dependency/status.Verified _)
(list <sha-1> <md5>)))))
(def: #export (one repository [artifact type] package)
(-> (Repository Promise) Dependency Package (Promise (Try Artifact)))
(do {! promise.monad}
[now (promise.future instant.now)
#let [version_template (get@ #///artifact.version artifact)]]
(do (try.with !)
[_ (with_status repository version_template [artifact type] (get@ #///package.library package))
_ (let [[pom pom_data status] (get@ #///package.pom package)]
(with_status repository
version_template
[artifact ///artifact/type.pom]
[pom_data
status]))
snapshot (///metadata/snapshot.read repository artifact)
#let [snapshot (|> snapshot
(update@ [#///metadata/snapshot.versioning #///artifact/versioning.snapshot]
(function (_ snapshot)
(case snapshot
#///artifact/snapshot.Local
#///artifact/snapshot.Local
(#///artifact/snapshot.Remote [_ build])
(#///artifact/snapshot.Remote [now (inc build)]))))
(set@ [#///metadata/snapshot.versioning #///artifact/versioning.last_updated] now))
versioning_snapshot (get@ [#///metadata/snapshot.versioning #///artifact/versioning.snapshot] snapshot)]
_ (|> snapshot
(set@ [#///metadata/snapshot.versioning #///artifact/versioning.versions]
(list {#///artifact/snapshot/version.extension type
#///artifact/snapshot/version.value (///artifact/snapshot/version/value.format
{#///artifact/snapshot/version/value.version version_template
#///artifact/snapshot/version/value.snapshot versioning_snapshot})
#///artifact/snapshot/version.updated now}))
## (set@ [#///metadata/snapshot.versioning #///artifact/versioning.snapshot]
## (list\compose (..artifacts type (product.right (get@ #///package.library package)))
## (..artifacts ///artifact/type.pom (product.right (get@ #///package.pom package)))))
(///metadata/snapshot.write repository artifact))
project (///metadata/artifact.read repository artifact)
_ (|> project
(set@ #///metadata/artifact.versions (list version_template))
(set@ #///metadata/artifact.last_updated now)
(///metadata/artifact.write repository artifact))]
(wrap artifact))))
(def: #export (all repository resolution)
(-> (Repository Promise) Resolution (Promise (Try (Set Artifact))))
(do {! (try.with promise.monad)}
[]
(|> (dictionary.entries resolution)
(monad.map ! (function (_ [dependency package])
(..one repository dependency package)))
(\ ! map (set.from_list ///artifact.hash)))))
|