file-restore: allow extracting a full pxar archive
If the path for within the archive is empty, assume "/" to extract all of it. Signed-off-by: Stefan Reiter <s.reiter@proxmox.com>
This commit is contained in:
parent
4d0dc29951
commit
4adf47b606
@ -399,14 +399,16 @@ async fn extract_to_target<T>(
|
|||||||
where
|
where
|
||||||
T: pxar::accessor::ReadAt + Clone + Send + Sync + Unpin + 'static,
|
T: pxar::accessor::ReadAt + Clone + Send + Sync + Unpin + 'static,
|
||||||
{
|
{
|
||||||
|
let path = if path.is_empty() { b"/" } else { path };
|
||||||
|
|
||||||
let root = decoder.open_root().await?;
|
let root = decoder.open_root().await?;
|
||||||
let file = root
|
let file = root
|
||||||
.lookup(OsStr::from_bytes(&path))
|
.lookup(OsStr::from_bytes(path))
|
||||||
.await?
|
.await?
|
||||||
.ok_or_else(|| format_err!("error opening '{:?}'", path))?;
|
.ok_or_else(|| format_err!("error opening '{:?}'", path))?;
|
||||||
|
|
||||||
if let Some(target) = target {
|
if let Some(target) = target {
|
||||||
extract_sub_dir(target, decoder, OsStr::from_bytes(&path), verbose).await?;
|
extract_sub_dir(target, decoder, OsStr::from_bytes(path), verbose).await?;
|
||||||
} else {
|
} else {
|
||||||
match file.kind() {
|
match file.kind() {
|
||||||
pxar::EntryKind::File { .. } => {
|
pxar::EntryKind::File { .. } => {
|
||||||
@ -416,7 +418,7 @@ where
|
|||||||
create_zip(
|
create_zip(
|
||||||
tokio::io::stdout(),
|
tokio::io::stdout(),
|
||||||
decoder,
|
decoder,
|
||||||
OsStr::from_bytes(&path),
|
OsStr::from_bytes(path),
|
||||||
verbose,
|
verbose,
|
||||||
)
|
)
|
||||||
.await?;
|
.await?;
|
||||||
|
Loading…
Reference in New Issue
Block a user