[pbs-devel] [PATCH v6 proxmox-backup 52/65] client: pxar: opt encode cli exclude patterns as Prelude

Christian Ebner c.ebner at proxmox.com
Tue May 14 12:34:08 CEST 2024


Instead of encoding the pxar cli exclude patterns as regular file
within the root directory of an archive, store this information
directly after the pxar format version entry in the entry of kind
Prelude.

This behavior is however currently exclusive to the archives written
with format version 2 in a split metadata and payload case.

This is a breaking change for the encoding of new cli exclude
parameters. Any new exclude parameter will not be added to an already
present .pxar-cliexclude file, and it will not be created if not
present.

Signed-off-by: Christian Ebner <c.ebner at proxmox.com>
---
 pbs-client/src/pxar/create.rs | 29 ++++++++++++++++++-----------
 1 file changed, 18 insertions(+), 11 deletions(-)

diff --git a/pbs-client/src/pxar/create.rs b/pbs-client/src/pxar/create.rs
index 153c71349..19f2349fa 100644
--- a/pbs-client/src/pxar/create.rs
+++ b/pbs-client/src/pxar/create.rs
@@ -235,16 +235,6 @@ where
         set.insert(stat.st_dev);
     }
 
-    let metadata_mode = options.previous_ref.is_some() && writers.payload_writer.is_some();
-
-    let mut encoder = Encoder::new(
-        &mut writers.writer,
-        &metadata,
-        writers.payload_writer.as_mut(),
-        None,
-    )
-    .await?;
-
     let mut patterns = options.patterns;
 
     if options.skip_lost_and_found {
@@ -254,6 +244,15 @@ where
             MatchType::Exclude,
         )?);
     }
+
+    let cli_params_content = generate_pxar_excludes_cli(&patterns[..]);
+    let cli_params = if options.previous_ref.is_some() {
+        Some(cli_params_content.as_slice())
+    } else {
+        None
+    };
+
+    let metadata_mode = options.previous_ref.is_some() && writers.payload_writer.is_some();
     let (previous_payload_index, previous_metadata_accessor) =
         if let Some(refs) = options.previous_ref {
             (
@@ -264,6 +263,14 @@ where
             (None, None)
         };
 
+    let mut encoder = Encoder::new(
+        &mut writers.writer,
+        &metadata,
+        writers.payload_writer.as_mut(),
+        cli_params,
+    )
+    .await?;
+
     let mut archiver = Archiver {
         feature_flags,
         fs_feature_flags,
@@ -362,7 +369,7 @@ impl Archiver {
 
             let mut file_list = self.generate_directory_file_list(&mut dir, is_root)?;
 
-            if is_root && old_patterns_count > 0 {
+            if is_root && old_patterns_count > 0 && previous_metadata_accessor.is_none() {
                 file_list.push(FileListEntry {
                     name: CString::new(".pxarexclude-cli").unwrap(),
                     path: PathBuf::new(),
-- 
2.39.2





More information about the pbs-devel mailing list