From 5b6fa0bcede4c9bb48536295d262ef74793a5368 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Alexander=20Kj=C3=A4ll?= Date: Sat, 13 Jan 2024 23:47:28 +0100 Subject: [PATCH 1/2] It seems like Jonas Smedegaard have started to upload source package without semver compatible version numbers. If we encounter such a version number, try to pad it with '.0' so that it becomes compatible. One example is: https://ftp-master.debian.org/new/rust-curve25519-dalek_4+20231122+dfsg-2.html That has version number: 4+20231122+dfsg-2 --- src/db.rs | 24 ++++++++++++++++++++++-- 1 file changed, 22 insertions(+), 2 deletions(-) diff --git a/src/db.rs b/src/db.rs index b2a8d37..dea2e61 100644 --- a/src/db.rs +++ b/src/db.rs @@ -30,7 +30,22 @@ pub struct CacheEntry { } fn is_compatible(debversion: &str, crateversion: &VersionReq) -> Result { - let debversion = debversion.replace('~', "-"); + let mut debversion = debversion.replace('~', "-"); + if debversion.contains('+') { + let parts: Vec<&str> = debversion.split('+').collect(); + debversion = match parts[0].matches('.').count() { + 0 => { + format!("{}.0.0", parts[0]) + } + 1 => { + format!("{}.0", parts[0]) + } + 2 => parts[0].to_owned(), + _ => { + return Err(anyhow!("wrong number of '.' characters in semver string")); + } + }; + } let debversion = Version::parse(&debversion)?; Ok(crateversion.matches(&debversion)) @@ -183,7 +198,7 @@ impl Connection { _ => &debversion, }; - // println!("{:?} ({:?}) => {:?}", debversion, version, is_compatible(debversion, version)?); + //println!("{:?} ({:?}) => {:?}", debversion, version, is_compatible(debversion, &version)); if is_compatible(debversion, &version)? { info.version = debversion.to_string(); @@ -216,6 +231,11 @@ mod tests { .unwrap()); } + #[test] + fn is_compatible_with_plus() { + assert!(is_compatible("4+20231122+dfsg", &VersionReq::parse("4.0.0").unwrap()).unwrap()); + } + #[test] fn is_compatible_follows_semver() { assert!(is_compatible("0.1.1", &VersionReq::parse("0.1.0").unwrap()).unwrap()); From 6bf66b02f6773ce7cf9505aae9f8e2d9219b0153 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Alexander=20Kj=C3=A4ll?= Date: Mon, 15 Jan 2024 21:23:37 +0100 Subject: [PATCH 2/2] review feedback --- src/db.rs | 19 ++++++------------- 1 file changed, 6 insertions(+), 13 deletions(-) diff --git a/src/db.rs b/src/db.rs index dea2e61..c5f3166 100644 --- a/src/db.rs +++ b/src/db.rs @@ -31,19 +31,12 @@ pub struct CacheEntry { fn is_compatible(debversion: &str, crateversion: &VersionReq) -> Result { let mut debversion = debversion.replace('~', "-"); - if debversion.contains('+') { - let parts: Vec<&str> = debversion.split('+').collect(); - debversion = match parts[0].matches('.').count() { - 0 => { - format!("{}.0.0", parts[0]) - } - 1 => { - format!("{}.0", parts[0]) - } - 2 => parts[0].to_owned(), - _ => { - return Err(anyhow!("wrong number of '.' characters in semver string")); - } + if let Some((version, _suffix)) = debversion.split_once('+') { + debversion = match version.matches('.').count() { + 0 => format!("{version}.0.0"), + 1 => format!("{version}.0"), + 2 => version.to_owned(), + _ => bail!("wrong number of '.' characters in semver string: {version:?}"), }; } let debversion = Version::parse(&debversion)?;