mirror of
https://github.com/Noratrieb/node-package-manager.git
synced 2026-01-14 15:45:03 +01:00
do semver magic
This commit is contained in:
parent
b6224e7252
commit
89913eb174
1 changed files with 28 additions and 7 deletions
35
src/main.rs
35
src/main.rs
|
|
@ -1,7 +1,11 @@
|
||||||
use std::fs;
|
use std::fs;
|
||||||
|
|
||||||
use color_eyre::{eyre::WrapErr, Result};
|
use color_eyre::{
|
||||||
use tracing::{debug, info, metadata::LevelFilter};
|
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 tracing_subscriber::{layer::SubscriberExt, util::SubscriberInitExt, EnvFilter, Registry};
|
||||||
|
|
||||||
use crate::{download::NpmClient, manifest::PackageJson};
|
use crate::{download::NpmClient, manifest::PackageJson};
|
||||||
|
|
@ -22,19 +26,36 @@ fn main() -> Result<()> {
|
||||||
|
|
||||||
let client = NpmClient::new();
|
let client = NpmClient::new();
|
||||||
|
|
||||||
for (name, _) in &manifest.dependencies.unwrap() {
|
for (name, requested_version) in &manifest.dependencies.unwrap() {
|
||||||
look_at_package(name, &client)?;
|
look_at_package(name, requested_version, &client).wrap_err(format!("package {name}"))?;
|
||||||
}
|
}
|
||||||
|
|
||||||
Ok(())
|
Ok(())
|
||||||
}
|
}
|
||||||
|
|
||||||
#[tracing::instrument(skip(client))]
|
#[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)?;
|
let meta = client.inspect_package(name)?;
|
||||||
|
|
||||||
for version in meta.versions.keys() {
|
info!(versions = ?meta.versions.keys());
|
||||||
info!(%version);
|
|
||||||
|
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(())
|
Ok(())
|
||||||
|
|
|
||||||
Loading…
Add table
Add a link
Reference in a new issue