mirror of
https://github.com/ouch-org/ouch.git
synced 2025-06-06 11:35:45 +00:00
(WIP) Minor misc. changes
This commit is contained in:
parent
d2af261f67
commit
011626f09b
@ -55,35 +55,42 @@ if __name__ == "__main__":
|
||||
"application/gzip",
|
||||
"application/x-bzip2",
|
||||
"application/x-bzip2",
|
||||
"application/x-xz",
|
||||
"application/x-xz"
|
||||
|
||||
# TODO: Is this right?
|
||||
# Perhaps the output should be application/x-lzma
|
||||
"application/octet-stream",
|
||||
"application/octet-stream"
|
||||
]
|
||||
|
||||
for file in files:
|
||||
rv = os.system(f"cargo run -- -i ../src/ -o {file}")
|
||||
rv = os.system(f"cargo run -- compress ../src/ {file}")
|
||||
if rv != 0:
|
||||
print(f"Failed while compressing {file}")
|
||||
os._exit(2)
|
||||
|
||||
for (file, expected_mime) in zip(files, expected_mime_types):
|
||||
if m.file(file) != expected_mime:
|
||||
print(f"Test failed at file {file}")
|
||||
print(f"Test failed at file {file}.")
|
||||
print(f"Got: {m.file(file)}.")
|
||||
print(f"Expected: {expected_mime}.")
|
||||
os._exit(2)
|
||||
|
||||
for (idx, file) in enumerate(files):
|
||||
rv = os.system(f"cargo run -- -i {file} -o out{idx}/")
|
||||
rv = os.system(f"cargo run -- {file} -o out{idx}/")
|
||||
if rv != 0:
|
||||
print(f"Failed while decompressing {file}")
|
||||
os._exit(2)
|
||||
|
||||
os.chdir("..")
|
||||
os.system("rm -rf testbuilds")
|
||||
# os.chdir("..")
|
||||
# os.system("rm -rf testbuilds")
|
||||
|
||||
# We'll now verify if ouch is not altering the data it is compressing
|
||||
# and decompressing
|
||||
# # We'll now verify if ouch is not altering the data it is compressing
|
||||
# # and decompressing
|
||||
|
||||
sanity_check_format("tar")
|
||||
sanity_check_format("tar.gz")
|
||||
sanity_check_format("tar.bz")
|
||||
sanity_check_format("tar.bz2")
|
||||
sanity_check_format("tar.lz")
|
||||
sanity_check_format("tar.lzma")
|
||||
# sanity_check_format("zip")
|
||||
# sanity_check_format("tar")
|
||||
# sanity_check_format("tar.gz")
|
||||
# sanity_check_format("tar.bz")
|
||||
# sanity_check_format("tar.bz2")
|
||||
# sanity_check_format("tar.lz")
|
||||
# sanity_check_format("tar.lzma")
|
@ -2,6 +2,10 @@ use std::{env, ffi::OsString, io, path::PathBuf, vec::Vec};
|
||||
|
||||
use oof::{arg_flag, flag};
|
||||
|
||||
use crate::debug;
|
||||
|
||||
pub const VERSION: &str = "0.1.5";
|
||||
|
||||
#[derive(PartialEq, Eq, Debug)]
|
||||
pub enum Command {
|
||||
/// Files to be compressed
|
||||
@ -83,16 +87,18 @@ pub fn parse_args_from(mut args: Vec<OsString>) -> crate::Result<ParsedArgs> {
|
||||
// Defaults to decompression when there is no subcommand
|
||||
None => {
|
||||
flags_info.push(arg_flag!('o', "output"));
|
||||
debug!(&flags_info);
|
||||
|
||||
// Parse flags
|
||||
let (args, mut flags) = oof::filter_flags(args, &flags_info)?;
|
||||
debug!((&args, &flags));
|
||||
|
||||
let files: Vec<_> = args.into_iter().map(PathBuf::from).collect();
|
||||
// TODO: This line doesn't seem to be working correctly
|
||||
let output_folder = flags.take_arg("output").map(PathBuf::from);
|
||||
|
||||
// Is the output here fully correct?
|
||||
// With the paths not canonicalized?
|
||||
|
||||
let command = Command::Decompress {
|
||||
files,
|
||||
output_folder,
|
||||
|
@ -29,6 +29,7 @@ impl TarCompressor {
|
||||
for entry in WalkDir::new(&filename) {
|
||||
let entry = entry?;
|
||||
let path = entry.path();
|
||||
println!("Compressing {:?}", path);
|
||||
if path.is_dir() {
|
||||
continue;
|
||||
}
|
||||
|
@ -68,7 +68,9 @@ impl ZipCompressor {
|
||||
if entry_path.is_dir() {
|
||||
continue;
|
||||
}
|
||||
|
||||
writer.start_file(entry_path.to_string_lossy(), options)?;
|
||||
println!("Compressing {:?}", entry_path);
|
||||
let file_bytes = std::fs::read(entry.path())?;
|
||||
writer.write_all(&*file_bytes)?;
|
||||
}
|
||||
|
@ -14,7 +14,7 @@ use crate::{dialogs::Confirmation, file::File, utils};
|
||||
pub struct TarDecompressor {}
|
||||
|
||||
impl TarDecompressor {
|
||||
fn unpack_files(from: File, into: &Path, flags: &oof::Flags) -> crate::Result<Vec<PathBuf>> {
|
||||
fn unpack_files(from: File, into: &Path, flags: &oof::Flags) -> crate::Result<Vec<PathBuf>> {
|
||||
println!(
|
||||
"{}: attempting to decompress {:?}",
|
||||
"ouch".bright_blue(),
|
||||
|
@ -7,19 +7,19 @@ use std::{
|
||||
use colored::Colorize;
|
||||
|
||||
use crate::{
|
||||
cli::Command,
|
||||
cli::{VERSION, Command},
|
||||
compressors::{
|
||||
BzipCompressor, Compressor, Entry, GzipCompressor, LzmaCompressor, TarCompressor,
|
||||
Entry, Compressor, BzipCompressor, GzipCompressor, LzmaCompressor, TarCompressor,
|
||||
ZipCompressor,
|
||||
},
|
||||
decompressors::{
|
||||
BzipDecompressor, DecompressionResult, Decompressor, GzipDecompressor, LzmaDecompressor,
|
||||
TarDecompressor, ZipDecompressor,
|
||||
},
|
||||
dialogs::Confirmation,
|
||||
extension::{CompressionFormat, Extension},
|
||||
file::File,
|
||||
utils,
|
||||
},
|
||||
dialogs::Confirmation,
|
||||
extension::{CompressionFormat, Extension},
|
||||
file::File,
|
||||
utils
|
||||
};
|
||||
|
||||
pub struct Evaluator {}
|
||||
@ -31,6 +31,7 @@ impl Evaluator {
|
||||
pub fn get_compressor(
|
||||
file: &File,
|
||||
) -> crate::Result<(Option<BoxedCompressor>, BoxedCompressor)> {
|
||||
|
||||
let extension = match &file.extension {
|
||||
Some(extension) => extension.clone(),
|
||||
None => {
|
||||
@ -211,7 +212,7 @@ impl Evaluator {
|
||||
file_path: &Path,
|
||||
output: Option<&Path>,
|
||||
flags: &oof::Flags,
|
||||
) -> crate::Result<()> {
|
||||
) -> crate::Result<()> {
|
||||
let file = File::from(file_path)?;
|
||||
let output = match output {
|
||||
Some(inner) => Some(File::from(inner)?),
|
||||
@ -266,9 +267,25 @@ impl Evaluator {
|
||||
Self::decompress_file(file, output_folder, flags)?;
|
||||
}
|
||||
}
|
||||
Command::ShowHelp => todo!("call help function"),
|
||||
Command::ShowVersion => todo!("call version function"),
|
||||
Command::ShowHelp => help_message(),
|
||||
Command::ShowVersion => version_message(),
|
||||
}
|
||||
Ok(())
|
||||
}
|
||||
}
|
||||
|
||||
#[inline]
|
||||
fn version_message() {
|
||||
println!("ouch {}", VERSION);
|
||||
}
|
||||
|
||||
fn help_message() {
|
||||
version_message();
|
||||
println!("Vinícius R. M. & João M. Bezerra");
|
||||
println!("ouch is a unified compression & decompression utility");
|
||||
println!();
|
||||
println!(" COMPRESSION USAGE:");
|
||||
println!(" ouch compress <input...> output-file");
|
||||
println!("DECOMPRESSION USAGE:");
|
||||
println!(" ouch <input> [-o/--output output-folder]");
|
||||
}
|
@ -23,6 +23,6 @@ fn main() {
|
||||
|
||||
fn run() -> crate::Result<()> {
|
||||
let ParsedArgs { command, flags } = cli::parse_args()?;
|
||||
dbg!(&command);
|
||||
debug!(&command);
|
||||
Evaluator::evaluate(command, &flags)
|
||||
}
|
||||
|
15
src/utils.rs
15
src/utils.rs
@ -9,6 +9,19 @@ use colored::Colorize;
|
||||
|
||||
use crate::{dialogs::Confirmation, extension::CompressionFormat, file::File};
|
||||
|
||||
#[macro_export]
|
||||
#[cfg(debug_assertions)]
|
||||
macro_rules! debug {
|
||||
($x:expr) => { dbg!($x) }
|
||||
}
|
||||
|
||||
#[macro_export]
|
||||
#[cfg(not(debug_assertions))]
|
||||
macro_rules! debug {
|
||||
($x:expr) => { std::convert::identity($x) }
|
||||
}
|
||||
|
||||
|
||||
pub(crate) fn ensure_exists<'a, P>(path: P) -> crate::Result<()>
|
||||
where
|
||||
P: AsRef<Path> + 'a,
|
||||
@ -69,7 +82,7 @@ pub(crate) fn change_dir_and_return_parent(filename: &Path) -> crate::Result<Pat
|
||||
return Err(crate::Error::CompressingRootFolder);
|
||||
};
|
||||
|
||||
env::set_current_dir(parent).unwrap();
|
||||
env::set_current_dir(parent).ok().ok_or(crate::Error::CompressingRootFolder)?;
|
||||
|
||||
Ok(previous_location)
|
||||
}
|
||||
|
Loading…
x
Reference in New Issue
Block a user