Rust Coreutils 0.10.0 Release:
We are happy to announce the release of Rust Coreutils 0.10.0 - a release focused on GNU compatibility and robustness. The GNU test suite results improved sharply this cycle (645 passing, 29 failing, down from 56), we landed a second wave of security hardening (TOCTOU races, safe recursive descent, SELinux labeling at creation, backup guards), and we ran a broad anti-panic campaign across the utilities. On top of that: new features (mv --exchange, install --reflink, an OpenSSL backend for the checksum utilities), more zero-copy/read-ahead performance work, and wasm32-wasip2 support.
GNU Test Suite Compatibility:
| Result | 0.9.0 | 0.10.0 | Change 0.9.0 to 0.10.0 | % Total 0.9.0 | % Total 0.10.0 | % Change 0.9.0 to 0.10.0 |
|---|---|---|---|---|---|---|
| Pass | 625 | 645 | +20 | 90.58% | 93.48% | +2.90% |
| Skip | 8 | 15 | +7 | 1.16% | 2.17% | +1.01% |
| Fail | 56 | 29 | -27 | 8.12% | 4.20% | -3.92% |
| Error | 1 | 1 | 0 | 0.14% | 0.14% | 0% |
| Total | 690 | 690 | 0 |
Note: 0.9.0 bumped the GNU reference to 9.11, which added 25 new tests and temporarily pushed the failure count up. This cycle absorbed most of that debt: failures dropped from 56 to 29 and passes reached an all-time high of 645.
As we contributed many tests to the GNU implementation, we are also the source of some of these regressions!
Highlights:
-
GNU Compatibility
- 645 passing GNU tests (+20) and 27 fewer failures, the largest single-cycle drop we have had
- Dozens of behavior alignments:
pr(-w/-W/-l/-e/-o, merge mode, page ranges),nproc(cgroups v2 quota, affinity mask, offline cores,OMP_*handling),date(out-of-range years,-d -,Omodifier, timezone strings),numfmt,ls,du,install,od,truncate,fold,head/tail,sum,stat - Many error messages now carry the file name and the real OS error instead of a vague or stripped message
-
Security Hardening
- Continued the TOCTOU work started in 0.9.0:
touchno longer usesO_TRUNCon create,mkfifodrops the path-basedchmod,headchecks the open fd instead of the path,splithardens the output-open path,chconanchors recursive relabeling to the traversal dirfd - Safe recursive descent fixes for
chmod/chown(symlink cycles,--preserve-rootre-checked during the descent), andcpno longer descends into a destination subdirectory that is a symlink - SELinux labels are now applied at creation in
mkdir,mkfifoandmknodinstead of being applied afterwards mvfails closed when recreating a cross-device directory destination, compares file identity in the--backup=simpleguard, and strips setuid/setgid when a cross-device copy cannot preserve ownershipchrootchroots exactly the path--skip-chdirvalidated;stdbufrefuses alibstdbufpath that cannot be represented inLD_PRELOAD;installfinalizes ownership before mode- Added
SECURITY.mddocumenting our threat model, scope and reporting process
- Continued the TOCTOU work started in 0.9.0:
-
Robustness: Anti-Panic Campaign
- Removed panics and aborts across a long list of utilities:
shuf,printf,numfmt,fmt,pr,chroot,dircolors,install,ln,touch,stat,split,expand,more,kill,cp,du,rm,runcon,sort,chown/chgrp,dirname,expr,cksum,dd,truncate,hashsum - Recurring classes fixed: write failures on
/dev/full, char-boundary panics on multibyte input, integer overflow on extreme widths/precisions/sizes, and unbounded allocations for huge arguments exprnow uses an iterative parser, so deeply nested expressions no longer overflow the stack
- Removed panics and aborts across a long list of utilities:
-
New Features
mv --exchangeto atomically swap two pathsinstall --reflinksupport, andinstall -Cnow works with--preserve-timestamps- OpenSSL backend for the faster checksum utilities
cut -Oas a short option for--output-delimiterrm --one-file-systemtimeoutnow works on Windows, andtail -f/-Ffinally follows files on Windows
-
Performance
- Read-ahead hints across the
cksumfamily,sum,split,expand/unexpandand thebase*utilities teezero-copy fast path;catthroughput improvements; faster non-reflinkcp; cross-devicemvvia the fast copy pathexpr:indexwent from O(N*M) to O(N+M);uniqandduimprovements;tsortnow buffers its output- New benchmarks for
expr,tr,cut,uniqand locale-awaresortmerges
- Read-ahead hints across the
-
Internationalization
cutsupports multibyte characters in non-UTF-8 localeslsuses Unicode quotes for thelocale/clocalestyles in UTF-8 locales and escapes non-ASCII control characters- Fixed
C.UTF-8being detected as ASCII, and incomplete Fluent fallback bundles cksumquotes file names in a locale-aware way
-
Cross-platform Reach
- New wasm32-wasip2 target support
- Windows:
timeoutimplementation, sparse copy support incp,tail -f,cksumCRLF fix ls --numeric-uid-gidon non-unix platforms,uptimeusesCLOCK_BOOTTIMEon more platforms
-
Code Quality
clippy::collapsible_ifandclippy::match_same_armsare now clean and enabled workspace-wide- Continued
nixβrustixmigration (dd,kill,sync,uptime) and further removal ofunsafeandto_string_lossy
-
Contributions: This release was made possible by 50 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
Sponsor us on GitHub to accelerate development: github.com/sponsors/uutils
What's Changed
arch
base32, base64, basenc
- baseNM: read ahead by @oech3 in #12570
- Fix base32/base64 error for file paths ending in slash by @TheAdamWarlock in #12726
cat
- cat: drop fuse workaround by @oech3 in #12821
- cat: improve throughput & simplify (split PR) by @oech3 in #12850
- cat: don't call io::stdin() twice by @oech3 in #13043
- cat: change is_unsafe_override to is_safe_override by @oech3 in #13133
chgrp
- chgrp: unstripped error on operation not permitted error by @Devel08 in #13361
- chgrp: fix error message for
--from nonexisting_group GROUPby @cakebaker in #13490 - chgrp: make
test_referenceless strict on Linux by @cakebaker in #13650
chmod
- chmod: always call chmod(2) even when mode bits are unchanged by @sylvestre in #13213
- test_chmod.rs: remove an ignored test covered by check-safe-traversal.sh by @oech3 in #13298
- chmod: fix 2 clippy::collapsible_if by @oech3 in #13509
- chmod: report the real error when a target's metadata is inaccessible by @0xfandom in #13637
chown
- chown: -h on symlink to directory operates on link, not target by @rossilor95 in #12522
- chown: restrict no-dereference symlink ctime test to Linux by @rossilor95 in #12556
- chown, chgrp: report a verbose stdout write error instead of panicking by @leeewee in #13381
- fix(chown,chgrp): print --verbose success lines to stdout by @l46983284-cpu in #13419
chroot
- chroot: don't panic on --skip-chdir with a non-resolving NEWROOT by @leeewee in #12732
- chroot: avoid unwrap-like operation by @oech3 in #13306
cksum
- cksum family: read ahead file by @oech3 in #12549
- cksum: fix collapsible_if by @oech3 in #12942
- feat: add OpenSSL backend for checksum utilities by @sylvestre in #12412
- checksum: handle stdin before directory checks by @wtcpython in #13394
- fix(cksum): reject absurdly large SHAKE --length instead of aborting by @koopatroopa787 in #13083
- cksum: fix checksum giving false fails on windows due to crlf -> lf conversion by @nikolalukovic in #13431
- cksum: Locale aware filename quoting in not-found messages by @RenjiSann in #13733
comm
cp
- cp: replace match by is_ok_and by @oech3 in #12688
- cp: simplify bool by @oech3 in #12689
- cp: remove unuseful .map(|_|()) by @oech3 in #12700
- cp: remove unnecessary cfgs in Linux module by @cakebaker in #12692
- cp: Added error handling for printing debug message by @max-amb in #12710
- cp: simplify return type of
backup_dest()by @cakebaker in #12719 - cp: handle --parents source ending in parent dir by @nkgotcode in #12639
- cp: propagate the --attributes-only destination open error by @leeewee in #12625
- cp: improve perf for non-reflink copy by @oech3 in #13057
- minorbug(cp): io error messages vague when using -g by @Devel08 in #13110
- cp: fix --remove-destination deleting source when dest is the same file under a different path by @LoukasPap in #13135
- cp: implement sparse copy support for windows by @nikolalukovic in #12686
- fix(cp): remove overrides_with_all from flag group by @BAMF0 in #13258
- cp: don't panic on write error when printing --verbose output by @Chaganti-Reddy in #13310
- cp: fix --reflink=never by @oech3 in #13065
- fix(cp): change error to align with GNU by @BAMF0 in #13382
- cp: dedup match & remove GNU version from comment by @oech3 in #13556
- cp: don't hang forever when the backup destination is a fifo by @Chaganti-Reddy in #13344
- cp: fix 2 clippy expections by @oech3 in #13537
- cp: remove feat_acl & exacl by @oech3 in #13626
- cp: simplify loop by while let by @oech3 in #13741
csplit
- csplit: include the file name in output-file errors by @eyupcanakman in #13138
- csplit: fix clippy::collapsible_if by @oech3 in #13512
cut
- cut: support
-Oas short for--output-delimiterby @cakebaker in #13011 - cut: simplify type of
COMPLEX_SEQUENCEin test by @cakebaker in #12601 - cut: add a benchmark for a range inside long multibyte lines by @sylvestre in #13732
- cut: support multibyte characters in non-UTF-8 locales by @sylvestre in #12635
- cut: refactor part of
uumainby @cakebaker in #13757
date
- date: reject excessive format widths by @puneetdixit200 in #12497
- date: document the format-width cap and cover its boundary by @sylvestre in #12658
- date: parse j as a local time of day by @eyupcanakman in #12747
- date: reject a date string with two timezone abbreviations by @mistaste in #12883
- date: rename variable
formtofmtby @cakebaker in #12898 - Date parse datetime 0.15 fixes by @sylvestre in #13284
- test(date): validate locale formats via runtime expansion by @naoNao89 in #9831
- date: preserve invalid timezone format strings by @wtcpython in #13442
- date: treat -d - as midnight by @wtcpython in #13511
- date: simplify code & fix clippy::collapsible_if by @oech3 in #13513
- date: support out-of-range years in default output by @abhishekpradhan in #13516
- date: dedup boundary check for bytes by @oech3 in #13697
- date: strip the O strftime modifier in the C locale by @igorgbr in #13702
- date: use
%Odinstead of%Olin test by @cakebaker in #13725
dd
- dd: replace nix by rustix by @oech3 in #12567
- dd: support nocache on android, freebsd by @oech3 in #12602
- dd: propagate truncate errors on regular files by @sylvestre in #12667
- fix(dd): reject oversized block sizes instead of crashing by @miniex in #12887
- test_dd.rs: remove needless printf by @oech3 in #13467
- dd: keep short reads from corrupting re-blocked output by @relative23 in #13459
- dd: derive the count_bytes read budget from bytes read by @relative23 in #13435
- dd use .map_err by @oech3 in #13631
- dd: simplify match by @oech3 in #13628
df
- df: Syncing when paths are provided by @max-amb in #12707
- df: simplify bool returning by @oech3 in #12946
- df: fix clippy::collapsible_if by @oech3 in #13518
- refactor uu_df so crate users can call df without printing to stdout. by @philocalyst in #12281
- df: make the public paths argument inferable and pin the test block size by @sylvestre in #13611
dir
- dir: report stdout write errors by @wtcpython in #13495
dircolors
- dircolors: remove commented out code & make two functions private by @cakebaker in #12514
- dircolors: improve test by @cakebaker in #12529
- dircolors: turn integration test into unit test & remove unsafe code by @cakebaker in #12547
- dircolors: don't panic on an invalid TERM/COLORTERM glob by @leeewee in #12728
- dircolors: reduce nested code by @oech3 in #12811
- dircolors: replace
if/elsechain withmatchby @cakebaker in #12822
dirname
du
- du: don't deduplicate --files0-from entries by @sylvestre in #13177
- du: don't panic when writing to stdout fails by @muscar in #10689
- du: do not deduplicate --files0-from / operand names by name by @sylvestre in #12750
- du: Get rid of the last
print!calls by @RenjiSann in #13437 - du: our implementation is slower than GNU's by @wilmerdooley in #13296
- du: fix Windows dead-code lint by @relative23 in #13517
- du: fix clippy::collapsible_if by @oech3 in #13520
- du(fix): print latest time with --time by @hlsxx in #13543
- du: Refactor loop into while let by @RenjiSann in #13739
env
- env: GNU-compatibility fixes by @sylvestre in #12657
- env: fix clippy::collapsible_if by @oech3 in #13521
expand
- expand: stream tab spaces to avoid abort on large --tabs values by @TheAdamWarlock in #13005
- (un)expand: set default of FILE by clap by @oech3 in #13122
- (un)expand: read ahead file by @oech3 in #13123
- expand: single-pass fast path check with early exit by @devnexen in #10924
- expand/unexpand: fix display width of 3- and 4-byte UTF-8 characters by @sylvestre in #13352
expr
- expr: add a benchmark by @sylvestre in #12578
- expr: speed up index from O(N*M) to O(N+M) by @sylvestre in #12580
- fix(expr): make the parser iterative to avoid a stack overflow by @abendrothj in #13333
- expr: fix clippy::collapsible_if by @oech3 in #13522
fmt
- fmt: large width value causes a panic by @Devel08 in #12757
- fmt: measure -w in UTF-8 bytes to match GNU by @sankalpsthakur in #13651
fold
- fold: fix crash when reading from pseudo-devices by @lavafroth in #11314
- fold: insert fold newline at read-buffer boundary by @sylvestre in #12682
- gnucompability(fold): uutils fold accept width 0 but gnu fold rejects it by @Devel08 in #12744
- fold: continue processing files after an open error by @sylvestre in #12668
groups
hashsum
- fix(hashsum): always report malformed input with --status (fixes #12867) by @koopatroopa787 in #12973
head
- head: deduplicate flush() workaround by @oech3 in #12563
- fix(head): avoid overflow panic on huge negative -n/-c values by @koopatroopa787 in #12854
- head: set default of FILE to - by clap by @oech3 in #13354
- head/tail: parse zero byte counts with size suffix as 0 bytes by @MeGaurav4 in #13706
hostid
- hostid: add the french locale by @sylvestre in #12913
id
- id: don't exit 1 when uid/gid name lookup fails in default output by @c-tonneslan in #12341
install
- fix install file with invalid uid by @zhw2101024 in #7789
- install: don't panic when the strip program is killed by a signal by @leeewee in #12730
- minor fix for error message install to /proc/self/mem by @zhw2101024 in #12718
- fix install same file with backup flag by @zhw2101024 in #12716
- install: warn --strip-program without -s by @oech3 in #12956
- install: include missing source path in stat error by @1mpossible-code in #13030
- install: fix dangerous index access by @oech3 in #13140
- test_install.rs: remove binaries from repo by @oech3 in #13159
- test_install.rs: remove cfg(not(windows)) by @oech3 in #13173
- test_install.rs: remove unnecessary cfg by @oech3 in #13182
- install: allow -C with --preserve-timestamps by @sylvestre in #13176
- install: add error with -d when an argument is not dir by @LoukasPap in #13175
- install: use early return to remove indentation level by @cakebaker in #13244
- install: remove dead code by @oech3 in #13336
- install: remove unused cfg by @oech3 in #13337
- install: remove an unwrap() by @oech3 in #13342
- install: remove unreachable cfg block by @oech3 in #13341
- install: simplify if & match by @oech3 in #13339
- install fix clippy::collapsible_if by @oech3 in #13364
- install: show backup failure causes by @wtcpython in #13349
- install: support reflink by @oech3 in #13059
- install: use portable strip wrappers in tests by @wtcpython in #13575
- install: dedup id resolution and make root test robust by @sylvestre in #12680
- test_install.rs: strip myself instead of strip_source_file by @oech3 in #13705
join
- join: apply the -e filler to empty output fields by @dhruv-15-03 in #13718
kill
- kill: replace nix::sys::signal with rustix::process by @mattsu2020 in #12326
- kill: use safe rustix Signal constructor, fix spell-checker comment by @sylvestre in #12636
- kill: reject out-of-range obsolete -N signal instead of sending SIGTERM by @sylvestre in #13116
- kill: move
Ok(())outside ofmatchby @cakebaker in #13129 - kill: accept SIGIO as alias for SIGPOLL by @favilances in #13294
- kill: remove useless fn rustix_to_io by @oech3 in #13304
- kill: report write errors when listing signals instead of panicking by @leeewee in #13300
- kill: integrate thiserror for error handling by @xtqqczze in #13397
ln
- ln: accept non-utf8 source names in target-dir modes by @can1357 in #11403
- ln: don't panic on --relative with a parentless target by @leeewee in #12631
- ln: fix clippy::collapsible_if by @oech3 in #13523
- ln: improve readability of
relative_pathfn by @cakebaker in #13585 - ln: remove unreachable code by @cakebaker in #13599
- ln: don't refuse --backup when src/dst are different names for the same inode by @Chaganti-Reddy in #13345
- ln: include destination in symbolic link failure message by @MeGaurav4 in #13673
ls
- test_ls.rs: Add test case for -T by @oech3 in #12840
- ls, du: don't panic on an empty time style after posix- strip by @leeewee in #12634
- ls: use Unicode quotes for locale/clocale styles in UTF-8 locales by @sylvestre in #12675
- ls: escape non-ASCII control chars in UTF-8 locale quoting by @sylvestre in #13150
- ls: treat '.' and '..' command-line args as directories, not symlinks by @sylvestre in #12656
- bug(ls): when --tabsize is a negative number ls successeds instead of rejecting it by @Devel08 in #13278
- ls: simplify tab size parsing and loop the tabsize tests by @sylvestre in #13283
- ls: allow detached --sort, --format, --time, --block-size by @bachorp in #13281
- ls: avoid leading quote-alignment space for colored names by @paolo-losi in #12433
- ls: Improve quote alignement check by @RenjiSann in #13433
- ls: fix clippy::collapsible_if by @oech3 in #13519
- test(ls): regression test for -aRv recursing into ./.. (#13501) by @Gooh456 in #13515
- ls: simplify bool by @oech3 in #13634
- ls: fix clippy::match_same_arms by @oech3 in #13644
- ls: support numeric-uid-gid on non-unix platforms by @eduardomourar in #13663
- ls: simplify match by .filter by @oech3 in #13696
mkdir
- mkdir: use
map_errinstead ofmatchby @cakebaker in #13546
mkfifo
- mkfifo: handle required arg by clap by @oech3 in #13504
- mkfifo: stop hardcoding "File exists" as the error message by @Gooh456 in #13551
mktemp
- mktemp: use
map_errinstead ofmatchby @cakebaker in #12489
more
- more: fix clippy::collapsible_if by @oech3 in #13524
- more: avoid overflow when -n is the maximum u16 value by @SAY-5 in #12970
- test(more): add integration test for -n u16::MAX regression by @sylvestre in #13565
- more: replace is_tty with is_terminal by @xtqqczze in #13638
mv
- mv: use copy_stream for fast cross-device move by @oech3 in #13046
- mv: ban eprintln! to avoid SIGABRT by @oech3 in #13208
- mv: fix clippy::collapsible_if by @oech3 in #13525
- mv: add --exchange to atomically swap two paths by @sylvestre in #13215
nice
- nice: strip errno by @oech3 in #12911
- nice: remove 1 unwrap() using match by @oech3 in #12909
- nice: robust clamping overflow by @oech3 in #12914
- nice: simplify
is_prefix_of()by @cakebaker in #12915 - nice: remove unuseful fn by @oech3 in #12924
- nice: untangle complex
matchby @cakebaker in #12916 - nice: add newline to warning message by @Devel08 in #12929
nohup
- nohup: report command execution errors by @wtcpython in #13391
nproc
- nproc: let default value of --ignore 0 by clap by @oech3 in #12823
- nproc: reduce a nest by if by @oech3 in #12849
- nproc: reject quota with some sched if OMP_NUM_THREADS=NaN by @oech3 in #12853
- nproc: simplify by value_parser! by @oech3 in #12856
- nproc: use chain for OMP_THREAD_LIMIT by @oech3 in #12857
- nproc: honor affinity mask by @oech3 in #12859
- nproc: clamp OMP_NUM_THREADS overflow by @oech3 in #12861
- nproc: PASS nproc-quota-systemd.sh (manually parse cgroups2 quota) by @oech3 in #12871
- nproc: simplify OMP_NUM_THREADS parsing by @oech3 in #12880
- nproc: don't show offline cores by @oech3 in #12890
- nproc: clamp --ignore overflow by @oech3 in #12863
- nproc: strip errno by @oech3 in #12908
- nproc: simplify core count by @oech3 in #12753
numfmt
- numfmt: prevent panic if float precision specifier > 65535 by @Devel08 in #12600
- numfmt: bound --format precision for a zero value by @leeewee in #12939
- numfmt: require equals for --header by @bachorp in #13273
- numfmt: reject an oversized --from-unit/--to-unit instead of panicking by @leeewee in #13484
- numfmt: do not panic on a multibyte whitespace field separator by @leeewee in #13485
- numfmt: add --from=auto test for multibyte whitespace separator by @kushals256 in #13487
- numfmt: prevent panic for --format precision > 65535 on remaining paths by @SAY-5 in #13514
- numfmt: simplify bool & fix clippy::collapsible_if by @oech3 in #13526
od
- od: bad error message whenever the argument is a directory by @Devel08 in #13386
- fix: regression upstream gnu od (#11613) by @uselessgoddess in #13396
- od: dedup match by @oech3 in #13558
- od: avoid dangerous index access pattern by @oech3 in #13592
- od: skip past end of seekable inputs without error by @sylvestre in #12646
- od: fix clippy by @oech3 in #13710
- od: restore skip-past-end handling for seekable special files by @sylvestre in #13713
- od: remove Box from enum CurrentReader by @oech3 in #13714
- od: remove enum var not used at production by @oech3 in #13738
paste
- paste: reset the delimiter list per file in serial mode by @winklemad in #13439
- paste: simplify 2 loop by while by @oech3 in #13740
pr
- pr: reject a non-positive expand-tab width (-e0) by @leeewee in #12615
- pr: reject a multibyte -e/-n argument instead of panicking by @leeewee in #12762
- pr: uutils pr accepts -W 0 and -w 0 while gnu pr rejects it by @Devel08 in #12779
- pr: uutils pr accepts -l 0 and --pages 0 while GNU doesn't by @Devel08 in #12781
- pr: uutils pr accepts negative expand tabs argument, GNU pr doesn't by @Devel08 in #12782
- Fix pr -o/--indent overflow handling by @TheAdamWarlock in #12974
- pr: stream -o/--indent offset to avoid abort on large values by @TheAdamWarlock in #12994
- pr: pr panics (Option::unwrap() on None) in merge mode -m on empty input #12995 by @Devel08 in #13080
- pr: use
matchinstead ofif/elsechain by @cakebaker in #13004 - pr: avoid parsing numeric filename suffixes as operands by @TheAdamWarlock in #13353
- pr :simplify match by @oech3 in #13500
- pr: simplify clap's FILES & drop a clone() by @oech3 in #13499
- pr: fix clippy::collapsible_if by @oech3 in #13527
- pr: report missing file as "pr: : " by @addielaruee in #13534
- pr: refactor IO error handling by @xtqqczze in #13549
- pr: report starting pages beyond page count by @wtcpython in #13574
printf
- printf: avoid panic on integer precision above u16::MAX by @SAY-5 in #12579
- printf, csplit: fix formatting for zero value when precision is zero by @eyupcanakman in #13425
ptx
- ptx: fix panic caused by improper assert by @WhateverAWS in #10916
- ptx: reject invalid sentence regexps by @TheAdamWarlock in #12892
- fix(ptx): missing filename in error messages by @HackingRepo in #13251
- ptx: use char counts for before-chunk sizing in get_output_chunks by @sylvestre in #12685
- ptx: simplify match by @oech3 in #13709
pwd
- pwd: ignore non-option arguments, drop getcwd disabling from pwd-long test by @sylvestre in #12610
- pwd: remove to_string_lossy by @oech3 in #13366
realpath
- realpath: fix 'nonexistent/./' to be treated as invalid by @LoukasPap in #13164
- realpath: remove to_string_lossy by @oech3 in #13360
- realpath: don't require read permission on a directory just to confirm a trailing slash by @Chaganti-Reddy in #13315
rm
- rm: hint to use ./-foo when removing a dash-prefixed file by @sylvestre in #12608
- rm: rewrite dash-hint test with original fixtures by @sylvestre in #12737
- rm: one-file-system by @DarthStrom in #12819
- rm: fix clippy::collapsible_if by @oech3 in #13528
- rm: do not panic when verbose output write fails by @l46983284-cpu in #13659
- rm: report a verbose write failure once without aborting the removal by @sylvestre in #13679
- rm: use
translatemacro for two error messages by @cakebaker in #13730
runcon
- runcon: report a stdout write error instead of panicking by @leeewee in #13380
- runcon: fix clippy::match_same_arms by @oech3 in #13649
seq
- seq, printf: avoid integer overflow on extreme precision/exponent by @sylvestre in #13246
- seq: simplify match by .map_err by @oech3 in #13598
shred
- shred: simplify nested matches by @cakebaker in #12524
- shred: fix error message when path has trailing slash by @francesco-gaglione in #12725
- shred: two refactorings by @cakebaker in #12780
- shred: fix clippy::collapsible_if by @oech3 in #13529
- shred: report random source open errors by @wtcpython in #13571
- shred: report the real error for an inaccessible file by @0xfandom in #13640
shuf
- shuf: fix panic/abort on large -i range without small --head-count by @leeewee in #12501
- shuf: don't truncate -o output when input or random source fails by @sylvestre in #13113
sort
- sort: fix locale collation strength for hyphen ordering by @JuanCruzMateos in #12677
- sort: reject --parallel non-zero by @oech3 in #13024
- sort: ignore
--parallelon WASI by @cakebaker in #13028 - sort: test punctuation-only differences are kept by -u under locale by @sylvestre in #13142
- sort: add merge benchmarks for the UTF-8 locale by @sylvestre in #13196
- sort: fix panic on non-UTF-8 filenames with --files0-from by @ppmpreetham in #11593
- sort: use os_string_from_vec for --files0-from names by @leeewee in #12773
- sort: fix clippy::collapsible_if by @oech3 in #13530
- sort: simplify match of chars by @oech3 in #13536
- sort: do not panic when a write fails during a merge by @mgravell in #13654
- sort: do not panic when --check stops at the first disorder by @mgravell in #13652
- sort: make return value of
loopexplicit by @cakebaker in #13674
split
- split: read ahead input by @oech3 in #12662
- split.rs: dedup io::copy by @oech3 in #12663
- split: remove commented out code by @cakebaker in #12666
- split: use
map_errinstead ofmatchby @cakebaker in #12664 - split: reject excessive suffix lengths by @wondr-wclabs in #12609
- split: reject a zero chunk count for -n l/N and r/N by @leeewee in #12613
- split: simplify matches! and loop by @oech3 in #13052
- split: fix --verbose >/dev/full panic by @oech3 in #13054
- split: remove buffering by @oech3 in #13069
- split: dedup if by @oech3 in #13078
- split: simplify parsing io-blksize by @oech3 in #13082
- split: remove Box by @oech3 in #13077
- split: replace OPT_ by options:: by @oech3 in #13070
- split: simplify match bool by @oech3 in #13067
- split: remove dummy std::io::Cursor allocation by @oech3 in #13079
- split: reduce strong BufRead dependency by @oech3 in #13099
- split: replace match by map_err by @oech3 in #13111
- split: remove unused clippy:: by @oech3 in #13101
- split: add
platform/wasi.rsby @cakebaker in #13076 - split: remove condition by moving reset by @cakebaker in #13062
- split: extract proper errno from OS by @oech3 in #13112
- split: remove io::copy for LineChunkWriter by @oech3 in #13141
- split: remove BufReader if possible by @oech3 in #13179
- split: extract error message from os at open_file_error by @oech3 in #13411
- split: allow writing to symlink to nonseekable by @oech3 in #13416
- split: translate! creating file by @oech3 in #13100
- split: fix I/O error handling for device full conditions by @sylvestre in #11239
stat
- stat: fix char-boundary panic on an invalid directive after a multibyte char by @leeewee in #12617
- stat: bad error message when directory doesn't exist by @Devel08 in #13026
- chore(l10n): fix typo in stat -L size by @BAMF0 in #13429
- stat: fix clippy::collapsible_if by @oech3 in #13531
- stat: use .filter & dedup check for char by @oech3 in #13535
- stat: fix clippy::match_same_arms by @oech3 in #13648
stty
- stty: avoid overflow when rounding max baud rate by @sjh9714 in #13318
- stty: fix trailing semicolon in macro used in expression position by @sylvestre in #13468
sum
- sum: read ahead for perf for 1st run by @oech3 in #12569
- sum: when / is appended to a regular file, uutils sum reports incorrect error messages by @Devel08 in #12870
- sum: sum /proc/self/mem error lacks file path by @Devel08 in #12990
- sum: disable test on OpenBSD by @cakebaker in #13044
- test_sum.rs: simplify cfg by @oech3 in #13051
- sum: remove Box by @oech3 in #13074
- sum: extract proper open & read error from OS by @oech3 in #13367
sync
- sync: drop unuseful comment by @oech3 in #12705
- sync: replace match by ok_or_else by @oech3 in #12706
- sync: use map_err by @oech3 in #12704
- sync: simplify if block by @oech3 in #13375
- sync: replace nix by rustix by @oech3 in #13590
tac
- tac: set .default_value for FILES by @oech3 in #13503
- tac: fix clippy::collapsible_if by @oech3 in #13532
- tac: simplify .filter by @oech3 in #13690
tail
- tail: replace .ok().is_some_and by .is_ok_and by @oech3 in #12690
- tail: remove unnecessary .as_fd() by @oech3 in #12739
- tail: drop outdated comment about <&- by @oech3 in #12752
- tail: reduce code by @oech3 in #12755
- tail: fix a collapsible_if by @oech3 in #13107
- tail: treat a watched file replaced by a symlink as untailable by @sylvestre in #12661
- tail: remove .to_string_lossy() by @oech3 in #13356
- tail: continue processing files after error by @lauchimoon in #13445
- tail, touch: fix clippy::collapsible_if by @oech3 in #13533
- tail: remove commented out line by @cakebaker in #13539
- tail: simplify match by @oech3 in #13563
- tail: fix -f/-F not following files on Windows (#4827) by @crutkas in #13248
- tail: remove an unused var: old_md by @oech3 in #13636
- tail: replace matches! by is_some_and, avoid negative name by @oech3 in #13635
- tail: remove an unwrap() by @oech3 in #13707
- tests(tail): fix race in untailable-symlink test by @eduardomourar in #13704
- tail(test): Attempt to fix flaky tail pipe test by increasing byte count by @Xylphy in #13701
tee
- tee: avoid 0fill & heap alloc by @oech3 in #12527
- tee: fix incorrect comment about flush by @oech3 in #12540
- tee: remove ErrorKind::Other, simplify already discarded Result by @oech3 in #12953
- tee: simplify aborted bool by @oech3 in #12988
- tee: add zero-copy fast-path by @oech3 in #11943
- tee: avoid returning double negative Result by @oech3 in #13407
timeout
- fix(timeout, uucore): use sigwait and timers for waiting by @Alonely0 in #13237
- timeout: Implemention for windows by @nikolalukovic in #13363
touch
- touch: do not hang on a reader-less FIFO by @sylvestre in #12735
- touch: fix char-boundary panic on a multibyte char in a -t timestamp by @leeewee in #12619
- touch: report original input in -t timestamp error message by @wtcpython in #13321
- touch: remove unnecessary error msg by @cakebaker in #13325
- touch: parse unpadded dates in local time by @wtcpython in #13340
- touch: simplify bool, remove to_string_lossy by @oech3 in #13365
- touch: update times on owned files with no read/write permission by @sylvestre in #12638
tr
- tr: add codspeed benchmark by @parasol-aser in #12189
true
truncate
- truncate: process all files when one fails by @sylvestre in #12734
- truncate: remove duplicate test by @cakebaker in #12756
- truncate: simplify fn is_modifier by @oech3 in #13412
- truncate: a few trivial refactorings by @cakebaker in #13413
- fix(truncate): reject relative size overflow by @ThomasHabets in #13427
- truncate: missing input value in error when -s flag is empty by @Devel08 in #13588
tsort
- tsort: simplify code by @oech3 in #12550
- Add buffered printing and lock output stream to tsort by @mrkalling in #12733
- tsort simplify cfg by @oech3 in #13219
- tsort: remove unreachable error case by @cakebaker in #13238
- tsort: remove unnecessary uses of unsafe by @mrkalling in #13323
- tsort: improve expect error message by @xtqqczze in #13566
unexpand
- unexpand: reject too-large --tabs increment instead of overflowing by @santhreal in #13383
uniq
- uniq: add benchmarks for -w/--check-chars by @sylvestre in #13247
- Uniq: improve performances by @sylvestre in #13249
- uniq: remove
write_line_terminatormacro by @cakebaker in #13632
uptime
- uptime: fix leading zero in the hours field by @eyupcanakman in #13098
- uucore, uptime: replace unsafe libc::clock_gettime by rustix by @Devel08 in #13291
- uptime: use CLOCK_BOOTTIME on additional platforms by @xtqqczze in #13461
- uptime: drop extra spaces by @oech3 in #13498
users
wc
- wc: cleanup cfg by @oech3 in #12559
- wc: remove unnecessary .as_fd() by @oech3 in #12738
- wc: remove a nest by cfg by @oech3 in #12802
- wc: splice non FIFO stream too by @oech3 in #12736
who
yes
- yes: improve throughput & simplify code by @oech3 in #12650
- yes: match with GNU's strace behaviour by @oech3 in #12717
- yes: prepare supporting invalid unicode by @oech3 in #12935
- yes: fix clippy::unnecessary_wraps by @oech3 in #13003
uucore
- simplify pipe wrapper by @oech3 in #12528
- pipes:rs: replace unnecessary splice by read-ahead hint by @oech3 in #12548
- pipes.rs: fix typo by @oech3 in #12554
- uucore: remove unnecessary .as_fd() by @oech3 in #12740
- uucore: supress clippy::collapsible_if warning by @oech3 in #12940
- uucore: handle SIGRTMIN+N and SIGRTMAX-N notation by @enr0n in #12149
- uucore: remove dead code by @oech3 in #13183
- uucore: rename copy_stream to copy_fast to avoid confusion by @oech3 in #13289
- locale: fix incomplete fallback bundles by @BAMF0 in #13257
- locale: simplify partial-resource fallback with unwrap_or_else by @sylvestre in #13301
- perms.rs: replace unnecessary to_string_lossy by @oech3 in #13359
- uucore: replace unnecessary to_string_lossy by @oech3 in #13358
- uucore/fsxattr: simplify two matches by @cakebaker in #13362
- fn starts_with_plus by @oech3 in #13357
- backup_control.rs: remove unsafe & Mutex by @oech3 in #12290
- uucore parser: fix clippy::collapsible_if by @oech3 in #13510
- signals.rs: fix clippy::collapsible_if by @oech3 in #13508
- uucore: fix C.UTF-8 locale incorrectly detected as ASCII by @mufeedali in #12525
- lib.rs: simplify fn read_yes by @oech3 in #13692
- uucore: document strip_errno with an example by @sylvestre in #13724
- uucore: use workspace dependencies by @xtqqczze in #13729
- error: clarify UUsageError documentation by @xtqqczze in #13737
Security
- Fix recursive descent by @sylvestre in #12541
- chmod/chown: symlink cycles detection by @nikolalukovic in #11805
- touch: drop O_TRUNC on create to close TOCTOU race (#10019) by @sylvestre in #12171
- head: Fixed TOCTOU bug in checking of metadata by @max-amb in #12439
- head: add TOCTOU regression tests and fix comment typo by @sylvestre in #12637
- mkfifo: drop path-based chmod to close TOCTOU race (#10020) by @sylvestre in #12174
- util: move touch/head TOCTOU checks into check-toctou.sh by @sylvestre in #12643
- split: harden output open path against TOCTOU target swaps by @sylvestre in #12565
- chcon: anchor recursive relabel resolution to traversal dirfd by @sylvestre in #12566
- mv: regression test + strace check for cross-device O_NOFOLLOW (#10015) by @sylvestre in #12468
- cp: don't open FIFOs/devices when preserving timestamps by @sylvestre in #13351
- head: check directory on open fd, not via path is_dir() (#11972) by @sylvestre in #12173
- chmod: re-check --preserve-root during the recursive descent by @sylvestre in #13621
- uucore: add O_NOFOLLOW to DirFd::open_file_at by @sylvestre in #13623
- cp: do not descend into a destination subdirectory that is a symlink by @sylvestre in #13624
- install: finalize ownership before mode, and skip the mode if chown fails by @sylvestre in #13629
- mv: compare file identity in the --backup=simple safety guard by @sylvestre in #13660
- mknod: label the node at creation instead of relabelling it after by @sylvestre in #13668
- Backup guard: improve support for mv, cp & install by @sylvestre in #13672
- stdbuf: refuse a libstdbuf path that cannot be represented in LD_PRELOAD by @sylvestre in #13622
- mv: fail closed when recreating a cross-device directory destination by @sylvestre in #13627
- mkdir, mkfifo: label at creation instead of relabelling after by @sylvestre in #13676
- chroot: chroot the path that --skip-chdir validated by @sylvestre in #13678
- mv: strip setuid/setgid when the cross-device copy cannot preserve ownership by @sylvestre in #13675
Code Quality & Cleanup
- remove some collapsible_if by @oech3 in #12537
- remove some collapsible_if by @oech3 in #12539
- Fix clippy by @zhw2101024 in #12645
- ignore a ln wasm test by @sylvestre in #12679
- uufuzz: simplify by @oech3 in #12745
- Simplify if-guard-then-bool returns by @sylvestre in #12702
- test: simplify code by @oech3 in #12888
- workspace.wordlist.txt: remove hashsum by @oech3 in #12907
- test: remove to_string_lossy by @oech3 in #12938
- Cargo.toml: drop unused feat_os_windows_legacy by @oech3 in #13055
- Use Option::ok_or with ? instead of let...else returning Err by @sylvestre in #13102
- Stabilize some benchmarks by @sylvestre in #13254
- clippy: fix lints by @xtqqczze in #13329
- fuzz_date.rs: remove to_string_lossy by @oech3 in #13369
- Cargo.toml: enable clippy::used_underscore_items by @oech3 in #13542
- complete fix for clippy::collapsible_if by @oech3 in #13538
- fix more ruff warnings by @sylvestre in #13560
- refactor: use core::ffi types by @xtqqczze in #13568
- Cargo.toml: drop unnecessary comment by @oech3 in #13589
- clippy: fix with_capacity_zero beta lint by @xtqqczze in #13602
- fix: nightly clippy redundant else block lint by @HackingRepo in #13601
- clippy: allow missing_const_for_thread_local false positives by @xtqqczze in #12333
- test: fix clippy::match_same_arms by @oech3 in #13548
- test: fix
unreachable_patternslint on Windows by @cakebaker in #13616 - fix some clippy::match_same_arms's (split #13541) by @oech3 in #13617
- test: widen several linux-only tests to run on all unix platforms by @eduardomourar in #13666
- test: fix platform assumptions in du and realpath tests by @eduardomourar in #13665
- enable clippy::match_same_arms globally by @oech3 in #13689
- cargo: move lints section after dependencies and features by @xtqqczze in #13715
- benchmarks: prepare args outside benchmark by @xtqqczze in #10388
- test: fix comparison of integers wider than i128 by @dhruv-15-03 in #13719
CI & Build
- CICD: remove an unused variable by @oech3 in #12534
- openbsd.yml: improve perf & sync disk space cleanup by @oech3 in #12583
- openbsd.yml: get additional free disk space by @oech3 in #12627
- GnuTests (SMACK): bump busybox URL by @oech3 in #12754
- Potential fix for code scanning alert no. 5: Workflow does not contain permissions by @sylvestre in #12655
- make.yml: reduce binary size by @oech3 in #12247
- GnuTests: remove LD_PRELOAD from nproc-quota.sh & avoid 0 period by @oech3 in https://github.com/uutils/coreutils/pull/13255
- util: re-point GNU test harness at current checkout in run-gnu-test.sh by @sylvestre in https://github.com/uutils/coreutils/pull/13163
- make.yml: install uutils to CI image by @oech3 in https://github.com/uutils/coreutils/pull/9634
- CICD.yml: Publish both of coreutils and individual MSVC *.exe by @oech3 in https://github.com/uutils/coreutils/pull/11270
- Group fuzz targets in fuzzing workflow by @mattsu2020 in https://github.com/uutils/coreutils/pull/12450
- Revert "make.yml: install uutils to CI image" by @oech3 in https://github.com/uutils/coreutils/pull/13406
- ci(FixPR): add explicit least-privilege permissions block by @kobihikri in https://github.com/uutils/coreutils/pull/13402
- fuzzing.yml: simplify host-tuple by @oech3 in https://github.com/uutils/coreutils/pull/13392
- make.yml: don't publish cygwin bins (hot fix for CI) by @oech3 in https://github.com/uutils/coreutils/pull/13456
- benchmarks: reduce CodSpeed CI load to avoid cache API rate limits by @sylvestre in https://github.com/uutils/coreutils/pull/13462
- GNUmakefile: don't try to install libstdbuf for Windows target by @oech3 in https://github.com/uutils/coreutils/pull/12533
- CI: remove actions/setup-python by @oech3 in https://github.com/uutils/coreutils/pull/13465
- ci: fix Cygwin build failure due to Windows Mandatory ASLR by @sylvestre in https://github.com/uutils/coreutils/pull/13470
- fix(ci): keep coverage profraw writable under umask 0777 tests by @l46983284-cpu in https://github.com/uutils/coreutils/pull/13502
- fuzzing.yml: Bump GNU coreutils to 9.11 by @oech3 in https://github.com/uutils/coreutils/pull/13201
- Revert "fuzzing.yml: Bump GNU coreutils to 9.11" by @sylvestre in https://github.com/uutils/coreutils/pull/13559
- GnuTests: backport cat/splice.sh by @oech3 in https://github.com/uutils/coreutils/pull/13387
- Disable Redox target in CICD workflow by @sylvestre in https://github.com/uutils/coreutils/pull/13657
- ci: Change the spell detection strategy by @sylvestre in https://github.com/uutils/coreutils/pull/13472
- ci: skip cspell on pre-commit.ci by @sylvestre in https://github.com/uutils/coreutils/pull/13661
- fix the CI by @sylvestre in https://github.com/uutils/coreutils/pull/13711
Documentation
- CONTRIBUTING: link to the review guidelines website by @sylvestre in https://github.com/uutils/coreutils/pull/12523
- installation.md: fix broken ubuntu link by @cakebaker in https://github.com/uutils/coreutils/pull/12515
- installation.md: bump Ubuntu version by @oech3 in https://github.com/uutils/coreutils/pull/12526
- release notes for 0.9.0 by @sylvestre in https://github.com/uutils/coreutils/pull/12531
- SECURITY.md: document threat model, scope, and GitHub reporting by @sylvestre in https://github.com/uutils/coreutils/pull/12724
- we have a domain name now by @sylvestre in https://github.com/uutils/coreutils/pull/13114
- CONTRIBUTING.md: Add URL to get latest GNU coreutils by @oech3 in https://github.com/uutils/coreutils/pull/13233
- CONTRIBUTING.md: improve wording of reference GNU coreutils section by @sylvestre in https://github.com/uutils/coreutils/pull/13269
- README: fix gnu vs musl note by @JohannesSchilling in https://github.com/uutils/coreutils/pull/13303
- docs: fix macOS tier 1 targets and platform compatibility table by @wtcpython in https://github.com/uutils/coreutils/pull/13305
- chore: fix markdown rendering typo by @HackingRepo in https://github.com/uutils/coreutils/pull/13586
Platform Support
- chore: restrict Android cfg too 64-bit to match
linux_execfnby @YumeYuka in https://github.com/uutils/coreutils/pull/12416 - wasm: support for wasm32-wasip2 target by @eduardomourar in https://github.com/uutils/coreutils/pull/12653
Dependency Updates
- chore(deps): update rust crate libfuzzer-sys to v0.4.13 by @renovate[bot] in https://github.com/uutils/coreutils/pull/12606
- chore(deps): update codecov/codecov-action action to v7 by @renovate[bot] in https://github.com/uutils/coreutils/pull/12678
- chore(deps): update rust crate regex to v1.12.4 by @renovate[bot] in https://github.com/uutils/coreutils/pull/12746
- chore(deps): update rust crate memchr to v2.8.2 by @renovate[bot] in https://github.com/uutils/coreutils/pull/12796
- Bump
time& adaptpinkyandwhoto API change by @cakebaker in https://github.com/uutils/coreutils/pull/12872 - chore(deps): update actions/checkout action to v7 by @renovate[bot] in https://github.com/uutils/coreutils/pull/12966
- Bump
getrandomfrom0.4.2to0.4.3by @cakebaker in https://github.com/uutils/coreutils/pull/12957 - chore(deps): update rust crate jiff to v0.2.29 by @renovate[bot] in https://github.com/uutils/coreutils/pull/13008
- Bump
itertoolsfrom0.14.0to0.15.0by @cakebaker in https://github.com/uutils/coreutils/pull/12987 - chore(deps): update rust crate quote to v1.0.46 by @renovate[bot] in https://github.com/uutils/coreutils/pull/13021
- chore(deps): update rust crate time to v0.3.51 by @renovate[bot] in https://github.com/uutils/coreutils/pull/13022
- chore(deps): update rust crate memmap2 to v0.9.11 by @renovate[bot] in https://github.com/uutils/coreutils/pull/13033
- chore(deps): update rust crate divan to v5 by @renovate[bot] in https://github.com/uutils/coreutils/pull/13050
- chore(deps): update actions/cache action to v6 by @renovate[bot] in https://github.com/uutils/coreutils/pull/13049
- chore(deps): update rust crate bstr to v1.12.2 by @renovate[bot] in https://github.com/uutils/coreutils/pull/13071
- chore(deps): update rust crate icu_collator to v2.2.1 by @renovate[bot] in https://github.com/uutils/coreutils/pull/13072
- chore(deps): update rust crate bstr to v1.12.3 by @renovate[bot] in https://github.com/uutils/coreutils/pull/13081
- chore(deps): update rust crate divan to v5.0.1 by @renovate[bot] in https://github.com/uutils/coreutils/pull/13106
- Bump
phf&phf_codegenfrom0.13.1to0.14.0by @cakebaker in https://github.com/uutils/coreutils/pull/13048 - chore(deps): update rust crate openssl to v0.10.81 by @renovate[bot] in https://github.com/uutils/coreutils/pull/13188
- chore(deps): update rust crate jiff to v0.2.31 by @renovate[bot] in https://github.com/uutils/coreutils/pull/13214
- chore(deps): update rust crate indicatif to v0.18.5 by @renovate[bot] in https://github.com/uutils/coreutils/pull/13211
- chore(deps): update rust crate time to v0.3.52 by @renovate[bot] in https://github.com/uutils/coreutils/pull/13229
- chore(deps): update rust crate clap_complete to v4.6.6 by @renovate[bot] in https://github.com/uutils/coreutils/pull/13236
- chore(deps): update rust crate time to v0.3.53 by @renovate[bot] in https://github.com/uutils/coreutils/pull/13239
- chore(deps): update rust crate console to v0.16.4 by @renovate[bot] in https://github.com/uutils/coreutils/pull/13242
- chore(deps): update rust crate indicatif to v0.18.6 by @renovate[bot] in https://github.com/uutils/coreutils/pull/13243
- chore(deps): update rust crate clap_complete to v4.6.7 by @renovate[bot] in https://github.com/uutils/coreutils/pull/13245
- chore(deps): update rust crate rand to v0.10.2 by @renovate[bot] in https://github.com/uutils/coreutils/pull/13253
- chore(deps): update actions/checkout action to v7 by @renovate[bot] in https://github.com/uutils/coreutils/pull/13189
- chore(deps): update rust crate selinux to v0.6.3 by @renovate[bot] in https://github.com/uutils/coreutils/pull/13262
- chore(deps): update rust crate rustc-hash to v2.1.3 by @renovate[bot] in https://github.com/uutils/coreutils/pull/13261
- chore(deps): update davidanson/markdownlint-cli2-action action to v24 by @renovate[bot] in https://github.com/uutils/coreutils/pull/13266
- chore(deps): update reactivecircus/android-emulator-runner action to v2.38.0 by @renovate[bot] in https://github.com/uutils/coreutils/pull/13277
- chore(deps): update astral-sh/ruff-action action to v4.1.0 by @renovate[bot] in https://github.com/uutils/coreutils/pull/13279
- Bump
defmtfrom1.1.0to1.1.1by @cakebaker in https://github.com/uutils/coreutils/pull/13271 - chore(deps): update rust crate ctor to v1.0.8 by @renovate[bot] in https://github.com/uutils/coreutils/pull/13285
- deny.toml: remove
winnowfrom skip list by @cakebaker in https://github.com/uutils/coreutils/pull/13290 - Bump
crossbeam-epochfrom0.9.18to0.9.20by @cakebaker in https://github.com/uutils/coreutils/pull/13299 - chore(deps): update rust crate memchr to v2.8.3 by @renovate[bot] in https://github.com/uutils/coreutils/pull/13309
- chore(deps): update rust crate jiff to v0.2.32 by @renovate[bot] in https://github.com/uutils/coreutils/pull/13322
- chore(deps): update rust crate regex to v1.13.0 by @renovate[bot] in https://github.com/uutils/coreutils/pull/13328
- chore(deps): update rust crate bstr to v1.13.0 by @renovate[bot] in https://github.com/uutils/coreutils/pull/13405
- fix(cargo): update filetime dependency version constraint by @xtqqczze in https://github.com/uutils/coreutils/pull/12334
- chore(deps): update rust crate clap to v4.6.2 by @renovate[bot] in https://github.com/uutils/coreutils/pull/13414
- chore(deps): update rust crate regex to v1.13.1 by @renovate[bot] in https://github.com/uutils/coreutils/pull/13415
- chore(deps): update rust crate ctor to v1.0.9 by @renovate[bot] in https://github.com/uutils/coreutils/pull/13417
- chore(deps): update rust crate self_cell to v1.3.0 by @renovate[bot] in https://github.com/uutils/coreutils/pull/13418
- chore(deps): update rust crate cfg_aliases to v0.2.2 by @renovate[bot] in https://github.com/uutils/coreutils/pull/13424
- chore(deps): update rust crate quote to v1.0.47 by @renovate[bot] in https://github.com/uutils/coreutils/pull/13448
- chore(deps): update rust crate proc-macro2 to v1.0.107 by @renovate[bot] in https://github.com/uutils/coreutils/pull/13447
- chore(deps): update rust crate jiff to v0.2.33 by @renovate[bot] in https://github.com/uutils/coreutils/pull/13446
- Bump
thiserror& addsynto skip list by @cakebaker in https://github.com/uutils/coreutils/pull/13457 - Bump
spinfrom0.10.0to0.10.1by @cakebaker in https://github.com/uutils/coreutils/pull/13455 - chore(deps): update rust crate jiff to v0.2.34 by @renovate[bot] in https://github.com/uutils/coreutils/pull/13463
- chore(deps): update rust crate time to v0.3.54 by @renovate[bot] in https://github.com/uutils/coreutils/pull/13469
- chore(deps): update rust crate clap to v4.6.3 by @renovate[bot] in https://github.com/uutils/coreutils/pull/13477
- chore(deps): update actions/checkout action to v7.0.1 by @renovate[bot] in https://github.com/uutils/coreutils/pull/13476
- chore(deps): update rust crate libc to v0.2.187 by @renovate[bot] in https://github.com/uutils/coreutils/pull/13486
- chore(deps): update rust crate syn to v3.0.2 by @xtqqczze in https://github.com/uutils/coreutils/pull/13474
- chore(deps): update rust crate libc to v0.2.188 by @renovate[bot] in https://github.com/uutils/coreutils/pull/13489
- chore(deps): update rust crate libc to v0.2.189 by @renovate[bot] in https://github.com/uutils/coreutils/pull/13497
- chore(deps): update rust crate clap to v4.6.4 by @renovate[bot] in https://github.com/uutils/coreutils/pull/13496
- chore(deps): update rust crate glob to v0.3.4 by @renovate[bot] in https://github.com/uutils/coreutils/pull/13492
- chore(deps): update rust crate ctor to v1.0.10 by @renovate[bot] in https://github.com/uutils/coreutils/pull/13491
- fuzz: update thiserror to 2.0.19 by @xtqqczze in https://github.com/uutils/coreutils/pull/13553
- chore(deps): update rust crate jiff to v0.2.35 by @renovate[bot] in https://github.com/uutils/coreutils/pull/13573
- chore(deps): update rust crate socket2 to v0.6.5 by @xtqqczze in https://github.com/uutils/coreutils/pull/13577
- chore(deps): update rust crate jiff-tzdb to v0.1.8 by @xtqqczze in https://github.com/uutils/coreutils/pull/13582
- chore(deps): update rust crate num-bigint to v0.4.8 by @xtqqczze in https://github.com/uutils/coreutils/pull/13581
- chore(deps): run cargo shear by @xtqqczze in https://github.com/uutils/coreutils/pull/13583
- chore(deps): update rust crate ctor to v1.0.11 by @renovate[bot] in https://github.com/uutils/coreutils/pull/13584
- chore(deps): update rust crate zmij to 1.0.23 by @xtqqczze in https://github.com/uutils/coreutils/pull/13587
- chore(deps): update rust crate clap_complete to v4.6.8 by @renovate[bot] in https://github.com/uutils/coreutils/pull/13606
- chore(deps): update rust crate jobserver to v0.1.35 by @xtqqczze in https://github.com/uutils/coreutils/pull/13607
- chore(deps): update rust crate displaydoc to v0.2.7 by @xtqqczze in https://github.com/uutils/coreutils/pull/13618
- chore(deps): update rust crate zerocopy to v0.8.55 by @xtqqczze in https://github.com/uutils/coreutils/pull/13619
- chore(deps): update codspeedhq/action action to v5 by @renovate[bot] in https://github.com/uutils/coreutils/pull/13642
- chore(deps): update mozilla-actions/sccache-action action to v0.0.11 by @renovate[bot] in https://github.com/uutils/coreutils/pull/13641
- chore(deps): update rust crate ctor to v1.0.12 by @renovate[bot] in https://github.com/uutils/coreutils/pull/13647
- chore(deps): update rust crate clap to v4.6.5 by @renovate[bot] in https://github.com/uutils/coreutils/pull/13677
- chore(deps): update rust crate time to v0.3.55 by @renovate[bot] in https://github.com/uutils/coreutils/pull/13693
- deps: update cfg_aliases dependency to use workspace configuration by @xtqqczze in https://github.com/uutils/coreutils/pull/13712
- chore(deps): update rust crate data-encoding-macro to v0.1.21 by @xtqqczze in https://github.com/uutils/coreutils/pull/13726
- chore(deps): update rust crate similar to v3.1.2 by @renovate[bot] in https://github.com/uutils/coreutils/pull/13743
Version Management
- prepare release 0.10.0 by @sylvestre in https://github.com/uutils/coreutils/pull/13721
New Contributors
- @leeewee made their first contribution in #12501
- @SAY-5 made their first contribution in #12579
- @puneetdixit200 made their first contribution in #12497
- @wondr-wclabs made their first contribution in #12609
- @JuanCruzMateos made their first contribution in #12677
- @francesco-gaglione made their first contribution in #12725
- @TheAdamWarlock made their first contribution in #12726
- @koopatroopa787 made their first contribution in #12854
- @mrkalling made their first contribution in #12733
- @mistaste made their first contribution in #12883
- @DarthStrom made their first contribution in #12819
- @nkgotcode made their first contribution in #12639
- @enr0n made their first contribution in #12149
- @1mpossible-code made their first contribution in #13030
- @LoukasPap made their first contribution in #13164
- @ppmpreetham made their first contribution in #11593
- @HackingRepo made their first contribution in #13251
- @bachorp made their first contribution in #13273
- @JohannesSchilling made their first contribution in https://github.com/uutils/coreutils/pull/13303
- @favilances made their first contribution in #13294
- @Chaganti-Reddy made their first contribution in #13310
- @wtcpython made their first contribution in https://github.com/uutils/coreutils/pull/13305
- @sjh9714 made their first contribution in #13318
- @muscar made their first contribution in #10689
- @miniex made their first contribution in #12887
- @parasol-aser made their first contribution in #12189
- @santhreal made their first contribution in #13383
- @kobihikri made their first contribution in https://github.com/uutils/coreutils/pull/13402
- @ThomasHabets made their first contribution in #13427
- @paolo-losi made their first contribution in #12433
- @uselessgoddess made their first contribution in #13396
- @winklemad made their first contribution in #13439
- @l46983284-cpu made their first contribution in #13419
- @lauchimoon made their first contribution in #13445
- @relative23 made their first contribution in #13459
- @kushals256 made their first contribution in #13487
- @wilmerdooley made their first contribution in #13296
- @addielaruee made their first contribution in #13534
- @mufeedali made their first contribution in #12525
- @philocalyst made their first contribution in #12281
- @crutkas made their first contribution in #13248
- @abhishekpradhan made their first contribution in #13516
- @eduardomourar made their first contribution in https://github.com/uutils/coreutils/pull/12653
- @Gooh456 made their first contribution in #13515
- @sankalpsthakur made their first contribution in #13651
- @0xfandom made their first contribution in #13640
- @mgravell made their first contribution in #13654
- @MeGaurav4 made their first contribution in #13673
- @igorgbr made their first contribution in #13702
- @dhruv-15-03 made their first contribution in #13718
Full Changelog: 0.9.0...0.10.0