diff --git a/src/distro_info.rs b/src/distro_info.rs index 7665e5a..8ba44fc 100644 --- a/src/distro_info.rs +++ b/src/distro_info.rs @@ -135,11 +135,23 @@ pub async fn get_keyring_url(series: &str) -> Result> { // For Debian, we need the series number to form the keyring URL if dist == "debian" { - let series_num = get_debian_series_number(series).await?.unwrap(); - // Replace {series_num} placeholder with the actual series number - Ok(dist_data - .archive_keyring - .replace("{series_num}", &series_num)) + // Special case for 'sid' - use the latest version + if series == "sid" { + let latest_series = get_ordered_series("debian").await?; + // Get the first non-sid series (which should be the latest stable) + let latest_stable = latest_series.iter().find(|&s| s != "sid").unwrap(); + let series_num = get_debian_series_number(latest_stable).await?.unwrap(); + // Replace {series_num} placeholder with the latest stable series number + Ok(dist_data + .archive_keyring + .replace("{series_num}", &series_num)) + } else { + let series_num = get_debian_series_number(series).await?.unwrap(); + // Replace {series_num} placeholder with the actual series number + Ok(dist_data + .archive_keyring + .replace("{series_num}", &series_num)) + } } else { // For other distributions like Ubuntu, use the keyring directly Ok(dist_data.archive_keyring.clone()) @@ -258,4 +270,16 @@ mod tests { let unknown_number = get_debian_series_number("unknown").await.unwrap(); assert!(unknown_number.is_none()); } + + #[tokio::test] + async fn test_get_keyring_url_sid() { + // Test that 'sid' uses the latest stable version for keyring URL + let sid_keyring = get_keyring_url("sid").await.unwrap(); + let latest_series = get_ordered_series("debian").await.unwrap(); + let latest_stable = latest_series.iter().find(|&s| s != "sid").unwrap(); + let latest_keyring = get_keyring_url(latest_stable).await.unwrap(); + + // The keyring URL for 'sid' should be the same as the latest stable version + assert_eq!(sid_keyring, latest_keyring); + } }