Skip to content
Closed
Show file tree
Hide file tree
Changes from all commits
Commits
Show all changes
1323 commits
Select commit Hold shift + click to select a range
34c3a4c
refactor: simplify redox cfg condition
xtqqczze Sep 20, 2026
86561cf
build-gnu.sh: sed tests/sort/sort.pl to keep clap provided message
oech3 Sep 20, 2026
25b1d33
GnuTests: skip getopt_vs_usage.sh and usage_vs_refs.patch, of little …
sylvestre Sep 19, 2026
8b6dba8
ls: use the default terminal quoting style with --dired
ChihweiLHBird Sep 17, 2026
b9e3843
ls: resolve --dired by argument position
ChihweiLHBird Sep 17, 2026
f479b83
date: use the locale date format verbatim instead of injecting %Z
sylvestre Sep 18, 2026
dd4288b
date: keep non-UTF-8 bytes in format strings instead of erroring out
sylvestre Sep 18, 2026
f48463d
date: test a GB18030 format string
sylvestre Sep 18, 2026
9253eb4
shuf: don't panic when getrandom failed
oech3 Sep 20, 2026
dd448cc
uucore: do not panic on a %f precision above the formatter limit
sylvestre Sep 19, 2026
ecf179b
chown/chgrp: bind the recursive operand to a verified descriptor
sylvestre Aug 2, 2026
9eeebf8
chmod: open the recursive operand with the caller's symlink policy
sylvestre Aug 2, 2026
3e5c5f4
uucore/perms: localize the remaining recursive chown diagnostics
sylvestre Sep 9, 2026
f74a2b4
head, tail: quote file names in the '==> name <==' headers
sylvestre Sep 19, 2026
e409f4e
head, tail: make the header quoting test portable to Windows
sylvestre Sep 18, 2026
a017c81
Update ignore-intermittent.txt to remove a test
sylvestre Sep 21, 2026
cbebaa8
uucore: print strerror(EEXIST) as 'File exists'
abendrothj Sep 21, 2026
5618810
date: allow multiple --file
cakebaker Sep 20, 2026
75f1d6d
shuf: remove "at_and_ucmd" call from test
cakebaker Sep 21, 2026
df5f5fd
simplify target_family = ...
oech3 Sep 21, 2026
21b0977
freebsd.yml, GnuTests.yml: Use ubuntu-latest as VM's glibc is used
oech3 Sep 19, 2026
972c19f
numfmt: diagnose write errors instead of panicking
sylvestre Sep 19, 2026
488eb55
tests: numfmt: restrict /dev/full write-error test to Linux
sylvestre Sep 21, 2026
dba67b0
chore: add missing newlines to source header
xtqqczze Sep 21, 2026
872d33e
chore: update spell-checker comments
xtqqczze Sep 21, 2026
6f04062
style: reorder attributes and documentation comments
xtqqczze Sep 21, 2026
50ec69d
split: reuse the per-line buffer in round-robin mode
haydonryan Sep 21, 2026
1b0399f
uucore: Use rustc-hash for symlink-loop detection
haydonryan Sep 21, 2026
f306301
chown: allow non-utf8 path for --reference
cakebaker Sep 21, 2026
80fdb80
du: use FxHashSet directly instead of aliasing it to HashSet
oech3 Sep 22, 2026
8d38901
chore(deps): update rust crate num-prime to 0.6.0
renovate[bot] Sep 22, 2026
b4fe3ae
b2sum: test that --status still reports unusable checksum input
wondr-wclabs Sep 19, 2026
d861a66
factor: benchmark the numbers that stress factorization
sylvestre Sep 21, 2026
8c26101
refactor(uucore): make cstr2string unsafe
xtqqczze Sep 22, 2026
fe4086c
chore(deps): update rust crate num-prime to v0.6.1
renovate[bot] Sep 23, 2026
457c6b3
CI: drop rustup from VM
oech3 Sep 23, 2026
16bfbe8
sort: remove some len()
oech3 Sep 23, 2026
187fc51
install: allow non-UTF8 for --target-directory
cakebaker Sep 22, 2026
81e7b20
i18n: filter out empty env variables
Juul-Mc-Goa Sep 22, 2026
9c523e5
add test for all empty locale env variables
Juul-Mc-Goa Sep 22, 2026
7384cf8
workspace.wordlist.txt: Add 3 words
oech3 Sep 23, 2026
8ac23de
CI: use install-action to install wasmtime in WASI workflow
kairosci Sep 23, 2026
436286a
make.yml: fix tarball's name
oech3 Sep 23, 2026
add4b72
chore: add blank lines to Cargo.toml file header
xtqqczze Sep 22, 2026
0b699f7
chore(cspell): add dependencies dictionary
xtqqczze Sep 22, 2026
b239223
stat: add %Qn and quote names as GNU 9.12 does
bbcmp Sep 23, 2026
c71e3f4
comm: defer order check until inputs differ
kairosci Sep 20, 2026
20431ab
comm: simplify files_differ tracking and add check-order test
kairosci Sep 23, 2026
462b806
numfmt: use an already existing locale in an err
Devel08 Sep 23, 2026
6415d29
chore(deps): update rust crate thiserror to v2.0.21
renovate[bot] Sep 23, 2026
f33ad87
build: relax windows-sys dependency version constraint
xtqqczze Sep 23, 2026
596cf45
factor: test the factorizations that used to come back incomplete
sylvestre Sep 21, 2026
0d86f14
od: simplify signature of two private functions
cakebaker Sep 24, 2026
6f45ef3
docs(AGENTS): improve issue tracking guidance
xtqqczze Sep 23, 2026
99bc407
ls: accept unambiguous time style prefixes
ddy314 Sep 20, 2026
fd74158
ls: check diagnostics for invalid time style prefixes
ddy314 Sep 21, 2026
554fd36
mv symlink exponential walk fix
mtvb Aug 30, 2026
648a0b0
symlink_metadata only on the non-directory branch
mtvb Aug 30, 2026
940b890
use entry.metadata for files
mtvb Aug 30, 2026
5b11bd7
nohup: make the substitute stdin unreadable like GNU
costajohnt Sep 17, 2026
63b03cc
nohup: gate the unreadable-stdin test on cfg(unix)
costajohnt Sep 18, 2026
2ead84f
build: migrate pre-commit hooks to prek
j178 Jun 4, 2026
0e511cc
dd: write conv=block padding as it goes, like GNU
bbcmp Sep 23, 2026
2e8cb26
CICD.yml: simplify test for SELinux stubs
oech3 Sep 23, 2026
fed2e9e
use imports instead of absoulte path when using strip_errno (#13892)
Devel08 Sep 24, 2026
eff529d
sort: report merge output flush errors
DePasqualeOrg Sep 22, 2026
e9d47d5
sort: attach merge write context outside the hot loop
DePasqualeOrg Sep 22, 2026
28cbe76
cksum: only report x86 hardware features on x86 targets
ChihweiLHBird Sep 22, 2026
f6e503a
dd: stop the copy-buffer RSS check from racing other tests
abendrothj Sep 22, 2026
2fc26b6
dd: move the copy-buffer RSS check to an integration test
abendrothj Sep 25, 2026
dc3da1d
who: test each record type against a utmp file, fix run-level "last="
anyingiit Sep 25, 2026
6964793
ls: simplify zeroed flags handling
RenjiSann Sep 21, 2026
840592d
chore(build): place dependencies in alphabetical order
xtqqczze Sep 25, 2026
8a656e0
ls: fix version sort of command-line arguments
pizzaburgare Sep 25, 2026
3811808
CICD.yml: keep Build/stable check names stable
sylvestre Sep 26, 2026
07a01e5
docs: remove emoji-headed sections
xtqqczze Sep 25, 2026
d477e80
tr: word the -ds missing-operand hint the way GNU does
Socialpranker Sep 26, 2026
6cadef8
shred: strip errno in couldn't rename error (#14880)
Devel08 Sep 26, 2026
02be815
date: end a -f line at a NUL byte like GNU (#14867)
anasbekheit Sep 26, 2026
3eba359
chore(deps): update dawidd6/action-download-artifact action to v25
renovate[bot] Sep 27, 2026
890553f
refactor: move Cargo.toml features before lints
xtqqczze Sep 26, 2026
7b89586
ls: run the WASI ".." regression tests in CI
DePasqualeOrg Sep 27, 2026
928c5f7
tests: remove dead target_os = "wasi" gates
DePasqualeOrg Sep 27, 2026
47a4c9f
ls: apply two-line --time-style format to old/recent files correctly
sylvestre Jun 7, 2026
627116b
ls: match on split time-style formats with clearer names
sylvestre Sep 26, 2026
ec3670a
readlink: keep going after an operand that cannot be read
luantaraschi Sep 21, 2026
bb5f9f3
readlink: print the verbose error inside the branch and share the tes…
luantaraschi Sep 25, 2026
7462663
ls: warn when QUOTING_STYLE is not valid UTF-8
r3wretrhy Sep 20, 2026
56c2a49
csplit: a negative offset may not cross the split start
Socialpranker Sep 6, 2026
eb28935
csplit: shorten the split-start comment to one line
Socialpranker Sep 15, 2026
533fb85
csplit: test a negative offset bound with --suppress-matched
Socialpranker Sep 26, 2026
bb72bab
numfmt: escape the format in --format error messages
dhruv-15-03 Sep 27, 2026
7e3ad1b
numfmt: fold format-escape error test into cases array
dhruv-15-03 Sep 27, 2026
fcb4305
tests: fix xattr build errors
xtqqczze Sep 19, 2026
1fde409
split: set FILE on the child in test_filter_with_env_var_set
ChihweiLHBird Sep 26, 2026
474b1cb
refactor(od): improve option display name parsing logic
xtqqczze Sep 24, 2026
566bb60
cspell: add missing words and fix two typos
sap1110 Sep 28, 2026
a60debe
chore(deps): update rust crate bigdecimal to v0.4.11
renovate[bot] Sep 28, 2026
5436388
paste: strip CR from CRLF input on Windows
Smicry Sep 27, 2026
744cd32
paste: only strip the CR when a line ending was read
Smicry Sep 28, 2026
6631d51
paste: keep the read loop shape when binding read
Smicry Sep 28, 2026
ff876a8
date: add a benchmark for localized month and weekday names
anasbekheit Sep 28, 2026
a1e8f36
build: work around blake3 failure on i586-unknown-redox
xtqqczze Sep 16, 2026
1d49385
fix: address build errors on redox
xtqqczze Sep 16, 2026
3689db2
ls: fix //DIRED-OPTIONS// printing the wrong quoting-style name
alter Sep 24, 2026
9c23fa0
shorten comments per review feedback
alter Sep 27, 2026
b568ec9
uucore: add a shared limit on followed symlinks, use it in du
sylvestre Sep 26, 2026
6525cc9
uucore: make "Too many levels of symbolic links" a common error string
sylvestre Sep 26, 2026
1c4a232
uucore: stop canonicalize() from looping forever on growing symlinks
sylvestre Sep 26, 2026
6f07ef7
uucore: cap is_symlink_loop() at SYMLINK_FOLLOW_LIMIT
sylvestre Sep 26, 2026
fef64dd
chore(deps): update dawidd6/action-download-artifact action to v26
renovate[bot] Sep 28, 2026
b1400b9
split: add round-robin benchmark
haydonryan Sep 28, 2026
741ae8c
tests/nohup: cover exit codes, nohup.out modes and help/version
GhostCoder6969 Sep 27, 2026
602fcb8
tests/nohup: address review feedback
GhostCoder6969 Sep 28, 2026
3d9b918
docs: clarify PR update guidelines in AGENTS.md
xtqqczze Sep 28, 2026
146d3ec
docs: improve wording in AGENTS.md
xtqqczze Sep 28, 2026
7e37160
remove unused show-utils.BAT
oech3 Sep 28, 2026
9666e35
refactor: fix format_push_string clippy lint
xtqqczze Sep 29, 2026
85da059
GNUmakefile: improve logic to extract UTILS
oech3 Sep 29, 2026
bc55b1b
uniq, split: stop reading an obsolete option after --
arbelonson-source Aug 30, 2026
e7a3ada
sort: split explicit buffer size between in-memory chunks
mattsu2020 Sep 28, 2026
5ca0609
sort: use explicit empty stdout assertion
mattsu2020 Sep 28, 2026
83ac76a
show-utils.sh: stop probing realpath with GNU-only options
Smicry Sep 28, 2026
e98b142
show-utils.sh: drop redundant cspell ignore lines
Smicry Sep 28, 2026
335ea31
show-utils.sh: fail fast instead of swallowing pipeline errors
Smicry Sep 28, 2026
4f2d4ae
show-utils.sh: drop the indirection around the cd
Smicry Sep 29, 2026
cb24f6a
show-utils.sh: restore the cargo id comment
Smicry Sep 29, 2026
da463e5
show-utils.sh: build the fallback list with cargo tree
Smicry Sep 29, 2026
fbf3581
uudoc: split the utility list on any whitespace
Smicry Sep 29, 2026
113f4e5
sum: continue with remaining files after a read error
sap1110 Sep 28, 2026
761d78e
cksum family: continue with remaining files after a read error
sap1110 Sep 28, 2026
a4f5fd0
Revert "GHA-delete-GNU-workflow-logs.sh: Support custom jq command an…
xtqqczze Sep 29, 2026
3c33b16
refactor: use `gh api --jq` instead of `jq`
xtqqczze Sep 29, 2026
a941941
Update dawidd6/action-download-artifact action to v27
renovate[bot] Sep 29, 2026
42d2c6d
split: avoid opening output for empty input
mattsu2020 Sep 30, 2026
ae8000d
basenc: buffer base16 encoded output
myunbin Aug 12, 2026
ff9eb0c
mv: use io::ErrorKind::CrossesDevices for rename fallback
wtcpython Sep 19, 2026
4accd8a
tr: do not expand [c*n] repeats character by character
TanbirRamim Sep 12, 2026
617cbb7
tr: keep set lengths exact beyond usize::MAX
TanbirRamim Sep 12, 2026
fa8a414
tests/tr: skip the huge repeat-count tests on the WASI runner
TanbirRamim Sep 12, 2026
142770c
tests/tr: rustfmt
TanbirRamim Sep 12, 2026
7d27af2
tr: reuse the run length helper and split the set2 padding test
TanbirRamim Sep 24, 2026
f2eb0f0
refactor(du): avoid unnecessary `HashSet::contains`
xtqqczze Sep 30, 2026
c7bb976
refactor(hostname): avoid unnecessary `HashSet::contains`
xtqqczze Sep 30, 2026
032ef4f
refactor(cp): avoid unnecessary `HashSet::contains`
xtqqczze Sep 30, 2026
93390fa
refactor: fix flat_map_option clippy lint
xtqqczze Sep 30, 2026
bd7e6f3
install: refuse a -t target that is not a directory with one source
abendrothj Oct 1, 2026
e379369
fold: parse the obsolete -WIDTH form the way GNU does (#14248)
arbelonson-source Oct 1, 2026
57b69f7
refactor: fix needless_borrows_for_generic_args clippy lint
xtqqczze Sep 28, 2026
705de63
clippy: disable assert_is_empty lint
cakebaker Oct 2, 2026
b464b9c
fold: ignore the stdin write error when -w - is rejected
TanbirRamim Oct 2, 2026
63aa2c8
*sum: suppress missing-file lines with --status (#14968)
SichenLiang Oct 2, 2026
91b8ba1
chore(deps): update rust crate dns-lookup to v4.0.2
renovate[bot] Oct 2, 2026
9c19671
uucore/fs: follow a symlinked parent directory in replace_link
costajohnt Sep 22, 2026
ad4f0c8
ln: skip the symlinked-parent test under the WASI sandbox
costajohnt Sep 24, 2026
a3366a7
ln: cover the hard link case of replacing in a symlinked directory
costajohnt Sep 25, 2026
4e98a65
uudoc: use SOURCE_DATE_EPOCH if set in build environment
kpcyrd Sep 30, 2026
b7eff3e
tr: prioritize bracketed constructs over char ranges to fix '[-*]' pa…
vpashaiev Oct 2, 2026
b908bca
test(tr): add test for '[-*]' in string1
vpashaiev Oct 2, 2026
788ee60
cut: document wasi ignore in test_read_error
Devel08 Sep 30, 2026
a95fd13
printf: preserve failure status after character constant warning
SichenLiang Sep 28, 2026
2f62e9b
test: rework expression parsing for GNU compatibility
anastygnome Sep 29, 2026
715d96e
refactor(uucore): avoid unwrap in system_time_to_sec
xtqqczze Sep 30, 2026
cc1f0db
install: handle existing special-file targets (#13645)
Hashim1999164 Oct 3, 2026
742501c
tail: avoid negate-with-overflow on a huge -c -N byte count (#14356)
SAY-5 Oct 3, 2026
394b36f
factor: add focused benchmarks (#12479)
naoNao89 Oct 3, 2026
8f11766
uucore: write each error and warning message with a single write
anasbekheit Sep 26, 2026
ade0e75
uucore: print diagnostics through a shared helper
anasbekheit Sep 27, 2026
39fff14
cp: keep copying a directory after skipping a file
DePasqualeOrg Sep 27, 2026
f6460bf
cp: feed a prompt answer only to the test case that prompts
DePasqualeOrg Sep 27, 2026
adb4408
chgrp: use map instead of match in parse_gid_and_uid()
Devel08 Jul 28, 2026
2872cf5
stat: truncate fractional pre-epoch timestamps toward zero
mattsu2020 Sep 30, 2026
629811b
stat: preserve timestamp sign in decimal formatter
mattsu2020 Sep 30, 2026
a0373e3
date: print the newly set date after -s
zooshee Sep 22, 2026
fbd294a
date: address review feedback on the --set echo
zooshee Sep 23, 2026
5ea7437
date: dedup the formatted write and drop the echo error cast
zooshee Sep 29, 2026
cf27392
date: drop the -s call-site comment
zooshee Sep 29, 2026
90f3f3a
uucore: reuse ICU formatters for localized date names
anasbekheit Sep 26, 2026
cbe4d73
uucore: format localized date names through a shared macro
anasbekheit Sep 27, 2026
5abea36
uucore: only honour the last glibc.cpu.hwcaps setting, case-sensitively
ChihweiLHBird Sep 24, 2026
3986ea2
stat: preserve non-UTF-8 filenames in error messages (#14755)
ddy314 Oct 3, 2026
631d91a
refactor: avoid `thiserror::Error` imports (#12037)
xtqqczze Oct 3, 2026
d7a1006
head: remove a fn used just twice
oech3 Oct 3, 2026
db91280
pipes.rs: remove unnecessary variable
oech3 Oct 3, 2026
66ad50b
fixup! refactor: avoid `thiserror::Error` imports
xtqqczze Oct 4, 2026
bc2c03f
dd: fix the conv=ascii case-conversion tables
SichenLiang Oct 3, 2026
cc17a66
dd: fix conv=ibm case table selection
SichenLiang Oct 3, 2026
cdf1dde
quoting: Drop `Quotes` to replace with `ShellQuotes` and `CQuotes`
RenjiSann Sep 22, 2026
5cfd08a
quoting: Fix QuotingStyle fmt::Display
RenjiSann Sep 28, 2026
96bf47d
quoting: Rework the `QuotingStyle` struct
RenjiSann Sep 25, 2026
2c840f5
quoting: Introduce Locale and CLocale QuotingStyles
RenjiSann Sep 24, 2026
d36c6d8
quoting: Improve documentation
RenjiSann Sep 25, 2026
d19dc59
ls: Use common QUOTING_STYLE parsing and remove duplicate code
RenjiSann Sep 24, 2026
eeb64b8
stat: Remove duplicated code
RenjiSann Sep 24, 2026
c592e0b
numfmt: Use common API for locale-aware quoting
RenjiSann Sep 28, 2026
74e9b64
quoting: Replace uses of locale_aware_escape_name with locale_aware_s…
RenjiSann Sep 25, 2026
a549c89
ls: properly release parent nodes in DFS (#11465)
Alonely0 Oct 4, 2026
6194337
mv: keep copying xattrs after one fails in a cross-device move
Cassian433 Oct 4, 2026
84ce99e
uucore: add XattrCopyResult alias and share the xattr copy loop; test cp
Cassian433 Oct 4, 2026
02dc5d0
tests/cp: skip the xattr failure test under the WASI runner
Cassian433 Oct 4, 2026
9eba641
ci: run GNU TTY tests before root tests (#15058)
ChrisDryden Oct 4, 2026
fa6f135
Bump libc from 0.2.189 to 0.2.190
cakebaker Oct 4, 2026
b2c4e66
Bump mio from 1.2.3 to 1.2.4
cakebaker Oct 4, 2026
0442177
chore(deps): upgrade rust crate utmp-classic to v0.2
xtqqczze Oct 4, 2026
4516840
build(deps): refactor procfs package configuration
xtqqczze Oct 4, 2026
65a9638
chore(deps): update rust crate utmp-classic to v0.2.1
renovate[bot] Oct 5, 2026
a0f86c9
tail: stop reading past the original end of file
wspperrimh Oct 4, 2026
c744dc5
cksum: default warning algorithm to CRC before first tagged line
thomas-btst Oct 4, 2026
1f1d87c
feat(uucore): support fs feature for redox
xtqqczze Sep 25, 2026
69e1b04
wsl2.yml: drop git call & bump to v7
oech3 Oct 4, 2026
78408ff
df: don't trigger automounts when reading the mount table
sylvestre Oct 5, 2026
4569f19
tests/install: write the strip script from a child process to avoid E…
sylvestre Oct 4, 2026
8cb0bbd
date: match GNU case flags on %c, %p, %P, %r and %Z
SichenLiang Oct 4, 2026
1c058fa
uucore: fix EOVERFLOW in safe traversal
varranvar Sep 23, 2026
a4252e1
Bump yoke-derive from 0.8.3 to 0.8.4
cakebaker Oct 5, 2026
b634cd9
refactor: update path checks to use as_os_str().is_empty()
xtqqczze Oct 5, 2026
78e1d65
tr: speed up deleting bytes
bbcmp Sep 27, 2026
7423c2e
tr: find the single byte to delete or replace once
bbcmp Sep 27, 2026
461857d
tr: write unchanged chunks as they are
bbcmp Sep 27, 2026
a94481a
tr: write to stdout without line buffering
bbcmp Sep 27, 2026
fe29b6f
uucore: print "Operation not permitted" for EPERM
r3wretrhy Oct 5, 2026
a8ac865
tail: read the first block of files sized a multiple of 64 KiB
abendrothj Oct 5, 2026
679e49e
cp: don't change the source's mode with --link
abendrothj Oct 5, 2026
e6ba50d
timeout: exit with 128+9 when the timeout signal is KILL
sylvestre Oct 4, 2026
9f3cf9c
ci: test with rustix libc backend on Linux
sylvestre Oct 4, 2026
678fefd
tests: cp: skip the --link mode test on Android
abendrothj Oct 5, 2026
77c2b7c
Revert "tail: stop reading past the original end of file"
xtqqczze Oct 5, 2026
753639d
CICD.yml: drop already fixed todo
oech3 Oct 5, 2026
4b9af98
refactor(mkdir): simplify create_dir
xtqqczze Oct 5, 2026
72fd464
CICD.yml: merge use_libc test to a matrix
oech3 Oct 6, 2026
43733a0
timeout: accept a command and arguments that are not valid UTF-8
SichenLiang Sep 30, 2026
6487c02
*sum: accept blanks around '=' when checking tagged lines
SichenLiang Sep 30, 2026
51e5682
[pre-commit.ci] pre-commit autoupdate
pre-commit-ci[bot] Oct 5, 2026
d41d8dd
uucore: allow localizing several utilities in one process
aakarshitv Oct 3, 2026
ff7b0a3
uucore: keep the current utility for names without strings
aakarshitv Oct 4, 2026
2e45eba
uucore: cache every leaked locale resource, swap localizer on success
aakarshitv Oct 4, 2026
8c069ba
uucore: look up the locales directory once in setup_localization
aakarshitv Oct 5, 2026
4dc1f46
tests: dd: ignore SIGXFSZ in the child instead of the test process
abendrothj Oct 5, 2026
27db053
style: reorder attributes and documentation comments
xtqqczze Sep 22, 2026
32c4649
perf: mark error handling functions as cold and non-inlineable
xtqqczze Sep 21, 2026
e37a870
numfmt: honor --round for an explicit --format precision of 0
Socialpranker Sep 5, 2026
4a4da4b
numfmt: test rounding that carries into the next suffix
Socialpranker Sep 26, 2026
628f921
chore(deps): update rust crate jiff to v0.2.38
renovate[bot] Oct 6, 2026
7bf28ff
chore(deps): update rust crate jiff-tzdb to v0.1.9
renovate[bot] Oct 6, 2026
30a9431
tee: replace the pipe a failed output used
abendrothj Oct 6, 2026
51f406a
date: fix wasi clock resolution and system datetime support
eduardomourar Sep 28, 2026
b04175e
uucore: build safe_traversal on AIX and Hurd
abendrothj Oct 6, 2026
4466068
cksum: report vmull support only when the CPU has PMULL
ChihweiLHBird Oct 7, 2026
da45f47
collator: remove comment about should_use_collation
lauchimoon Oct 7, 2026
c1fb65d
tests: test numeric sort with same number using -r flag and -nr flags
lauchimoon Oct 7, 2026
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
The table of contents is too big for display.
Diff view
Diff view
  •  
  •  
  •  
6 changes: 4 additions & 2 deletions .cargo/config.toml
Original file line number Diff line number Diff line change
Expand Up @@ -2,6 +2,8 @@
# like e.g. out-of-tree builds ( https://github.com/rust-lang/cargo/issues/2930 ).
# For this reason this file should be avoided as much as possible when there are alternatives.

[target.i586-unknown-redox]
linker = "i586-unknown-redox-gcc"
[target.x86_64-unknown-redox]
linker = "x86_64-unknown-redox-gcc"
[target.aarch64-unknown-linux-gnu]
Expand All @@ -12,5 +14,5 @@ rustflags = ["-C", "target-feature=+crt-static"]
rustflags = ["-C", "target-feature=+crt-static"]

[env]
# See feat_external_libstdbuf in src/uu/stdbuf/Cargo.toml
LIBSTDBUF_DIR = "/usr/local/libexec/coreutils"
# aws-lc is used only for checksum. Reduce binary size
AWS_LC_SYS_NO_JITTER_ENTROPY = "1"
4 changes: 2 additions & 2 deletions .devcontainer/Dockerfile
Original file line number Diff line number Diff line change
Expand Up @@ -32,5 +32,5 @@ RUN apt-get update \
python3-pip \
&& rm -rf /var/lib/apt/lists/*

# pre-commit
RUN pip3 install --break-system-packages pre-commit
# prek
RUN pip3 install --break-system-packages prek
2 changes: 1 addition & 1 deletion .devcontainer/devcontainer.json
Original file line number Diff line number Diff line change
Expand Up @@ -12,7 +12,7 @@
}
},
"onCreateCommand": {
"install pre-commit hooks": "pre-commit install",
"install prek hooks": "prek install",
"update permissions for gnu coreutils volume": "sudo chown vscode:vscode ${containerWorkspaceFolder}/../gnu"
},
"mounts": [
Expand Down
123 changes: 123 additions & 0 deletions .github/skills/code-review/SKILL.md
Original file line number Diff line number Diff line change
@@ -0,0 +1,123 @@
---
name: code-review
description: Review a pull request or diff in uutils/coreutils. Checks GPL/GNU provenance, GNU behavior compatibility, tests, error handling, style, performance and commit hygiene, and produces short, actionable, line-level comments.
---

# Code review for uutils/coreutils

uutils coreutils is a cross-platform reimplementation of the GNU coreutils in Rust.
Reviews are about keeping it *original*, *GNU-compatible*, *tested*, and *small*.

## How to write the review

- One-line, actionable comments anchored to the specific line. Say what to change,
not why it matters in three paragraphs.
- Push back on long-winded code, duplication, needless complexity, and changes
without tests.
- Don't restate the diff back to the author, don't praise, don't pad.
- Keep the tone that of a human reviewer: plain, direct, no generated-sounding prose.
- If nothing is wrong, say so in one line rather than inventing findings.

## The one rule that cannot be bent

uutils is **original** code. It cannot contain code derived from GNU or any other
GPL/LGPL implementation, and a PR must not even link to the GNU source.

Flag as blocking:

- Code, structure, comments, variable names or file layout that mirror GNU's.
- Tests ported verbatim from the GNU test suite — including the *fixtures*: input
strings, byte sequences, delimiters, field ranges and expected outputs. "It's only
a few chars" is not an exception; GNU tests are GPLv3+.
- Links or references to GNU source/test paths in code comments, commit messages or
the PR description.

Reading the GNU *manual* and man pages is fine, as are permissively-licensed
implementations (Apple file_cmds, OpenBSD). Be extra careful with AI-assisted
patches: assistants can reproduce GPL sources verbatim.

## Correctness and GNU compatibility

- Behavior, options, output and exit codes should match GNU, checked
with `LC_ALL=C` (GNU messages are localized; the GNU tests run under `C`).
Error messages can be different when better.
- A "GNU does X" claim in a PR should name the version it was checked
against. And it should be a recent version.
- GNU compatibility must not regress (`util/run-gnu-test.sh`,
`util/remaining-gnu-error.py`). A compatibility fix should mention the test it makes
pass.
- Watch security-sensitive output that scripts parse: character classes
(`[:graph:]`, `[:print:]`, `[:alnum:]`) in `tr`/`sort`/`cut`, real vs effective
uid/gid in `id`/`groups`/`stat`/`whoami`, `--preserve-root` canonicalization,
and flags that must work independently of each other (e.g. `ln --no-dereference`
without `--force`).

## Safety

- **TOCTOU**: reject check-then-act on paths (stat/exists/permission check followed by
a separate open/unlink/chmod). Prefer `openat()` / `O_NOFOLLOW` / fd-relative
operations, especially in `cp`, `mv`, `rm`, `chown`, `chmod`, `chgrp`, `install`.
- Recursive traversal must not follow symlinks out of the intended tree.
- Untrusted input: no unbounded allocations, no integer overflow, no path-traversal
foot-guns.

## Rust style

- No `panic!`, `.unwrap()`, `expect()` on fallible paths, or stray `println!`.
`unreachable!` needs a comment justifying why the branch can't happen.
- Avoid `std::process::exit` in reusable utility logic; return `Result` and use `uucore::error`. Allow process-level entry points and platform/tooling paths that must terminate explicitly.
- `OsStr`/`Path` for paths, not `String`/`str`.
- Keep `unsafe` minimal; prefer FFI, allow rare documented non-FFI exceptions, and require a `// SAFETY:` comment.
- `thiserror`, not `quick-error`; `rustix` preferred over `nix`.
- Strip `(os error N)` from messages (`strip_errno`).
- Descriptive names, no cryptic abbreviations. Avoid single-call wrapper functions
and gratuitous macros.
- Do not use `#[allow(...)]` to hide warnings without a documented, narrowly scoped reason; prefer `#[expect(..., reason = "...")]` for justified exceptions.
- Clippy runs with `all` + `cargo` + `pedantic` + `use_self`; CI fails on any warning.
Common ones worth catching in review: `redundant_closure_for_method_calls`,
`map_unwrap_or`, `needless_for_each`, `items_after_statements`, `unnecessary_wraps`,
`assigning_clones`, `needless_continue`, `unreadable_literal`.
- Avoid one-line functions
- If the code has a lot of platform specific modifications (#cfg), suggest to create a new platform specific file.

## Tests

- New or change of behavior comes with a test. Integration tests live in
`tests/by-util/test_<utility>.rs`; unit tests next to the code.
- Tests must be original (see the provenance rule above) and pick values that are
clearly distinct from GNU's fixtures.
- Use `.no_output()` rather than `.no_stdout().no_stderr()`.
- Anything that can't run under WASI needs `#[cfg_attr(wasi_runner, ignore)]`.
- If a GNU test was failing while the Rust suite passed, the PR should add a Rust
test so the gap can't reopen.

## Docs, help and i18n

- New options or user-visible behavior should update the relevant `--help`/docs sources and generated man page as applicable, plus the appropriate `en-US.ftl` (utility, `uucore`, or shared crate).
- User-facing strings go through `translate!` with a namespaced key, not hardcoded.

## Performance and size

- Compare runtime changes with representative benchmarks, and apply the repository's established binary-size threshold rather than a blanket 3% limit.
- Extra memory is acceptable when it buys real speed or correctness.
- Watch for per-item work added to hot loops: new allocations, an extra pass over the
data, newly non-inlined cross-crate calls, and — very common — error context
(`format!`, `translate!`, `to_string()`) built eagerly on the *success* path.
Error messages must be materialized only inside the `Err` arm.

## Scope, dependencies and commits

- Avoid code duplication at all costs. Look in uucore if the feature/function isn't there.
- Small and self-contained. Unrelated refactors, formatting-only churn, and
dependency/lockfile bumps belong in their own PR. Pure code moves get their own commit.
- When a PR mixes several logical changes, ask for a split and point the author at the
`gh stack` extension to keep the pieces reviewable in order.
- New dependencies must be discussed and justified: build time, binary size, audit
surface, license compatibility.
- Descriptive title prefixed with the utility: `ls: fix version sort order`, not
`Fix #1234`. Same for commits: `<program>: <description>`.

## Before approving

CI green (fmt, clippy `-D warnings`, tests) on Linux, macOS and Windows, with
`#[cfg(...)]` used for platform-specific code rather than breaking other targets.
Loading
Loading