Skip to content

Commit 2a6175c

Browse files
vshakitskiylpil
authored andcommitted
implement check for all version updates
1 parent a6d74e1 commit 2a6175c

File tree

2 files changed

+40
-4
lines changed

2 files changed

+40
-4
lines changed

compiler-cli/src/dependencies.rs

Lines changed: 7 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -220,8 +220,13 @@ pub fn outdated(paths: &ProjectPaths) -> Result<()> {
220220
let runtime = tokio::runtime::Runtime::new().expect("Unable to start Tokio async runtime");
221221
let package_fetcher = PackageFetcher::new(runtime.handle().clone());
222222

223-
// compiler-core/src/dependency.rs:118-130
224-
todo!();
223+
let version_updates = dependency::check_for_version_updates(&manifest, &package_fetcher);
224+
225+
226+
println!("Package\tCurrent\tLatest");
227+
for (package_name, (current_version, latest_version)) in version_updates {
228+
println!("{}\tv{}\tv{}", package_name, current_version, latest_version);
229+
}
225230

226231
Ok(())
227232
}

compiler-core/src/dependency.rs

Lines changed: 33 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -119,14 +119,45 @@ fn resolve_all_versions(
119119
package_fetcher: &impl PackageFetcher,
120120
versions: PackageVersions,
121121
) -> PackageVersionDiffs {
122-
todo!()
122+
versions
123+
.iter()
124+
.filter_map(|(package, version)| {
125+
let Ok(hexpackage) = package_fetcher.get_dependencies(package) else {
126+
return None;
127+
};
128+
129+
let latest = hexpackage
130+
.releases
131+
.iter()
132+
.map(|release| &release.version)
133+
.filter(|version| !version.is_pre())
134+
.max()?;
135+
136+
if latest <= version {
137+
return None;
138+
}
139+
140+
Some((package.to_string(), (version.clone(), latest.clone())))
141+
})
142+
.collect()
123143
}
124144

125145
pub fn check_for_version_updates(
126146
manifest: &manifest::Manifest,
127147
package_fetcher: &impl PackageFetcher,
128148
) -> PackageVersionDiffs {
129-
todo!()
149+
// get all hex packages from the manifest
150+
let versions = manifest
151+
.packages
152+
.iter()
153+
.filter(|manifest_package| {
154+
// only check for version updates for hex packages
155+
matches!(manifest_package.source, manifest::ManifestPackageSource::Hex { .. })
156+
})
157+
.map(|manifest_pkg| (manifest_pkg.name.to_string(), manifest_pkg.version.clone()))
158+
.collect();
159+
160+
resolve_all_versions(package_fetcher, versions)
130161
}
131162

132163
// If the string would parse to an exact version then return the version

0 commit comments

Comments
 (0)