pull: split into package_info::lookup and pull
Some checks failed
CI / build (push) Failing after 1m47s
Some checks failed
CI / build (push) Failing after 1m47s
This commit is contained in:
72
src/pull.rs
72
src/pull.rs
@@ -2,7 +2,6 @@ use std::cmp::min;
|
||||
use std::error::Error;
|
||||
use std::path::Path;
|
||||
|
||||
use crate::package_info;
|
||||
use crate::package_info::PackageInfo;
|
||||
|
||||
use std::process::Command;
|
||||
@@ -333,64 +332,18 @@ async fn fetch_archive_sources(
|
||||
Ok(())
|
||||
}
|
||||
|
||||
/// Pull a source package locally
|
||||
/// Pull a source package locally using pre-retrieved package information
|
||||
///
|
||||
/// Will try to find the package information, and use it to download it over prefered way
|
||||
/// (either git or direct archive download), as well as orig tarball, inside 'package' directory
|
||||
/// The source will be extracted under 'package/package'
|
||||
/// This function takes a PackageInfo struct and downloads the package using the preferred method
|
||||
/// (either git or direct archive download), as well as orig tarball, inside 'package' directory.
|
||||
/// The source will be extracted under 'package/package'.
|
||||
pub async fn pull(
|
||||
package: &str,
|
||||
_version: &str,
|
||||
package_info: &PackageInfo,
|
||||
series: Option<&str>,
|
||||
pocket: &str,
|
||||
_ppa: &str,
|
||||
dist: Option<&str>,
|
||||
cwd: Option<&Path>,
|
||||
progress: ProgressCallback<'_>,
|
||||
) -> Result<PackageInfo, Box<dyn Error>> {
|
||||
let version_opt = if _version.is_empty() {
|
||||
None
|
||||
} else {
|
||||
Some(_version)
|
||||
};
|
||||
|
||||
/* Obtain the package information, either directly in a series or with a search in all series */
|
||||
let package_info = if let Some(s) = series {
|
||||
if let Some(cb) = progress {
|
||||
cb(
|
||||
&format!("Resolving package info for {}...", package),
|
||||
"",
|
||||
0,
|
||||
0,
|
||||
);
|
||||
}
|
||||
|
||||
// Get the package information from that series and pocket
|
||||
package_info::get(package, s, pocket, version_opt).await?
|
||||
} else {
|
||||
let dist = dist.unwrap_or_else(||
|
||||
// Use auto-detection to see if current distro is ubuntu, or fallback to debian by default
|
||||
if std::process::Command::new("lsb_release").arg("-i").arg("-s").output()
|
||||
.map(|o| String::from_utf8_lossy(&o.stdout).trim().to_lowercase()).unwrap_or_default() == "ubuntu" {
|
||||
"ubuntu"
|
||||
} else {
|
||||
"debian"
|
||||
}
|
||||
);
|
||||
|
||||
if let Some(cb) = progress {
|
||||
cb(
|
||||
&format!("Searching for package {} in {}...", package, dist),
|
||||
"",
|
||||
0,
|
||||
0,
|
||||
);
|
||||
}
|
||||
|
||||
// Try to find the package in all series from that dist
|
||||
package_info::find_package(package, dist, pocket, version_opt, progress).await?
|
||||
};
|
||||
|
||||
) -> Result<(), Box<dyn Error>> {
|
||||
let package = &package_info.stanza.package;
|
||||
let package_dir = if let Some(path) = cwd {
|
||||
path.join(package)
|
||||
} else {
|
||||
@@ -446,7 +399,7 @@ pub async fn pull(
|
||||
if let Some(cb) = progress {
|
||||
cb("Fetching orig tarball...", "", 0, 0);
|
||||
}
|
||||
fetch_orig_tarball(&package_info, Some(&package_dir), progress).await?;
|
||||
fetch_orig_tarball(package_info, Some(&package_dir), progress).await?;
|
||||
} else {
|
||||
debug!("Native package, skipping orig tarball fetch.");
|
||||
}
|
||||
@@ -454,16 +407,16 @@ pub async fn pull(
|
||||
if let Some(cb) = progress {
|
||||
cb("Fetching dsc file...", "", 0, 0);
|
||||
}
|
||||
fetch_dsc_file(&package_info, Some(&package_dir), progress).await?;
|
||||
fetch_dsc_file(package_info, Some(&package_dir), progress).await?;
|
||||
} else {
|
||||
// Fallback to archive fetching
|
||||
if let Some(cb) = progress {
|
||||
cb("Downloading from archive...", "", 0, 0);
|
||||
}
|
||||
fetch_archive_sources(&package_info, Some(&package_dir), progress).await?;
|
||||
fetch_archive_sources(package_info, Some(&package_dir), progress).await?;
|
||||
}
|
||||
|
||||
Ok(package_info)
|
||||
Ok(())
|
||||
}
|
||||
|
||||
#[cfg(test)]
|
||||
@@ -482,9 +435,10 @@ mod tests {
|
||||
let cwd = temp_dir.path();
|
||||
|
||||
// Main 'pull' command: the one we want to test
|
||||
let info = pull(package, "", series, "", "", dist, Some(cwd), None)
|
||||
let info = crate::package_info::lookup(package, None, series, "", dist, None)
|
||||
.await
|
||||
.unwrap();
|
||||
pull(&info, series, Some(cwd), None).await.unwrap();
|
||||
|
||||
let package_dir = cwd.join(package);
|
||||
assert!(package_dir.exists());
|
||||
|
||||
Reference in New Issue
Block a user