This commit is contained in:
@@ -204,7 +204,7 @@ fn get_commits_since_version(
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
return Ok(commits);
|
Ok(commits)
|
||||||
}
|
}
|
||||||
|
|
||||||
/*
|
/*
|
||||||
@@ -242,7 +242,7 @@ fn format_entry(
|
|||||||
maintainer_name, maintainer_email, date
|
maintainer_name, maintainer_email, date
|
||||||
));
|
));
|
||||||
|
|
||||||
return entry;
|
entry
|
||||||
}
|
}
|
||||||
|
|
||||||
/*
|
/*
|
||||||
|
|||||||
20
src/get.rs
20
src/get.rs
@@ -72,10 +72,10 @@ fn clone_repo(
|
|||||||
builder.branch(b);
|
builder.branch(b);
|
||||||
}
|
}
|
||||||
|
|
||||||
return match builder.clone(url, &target_path) {
|
match builder.clone(url, &target_path) {
|
||||||
Ok(_repo) => Ok(()),
|
Ok(_repo) => Ok(()),
|
||||||
Err(e) => Err(format!("Failed to clone: {}", e).into()),
|
Err(e) => Err(format!("Failed to clone: {}", e).into()),
|
||||||
};
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
use sha2::{Digest, Sha256};
|
use sha2::{Digest, Sha256};
|
||||||
@@ -109,7 +109,7 @@ fn extract_archive(path: &Path, dest: &Path) -> Result<(), Box<dyn Error>> {
|
|||||||
fn checkout_pristine_tar(package_dir: &Path, filename: &str) -> Result<(), Box<dyn Error>> {
|
fn checkout_pristine_tar(package_dir: &Path, filename: &str) -> Result<(), Box<dyn Error>> {
|
||||||
let output = Command::new("pristine-tar")
|
let output = Command::new("pristine-tar")
|
||||||
.current_dir(package_dir)
|
.current_dir(package_dir)
|
||||||
.args(&["checkout", format!("../{filename}").as_str()])
|
.args(["checkout", format!("../{filename}").as_str()])
|
||||||
.output()
|
.output()
|
||||||
.expect("pristine-tar checkout failed");
|
.expect("pristine-tar checkout failed");
|
||||||
|
|
||||||
@@ -154,7 +154,7 @@ async fn download_file_checksum(
|
|||||||
hasher.update(&chunk);
|
hasher.update(&chunk);
|
||||||
|
|
||||||
if let Some(cb) = progress {
|
if let Some(cb) = progress {
|
||||||
index = min(index + &chunk.len(), total_size as usize);
|
index = min(index + chunk.len(), total_size as usize);
|
||||||
cb("", "Downloading...", index, total_size as usize);
|
cb("", "Downloading...", index, total_size as usize);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@@ -188,8 +188,9 @@ fn setup_pristine_tar_branch(package_dir: &Path, dist: &str) -> Result<(), Box<d
|
|||||||
let branches = repo.branches(Some(git2::BranchType::Remote))?;
|
let branches = repo.branches(Some(git2::BranchType::Remote))?;
|
||||||
for branch_result in branches {
|
for branch_result in branches {
|
||||||
let (branch, _) = branch_result?;
|
let (branch, _) = branch_result?;
|
||||||
if let Some(name) = branch.name()? {
|
if let Some(name) = branch.name()?
|
||||||
if name.ends_with(&format!("/{dist}/pristine-tar")) {
|
&& name.ends_with(&format!("/{dist}/pristine-tar"))
|
||||||
|
{
|
||||||
debug!("Found remote pristine-tar branch: {}", name);
|
debug!("Found remote pristine-tar branch: {}", name);
|
||||||
|
|
||||||
let commit = branch.get().peel_to_commit()?;
|
let commit = branch.get().peel_to_commit()?;
|
||||||
@@ -204,7 +205,6 @@ fn setup_pristine_tar_branch(package_dir: &Path, dist: &str) -> Result<(), Box<d
|
|||||||
return Ok(());
|
return Ok(());
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
|
||||||
|
|
||||||
debug!("No remote pristine-tar branch found.");
|
debug!("No remote pristine-tar branch found.");
|
||||||
Ok(())
|
Ok(())
|
||||||
@@ -287,11 +287,11 @@ async fn fetch_archive_sources(
|
|||||||
let path = package_dir.join(&file.name);
|
let path = package_dir.join(&file.name);
|
||||||
let extract_dir = package_dir.join(&info.stanza.package);
|
let extract_dir = package_dir.join(&info.stanza.package);
|
||||||
|
|
||||||
if file.name.ends_with(".tar.xz") || file.name.ends_with(".tar.gz") {
|
if (file.name.ends_with(".tar.xz") || file.name.ends_with(".tar.gz"))
|
||||||
if let Err(e) = extract_archive(&path, &extract_dir) {
|
&& let Err(e) = extract_archive(&path, &extract_dir)
|
||||||
|
{
|
||||||
return Err(format!("Failed to extract {}: {}", file.name, e).into());
|
return Err(format!("Failed to extract {}: {}", file.name, e).into());
|
||||||
}
|
}
|
||||||
}
|
|
||||||
|
|
||||||
// Remove archive after extraction
|
// Remove archive after extraction
|
||||||
std::fs::remove_file(&path)?;
|
std::fs::remove_file(&path)?;
|
||||||
|
|||||||
@@ -67,7 +67,7 @@ fn main() {
|
|||||||
.unwrap_or("");
|
.unwrap_or("");
|
||||||
|
|
||||||
// Since get is async, we need to block on it
|
// Since get is async, we need to block on it
|
||||||
let (pb, mut progress_callback) = ui::create_progress_bar(&multi);
|
let (pb, progress_callback) = ui::create_progress_bar(&multi);
|
||||||
|
|
||||||
if let Err(e) = rt.block_on(get(
|
if let Err(e) = rt.block_on(get(
|
||||||
package,
|
package,
|
||||||
@@ -77,7 +77,7 @@ fn main() {
|
|||||||
ppa,
|
ppa,
|
||||||
dist,
|
dist,
|
||||||
None,
|
None,
|
||||||
Some(&mut progress_callback),
|
Some(&progress_callback),
|
||||||
)) {
|
)) {
|
||||||
pb.finish_and_clear();
|
pb.finish_and_clear();
|
||||||
error!("{}", e);
|
error!("{}", e);
|
||||||
@@ -99,7 +99,7 @@ fn main() {
|
|||||||
let editor = std::env::var("EDITOR").unwrap();
|
let editor = std::env::var("EDITOR").unwrap();
|
||||||
let _status = std::process::Command::new(editor)
|
let _status = std::process::Command::new(editor)
|
||||||
.current_dir(&cwd)
|
.current_dir(&cwd)
|
||||||
.args(&["debian/changelog"])
|
.args(["debian/changelog"])
|
||||||
.status();
|
.status();
|
||||||
}
|
}
|
||||||
_ => unreachable!("Exhausted list of subcommands and subcommand_required prevents `None`"),
|
_ => unreachable!("Exhausted list of subcommands and subcommand_required prevents `None`"),
|
||||||
|
|||||||
@@ -43,12 +43,12 @@ fn parse_series_csv(content: &str) -> Result<Vec<String>, Box<dyn Error>> {
|
|||||||
let mut entries = Vec::new();
|
let mut entries = Vec::new();
|
||||||
for result in rdr.records() {
|
for result in rdr.records() {
|
||||||
let record = result?;
|
let record = result?;
|
||||||
if let (Some(s), Some(c)) = (record.get(series_idx), record.get(created_idx)) {
|
if let (Some(s), Some(c)) = (record.get(series_idx), record.get(created_idx))
|
||||||
if let Ok(date) = NaiveDate::parse_from_str(c, "%Y-%m-%d") {
|
&& let Ok(date) = NaiveDate::parse_from_str(c, "%Y-%m-%d")
|
||||||
|
{
|
||||||
entries.push((s.to_string(), date));
|
entries.push((s.to_string(), date));
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
|
||||||
|
|
||||||
// Sort by date descending (newest first)
|
// Sort by date descending (newest first)
|
||||||
entries.sort_by(|a, b| b.1.cmp(&a.1));
|
entries.sort_by(|a, b| b.1.cmp(&a.1));
|
||||||
@@ -186,15 +186,15 @@ async fn get_components(
|
|||||||
let content = reqwest::get(&url).await?.text().await?;
|
let content = reqwest::get(&url).await?.text().await?;
|
||||||
|
|
||||||
for line in content.lines() {
|
for line in content.lines() {
|
||||||
if line.starts_with("Components:") {
|
if line.starts_with("Components:")
|
||||||
if let Some((_, components)) = line.split_once(':') {
|
&& let Some((_, components)) = line.split_once(':')
|
||||||
|
{
|
||||||
return Ok(components
|
return Ok(components
|
||||||
.split_whitespace()
|
.split_whitespace()
|
||||||
.map(|s| s.to_string())
|
.map(|s| s.to_string())
|
||||||
.collect());
|
.collect());
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
|
||||||
|
|
||||||
Err("Components not found.".into())
|
Err("Components not found.".into())
|
||||||
}
|
}
|
||||||
@@ -233,8 +233,9 @@ fn parse_sources(
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
if let Some(pkg) = fields.get("Package") {
|
if let Some(pkg) = fields.get("Package")
|
||||||
if pkg == target_package {
|
&& pkg == target_package
|
||||||
|
{
|
||||||
// Check version if requested
|
// Check version if requested
|
||||||
if let Some(ver) = target_version {
|
if let Some(ver) = target_version {
|
||||||
if let Some(pkg_ver) = fields.get("Version") {
|
if let Some(pkg_ver) = fields.get("Version") {
|
||||||
@@ -270,7 +271,6 @@ fn parse_sources(
|
|||||||
}));
|
}));
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
|
||||||
|
|
||||||
Ok(None)
|
Ok(None)
|
||||||
}
|
}
|
||||||
@@ -286,12 +286,12 @@ pub async fn get(
|
|||||||
// Handle Ubuntu case: Vcs-Git does not usually point to Launchpad but Salsa
|
// Handle Ubuntu case: Vcs-Git does not usually point to Launchpad but Salsa
|
||||||
// We need to check manually if there is a launchpad repository for the package
|
// We need to check manually if there is a launchpad repository for the package
|
||||||
let mut preferred_vcs = None;
|
let mut preferred_vcs = None;
|
||||||
if dist == "ubuntu" {
|
if dist == "ubuntu"
|
||||||
if let Some(lp_url) = check_launchpad_repo(package_name).await? {
|
&& let Some(lp_url) = check_launchpad_repo(package_name).await?
|
||||||
|
{
|
||||||
debug!("Found Launchpad URL: {}", lp_url);
|
debug!("Found Launchpad URL: {}", lp_url);
|
||||||
preferred_vcs = Some(lp_url);
|
preferred_vcs = Some(lp_url);
|
||||||
}
|
}
|
||||||
}
|
|
||||||
|
|
||||||
let base_url = get_base_url(&dist);
|
let base_url = get_base_url(&dist);
|
||||||
|
|
||||||
@@ -324,19 +324,19 @@ pub async fn get(
|
|||||||
);
|
);
|
||||||
|
|
||||||
if let Some(stanza) = parse_sources(&compressed_data, package_name, version)? {
|
if let Some(stanza) = parse_sources(&compressed_data, package_name, version)? {
|
||||||
if let Some(vcs) = &stanza.vcs_git {
|
if let Some(vcs) = &stanza.vcs_git
|
||||||
if preferred_vcs.is_none() {
|
&& preferred_vcs.is_none()
|
||||||
|
{
|
||||||
preferred_vcs = Some(vcs.clone());
|
preferred_vcs = Some(vcs.clone());
|
||||||
}
|
}
|
||||||
}
|
|
||||||
|
|
||||||
let archive_url = format!("{base_url}/{0}", stanza.directory);
|
let archive_url = format!("{base_url}/{0}", stanza.directory);
|
||||||
return Ok(PackageInfo {
|
return Ok(PackageInfo {
|
||||||
dist: dist,
|
dist,
|
||||||
series: series.to_string(),
|
series: series.to_string(),
|
||||||
stanza: stanza,
|
stanza,
|
||||||
preferred_vcs: preferred_vcs,
|
preferred_vcs,
|
||||||
archive_url: archive_url,
|
archive_url,
|
||||||
});
|
});
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
Reference in New Issue
Block a user