diff --git a/src/distro_info.rs b/src/distro_info.rs index 94b88e3..b0a6b20 100644 --- a/src/distro_info.rs +++ b/src/distro_info.rs @@ -220,18 +220,24 @@ pub async fn get_ordered_series_name(dist: &str) -> Result, Box Result> { if !is_unreleased(series) { return Ok(series.to_string()); } - get_ordered_series_name(dist) + // The series data keys are lowercase, unlike the vendor names that + // callers typically resolve from dpkg + let dist = dist.to_lowercase(); + + get_ordered_series_name(&dist) .await? .into_iter() .next() - .ok_or_else(|| format!("Distribution '{}' has no series to target", dist).into()) + .ok_or_else(|| format!("Distribution '{dist}' has no series to target").into()) } /// Get the latest released series for a dist (excluding future releases and special cases like sid) @@ -587,6 +593,21 @@ mod tests { } } + #[tokio::test] + async fn test_effective_series_unreleased_dist_case_insensitive() { + // Distro data keys are lowercase but dpkg vendors keep original + // casing ("Ubuntu"): the UNRELEASED lookup must resolve both + let expected = effective_series(UNRELEASED, "ubuntu").await.unwrap(); + assert_eq!( + effective_series(UNRELEASED, "Ubuntu").await.unwrap(), + expected + ); + assert_eq!( + effective_series(UNRELEASED, "UBUNTU").await.unwrap(), + expected + ); + } + #[tokio::test] async fn test_effective_series_unknown_dist() { // UNRELEASED on an unknown distribution cannot be resolved diff --git a/src/main.rs b/src/main.rs index 6c245b5..5bee718 100644 --- a/src/main.rs +++ b/src/main.rs @@ -206,7 +206,9 @@ fn main() { // its own distribution. match rt.block_on(async { if pkh::distro_info::is_unreleased(¤t_series) { - let dist = pkh::build::env::current_vendor(); + // Vendors keep original casing ("Ubuntu"), + // while the series data keys are lowercase + let dist = pkh::build::env::current_vendor().to_lowercase(); let mut series_list = vec![pkh::distro_info::UNRELEASED.to_string()]; series_list.extend(