[pve-devel] [PATCH proxmox-offline-mirror 2/4] mirror: skip failed, non Packages references

Fabian Grünbichler f.gruenbichler at proxmox.com
Thu Sep 15 15:09:14 CEST 2022


these contain extra data that is not that important for the main
repository use case - providing deb packages.

if they are not retrievable (e.g., Ubuntu *only* provides some of they
via by-hash, which proxmox-offline-mirror doesn't yet support) a warning
should be enough, instead of failing the whole snapshot creation.

Signed-off-by: Fabian Grünbichler <f.gruenbichler at proxmox.com>
---
 src/mirror.rs | 20 +++++++++++++++++++-
 1 file changed, 19 insertions(+), 1 deletion(-)

diff --git a/src/mirror.rs b/src/mirror.rs
index 14b0c6a..f910e6a 100644
--- a/src/mirror.rs
+++ b/src/mirror.rs
@@ -534,6 +534,7 @@ pub fn create_snapshot(
 
     let mut packages_size = 0_usize;
     let mut packages_indices = HashMap::new();
+    let mut failed_references = Vec::new();
     for (component, references) in per_component {
         println!("\nFetching indices for component '{component}'");
         let mut component_deb_size = 0;
@@ -555,7 +556,18 @@ pub fn create_snapshot(
                 }
 
                 // this will ensure the uncompressed file will be written locally
-                let res = fetch_index_file(&config, prefix, reference, uncompressed_ref)?;
+                let res = match fetch_index_file(&config, prefix, reference, uncompressed_ref) {
+                    Ok(res) => res,
+                    Err(err) if !reference.file_type.is_package_index() => {
+                        eprintln!(
+                            "Failed to fetch '{:?}' type reference '{}', skipping - {err}",
+                            reference.file_type, reference.path
+                        );
+                        failed_references.push(reference);
+                        continue;
+                    }
+                    Err(err) => bail!(err),
+                };
                 fetch_progress.update(&res);
 
                 if package_index_data.is_none() && reference.file_type.is_package_index() {
@@ -577,6 +589,12 @@ pub fn create_snapshot(
         total_progress += fetch_progress;
     }
     println!("Total deb size: {packages_size}");
+    if !failed_references.is_empty() {
+        eprintln!("Failed to download non-package-index references:");
+        for reference in failed_references {
+            eprintln!("\t{}", reference.path);
+        }
+    }
 
     println!("\nFetching packages..");
     for (basename, references) in packages_indices {
-- 
2.30.2






More information about the pve-devel mailing list