1
- use std:: collections:: HashMap ;
2
-
3
1
use ecow:: EcoString ;
4
2
use futures:: future;
5
3
use gleam_core:: {
6
4
Error , Result ,
7
5
build:: { Mode , Telemetry } ,
8
6
config:: PackageConfig ,
9
7
dependency,
10
- manifest:: Manifest ,
8
+ manifest:: { Manifest , Resolved } ,
11
9
paths:: ProjectPaths ,
12
10
requirement:: Requirement ,
13
11
} ;
12
+ use std:: collections:: HashMap ;
14
13
15
14
use crate :: {
16
15
build_lock:: BuildLock ,
@@ -54,23 +53,6 @@ impl DependencyManagerConfig {
54
53
}
55
54
}
56
55
57
- pub struct Resolved {
58
- pub manifest : Manifest ,
59
- pub versions_changed : bool ,
60
- }
61
-
62
- impl Resolved {
63
- /// Create a `Resolved`, comparing the old and new versions of the manifest to work out
64
- /// if resolution resulted in any changes.
65
- pub fn with_updates ( old : & Manifest , new : Manifest ) -> Self {
66
- let versions_changed = old. packages != new. packages ;
67
- Self {
68
- manifest : new,
69
- versions_changed,
70
- }
71
- }
72
- }
73
-
74
56
pub struct DependencyManager < Telem , P > {
75
57
runtime : tokio:: runtime:: Handle ,
76
58
package_fetcher : P ,
99
81
if !paths. manifest ( ) . exists ( ) {
100
82
tracing:: debug!( "manifest_not_present" ) ;
101
83
let manifest = self . perform_version_resolution ( paths, config, None , Vec :: new ( ) ) ?;
102
- return Ok ( Resolved {
103
- manifest,
104
- versions_changed : true ,
105
- } ) ;
84
+ return Ok ( Resolved :: add_added ( manifest) ) ;
106
85
}
107
86
108
87
let existing_manifest = read_manifest_from_disc ( paths) ?;
@@ -121,10 +100,7 @@ where
121
100
paths. root ( ) ,
122
101
) ?
123
102
{
124
- return Ok ( Resolved {
125
- manifest : existing_manifest,
126
- versions_changed : false ,
127
- } ) ;
103
+ return Ok ( Resolved :: no_change ( existing_manifest) ) ;
128
104
}
129
105
130
106
// Otherwise, use the manifest to inform resolution.
@@ -142,7 +118,7 @@ where
142
118
Ok ( Resolved :: with_updates ( & existing_manifest, new_manifest) )
143
119
}
144
120
145
- pub fn download (
121
+ pub fn resolve_and_download_versions (
146
122
& self ,
147
123
paths : & ProjectPaths ,
148
124
new_package : Option < ( Vec < ( EcoString , Requirement ) > , bool ) > ,
@@ -176,36 +152,35 @@ where
176
152
}
177
153
178
154
// Determine what versions we need
179
- let Resolved {
180
- manifest,
181
- versions_changed : manifest_updated,
182
- } = self . resolve_versions ( paths, & config, packages_to_update) ?;
155
+ let resolved = self . resolve_versions ( paths, & config, packages_to_update) ?;
183
156
let local = LocalPackages :: read_from_disc ( paths) ?;
184
157
185
158
// Remove any packages that are no longer required due to gleam.toml changes
186
- remove_extra_packages ( paths, & local, & manifest, & self . telemetry ) ?;
159
+ remove_extra_packages ( paths, & local, & resolved . manifest , & self . telemetry ) ?;
187
160
188
161
// Download them from Hex to the local cache
189
162
self . runtime . block_on ( add_missing_packages (
190
163
paths,
191
164
fs,
192
- & manifest,
165
+ & resolved . manifest ,
193
166
& local,
194
167
project_name,
195
168
& self . telemetry ,
196
169
) ) ?;
197
170
198
- if manifest_updated {
171
+ if resolved . any_changes ( ) {
199
172
// Record new state of the packages directory
200
173
// TODO: test
201
174
tracing:: debug!( "writing_manifest_toml" ) ;
202
- write_manifest_to_disc ( paths, & manifest) ?;
175
+ write_manifest_to_disc ( paths, & resolved . manifest ) ?;
203
176
}
204
- LocalPackages :: from_manifest ( & manifest) . write_to_disc ( paths) ?;
177
+ LocalPackages :: from_manifest ( & resolved . manifest ) . write_to_disc ( paths) ?;
205
178
206
179
if let CheckMajorVersions :: Yes = self . check_major_versions {
207
- let major_versions_available =
208
- dependency:: check_for_major_version_updates ( & manifest, & self . package_fetcher ) ;
180
+ let major_versions_available = dependency:: check_for_major_version_updates (
181
+ & resolved. manifest ,
182
+ & self . package_fetcher ,
183
+ ) ;
209
184
if !major_versions_available. is_empty ( ) {
210
185
eprintln ! (
211
186
"{}" ,
@@ -214,7 +189,8 @@ where
214
189
}
215
190
}
216
191
217
- Ok ( manifest)
192
+ self . telemetry . resolved_package_versions ( & resolved) ;
193
+ Ok ( resolved. manifest )
218
194
}
219
195
220
196
fn perform_version_resolution (
0 commit comments