diff --git a/src/deb/mod.rs b/src/deb/mod.rs index 968c74d..6e3015c 100644 --- a/src/deb/mod.rs +++ b/src/deb/mod.rs @@ -129,7 +129,7 @@ mod tests { let package_info = crate::package_info::lookup(package, None, Some(series), "", dist, None) .await .expect("Cannot lookup package information"); - crate::pull::pull(&package_info, Some(series), Some(cwd), None) + crate::pull::pull(&package_info, Some(cwd), None) .await .expect("Cannot pull package"); log::info!("Successfully pulled package {}", package); diff --git a/src/main.rs b/src/main.rs index 6dde415..f137dd4 100644 --- a/src/main.rs +++ b/src/main.rs @@ -111,7 +111,7 @@ fn main() { Some(&progress_callback), ) .await?; - pkh::pull::pull(&package_info, series, None, Some(&progress_callback)).await + pkh::pull::pull(&package_info, None, Some(&progress_callback)).await }) { pb.finish_and_clear(); error!("{}", e); diff --git a/src/package_info.rs b/src/package_info.rs index 774f69b..3113523 100644 --- a/src/package_info.rs +++ b/src/package_info.rs @@ -56,7 +56,8 @@ fn parse_series_csv(content: &str) -> Result, Box> { Ok(entries.into_iter().map(|(s, _)| s).collect()) } -async fn get_ordered_series(dist: &str) -> Result, Box> { +/// Get time-ordered list of series for a distribution, development series first +pub async fn get_ordered_series(dist: &str) -> Result, Box> { let content = if Path::new(format!("/usr/share/distro-info/{dist}.csv").as_str()).exists() { std::fs::read_to_string(format!("/usr/share/distro-info/{dist}.csv"))? } else { @@ -71,9 +72,8 @@ async fn get_ordered_series(dist: &str) -> Result, Box> { let mut series = parse_series_csv(&content)?; - // For Debian, ensure 'sid' is first if it's not (it usually doesn't have a date or is very old/new depending on file) - // Actually in the file sid has 1993 date. - // But we want to try 'sid' (unstable) first for Debian. + // For Debian, ensure 'sid' is first if it's not + // We want to try 'sid' (unstable) first for Debian. if dist == "debian" { series.retain(|s| s != "sid"); series.insert(0, "sid".to_string()); diff --git a/src/pull.rs b/src/pull.rs index d59698a..cfbaa1e 100644 --- a/src/pull.rs +++ b/src/pull.rs @@ -339,11 +339,11 @@ async fn fetch_archive_sources( /// The source will be extracted under 'package/package'. pub async fn pull( package_info: &PackageInfo, - series: Option<&str>, cwd: Option<&Path>, progress: ProgressCallback<'_>, ) -> Result<(), Box> { let package = &package_info.stanza.package; + let series = &package_info.series; let package_dir = if let Some(path) = cwd { path.join(package) } else { @@ -355,11 +355,14 @@ pub async fn pull( // We have found a preferred VCS (git repository) for the package, so // we fetch the package from that repo. - // Depending on target series, we pick target branch; if no series is specified, + // Depending on target series, we pick target branch; if latest series is specified, // we target the development branch, i.e. the default branch - let branch_name = if let Some(s) = series { + let branch_name = if crate::package_info::get_ordered_series(package_info.dist.as_str()) + .await?[0] + != *series + { if package_info.dist == "ubuntu" { - Some(format!("{}/{}", package_info.dist, s)) + Some(format!("{}/{}", package_info.dist, series)) } else { // Debian does not have reliable branch naming... // For now, we skip that part and clone default @@ -438,7 +441,7 @@ mod tests { let info = crate::package_info::lookup(package, None, series, "", dist, None) .await .unwrap(); - pull(&info, series, Some(cwd), None).await.unwrap(); + pull(&info, Some(cwd), None).await.unwrap(); let package_dir = cwd.join(package); assert!(package_dir.exists());