[pbs-devel] [PATCH v8 proxmox-backup 34/69] pxar: add optional payload input for archive restore

Fabian Grünbichler f.gruenbichler at proxmox.com
Mon Jun 3 15:23:04 CEST 2024


On May 28, 2024 11:42 am, Christian Ebner wrote:
> Allows to pass the optional payload input to restore for cases where the
> regular file payloads are stored in the split archive.
> 
> Signed-off-by: Christian Ebner <c.ebner at proxmox.com>
> ---
> changes since version 7:
> - no changes
> 
> changes since version 6:
> - adapt to PxarVariant pxar interface
> 
>  pxar-bin/src/main.rs | 29 ++++++++++++++++++++++++++---
>  1 file changed, 26 insertions(+), 3 deletions(-)
> 
> diff --git a/pxar-bin/src/main.rs b/pxar-bin/src/main.rs
> index 61756d21c..903467c98 100644
> --- a/pxar-bin/src/main.rs
> +++ b/pxar-bin/src/main.rs
> @@ -25,9 +25,15 @@ fn extract_archive_from_reader<R: std::io::Read>(
>      target: &str,
>      feature_flags: Flags,
>      options: PxarExtractOptions,
> +    payload_reader: Option<&mut R>,
>  ) -> Result<(), Error> {
> +    let reader = if let Some(payload_reader) = payload_reader {
> +        pxar::PxarVariant::Split(reader, payload_reader)
> +    } else {
> +        pxar::PxarVariant::Unified(reader)
> +    };
>      pbs_client::pxar::extract_archive(
> -        pxar::decoder::Decoder::from_std(pxar::PxarVariant::Unified(reader))?,
> +        pxar::decoder::Decoder::from_std(reader)?,
>          Path::new(target),
>          feature_flags,
>          |path| {
> @@ -120,6 +126,10 @@ fn extract_archive_from_reader<R: std::io::Read>(
>                  optional: true,
>                  default: false,
>              },
> +            "payload-input": {
> +                description: "'ppxar' payload input data file to restore split archive.",
> +                optional: true,
> +            },

nit: this is missing completion

>          },
>      },
>  )]
> @@ -142,6 +152,7 @@ fn extract_archive(
>      no_fifos: bool,
>      no_sockets: bool,
>      strict: bool,
> +    payload_input: Option<String>,
>  ) -> Result<(), Error> {
>      let mut feature_flags = Flags::DEFAULT;
>      if no_xattrs {
> @@ -220,12 +231,24 @@ fn extract_archive(
>      if archive == "-" {
>          let stdin = std::io::stdin();
>          let mut reader = stdin.lock();
> -        extract_archive_from_reader(&mut reader, target, feature_flags, options)?;
> +        extract_archive_from_reader(&mut reader, target, feature_flags, options, None)?;
>      } else {
>          log::debug!("PXAR extract: {}", archive);
>          let file = std::fs::File::open(archive)?;
>          let mut reader = std::io::BufReader::new(file);
> -        extract_archive_from_reader(&mut reader, target, feature_flags, options)?;
> +        let mut payload_reader = if let Some(payload_input) = payload_input {
> +            let file = std::fs::File::open(payload_input)?;
> +            Some(std::io::BufReader::new(file))
> +        } else {
> +            None
> +        };
> +        extract_archive_from_reader(
> +            &mut reader,
> +            target,
> +            feature_flags,
> +            options,
> +            payload_reader.as_mut(),
> +        )?;
>      }
>  
>      if !was_ok.load(Ordering::Acquire) {
> -- 
> 2.39.2
> 
> 
> 
> _______________________________________________
> pbs-devel mailing list
> pbs-devel at lists.proxmox.com
> https://lists.proxmox.com/cgi-bin/mailman/listinfo/pbs-devel
> 
> 
> 




More information about the pbs-devel mailing list