Skip to content

Latest commit

 

History

History
452 lines (330 loc) · 25.6 KB

File metadata and controls

452 lines (330 loc) · 25.6 KB

Old Changelog

Up until 0.8.0, all notable user-facing changes to Ouch would 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)
  • Safety - Changes focused on preventing malicious attacks

Bullet points in chronological order by PR

For any versions higher than 0.8.1

This changelog shouldn't be used anymore.

This file will be removed soon.

New Features

Improvements

  • Add OUCH_PASSWORD env var as alternative to --password (#951).
  • Add OUCH_MAX_DECOMPRESSED_BYTES to optionally cap decompressed output size and listing (#951).

Safety

  • Limit LZMA/XZ decoder size limit to 256 MiB to prevent OOM attacks from malicious inputs (#951).
  • Prevent path traversal and symlink/hardlink escape attacks in tar, zip, 7z, and rar entries (#951).
  • Sanitize archive-controlled filenames, comments, symlink targets, and error text before printing to the terminal (#951).
  • Strip special permission bits from archive-supplied file modes and create zip outputs with final sanitized permissions immediately (#951).

Bug Fixes

  • Decompress: exit with a non-zero code when a file conflict can't be resolved on non-interactive stdin, instead of silently skipping and reporting success (#1011)

Tweaks

New Features

  • Releases: add Apple Silicon macOS (aarch64-apple-darwin) to assets.
  • Unpack into new folder by default (#962).
  • Add --here flag to unpack into current directory (#962).
  • List: show symlink targets (for tar and zip) (#934)
  • Add aliases for ebooks (.epub) (#981)
  • Add a Landlock sandbox on Linux for compress/decompress/list that restricts filesystem access and, where the kernel supports it, blocks new TCP connections, abstract-socket use, and signals to processes outside the sandbox (disable with --no-sandbox or the OUCH_NO_SANDBOX environment variable) (#995)

Improvements

  • Report mtime-set errors for .7z as warnings (#950)
  • list: also display symlink targets (#934)
  • Improve man pages for subcommands (#980)

Bug Fixes

  • Fix various panics not handled gracefully (#950)
  • Handle GNUSparse archive entries during tar decompression (#975)

Bug Fixes

  • Fix ouch --version being outdated.
  • Unify directory extraction message for zip and tar archives (#937)
  • Drop unused xz2 and bytesize deps, replace unmaintained linked-hash-map with indexmap, bump remaining deps to current
  • Bump zip from 6 to 8, raising MSRV from 1.85 to 1.88 (#971)
  • On conflict prompts, default to renaming over overwriting (#976)
  • Update conflict prompts options to "rename/overwrite/merge/skip" (#976)

Removals

  • Remove archive auto-flattening on decompression (formerly known as "smart unpack") (#907)

New Features

  • Merge folders in decompression (#798)
  • Provide Nushell completions (packages still need to install them) (#827)
  • Add aliases for comic book archives (#835)
  • Support .lz decompression (#838)
  • Support .lzma decompression (and fix .lzma being a wrong alias for .xz) (#838)
  • Support .lz compression (#867)
  • Support .lzma compression (#867)
  • Support decompression of concatenated .gz, .bz2, and .lz4 (#898)

Improvements

  • Give better error messages when archive extensions are invalid (#817)
  • Improve misleading error message (#818)
  • Add aliases for --password flag (--pass and --pw) (#847)
  • Avoid loading entire 7z archive into memory when listing (#860)
  • Use lzma-rust2 crate instead of liblzma crate (#867)
  • Add info!, info_accessible! and warning! 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)

Bug Fixes

  • 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)

Tweaks

  • Make .bz3 opt-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)

New Features

  • Add multithreading support for zstd compression (#689)
  • Add bzip3 support (#522)
  • Add --remove flag 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-symlinks to store the target files (#789)

Bug Fixes

  • Fix output corrupted on parallel decompression (#642)

Tweaks

  • CI refactor (#578)
  • Use a prefix tmp-ouch- for temporary decompression path name to avoid conflicts (#725 and #788)
  • Ignore .git/ when -g/--gitignore is set (#507)
  • Run clippy for tests too (#738)
  • Sevenz-rust is unmaintained, switch to sevenz-rust2 (#796)

Improvements

  • Fix logging IO bottleneck (#642)
  • Support decompression over stdin (#692)
  • Make --format more forgiving with the formatting of the provided format (#519)
  • Use buffered writer for list output (#764)
  • Disable smart unpack when --dir flag is provided in decompress command (#782)
  • Align file sizes at left for each extracted file to make output clearer (#792)

Improvements

  • Explicitly declare feature flags use_zlib & use_zstd_thin (#564)

Tweaks

  • Mention support for 7z and rar in help message.

New Features

  • Add support for listing and decompressing .rar archives (#529)
  • Add support for 7z (#555)

Bug Fixes

  • Fix mime type detection (#529)
  • Fix size unit inconsistency (#502)

Improvements

  • Hint completions generator to expand file paths (#508)

New Features

  • Add flags to configure the compression level
    • --level to precisely set the compression level (#372)
    • --fast and --slow (#374)
  • Add --format option (#341)

Improvements

  • Multi-threaded compression for gzip and snappy using gzp (#348)
  • Add ls as an alternative alias for listing (#360)

Bug Fixes

  • Fix decompression of zip archives with files larger than 4GB (#354)
  • Fix handling of unknown extensions during decompression (#355)
  • Remove remaining mentions of .lz that refers to the LZMA format (#344)
  • Handle Zip when modification times are missing (#433)

New Features

  • Add cli option to (de)compress quietly (#325)

Improvements

  • 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)

Bug Fixes

  • Stop incorrectly asking to remove the parent dir (#321)

Tweaks

  • Add scoop install instructions to readme (#323)

New Features

  • 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)

Bug Fixes

  • 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)

Improvements

  • Infer file extension when decompressing (#154)
  • Extension: Use hardcoded slices instead of Vecs when creating an Extension (#155)
  • Avoid allocating in nice_directory_display when possible, make Extension non-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> in FinalError (#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)

Tweaks

  • 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 returning Self (#243)
  • Update dependencies (#253)
  • Update dependencies (#257)
  • Add pull request template (#263)
  • Clean up the description for the -d/--dir argument to decompress (#264)
  • Show subcommand aliases on --help (#275)
  • Update dependencies (#276)
  • Rewrite progress module (#280)
  • Create scripts for benchmarking ouch (#280)

Removals

  • Remove automatic detection for partial compression (#286)
  • Remove progress feature (#300)

Tweaks

  • Version bump

New Features

  • Properly detect if we are compressing a partially compressed file (#91)
  • Support .tgz (#85)
  • Add support for short tar archive extensions (#101)
  • Migrate from oof to clap for argument parsing (#108)
  • Shell completions & man page (#122)
  • Implement command 'list' to show archive contents (#129)
  • Print number of unpacked files by (#130)

Bug Fixes

  • 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 tar or zip panics (#89)
  • Compression flag --output not 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)

Improvements

  • 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-err crate instead of std::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)

Tweaks

  • 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 --output to --dir (#118)
  • Updating CONTRIBUTING.md (#132)
  • Remove tar combinations from compression format (#133)
  • Simplify cli canonicalize implementation (#139)

New Features

  • Add Cargo lock file (#46)
  • Allow compression of empty folders (#57)
  • Make decompress command explicit (#61)
  • Add support for Zstd (#64)

Bug Fixes

  • Fix download script, download from new linux urls (#40)

Improvements

  • Don't use colors when stdout or stderr are being redirected (#60)
  • Making an error message for running decompress without arguments (#63)
  • Increasing read and writer buffers capacity (#65)

New Features

  • 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)

Improvements

  • Further testing to oof cli (#38)
  • Reuse Confirmation struct when checking for overwrite permission (#42)

New Features

  • Add support for dot-dot (..) in output file/directory (#4)
  • Add install.sh script (#37)
  • Add checking for typos on the compression subcommand (#21)

Bug Fixes

  • Fix the -n, --no flag usage and add an alias for the compress subcommand (#22)

Improvements

  • Added compression and decompression tests for each current supported format (#24)
  • Add tests to oof (#27)

Tweaks

  • Switch panics to errors (#21)