simplify pxar module structure
This commit is contained in:
parent
1ef46b81d3
commit
3dbfe5b142
@ -12,8 +12,7 @@ use serde_json::{Value};
|
|||||||
use std::io::Write;
|
use std::io::Write;
|
||||||
use std::path::{Path, PathBuf};
|
use std::path::{Path, PathBuf};
|
||||||
|
|
||||||
use proxmox_backup::pxar::encoder::*;
|
use proxmox_backup::pxar;
|
||||||
use proxmox_backup::pxar::decoder::*;
|
|
||||||
|
|
||||||
fn print_filenames(
|
fn print_filenames(
|
||||||
param: Value,
|
param: Value,
|
||||||
@ -26,7 +25,7 @@ fn print_filenames(
|
|||||||
|
|
||||||
let mut reader = std::io::BufReader::new(file);
|
let mut reader = std::io::BufReader::new(file);
|
||||||
|
|
||||||
let mut decoder = PxarDecoder::new(&mut reader);
|
let mut decoder = pxar::SequentialDecoder::new(&mut reader);
|
||||||
|
|
||||||
let stdout = std::io::stdout();
|
let stdout = std::io::stdout();
|
||||||
let mut out = stdout.lock();
|
let mut out = stdout.lock();
|
||||||
@ -48,7 +47,7 @@ fn dump_archive(
|
|||||||
|
|
||||||
let mut reader = std::io::BufReader::new(file);
|
let mut reader = std::io::BufReader::new(file);
|
||||||
|
|
||||||
let mut decoder = PxarDecoder::new(&mut reader);
|
let mut decoder = pxar::SequentialDecoder::new(&mut reader);
|
||||||
|
|
||||||
let stdout = std::io::stdout();
|
let stdout = std::io::stdout();
|
||||||
let mut out = stdout.lock();
|
let mut out = stdout.lock();
|
||||||
@ -75,7 +74,7 @@ fn extract_archive(
|
|||||||
|
|
||||||
let mut reader = std::io::BufReader::new(file);
|
let mut reader = std::io::BufReader::new(file);
|
||||||
|
|
||||||
let mut decoder = PxarDecoder::new(&mut reader);
|
let mut decoder = pxar::SequentialDecoder::new(&mut reader);
|
||||||
|
|
||||||
decoder.restore(Path::new(target), & |path| {
|
decoder.restore(Path::new(target), & |path| {
|
||||||
if verbose {
|
if verbose {
|
||||||
@ -110,7 +109,7 @@ fn create_archive(
|
|||||||
|
|
||||||
let mut writer = std::io::BufWriter::with_capacity(1024*1024, file);
|
let mut writer = std::io::BufWriter::with_capacity(1024*1024, file);
|
||||||
|
|
||||||
PxarEncoder::encode(source, &mut dir, &mut writer, all_file_systems, verbose)?;
|
pxar::Encoder::encode(source, &mut dir, &mut writer, all_file_systems, verbose)?;
|
||||||
|
|
||||||
writer.flush()?;
|
writer.flush()?;
|
||||||
|
|
||||||
|
@ -11,7 +11,7 @@ use nix::fcntl::OFlag;
|
|||||||
use nix::sys::stat::Mode;
|
use nix::sys::stat::Mode;
|
||||||
use nix::dir::Dir;
|
use nix::dir::Dir;
|
||||||
|
|
||||||
use crate::pxar::encoder::*;
|
use crate::pxar;
|
||||||
|
|
||||||
/// Stream implementation to encode and upload .pxar archives.
|
/// Stream implementation to encode and upload .pxar archives.
|
||||||
///
|
///
|
||||||
@ -44,7 +44,7 @@ impl PxarBackupStream {
|
|||||||
|
|
||||||
let child = thread::spawn(move|| {
|
let child = thread::spawn(move|| {
|
||||||
let mut writer = unsafe { std::fs::File::from_raw_fd(tx) };
|
let mut writer = unsafe { std::fs::File::from_raw_fd(tx) };
|
||||||
if let Err(err) = PxarEncoder::encode(path, &mut dir, &mut writer, all_file_systems, verbose) {
|
if let Err(err) = pxar::Encoder::encode(path, &mut dir, &mut writer, all_file_systems, verbose) {
|
||||||
eprintln!("pxar encode failed - {}", err);
|
eprintln!("pxar encode failed - {}", err);
|
||||||
}
|
}
|
||||||
});
|
});
|
||||||
|
@ -5,7 +5,7 @@ use std::os::unix::io::FromRawFd;
|
|||||||
use std::path::{Path, PathBuf};
|
use std::path::{Path, PathBuf};
|
||||||
use std::io::Write;
|
use std::io::Write;
|
||||||
|
|
||||||
use crate::pxar::decoder::*;
|
use crate::pxar;
|
||||||
|
|
||||||
/// Writer implementation to deccode a .pxar archive (download).
|
/// Writer implementation to deccode a .pxar archive (download).
|
||||||
|
|
||||||
@ -31,7 +31,7 @@ impl PxarDecodeWriter {
|
|||||||
|
|
||||||
let child = thread::spawn(move|| {
|
let child = thread::spawn(move|| {
|
||||||
let mut reader = unsafe { std::fs::File::from_raw_fd(rx) };
|
let mut reader = unsafe { std::fs::File::from_raw_fd(rx) };
|
||||||
let mut decoder = PxarDecoder::new(&mut reader);
|
let mut decoder = pxar::SequentialDecoder::new(&mut reader);
|
||||||
|
|
||||||
if let Err(err) = decoder.restore(&base, & |path| {
|
if let Err(err) = decoder.restore(&base, & |path| {
|
||||||
if verbose {
|
if verbose {
|
||||||
|
13
src/pxar.rs
13
src/pxar.rs
@ -38,8 +38,13 @@
|
|||||||
//! * ...
|
//! * ...
|
||||||
//! * GOODBYE -- lookup table at the end of a list of directory entries
|
//! * GOODBYE -- lookup table at the end of a list of directory entries
|
||||||
|
|
||||||
pub mod binary_search_tree;
|
mod binary_search_tree;
|
||||||
pub mod format_definition;
|
|
||||||
pub mod encoder;
|
|
||||||
pub mod decoder;
|
|
||||||
|
|
||||||
|
mod format_definition;
|
||||||
|
pub use format_definition::*;
|
||||||
|
|
||||||
|
mod encoder;
|
||||||
|
pub use encoder::*;
|
||||||
|
|
||||||
|
mod decoder;
|
||||||
|
pub use decoder::*;
|
||||||
|
@ -22,14 +22,14 @@ use nix::errno::Errno;
|
|||||||
use nix::NixPath;
|
use nix::NixPath;
|
||||||
|
|
||||||
// This one need Read, but works without Seek
|
// This one need Read, but works without Seek
|
||||||
pub struct PxarDecoder<'a, R: Read> {
|
pub struct SequentialDecoder<'a, R: Read> {
|
||||||
reader: &'a mut R,
|
reader: &'a mut R,
|
||||||
skip_buffer: Vec<u8>,
|
skip_buffer: Vec<u8>,
|
||||||
}
|
}
|
||||||
|
|
||||||
const HEADER_SIZE: u64 = std::mem::size_of::<CaFormatHeader>() as u64;
|
const HEADER_SIZE: u64 = std::mem::size_of::<CaFormatHeader>() as u64;
|
||||||
|
|
||||||
impl <'a, R: Read> PxarDecoder<'a, R> {
|
impl <'a, R: Read> SequentialDecoder<'a, R> {
|
||||||
|
|
||||||
pub fn new(reader: &'a mut R) -> Self {
|
pub fn new(reader: &'a mut R) -> Self {
|
||||||
let skip_buffer = vec![0u8; 64*1024];
|
let skip_buffer = vec![0u8; 64*1024];
|
||||||
|
@ -27,7 +27,7 @@ use nix::sys::stat::FileStat;
|
|||||||
/// maximum memory usage.
|
/// maximum memory usage.
|
||||||
pub const MAX_DIRECTORY_ENTRIES: usize = 256*1024;
|
pub const MAX_DIRECTORY_ENTRIES: usize = 256*1024;
|
||||||
|
|
||||||
pub struct PxarEncoder<'a, W: Write> {
|
pub struct Encoder<'a, W: Write> {
|
||||||
current_path: PathBuf, // used for error reporting
|
current_path: PathBuf, // used for error reporting
|
||||||
writer: &'a mut W,
|
writer: &'a mut W,
|
||||||
writer_pos: usize,
|
writer_pos: usize,
|
||||||
@ -38,7 +38,7 @@ pub struct PxarEncoder<'a, W: Write> {
|
|||||||
verbose: bool,
|
verbose: bool,
|
||||||
}
|
}
|
||||||
|
|
||||||
impl <'a, W: Write> PxarEncoder<'a, W> {
|
impl <'a, W: Write> Encoder<'a, W> {
|
||||||
|
|
||||||
pub fn encode(
|
pub fn encode(
|
||||||
path: PathBuf,
|
path: PathBuf,
|
||||||
|
Loading…
Reference in New Issue
Block a user