All notable user-facing changes to Ouch should be documented in this file.
This project adheres to Semantic Versioning.
Categories Used:
- New Features - new features added to ouch itself, not CI
- Bug Fixes
- 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.
- Removals - removal of a feature (and most likely a breaking change)
Bullet points in chronological order by PR
- List: show symlink targets (for tar and zip) (#934)
- Report mtime-set errors for
.7zas warnings (#950)
- Fix various panics not handled gracefully (#950)
- Unify directory extraction message for zip and tar archives (#937)
- Remove archive auto-flattening on decompression (formerly known as "smart unpack") (#907)
- Merge folders in decompression (#798)
- Provide Nushell completions (packages still need to install them) (#827)
- Add aliases for comic book archives (#835)
- Support
.lzdecompression (#838) - Support
.lzmadecompression (and fix.lzmabeing a wrong alias for.xz) (#838) - Support
.lzcompression (#867) - Support
.lzmacompression (#867) - Support decompression of concatenated
.gz,.bz2, and.lz4(#898)
- Give better error messages when archive extensions are invalid (#817)
- Improve misleading error message (#818)
- Add aliases for
--passwordflag (--passand--pw) (#847) - Avoid loading entire 7z archive into memory when listing (#860)
- Use
lzma-rust2crate instead ofliblzmacrate (#867) - Add
info!,info_accessible!andwarning!macros (#874) - Handle --quiet logic in logger (#885)
- Refactor/simplify logger (#888)
- Print input and output file sizes (#914)
- Make path printing concise and consistent (#916)
- Fix 7z BadSignature error when compressing and then listing (#819)
- Fix tar extraction count when --quiet (#824)
- Fix unpacking with merge flag failing without --dir flag (#826)
- Handle broken symlinks in zip archives and normalize path separators (#841)
- Fix folder softlink is not preserved after packing (#850)
- Handle read-only directories in tar extraction (#873)
- Fix tar hardlink is not preserved after decompressing or compressing (#879)
- Fix enable gitignore flag should work without git (#881)
- Fix .7z always being fully loaded to memory (#905)
- Fix reporting wrong path when file is renamed (#913)
- Fix renaming broken when multi extension paths (#919)
- Fix incorrectly overwriting input file when file signature is sniffed (#920)
- Add safeguards before deleting directories (#930)
- Make
.bz3opt-out (#814) - Adjust INFO color to green (#858)
- Sevenz rust2 bump to 0.19.1 (#875)
- Bump gzp from 0.11.3 to 2.0.0 (#876)
- Rename output when input is stdin (#903)
- Fix .zip crash when file mode isn't present (#804)
- Add multithreading support for
zstdcompression (#689) - Add
bzip3support (#522) - Add
--removeflag for decompression subcommand to remove files after successful decompression (#757) - Add
br(Brotli) support (#765) - Add rename option in overwrite menu (#779)
- Store symlinks by default and add
--follow-symlinksto store the target files (#789)
- Fix output corrupted on parallel decompression (#642)
- CI refactor (#578)
- Use a prefix
tmp-ouch-for temporary decompression path name to avoid conflicts (#725 and #788) - Ignore
.git/when-g/--gitignoreis set (#507) - Run clippy for tests too (#738)
- Sevenz-rust is unmaintained, switch to sevenz-rust2 (#796)
- Fix logging IO bottleneck (#642)
- Support decompression over stdin (#692)
- Make
--formatmore forgiving with the formatting of the provided format (#519) - Use buffered writer for list output (#764)
- Disable smart unpack when
--dirflag is provided in decompress command (#782) - Align file sizes at left for each extracted file to make output clearer (#792)
- Explicitly declare feature flags
use_zlib&use_zstd_thin(#564)
- Mention support for
7zandrarin help message.
- Hint completions generator to expand file paths (#508)
- Add flags to configure the compression level
- Add
--formatoption (#341)
- Multi-threaded compression for gzip and snappy using gzp (#348)
- Add
lsas an alternative alias for listing (#360)
- Fix decompression of zip archives with files larger than 4GB (#354)
- Fix handling of unknown extensions during decompression (#355)
- Remove remaining mentions of
.lzthat refers to the LZMA format (#344) - Handle Zip when modification times are missing (#433)
- Add cli option to (de)compress quietly (#325)
- Allow ouch to decompress archive into existing folder (#321)
- Accept inserting subcommand-independent flags in any position (#329)
- Improve extension parsing logic (#330)
- Slight refactor when ensuring archive-only inputs (#331)
- Use BStr to display possibly non-UTF8 byte sequences (#332)
- Use ubyte instead of humansize (#333)
- Stop keeping track of the names of unpacked files (#334)
- Clean up (#335)
- Stop incorrectly asking to remove the parent dir (#321)
- Add scoop install instructions to readme (#323)
- Add release-helper.sh to make github releases easier (#146)
- Add support for lz4 (#150)
- Add supported formats to help message (#189)
- Add link to github to help message (#191)
- Update to Rust 2021 edition (#192)
- Implement accessibility mode (#197)
- Add heuristics to decompressing archives (#209)
- Add progress bar to compressing/decompressing (#210)
- Support snappy format (#215)
- Allow ignoring hidden files and files matched by .gitignore files (#245)
- Automatically generate man pages with clap_mangen (#273)
- Set last modified time during zip compression (#279)
- Perform exhaustive matching on error variants (#147)
- Fix short flag for the --dir flag (#149)
- Rewrite tests (#163)
- Switch from lz4_flex to lzzzz, enable lz4 tests (#173)
- Fix error message panic when cannot list non-archive files (#182)
- Fix not overwriting files/dirs when trying to create a dir (#190)
- Skip compressing file if it's the same file as the output (#193)
- Fix warnings in doc comments (#196)
- Remove Lzip because its incorrect, and improve extension comparison (#198)
- Fix error with format infer (#205)
- Truncate long messages in the progress bar (#214)
- Fix zip memory warnings (#217)
- Fix the hint suggestion for compressing multiple files (#219)
- Simple eprintln fixes (#226)
- Actually use relative paths when extracting (#229)
- Mark directories when compressing to zip regardless of their contents (#230)
- Recover last modified time when unpacking zip archives (#250)
- Remove single quotes from clap doc comments (#251)
- Fix incorrect warnings for decompression (#270)
- Fix infinite compression if output file is inside the input folder (#288)
- Fix not overwriting a folder when compressing (#295)
- Check for EOF when asking questions (#311)
- Infer file extension when decompressing (#154)
- Extension: Use hardcoded slices instead of
Vecswhen creating anExtension(#155) - Avoid allocating in
nice_directory_displaywhen possible, makeExtensionnon-exhaustive (#156) - Optimize
strip_cur_dir(#167) - Improve zip errors when paths are not utf8 valid (#181)
- Simplify/optimize several file inferring functions (#204)
- List command: print file immediately after it is processed (#225)
- Use
Cow<'static, str>inFinalError(#246) - Don't allocate when possible in
to_utf,nice_directory_display(#249) - Allow overriding the completions output directory (#251)
- Use Lazy to optimize env::current_dir repeated call (#261)
- Apply clippy lints and simplify smart_unpack (#267)
- Respect file permissions when compressing zip files (#271)
- Apply clippy lints (#273)
- Warn user if file extension is passed as file name (#277)
- Check for errors when setting the last modified time (#278)
- Use the humansize crate for formatting human-readable file sizes (#281)
- Reactivate CI targets for ARM Linux and Windows MinGW (#289)
- Improve error message when compressing folder with single-file formats (#303)
- Updating rustfmt (#144)
- Remove import comments (#162)
- Refactor utils into a module (#166)
- README update (#161 and #175)
- Organizing utils (#179)
- Update issue templates (#186)
- put compression backends behind features, clean up Cargo.toml (#187)
- remove trailing blank lines in error messages (#188)
- Improve/fix issue & question templates (#199 and #200)
- Simplify decompress function (#206)
- Add redundant check for --yes and --no flags conflict (#221)
- Ignore broken symlinks when compressing (#224)
- Remove redundant user_wants_to_continue function (#227)
- Fix missing
#[must_use]attribute on a method returningSelf(#243) - Update dependencies (#253)
- Update dependencies (#257)
- Add pull request template (#263)
- Clean up the description for the
-d/--dirargument todecompress(#264) - Show subcommand aliases on --help (#275)
- Update dependencies (#276)
- Rewrite progress module (#280)
- Create scripts for benchmarking ouch (#280)
- Version bump
- Properly detect if we are compressing a partially compressed file (#91)
- Support
.tgz(#85) - Add support for short tar archive extensions (#101)
- Migrate from
ooftoclapfor argument parsing (#108) - Shell completions & man page (#122)
- Implement command 'list' to show archive contents (#129)
- Print number of unpacked files by (#130)
- Empty folders are ignored in archive compression formats (#41)
- Fix macOS executable paths (#69)
- Print the format type when the format is in an incorrect position (#84)
- Compressing a single file to a single format that's not
tarorzippanics (#89) - Compression flag
--outputnot working with single file compression (#93) - Fix NO_COLOR issues, remove some dead code (#95)
- Add proper error message when using conflicting flags (e.g.,
--yes --no) (#99) - Fix wrong archive format detection patterns (#125)
- Decompressing file without extension gives bad error message (#137)
- Fix decompression overwriting files without asking and failing on directories (#141)
- Add tests to check the resulting compressed files through MIME types (#74)
- Add proper error message when adding several files to a non-archive format such as bzip or gzip (#79)
- Apply clippy lints and small refactors (#86)
- Use
fs-errcrate instead ofstd::fs(#94) - Change FinalError builder pattern to take and give ownership of self (#97)
- Omit "./" at the start of the path (#109 and #116)
- Introduce new enum for policy on how to handle y/n questions (#124)
- Add missing docs (#128)
- CI: Check the format with Github Action (#126)
- CI: Rewrite (#135)
- Improving error messages and removing dead error treatment code (#140)
- CI: don't upload unused artifacts (#75)
- Compression info lines should use the [INFO] formatting like when decompressing (#76)
- CI: bump VM's Ubuntu version to 20 (#81)
- CI: stop building for ARM and Windows MinGW (#82)
- Updating Cargo.lock to newer dependencies (#92)
- Create CONTRIBUTING.md (#98)
- Minor cleanups and refactors (#100)
- Readme revision (#102)
- Fix README small markdown error (#104)
- Escaping pipes in installation commands (#106)
- Add 'Packaging Status' badge to README / note about installing on NixOS (#107)
- Change decompress command INFO messages (#117 and #119)
- Change decompress flag
--outputto--dir(#118) - Updating CONTRIBUTING.md (#132)
- Remove tar combinations from compression format (#133)
- Simplify cli canonicalize implementation (#139)
- Add Cargo lock file (#46)
- Allow compression of empty folders (#57)
- Make decompress command explicit (#61)
- Add support for Zstd (#64)
- Fix download script, download from new linux urls (#40)
- Don't use colors when
stdoutorstderrare being redirected (#60) - Making an error message for running decompress without arguments (#63)
- Increasing read and writer buffers capacity (#65)
- Extension detection method supports more than 2 format suffixes (#28)
- Change Display implementation of crate::Error to a more structured FinalUserError (#39)
- Actions: new targets: Linux ARM64 (glibc), x86-64 (musl), Windows (MinGW) (#43)
- Further testing to oof cli (#38)
- Reuse Confirmation struct when checking for overwrite permission (#42)
- Add support for dot-dot (
..) in output file/directory (#4) - Add install.sh script (#37)
- Add checking for typos on the compression subcommand (#21)
- Fix the -n, --no flag usage and add an alias for the compress subcommand (#22)
- Added compression and decompression tests for each current supported format (#24)
- Add tests to oof (#27)
- Switch panics to errors (#21)