From 054291383c314b3c488417ae67e303e0c609b114 Mon Sep 17 00:00:00 2001 From: "Andrew Phillips (aider)" Date: Tue, 6 May 2025 11:39:44 -0300 Subject: [PATCH] refactor: add copy method to CompressionEngine and update mode_diff to use it --- src/compression.rs | 12 ++++++++---- src/compression/gzip.rs | 7 +++++++ src/compression/lz4.rs | 7 +++++++ src/compression/none.rs | 7 +++++++ src/main.rs | 7 +++++-- 5 files changed, 34 insertions(+), 6 deletions(-) diff --git a/src/compression.rs b/src/compression.rs index 8b49f75..8667535 100755 --- a/src/compression.rs +++ b/src/compression.rs @@ -44,14 +44,18 @@ pub trait CompressionEngine { true } - fn cat(&self, file_path: PathBuf) -> Result<()> { + fn copy(&self, file_path: PathBuf, writer: &mut dyn Write) -> Result<()> { let mut reader = self.open(file_path)?; - let mut stdout = io::stdout().lock(); - io::copy(&mut reader, &mut stdout)?; - stdout.flush()?; + io::copy(&mut reader, writer)?; + writer.flush()?; Ok(()) } + fn cat(&self, file_path: PathBuf) -> Result<()> { + let mut stdout = io::stdout().lock(); + self.copy(file_path, &mut stdout) + } + fn magic(&self, file_path: PathBuf) -> Result { let mut buffer = [0; libc::BUFSIZ as usize]; let mut reader = self.open(file_path)?; diff --git a/src/compression/gzip.rs b/src/compression/gzip.rs index 97a8245..e4f9016 100644 --- a/src/compression/gzip.rs +++ b/src/compression/gzip.rs @@ -40,6 +40,13 @@ impl CompressionEngine for CompressionEngineGZip { Ok(Box::new(AutoFinishGzEncoder::new(gzip_write))) } + + fn copy(&self, file_path: PathBuf, writer: &mut dyn Write) -> Result<()> { + let mut reader = self.open(file_path)?; + io::copy(&mut reader, writer)?; + writer.flush()?; + Ok(()) + } } pub struct AutoFinishGzEncoder { diff --git a/src/compression/lz4.rs b/src/compression/lz4.rs index 7b1cef3..84abce3 100644 --- a/src/compression/lz4.rs +++ b/src/compression/lz4.rs @@ -38,5 +38,12 @@ impl CompressionEngine for CompressionEngineLZ4 { Ok(Box::new(lz4_write)) } + + fn copy(&self, file_path: PathBuf, writer: &mut dyn Write) -> Result<()> { + let mut reader = self.open(file_path)?; + io::copy(&mut reader, writer)?; + writer.flush()?; + Ok(()) + } } diff --git a/src/compression/none.rs b/src/compression/none.rs index f359bee..6c03e35 100644 --- a/src/compression/none.rs +++ b/src/compression/none.rs @@ -30,4 +30,11 @@ impl CompressionEngine for CompressionEngineNone { debug!("COMPRESSION: Writting to {:?} using {:?}", file_path, *self); Ok(Box::new(File::create(file_path)?)) } + + fn copy(&self, file_path: PathBuf, writer: &mut dyn Write) -> Result<()> { + let mut reader = self.open(file_path)?; + io::copy(&mut reader, writer)?; + writer.flush()?; + Ok(()) + } } diff --git a/src/main.rs b/src/main.rs index 5c9ac8f..d97d256 100644 --- a/src/main.rs +++ b/src/main.rs @@ -535,8 +535,11 @@ fn mode_diff(cmd: &mut Command, args: Args, ids: &mut Vec, tags: &mut Vec