mirror of
https://github.com/ouch-org/ouch.git
synced 2025-06-07 03:55:28 +00:00
Merge pull request #286 from ouch-org/remove-partial-compression-and-decompression-feature
Remove automatic detection for partial compression
This commit is contained in:
commit
bda6c27062
@ -12,7 +12,9 @@ Categories Used:
|
|||||||
- New Features - new features added to ouch itself, not CI
|
- New Features - new features added to ouch itself, not CI
|
||||||
- Bug Fixes
|
- Bug Fixes
|
||||||
- Improvements - general enhancements
|
- Improvements - general enhancements
|
||||||
- Tweaks - Anything that doesn't fit into other categories, small typo fixes, most CI stuff, meta changes (e.g. README updates), etc.
|
- Tweaks - anything that doesn't fit into other categories, small typo fixes, most CI stuff,
|
||||||
|
meta changes (e.g. README updates), etc.
|
||||||
|
- Regression - removal of a feature (that might be readded, or reworked in the future)
|
||||||
|
|
||||||
**Bullet points in chronological order by PR**
|
**Bullet points in chronological order by PR**
|
||||||
|
|
||||||
@ -100,6 +102,10 @@ Categories Used:
|
|||||||
- Update dependencies [\#276](https://github.com/ouch-org/ouch/pull/276) ([figsoda](https://github.com/figsoda))
|
- Update dependencies [\#276](https://github.com/ouch-org/ouch/pull/276) ([figsoda](https://github.com/figsoda))
|
||||||
- Rewrite progress module [\#280](https://github.com/ouch-org/ouch/pull/280) ([figsoda](https://github.com/figsoda))
|
- Rewrite progress module [\#280](https://github.com/ouch-org/ouch/pull/280) ([figsoda](https://github.com/figsoda))
|
||||||
|
|
||||||
|
### Regression
|
||||||
|
|
||||||
|
- Remove automatic detection for partial compression [\#286](https://github.com/ouch-org/ouch/pull/286) ([marcospb19](https://github.com/marcospb19))
|
||||||
|
|
||||||
### New Contributors
|
### New Contributors
|
||||||
|
|
||||||
- [@sigmaSd](https://github.com/sigmaSd) made their first contribution in [\#154](https://github.com/ouch-org/ouch/pull/154)
|
- [@sigmaSd](https://github.com/sigmaSd) made their first contribution in [\#154](https://github.com/ouch-org/ouch/pull/154)
|
||||||
|
@ -104,7 +104,7 @@ pub fn run(
|
|||||||
}
|
}
|
||||||
|
|
||||||
// Formats from path extension, like "file.tar.gz.xz" -> vec![Tar, Gzip, Lzma]
|
// Formats from path extension, like "file.tar.gz.xz" -> vec![Tar, Gzip, Lzma]
|
||||||
let mut formats = extension::extensions_from_path(&output_path);
|
let formats = extension::extensions_from_path(&output_path);
|
||||||
|
|
||||||
if formats.is_empty() {
|
if formats.is_empty() {
|
||||||
let error = FinalError::with_title(format!("Cannot compress to '{}'.", to_utf(&output_path)))
|
let error = FinalError::with_title(format!("Cannot compress to '{}'.", to_utf(&output_path)))
|
||||||
@ -172,48 +172,6 @@ pub fn run(
|
|||||||
}
|
}
|
||||||
|
|
||||||
let output_file = fs::File::create(&output_path)?;
|
let output_file = fs::File::create(&output_path)?;
|
||||||
|
|
||||||
if !represents_several_files(&files) {
|
|
||||||
// It is possible the file is already partially compressed so we don't want to compress it again
|
|
||||||
// `ouch compress file.tar.gz file.tar.gz.xz` should produce `file.tar.gz.xz` and not `file.tar.gz.tar.gz.xz`
|
|
||||||
let input_extensions = extension::extensions_from_path(&files[0]);
|
|
||||||
|
|
||||||
// We calculate the formats that are left if we filter out a sublist at the start of what we have that's the same as the input formats
|
|
||||||
let mut new_formats = Vec::with_capacity(formats.len());
|
|
||||||
for (inp_ext, out_ext) in input_extensions.iter().zip(&formats) {
|
|
||||||
if inp_ext.compression_formats == out_ext.compression_formats {
|
|
||||||
new_formats.push(out_ext.clone());
|
|
||||||
} else if inp_ext
|
|
||||||
.compression_formats
|
|
||||||
.iter()
|
|
||||||
.zip(out_ext.compression_formats.iter())
|
|
||||||
.all(|(inp, out)| inp == out)
|
|
||||||
{
|
|
||||||
let new_ext = Extension::new(
|
|
||||||
&out_ext.compression_formats[..inp_ext.compression_formats.len()],
|
|
||||||
&out_ext.display_text,
|
|
||||||
);
|
|
||||||
new_formats.push(new_ext);
|
|
||||||
break;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
// If the input is a sublist at the start of `formats` then remove the extensions
|
|
||||||
// Note: If input_extensions is empty then it will make `formats` empty too, which we don't want
|
|
||||||
if !input_extensions.is_empty() && new_formats != formats {
|
|
||||||
// Safety:
|
|
||||||
// We checked above that input_extensions isn't empty, so files[0] has an extension.
|
|
||||||
//
|
|
||||||
// Path::extension says: "if there is no file_name, then there is no extension".
|
|
||||||
// Contrapositive statement: "if there is extension, then there is file_name".
|
|
||||||
info!(
|
|
||||||
accessible, // important information
|
|
||||||
"Partial compression detected. Compressing {} into {}",
|
|
||||||
to_utf(files[0].as_path().file_name().unwrap().as_ref()),
|
|
||||||
to_utf(&output_path)
|
|
||||||
);
|
|
||||||
formats = new_formats;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
let compress_result = compress_files(
|
let compress_result = compress_files(
|
||||||
files,
|
files,
|
||||||
formats,
|
formats,
|
||||||
|
Loading…
x
Reference in New Issue
Block a user