From df83a6aedddc08880902986c603c8b6302603bec Mon Sep 17 00:00:00 2001 From: Kent Ross Date: Sat, 8 Mar 2025 20:23:47 -0800 Subject: [PATCH] fix bincode versioning (#105) * properly space datetime in the benchmark output file names * when we bench multiple versions of the same crate, make it possible to look them up by semver from the config * suppress a cargo-metadata warning by specifying the format --- Cargo.toml | 1 + tools/bencher/src/main.rs | 16 ++++++++-------- tools/config.json | 4 ++-- tools/parser/Cargo.toml | 1 + tools/parser/src/main.rs | 29 +++++++++++++++++++++++++---- 5 files changed, 37 insertions(+), 14 deletions(-) diff --git a/Cargo.toml b/Cargo.toml index 9b2fbd1..6ff57e1 100644 --- a/Cargo.toml +++ b/Cargo.toml @@ -21,6 +21,7 @@ enum-iterator = "0.8" fixed-map = { version = "0.9", default-features = false } regex = "1.11" schema = { path = "tools/schema" } +semver = "1.0.26" serde = "1.0" serde_json = "1.0" stylist = { version = "0.12", default-features = false } diff --git a/tools/bencher/src/main.rs b/tools/bencher/src/main.rs index 33dfb70..4a0d374 100644 --- a/tools/bencher/src/main.rs +++ b/tools/bencher/src/main.rs @@ -8,7 +8,7 @@ fn main() { let metadata_path = NamedTempFile::new().unwrap().into_temp_path(); let metadata = Command::new("cargo") - .args(["metadata"]) + .args(["metadata", "--format-version", "1"]) .output() .unwrap() .stdout; @@ -32,13 +32,13 @@ fn main() { let mut bench_path = PathBuf::from("benchmark_results"); bench_path.push(format!( - "{}-{}-{}_{}-{}-{}", - now.year(), - now.month() as usize, - now.day(), - now.hour(), - now.minute(), - now.second(), + "{yr}-{mon:02}-{day:02}_{hr:02}-{min:02}-{sec:02}", + yr = now.year(), + mon = now.month() as usize, + day = now.day(), + hr = now.hour(), + min = now.minute(), + sec = now.second(), )); let mut log_path = bench_path.clone(); diff --git a/tools/config.json b/tools/config.json index a7aef8e..667a5fd 100644 --- a/tools/config.json +++ b/tools/config.json @@ -19,11 +19,11 @@ "features": { "bincode1": { "name": "bincode", - "version": "1.3.3" + "version": "1" }, "bincode": { "name": "bincode", - "version": "2.0.0-rc" + "version": "2" } } } diff --git a/tools/parser/Cargo.toml b/tools/parser/Cargo.toml index 049f006..69a92b8 100644 --- a/tools/parser/Cargo.toml +++ b/tools/parser/Cargo.toml @@ -11,5 +11,6 @@ cargo_metadata.workspace = true clap = { workspace = true, features = ["derive"] } regex.workspace = true schema.workspace = true +semver.workspace = true serde = { workspace = true, features = ["derive"] } serde_json.workspace = true diff --git a/tools/parser/src/main.rs b/tools/parser/src/main.rs index 95815d7..073413f 100644 --- a/tools/parser/src/main.rs +++ b/tools/parser/src/main.rs @@ -115,20 +115,41 @@ fn main() { fn find_package_id(feature: &str, config: &Config, metadata: &Metadata) -> PackageId { if let Some(package_id) = config.features.get(feature) { - package_id.clone() + PackageId { + name: package_id.name.clone(), + version: find_package_version( + &package_id.name, + Some( + package_id + .version + .parse() + .expect("invalid version spec in config"), + ), + metadata, + ), + } } else { PackageId { name: feature.to_string(), - version: find_package_version(feature, metadata), + version: find_package_version(feature, None, metadata), } } } -fn find_package_version(name: &str, metadata: &Metadata) -> String { +fn find_package_version( + name: &str, + version_req: Option, + metadata: &Metadata, +) -> String { metadata .packages .iter() - .find(|pkg| pkg.name == name) + .find(|pkg| { + pkg.name == name + && version_req + .as_ref() + .map_or(true, |req| req.matches(&pkg.version)) + }) .unwrap() .version .to_string()