mirror of
https://git.proxmox.com/git/proxmox-backup
synced 2025-07-13 09:48:28 +00:00
client: tools: factor out entry path prefix helper
Move the logic to generate `FileEntry` paths with a given prefix to its own helper function for it to be reusable for the catalog shell implementation of split pxar archives. Signed-off-by: Christian Ebner <c.ebner@proxmox.com>
This commit is contained in:
parent
3e6318a535
commit
50d20e9b64
@ -8,7 +8,7 @@ use std::sync::Arc;
|
||||
use anyhow::{bail, format_err, Context, Error};
|
||||
use nix::sys::stat::Mode;
|
||||
|
||||
use pxar::accessor::aio::Accessor;
|
||||
use pxar::accessor::aio::{Accessor, FileEntry};
|
||||
use pxar::accessor::ReadAt;
|
||||
use pxar::format::{SignedDuration, StatxTimestamp};
|
||||
use pxar::{mode, Entry, EntryKind, Metadata};
|
||||
@ -322,16 +322,7 @@ pub async fn pxar_metadata_catalog_lookup<T: Clone + ReadAt>(
|
||||
EntryKind::Socket => DirEntryAttribute::Socket,
|
||||
};
|
||||
|
||||
let entry_path = if let Some(prefix) = path_prefix {
|
||||
let mut entry_path = PathBuf::from(prefix);
|
||||
match entry.path().strip_prefix("/") {
|
||||
Ok(path) => entry_path.push(path),
|
||||
Err(_) => entry_path.push(entry.path()),
|
||||
}
|
||||
entry_path
|
||||
} else {
|
||||
PathBuf::from(entry.path())
|
||||
};
|
||||
let entry_path = entry_path_with_prefix(&entry, path_prefix);
|
||||
entries.push(ArchiveEntry::new(
|
||||
entry_path.as_os_str().as_bytes(),
|
||||
Some(&entry_attr),
|
||||
@ -407,3 +398,20 @@ pub async fn get_remote_pxar_reader(
|
||||
|
||||
Ok((LocalDynamicReadAt::new(reader), archive_size))
|
||||
}
|
||||
|
||||
/// Generate entry path for given [`FileEntry`], prefixed by given `path_prefix` component(s).
|
||||
pub(crate) fn entry_path_with_prefix<T: Clone + ReadAt>(
|
||||
entry: &FileEntry<T>,
|
||||
path_prefix: Option<&str>,
|
||||
) -> PathBuf {
|
||||
if let Some(prefix) = path_prefix {
|
||||
let mut entry_path = PathBuf::from(prefix);
|
||||
match entry.path().strip_prefix("/") {
|
||||
Ok(path) => entry_path.push(path),
|
||||
Err(_) => entry_path.push(entry.path()),
|
||||
}
|
||||
entry_path
|
||||
} else {
|
||||
PathBuf::from(entry.path())
|
||||
}
|
||||
}
|
||||
|
Loading…
Reference in New Issue
Block a user