From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: Received: from firstgate.proxmox.com (firstgate.proxmox.com [212.224.123.68]) (using TLSv1.3 with cipher TLS_AES_256_GCM_SHA384 (256/256 bits) key-exchange X25519 server-signature RSA-PSS (2048 bits)) (No client certificate requested) by lists.proxmox.com (Postfix) with ESMTPS id A5338DABD for ; Fri, 22 Sep 2023 09:16:56 +0200 (CEST) Received: from firstgate.proxmox.com (localhost [127.0.0.1]) by firstgate.proxmox.com (Proxmox) with ESMTP id 1154D6BD3 for ; Fri, 22 Sep 2023 09:16:54 +0200 (CEST) Received: from proxmox-new.maurer-it.com (proxmox-new.maurer-it.com [94.136.29.106]) (using TLSv1.3 with cipher TLS_AES_256_GCM_SHA384 (256/256 bits) key-exchange X25519 server-signature RSA-PSS (2048 bits)) (No client certificate requested) by firstgate.proxmox.com (Proxmox) with ESMTPS for ; Fri, 22 Sep 2023 09:16:51 +0200 (CEST) Received: from proxmox-new.maurer-it.com (localhost.localdomain [127.0.0.1]) by proxmox-new.maurer-it.com (Proxmox) with ESMTP id 88A4648791 for ; Fri, 22 Sep 2023 09:16:51 +0200 (CEST) From: Christian Ebner To: pbs-devel@lists.proxmox.com Date: Fri, 22 Sep 2023 09:16:14 +0200 Message-Id: <20230922071621.12670-14-c.ebner@proxmox.com> X-Mailer: git-send-email 2.39.2 In-Reply-To: <20230922071621.12670-1-c.ebner@proxmox.com> References: <20230922071621.12670-1-c.ebner@proxmox.com> MIME-Version: 1.0 Content-Transfer-Encoding: 8bit X-SPAM-LEVEL: Spam detection results: 0 AWL 0.113 Adjusted score from AWL reputation of From: address BAYES_00 -1.9 Bayes spam probability is 0 to 1% DMARC_MISSING 0.1 Missing DMARC policy KAM_DMARC_STATUS 0.01 Test Rule for DKIM or SPF Failure with Strict Alignment SPF_HELO_NONE 0.001 SPF: HELO does not publish an SPF Record SPF_PASS -0.001 SPF: sender matches SPF record Subject: [pbs-devel] [RFC proxmox-backup 13/20] fix #3174: archiver/extractor: impl appendix ref X-BeenThere: pbs-devel@lists.proxmox.com X-Mailman-Version: 2.1.29 Precedence: list List-Id: Proxmox Backup Server development discussion List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , X-List-Received-Date: Fri, 22 Sep 2023 07:16:56 -0000 Implements the functionality to create and extract appendix references via the pbs client. Signed-off-by: Christian Ebner --- pbs-client/src/pxar/create.rs | 13 +++++++++++++ pbs-client/src/pxar/extract.rs | 16 ++++++++++++++++ pbs-client/src/pxar/tools.rs | 8 ++++++++ 3 files changed, 37 insertions(+) diff --git a/pbs-client/src/pxar/create.rs b/pbs-client/src/pxar/create.rs index 0f23ed2f..0468abe9 100644 --- a/pbs-client/src/pxar/create.rs +++ b/pbs-client/src/pxar/create.rs @@ -734,6 +734,19 @@ impl Archiver { Ok(out.file_offset()) } + async fn add_appendix_ref( + &mut self, + encoder: &mut Encoder<'_, T>, + file_name: &Path, + metadata: &Metadata, + appendix_offset: u64, + file_size: u64, + ) -> Result<(), Error> { + Ok(encoder + .add_appendix_ref(metadata, file_name, appendix_offset, file_size) + .await?) + } + async fn add_symlink( &mut self, encoder: &mut Encoder<'_, T>, diff --git a/pbs-client/src/pxar/extract.rs b/pbs-client/src/pxar/extract.rs index f78e06c2..d2d42749 100644 --- a/pbs-client/src/pxar/extract.rs +++ b/pbs-client/src/pxar/extract.rs @@ -74,6 +74,7 @@ struct ExtractorIterState { err_path_stack: Vec, current_match: bool, end_reached: bool, + appendix_list: Vec<(PathBuf, u64, u64)>, } /// An [`Iterator`] that encapsulates the process of extraction in [extract_archive]. @@ -98,6 +99,7 @@ impl ExtractorIterState { err_path_stack: Vec::new(), current_match: options.extract_match_default, end_reached: false, + appendix_list: Vec::new(), } } } @@ -373,6 +375,20 @@ where } .context(PxarExtractContext::ExtractFile) } + ( + true, + EntryKind::AppendixRef { + appendix_offset, + file_size, + }, + ) => { + self.state.appendix_list.push(( + entry.path().to_path_buf(), + *appendix_offset, + *file_size, + )); + Ok(()) + } (false, _) => Ok(()), // skip this }; diff --git a/pbs-client/src/pxar/tools.rs b/pbs-client/src/pxar/tools.rs index 0cfbaf5b..aac5a1e7 100644 --- a/pbs-client/src/pxar/tools.rs +++ b/pbs-client/src/pxar/tools.rs @@ -156,6 +156,14 @@ pub fn format_multi_line_entry(entry: &Entry) -> String { let (size, link, type_name) = match entry.kind() { EntryKind::File { size, .. } => (format!("{}", *size), String::new(), "file"), + EntryKind::AppendixRef { + appendix_offset, + file_size, + } => ( + format!("{} {}", appendix_offset, file_size), + String::new(), + "appendix ref", + ), EntryKind::Symlink(link) => ( "0".to_string(), format!(" -> {:?}", link.as_os_str()), -- 2.39.2