Releases: uutils/coreutils
0.8.0
Rust Coreutils 0.8.0 Release:
We are excited to announce the release of Rust Coreutils 0.8.0 β a major release featuring significant performance gains across core utilities, expanded WebAssembly (WASI) support with a brand-new online playground, and continued hardening against edge-case panics, /dev/full aborts and start of a large-scale migration from nix to rustix** for lower-level syscall safety!
GNU Test Suite Compatibility:
| Result | 0.7.0 | 0.8.0 | Change 0.7.0 to 0.8.0 | % Total 0.7.0 | % Total 0.8.0 | % Change 0.7.0 to 0.8.0 |
|---|---|---|---|---|---|---|
| Pass | 629 | 630 | +1 | 94.59% | 94.74% | +0.15% |
| Skip | 13 | 14 | +1 | 1.95% | 2.11% | +0.16% |
| Fail | 23 | 21 | -2 | 3.46% | 3.16% | -0.30% |
| Error | 0 | 0 | 0 | 0% | 0% | 0% |
| Total | 665 | 665 | 0 |
Highlights:
-
GNU Compatibility & Upstream Collaboration
- 630 passing GNU tests, with 2 fewer failures than 0.7.0
- Continued contributing tests and bug reports upstream to GNU coreutils, strengthening both projects
- Our compatibility work regularly uncovers edge cases in GNU itself, leading to fixes on both sides
-
nixβrustixMigration- Replaced
nixcrate withrustixacross cat, df, wc, tty, tsort, tail, touch, date, mkdir, and uucore - Reduced range of unsafe code in hostname, logname, who, and nice
uucore: usesrustixforsplice(), restricted to Linux
- Replaced
-
Performance Improvements
uucore: Share fluent resources between threads β dd perf +45%uucore: Callrt_sigactiononce instead of 62 times β faster startupls: Replace recursion with iterative depth-first search; remove many unnecessary allocationssort: Performance improvements across sorting pathswc: Improved-cperformance with unextended pipe input (Linux)cat: Avoid unnecessarypipe()when stdout is already a pipe; don't lock stdout beforesplice()dd: Avoid zero-filling buffer atread_and_discardtee: Increased buffer size for large input; removedBoxanddynoverheadnumfmt: Protect name from argv[0] β +3% perfpr: AvoidStringconversion when storing lines to printtrue/false/echo: Avoiduu_app().render_version()for smaller binary
-
WebAssembly (WASI) Support & Online Playground
- New: Online Playground β try Rust Coreutils directly in your browser, powered by WebAssembly (blog post)
- Added WASI support for 70+ utilities including
ls,head,cat,cp,mv,sort,tail, and many more - Embedded all locales in the WASI binary
- Added WASI platform stubs for
FileInformationand IO module inuucore - Single-threaded sort path for WASI; disabled
rayonon WASI
-
Platform Support
- NetBSD: Multiple fixes,
stdbufsupport, expanded CI coverage pathchk: Now builds for Windowswc: Cross-platform building and 32-bit supportstdbuf: Fixed Cygwincfgblock; detect unsupported target at build timeuucore(fs): Madedisplay_permissions_unixcross-platformuucore: Support realtime signals (RTMIN/RTMAX) insignal_by_name_or_valueuucore: PermitDas decimal suffix modifier for GNU compatibility
- NetBSD: Multiple fixes,
-
Documentation & Manpages
- Manpages now include TL;DR examples, links to the source code, and open bugs β see for example
ls - Manpages are available in multiple languages including French and Spanish, refreshed daily
- Added manpage linting in CI to catch formatting issues early
- TL;DR attribution and disclaimer are now translatable
- Manpages now include TL;DR examples, links to the source code, and open bugs β see for example
-
Contributions: This release was made possible by 13 new contributors joining our community
Call to Action:
Try it in your browser β Online Playground powered by WebAssembly
Help us translate β Contribute to Rust Coreutils on Weblate or TL;DR pages
Sponsor us on GitHub to accelerate development: github.com/sponsors/uutils
What's Changed
cat
- cat: Drop a clone() and use clap's default value by @oech3 in #11298
- cat: replace nix with rustix by @oech3 in #11567
- cat: avoid pipe() if stdout is pipe, extend pipe by @oech3 in #11551
- cat: add bench for large size for splice by @oech3 in #11587
- cat: add WASI stub for is_unsafe_overwrite and add to feat_wasm by @sylvestre in #11573
- cat: fallback with pipe() failure by @oech3 in #11635
- cat: don't lock stdout before splice() by @oech3 in #11643
- cat: simplify splice & fix comment by @oech3 in #11627
- cat: add bench by @oech3 in #11525
- cat: remove some unnecessary
to_owned()calls by @cakebaker in #11676
chown
- chown(ref): parse_uid flattened syntax by @hlsxx in #11351
- chown: warn when '.' is used as owner:group separator by @eyupcanakman in #11438
cksum
- cksum family: #[allow(clippy::unwrap_used)] by @oech3 in #11307
- cksum: add length support for shake128 and shake256 validation by @AldanTanneo in #11320
- cksum: Bring back blake3 algorithm by @RenjiSann in #11316
- cksum: rework blake length validation, add tests by @RenjiSann in #11437
- cksum: Match GNU behavior for digest length errors in --check mode by @RenjiSann in #11499
- *sum: protect names against argv[0] by @oech3 in #11375
coreutils
- coreutils: --help >/dev/full panics by @oech3 in #11444
- coreutils: --list arg and no args should fail by @oech3 in #11385
- coreutils: Protect against env -a for security by @oech3 in #10773
- coreutils: strip errno by @oech3 in #11484
- yes, coreutils: backport(enable) 2 GnuTests by @oech3 in #11480
cp
- clippy(cp): fix collapsible_if lint by @mattsu2020 in #11288
- fix(cp): always create dest dirs with owner write bit before fixing permissions by @baa-ableton in #11318
- wasm: add support for cp & mv by @sylvestre in #11572
cut
- cut: Drop a clone() and use clap's default value by @oech3 in #11310
- cut: improve some error messages by @cakebaker in #11338
- cut: reject literal '' delimiter special-casing by @can1357 in #11399
- cut: honor only-delimited in newline-delimiter mode by @can1357 in #11394
- cut: use
?instead ofmatchby @cakebaker in #11461
date
- date: replace nix by rustix by @oech3 in #11646
- date: fix "unused variable" warning by @cakebaker in #11637
- date: fix date +%9223372036854775807c panic by @mattsu2020 in #11046
- date: fix %#P case-swap on lowercase am/pm by @vishakha1411 in #11671
- date: honor narrow width on wide default strftime fields by @vishakha1411 in #11670
- date: apply locale-aware localization before GNU modifier processing by @sylvestre in #11661
- date: add ignored tests for GNU compatibility gaps found by fuzz_date by @sylvestre in #11665
dd
- dd: fix ISO-8859-1 case conversion for conv=lcase/ucase by @sylvestre in #10830
- dd: catch OOM by @oech3 in #11562
- dd: avoid 0-filling buf at read_and_discard by @oech3 in #11583
- dd: do not show zero multiplier warning when zero is the multiplicand by @iburaky2 in #11673
df
- df: replace unsafe libc...
0.7.0
Rust Coreutils 0.7.0 Release:
We are excited to announce the release of Rust Coreutils 0.7.0 β a performance-focused release with major optimizations across dozens of utilities, continued safety improvements replacing unsafe code with safe abstractions, and a comprehensive campaign to eliminate panics on write errors. We also contributed many patches upstream to GNU coreutils, and welcomed their feedbacks and supports, strengthening both projects!
GNU Test Suite Compatibility:
| Result | 0.6.0 | 0.7.0 | Change 0.6.0 to 0.7.0 | % Total 0.6.0 | % Total 0.7.0 | % Change 0.6.0 to 0.7.0 |
|---|---|---|---|---|---|---|
| Pass | 622 | 629 | +7 | 96.28% | 94.59% | -1.69% |
| Skip | 7 | 13 | +6 | 1.08% | 1.95% | +0.87% |
| Fail | 16 | 23 | +7 | 2.48% | 3.46% | +0.98% |
| Error | 1 | 0 | -1 | 0.15% | 0% | -0.15% |
| Total | 646 | 665 | +19 (new tests) |
Note: The GNU test reference was updated from 9.9 to 9.10, adding 19 new tests. While the pass percentage decreased due to these newly added tests, the absolute number of passing tests increased by 7 and errors were eliminated entirely. Work is ongoing to address the new test failures.
Highlights:
-
GNU Compatibility & Upstream Contributions
- 629 passing tests (+7 from 0.6.0), with 19 new tests added from the GNU 9.10 update
- Updated GNU test reference from 9.9 to 9.10
- Contributed numerous patches upstream to GNU coreutils, benefiting both projects
- New GNU compatibility fixes across
date,fmt,kill,ptx,numfmt,cksum, and more - Took over maintenance of
num-prime, the primality testing library used byfactor
-
Performance Overhaul
- Faster hash maps:
rustc-hashinls,du,tsort,shuf,mv;foldhashinsort unexpand/expand: ASCII fast-path, buffered reads β 14%+ gain inunexpandshuf,split,sort,du: Reduced malloc allocations (+3β6% indu, +4% inshuf)nl: Optimized withitoaand direct writingtrue/false: Removedclapdependency, smaller binary, faster startupuucore: Disabled signal setup in simple utilities for binary size and startup speed
- Faster hash maps:
-
Robustness: Eliminated
/dev/fullPanics- Fixed panics when stderr is
/dev/fullacross 20+ utilities (echo,date,sort,expr,hostname,id,comm,pr,dircolors, and more) - Generic fix ensuring unrecognized options with
2>/dev/fulldo not abort
- Fixed panics when stderr is
-
Safety & Code Quality
- Replaced unsafe
libccalls with safenixcrate wrappers inuucore(umask,mkdirat, and more) andmknod - Eliminated TOCTOU races in
ln,tac, andinstall -D rm:--preserve-rootnow works correctly on symlinks- MSRV updated to 1.88
- Replaced unsafe
-
Notable Bug Fixes
date: Extensive fixes β-u/-s/-dflags, timezone abbreviation lookup and DST, RFC-822 format,%+/%_modifiers,--debug, localedate_fmtcp: Readonly directories,-a/-zflags, special files, non-UTF-8 directory namesmv: Preserve symlinks during cross-device moves, handle FIFOs in directoriesls: Hyperlink OSC 8 format, dired reports, fd leak on deep recursion, invalid UTF-8 hidden filessort: Collator panic in worker threads, scientific notation parsingpaste: Multi-byte delimiters, GNU escape sequences, bounded bufferingprintf:%qshell quoting with control chars and quotesptx:-t/--typeset-mode, multibyte Unicode panic, GNU default behaviornumfmt:--debugflag, empty delimiter, null byte handling, error message formattingcksum: SHAKE algorithms,--binary/--text/--tagerrorscut,tac,tail,tr,uniq,od,chroot,stat,mktemp,pr,readlink,ln,kill,nproc,rm,env,sync,fmt,factor,wc: Various GNU compatibility and correctness fixes
-
Platform Support
- NetBSD and PowerPC build fixes
- Windows:
tacstdin piping,test -r/-w/-x, publish static*.exebinaries - WebAssembly: Publish
*.wasmartifacts stdbuf: Supportlibstdbufin same directory as binary- NixOS test compatibility fix; added security audit workflow
-
Contributions: This release was made possible by 23 new contributors joining our community
Call to Action:
Help us translate - Contribute translations at Weblate
Sponsor us on GitHub to accelerate development: github.com/sponsors/uutils
What's Changed
cat
cksum
- *sum: Fix locales fetching from
checksum_commonafter installation by @RenjiSann in #10575 - *sum: Fix read_byte_lines discarding read errors by @RenjiSann in #10671
- test/cksum: implement
test_signed_checksumsby @0xMillyByte in #10714 - cksum: Accept SHAKE algorithms by @RenjiSann in #10772
- cksum family: Backport new errors for --binary, --text and --tag by @oech3 in #10618
- cksum family: Fix clippy::unnecessary_wraps by @oech3 in #11110
chroot
- chroot: fix gid being set by uid with --userspec #10307 by @cerdelen in #10465
- chroot: use var_os by @xtqqczze in #11070
comm
- comm /etc/pacman.conf /dev/null 2>/dev/full does not abort by @oech3 in #10746
- date, comm, tty: Fixing handling output to dev/null by @ChrisDryden in #10888
coreutils
- tests/misc/coreutils.sh: Fail with invalid binary name by @oech3 in #10258
- coreutils: output expected error for unrecognized options by @ChrisDryden in #9869
- coreutils: Let the name *utils valid by @oech3 in #10729
- coreutils: Fix 2>/dev/full aborts & drop a sed for GnuTests by @oech3 in #10740
- all: --typo 2>/dev/full does not abort by @oech3 in #10764
- Add regression test for coreutils --list by @oech3 in #10858
cp
- cp: fix recursive copy of readonly directories by @nikolalukovic in #10529
- cp: improve code clarity and remove redundant filesystem checks by @sylvestre in #10790
- cp: fixing cp -a functionality to match gnu implementation for -z flag handling and for folders by @ChrisDryden in #10207
- cp: Fix panic when recursively copying a directory with a non-UTF8 name by @aweinstock314 in #11148
- cp: handle special files by @victor-prokhorov in #11163
csplit
- refactor(csplit): use &str slices for patterns by @xtqqczze in #11013
- csplit: add benchmarks for line number and regex pattern splitting by @sylvestre in #10927
cut
- cut: fix -s flag for newline delimiter and optimize memory allocation by @akervald in #11143
- cut: two simple refactorings by @cakebaker in #11194
date
- date: fix -u flag to match GNU behavior for input parsing by @ChrisDryden in #10715
- date: Fix format optional argument to capture all following parameters by @cerdelen in #10914
- date: fix -s UTC conversion losing timezone offset by @yachi in #10828
- date: fix RFC-822 format to always use English names by @sylvestre in #10932
- date: bump parse_datetime & add test for leap-1 GNU test by @sylvestre in #10933
- date: add tests to match GNU's by @sylvestre in #10939
- date: fix double periods in Hungarian month abbreviations by @naoNao89 in #10945
- date: fix subfmt-up1, fill-1, pct-pct, and invalid-high-bit-set tests / implement --debug by @sylvestre in #10940
- date: use locale date_fmt instead of D_T_FMT for default format by @ChrisDryden in #10935
- date: Fix Error message missing '+' for format string after valid d flag by @cerdelen in #10982
- date: fix -d with relative dates and timezone abbreviations by @yachi in #10956
- date: fix timezone abbreviations using wrong offset outside their DST season by @aguimaraes in #11045
- date: fix %+ and %_ modifier edge cases by @naoNao89 i...
0.6.0
Rust Coreutils 0.6.0 Release:
We are happy to announce the release of Rust Coreutils 0.6.0 β a major milestone achieving 96% GNU compatibility with significant safety improvements, enhanced locale support, and extensive bug fixes!
Highlights:
-
Major GNU Compatibility Leap
- 622 passing tests (+56 from 0.5.0), achieving 96.28% compatibility
- Reduced failures from 55 to just 16 (-39) and skipped tests from 23 to 7 (-16)
- Extensive test suite improvements across
sort,ls,date,cksum,tail, and many more
-
Safety & Code Quality
- Removed unsafe code from
date,sort,locale.rs, and other utilities - Replaced raw
libccalls with safenixcrate equivalents throughout - Enhanced error handling to avoid panics on
/dev/fullwrites across many utilities
- Removed unsafe code from
-
Locale & Internationalization
- Added ICU support for locale-aware day/month names in
date - Implemented locale-aware hour formatting and calendar support
- Added locale-aware numeric sorting with thousand separator support in
sort - Locale-aware collation support in
join
- Added ICU support for locale-aware day/month names in
-
Performance Improvements
base32/base64/basenc: Optimized with reduced memset operationsshuf: Optimized numeric output and added--random-seedoptiondate: Wrapped stdout in BufWriter for batch processinguniq: Optimized memory usage for ignore-case comparisontsort: Avoid reading entire input into memory, intern stringsdf: Performance improvements with better filesystem handling
-
Platform Support Expansion
- Expanded safe directory traversal to all Unix platforms
- Enhanced Cygwin support across multiple utilities
- Added SMACK security module support for
ls,id,mkdir,mkfifo,mknod - Added RISC-V 64-bit musl target to CI
-
Notable Utility Improvements
cksum/hashsum: Merged common logic, removed deprecatedhashsumbinarytail: Added--debugflag, fixed-Fsymlink tracking, fixed--pidwith FIFOtimeout: Added comprehensive signal handling and--verboseimprovementssort: Legacy+POS/-POShandling, locale-aware collation, debug key annotationspr: Multiple fixes for headers, form feeds, and pagination optionschmod: Fixed recursive handling and--preserve-rootoptionrm: Fixed error reporting and symlink handling
-
Contributions: This release was made possible by 41 new contributors joining our community
GNU Test Suite Compatibility:
| Result | 0.5.0 | 0.6.0 | Change 0.5.0 to 0.6.0 | % Total 0.5.0 | % Total 0.6.0 | % Change 0.5.0 to 0.6.0 |
|---|---|---|---|---|---|---|
| Pass | 566 | 622 | +56 | 87.75% | 96.28% | +8.53% |
| Skip | 23 | 7 | -16 | 3.57% | 1.08% | -2.49% |
| Fail | 55 | 16 | -39 | 8.53% | 2.48% | -6.05% |
| Error | 1 | 1 | 0 | 0.16% | 0.15% | ~0% |
| Total | 645 | 646 | +1 (new test) |
Call to Action:
Help us translate - Contribute translations at Weblate
Sponsor us on GitHub to accelerate development: github.com/sponsors/uutils
What's Changed
arch
base64
- base(nc|32|64): Optimize performances reduction memset by @mattsu2020 in #9632
- Improve read error message by @dezgeg in #10512
basename
cat
- do not connect to unix domain socket and instead return an error by @asder8215 in #9755
- fix write error handling to propagate errors instead of panicking by @rynewang in #10038
- tests(cat,stdbuf): Add broken-pipe robustness tests (#4627) by @naoNao89 in #8798
chgrp
chmod
- fix error handling if multiple files are handled by @cerdelen in #9793
- recursive hyper nested dirs by @cerdelen in #9990
- preserve root by @cerdelen in #10033
chroot
- use execvp directly instead of process::Command by @mattsu2020 in #9013
cksum
- Checksum ignore binary by @RenjiSann in #9695
- Improve check-only flags handling by @RenjiSann in #9770
- Move --ckeck's deps to clap by @oech3 in #9996
- Move handle_tag_text_binary_flags to clap by @oech3 in #9999
- Simple default tag variable by @oech3 in #10057
- cksum,hashsum: Drop a message replaced by clap by @oech3 in #10055
- cksum/hashsum: Merge common logic under a common crate by @RenjiSann in #10142
- Revert recent checksum CLI changes by @RenjiSann in #10141
- Don't panic when checked file returned EIO by @oech3 in #10534
- --debug 2>/dev/full does not abort by @oech3 in #10589
- -c /dev/null 2>/dev/full should not abort by @oech3 in #10643
comm
- fix comparison when reading from pipes by @martinkunkel2 in #9545
- Fixes #10192 - fix(comm): improve stdout handling and add test for lossy UTF-8 output by @Paol0B in #10206
- Properly handle I/O errors when reading input by @dezgeg in #10567
cp
- fix preserve-gid when canonicalize fails due to inaccessible parent dirs by @ChrisDryden in #9803
- reduce memory usage for cp -al by skipping unnecessary tracking by @ChrisDryden in #9805
- set status code when encountering circular symbolic links by @Thanhphan1147 in #9757
- symlink flags fixing conflicting flag logic to use last flag by @Dylans123 in #9960
- Added test for permissions copying to an existing file by @max-amb in #10049
- use FileInformation without dereference for symlink destination check to match GNU behaviour for test/nfs-removal-race by @ChrisDryden in #10086
- Avoid other error at cp stream /dev/full by @oech3 in #10139
- Fixed posixly correct dangling symlink test by @max-amb in #10247
- cp/mv: suppress xattr ENOTSUP errors for optional preservation by @ChrisDryden in #10083
csplit
- detect and report write errors by @ChrisDryden in #9855
date
- remove unsafe by @xtqqczze in #9688
- fix inconsistent input parsing between -s and -d flags by @AnarchistHoneybun in #9690
- Implement locale-aware hour formatting for date command by @naoNao89 in #9654
- improve fuzzer and handle edge cases by @ChrisDryden in #9661
- fix hardcoded formats with nl_langinfo(D_T_FMT) by @naoNao89 in #9756
- Fix military date parsing not adjusting date by @cerdelen in #9785
- add benchmark by @CrazyRoka in #9911
- benchmark: keep only one value by @sylvestre in #9989
- avoid double parsing when resolving timezone abbreviations by @CrazyRoka in #9997
- perf(date): wrap stdout in BufWriter to improve batch processing by @CrazyRoka in #9994
- use PosixCustom formatting for GNU-compatible output by @ChrisDryden in #10245
- test: %x format specifier respects locale settings by @sylvestre in #10285
- handle parentheses as comments like GNU date by @sylvestre in #10133
- add ICU support for day/months names by @sylvestre in #10457
- add locale-aware calendar support for era years by @sylvestre in #10473
- use jiff-icu for locale calendar conversions by @ChrisDryden in #10499
- fuzz_date: skip combined short options like -Rf- that read from stdin by @ChrisDryden in #10547
- fix %% not being preserved in locale format strings by @ChrisDryden in https:...
latest-commit
commit: 66d4fae
0.5.0
π¦ Rust Coreutils 0.5.0 Release:
We are excited to announce the release of Rust Coreutils 0.5.0 β a significant milestone featuring comprehensive platform improvements, and robust testing infrastructure with continued progress toward full GNU compatibility!
Highlights:
-
Improved GNU Compatibility
- 566 passing tests (+22 from 0.4.0), achieving 87.75% compatibility
- Reduced failures from 56 to 55 (-1) and skipped tests from 33 to 23 (-10)
- Updated GNU reference from 9.8 to 9.9, adding 11 new tests
- Major improvements to
fold,cksum,install, andnumfmt
-
Unicode & Text Processing Enhancements
fold: Added combining character support for proper Unicode text wrappingptx: Implemented GNU mode with dumb terminal format- Enhanced text processing across multiple utilities
-
Security & Performance Improvements
cksum: Merged with hashsum for unified checksum functionalityinstall: Enhanced mode parsing with comma-separated support and umask handlingseq: Improved large integer handling with dedicated benchmarks- Various memory and performance optimizations across utilities
-
Platform Support Expansion
- Added OpenBSD to CI pipeline with comprehensive testing
- Re-enabled Redox OS support in CI
- Enhanced Cygwin support in uucore
- Improved build processes across platforms
-
Developer Experience Improvements
- New TTY helper for enhanced testing capabilities
- Comprehensive benchmarking additions for multiple utilities
- Reduced dependency bloat through feature splitting
- Enhanced hardware detection module
-
Contributions: This release was made possible by 6 new contributors joining our community
GNU Test Suite Compatibility:
| Result | 0.4.0 | 0.5.0 | Change 0.4.0 to 0.5.0 | % Total 0.4.0 | % Total 0.5.0 | % Change 0.4.0 to 0.5.0 |
|---|---|---|---|---|---|---|
| Pass | 544 | 566 | +22 | 85.80% | 87.75% | +1.95% |
| Skip | 33 | 23 | -10 | 5.21% | 3.57% | -1.64% |
| Fail | 56 | 55 | -1 | 8.83% | 8.53% | -0.30% |
| Error | 1 | 1 | 0 | 0.16% | 0.16% | 0% |
| Total | 634 | 645 | +11 (new tests) |
Call to Action:
π Help us translate - Contribute translations at Weblate
π Sponsor us on GitHub to accelerate development: github.com/sponsors/uutils
π Download the latest release: https://uutils.github.io
What's Changed
basenc
- basenc: Fix basenc.pl GNU-compat tests pass by @karanabe in #9203
- fix(Basenc):fix GNU coreutils test bounded-memory.sh by @mattsu2020 in #9536
- base32, base64, baseenc:Simplifying the base encoding uu_app and adding basic buffer tests by @ChrisDryden in #9409
chmod
- chmod:fix safe traversal/access by @mattsu2020 in #9554
cksum
- cksum/hashsum: merge digest computation & various improvements by @RenjiSann in #9135
- cksum: Fix GNU test cksum-base64-untagged by @RenjiSann in #9344
- Add --debug flag to cksum by @naoNao89 in #9088
- cksum: Fix GNU test
cksum-c.shafter bump to 9.9 by @RenjiSann in #9511 - cksum: small improvements, l10n by @RenjiSann in #9532
- Fix hardware capabilities detection; cksum --debug by @RenjiSann in #9603
cp
- cp: allow directory merging when destination was just created by @vikram-kangotra in #9325
- cp: Adding test to cover no dereference when copying symlinks by @ChrisDryden in #9623
- cp: Enabling cp force flag to run on windows by @ChrisDryden in #9624
- Add comprehensive readonly file regression tests for cp by @naoNao89 in #9045
du
- du: Alias -A --apparent-size by @oech3 in #9555
- du: handle
--files0-from=-with piped in-by @cakebaker in #8985
env
- Adding integration tests for the braced variable parsing in env by @ChrisDryden in #9459
- env: remove outdated comment by @cakebaker in #9496
- env: use Command::exec() instead of libc::execvp() by @Ecordonnier in #9614
fold
- fold:Improve fold bench data generation by @mattsu2020 in #9210
- fix(fold): GNU fold-characters.sh test by @mattsu2020 in #9126
- Fold: Adding combining character support by @ChrisDryden in #9328
hashsum
- hashsum: Fix length processing to fix last GNU test by @RenjiSann in #9569
install
- install: ignore umask by @akretz in #9254
- Enhance mode parsing to support comma-separated mode strings in install command by @Vesal-J in #9298
- install: do not call chown when called as root by @Ecordonnier in #9477
ln
ls
- ls: prevent ReadDir from closing before entries are processed by @vikram-kangotra in #9410
mkfifo
- tests/mkfifo: added a test to check mkfifo permission denied error for code coverage by @asder8215 in #9586
nl
nohup
- nohup: use Command::exec() instead of libc::execvp() by @Ecordonnier in #9613
numfmt
od
- od: fix GNU od.pl by @mattsu2020 in #9334
- fix(od):fix GNU coreutils test od float.sh by @mattsu2020 in #9534
pr
- pr: fix header formatting for custom date formats starting with '+' by @sylvestre in #9252
ptx
- ptx: implement GNU mode with dumb terminal format by @sylvestre in #9573
readlink
- readlink: test calling without args by @cakebaker in #9230
- readlink:Correction to Symbolic Link Handling by @mattsu2020 in #9633
seq
- fix(seq): handle BrokenPipe like GNU by @mattsu2020 in #9471
- seq:fix test_broken_pipe_still_exits_success by @mattsu2020 in #9520
- seq: adding large integers benchmarks by @ChrisDryden in #9561
shuf
- shuf: add benchmarks by @sylvestre in #9320
sort
- sort: make compression program failures non-fatal, warn and fallback to plain files by @sylvestre in #9266
stdbuf
stty
- Adding TTY helper for unix to be able to create tests for stty and more by @ChrisDryden in #9348
- Using the pty helper function for the more bin testing by @ChrisDryden in #9441
- stty: baud parsing integration tests and validation by @ChrisDryden in #9454
- stty: Implemented saved state parser for stty by @ChrisDryden in #9480
- stty: Changing shell command to add recognizing a TTY for stty tests by @ChrisDryden in #9336
tail
- tail: batch inotify events to prevent redundant headers after SIGSTOP/SIGCONT by @sylvestre in #9574
- tail: fix intermittent overlay-headers test by batching inotify events by @sylvestre in #9598
tee
- tee: fix poll timeout causing intermittent hangs with -p flag by @sylvestre in #9585
timeout
- Reducing sleep times and timeout times in test_timeout by @ChrisDryden in #9448
- timeout: cleanup return values by @Ecordonnier in #9576
- timeout: remove FIXME in test by @Ecordonnier in #9580
dd
- dd: Handle slow transfer rates in progress ...
0.4.0
π¦ Rust Coreutils 0.4.0 Release:
We are pleased to announce the release of Rust Coreutils 0.4.0 β continuing our journey toward full GNU compatibility with improved test coverage, enhanced functionality, and robust implementations!
Highlights:
-
Enhanced GNU Compatibility
- 544 passing tests (+12 from 0.3.0), achieving 85.80% compatibility
- Reduced failures from 68 to 56 (-12)
- Better compatibility with GNU
datetimezone handling
-
Algorithm & Performance Improvements
factor: Integrated num_prime crate for faster u64/u128 factorizationtsort: Fixed stack overflow issues with iterative DFS implementationcksum: Added comprehensive performance benchmarksmkdir: Fixed stack overflow with deeply nested directories
-
Platform Support Enhancements
- OpenBSD support for
stdbufanduptime - FreeBSD build and test improvements
- Better cross-platform compatibility
- OpenBSD support for
-
hashsum Reorganization
- Removed non-GNU binaries to fix interface divergence
- Merged functionality into
cksumfor better GNU compatibility - Marked hashsum as deprecated in favor of cksum
-
Contributions: This release was made possible by the dedication of 17 contributors, including 4 newcomers.
GNU Test Suite Compatibility:
| Result | 0.3.0 | 0.4.0 | Change 0.3.0 to 0.4.0 | % Total 0.3.0 | % Total 0.4.0 | % Change 0.3.0 to 0.4.0 |
|---|---|---|---|---|---|---|
| Pass | 532 | 544 | +12 | 83.91% | 85.80% | +1.89% |
| Skip | 33 | 33 | 0 | 5.20% | 5.20% | +0.01% |
| Fail | 68 | 56 | -12 | 10.73% | 8.83% | -1.90% |
| Error | 1 | 1 | 0 | 0.16% | 0.16% | 0% |
| Total | 634 | 634 | 0 |
Call to Action:
π Help us translate - Contribute translations at Weblate
π Sponsor us on GitHub to accelerate development: github.com/sponsors/uutils
π Download the latest release: https://uutils.github.io
What's Changed
base64
cat
- Fix EINTR handling in cat by @naoNao89 in #8946
- fix(cat): refine unsafe overwrite detection for appending files by @mattsu2020 in #9122
chown
cksum
- Refactor cksum for incoming merge with hashsum, Fix behavior for
--textand--untaggedby @RenjiSann in #9024 - Fix "cksum: --length 0 shouldn't fail for algorithms that don't support --length" by @RenjiSann in #9032
- Add support for sha2, sha3 by @RenjiSann in #9035
- Fix GNU
cksum-c.shandcksum-sha3.shby @RenjiSann in #9063 - add cksum performance benchmarks by @naoNao89 in #9075
- fix(cksum): correct CRC32B implementation to match GNU cksum by @naoNao89 in #9026
comm
- Fix EINTR handling in comm by @naoNao89 in #8946
- hold the stdin lock for the whole duration of the program by @andreacorbellini in #9085
date
- fix(date): support timezone abbreviations in date --set by @naoNao89 in #8944
- date, touch: fix parse_datetime 0.13.0 compatibility by @naoNao89 in #8843
- improve compat with GNU by @sylvestre in #9022
- remove
chronoby @cakebaker in #9048 - add --uct alias and allow multiple option aliases together by @sylvestre in #9181
dd
du
- fix dead code warnings in test on Android by @cakebaker in #9131
- disable some benchmarks by @sylvestre in #9167
- also disable du_human_balanced_tree as benchmark by @sylvestre in #9198
factor
- base benchmarking for single/multiple u64, u128, and >u128 by @asder8215 in #9182
- use num_prime crate's u64 and u128 factorization methods to speed up the performance by @asder8215 in #9171
hashsum
- don't fail on dirs by @Ada-Armstrong in #8930
- Remove non-GNU binaries (fix cksum interface divergence) by @oech3 in #9153
install
- fix the error message by @sylvestre in #9188
ls
mkdir
- Fix stack overflow with deeply nested directories by @naoNao89 in #8947
- remove
#[allow(unused_variables)]by @cakebaker in #9109
od
printenv
printf
- handle extremely large format widths gracefully to fix GNU test panic by @sylvestre in #9133
readlink
stdbuf
timeout
truncate
- feat(truncate): allow negative size values for truncation by @mattsu2020 in #9129
tsort
- use iterative dfs to prevent stack overflows by @Nekrolm in #8737
- fix minimal cycle reporting and precise back-edge removal by @naoNao89 in #8786
uptime
- Fix build and tests for uptime on OpenBSD by @lcheylus in #9158
- fix clippy warning manual-let-else on OpenBSD by @lcheylus in #9193
uudoc
- respect SKIP_UTILS by @oech3 in #8982
- Add example to manpage by @Its-Just-Nans in #7841
Documentation
- release notes: add 0.2.2 by @sylvestre in #8998
- README: Fix coverage badge URL by @RenjiSann in #9046
- README.md: Fix about manpage generation by @oech3 in #8994
- README.md: Show how to build all individual bins by cargo by @oech3 in #9069
- extensions.md: mark hashsum as deprecated by @oech3 in #9089
- doc: rename file by @sylvestre in #9208
CI & Build
- chore(deps): update github artifact actions (major) by @renovate[bot] in #8997
- publish script: add progress by @sylvestre in #9008
- GNUmakefile: Add a value for cross-build by @oech3 in #9015
- GNUmakefile: Don't install part of hashsum if we excluded hashsum by @oech3 in #9036
- ci: remove
code_formatjob fromFixPRworkflow by @cakebaker in #9043 - Append .bash to completions by @oech3 in #9049
- ci: remove deprecated
lima-actions/sshby @cakebaker in #9054 - GNUmakefile: Do not use install -v by @oech3 in #9051
- GNUmakefile: Reduce deps & minor cleanup by @oech3 in #9065
- CICD.yml: stop ci for redox by @oech3 in #9112
- ci: adapt template name for Lima v2.0 by @cakebaker in #9159
- FreeBSD workflow: disable stats report for sccache action by @lcheylus in #9156
- Fix test job in FreeBSD workflow by @lcheylus in #9155
- GNUmakefile: Better comment for cross build by @oech3 in #9186
- GNUmakefile: fix LOCALES=n by @oech3 in #9034
- Fix tests on OpenBSD for unix feature by @lcheylus in #9200
Code Quality & Cleanup
- fix: make visible alias by @Its-Just-Nans in #9041
- fix: show ig...
0.3.0
π¦ Rust Coreutils 0.3.0 Release:
We are happy to announce the release of Rust Coreutils 0.3.0 β our latest milestone bringing significant performance improvements, enhanced compatibility, and robust testing infrastructure!
Highlights:
-
Performance Improvements
Compared to GNU:base64is 1.20x fasterexpandis 1.80x fasterunexpandis 1.50x fasternlis 1.57x fastersortis 3.72x faster for regular sorting and 1.46x faster for numeric sortingfoldis 1.19x faster through optimizationuniq -c: 1.13x faster
-
Comprehensive Benchmarking Infrastructure
- Integrated CodSpeed for continuous performance monitoring
- Added benchmarks for 15+ utilities including
sort,ls,uniq,du,base64, and more - Performance regression detection in CI
-
Safe Directory Traversal
- Implemented secure traversal using
openat/unlinkatforrm,du,chmod, andchgrp - Enhanced security through the
nixcrate instead of unsafelibccalls
- Implemented secure traversal using
-
Enhanced GNU Compatibility
- 532 passing tests (83.91% compatibility) with comprehensive test suite expansion
- Improved error handling and behavior matching across utilities
- Better Unicode and non-UTF8 path support
-
Developer Experience Improvements
- Moved documentation and completion generation out of binaries for faster builds
- Enhanced CI with parallel benchmark compilation
- Improved Makefile support for various build configurations
-
Contributions: This release was made possible by the dedication of 36 contributors, including 25 newcomers.
GNU Test Suite Compatibility:
Note: Test result changes are primarily due to upgrading our reference from GNU coreutils 9.7 to 9.8, which introduced 16 new tests and updated existing test expectations.
| Result | 0.2.0 | 0.3.0 | Change 0.2.0 to 0.3.0 | % Total 0.2.0 | % Total 0.3.0 | % Change 0.2.0 to 0.3.0 |
|---|---|---|---|---|---|---|
| Pass | 538 | 532 | -6 | 87.06% | 83.91% | -3.15% |
| Skip | 27 | 33 | +6 | 4.37% | 5.20% | +0.83% |
| Fail | 52 | 68 | +16 | 8.42% | 10.73% | +2.31% |
| Error | 1 | 1 | 0 | 0.16% | 0.16% | 0% |
| Total | 618 | 634 | +16 (new tests) |
Call to Action:
π Help us translate - Contribute translations at Weblate
π Sponsor us on GitHub to accelerate development: github.com/sponsors/uutils
π Download the latest release: https://uutils.github.io
What's Changed
base64
- Input reuse on base64 by @ThePseudo in #8587
- Add benchmark for base64 by @ThePseudo in #8768
basenc
- basenc: implement --base58 encoding option by @AnarchistHoneybun in #8751
- base58: it wasn't working properly with long input by @sylvestre in #8818
chgrp
- safe traversal: adjust chmod & chgrp to use it by @sylvestre in #8632
chmod
- safe traversal: adjust chmod & chgrp to use it by @sylvestre in #8632
cksum
- cksum: improve performance (Closes: #8573) by @RenjiSann in #8643
cp
- cp: fix Ioctl casting for ppc64 (Closes: #8161) by @maxfilov in #8637
- Replace casting to Ioctl with a const from libc by @maxfilov in #8641
- cp: fix recursive cp fails on files with trailing backslashes by @Anonymous-AAA in #8747
- feat(cp): optimize directory copy by caching file checks and refactoring calls by @mattsu2020 in #8805
- cp: fix crash on -T/--no-preserve-target by @Alonely0 in #8864
- cp: show relative path of source file with -vr by @Ada-Armstrong in #8887
- cp: display symlink creation with --verbose by @Ada-Armstrong in #8899
- docs: add benchmarking guidelines for cp by @mattsu2020 in #8807
csplit
- csplit: create final empty file with --suppress-matched to match GNU (fixes #7286) by @naoNao89 in #8655
date
- date: use --reference=file to display the file modification time by @yuankunzhang in #8630
- date: consolidate date parsing logic by @yuankunzhang in #8629
- date: implement
--resolutionflag by @Banzobotic in #8686 - date: follow GNU pure-number -d semantics by @naoNao89 in #8907
df
- df: follow symlinks by @bakanovskii in #8763
- df: add tracing zero and rounding by @bakanovskii in #8685
- df: treat env var with zero block size same as invalid by @Ada-Armstrong in #8932
- tests(df): Fix test_total to avoid whitespace parsing issues by @naoNao89 in #8799
dirname
du
- Adjust rm & du to use safe traversal (openat, unlinkat, etc) by @sylvestre in #8517
- du: some small refactorings by @cakebaker in #8631
- du: add benchmark by @sylvestre in #8774
- du: ignore env zero blocksize by @Ada-Armstrong in #8961
expand
- expand: add a benchmark by @sylvestre in #8800
- expand: improve the performances - 1.80 faster than GNU by @sylvestre in #8803
expr
- expr: fix some multibyte issues by @sylvestre in #8606
fold
- fold: add a benchmark by @sylvestre in #8801
- fold: improve the performances - now same as GNU by @sylvestre in #8804
hashsum
- hashsum: fix help text to show actual utility name by @AnarchistHoneybun in #8650
- hashsum: remove the usage of the mut by @sylvestre in #8692
- Patch to add hashsum symlinks with tests by @tpowa in #8647
- hashsum: improve hashsum using 32KiB bufreader by @psvri in #8869
hostname
- hostname: fix -d flag by @bakanovskii in #8657
- Build {host,u}name on Windows by @oech3 in #8950
id
install
- tests/install/install-Z-selinux: fix selinux for install by @sylvestre in #8307
ln
- Fix ln -f handling when source and destination are the same entry by @mattsu2020 in #8838
- Allow to replace ln -fs and hardlink on Windows by default by @oech3 in #8810
ls
- ls: Lazily obtain FileType, eagerly obtain Metadata when Metadata is available by @kimono-koans in #8753
- ls: remove unnecessary getgrgid handling for Redox OS by @Connor-GH in #8779
- ls: add some benchmarks by @sylvestre in #8738
- ls: Implement -f flag to disable sorting and enable -a by @naoNao89 in #8824
- ls: fix zero block size handling to match GNU ls by @yrakcaz in #8928
- tests(ls): Add GNU-compat TIME_STYLE tests (#4627) by @naoNao89 in #8796
mv
- mv: support moving source to a symlink directory by @yuankunzhang in #8589
- mv: improve the verbose mode to make tests/mv/mv-special-1.sh pass by @sylvestre in #8521
nl
- nl: add a benchmark by @sylvestre in #8808
- nl: improve the performances by @sylvestre in #8811
nohup
numfmt
- numfmt: add benchmark by @sylvestre in #8726
od
- od: fix options after filename issue by @Anonymous-AAA in #8624
- od: add support for -S by @sylvestre in #8849
*...
0.2.2
Rust Coreutils 0.2.2 Release:
This is a patch release focused on critical infrastructure fixes to ensure reliable distribution and deployment across different platforms.
We also improved the performance of base64 to be faster than the GNU implementation (1.56 times faster).
What's Changed
base64
- base64: improve perfs by using the base64-simd crate by @sylvestre in #8578
cp
nl
- nl: allow non-UTF8 section delimiter by @cakebaker in #8575
stty
- Avoid panic in stty by @julian-klode in #8559
uucore
- uucore/build.rs: rename function by @cakebaker in #8584
Distribution & Build
- manage the locales when the program is coming from crates.io by @sylvestre in #8571
- link musl libc statically by @Ecordonnier in #8585
- Prepare version 0.2.2 by @sylvestre in #8588
Documentation
- release notes: store a copy in-tree too by @sylvestre in #8564
Dependencies
- chore(deps): update rust crate winapi-util to v0.1.11 by @renovate[bot] in #8570
- fix(deps): update rust crate console to v0.16.1 by @renovate[bot] in #8577
- chore(deps): update rust crate chrono to v0.4.42 by @renovate[bot] in #8576
- chore(deps): update rust crate linux-raw-sys to 0.11 by @renovate[bot] in #8580
New Contributors
Full Changelog: 0.2.0...0.2.2
0.2.0
π¦ Rust Coreutils 0.2.0 Release:
We are excited to announce the release of Rust Coreutils 0.2.0 β our first fully internationalized release!
This milestone brings comprehensive localization support, major performance improvements, and enhanced Unicode handling.
Highlights:
-
Full Internationalization & Localization
Complete translation infrastructure using Mozilla's Fluent framework with French translations included.
Support for complex plural forms (Arabic, Hebrew, etc.) and locale-aware formatting.
Even error messages from clap are fully localizable! -
Community Translation Platform
Join our translation efforts at Weblate
or contribute directly via our l10n repository -
Unicode & Non-UTF8 Path Support
All programs now handle non-UTF8 paths seamlessly while supporting full Unicode features.
Example:echo "πππ₯€" | cut -d"π" -f1works perfectly with emoji delimiters! -
Massive Performance Gains
Notable example:trwent from 9.81x slower than GNU to 1.58x faster β a 15x improvement!
Additional optimizations in sort, cat, and other utilities. -
Enhanced GNU Compatibility
538 passing tests (+16 from 0.1.0), with reduced failures from 65 to 52.
Continued improvements in edge case handling and behavior matching. -
Production Ready for Ubuntu
As part of Ubuntu's announcement of plans to integrate Rust Coreutils, this release focuses on stability and compatibility improvements to ensure Ubuntu users have the best possible experience. -
Contributions
This release includes 1183 commits from 46+ contributors, including 28 newcomers!
All this with a code coverage about 87%!
GNU Test Suite Compatibility:
| Result | 0.1.0 | 0.2.0 | Change 0.1.0 to 0.2.0 | % Total 0.1.0 | % Total 0.2.0 | % Change 0.1.0 to 0.2.0 |
|---|---|---|---|---|---|---|
| Pass | 522 | 538 | +16 | 84.46% | 87.06% | +2.60% |
| Skip | 31 | 27 | -4 | 5.02% | 4.37% | -0.65% |
| Fail | 65 | 52 | -13 | 10.52% | 8.42% | -2.10% |
| Error | 0 | 1 | +1 | 0% | 0.16% | +0.16% |
| Total | 618 | 618 | 0 |
Call to Action:
π Help us translate - Contribute translations at Weblate
π Sponsor us on GitHub to accelerate development: github.com/sponsors/uutils
π Download the latest release: https://uutils.github.io
What's Changed
basenc
- allow non-UTF8 filenames by @cakebaker in #8558
basename
- Simply logic, do not trim path separators
/by @drinkcat in #8372 - handle a corner case with /. - Closes #8373 by @sylvestre in #8374
- Handle non-unicode parameters by @drinkcat in #8375
cat
- Fix reporting "input file is output file" error when outputting to an input file by @frendsick in #8025
- add error handling in write_fast function by @yuankunzhang in #8091
- handle broken pipe gracefully by @tgrez in #8336
chmod
- fix recursive symlink handling for -H/-L/-P flags (Closes: #8422) by @sylvestre in #8450
- remove Windows function & unnecessary cfgs by @cakebaker in #8458
- make a test environment-agnostic by @sylvestre in #8525
chown
- fix --reference file syntax by @Anonymous-AAA in #8492
chroot
- remove unwrap calls by @jovielarue in #7890
cksum
- remove duplicate unit test by @cakebaker in #8151
- Fix file quoting on stderr by @RenjiSann in #8272
- two small refactorings by @cakebaker in #8527
cp
- migrate from quick-error to thiserror by @vikram-kangotra in #7989
- clean existing file when copy from stream by @Luv-Ray in #8149
- let
claprender help & version by @cakebaker in #8199 - Fix --no-dereference --parents with symlink source by @julian-klode in #8331
- Try to change gid only if changing uid+gid fails by @drinkcat in #8385
- Properly preserves fifos and symlink attributes by @drinkcat in #8416
- fix directory permission preservation for sibling directories with -a (Closes: #8407) by @sylvestre in #8449
- fix recursive socket file copy by @Anonymous-AAA in #8478
csplit
- fix two issues with non ASCII digits by @cakebaker in #8020
date
- date/ls: Switch from chrono to jiff by @drinkcat in #7894
- update deprecated TZ by @sylvestre in #8405
- allow multiple
-d, last wins by @cakebaker in #8507 - add hidden aliases --rfc-2822/822 for GNU compat by @schopin-pro in #8550
df
du
- create the string into the main thread to avoid some translations issue by @sylvestre in #8338
- du/ls: Merge date formatting code, and handle timestamps far in the future/past by just printing them by @drinkcat in #8390
du/ls: Unify file metadata time handling by @drinkcat in #8396du/ls: Improve time-style handling based on GNU coreutils manual by @drinkcat in #8415
echo
- fixed double hyphen as argument by @cerdelen in #7581
- Remove clap for echo by @cerdelen in #7603
- print help if not posixly correct and only argument is --help by @RGBCube in #8310
- show version when
--versionis the only argument by @cakebaker in #8341
env
- use execvp instead of Command::status on Unix systems by @yuankunzhang in #8365
- invalid syntx with the french fluent file by @sylvestre in #8530
expr
- Handle more special cases for regex pattern by @frendsick in #7974
- Fix parsing range quantifiers in regex by @frendsick in #7997
- Fix handling of regex range quantifiers by @frendsick in #8010
- Remove
expr.plfromwhy-error.mdby @frendsick in #8022 - fix substr parsing by @tgrez in #8158
- fix builtin functions precedence by @tgrez in #8162
factor
- fix two "unused import" warnings in test by @cakebaker in #8526
fmt
- Fix the last two GNU tests for fmt by @sylvestre in #8264
fold
- process streams as bytes, not strings, to handle non-utf8 data by @phinjensen in #8241
hashsum
head
- fix bug with non-terminated files. by @karlmcdowall in #7484
- fix meaning of ---presume-input-pipe by @bvinc in #8315
- remove
BadEncodingvariant ofHeadErrorby @cakebaker in #8484 - refactor
uumainby @cakebaker in #8497
install
- don't error when multiple arguments of the same type are given, instead override with last one (#8033) by @jenningsfan in #8053
- implement option -C by @sylvestre in #8265
- use
boolas return type ofneed_copyby @cakebaker in #8288 - Fix --no-target-directory with existing file by @julian-klode in #8412
- install, mkdir: Handle dir/./ like dir/. by @julian-klode in #8366
ln
- fix #6350 by @RenjiSann in #7449
- rename error variant b...
0.1.0
π¦ Rust Coreutils 0.1.0 Release:
We are excited to announce the release of Rust Coreutils 0.1.0 β our first 0.1 milestone!
This release brings major performance gains, SELinux support, and expanded GNU compatibility.
Highlights:
-
SELinux Support
New SELinux integration incp,ls,mkdir,mknod,mkfifo,install, andstat.
Plus, SELinux-aware CI testing is now live! -
Performance Improvements
Notable speedups incat,ls,wc,tail,seq, and more β many now match or exceed GNU performance. -
Ubuntu Plans to Ship uutils
Ubuntu is beginning to integrate Rust Coreutils into its base system!
β€ Oxidizing Ubuntu -
Huge Contribution Wave
This release includes 843 commits from 60+ contributors, including 40 newcomers!
GNU Test Suite Compatibility:
| Result | 0.0.30 | 0.1.0 | Change 0.0.30 to 0.1.0 | % Total 0.0.30 | % Total 0.1.0 | % Change 0.0.30 to 0.1.0 |
|---|---|---|---|---|---|---|
| Pass | 507 | 522 | +15 | 82.17% | 84.46% | +2.29% |
| Skip | 41 | 31 | -10 | 6.65% | 5.02% | -1.63% |
| Fail | 69 | 65 | -4 | 11.18% | 10.52% | -0.66% |
| Total | 617 | 618 | +1 (new test) |
Call to Action:
π Sponsor us on GitHub to help us grow faster: github.com/sponsors/uutils
π Download the latest release & learn more: https://uutils.github.io
What's Changed
basenc
- base32/base64/basenc: add -D flag by @TerakomariGandesblood in #7479
cat
- cat: Improve performance of formatting. by @karlmcdowall in #7519
- cat: bugfix when running with -T option by @karlmcdowall in #7636
- cat: Formatting performance improvement by @karlmcdowall in #7642
- cat: Performance improvement when printing line numbers by @karlmcdowall in #7645
chmod
chroot
cksum
cp
- cp: Use FICLONE ioctl constant from linux-raw-sys by @dezgeg in #7439
- cp: fix update prompting by @hz2 in #7668
- cp -P hardlink-to-symlink hardlink-to-same-symlink should no-op by @dan-hipschman in #7753
- cp: refuse to copy symlink over itself by @dan-hipschman in #7729
- cp: use
authors.workspaceinCargo.tomlby @cakebaker in #7882 - cp: improve the selinux support by @sylvestre in #7878
- cp: context Disable a check in tests/cp/no-ctx.sh by @sylvestre in #7938
- cp: copy dir if source path ends with dot by @cakebaker in #7874
csplit
- csplit: removed unnecesary implementation of Fromio::Error by @lukasx999 in #7778
- csplit: don't add a newline if the file doesn't end with one by @Qelxiros in #7901
date
- date: allow negative date offsets by @lewisboon in #7548
- date: add tests for relative weekdays by @dan-hipschman in #7843
- date: move file header to top & merge some imports by @cakebaker in #7857
- refactor(tests): use absolute difference of dates to check if they are within a window by @lavafroth in #7755
dd
df
- refactor: Add thiserror to df by @kiran-4444 in #7545
- df: migrate OptionsError to thiserror by @lewisboon in #7673
- fix: df: filter filesystem types after mount point resolution by @SergeiPatiakin in #7452
du
- du: don't panic on block-size 0 by @BenWiederhake in #7742
- du: fix "function never used" warning in test by @cakebaker in #7943
echo
- echo: fixed double hyphen as argument by @cerdelen in #7581
- Remove clap for echo by @cerdelen in #7603
env
- env: ignore flags after the command or -- argument by @dan-hipschman in #7781
- docs: env doesn't handle the empty string as a variable name by @Qelxiros in #7956
expr
- expr: Refactor AST evaluation to avoid stack overflow by @LouisDISPA in #7388
- expr: Escape anchor characters within pattern by @frendsick in #7842
- expr: Fix regex anchor matching behavior with
REGEX_OPTION_SINGLELINEby @frendsick in #7846 - expr: Fix parsing negated character classes "[^a]" by @frendsick in #7884
- expr: Fix parsing regex anchors '^' and '$' by @frendsick in #7953
false
- true,false: remove unnecessary newline from version string by @cakebaker in #7446
fmt
- chore: minor fmt match cleanup by @nyurik in #7722
- Run cargo fmt on missed files by @BenWiederhake in #7949
- ci: run
cargo fmt --checkinfuzzfolder by @cakebaker in #7958
head
- head: rework handling of non-seekable files by @karlmcdowall in #7438
- head: fix overflow errors by @Qelxiros in #7721
hostid
- hostid: use
gethostidfrom Rustlibcby @cakebaker in #7571
hostname
- Bump
hostname& removewindows-corefrom skip list by @cakebaker in #7713
id
- bug: fix id printing of egid by @nyurik in #7696
- id: Handle NULL pointer gracefully within
cstr2cowmacro by @frendsick in #7810 - id: adapt error message to match the one from GNU
idby @cakebaker in #7836 - id: The
--realflag should only affect-u,-g, and-Gby @frendsick in #7796 - id: remove unnecessary
to_stringcalls by @cakebaker in #7914
install
- install: friendly message install file to directory by @zhw2101024 in #7794
- install: fixes issue #7795 by @zcg00 in #7838
- Install implement the --no-target-directory option by @zhw2101024 in #7867
- install: remove todos by @cakebaker in #7872
- ci: install
libselinux1-devfor coverage job by @cakebaker in #7959 - selinux: start the support of install by @sylvestre in #7908
ls
- ls: More performance optimizations by @drinkcat in #7813
- ls: add -T support and fix --classify output by @emar-kar in #7616
- ls: add selinux support by @sylvestre in #7768
- ls: Print optimizations by @drinkcat in #7801
- ls: update chrono crate version and switch to
new_lenientuse by @emar-kar in #7858 - ls: remove duplicate code by @cakebaker in #7932
- test_ls: Improve test_ls_perm_io_errors by @drinkcat in #7811
mkdir
- mkdir: add the selinux support by @sylvestre in #7635
mkfifo
- mkfifo: implement selinux support by @sylvestre in #7831
mknod
- mknod: remove windows-related code & flags by @cakebaker in #7821
- mknod: implement selinux support by @sylvestre in #7818
- mknod: rename function
_mknodtomknodby @cakebaker in #7824 - mknod: refactor
uumainby @cakebaker in #7825 - mknod: remove duplicate test...