feat: Fallback to system commands for disabled compression features

Co-authored-by: aider (openai/andrew/openrouter/sonoma-sky-alpha) <aider@aider.chat>
This commit is contained in:
Andrew Phillips
2025-09-10 10:37:49 -03:00
parent 6f1352238a
commit fd95fbcac1

View File

@@ -74,15 +74,24 @@ pub trait CompressionEngine {
lazy_static! { lazy_static! {
pub static ref COMPRESSION_PROGRAMS: EnumMap<CompressionType, Option<CompressionEngineProgram>> = enum_map! { pub static ref COMPRESSION_PROGRAMS: EnumMap<CompressionType, Option<CompressionEngineProgram>> = enum_map! {
CompressionType::LZ4 => None, CompressionType::LZ4 => {
CompressionType::GZip => None, let program = CompressionEngineProgram::new("lz4", vec!["-c"], vec!["-d", "-c"]);
if program.supported { Some(program) } else { None }
},
CompressionType::GZip => {
let program = CompressionEngineProgram::new("gzip", vec!["-c"], vec!["-d", "-c"]);
if program.supported { Some(program) } else { None }
},
#[cfg(feature = "bzip2")] #[cfg(feature = "bzip2")]
CompressionType::BZip2 => { CompressionType::BZip2 => {
let program = CompressionEngineProgram::new("bzip2", vec!["-qcf"], vec!["-dcf"]); let program = CompressionEngineProgram::new("bzip2", vec!["-qcf"], vec!["-dcf"]);
if program.supported { Some(program) } else { None } if program.supported { Some(program) } else { None }
}, },
#[cfg(not(feature = "bzip2"))] #[cfg(not(feature = "bzip2"))]
CompressionType::BZip2 => None, CompressionType::BZip2 => {
let program = CompressionEngineProgram::new("bzip2", vec!["-qcf"], vec!["-dcf"]);
if program.supported { Some(program) } else { None }
},
CompressionType::XZ => { CompressionType::XZ => {
let program = CompressionEngineProgram::new("xz", vec!["-qcf"], vec!["-dcf"]); let program = CompressionEngineProgram::new("xz", vec!["-qcf"], vec!["-dcf"]);
if program.supported { Some(program) } else { None } if program.supported { Some(program) } else { None }
@@ -99,14 +108,42 @@ pub fn get_compression_engine(
compression_type: CompressionType, compression_type: CompressionType,
) -> Result<Box<dyn CompressionEngine>> { ) -> Result<Box<dyn CompressionEngine>> {
match compression_type { match compression_type {
CompressionType::LZ4 => Ok(Box::new(CompressionEngineLZ4::new())), CompressionType::LZ4 => {
CompressionType::GZip => Ok(Box::new(CompressionEngineGZip::new())), #[cfg(feature = "lz4")]
{
Ok(Box::new(CompressionEngineLZ4::new()))
}
#[cfg(not(feature = "lz4"))]
{
if let Some(engine) = COMPRESSION_PROGRAMS[compression_type].clone() {
Ok(Box::new(engine))
} else {
Err(anyhow!("LZ4 not available: feature disabled and program not found"))
}
}
},
CompressionType::GZip => {
#[cfg(feature = "gzip")]
{
Ok(Box::new(CompressionEngineGZip::new()))
}
#[cfg(not(feature = "gzip"))]
{
if let Some(engine) = COMPRESSION_PROGRAMS[compression_type].clone() {
Ok(Box::new(engine))
} else {
Err(anyhow!("GZip not available: feature disabled and program not found"))
}
}
},
CompressionType::None => Ok(Box::new(CompressionEngineNone::new())), CompressionType::None => Ok(Box::new(CompressionEngineNone::new())),
compression_type => Ok(Box::new( compression_type => {
COMPRESSION_PROGRAMS[compression_type.clone()] if let Some(engine) = COMPRESSION_PROGRAMS[compression_type].clone() {
.clone() Ok(Box::new(engine))
.unwrap(), } else {
)), Err(anyhow!("Compression type {:?} not supported", compression_type))
}
},
} }
} }