do semver magic

This commit is contained in:
nora 2022-05-14 16:25:12 +02:00
parent b6224e7252
commit 89913eb174

View file

@ -1,7 +1,11 @@
use std::fs;
use color_eyre::{eyre::WrapErr, Result};
use tracing::{debug, info, metadata::LevelFilter};
use color_eyre::{
eyre::{bail, WrapErr},
Result,
};
use semver_rs::{Range, Version};
use tracing::{debug, info, metadata::LevelFilter, warn};
use tracing_subscriber::{layer::SubscriberExt, util::SubscriberInitExt, EnvFilter, Registry};
use crate::{download::NpmClient, manifest::PackageJson};
@ -22,19 +26,36 @@ fn main() -> Result<()> {
let client = NpmClient::new();
for (name, _) in &manifest.dependencies.unwrap() {
look_at_package(name, &client)?;
for (name, requested_version) in &manifest.dependencies.unwrap() {
look_at_package(name, requested_version, &client).wrap_err(format!("package {name}"))?;
}
Ok(())
}
#[tracing::instrument(skip(client))]
fn look_at_package(name: &str, client: &NpmClient) -> Result<()> {
fn look_at_package(name: &str, requested_version: &str, client: &NpmClient) -> Result<()> {
let requested = Range::new(requested_version).parse()?;
let meta = client.inspect_package(name)?;
for version in meta.versions.keys() {
info!(%version);
info!(versions = ?meta.versions.keys());
let mut versions = meta
.versions
.keys()
.map(|v| Ok((v, Version::new(v).parse()?)))
.collect::<Result<Vec<_>, semver_rs::Error>>()?;
versions.sort_by(|a, b| b.cmp(a));
let chosen = versions.iter().find(|(_, version)| requested.test(version));
match chosen {
Some((version, _)) => {
info!(?version, "Found version")
}
None => bail!("could not find matching version for '{requested_version}'"),
}
Ok(())