mirror of
https://git.proxmox.com/git/proxmox-backup
synced 2025-07-13 15:38:18 +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 anyhow::{bail, format_err, Context, Error};
|
||||||
use nix::sys::stat::Mode;
|
use nix::sys::stat::Mode;
|
||||||
|
|
||||||
use pxar::accessor::aio::Accessor;
|
use pxar::accessor::aio::{Accessor, FileEntry};
|
||||||
use pxar::accessor::ReadAt;
|
use pxar::accessor::ReadAt;
|
||||||
use pxar::format::{SignedDuration, StatxTimestamp};
|
use pxar::format::{SignedDuration, StatxTimestamp};
|
||||||
use pxar::{mode, Entry, EntryKind, Metadata};
|
use pxar::{mode, Entry, EntryKind, Metadata};
|
||||||
@ -322,16 +322,7 @@ pub async fn pxar_metadata_catalog_lookup<T: Clone + ReadAt>(
|
|||||||
EntryKind::Socket => DirEntryAttribute::Socket,
|
EntryKind::Socket => DirEntryAttribute::Socket,
|
||||||
};
|
};
|
||||||
|
|
||||||
let entry_path = if let Some(prefix) = path_prefix {
|
let entry_path = entry_path_with_prefix(&entry, 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())
|
|
||||||
};
|
|
||||||
entries.push(ArchiveEntry::new(
|
entries.push(ArchiveEntry::new(
|
||||||
entry_path.as_os_str().as_bytes(),
|
entry_path.as_os_str().as_bytes(),
|
||||||
Some(&entry_attr),
|
Some(&entry_attr),
|
||||||
@ -407,3 +398,20 @@ pub async fn get_remote_pxar_reader(
|
|||||||
|
|
||||||
Ok((LocalDynamicReadAt::new(reader), archive_size))
|
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