chlog: number Ubuntu backports with the per-release SRU scheme
--backport was Debian-only: ~bpo is backports.debian.org's scheme and its number the Debian release, so Ubuntu targets were rejected outright. Ubuntu backports have their own documented scheme (Ubuntu version- strings): the development release's version with a per-release ~YY.MM.1 appended, sorting before it (3.1-1ubuntu2 backported to 22.04 becomes 3.1-1ubuntu2~22.04.1; native 3.1 becomes 3.1~22.04.1) and independent of the version the target release carries. The .N increments for subsequent per-release SRU uploads. backport_series_number becomes backport_suffix_for_series: the release number comes from the new generic get_series_release_number (version column of the target series' own distro-info data, leading token kept — "12" for bookworm, "26.04" out of resolute's "26.04 LTS"; empty column as on sid/experimental means None), and the suffix is picked per vendor: ~bpoNN+ for Debian (plain integer releases only), ~YY.MM. for Ubuntu. Unnumbered series still error before anything is written. Also serialize the changelog tests that mutate the process-global DEBFULLNAME/DEBEMAIL variables behind a tokio Mutex: run in parallel they raced each other's identity reads, which started failing intermittently as generate_entry tests accumulated.
This commit is contained in:
@@ -712,6 +712,30 @@ pub async fn get_debian_series_number(series: &str) -> Result<Option<String>, Bo
|
||||
Ok(None)
|
||||
}
|
||||
|
||||
/// The release number of a distribution series, paired with the dist it
|
||||
/// belongs to: the version column of the series data, stripped to its
|
||||
/// leading token ("12" for Debian bookworm, "26.04" out of Ubuntu
|
||||
/// resolute's "26.04 LTS"). `None` when the series carries no version at
|
||||
/// all (Debian's rolling sid/experimental have an empty column;
|
||||
/// pseudo-versions like "unstable" pass through, callers validate per
|
||||
/// vendor). Errors when no known distribution carries the series.
|
||||
pub async fn get_series_release_number(
|
||||
series: &str,
|
||||
) -> Result<Option<(String, String)>, Box<dyn Error>> {
|
||||
let dist = get_dist_from_series(series).await?;
|
||||
for info in get_ordered_series(&dist).await? {
|
||||
if info.series == series {
|
||||
let number = info
|
||||
.version
|
||||
.as_deref()
|
||||
.and_then(|version| version.split_whitespace().next())
|
||||
.map(str::to_string);
|
||||
return Ok(number.map(|number| (dist, number)));
|
||||
}
|
||||
}
|
||||
Ok(None)
|
||||
}
|
||||
|
||||
#[cfg(test)]
|
||||
mod tests {
|
||||
use super::*;
|
||||
@@ -1033,6 +1057,25 @@ mod tests {
|
||||
assert!(unknown_number.is_none());
|
||||
}
|
||||
|
||||
#[tokio::test]
|
||||
async fn test_get_series_release_number() {
|
||||
let (dist, bookworm) = get_series_release_number("bookworm")
|
||||
.await
|
||||
.unwrap()
|
||||
.unwrap();
|
||||
assert_eq!(dist, "debian");
|
||||
assert_eq!(bookworm, "12");
|
||||
|
||||
// Ubuntu LTS rows carry a " LTS" decoration: only the leading
|
||||
// YY.MM token is the release number
|
||||
let (dist, noble) = get_series_release_number("noble").await.unwrap().unwrap();
|
||||
assert_eq!(dist, "ubuntu");
|
||||
assert_eq!(noble, "24.04");
|
||||
|
||||
// No known dist carries the series
|
||||
assert!(get_series_release_number("not-a-series").await.is_err());
|
||||
}
|
||||
|
||||
#[tokio::test]
|
||||
async fn test_get_keyring_urls_sid() {
|
||||
// Test that 'sid' returns keyrings from the 3 latest released versions
|
||||
|
||||
Reference in New Issue
Block a user