← 输入框|github.com|刷新
Skip to content

Releases: uutils/diffutils

v0.6.0

Choose a tag to compare

@github-actions github-actions released this 23 Oct 09:08

Rust Diffutils 0.6.0 Release:

We are happy to announce the release of Rust Diffutils 0.6.0 - a release focused on output compatibility, cmp on large files and project infrastructure.

On the diff side, three output formats moved closer to GNU: unified and context hunks are now merged when they are separated by up to twice the context size, the context format marks every line of a change block with !, and the side-by-side (-y) gutter marker sits in the middle of the gutter. These are small differences on screen, but they are exactly what makes a generated patch differ byte for byte from the one GNU produces.

cmp got faster and more capable: verbose byte printing no longer allocates (about 2.3x faster than before on large, completely different files), and --bytes / --ignore-initial are now 64-bit everywhere, so 32-bit systems can compare files beyond 4 GiB like GNU cmp does with large file support.

Around the code, the project grew up a lot this cycle: we now run the upstream GNU diffutils test suite in CI and track its results on every pull request, we have Divan benchmarks tracked by CodSpeed, a security audit workflow, a SECURITY.md, pre-commit hooks, and a wasm32-wasip1 build in CI.

We are now at 7 passing, 22 failing, 4 skipped on the GNU test suite.


GNU Test Suite Compatibility:

Result 0.6.0 % Total 0.6.0
Pass 7 21.21%
Skip 4 12.12%
Fail 22 66.67%
Error 0 0%
Total 33

Note: this is the first release with GNU test suite tracking (#217), so there is no 0.5.0 baseline to compare against. Many of the failing tests exercise options that are not implemented yet; they give us a clear list of what to work on next. The evolution is now tracked in uutils/diffutils-tracking, refreshed twice a day.


GNU testsuite evolution


Download diffutils 0.6.0

File Platform Checksum
diffutils-aarch64-apple-darwin.tar.xz Apple Silicon macOS checksum
diffutils-x86_64-apple-darwin.tar.xz Intel macOS checksum
diffutils-x86_64-pc-windows-msvc.zip x64 Windows checksum
diffutils-aarch64-unknown-linux-gnu.tar.xz ARM64 Linux checksum
diffutils-x86_64-unknown-linux-gnu.tar.xz x64 Linux checksum

Highlights:

  • diff Output Compatibility

    • Hunks separated by up to twice the context size are merged into one, like GNU (#306)
    • Context format (-c) marks every line of a change block with ! (#311)
    • Side-by-side (-y) places the gutter marker at the middle of the gutter (#277)
  • cmp Improvements

    • Verbose byte printing (-l, -b) no longer allocates: ~2.3x faster than 0.5.0 on large, fully different files (#153)
    • --bytes and --ignore-initial are now u64, lifting the 4 GiB limit on 32-bit systems (#183)
    • Checked subtraction for the verbose offset padding (#275)
  • GNU Compatibility & Robustness

    • Unknown options are reported as unrecognized option, in the same format as GNU (#179, #180)
    • Fixed a panic on a non-UTF-8 argument ending in --width=N (#250)
    • The multicall binary accepts prefixed names, so it can be installed as gdiff, uu-cmp, rust-diffutils, etc. (#231)
  • Testing & Benchmarking

    • The upstream GNU diffutils test suite runs in CI, with a PR comment showing regressions and fixes (#217, #278)
    • Divan benchmarks with continuous performance tracking on CodSpeed (#185, #189)
    • The integration tests validate patch and ed once with meaningful messages, and work with gpatch on macOS
  • Platform & Security

    • wasm32-wasip1 builds again and is now covered by CI (#215, #218)
    • Binaries are published from main (#163)
    • New SECURITY.md, COPYRIGHT file and a cargo audit workflow
  • Contributions: This release landed 92 pull requests from 13 new contributors


Call to Action:

Help us improve compatibility - Pick a failing GNU test and send a PR: github.com/uutils/diffutils
Sponsor us on GitHub to accelerate development: github.com/sponsors/uutils

What's Changed

diff

cmp

  • cmp: stop allocating for byte printing by @kov in #153
  • cmp: fix 32-bit usize overflow in test by @JustSoup312 in #173
  • cmp Feat: change data type for 'bytes' limit and 'ignore initial' to u64 by @GunterSchmidt in #183
  • cmp: use .map_err by @oech3 in #236
  • cmp.rs: simplify by .ok_or by @oech3 in #243
  • cmp: use checked subtraction for the verbose offset padding by @MsfPablo in #275

diffutils

  • fix: rename "Unknown option" to "unrecognized option" for diff and cmp by @Ryujiyasu in #179
  • fix: match GNU error format for unrecognized options by @Ryujiyasu in #180
  • support prefixed names by @oech3 in #231
  • diffutils: fix panic on non-UTF-8 argument ending in --width=N by @SAY-5 in #250

Testing

  • fix: create target directory in fuzz targets by @pocopepe in #219
  • tests: fix "old" names in generated patch files by @marc-hb in #224
  • tests: validate "patch" and "ed" commands once, print meaningful messages by @marc-hb in #226
  • tests: fix "gpatch --version" error message on mac by @marc-hb in #235

Performance & Benchmarks

Code Quality & Cleanup

CI & Build

  • Publish binary from main by @oech3 in #163
  • Use preinstalled rust, disable incremental build by @oech3 in #164
  • fuzzing.yml: Avoid non reusable cache generation by @oech3 in #170
  • Cargo.toml: Simplify profiles by @oech3 in #191
  • fix: follow redirects when fetching gnulib init.sh in upstream test suite by @kevinburkesegment in #202
  • *.yml: dedup env: by @oech3 in #204
  • actions: add security audit workflow by @xtqqczze in #210
  • feat: add GNU testsuite tracking workflows by @pocopepe in #217
  • ci: add .pre-commit-config.yaml by @cakebaker in #227
  • Make `compare_tes...
Read more

latest-commit

latest-commit Pre-release
Pre-release

Choose a tag to compare

@github-actions github-actions released this 07 Mar 21:05
bdf449e

commit: c4bd69c

v0.5.0

Choose a tag to compare

@github-actions github-actions released this 02 Jan 09:57
c38fe5f

Download diffutils 0.5.0

File Platform Checksum
diffutils-aarch64-apple-darwin.tar.xz Apple Silicon macOS checksum
diffutils-x86_64-apple-darwin.tar.xz Intel macOS checksum
diffutils-x86_64-pc-windows-msvc.zip x64 Windows checksum
diffutils-aarch64-unknown-linux-gnu.tar.xz ARM64 Linux checksum
diffutils-x86_64-unknown-linux-gnu.tar.xz x64 Linux checksum

What's Changed

  • Update Rust crate pretty_assertions to v1.4.1 by @renovate[bot] in #85
  • Update Rust crate unicode-width to v0.1.14 by @renovate[bot] in #86
  • Update Rust crate unicode-width to 0.2.0 by @renovate[bot] in #87
  • When running the upstream test suite, fetch missing tests/init.sh (fixes #90) by @oSoMoN in #91
  • Update Rust crate tempfile to v3.13.0 by @renovate[bot] in #94
  • Update Rust crate regex to v1.11.0 by @renovate[bot] in #95
  • Add cmp utility by @kov in #88
  • Upstream test suite: correctly handle tests that are skipped (fixes #92) by @oSoMoN in #93
  • README.md: be explicit with the list of tools by @sylvestre in #99
  • cmp: print verbose diffs as we find them by @kov in #100
  • Fix clippy warnings by @cakebaker in #101
  • fix(deps): update rust crate regex to v1.11.1 by @renovate[bot] in #102
  • chore(deps): update rust crate tempfile to v3.14.0 by @renovate[bot] in #104
  • Fix "unused import" warning on Windows by @cakebaker in #105
  • ci: remove CARGO_FEATURES_OPTION by @cakebaker in #106
  • chore(deps): update codecov/codecov-action action to v5 by @renovate[bot] in #107
  • ci: make sure gpatch is actually being used for tests on MacOS by @oSoMoN in #112
  • fix(deps): update rust crate itoa to v1.0.15 by @renovate[bot] in #108
  • fix(deps): update rust crate chrono to v0.4.40 by @renovate[bot] in #109
  • chore(deps): update rust crate predicates to v3.1.3 by @renovate[bot] in #110
  • chore(deps): update rust crate tempfile to v3.17.1 by @renovate[bot] in #111
  • chore(deps): update rust crate tempfile to v3.18.0 by @renovate[bot] in #113
  • chore(deps): update rust crate tempfile to v3.19.0 by @renovate[bot] in #114
  • chore(deps): update rust crate tempfile to v3.19.1 by @renovate[bot] in #115
  • chore(deps): update rust crate assert_cmd to v2.0.17 by @renovate[bot] in #116
  • fix(deps): update rust crate chrono to v0.4.41 by @renovate[bot] in #118
  • chore(deps): update rust crate tempfile to v3.20.0 by @renovate[bot] in #119
  • Create the side-by-side option (-y) feature for the diff command (Incomplete) by @sami-daniel in #117
  • fix(deps): update rust crate unicode-width to v0.2.1 by @renovate[bot] in #122
  • clippy: fix warnings by @cakebaker in #123
  • clippy: fix warnings from unnecessary_unwrap lint by @cakebaker in #125
  • chore(deps): update rust crate tempfile to v3.21.0 by @renovate[bot] in #127
  • fix(deps): update rust crate regex to v1.11.2 by @renovate[bot] in #128
  • fix(deps): update rust crate chrono to v0.4.42 by @renovate[bot] in #129
  • chore(deps): update rust crate tempfile to v3.22.0 by @renovate[bot] in #130
  • chore(deps): update rust crate tempfile to v3.23.0 by @renovate[bot] in #131
  • cargo dist: update to a recent release by @oSoMoN in #132
  • chore(deps): update rust crate regex to v1.11.3 by @renovate[bot] in #133
  • chore(deps): update rust crate unicode-width to v0.2.2 by @renovate[bot] in #134
  • chore(deps): update rust crate regex to v1.12.1 by @renovate[bot] in #135
  • chore(deps): update rust crate regex to v1.12.2 by @renovate[bot] in #136
  • chore(deps): update rust crate assert_cmd to v2.1.0 by @renovate[bot] in #139
  • Cargo.toml sync profiles with findutils by @oech3 in #140
  • chore(deps): update rust crate assert_cmd to v2.1.1 by @renovate[bot] in #141
  • tests: fix deprecation warnings from assert_cmd by @cakebaker in #142
  • chore(deps): update actions/cache action to v5 by @renovate[bot] in #147
  • chore(deps): update rust crate itoa to v1.0.16 by @renovate[bot] in #150
  • Fix compilation for 32-bit targets by @LunarEclipse363 in #146
  • chore(deps): update rust crate tempfile to v3.24.0 by @renovate[bot] in #151
  • chore(deps): update rust crate itoa to v1.0.17 by @renovate[bot] in #154
  • cmp_fast_path test improvements by @kov in #152
  • prepare version 0.5.0 by @sylvestre in #156
  • update cargo dist conf by @sylvestre in #157
  • cargo-dist: remove duplicate info by @sylvestre in #158

New Contributors

Full Changelog: v0.4.2...v0.5.0

v0.4.2

Choose a tag to compare

@github-actions github-actions released this 12 Sep 08:15

Download diffutils 0.4.2

File Platform Checksum
diffutils-aarch64-apple-darwin.tar.xz Apple Silicon macOS checksum
diffutils-x86_64-apple-darwin.tar.xz Intel macOS checksum
diffutils-x86_64-pc-windows-msvc.zip x64 Windows checksum
diffutils-x86_64-unknown-linux-gnu.tar.xz x64 Linux checksum

What's Changed

  • CI: install GNU patch on MacOS (fixes #66) by @oSoMoN in #67
  • CI: Update 'cargo dist' to version 0.13.3 by @oSoMoN in #69
  • cargo-dist: generate more targets by @sylvestre in #74
  • Make error message consistent with GNU diff's implementation when failing to read input file(s) by @oSoMoN in #63
  • Use the instrumentation-based code coverage implementation by @oSoMoN in #70
  • Fix clippy warnings in tests by @cakebaker in #84

Dependencies

Full Changelog: v0.4.1...v0.4.2

v0.4.1

Choose a tag to compare

@github-actions github-actions released this 27 Apr 11:17

Download diffutils 0.4.1

File Platform Checksum
diffutils-aarch64-apple-darwin.tar.xz Apple Silicon macOS checksum
diffutils-x86_64-apple-darwin.tar.xz Intel macOS checksum
diffutils-x86_64-pc-windows-msvc.zip x64 Windows checksum
diffutils-x86_64-unknown-linux-gnu.tar.xz x64 Linux checksum

What's Changed

  • Un-hardcode a test filename in an integration test (fixes #61) by @oSoMoN in #62
  • Handle long option names for the supported output styles… by @oSoMoN in #52
  • Handle directory-file and file-directory comparisons in the diff by @TanmayPatil105 in #56

Full Changelog: v0.4.0...v0.4.1

v0.4.0

Choose a tag to compare

@github-actions github-actions released this 21 Apr 14:24

Download diffutils 0.4.0

File Platform Checksum
diffutils-aarch64-apple-darwin.tar.xz Apple Silicon macOS checksum
diffutils-x86_64-apple-darwin.tar.xz Intel macOS checksum
diffutils-x86_64-pc-windows-msvc.zip x64 Windows checksum
diffutils-x86_64-unknown-linux-gnu.tar.xz x64 Linux checksum

What's Changed

  • Normal diff: compact ranges of lines where possible (fixes #10) by @oSoMoN in #11
  • Fix trivial typo in error message by @oSoMoN in #12
  • Match GNU diff's implementation for exit codes (fixes #17) by @oSoMoN in #18
  • Ed diff: compact ranges of lines where possible (fixes #21) by @oSoMoN in #22
  • Implement -s/--report-identical-files option (fixes #23) by @oSoMoN in #24
  • Implement -q/--brief option (fixes #19) by @oSoMoN in #20
  • clippy: fix warnings from useless_vec lint by @cakebaker in #30
  • Implement -t/--expand-tabs option (fixes #26) and --tabsize=NUM option (fixes #27) by @oSoMoN in #28
  • Implement the Default trait for Params by @oSoMoN in #36
  • Pass a Params reference to the various diff() functions, instead of a long list of arguments by @oSoMoN in #37
  • Fix the link to the Codecov badge by @oSoMoN in #44
  • Unit and integration tests for reading data from standard input by @oSoMoN in #45
  • Run clippy pedantic fixes by @sylvestre in #48
  • Disable tests on Windows that use ed by @cakebaker in #50
  • Unit test to verify that conflicting output styles result in an error by @oSoMoN in #51
  • Handle the rewrite of "-" to "/dev/stdin" in main to leave the filenames unchanged (fixes #46) by @oSoMoN in #47
  • Display modification times of input files in context and unified diff by @TanmayPatil105 in #33
  • Move test assertions in the cfg block where they belong (fixes #3) by @oSoMoN in #58

Documentation

  • README: minor grammar correction by @oSoMoN in #38

CI

  • Use the private Codecov token stored as a secret, by @oSoMoN in #55
  • CI: On Windows, use GNU's patch.exe instead of Strawberry Perl patch by @oSoMoN in #57
  • Run the upstream test suite in CI (fixes #8) by @oSoMoN in #13
  • ci: fuzzers in the Github Actions CI. by @hanbings in #29
  • Disable the fail fast (closes: #40) by @sylvestre in #41

Dependencies

  • Configure Renovate by @renovate in #1
  • fix(deps): update rust crate libfuzzer-sys to 0.4 by @renovate in #5
  • Update Rust crate chrono to 0.4.38 - autoclosed by @renovate in #54
  • Update Rust crate diff to 0.1.13 by @renovate in #4
  • Update codecov/codecov-action action to v4 by @renovate in #9
  • Update Rust crate regex to 1.10.4 by @renovate in #34
  • chore(deps): update rust crate tempfile to 3.10.1 by @renovate in #25

New Contributors

Full Changelog: v0.3.0...v0.4.0