342 Commits

Author SHA1 Message Date
Sylvestre Ledru efe6dc05f9 find: use GNU wording "unknown predicate" for unrecognized args
GNU find rejects an unrecognized predicate with
"find: unknown predicate '<arg>'", but we printed
"find: Unrecognized flag: '<arg>'". Match GNU so the
tests/find/refuse-noop GNU test (and others hitting the same path)
pass. Add an integration test covering -noop and ---noop.
2026-06-09 22:40:43 +02:00
weili 53980035af find: -printf: don't panic on a multibyte char after an octal escape
`\NNN` octal escapes were parsed by slicing a fixed 3 bytes off the
format string, which panics when fewer than 3 octal digits are followed
by a multibyte character (e.g. `-printf '\0€'`): the 3-byte slice lands
inside the multibyte char and trips a char-boundary assertion.

Parse the octal escape from the leading octal digits only (1 to 3, all
ASCII) and advance by their byte length. This also fixes `\1`..`\7`,
which previously fell through to the single-character escape table and
errored instead of being treated as octal, matching GNU find.
2026-06-09 22:23:39 +02:00
weili e2d84e98d5 locate: don't panic on a too-short --database file
`locate -d <file> <pattern>` panicked (slice index underflow, exit 101) when
the database file is exactly one byte: `check_db` consumes that byte with
`read_exact`, then `read_until(b'\0', ...)` hits EOF and appends nothing,
leaving `buf` empty. `&buf[..buf.len() - 1]` then underflows `buf.len() - 1`
to `usize::MAX` and slices out of bounds.

Strip the trailing nul with `strip_suffix(b"\0")` (falling back to the whole
buffer when `read_until` stopped at EOF without one) instead of slicing
`buf.len() - 1`. An empty buffer now yields `None` (unrecognized format), so
the too-short database is skipped like any other invalid one and locate exits
1 instead of crashing. Adds a regression test.
2026-06-09 22:23:23 +02:00
dependabot[bot] 865ab0991e build(deps): bump moonrepo/setup-rust from 0 to 1
Bumps [moonrepo/setup-rust](https://github.com/moonrepo/setup-rust) from 0 to 1.
- [Release notes](https://github.com/moonrepo/setup-rust/releases)
- [Changelog](https://github.com/moonrepo/setup-rust/blob/master/CHANGELOG.md)
- [Commits](https://github.com/moonrepo/setup-rust/compare/v0...v1)

---
updated-dependencies:
- dependency-name: moonrepo/setup-rust
  dependency-version: '1'
  dependency-type: direct:production
  update-type: version-update:semver-major
...

Signed-off-by: dependabot[bot] <support@github.com>
2026-06-09 09:35:56 +02:00
dependabot[bot] 8add685cc6 build(deps): bump codecov/codecov-action from 6 to 7
Bumps [codecov/codecov-action](https://github.com/codecov/codecov-action) from 6 to 7.
- [Release notes](https://github.com/codecov/codecov-action/releases)
- [Changelog](https://github.com/codecov/codecov-action/blob/main/CHANGELOG.md)
- [Commits](https://github.com/codecov/codecov-action/compare/v6...v7)

---
updated-dependencies:
- dependency-name: codecov/codecov-action
  dependency-version: '7'
  dependency-type: direct:production
  update-type: version-update:semver-major
...

Signed-off-by: dependabot[bot] <support@github.com>
2026-06-09 09:29:29 +02:00
dependabot[bot] c4afeab1bc build(deps): bump actions/checkout from 4 to 6
Bumps [actions/checkout](https://github.com/actions/checkout) from 4 to 6.
- [Release notes](https://github.com/actions/checkout/releases)
- [Changelog](https://github.com/actions/checkout/blob/main/CHANGELOG.md)
- [Commits](https://github.com/actions/checkout/compare/v4...v6)

---
updated-dependencies:
- dependency-name: actions/checkout
  dependency-version: '6'
  dependency-type: direct:production
  update-type: version-update:semver-major
...

Signed-off-by: dependabot[bot] <support@github.com>
2026-06-09 09:29:07 +02:00
Sylvestre Ledru 62deaf6e60 updatedb: clear error when the output database can't be created
Opening the output file with `?` surfaced a bare "No such file or
directory" with no indication of which file failed (easy to hit because the
default output path /usr/local/var/locatedb often doesn't exist).

Report it like GNU does, naming the path and the reason, e.g.
`cannot create '/usr/local/var/locatedb': No such file or directory`.
strip_errno() drops the trailing "(os error N)" noise.
2026-06-08 23:38:59 +02:00
Sylvestre Ledru 1be5541c74 find: avoid redundant stat per -fstype evaluation
The -fstype matcher called path.symlink_metadata() (a statx/lstat syscall)
on every entry before consulting its cache, just to obtain the device id.
With several -fstype clauses on the same expression (as updatedb builds:
nfs/NFS/proc), every file was stat'd once per clause.

Derive the device id from WalkEntry::metadata() instead, which is cached on
the entry in a OnceCell and shared across all matchers, so each file is
stat'd at most once regardless of how many -fstype clauses run.

On 'updatedb --localpaths=/usr' (~506k files) this drops statx calls from
~1.52M to ~506k and wall-clock from ~1.82s to ~1.32s, with byte-identical
output.
2026-06-08 23:38:59 +02:00
Sylvestre Ledru 5d0e7add34 lints: enable clippy all/cargo/pedantic groups, mirroring uutils/coreutils
Enable the broader clippy lint set used by uutils/coreutils (the all,
cargo and pedantic groups plus the use_self nursery lint), allowing the
noisy/low-value lints. The preceding commits fix the warnings these
groups surface so the tree stays warning-free.
2026-06-08 22:48:45 +02:00
Sylvestre Ledru 42f8a9af36 find: fix clippy::needless_for_each 2026-06-08 22:48:45 +02:00
Sylvestre Ledru 664a9c23e6 xargs: fix clippy::needless_continue 2026-06-08 22:48:45 +02:00
Sylvestre Ledru fd4bd6acfa find,xargs: fix clippy::items_after_statements 2026-06-08 22:48:45 +02:00
Sylvestre Ledru fa4f90befb find: fix clippy::unnecessary_wraps 2026-06-08 22:48:45 +02:00
Sylvestre Ledru 7deeee6fdf find: fix clippy::unreadable_literal 2026-06-08 22:48:45 +02:00
Sylvestre Ledru 51a50022c2 find: fix clippy::assigning_clones 2026-06-08 22:48:45 +02:00
Sylvestre Ledru 600f3af140 find: fix clippy::implicit_clone 2026-06-08 22:48:45 +02:00
Sylvestre Ledru a63482b8cf find: fix clippy::match_bool 2026-06-08 22:48:45 +02:00
Sylvestre Ledru 47796303ca find: fix clippy::single_match_else 2026-06-08 22:48:45 +02:00
Sylvestre Ledru baa6ce5d92 find: fix clippy::unnecessary_semicolon 2026-06-08 22:48:45 +02:00
Sylvestre Ledru 9f33c14fc9 find: fix clippy::map_unwrap_or 2026-06-08 22:48:45 +02:00
Sylvestre Ledru a80620c88f find: fix clippy::redundant_closure_for_method_calls 2026-06-08 22:48:45 +02:00
Sylvestre Ledru a2c75f94ca prepare release 0.9.0 (#714) 2026-06-08 22:44:43 +02:00
dependabot[bot] 44fbc59263 build(deps): bump rstest from 0.25.0 to 0.26.1 (#710)
Bumps [rstest](https://github.com/la10736/rstest) from 0.25.0 to 0.26.1.
- [Release notes](https://github.com/la10736/rstest/releases)
- [Changelog](https://github.com/la10736/rstest/blob/master/CHANGELOG.md)
- [Commits](https://github.com/la10736/rstest/compare/v0.25.0...v0.26.1)

---
updated-dependencies:
- dependency-name: rstest
  dependency-version: 0.26.1
  dependency-type: direct:production
  update-type: version-update:semver-minor
...

Signed-off-by: dependabot[bot] <support@github.com>
Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>
2026-06-08 08:40:05 +02:00
âśż Fleur de Blue fb9f8df047 fix: Handle write failures when printing --help/--version (#656) 2026-06-07 19:05:03 +02:00
Sylvestre Ledru 2044d1e31d make locate and updatedb work on Windows (#704)
locate and updatedb were Unix-only (gated behind cfg and stubbed out on
Windows). Make them cross-platform:

- locate: decode raw DB entries via a platform-specific bytes_to_path
  (verbatim bytes on Unix, lossy UTF-8 elsewhere), use Metadata::len()
  instead of the unix-only size(), and a cross-platform make_symlink in
  tests that skips gracefully when symlink creation is unprivileged.
- drop the #[cfg(unix)] gate on the locate module and the
  "unsupported on Windows" main stubs for locate/updatedb.
- db_tests: remove #[cfg(not(windows))] gates, write updatedb output to
  a tempdir instead of /dev/null, and add a full updatedb->locate
  roundtrip test that is platform-independent.
2026-06-07 11:52:08 +02:00
Jesse Rosenstock 0494ba1be4 find: Update --help text (#707)
Replace the "early alpha implementation" placeholder help text with a
proper organized reference grouped by category (global options,
operators, positional options, tests, and actions), with brief
descriptions for each entry. The old text was a flat list that hadn't
kept up with the implementation and still carried the "early alpha"
disclaimer.

Also fix a typo in a comment: "- newercm" -> "-newercm".
2026-06-07 11:51:45 +02:00
Sylvestre Ledru fc446aba0b ci: add CodSpeed benchmarks for updatedb and locate (#705)
Drive both utilities end-to-end through their real entry points.

- benches/updatedb_bench.rs: walks a generated tree (~8.5k paths) and
  writes a LOCATE02 database, measuring the walk + front-coding + write
  (full build and a -regex/-prune variant). Empty prune options keep the
  run deterministic regardless of temp_dir location.
- benches/locate_bench.rs: builds the database once via updatedb, then
  scans it in -c/count mode so database decoding and pattern matching
  dominate (no-match, substring, -b basename, -i ignore-case, -r regex).
  Unix-only, matching the locate module's cfg.

The existing CodSpeed workflow picks these up via cargo codspeed build/run.
2026-06-06 11:00:04 +02:00
Sylvestre Ledru 33703b79d8 ci: add CodSpeed benchmarks for find and xargs (#703)
Introduce criterion benchmarks (via codspeed-criterion-compat) that drive
find and xargs end-to-end through their real entry points, plus a CodSpeed
GitHub Actions workflow to track performance on pushes and PRs.

- benches/find_bench.rs: walks a generated directory tree exercising the
  matcher tree (-name/-iname/-regex/-size/-type, grouping, -prune, -printf).
  Output is sent to a sink so the directory walk and matching dominate.
- benches/xargs_bench.rs: feeds a corpus via -a and runs 'true' so xargs'
  own argument reading/splitting/batching dominates (whitespace, NUL, -n, -s).
- .github/workflows/codspeed.yml: mirrors the uutils/grep setup.
2026-06-06 10:37:56 +02:00
Jeremy Smart c5ff1bbb6b implement locate and updatedb (#536)
---------

Co-authored-by: Sylvestre Ledru <sylvestre@debian.org>
2026-06-06 10:10:44 +02:00
Sylvestre Ledru e7c34ab12f test: properly exercise {} in -exec utility name (#702)
The test from #647 used {} only in an argument, so it passed on
unpatched code. Rewrite it to make the matched entry the
testing-commandline binary and pass {} as the utility name, so the
placeholder must resolve to the entry's path and execute.
2026-06-06 09:35:34 +02:00
Matt Van Horn 1a77a83432 fix: replace {} placeholder in -exec utility name (#647)
* fix: replace {} placeholder in -exec utility name

The {} placeholder was only replaced in arguments to -exec, not in the
utility_name position itself. Running `find -exec {} \;` passed the
literal string "{}" to Command::new, causing "No such file or directory".

Extracted arg parsing into a shared `parse_arg` helper and changed the
`executable` field from String to the existing Arg enum so it undergoes
the same {} replacement as other arguments.

Fixes #614

* test: add test for {} placeholder in utility name

Verify that SingleExecMatcher resolves {} in arguments
when the executable is a known path. Covers the case
where -exec receives {} in argument positions.

---------

Co-authored-by: Matt Van Horn <455140+mvanhorn@users.noreply.github.com>
2026-06-06 08:50:24 +02:00
Sylvestre Ledru a65160f724 find: match GNU prompt format for -ok/-okdir (#699)
The -ok/-okdir prompt rendered the full substituted command, but GNU
find prints a fixed, abbreviated form: "< executable ... pathname > ? "
(literal ..., a space before ?, and always the full entry path even for
-okdir). Match it exactly and update the prompt-format test.

Verified byte-for-byte against GNU findutils 4.10.0.
2026-06-05 13:18:13 +08:00
dependabot[bot] 435f00d491 build(deps): bump softprops/action-gh-release from 2 to 3
Bumps [softprops/action-gh-release](https://github.com/softprops/action-gh-release) from 2 to 3.
- [Release notes](https://github.com/softprops/action-gh-release/releases)
- [Changelog](https://github.com/softprops/action-gh-release/blob/master/CHANGELOG.md)
- [Commits](https://github.com/softprops/action-gh-release/compare/v2...v3)

---
updated-dependencies:
- dependency-name: softprops/action-gh-release
  dependency-version: '3'
  dependency-type: direct:production
  update-type: version-update:semver-major
...

Signed-off-by: dependabot[bot] <support@github.com>
2026-06-05 07:10:08 +02:00
dependabot[bot] db941e7fba build(deps): bump chrono from 0.4.44 to 0.4.45
Bumps [chrono](https://github.com/chronotope/chrono) from 0.4.44 to 0.4.45.
- [Release notes](https://github.com/chronotope/chrono/releases)
- [Changelog](https://github.com/chronotope/chrono/blob/main/CHANGELOG.md)
- [Commits](https://github.com/chronotope/chrono/compare/v0.4.44...v0.4.45)

---
updated-dependencies:
- dependency-name: chrono
  dependency-version: 0.4.45
  dependency-type: direct:production
  update-type: version-update:semver-patch
...

Signed-off-by: dependabot[bot] <support@github.com>
2026-06-05 07:08:07 +02:00
Sylvestre Ledru 5bef01f72f github action: publish the release as draft first (#530) 2026-06-04 22:51:02 +02:00
oech3 575bf0aef9 Publish binary from main instead of discarding (#618) 2026-06-04 22:34:18 +02:00
vip892766gma b07b27d13f chore: improve findutils maintenance path (#687) 2026-06-04 21:28:34 +02:00
Sylvestre Ledru 9a1e379a9d fix: avoid panic on -fprintf with missing arguments (#698)
Fixes #696
2026-06-05 02:41:58 +08:00
Jesse Rosenstock 5269e233a6 find: implement -ok and -okdir (#650)
-ok is like -exec ... ; but prompts the user on stderr before each
invocation and only runs the command if the response is affirmative
(starts with 'y' or 'Y').  -okdir is the corresponding -execdir variant.
Only the ';' terminator is accepted: POSIX does not define -ok ... + and
GNU find rejects it.

Response source: GNU find reads from /dev/tty so that the user's answer
always comes from the real terminal even when stdin is occupied (e.g.
`find -files0-from - -ok rm {} \;` reads paths from stdin, so responses
cannot also come from there).  /dev/tty is the POSIX name for a
process's controlling terminal and exists on all Unix-like systems.  We
open /dev/tty only when stdin is itself a terminal
(std::io::stdin().is_terminal() == true).  When stdin is a pipe or file,
we read from stdin directly — matching BSD find and making scripted use
(and integration tests via pipe_in()) work naturally without any special
environment variable.  On Windows, or when /dev/tty cannot be opened, we
likewise fall back to stdin.

Implementation: rather than a separate OkMatcher that duplicated
SingleExecMatcher's fields, constructor, and exec logic, the interactive
prompt is folded into SingleExecMatcher behind an `interactive: bool`
field.  `SingleExecMatcher::new_interactive()` constructs the -ok/-okdir
variant; `matches()` adds a guarded block that builds a GNU-find-style
prompt ("< executable arg... >? ") and calls `matcher_io.confirm()`
before executing.  If the user declines, the expression is false and the
command is not run.  This keeps the arg-parsing, path resolution,
current_dir logic, and error handling in one place so bug fixes apply to
both -exec and -ok.

Dependencies::confirm() trait method: abstracts prompt+read so matchers
remain testable without a real terminal; FakeDependencies uses a
VecDeque of preset responses.

Tests:
- Unit tests (exec_unit_tests.rs): confirmed executes command, declined
  skips command and returns false, confirmed but command fails returns
  false, -okdir runs in parent dir
- Parser unit tests (matchers/mod.rs): missing-arg errors, missing
  semicolon, correct parse, confirm/decline via FakeDependencies
- Integration tests (test_find.rs): pipe_in() makes stdin a pipe so
  is_terminal() returns false and responses are read from the pipe;
  "y"/"Y"/"yes"/" y" run command, "n" and empty response skip command,
  -okdir runs in parent dir, prompt format verified, missing-semicolon
  error

Closes https://github.com/uutils/findutils/issues/8.
2026-06-04 20:31:54 +02:00
dependabot[bot] fd876a7a8a build(deps): bump ctor from 1.0.6 to 1.0.7
Bumps [ctor](https://github.com/mmastrac/linktime) from 1.0.6 to 1.0.7.
- [Release notes](https://github.com/mmastrac/linktime/releases)
- [Changelog](https://github.com/mmastrac/linktime/blob/master/CHANGELOG.md)
- [Commits](https://github.com/mmastrac/linktime/compare/ctor-1.0.6...ctor-1.0.7)

---
updated-dependencies:
- dependency-name: ctor
  dependency-version: 1.0.7
  dependency-type: direct:production
  update-type: version-update:semver-patch
...

Signed-off-by: dependabot[bot] <support@github.com>
2026-06-01 08:32:49 +02:00
dependabot[bot] cffa946ffa build(deps): bump uucore from 0.8.0 to 0.9.0
Bumps [uucore](https://github.com/uutils/coreutils) from 0.8.0 to 0.9.0.
- [Release notes](https://github.com/uutils/coreutils/releases)
- [Commits](https://github.com/uutils/coreutils/compare/0.8.0...0.9.0)

---
updated-dependencies:
- dependency-name: uucore
  dependency-version: 0.9.0
  dependency-type: direct:production
  update-type: version-update:semver-minor
...

Signed-off-by: dependabot[bot] <support@github.com>
2026-06-01 08:32:25 +02:00
dependabot[bot] 032d1c1fc0 build(deps): bump uutests from 0.8.0 to 0.9.0
Bumps [uutests](https://github.com/uutils/coreutils) from 0.8.0 to 0.9.0.
- [Release notes](https://github.com/uutils/coreutils/releases)
- [Commits](https://github.com/uutils/coreutils/compare/0.8.0...0.9.0)

---
updated-dependencies:
- dependency-name: uutests
  dependency-version: 0.9.0
  dependency-type: direct:production
  update-type: version-update:semver-minor
...

Signed-off-by: dependabot[bot] <support@github.com>
2026-06-01 08:26:02 +02:00
Sylvestre Ledru fe9e872710 CONTRIBUTING: link to the review guidelines website 2026-05-30 10:00:13 +02:00
dependabot[bot] c944cf7d1f build(deps): bump ctor from 1.0.5 to 1.0.6
Bumps [ctor](https://github.com/mmastrac/linktime) from 1.0.5 to 1.0.6.
- [Release notes](https://github.com/mmastrac/linktime/releases)
- [Changelog](https://github.com/mmastrac/linktime/blob/master/CHANGELOG.md)
- [Commits](https://github.com/mmastrac/linktime/compare/ctor-1.0.5...ctor-1.0.6)

---
updated-dependencies:
- dependency-name: ctor
  dependency-version: 1.0.6
  dependency-type: direct:production
  update-type: version-update:semver-patch
...

Signed-off-by: dependabot[bot] <support@github.com>
2026-05-18 07:05:55 +02:00
Daniel Hofstetter 079330c28c ci: deactivate pre-commit hooks (#679) 2026-05-13 11:20:44 +02:00
dependabot[bot] ebd2d3c959 build(deps): bump filetime from 0.2.28 to 0.2.29
Bumps [filetime](https://github.com/alexcrichton/filetime) from 0.2.28 to 0.2.29.
- [Commits](https://github.com/alexcrichton/filetime/compare/0.2.28...0.2.29)

---
updated-dependencies:
- dependency-name: filetime
  dependency-version: 0.2.29
  dependency-type: direct:production
  update-type: version-update:semver-patch
...

Signed-off-by: dependabot[bot] <support@github.com>
2026-05-13 07:11:12 +02:00
dependabot[bot] b7c59b27a7 build(deps): bump nix from 0.31.2 to 0.31.3
Bumps [nix](https://github.com/nix-rust/nix) from 0.31.2 to 0.31.3.
- [Changelog](https://github.com/nix-rust/nix/blob/master/CHANGELOG.md)
- [Commits](https://github.com/nix-rust/nix/compare/v0.31.2...v0.31.3)

---
updated-dependencies:
- dependency-name: nix
  dependency-version: 0.31.3
  dependency-type: direct:production
  update-type: version-update:semver-patch
...

Signed-off-by: dependabot[bot] <support@github.com>
2026-05-12 10:28:26 +02:00
dependabot[bot] 35e3925968 build(deps): bump filetime from 0.2.27 to 0.2.28
Bumps [filetime](https://github.com/alexcrichton/filetime) from 0.2.27 to 0.2.28.
- [Commits](https://github.com/alexcrichton/filetime/compare/0.2.27...0.2.28)

---
updated-dependencies:
- dependency-name: filetime
  dependency-version: 0.2.28
  dependency-type: direct:production
  update-type: version-update:semver-patch
...

Signed-off-by: dependabot[bot] <support@github.com>
2026-05-12 10:28:09 +02:00
dependabot[bot] 6e1922b508 build(deps): bump ctor from 1.0.1 to 1.0.5
Bumps [ctor](https://github.com/mmastrac/linktime) from 1.0.1 to 1.0.5.
- [Release notes](https://github.com/mmastrac/linktime/releases)
- [Changelog](https://github.com/mmastrac/linktime/blob/master/CHANGELOG.md)
- [Commits](https://github.com/mmastrac/linktime/compare/ctor-1.0.1...ctor-1.0.5)

---
updated-dependencies:
- dependency-name: ctor
  dependency-version: 1.0.5
  dependency-type: direct:production
  update-type: version-update:semver-patch
...

Signed-off-by: dependabot[bot] <support@github.com>
2026-05-12 10:21:53 +02:00
oech3 8664976e40 CONTRIBUTING.md: drop outdated hint (#678) 2026-05-08 14:54:02 +02:00
Daniel Hofstetter 29c644fc72 tests/common/mod.rs: adapt to change in ctor 2026-05-07 10:47:04 +02:00
Daniel Hofstetter 68d6d805f6 Bump ctor from 0.12.0 to 1.0.1 2026-05-07 10:47:04 +02:00
xtqqczze fafd557eed actions: add security audit workflow 2026-05-05 16:40:58 +02:00
Kevin Burke 69a20eb6df xargs: accept hyphenated -I and -E values
GNU xargs treats the arguments to -I, -E, and -e as values even when
they begin with a hyphen. Clap was parsing those strings as options
instead, so invocations like 'xargs -I -_' failed before xargs could
process input.

Allow hyphen-leading values for those options and add regression
coverage for replacement and EOF markers that start with '-'.
2026-05-05 16:26:23 +02:00
xtqqczze cb5005b489 Add SECURITY.md
Copied from https://github.com/uutils/coreutils/blob/5e974797bd8050c2d425a706670254ad0323404d/SECURITY.md

Co-authored-by: Sylvestre Ledru <sylvestre@debian.org>
Co-authored-by: Daniel Hofstetter <daniel.hofstetter@42dh.com>
2026-05-05 09:02:14 +02:00
dependabot[bot] 3b23c9a41e build(deps): bump ctor from 0.11.1 to 0.12.0
Bumps [ctor](https://github.com/mmastrac/rust-ctor) from 0.11.1 to 0.12.0.
- [Changelog](https://github.com/mmastrac/linktime/blob/master/CHANGELOG.md)
- [Commits](https://github.com/mmastrac/rust-ctor/commits)

---
updated-dependencies:
- dependency-name: ctor
  dependency-version: 0.12.0
  dependency-type: direct:production
  update-type: version-update:semver-minor
...

Signed-off-by: dependabot[bot] <support@github.com>
2026-05-01 07:30:06 +02:00
dependabot[bot] b374033f88 build(deps): bump ctor from 0.10.1 to 0.11.1
Bumps [ctor](https://github.com/mmastrac/rust-ctor) from 0.10.1 to 0.11.1.
- [Changelog](https://github.com/mmastrac/rust-ctor/blob/master/CHANGELOG.md)
- [Commits](https://github.com/mmastrac/rust-ctor/commits)

---
updated-dependencies:
- dependency-name: ctor
  dependency-version: 0.11.1
  dependency-type: direct:production
  update-type: version-update:semver-minor
...

Signed-off-by: dependabot[bot] <support@github.com>
2026-04-29 07:22:30 +02:00
dependabot[bot] 2332e46830 build(deps): bump onig from 6.5.2 to 6.5.3
Bumps [onig](https://github.com/iwillspeak/rust-onig) from 6.5.2 to 6.5.3.
- [Release notes](https://github.com/iwillspeak/rust-onig/releases)
- [Changelog](https://github.com/rust-onig/rust-onig/blob/main/CHANGELOG.md)
- [Commits](https://github.com/iwillspeak/rust-onig/compare/v6.5.2...v6.5.3)

---
updated-dependencies:
- dependency-name: onig
  dependency-version: 6.5.3
  dependency-type: direct:production
  update-type: version-update:semver-patch
...

Signed-off-by: dependabot[bot] <support@github.com>
2026-04-28 07:02:19 +02:00
dependabot[bot] 8c32bdd514 build(deps): bump onig from 6.5.1 to 6.5.2
Bumps [onig](https://github.com/iwillspeak/rust-onig) from 6.5.1 to 6.5.2.
- [Release notes](https://github.com/iwillspeak/rust-onig/releases)
- [Changelog](https://github.com/rust-onig/rust-onig/blob/main/CHANGELOG.md)
- [Commits](https://github.com/iwillspeak/rust-onig/compare/V6.5.1...v6.5.2)

---
updated-dependencies:
- dependency-name: onig
  dependency-version: 6.5.2
  dependency-type: direct:production
  update-type: version-update:semver-patch
...

Signed-off-by: dependabot[bot] <support@github.com>
2026-04-27 07:14:28 +02:00
dependabot[bot] b851e75a45 build(deps): bump ctor from 0.10.0 to 0.10.1
Bumps [ctor](https://github.com/mmastrac/rust-ctor) from 0.10.0 to 0.10.1.
- [Changelog](https://github.com/mmastrac/rust-ctor/blob/master/CHANGELOG.md)
- [Commits](https://github.com/mmastrac/rust-ctor/commits)

---
updated-dependencies:
- dependency-name: ctor
  dependency-version: 0.10.1
  dependency-type: direct:production
  update-type: version-update:semver-patch
...

Signed-off-by: dependabot[bot] <support@github.com>
2026-04-23 07:12:04 +02:00
dependabot[bot] c2bdb92268 build(deps): bump clap from 4.6.0 to 4.6.1
Bumps [clap](https://github.com/clap-rs/clap) from 4.6.0 to 4.6.1.
- [Release notes](https://github.com/clap-rs/clap/releases)
- [Changelog](https://github.com/clap-rs/clap/blob/master/CHANGELOG.md)
- [Commits](https://github.com/clap-rs/clap/compare/clap_complete-v4.6.0...clap_complete-v4.6.1)

---
updated-dependencies:
- dependency-name: clap
  dependency-version: 4.6.1
  dependency-type: direct:production
  update-type: version-update:semver-patch
...

Signed-off-by: dependabot[bot] <support@github.com>
2026-04-21 07:08:22 +02:00
dependabot[bot] c885a0a8f0 build(deps): bump rand from 0.10.0 to 0.10.1
Bumps [rand](https://github.com/rust-random/rand) from 0.10.0 to 0.10.1.
- [Release notes](https://github.com/rust-random/rand/releases)
- [Changelog](https://github.com/rust-random/rand/blob/master/CHANGELOG.md)
- [Commits](https://github.com/rust-random/rand/compare/0.10.0...0.10.1)

---
updated-dependencies:
- dependency-name: rand
  dependency-version: 0.10.1
  dependency-type: indirect
...

Signed-off-by: dependabot[bot] <support@github.com>
2026-04-14 07:05:43 +02:00
dependabot[bot] 165b2fa1b6 build(deps): bump ctor from 0.9.1 to 0.10.0
Bumps [ctor](https://github.com/mmastrac/rust-ctor) from 0.9.1 to 0.10.0.
- [Commits](https://github.com/mmastrac/rust-ctor/commits)

---
updated-dependencies:
- dependency-name: ctor
  dependency-version: 0.10.0
  dependency-type: direct:production
  update-type: version-update:semver-minor
...

Signed-off-by: dependabot[bot] <support@github.com>
2026-04-13 07:09:35 +02:00
xtqqczze 134cfe9658 chore(deps): update rust crates 2026-04-11 07:59:41 +02:00
dependabot[bot] 114b1bc247 build(deps): bump actions/github-script from 8 to 9
Bumps [actions/github-script](https://github.com/actions/github-script) from 8 to 9.
- [Release notes](https://github.com/actions/github-script/releases)
- [Commits](https://github.com/actions/github-script/compare/v8...v9)

---
updated-dependencies:
- dependency-name: actions/github-script
  dependency-version: '9'
  dependency-type: direct:production
  update-type: version-update:semver-major
...

Signed-off-by: dependabot[bot] <support@github.com>
2026-04-10 07:02:13 +02:00
dependabot[bot] 113c307672 build(deps): bump ctor from 0.8.0 to 0.9.1
Bumps [ctor](https://github.com/mmastrac/rust-ctor) from 0.8.0 to 0.9.1.
- [Commits](https://github.com/mmastrac/rust-ctor/commits)

---
updated-dependencies:
- dependency-name: ctor
  dependency-version: 0.9.1
  dependency-type: direct:production
  update-type: version-update:semver-minor
...

Signed-off-by: dependabot[bot] <support@github.com>
2026-04-10 07:00:25 +02:00
oech3 3fb0a98ad7 build-gnu.sh: Support any profile 2026-04-08 16:40:31 +02:00
Daniel Hofstetter 7824335c47 Remove getrandom 0.3.1 (#655) 2026-04-08 16:34:37 +02:00
dependabot[bot] 1266b7ffd1 build(deps): bump uucore from 0.7.0 to 0.8.0
Bumps [uucore](https://github.com/uutils/coreutils) from 0.7.0 to 0.8.0.
- [Release notes](https://github.com/uutils/coreutils/releases)
- [Commits](https://github.com/uutils/coreutils/compare/0.7.0...0.8.0)

---
updated-dependencies:
- dependency-name: uucore
  dependency-version: 0.8.0
  dependency-type: direct:production
  update-type: version-update:semver-minor
...

Signed-off-by: dependabot[bot] <support@github.com>
2026-04-07 09:50:29 +02:00
dependabot[bot] 3b05fc9ea6 build(deps): bump uutests from 0.7.0 to 0.8.0
Bumps [uutests](https://github.com/uutils/coreutils) from 0.7.0 to 0.8.0.
- [Release notes](https://github.com/uutils/coreutils/releases)
- [Commits](https://github.com/uutils/coreutils/compare/0.7.0...0.8.0)

---
updated-dependencies:
- dependency-name: uutests
  dependency-version: 0.8.0
  dependency-type: direct:production
  update-type: version-update:semver-minor
...

Signed-off-by: dependabot[bot] <support@github.com>
2026-04-07 07:08:40 +02:00
dependabot[bot] 5610042e7d build(deps): bump ctor from 0.6.3 to 0.8.0
Bumps [ctor](https://github.com/mmastrac/rust-ctor) from 0.6.3 to 0.8.0.
- [Commits](https://github.com/mmastrac/rust-ctor/commits)

---
updated-dependencies:
- dependency-name: ctor
  dependency-version: 0.8.0
  dependency-type: direct:production
  update-type: version-update:semver-minor
...

Signed-off-by: dependabot[bot] <support@github.com>
2026-04-06 07:05:39 +02:00
Jesse Rosenstock 41778576e2 tests: port to uutests (#645)
Replaces assert_cmd/predicates/pretty_assertions/serial_test with uutests and
ctor in dev-dependencies.

Closes https://github.com/uutils/findutils/issues/537.

- Port tests/find_cmd_tests.rs → tests/test_find.rs (uutests API)
- Port tests/xargs_tests.rs → tests/test_xargs.rs (uutests API)
- Centralize UUTESTS_BINARY_PATH init via #[ctor::ctor] in tests/common/mod.rs

Implementation notes:
- Use TestScenario::cmd(BINARY_PATH) rather than ucmd(): find/xargs are
  dedicated binaries, not multi-call, so ucmd() would prepend the utility name
  as a spurious first argument
- Set CWD to CARGO_MANIFEST_DIR in find's ucmd() so relative test_data/ paths
  resolve correctly regardless of where cargo runs
- delete_on_dot_dir sets the child process CWD via UCommand::current_dir()
  instead of mutating the process-wide CWD, removing the need for serial_test
  and all #[serial(working_dir)] attributes

Also fixes find_samefile, find_fprinter, and find_fprintf, which were writing
temporary files directly into test_data/. They now use isolated temp
directories, eliminating a source of test pollution when running in parallel.
2026-04-03 10:21:47 +02:00
oech3 4b44193bd0 ci: simplify 2026-03-28 08:29:52 +01:00
dependabot[bot] 015727fa96 build(deps): bump codecov/codecov-action from 5 to 6
Bumps [codecov/codecov-action](https://github.com/codecov/codecov-action) from 5 to 6.
- [Release notes](https://github.com/codecov/codecov-action/releases)
- [Changelog](https://github.com/codecov/codecov-action/blob/main/CHANGELOG.md)
- [Commits](https://github.com/codecov/codecov-action/compare/v5...v6)

---
updated-dependencies:
- dependency-name: codecov/codecov-action
  dependency-version: '6'
  dependency-type: direct:production
  update-type: version-update:semver-major
...

Signed-off-by: dependabot[bot] <support@github.com>
2026-03-27 07:14:02 +01:00
dependabot[bot] 87ce037bc5 build(deps): bump clap from 4.5.60 to 4.6.0
Bumps [clap](https://github.com/clap-rs/clap) from 4.5.60 to 4.6.0.
- [Release notes](https://github.com/clap-rs/clap/releases)
- [Changelog](https://github.com/clap-rs/clap/blob/master/CHANGELOG.md)
- [Commits](https://github.com/clap-rs/clap/compare/clap_complete-v4.5.60...clap_complete-v4.6.0)

---
updated-dependencies:
- dependency-name: clap
  dependency-version: 4.6.0
  dependency-type: direct:production
  update-type: version-update:semver-minor
...

Signed-off-by: dependabot[bot] <support@github.com>
2026-03-13 07:39:32 +01:00
dependabot[bot] 159d4a5336 build(deps): bump tempfile from 3.26.0 to 3.27.0
Bumps [tempfile](https://github.com/Stebalien/tempfile) from 3.26.0 to 3.27.0.
- [Changelog](https://github.com/Stebalien/tempfile/blob/master/CHANGELOG.md)
- [Commits](https://github.com/Stebalien/tempfile/compare/v3.26.0...v3.27.0)

---
updated-dependencies:
- dependency-name: tempfile
  dependency-version: 3.27.0
  dependency-type: direct:production
  update-type: version-update:semver-minor
...

Signed-off-by: dependabot[bot] <support@github.com>
2026-03-11 07:11:31 +01:00
dependabot[bot] 6a2d9a4208 build(deps): bump assert_cmd from 2.1.2 to 2.2.0
Bumps [assert_cmd](https://github.com/assert-rs/assert_cmd) from 2.1.2 to 2.2.0.
- [Changelog](https://github.com/assert-rs/assert_cmd/blob/master/CHANGELOG.md)
- [Commits](https://github.com/assert-rs/assert_cmd/compare/v2.1.2...v2.2.0)

---
updated-dependencies:
- dependency-name: assert_cmd
  dependency-version: 2.2.0
  dependency-type: direct:production
  update-type: version-update:semver-minor
...

Signed-off-by: dependabot[bot] <support@github.com>
2026-03-11 07:11:13 +01:00
oech3 7aa105c082 Use preinstalled rust & CARGO_INCREMENTAL=0 2026-03-10 10:16:40 +01:00
dependabot[bot] 86ed5ff862 build(deps): bump uucore from 0.6.0 to 0.7.0
Bumps [uucore](https://github.com/uutils/coreutils) from 0.6.0 to 0.7.0.
- [Release notes](https://github.com/uutils/coreutils/releases)
- [Commits](https://github.com/uutils/coreutils/compare/0.6.0...0.7.0)

---
updated-dependencies:
- dependency-name: uucore
  dependency-version: 0.7.0
  dependency-type: direct:production
  update-type: version-update:semver-minor
...

Signed-off-by: dependabot[bot] <support@github.com>
2026-03-10 07:08:16 +01:00
dependabot[bot] 2dd31d0292 build(deps): bump tempfile from 3.25.0 to 3.26.0
Bumps [tempfile](https://github.com/Stebalien/tempfile) from 3.25.0 to 3.26.0.
- [Changelog](https://github.com/Stebalien/tempfile/blob/master/CHANGELOG.md)
- [Commits](https://github.com/Stebalien/tempfile/commits/v3.26.0)

---
updated-dependencies:
- dependency-name: tempfile
  dependency-version: 3.26.0
  dependency-type: direct:production
  update-type: version-update:semver-minor
...

Signed-off-by: dependabot[bot] <support@github.com>
2026-03-03 07:22:59 +01:00
dependabot[bot] 2db10b67fe build(deps): bump nix from 0.31.1 to 0.31.2
Bumps [nix](https://github.com/nix-rust/nix) from 0.31.1 to 0.31.2.
- [Changelog](https://github.com/nix-rust/nix/blob/master/CHANGELOG.md)
- [Commits](https://github.com/nix-rust/nix/compare/v0.31.1...v0.31.2)

---
updated-dependencies:
- dependency-name: nix
  dependency-version: 0.31.2
  dependency-type: direct:production
  update-type: version-update:semver-patch
...

Signed-off-by: dependabot[bot] <support@github.com>
2026-03-02 07:17:34 +01:00
dependabot[bot] d624f1d140 build(deps): bump actions/upload-artifact from 6 to 7
Bumps [actions/upload-artifact](https://github.com/actions/upload-artifact) from 6 to 7.
- [Release notes](https://github.com/actions/upload-artifact/releases)
- [Commits](https://github.com/actions/upload-artifact/compare/v6...v7)

---
updated-dependencies:
- dependency-name: actions/upload-artifact
  dependency-version: '7'
  dependency-type: direct:production
  update-type: version-update:semver-major
...

Signed-off-by: dependabot[bot] <support@github.com>
2026-02-27 06:55:45 +01:00
dependabot[bot] 15e3654295 build(deps): bump actions/download-artifact from 7 to 8
Bumps [actions/download-artifact](https://github.com/actions/download-artifact) from 7 to 8.
- [Release notes](https://github.com/actions/download-artifact/releases)
- [Commits](https://github.com/actions/download-artifact/compare/v7...v8)

---
updated-dependencies:
- dependency-name: actions/download-artifact
  dependency-version: '8'
  dependency-type: direct:production
  update-type: version-update:semver-major
...

Signed-off-by: dependabot[bot] <support@github.com>
2026-02-27 06:55:01 +01:00
dependabot[bot] 2749b4a1c9 build(deps): bump chrono from 0.4.43 to 0.4.44
Bumps [chrono](https://github.com/chronotope/chrono) from 0.4.43 to 0.4.44.
- [Release notes](https://github.com/chronotope/chrono/releases)
- [Changelog](https://github.com/chronotope/chrono/blob/main/CHANGELOG.md)
- [Commits](https://github.com/chronotope/chrono/compare/v0.4.43...v0.4.44)

---
updated-dependencies:
- dependency-name: chrono
  dependency-version: 0.4.44
  dependency-type: direct:production
  update-type: version-update:semver-patch
...

Signed-off-by: dependabot[bot] <support@github.com>
2026-02-24 07:11:54 +01:00
dependabot[bot] 4e1044cf60 build(deps): bump serial_test from 3.3.1 to 3.4.0
Bumps [serial_test](https://github.com/palfrey/serial_test) from 3.3.1 to 3.4.0.
- [Release notes](https://github.com/palfrey/serial_test/releases)
- [Commits](https://github.com/palfrey/serial_test/compare/v3.3.1...v3.4.0)

---
updated-dependencies:
- dependency-name: serial_test
  dependency-version: 3.4.0
  dependency-type: direct:production
  update-type: version-update:semver-minor
...

Signed-off-by: dependabot[bot] <support@github.com>
2026-02-23 07:15:36 +01:00
dependabot[bot] 48a60c16bc build(deps): bump clap from 4.5.59 to 4.5.60
Bumps [clap](https://github.com/clap-rs/clap) from 4.5.59 to 4.5.60.
- [Release notes](https://github.com/clap-rs/clap/releases)
- [Changelog](https://github.com/clap-rs/clap/blob/master/CHANGELOG.md)
- [Commits](https://github.com/clap-rs/clap/compare/clap_complete-v4.5.59...clap_complete-v4.5.60)

---
updated-dependencies:
- dependency-name: clap
  dependency-version: 4.5.60
  dependency-type: direct:production
  update-type: version-update:semver-patch
...

Signed-off-by: dependabot[bot] <support@github.com>
2026-02-20 07:12:55 +01:00
dependabot[bot] 540736bde0 build(deps): bump clap from 4.5.58 to 4.5.59
Bumps [clap](https://github.com/clap-rs/clap) from 4.5.58 to 4.5.59.
- [Release notes](https://github.com/clap-rs/clap/releases)
- [Changelog](https://github.com/clap-rs/clap/blob/master/CHANGELOG.md)
- [Commits](https://github.com/clap-rs/clap/compare/clap_complete-v4.5.58...clap_complete-v4.5.59)

---
updated-dependencies:
- dependency-name: clap
  dependency-version: 4.5.59
  dependency-type: direct:production
  update-type: version-update:semver-patch
...

Signed-off-by: dependabot[bot] <support@github.com>
2026-02-17 07:04:48 +01:00
dependabot[bot] 512f3e3ef6 build(deps): bump clap from 4.5.57 to 4.5.58
Bumps [clap](https://github.com/clap-rs/clap) from 4.5.57 to 4.5.58.
- [Release notes](https://github.com/clap-rs/clap/releases)
- [Changelog](https://github.com/clap-rs/clap/blob/master/CHANGELOG.md)
- [Commits](https://github.com/clap-rs/clap/compare/clap_complete-v4.5.57...clap_complete-v4.5.58)

---
updated-dependencies:
- dependency-name: clap
  dependency-version: 4.5.58
  dependency-type: direct:production
  update-type: version-update:semver-patch
...

Signed-off-by: dependabot[bot] <support@github.com>
2026-02-12 07:01:42 +01:00
dependabot[bot] 0a64b7b468 build(deps): bump predicates from 3.1.3 to 3.1.4
Bumps [predicates](https://github.com/assert-rs/predicates-rs) from 3.1.3 to 3.1.4.
- [Changelog](https://github.com/assert-rs/predicates-rs/blob/master/CHANGELOG.md)
- [Commits](https://github.com/assert-rs/predicates-rs/compare/v3.1.3...v3.1.4)

---
updated-dependencies:
- dependency-name: predicates
  dependency-version: 3.1.4
  dependency-type: direct:production
  update-type: version-update:semver-patch
...

Signed-off-by: dependabot[bot] <support@github.com>
2026-02-12 07:00:51 +01:00
dependabot[bot] 9fc3febef2 build(deps): bump tempfile from 3.24.0 to 3.25.0
Bumps [tempfile](https://github.com/Stebalien/tempfile) from 3.24.0 to 3.25.0.
- [Changelog](https://github.com/Stebalien/tempfile/blob/master/CHANGELOG.md)
- [Commits](https://github.com/Stebalien/tempfile/commits)

---
updated-dependencies:
- dependency-name: tempfile
  dependency-version: 3.25.0
  dependency-type: direct:production
  update-type: version-update:semver-minor
...

Signed-off-by: dependabot[bot] <support@github.com>
2026-02-10 07:01:42 +01:00
Daniel Hofstetter 0d7dfb7551 Merge pull request #624 from uutils/dependabot/cargo/regex-1.12.3
build(deps): bump regex from 1.12.2 to 1.12.3
2026-02-04 07:23:34 +01:00
dependabot[bot] 3cd80fdb3b build(deps): bump regex from 1.12.2 to 1.12.3
Bumps [regex](https://github.com/rust-lang/regex) from 1.12.2 to 1.12.3.
- [Release notes](https://github.com/rust-lang/regex/releases)
- [Changelog](https://github.com/rust-lang/regex/blob/master/CHANGELOG.md)
- [Commits](https://github.com/rust-lang/regex/compare/1.12.2...1.12.3)

---
updated-dependencies:
- dependency-name: regex
  dependency-version: 1.12.3
  dependency-type: direct:production
  update-type: version-update:semver-patch
...

Signed-off-by: dependabot[bot] <support@github.com>
2026-02-04 06:07:57 +00:00
Daniel Hofstetter 85de2b90dd Merge pull request #625 from uutils/dependabot/cargo/clap-4.5.57
build(deps): bump clap from 4.5.56 to 4.5.57
2026-02-04 07:07:22 +01:00
Daniel Hofstetter 348af55f78 Merge pull request #626 from uutils/dependabot/cargo/uucore-0.6.0
build(deps): bump uucore from 0.5.0 to 0.6.0
2026-02-04 07:06:49 +01:00
dependabot[bot] af24303f0a build(deps): bump uucore from 0.5.0 to 0.6.0
Bumps [uucore](https://github.com/uutils/coreutils) from 0.5.0 to 0.6.0.
- [Release notes](https://github.com/uutils/coreutils/releases)
- [Commits](https://github.com/uutils/coreutils/compare/0.5.0...0.6.0)

---
updated-dependencies:
- dependency-name: uucore
  dependency-version: 0.6.0
  dependency-type: direct:production
  update-type: version-update:semver-minor
...

Signed-off-by: dependabot[bot] <support@github.com>
2026-02-04 03:32:50 +00:00
dependabot[bot] 8af7934123 build(deps): bump clap from 4.5.56 to 4.5.57
Bumps [clap](https://github.com/clap-rs/clap) from 4.5.56 to 4.5.57.
- [Release notes](https://github.com/clap-rs/clap/releases)
- [Changelog](https://github.com/clap-rs/clap/blob/master/CHANGELOG.md)
- [Commits](https://github.com/clap-rs/clap/compare/clap_complete-v4.5.56...clap_complete-v4.5.57)

---
updated-dependencies:
- dependency-name: clap
  dependency-version: 4.5.57
  dependency-type: direct:production
  update-type: version-update:semver-patch
...

Signed-off-by: dependabot[bot] <support@github.com>
2026-02-04 03:32:41 +00:00
Daniel Hofstetter 60715e0443 Merge pull request #623 from uutils/dependabot/cargo/clap-4.5.56
build(deps): bump clap from 4.5.55 to 4.5.56
2026-01-30 07:55:04 +01:00
dependabot[bot] 8c45028239 build(deps): bump clap from 4.5.55 to 4.5.56
Bumps [clap](https://github.com/clap-rs/clap) from 4.5.55 to 4.5.56.
- [Release notes](https://github.com/clap-rs/clap/releases)
- [Changelog](https://github.com/clap-rs/clap/blob/master/CHANGELOG.md)
- [Commits](https://github.com/clap-rs/clap/compare/clap_complete-v4.5.55...clap_complete-v4.5.56)

---
updated-dependencies:
- dependency-name: clap
  dependency-version: 4.5.56
  dependency-type: direct:production
  update-type: version-update:semver-patch
...

Signed-off-by: dependabot[bot] <support@github.com>
2026-01-30 03:32:32 +00:00
Daniel Hofstetter 995c92e426 Merge pull request #621 from uutils/dependabot/cargo/clap-4.5.55
build(deps): bump clap from 4.5.54 to 4.5.55
2026-01-28 07:00:14 +01:00
dependabot[bot] 30ea794e4a build(deps): bump clap from 4.5.54 to 4.5.55
Bumps [clap](https://github.com/clap-rs/clap) from 4.5.54 to 4.5.55.
- [Release notes](https://github.com/clap-rs/clap/releases)
- [Changelog](https://github.com/clap-rs/clap/blob/master/CHANGELOG.md)
- [Commits](https://github.com/clap-rs/clap/compare/clap_complete-v4.5.54...clap_complete-v4.5.55)

---
updated-dependencies:
- dependency-name: clap
  dependency-version: 4.5.55
  dependency-type: direct:production
  update-type: version-update:semver-patch
...

Signed-off-by: dependabot[bot] <support@github.com>
2026-01-28 03:32:28 +00:00
Daniel Hofstetter 89a5327e5e Merge pull request #616 from uutils/dependabot/cargo/nix-0.31.1
build(deps): bump nix from 0.30.1 to 0.31.1
2026-01-23 08:46:44 +01:00
dependabot[bot] 449a199d53 build(deps): bump nix from 0.30.1 to 0.31.1
Bumps [nix](https://github.com/nix-rust/nix) from 0.30.1 to 0.31.1.
- [Changelog](https://github.com/nix-rust/nix/blob/master/CHANGELOG.md)
- [Commits](https://github.com/nix-rust/nix/compare/v0.30.1...v0.31.1)

---
updated-dependencies:
- dependency-name: nix
  dependency-version: 0.31.1
  dependency-type: direct:production
  update-type: version-update:semver-minor
...

Signed-off-by: dependabot[bot] <support@github.com>
2026-01-23 03:32:34 +00:00
Daniel Hofstetter 4b5f5ce95f Merge pull request #615 from uutils/dependabot/cargo/filetime-0.2.27
build(deps): bump filetime from 0.2.26 to 0.2.27
2026-01-19 07:31:05 +01:00
dependabot[bot] 641a450c2b build(deps): bump filetime from 0.2.26 to 0.2.27
Bumps [filetime](https://github.com/alexcrichton/filetime) from 0.2.26 to 0.2.27.
- [Commits](https://github.com/alexcrichton/filetime/compare/0.2.26...0.2.27)

---
updated-dependencies:
- dependency-name: filetime
  dependency-version: 0.2.27
  dependency-type: direct:production
  update-type: version-update:semver-patch
...

Signed-off-by: dependabot[bot] <support@github.com>
2026-01-19 03:49:49 +00:00
Daniel Hofstetter 245623ecc6 Merge pull request #612 from uutils/dependabot/cargo/chrono-0.4.43
build(deps): bump chrono from 0.4.42 to 0.4.43
2026-01-15 07:07:56 +01:00
dependabot[bot] d79c0a9f22 build(deps): bump chrono from 0.4.42 to 0.4.43
Bumps [chrono](https://github.com/chronotope/chrono) from 0.4.42 to 0.4.43.
- [Release notes](https://github.com/chronotope/chrono/releases)
- [Changelog](https://github.com/chronotope/chrono/blob/main/CHANGELOG.md)
- [Commits](https://github.com/chronotope/chrono/compare/v0.4.42...v0.4.43)

---
updated-dependencies:
- dependency-name: chrono
  dependency-version: 0.4.43
  dependency-type: direct:production
  update-type: version-update:semver-patch
...

Signed-off-by: dependabot[bot] <support@github.com>
2026-01-15 03:32:34 +00:00
Daniel Hofstetter af48c151fe Merge pull request #611 from uutils/dependabot/cargo/assert_cmd-2.1.2
build(deps): bump assert_cmd from 2.1.1 to 2.1.2
2026-01-12 07:03:12 +01:00
dependabot[bot] c11e663a57 build(deps): bump assert_cmd from 2.1.1 to 2.1.2
Bumps [assert_cmd](https://github.com/assert-rs/assert_cmd) from 2.1.1 to 2.1.2.
- [Changelog](https://github.com/assert-rs/assert_cmd/blob/master/CHANGELOG.md)
- [Commits](https://github.com/assert-rs/assert_cmd/compare/v2.1.1...v2.1.2)

---
updated-dependencies:
- dependency-name: assert_cmd
  dependency-version: 2.1.2
  dependency-type: direct:production
  update-type: version-update:semver-patch
...

Signed-off-by: dependabot[bot] <support@github.com>
2026-01-12 03:37:24 +00:00
Daniel Hofstetter d7ff7cd5da Merge pull request #609 from uutils/dependabot/cargo/clap-4.5.54
build(deps): bump clap from 4.5.53 to 4.5.54
2026-01-05 07:17:08 +01:00
Daniel Hofstetter d5f70aefe7 Merge pull request #610 from uutils/dependabot/cargo/serial_test-3.3.1
build(deps): bump serial_test from 3.2.0 to 3.3.1
2026-01-05 07:16:40 +01:00
dependabot[bot] e1f794cc4b build(deps): bump serial_test from 3.2.0 to 3.3.1
Bumps [serial_test](https://github.com/palfrey/serial_test) from 3.2.0 to 3.3.1.
- [Release notes](https://github.com/palfrey/serial_test/releases)
- [Commits](https://github.com/palfrey/serial_test/compare/v3.2.0...v3.3.1)

---
updated-dependencies:
- dependency-name: serial_test
  dependency-version: 3.3.1
  dependency-type: direct:production
  update-type: version-update:semver-minor
...

Signed-off-by: dependabot[bot] <support@github.com>
2026-01-05 03:02:00 +00:00
dependabot[bot] fab2ec3a78 build(deps): bump clap from 4.5.53 to 4.5.54
Bumps [clap](https://github.com/clap-rs/clap) from 4.5.53 to 4.5.54.
- [Release notes](https://github.com/clap-rs/clap/releases)
- [Changelog](https://github.com/clap-rs/clap/blob/master/CHANGELOG.md)
- [Commits](https://github.com/clap-rs/clap/compare/clap_complete-v4.5.53...clap_complete-v4.5.54)

---
updated-dependencies:
- dependency-name: clap
  dependency-version: 4.5.54
  dependency-type: direct:production
  update-type: version-update:semver-patch
...

Signed-off-by: dependabot[bot] <support@github.com>
2026-01-05 03:01:54 +00:00
Daniel Hofstetter e8b12b905b Merge pull request #608 from uutils/dependabot/cargo/tempfile-3.24.0
build(deps): bump tempfile from 3.23.0 to 3.24.0
2025-12-24 07:12:23 +01:00
dependabot[bot] 29b915f3aa build(deps): bump tempfile from 3.23.0 to 3.24.0
Bumps [tempfile](https://github.com/Stebalien/tempfile) from 3.23.0 to 3.24.0.
- [Changelog](https://github.com/Stebalien/tempfile/blob/master/CHANGELOG.md)
- [Commits](https://github.com/Stebalien/tempfile/compare/v3.23.0...v3.24.0)

---
updated-dependencies:
- dependency-name: tempfile
  dependency-version: 3.24.0
  dependency-type: direct:production
  update-type: version-update:semver-minor
...

Signed-off-by: dependabot[bot] <support@github.com>
2025-12-24 03:01:41 +00:00
Daniel Hofstetter 699b26ec52 Merge pull request #605 from uutils/dependabot/cargo/uucore-0.5.0
build(deps): bump uucore from 0.4.0 to 0.5.0
2025-12-15 07:16:34 +01:00
Daniel Hofstetter 584fcb1d3a Merge pull request #606 from uutils/dependabot/github_actions/actions/upload-artifact-6
build(deps): bump actions/upload-artifact from 5 to 6
2025-12-15 07:15:23 +01:00
Daniel Hofstetter 38f50c4609 Merge pull request #607 from uutils/dependabot/github_actions/actions/download-artifact-7
build(deps): bump actions/download-artifact from 6 to 7
2025-12-15 07:14:39 +01:00
dependabot[bot] 2968efc09b build(deps): bump actions/download-artifact from 6 to 7
Bumps [actions/download-artifact](https://github.com/actions/download-artifact) from 6 to 7.
- [Release notes](https://github.com/actions/download-artifact/releases)
- [Commits](https://github.com/actions/download-artifact/compare/v6...v7)

---
updated-dependencies:
- dependency-name: actions/download-artifact
  dependency-version: '7'
  dependency-type: direct:production
  update-type: version-update:semver-major
...

Signed-off-by: dependabot[bot] <support@github.com>
2025-12-15 03:03:50 +00:00
dependabot[bot] 0b08fbb194 build(deps): bump actions/upload-artifact from 5 to 6
Bumps [actions/upload-artifact](https://github.com/actions/upload-artifact) from 5 to 6.
- [Release notes](https://github.com/actions/upload-artifact/releases)
- [Commits](https://github.com/actions/upload-artifact/compare/v5...v6)

---
updated-dependencies:
- dependency-name: actions/upload-artifact
  dependency-version: '6'
  dependency-type: direct:production
  update-type: version-update:semver-major
...

Signed-off-by: dependabot[bot] <support@github.com>
2025-12-15 03:03:47 +00:00
dependabot[bot] ef7686aaae build(deps): bump uucore from 0.4.0 to 0.5.0
Bumps [uucore](https://github.com/uutils/coreutils) from 0.4.0 to 0.5.0.
- [Release notes](https://github.com/uutils/coreutils/releases)
- [Commits](https://github.com/uutils/coreutils/compare/0.4.0...0.5.0)

---
updated-dependencies:
- dependency-name: uucore
  dependency-version: 0.5.0
  dependency-type: direct:production
  update-type: version-update:semver-minor
...

Signed-off-by: dependabot[bot] <support@github.com>
2025-12-15 03:01:51 +00:00
Daniel Hofstetter 111eec1b6c find: fix warnings from filter_next lint (#604) 2025-12-11 19:41:23 -03:00
Brian Pane c5c5a16700 Merge pull request #603 from brian-pane/eof
Ignore -E/-e flag when a delimiter is specified
2025-12-07 11:54:27 +01:00
Sylvestre Ledru 1a65b7634a Merge pull request #596 from cakebaker/bump_uucore
Bump `uucore` from `0.2.2` to `0.4.0`
2025-12-06 16:58:51 +01:00
Daniel Hofstetter 801aa1e33a Cargo.toml: sort deps alphabetically 2025-12-06 16:54:24 +01:00
Daniel Hofstetter bcff0450a5 Bump uucore from 0.2.2 to 0.4.0 2025-12-06 16:54:24 +01:00
Daniel Hofstetter 9c6134c8fd Merge pull request #598 from cakebaker/bump_terminal_size
Bump `terminal_size` from `0.4.0` to `0.4.3`
2025-12-06 16:43:00 +01:00
Daniel Hofstetter 67cd89b241 Merge pull request #601 from brian-pane/xargs
xargs: add support for -l option
2025-11-21 11:06:53 +01:00
Daniel Hofstetter 84a04737a4 Merge pull request #602 from uutils/dependabot/github_actions/actions/checkout-6
build(deps): bump actions/checkout from 5 to 6
2025-11-21 06:56:54 +01:00
dependabot[bot] f6c41e60d0 build(deps): bump actions/checkout from 5 to 6
Bumps [actions/checkout](https://github.com/actions/checkout) from 5 to 6.
- [Release notes](https://github.com/actions/checkout/releases)
- [Changelog](https://github.com/actions/checkout/blob/main/CHANGELOG.md)
- [Commits](https://github.com/actions/checkout/compare/v5...v6)

---
updated-dependencies:
- dependency-name: actions/checkout
  dependency-version: '6'
  dependency-type: direct:production
  update-type: version-update:semver-major
...

Signed-off-by: dependabot[bot] <support@github.com>
2025-11-21 03:03:43 +00:00
Brian Pane dfc460a627 xargs: add support for -l option 2025-11-20 20:11:47 +00:00
Daniel Hofstetter 11ff89b3a9 Merge pull request #600 from uutils/dependabot/cargo/clap-4.5.53
build(deps): bump clap from 4.5.52 to 4.5.53
2025-11-20 07:06:27 +01:00
dependabot[bot] 86d4798e72 build(deps): bump clap from 4.5.52 to 4.5.53
Bumps [clap](https://github.com/clap-rs/clap) from 4.5.52 to 4.5.53.
- [Release notes](https://github.com/clap-rs/clap/releases)
- [Changelog](https://github.com/clap-rs/clap/blob/master/CHANGELOG.md)
- [Commits](https://github.com/clap-rs/clap/compare/clap_complete-v4.5.52...clap_complete-v4.5.53)

---
updated-dependencies:
- dependency-name: clap
  dependency-version: 4.5.53
  dependency-type: direct:production
  update-type: version-update:semver-patch
...

Signed-off-by: dependabot[bot] <support@github.com>
2025-11-20 03:02:03 +00:00
Daniel Hofstetter 0827863e2f Bump terminal_size from 0.4.0 to 0.4.3 2025-11-19 10:17:31 +01:00
Sylvestre Ledru 5cb79e3868 Merge pull request #597 from cakebaker/bump_yanked_deps
Bump yanked dependencies
2025-11-19 09:45:52 +01:00
Brian Pane 573b9b7788 xargs: add support for -E option (#593)
* xargs: add support for -E option

* Additional test coverage for xargs -E

* Simplify EofArgumentReader and test its error pass-through
2025-11-19 09:33:14 +01:00
Daniel Hofstetter 04b6d75b8d Bump futures-util from (yanked) 0.3.21 to 0.3.31 2025-11-18 16:55:18 +01:00
Daniel Hofstetter 883e082f2b Bump scc from (yanked) 2.1.0 to 2.4.0 2025-11-18 16:53:13 +01:00
Daniel Hofstetter 783fc302a3 Merge pull request #595 from uutils/dependabot/cargo/clap-4.5.52
build(deps): bump clap from 4.5.51 to 4.5.52
2025-11-18 07:06:28 +01:00
dependabot[bot] b79326b61d build(deps): bump clap from 4.5.51 to 4.5.52
Bumps [clap](https://github.com/clap-rs/clap) from 4.5.51 to 4.5.52.
- [Release notes](https://github.com/clap-rs/clap/releases)
- [Changelog](https://github.com/clap-rs/clap/blob/master/CHANGELOG.md)
- [Commits](https://github.com/clap-rs/clap/compare/clap_complete-v4.5.51...clap_complete-v4.5.52)

---
updated-dependencies:
- dependency-name: clap
  dependency-version: 4.5.52
  dependency-type: direct:production
  update-type: version-update:semver-patch
...

Signed-off-by: dependabot[bot] <support@github.com>
2025-11-18 03:02:09 +00:00
Sylvestre Ledru 0f7bf4d56e Merge pull request #591 from cakebaker/clippy_fix_derivable_impls
clippy: fix warning from `derivable_impls` lint
2025-10-31 09:53:53 +01:00
Daniel Hofstetter df2d84dd69 clippy: fix warning from derivable_impls lint 2025-10-31 09:38:20 +01:00
Sylvestre Ledru 8164791335 Merge pull request #587 from cakebaker/bump_assert_cmd
Bump `assert_cmd` & fix deprecation warnings
2025-10-30 07:59:48 +01:00
Daniel Hofstetter 120ff526f7 tests: replace deprecated Command::cargo_bin
with cargo_bin_cmd!
2025-10-30 07:47:16 +01:00
Daniel Hofstetter 44c980d8e2 Bump assert_cmd from 2.0.17 to 2.1.1 2025-10-30 07:47:16 +01:00
Daniel Hofstetter f988293df3 Merge pull request #589 from uutils/dependabot/cargo/clap-4.5.51
build(deps): bump clap from 4.5.50 to 4.5.51
2025-10-30 07:09:09 +01:00
dependabot[bot] 672b615c5e build(deps): bump clap from 4.5.50 to 4.5.51
Bumps [clap](https://github.com/clap-rs/clap) from 4.5.50 to 4.5.51.
- [Release notes](https://github.com/clap-rs/clap/releases)
- [Changelog](https://github.com/clap-rs/clap/blob/master/CHANGELOG.md)
- [Commits](https://github.com/clap-rs/clap/compare/clap_complete-v4.5.50...clap_complete-v4.5.51)

---
updated-dependencies:
- dependency-name: clap
  dependency-version: 4.5.51
  dependency-type: direct:production
  update-type: version-update:semver-patch
...

Signed-off-by: dependabot[bot] <support@github.com>
2025-10-30 03:01:49 +00:00
Daniel Hofstetter 7231673877 Merge pull request #586 from oech3/release-small
Cargo.toml: Rename dist profile and add release-small
2025-10-29 11:40:13 +01:00
E 3e1f37042f Cargo.toml: Rename dist profile and add release-small 2025-10-29 14:48:10 +09:00
Daniel Hofstetter f73e575a87 Merge pull request #583 from uutils/dependabot/github_actions/actions/download-artifact-6
build(deps): bump actions/download-artifact from 5 to 6
2025-10-27 07:07:34 +01:00
Daniel Hofstetter f08cb15f0a Merge pull request #584 from uutils/dependabot/github_actions/actions/upload-artifact-5
build(deps): bump actions/upload-artifact from 4 to 5
2025-10-27 07:06:20 +01:00
dependabot[bot] 37bc574e2b build(deps): bump actions/upload-artifact from 4 to 5
Bumps [actions/upload-artifact](https://github.com/actions/upload-artifact) from 4 to 5.
- [Release notes](https://github.com/actions/upload-artifact/releases)
- [Commits](https://github.com/actions/upload-artifact/compare/v4...v5)

---
updated-dependencies:
- dependency-name: actions/upload-artifact
  dependency-version: '5'
  dependency-type: direct:production
  update-type: version-update:semver-major
...

Signed-off-by: dependabot[bot] <support@github.com>
2025-10-27 03:12:44 +00:00
dependabot[bot] fad0c3abd1 build(deps): bump actions/download-artifact from 5 to 6
Bumps [actions/download-artifact](https://github.com/actions/download-artifact) from 5 to 6.
- [Release notes](https://github.com/actions/download-artifact/releases)
- [Commits](https://github.com/actions/download-artifact/compare/v5...v6)

---
updated-dependencies:
- dependency-name: actions/download-artifact
  dependency-version: '6'
  dependency-type: direct:production
  update-type: version-update:semver-major
...

Signed-off-by: dependabot[bot] <support@github.com>
2025-10-27 03:12:41 +00:00
Daniel Hofstetter df6c345af6 Merge pull request #581 from uutils/dependabot/cargo/clap-4.5.50
build(deps): bump clap from 4.5.49 to 4.5.50
2025-10-21 07:11:29 +02:00
dependabot[bot] 31fe166847 build(deps): bump clap from 4.5.49 to 4.5.50
Bumps [clap](https://github.com/clap-rs/clap) from 4.5.49 to 4.5.50.
- [Release notes](https://github.com/clap-rs/clap/releases)
- [Changelog](https://github.com/clap-rs/clap/blob/master/CHANGELOG.md)
- [Commits](https://github.com/clap-rs/clap/compare/clap_complete-v4.5.49...clap_complete-v4.5.50)

---
updated-dependencies:
- dependency-name: clap
  dependency-version: 4.5.50
  dependency-type: direct:production
  update-type: version-update:semver-patch
...

Signed-off-by: dependabot[bot] <support@github.com>
2025-10-21 03:01:58 +00:00
Daniel Hofstetter 62290d1ac4 Merge pull request #579 from uutils/dependabot/cargo/clap-4.5.49
build(deps): bump clap from 4.5.48 to 4.5.49
2025-10-14 07:10:47 +02:00
Daniel Hofstetter 3790412fd6 Merge pull request #580 from uutils/dependabot/cargo/regex-1.12.2
build(deps): bump regex from 1.12.1 to 1.12.2
2025-10-14 07:10:21 +02:00
dependabot[bot] 5388d4df35 build(deps): bump regex from 1.12.1 to 1.12.2
Bumps [regex](https://github.com/rust-lang/regex) from 1.12.1 to 1.12.2.
- [Release notes](https://github.com/rust-lang/regex/releases)
- [Changelog](https://github.com/rust-lang/regex/blob/master/CHANGELOG.md)
- [Commits](https://github.com/rust-lang/regex/compare/1.12.1...1.12.2)

---
updated-dependencies:
- dependency-name: regex
  dependency-version: 1.12.2
  dependency-type: direct:production
  update-type: version-update:semver-patch
...

Signed-off-by: dependabot[bot] <support@github.com>
2025-10-14 03:02:13 +00:00
dependabot[bot] 53a59316db build(deps): bump clap from 4.5.48 to 4.5.49
Bumps [clap](https://github.com/clap-rs/clap) from 4.5.48 to 4.5.49.
- [Release notes](https://github.com/clap-rs/clap/releases)
- [Changelog](https://github.com/clap-rs/clap/blob/master/CHANGELOG.md)
- [Commits](https://github.com/clap-rs/clap/compare/clap_complete-v4.5.48...clap_complete-v4.5.49)

---
updated-dependencies:
- dependency-name: clap
  dependency-version: 4.5.49
  dependency-type: direct:production
  update-type: version-update:semver-patch
...

Signed-off-by: dependabot[bot] <support@github.com>
2025-10-14 03:02:07 +00:00
Daniel Hofstetter 69b276a1b1 Merge pull request #577 from uutils/dependabot/cargo/regex-1.12.1
build(deps): bump regex from 1.11.3 to 1.12.1
2025-10-13 07:07:29 +02:00
dependabot[bot] ebaabe7222 build(deps): bump regex from 1.11.3 to 1.12.1
Bumps [regex](https://github.com/rust-lang/regex) from 1.11.3 to 1.12.1.
- [Release notes](https://github.com/rust-lang/regex/releases)
- [Changelog](https://github.com/rust-lang/regex/blob/master/CHANGELOG.md)
- [Commits](https://github.com/rust-lang/regex/compare/1.11.3...1.12.1)

---
updated-dependencies:
- dependency-name: regex
  dependency-version: 1.12.1
  dependency-type: direct:production
  update-type: version-update:semver-minor
...

Signed-off-by: dependabot[bot] <support@github.com>
2025-10-13 03:02:14 +00:00
Daniel Hofstetter a9be625085 Merge pull request #576 from uutils/dependabot/cargo/regex-1.11.3
build(deps): bump regex from 1.11.2 to 1.11.3
2025-09-26 07:12:52 +02:00
dependabot[bot] 4eeb0ab5fb build(deps): bump regex from 1.11.2 to 1.11.3
Bumps [regex](https://github.com/rust-lang/regex) from 1.11.2 to 1.11.3.
- [Release notes](https://github.com/rust-lang/regex/releases)
- [Changelog](https://github.com/rust-lang/regex/blob/master/CHANGELOG.md)
- [Commits](https://github.com/rust-lang/regex/compare/1.11.2...1.11.3)

---
updated-dependencies:
- dependency-name: regex
  dependency-version: 1.11.3
  dependency-type: direct:production
  update-type: version-update:semver-patch
...

Signed-off-by: dependabot[bot] <support@github.com>
2025-09-26 03:02:01 +00:00
Daniel Hofstetter 05ef60c74c Merge pull request #575 from uutils/dependabot/cargo/tempfile-3.23.0
build(deps): bump tempfile from 3.22.0 to 3.23.0
2025-09-24 06:59:12 +02:00
dependabot[bot] 089229cca5 build(deps): bump tempfile from 3.22.0 to 3.23.0
Bumps [tempfile](https://github.com/Stebalien/tempfile) from 3.22.0 to 3.23.0.
- [Changelog](https://github.com/Stebalien/tempfile/blob/master/CHANGELOG.md)
- [Commits](https://github.com/Stebalien/tempfile/compare/v3.22.0...v3.23.0)

---
updated-dependencies:
- dependency-name: tempfile
  dependency-version: 3.23.0
  dependency-type: direct:production
  update-type: version-update:semver-minor
...

Signed-off-by: dependabot[bot] <support@github.com>
2025-09-24 03:01:46 +00:00
Daniel Hofstetter 7d1bc752a0 Merge pull request #574 from uutils/dependabot/cargo/clap-4.5.48
build(deps): bump clap from 4.5.47 to 4.5.48
2025-09-22 07:07:12 +02:00
dependabot[bot] b90895095f build(deps): bump clap from 4.5.47 to 4.5.48
Bumps [clap](https://github.com/clap-rs/clap) from 4.5.47 to 4.5.48.
- [Release notes](https://github.com/clap-rs/clap/releases)
- [Changelog](https://github.com/clap-rs/clap/blob/master/CHANGELOG.md)
- [Commits](https://github.com/clap-rs/clap/compare/clap_complete-v4.5.47...clap_complete-v4.5.48)

---
updated-dependencies:
- dependency-name: clap
  dependency-version: 4.5.48
  dependency-type: direct:production
  update-type: version-update:semver-patch
...

Signed-off-by: dependabot[bot] <support@github.com>
2025-09-22 03:02:06 +00:00
Daniel Hofstetter daedaec652 Merge pull request #572 from uutils/dependabot/cargo/uucore-0.2.2
build(deps): bump uucore from 0.2.0 to 0.2.2
2025-09-10 07:04:45 +02:00
Daniel Hofstetter 17a820e6cd Merge pull request #573 from uutils/dependabot/cargo/tempfile-3.22.0
build(deps): bump tempfile from 3.21.0 to 3.22.0
2025-09-10 07:03:03 +02:00
dependabot[bot] 028fed7782 build(deps): bump tempfile from 3.21.0 to 3.22.0
Bumps [tempfile](https://github.com/Stebalien/tempfile) from 3.21.0 to 3.22.0.
- [Changelog](https://github.com/Stebalien/tempfile/blob/master/CHANGELOG.md)
- [Commits](https://github.com/Stebalien/tempfile/compare/v3.21.0...v3.22.0)

---
updated-dependencies:
- dependency-name: tempfile
  dependency-version: 3.22.0
  dependency-type: direct:production
  update-type: version-update:semver-minor
...

Signed-off-by: dependabot[bot] <support@github.com>
2025-09-10 03:02:00 +00:00
dependabot[bot] a50bc5073a build(deps): bump uucore from 0.2.0 to 0.2.2
Bumps [uucore](https://github.com/uutils/coreutils) from 0.2.0 to 0.2.2.
- [Release notes](https://github.com/uutils/coreutils/releases)
- [Commits](https://github.com/uutils/coreutils/compare/0.2.0...0.2.2)

---
updated-dependencies:
- dependency-name: uucore
  dependency-version: 0.2.2
  dependency-type: direct:production
  update-type: version-update:semver-patch
...

Signed-off-by: dependabot[bot] <support@github.com>
2025-09-10 03:01:54 +00:00
Daniel Hofstetter 2d4e3208d9 Merge pull request #571 from uutils/dependabot/cargo/chrono-0.4.42
build(deps): bump chrono from 0.4.41 to 0.4.42
2025-09-09 07:12:18 +02:00
dependabot[bot] 696904b64a build(deps): bump chrono from 0.4.41 to 0.4.42
Bumps [chrono](https://github.com/chronotope/chrono) from 0.4.41 to 0.4.42.
- [Release notes](https://github.com/chronotope/chrono/releases)
- [Changelog](https://github.com/chronotope/chrono/blob/main/CHANGELOG.md)
- [Commits](https://github.com/chronotope/chrono/compare/v0.4.41...v0.4.42)

---
updated-dependencies:
- dependency-name: chrono
  dependency-version: 0.4.42
  dependency-type: direct:production
  update-type: version-update:semver-patch
...

Signed-off-by: dependabot[bot] <support@github.com>
2025-09-09 03:01:49 +00:00
Daniel Hofstetter 135eb69c42 Merge pull request #570 from uutils/dependabot/cargo/uucore-0.2.0
build(deps): bump uucore from 0.1.0 to 0.2.0
2025-09-08 07:11:10 +02:00
dependabot[bot] 686b55ba62 build(deps): bump uucore from 0.1.0 to 0.2.0
Bumps [uucore](https://github.com/uutils/coreutils) from 0.1.0 to 0.2.0.
- [Release notes](https://github.com/uutils/coreutils/releases)
- [Commits](https://github.com/uutils/coreutils/compare/0.1.0...0.2.0)

---
updated-dependencies:
- dependency-name: uucore
  dependency-version: 0.2.0
  dependency-type: direct:production
  update-type: version-update:semver-minor
...

Signed-off-by: dependabot[bot] <support@github.com>
2025-09-08 03:01:48 +00:00
Daniel Hofstetter d6e37790b4 Merge pull request #569 from uutils/dependabot/github_actions/actions/github-script-8
build(deps): bump actions/github-script from 7 to 8
2025-09-05 07:18:21 +02:00
dependabot[bot] 8eb191357c build(deps): bump actions/github-script from 7 to 8
Bumps [actions/github-script](https://github.com/actions/github-script) from 7 to 8.
- [Release notes](https://github.com/actions/github-script/releases)
- [Commits](https://github.com/actions/github-script/compare/v7...v8)

---
updated-dependencies:
- dependency-name: actions/github-script
  dependency-version: '8'
  dependency-type: direct:production
  update-type: version-update:semver-major
...

Signed-off-by: dependabot[bot] <support@github.com>
2025-09-05 03:03:27 +00:00
Daniel Hofstetter 7a3a01b602 Merge pull request #568 from uutils/dependabot/cargo/clap-4.5.47
build(deps): bump clap from 4.5.46 to 4.5.47
2025-09-04 07:10:21 +02:00
dependabot[bot] 94e873795c build(deps): bump clap from 4.5.46 to 4.5.47
Bumps [clap](https://github.com/clap-rs/clap) from 4.5.46 to 4.5.47.
- [Release notes](https://github.com/clap-rs/clap/releases)
- [Changelog](https://github.com/clap-rs/clap/blob/master/CHANGELOG.md)
- [Commits](https://github.com/clap-rs/clap/compare/clap_complete-v4.5.46...clap_complete-v4.5.47)

---
updated-dependencies:
- dependency-name: clap
  dependency-version: 4.5.47
  dependency-type: direct:production
  update-type: version-update:semver-patch
...

Signed-off-by: dependabot[bot] <support@github.com>
2025-09-03 20:57:21 +00:00
Daniel Hofstetter f8763a460a Merge pull request #567 from uutils/dependabot/cargo/clap-4.5.46
build(deps): bump clap from 4.5.45 to 4.5.46
2025-08-27 16:05:27 +02:00
dependabot[bot] def34a5867 build(deps): bump clap from 4.5.45 to 4.5.46
Bumps [clap](https://github.com/clap-rs/clap) from 4.5.45 to 4.5.46.
- [Release notes](https://github.com/clap-rs/clap/releases)
- [Changelog](https://github.com/clap-rs/clap/blob/master/CHANGELOG.md)
- [Commits](https://github.com/clap-rs/clap/compare/clap_complete-v4.5.45...clap_complete-v4.5.46)

---
updated-dependencies:
- dependency-name: clap
  dependency-version: 4.5.46
  dependency-type: direct:production
  update-type: version-update:semver-patch
...

Signed-off-by: dependabot[bot] <support@github.com>
2025-08-27 13:57:32 +00:00
Daniel Hofstetter 153d0e602f Merge pull request #566 from uutils/dependabot/cargo/regex-1.11.2
build(deps): bump regex from 1.11.1 to 1.11.2
2025-08-25 07:55:42 +02:00
dependabot[bot] dcd1a80104 build(deps): bump regex from 1.11.1 to 1.11.2
Bumps [regex](https://github.com/rust-lang/regex) from 1.11.1 to 1.11.2.
- [Release notes](https://github.com/rust-lang/regex/releases)
- [Changelog](https://github.com/rust-lang/regex/blob/master/CHANGELOG.md)
- [Commits](https://github.com/rust-lang/regex/compare/1.11.1...1.11.2)

---
updated-dependencies:
- dependency-name: regex
  dependency-version: 1.11.2
  dependency-type: direct:production
  update-type: version-update:semver-patch
...

Signed-off-by: dependabot[bot] <support@github.com>
2025-08-25 05:32:49 +00:00
Sylvestre Ledru cad6c11cd0 Merge pull request #555 from cakebaker/bump_uucore
Bump `uucore` from `0.0.30` to `0.1.0`
2025-08-21 10:22:04 +02:00
Daniel Hofstetter 09443125cb Bump uucore from 0.0.30 to 0.1.0 2025-08-21 09:33:01 +02:00
Daniel Hofstetter d61df0e97b Merge pull request #565 from uutils/dependabot/cargo/filetime-0.2.26
build(deps): bump filetime from 0.2.25 to 0.2.26
2025-08-21 08:00:23 +02:00
dependabot[bot] 51cad56ce8 build(deps): bump filetime from 0.2.25 to 0.2.26
Bumps [filetime](https://github.com/alexcrichton/filetime) from 0.2.25 to 0.2.26.
- [Commits](https://github.com/alexcrichton/filetime/commits)

---
updated-dependencies:
- dependency-name: filetime
  dependency-version: 0.2.26
  dependency-type: direct:production
  update-type: version-update:semver-patch
...

Signed-off-by: dependabot[bot] <support@github.com>
2025-08-21 03:57:16 +00:00
Daniel Hofstetter bdf3aafea2 Merge pull request #564 from uutils/dependabot/cargo/tempfile-3.21.0
build(deps): bump tempfile from 3.20.0 to 3.21.0
2025-08-20 08:01:37 +02:00
dependabot[bot] f6de652196 build(deps): bump tempfile from 3.20.0 to 3.21.0
Bumps [tempfile](https://github.com/Stebalien/tempfile) from 3.20.0 to 3.21.0.
- [Changelog](https://github.com/Stebalien/tempfile/blob/master/CHANGELOG.md)
- [Commits](https://github.com/Stebalien/tempfile/commits)

---
updated-dependencies:
- dependency-name: tempfile
  dependency-version: 3.21.0
  dependency-type: direct:production
  update-type: version-update:semver-minor
...

Signed-off-by: dependabot[bot] <support@github.com>
2025-08-20 04:26:06 +00:00
Daniel Hofstetter 02f9e81584 Merge pull request #563 from uutils/dependabot/cargo/clap-4.5.45
build(deps): bump clap from 4.5.44 to 4.5.45
2025-08-13 07:58:28 +02:00
dependabot[bot] 758c2fd06b build(deps): bump clap from 4.5.44 to 4.5.45
Bumps [clap](https://github.com/clap-rs/clap) from 4.5.44 to 4.5.45.
- [Release notes](https://github.com/clap-rs/clap/releases)
- [Changelog](https://github.com/clap-rs/clap/blob/master/CHANGELOG.md)
- [Commits](https://github.com/clap-rs/clap/compare/clap_complete-v4.5.44...clap_complete-v4.5.45)

---
updated-dependencies:
- dependency-name: clap
  dependency-version: 4.5.45
  dependency-type: direct:production
  update-type: version-update:semver-patch
...

Signed-off-by: dependabot[bot] <support@github.com>
2025-08-13 04:13:48 +00:00
Daniel Hofstetter fa886a41aa Merge pull request #562 from uutils/dependabot/cargo/clap-4.5.44
build(deps): bump clap from 4.5.43 to 4.5.44
2025-08-12 14:49:39 +02:00
dependabot[bot] 406d517df7 build(deps): bump clap from 4.5.43 to 4.5.44
Bumps [clap](https://github.com/clap-rs/clap) from 4.5.43 to 4.5.44.
- [Release notes](https://github.com/clap-rs/clap/releases)
- [Changelog](https://github.com/clap-rs/clap/blob/master/CHANGELOG.md)
- [Commits](https://github.com/clap-rs/clap/compare/clap_complete-v4.5.43...clap_complete-v4.5.44)

---
updated-dependencies:
- dependency-name: clap
  dependency-version: 4.5.44
  dependency-type: direct:production
  update-type: version-update:semver-patch
...

Signed-off-by: dependabot[bot] <support@github.com>
2025-08-12 12:40:42 +00:00
Daniel Hofstetter f2afe6450f Merge pull request #561 from uutils/dependabot/github_actions/actions/checkout-5
build(deps): bump actions/checkout from 4 to 5
2025-08-12 13:17:34 +02:00
dependabot[bot] 9c44de78bc build(deps): bump actions/checkout from 4 to 5
Bumps [actions/checkout](https://github.com/actions/checkout) from 4 to 5.
- [Release notes](https://github.com/actions/checkout/releases)
- [Changelog](https://github.com/actions/checkout/blob/main/CHANGELOG.md)
- [Commits](https://github.com/actions/checkout/compare/v4...v5)

---
updated-dependencies:
- dependency-name: actions/checkout
  dependency-version: '5'
  dependency-type: direct:production
  update-type: version-update:semver-major
...

Signed-off-by: dependabot[bot] <support@github.com>
2025-08-12 11:02:59 +00:00
Daniel Hofstetter 7664159c45 Merge pull request #560 from uutils/dependabot/cargo/clap-4.5.43
build(deps): bump clap from 4.5.42 to 4.5.43
2025-08-07 07:53:42 +02:00
dependabot[bot] 4f32c894c3 build(deps): bump clap from 4.5.42 to 4.5.43
Bumps [clap](https://github.com/clap-rs/clap) from 4.5.42 to 4.5.43.
- [Release notes](https://github.com/clap-rs/clap/releases)
- [Changelog](https://github.com/clap-rs/clap/blob/master/CHANGELOG.md)
- [Commits](https://github.com/clap-rs/clap/compare/clap_complete-v4.5.42...clap_complete-v4.5.43)

---
updated-dependencies:
- dependency-name: clap
  dependency-version: 4.5.43
  dependency-type: direct:production
  update-type: version-update:semver-patch
...

Signed-off-by: dependabot[bot] <support@github.com>
2025-08-07 03:37:42 +00:00
Daniel Hofstetter d43fd72ba9 Merge pull request #559 from uutils/dependabot/github_actions/actions/download-artifact-5
build(deps): bump actions/download-artifact from 4 to 5
2025-08-06 09:23:46 +02:00
dependabot[bot] 74f2009781 build(deps): bump actions/download-artifact from 4 to 5
Bumps [actions/download-artifact](https://github.com/actions/download-artifact) from 4 to 5.
- [Release notes](https://github.com/actions/download-artifact/releases)
- [Commits](https://github.com/actions/download-artifact/compare/v4...v5)

---
updated-dependencies:
- dependency-name: actions/download-artifact
  dependency-version: '5'
  dependency-type: direct:production
  update-type: version-update:semver-major
...

Signed-off-by: dependabot[bot] <support@github.com>
2025-08-06 03:34:56 +00:00
Daniel Hofstetter 001318d483 Merge pull request #558 from uutils/dependabot/cargo/clap-4.5.42
build(deps): bump clap from 4.5.41 to 4.5.42
2025-07-30 07:50:57 +02:00
dependabot[bot] a36d4192af build(deps): bump clap from 4.5.41 to 4.5.42
Bumps [clap](https://github.com/clap-rs/clap) from 4.5.41 to 4.5.42.
- [Release notes](https://github.com/clap-rs/clap/releases)
- [Changelog](https://github.com/clap-rs/clap/blob/master/CHANGELOG.md)
- [Commits](https://github.com/clap-rs/clap/compare/clap_complete-v4.5.41...clap_complete-v4.5.42)

---
updated-dependencies:
- dependency-name: clap
  dependency-version: 4.5.42
  dependency-type: direct:production
  update-type: version-update:semver-patch
...

Signed-off-by: dependabot[bot] <support@github.com>
2025-07-30 03:43:57 +00:00
Daniel Hofstetter ed790b4ddd Merge pull request #557 from uutils/dependabot/cargo/clap-4.5.41
build(deps): bump clap from 4.5.40 to 4.5.41
2025-07-10 07:55:06 +02:00
dependabot[bot] 1984df45e1 build(deps): bump clap from 4.5.40 to 4.5.41
Bumps [clap](https://github.com/clap-rs/clap) from 4.5.40 to 4.5.41.
- [Release notes](https://github.com/clap-rs/clap/releases)
- [Changelog](https://github.com/clap-rs/clap/blob/master/CHANGELOG.md)
- [Commits](https://github.com/clap-rs/clap/compare/clap_complete-v4.5.40...clap_complete-v4.5.41)

---
updated-dependencies:
- dependency-name: clap
  dependency-version: 4.5.41
  dependency-type: direct:production
  update-type: version-update:semver-patch
...

Signed-off-by: dependabot[bot] <support@github.com>
2025-07-10 03:55:53 +00:00
Daniel Hofstetter ce0067f5ce Merge pull request #556 from uutils/dependabot/cargo/argmax-0.4.0
build(deps): bump argmax from 0.3.1 to 0.4.0
2025-06-17 08:20:58 +02:00
dependabot[bot] 0b9f252f43 build(deps): bump argmax from 0.3.1 to 0.4.0
Bumps [argmax](https://github.com/sharkdp/argmax) from 0.3.1 to 0.4.0.
- [Release notes](https://github.com/sharkdp/argmax/releases)
- [Commits](https://github.com/sharkdp/argmax/compare/v0.3.1...v0.4.0)

---
updated-dependencies:
- dependency-name: argmax
  dependency-version: 0.4.0
  dependency-type: direct:production
  update-type: version-update:semver-minor
...

Signed-off-by: dependabot[bot] <support@github.com>
2025-06-17 03:30:56 +00:00
Daniel Hofstetter 8426482239 Merge pull request #554 from uutils/dependabot/cargo/clap-4.5.40
build(deps): bump clap from 4.5.39 to 4.5.40
2025-06-10 08:00:21 +02:00
dependabot[bot] 7034627fcc build(deps): bump clap from 4.5.39 to 4.5.40
Bumps [clap](https://github.com/clap-rs/clap) from 4.5.39 to 4.5.40.
- [Release notes](https://github.com/clap-rs/clap/releases)
- [Changelog](https://github.com/clap-rs/clap/blob/master/CHANGELOG.md)
- [Commits](https://github.com/clap-rs/clap/compare/clap_complete-v4.5.39...clap_complete-v4.5.40)

---
updated-dependencies:
- dependency-name: clap
  dependency-version: 4.5.40
  dependency-type: direct:production
  update-type: version-update:semver-patch
...

Signed-off-by: dependabot[bot] <support@github.com>
2025-06-10 03:33:42 +00:00
Daniel Hofstetter d55e2f93cb Merge pull request #552 from uutils/dependabot/cargo/clap-4.5.39
build(deps): bump clap from 4.5.38 to 4.5.39
2025-05-28 07:21:51 +02:00
dependabot[bot] f96852e957 build(deps): bump clap from 4.5.38 to 4.5.39
Bumps [clap](https://github.com/clap-rs/clap) from 4.5.38 to 4.5.39.
- [Release notes](https://github.com/clap-rs/clap/releases)
- [Changelog](https://github.com/clap-rs/clap/blob/master/CHANGELOG.md)
- [Commits](https://github.com/clap-rs/clap/compare/clap_complete-v4.5.38...clap_complete-v4.5.39)

---
updated-dependencies:
- dependency-name: clap
  dependency-version: 4.5.39
  dependency-type: direct:production
  update-type: version-update:semver-patch
...

Signed-off-by: dependabot[bot] <support@github.com>
2025-05-28 03:20:48 +00:00
Daniel Hofstetter 64a4345778 Merge pull request #551 from uutils/dependabot/cargo/onig-6.5.1
build(deps): bump onig from 6.4.0 to 6.5.1
2025-05-26 07:17:12 +02:00
dependabot[bot] 90845d95ce build(deps): bump onig from 6.4.0 to 6.5.1
Bumps [onig](https://github.com/iwillspeak/rust-onig) from 6.4.0 to 6.5.1.
- [Release notes](https://github.com/iwillspeak/rust-onig/releases)
- [Changelog](https://github.com/rust-onig/rust-onig/blob/main/CHANGELOG.md)
- [Commits](https://github.com/iwillspeak/rust-onig/compare/v6.4.0...V6.5.1)

---
updated-dependencies:
- dependency-name: onig
  dependency-version: 6.5.1
  dependency-type: direct:production
  update-type: version-update:semver-minor
...

Signed-off-by: dependabot[bot] <support@github.com>
2025-05-26 03:24:39 +00:00
Daniel Hofstetter 6cbd032905 Merge pull request #548 from uutils/dependabot/cargo/tempfile-3.20.0
build(deps): bump tempfile from 3.19.1 to 3.20.0
2025-05-12 07:04:54 +02:00
Daniel Hofstetter 520480792a Merge pull request #549 from uutils/dependabot/cargo/clap-4.5.38
build(deps): bump clap from 4.5.37 to 4.5.38
2025-05-12 07:03:51 +02:00
dependabot[bot] de9a58a0b5 build(deps): bump clap from 4.5.37 to 4.5.38
Bumps [clap](https://github.com/clap-rs/clap) from 4.5.37 to 4.5.38.
- [Release notes](https://github.com/clap-rs/clap/releases)
- [Changelog](https://github.com/clap-rs/clap/blob/master/CHANGELOG.md)
- [Commits](https://github.com/clap-rs/clap/compare/clap_complete-v4.5.37...clap_complete-v4.5.38)

---
updated-dependencies:
- dependency-name: clap
  dependency-version: 4.5.38
  dependency-type: direct:production
  update-type: version-update:semver-patch
...

Signed-off-by: dependabot[bot] <support@github.com>
2025-05-12 03:57:47 +00:00
dependabot[bot] dd0b2d94af build(deps): bump tempfile from 3.19.1 to 3.20.0
Bumps [tempfile](https://github.com/Stebalien/tempfile) from 3.19.1 to 3.20.0.
- [Changelog](https://github.com/Stebalien/tempfile/blob/master/CHANGELOG.md)
- [Commits](https://github.com/Stebalien/tempfile/compare/v3.19.1...v3.20.0)

---
updated-dependencies:
- dependency-name: tempfile
  dependency-version: 3.20.0
  dependency-type: direct:production
  update-type: version-update:semver-minor
...

Signed-off-by: dependabot[bot] <support@github.com>
2025-05-12 03:57:41 +00:00
Sylvestre Ledru 73d5e90590 Merge pull request #546 from cakebaker/ci_use_latest_ubuntu_in_release_workflow
ci: use `ubuntu-latest` instead of `ubuntu-20.04` for `release` workflow
2025-05-09 09:06:37 +02:00
Sylvestre Ledru be84586025 Merge pull request #547 from Qelxiros/docs_dead_link
docs: update dead link
2025-05-09 09:03:54 +02:00
Jeremy Smart 41c1013e4b update link 2025-05-08 20:58:16 -04:00
Daniel Hofstetter 319e1de581 ci: use ubuntu-latest instead of ubuntu-20.04
which is no longer available on Github
2025-05-07 10:46:41 +02:00
Sylvestre Ledru a607612ee0 Merge pull request #545 from tdulcet/svg
Switched to SVG graphs
2025-05-05 19:53:27 +02:00
Teal Dulcet 1548034e17 Updated README to use SVG graphs. 2025-05-05 09:15:45 -07:00
Daniel Hofstetter f07258765e Merge pull request #544 from uutils/dependabot/cargo/nix-0.30.1
build(deps): bump nix from 0.30.0 to 0.30.1
2025-05-05 07:06:55 +02:00
dependabot[bot] db60087142 build(deps): bump nix from 0.30.0 to 0.30.1
Bumps [nix](https://github.com/nix-rust/nix) from 0.30.0 to 0.30.1.
- [Changelog](https://github.com/nix-rust/nix/blob/master/CHANGELOG.md)
- [Commits](https://github.com/nix-rust/nix/compare/v0.30.0...v0.30.1)

---
updated-dependencies:
- dependency-name: nix
  dependency-version: 0.30.1
  dependency-type: direct:production
  update-type: version-update:semver-patch
...

Signed-off-by: dependabot[bot] <support@github.com>
2025-05-05 03:08:49 +00:00
Daniel Hofstetter 9836976905 Merge pull request #543 from uutils/dependabot/cargo/nix-0.30.0
build(deps): bump nix from 0.29.0 to 0.30.0
2025-04-30 06:51:46 +02:00
Daniel Hofstetter 63293fb539 Merge pull request #542 from uutils/dependabot/cargo/chrono-0.4.41
build(deps): bump chrono from 0.4.40 to 0.4.41
2025-04-30 06:50:55 +02:00
dependabot[bot] 9b51ba5625 build(deps): bump nix from 0.29.0 to 0.30.0
Bumps [nix](https://github.com/nix-rust/nix) from 0.29.0 to 0.30.0.
- [Changelog](https://github.com/nix-rust/nix/blob/master/CHANGELOG.md)
- [Commits](https://github.com/nix-rust/nix/compare/v0.29.0...v0.30.0)

---
updated-dependencies:
- dependency-name: nix
  dependency-version: 0.30.0
  dependency-type: direct:production
  update-type: version-update:semver-minor
...

Signed-off-by: dependabot[bot] <support@github.com>
2025-04-30 03:17:58 +00:00
dependabot[bot] 2bb919e29d build(deps): bump chrono from 0.4.40 to 0.4.41
Bumps [chrono](https://github.com/chronotope/chrono) from 0.4.40 to 0.4.41.
- [Release notes](https://github.com/chronotope/chrono/releases)
- [Changelog](https://github.com/chronotope/chrono/blob/main/CHANGELOG.md)
- [Commits](https://github.com/chronotope/chrono/compare/v0.4.40...v0.4.41)

---
updated-dependencies:
- dependency-name: chrono
  dependency-version: 0.4.41
  dependency-type: direct:production
  update-type: version-update:semver-patch
...

Signed-off-by: dependabot[bot] <support@github.com>
2025-04-30 03:17:53 +00:00
Sylvestre Ledru e5f7dae2ae Merge pull request #532 from tavianator/fstype-stacked
find: Fix -fstype with stacked mounts
2025-04-24 21:18:48 +02:00
cryptodarth 3f026bfe6b Merge pull request #534 from Crypto-Darth/error-msgs
change "Error:" to "find:" + Testcase fix
2025-04-24 20:26:59 +02:00
cryptodarth a571de6812 Implement : Chained Type matcher arguments (#527)
* code dump

* fix : new checks + working stage

* minor fixes + duplicates check

* fix : add check for incorrect chained commands

* add : Chained Argument matching for -xtype

* add: test

* cargo fmt

* Add : more tests + old test fix

* refactor : move common code to function

* fix : convert match to if/else

* Improve : Testcase for xtype

* cargo clippy fix

* update : testcase

* fix : error handling

* fix : use single type

* add: basic tests on binary level

* Add : -xtype tests

* refactor : use single type without Option<>

* fix : use better search logic

* refactor : use HashSet<> instead of Vec<>

* remove : unnecessary hashmap usage

* Update src/find/matchers/type_matcher.rs

Co-authored-by: Tavian Barnes <tavianator@tavianator.com>

* change: variable name

* remove: type and replace with HashSet<FileType>

* remove: trimming

---------

Co-authored-by: Tavian Barnes <tavianator@tavianator.com>
2025-04-24 20:17:39 +02:00
Daniel Hofstetter 5cec2c3e41 Merge pull request #539 from uutils/dependabot/cargo/clap-4.5.37
build(deps): bump clap from 4.5.36 to 4.5.37
2025-04-21 07:06:03 +02:00
dependabot[bot] 2c3928ba21 build(deps): bump clap from 4.5.36 to 4.5.37
Bumps [clap](https://github.com/clap-rs/clap) from 4.5.36 to 4.5.37.
- [Release notes](https://github.com/clap-rs/clap/releases)
- [Changelog](https://github.com/clap-rs/clap/blob/master/CHANGELOG.md)
- [Commits](https://github.com/clap-rs/clap/compare/clap_complete-v4.5.36...clap_complete-v4.5.37)

---
updated-dependencies:
- dependency-name: clap
  dependency-version: 4.5.37
  dependency-type: direct:production
  update-type: version-update:semver-patch
...

Signed-off-by: dependabot[bot] <support@github.com>
2025-04-21 04:12:31 +00:00
Daniel Hofstetter f870d272a4 Merge pull request #538 from uutils/dependabot/cargo/assert_cmd-2.0.17
build(deps): bump assert_cmd from 2.0.16 to 2.0.17
2025-04-17 07:12:15 +02:00
dependabot[bot] 6d6c40aec6 build(deps): bump assert_cmd from 2.0.16 to 2.0.17
Bumps [assert_cmd](https://github.com/assert-rs/assert_cmd) from 2.0.16 to 2.0.17.
- [Changelog](https://github.com/assert-rs/assert_cmd/blob/master/CHANGELOG.md)
- [Commits](https://github.com/assert-rs/assert_cmd/compare/v2.0.16...v2.0.17)

---
updated-dependencies:
- dependency-name: assert_cmd
  dependency-version: 2.0.17
  dependency-type: direct:production
  update-type: version-update:semver-patch
...

Signed-off-by: dependabot[bot] <support@github.com>
2025-04-17 03:21:55 +00:00
Daniel Hofstetter 69b32a9c0a Merge pull request #535 from uutils/dependabot/cargo/clap-4.5.36
build(deps): bump clap from 4.5.35 to 4.5.36
2025-04-14 07:08:28 +02:00
dependabot[bot] e6b3ba880b build(deps): bump clap from 4.5.35 to 4.5.36
Bumps [clap](https://github.com/clap-rs/clap) from 4.5.35 to 4.5.36.
- [Release notes](https://github.com/clap-rs/clap/releases)
- [Changelog](https://github.com/clap-rs/clap/blob/master/CHANGELOG.md)
- [Commits](https://github.com/clap-rs/clap/compare/clap_complete-v4.5.35...clap_complete-v4.5.36)

---
updated-dependencies:
- dependency-name: clap
  dependency-version: 4.5.36
  dependency-type: direct:production
  update-type: version-update:semver-patch
...

Signed-off-by: dependabot[bot] <support@github.com>
2025-04-14 03:36:11 +00:00
Sylvestre Ledru cacb1c10bd Merge pull request #529 from KartikDua1504/fix-blocks
Fix: Use div_ceil with proper blocks computation
2025-04-10 11:23:03 -04:00
Tavian Barnes cd8790239f find: Fix -fstype with stacked mounts
If you stack two mounts on top of each other, e.g.

    # mount -t ext4 /dev/sdX /mnt
    # mount -t f2fs /dev/sdY /mnt

then read_fs_list() will return two entries for that mount point.  The
later one is the one with the correct type, since the later mount is on
top of the earlier one.
2025-04-10 09:52:26 -04:00
Kartik Dua fa4399bdbe Formatted Document 2025-04-08 01:40:22 +05:30
Kartik Dua 04a92a8fb3 Fix: Use div_ceil with proper blocks computation
Fixes: ##523
2025-04-07 21:51:13 +05:30
Sylvestre Ledru b94b5f0122 Merge pull request #524 from tavianator/cmp-signs
find: Allow comparable values with signs
2025-04-06 18:46:33 +02:00
Sylvestre Ledru 4f8fbf55a1 Merge pull request #528 from sylvestre/ver
prepare version 0.8.0
2025-04-06 18:41:08 +02:00
Sylvestre Ledru 3dbdbe8442 prepare version 0.8.0 2025-04-06 18:35:31 +02:00
Sylvestre Ledru 949bcb83c8 Merge pull request #526 from cakebaker/find_fix_typo_in_test
find: fix typo in test (slashs -> slashes)
2025-04-05 10:24:14 +02:00
Daniel Hofstetter 61b396ac31 find: fix typo in test (slashs -> slashes) 2025-04-05 10:14:03 +02:00
Daniel Hofstetter 6c99dc175f Merge pull request #497 from uutils/dependabot/cargo/chrono-0.4.40
build(deps): bump chrono from 0.4.38 to 0.4.40
2025-04-05 10:07:02 +02:00
dependabot[bot] 778abdb6a9 build(deps): bump chrono from 0.4.38 to 0.4.40
Bumps [chrono](https://github.com/chronotope/chrono) from 0.4.38 to 0.4.40.
- [Release notes](https://github.com/chronotope/chrono/releases)
- [Changelog](https://github.com/chronotope/chrono/blob/main/CHANGELOG.md)
- [Commits](https://github.com/chronotope/chrono/compare/v0.4.38...v0.4.40)

---
updated-dependencies:
- dependency-name: chrono
  dependency-type: direct:production
  update-type: version-update:semver-patch
...

Signed-off-by: dependabot[bot] <support@github.com>
2025-04-05 09:57:27 +02:00
Tavian Barnes a61993b705 find: Allow comparable values with signs
find -uid -+10 means "UID less than +10".
2025-04-05 09:57:10 +02:00
Daniel Hofstetter bd159d7627 Merge pull request #525 from sylvestre/cov
ci: adjust to code cov v5
2025-04-05 09:49:52 +02:00
Sylvestre Ledru ad61338bb2 ci: use github for gnulib 2025-04-04 23:04:33 +02:00
Sylvestre Ledru 4a1c683834 ci: remove trailing spaces 2025-04-04 23:00:59 +02:00
Sylvestre Ledru 2ec695381e ci: adjust to code cov v5 2025-04-04 22:27:47 +02:00
Sylvestre Ledru a04b499e15 Merge pull request #521 from tavianator/user-group-ids
find: User/group ID fixes
2025-04-04 14:01:21 +02:00
Tavian Barnes de42f9bd83 find: Implement -uid [-+]N, -gid [-+]N
GNU find's -uid/-gid matchers take a comparable value.
2025-04-04 09:51:19 +02:00
Tavian Barnes 6d264dbbcf find: Allow -user UID / -group GID
POSIX says

> -user uname
>   The primary shall evaluate as true if the file belongs to the user
>   uname. If uname is a decimal integer and the getpwnam() (or
>   equivalent) function does not return a valid user name, uname shall
>   be interpreted as a user ID.

and similarly for -group.

Link: https://pubs.opengroup.org/onlinepubs/9799919799/utilities/find.html
2025-04-04 09:51:19 +02:00
Sylvestre Ledru 81c39aad7d Merge pull request #522 from cakebaker/clippy_fix_warnings_from_rust_1_86
clippy: fix warnings from Rust 1.86
2025-04-04 09:50:42 +02:00
Daniel Hofstetter 5cb273eecb clippy: fix error from manual_div_ceil lint 2025-04-04 09:21:12 +02:00
Daniel Hofstetter 55021afb69 clippy: fix errors from double_ended_iterator_last
lint
2025-04-04 09:21:12 +02:00
Sylvestre Ledru 013be1b093 Merge pull request #520 from tavianator/exec-multi-deterministic
tests: Make -exec {} + tests deterministic
2025-04-04 09:20:25 +02:00
Tavian Barnes 0429507f15 tests: Make -exec {} + tests deterministic
These tests failed on my system because directory entries were returned
in a different order, causing an output mismatch.  Add --sort to the
testing_commandline to make the output deterministic.
2025-04-02 22:11:27 -04:00
milkory 5235d78291 find: Implement exec[dir] + (#515)
* add argmax dependency

* implement finished and finished_dir callback

* implement multi exec matcher

* fix finished_dir not working correctly

* add more test for multi exec matcher

* fix execdir multi in current directory not working

* add more test for parsing multi exec

* set exit code when exec + failed

* fix clippy warnings

* prevent multi exec panics on long paths

---------

Co-authored-by: hanbings <hanbings@hanbings.io>
2025-04-02 21:04:48 +08:00
cryptodarth 1a40442f20 Merge pull request #509 from Crypto-Darth/main
Implement : -files0-from (#378)
2025-04-02 20:47:51 +08:00
Daniel Hofstetter cb83b6db3a Merge pull request #519 from uutils/dependabot/cargo/clap-4.5.35
build(deps): bump clap from 4.5.34 to 4.5.35
2025-04-02 07:01:01 +02:00
dependabot[bot] e92ebc9288 build(deps): bump clap from 4.5.34 to 4.5.35
Bumps [clap](https://github.com/clap-rs/clap) from 4.5.34 to 4.5.35.
- [Release notes](https://github.com/clap-rs/clap/releases)
- [Changelog](https://github.com/clap-rs/clap/blob/master/CHANGELOG.md)
- [Commits](https://github.com/clap-rs/clap/compare/clap_complete-v4.5.34...clap_complete-v4.5.35)

---
updated-dependencies:
- dependency-name: clap
  dependency-type: direct:production
  update-type: version-update:semver-patch
...

Signed-off-by: dependabot[bot] <support@github.com>
2025-04-02 03:05:31 +00:00
Daniel Hofstetter d6dc18973d Merge pull request #517 from hanbings/clippy
clippy: run cargo clippy and cargo fmt.
2025-03-29 13:55:57 +01:00
hanbings 9fdfb1ee08 Run cargo clippy and cargo fmt. 2025-03-29 15:58:41 +08:00
hanbings 830298ed22 Merge pull request #510 from uutils/sylvestre-patch-1
clippy: add the same rules as coreutils
2025-03-29 15:51:24 +08:00
hanbings 8784923b54 Merge pull request #516 from tavianator/set-exit-code
find: Use matcher_io.set_exit_code()
2025-03-29 15:29:25 +08:00
hanbings 89f98f1aff Merge pull request #514 from cakebaker/bump_uucore
Bump `uucore` from `0.0.29` to `0.0.30`
2025-03-29 15:05:45 +08:00
Tavian Barnes f911610d93 find: Use matcher_io.set_exit_code()
The uucore function has the downside of leaking the failure state
between unrelated tests, because the exit code is global.  PR #436
introduced a method on MatcherIO which solves the problem, but future
PRs added new uses of uucore::error::set_exit_code().
2025-03-28 12:56:30 -04:00
Daniel Hofstetter 22c5f7dcc3 Bump uucore from 0.0.29 to 0.0.30 2025-03-27 10:01:46 +01:00
Daniel Hofstetter f3a70e9eb4 Merge pull request #513 from uutils/dependabot/cargo/clap-4.5.34
build(deps): bump clap from 4.5.32 to 4.5.34
2025-03-27 07:11:18 +01:00
dependabot[bot] 55298be4ad build(deps): bump clap from 4.5.32 to 4.5.34
Bumps [clap](https://github.com/clap-rs/clap) from 4.5.32 to 4.5.34.
- [Release notes](https://github.com/clap-rs/clap/releases)
- [Changelog](https://github.com/clap-rs/clap/blob/master/CHANGELOG.md)
- [Commits](https://github.com/clap-rs/clap/compare/clap_complete-v4.5.32...clap_complete-v4.5.34)

---
updated-dependencies:
- dependency-name: clap
  dependency-type: direct:production
  update-type: version-update:semver-patch
...

Signed-off-by: dependabot[bot] <support@github.com>
2025-03-27 03:08:45 +00:00
hanbings 764be30111 Merge pull request #512 from Every2/main
Fix incorrect triple slashes behavior
2025-03-26 23:11:13 +08:00
Every2 6d54482ed4 add one more test to check if case 2025-03-26 04:08:58 -03:00
Every2 49975f5c62 fix windows not running 2025-03-26 03:43:35 -03:00
Every2 dacc473c85 fix incorrect matchs in -name and fix incorrect slashes test 2025-03-26 03:35:38 -03:00
hanbings 5bad2e0afe Merge branch 'main' into sylvestre-patch-1 2025-03-25 10:58:13 -07:00
hanbings 28b1c88d9c Merge pull request #508 from Every2/main
-name / should match ///
2025-03-25 10:56:48 -07:00
Every2 c7b89d5341 fix typo 2025-03-24 18:20:50 -03:00
Every2 b4c5c4946b add find cmd tests 2025-03-24 18:18:33 -03:00
Every2 16bb731937 add test for triple slash case 2025-03-23 14:52:38 +01:00
Every2 6d366cbbda fix -name not returning the same character 2025-03-23 14:52:38 +01:00
Sylvestre Ledru 280381bb28 disable clippy::warn for now 2025-03-23 14:40:56 +01:00
Sylvestre Ledru 1809a3edca fix many clippy warnings
Done with
cargo clippy --fix
2025-03-23 14:38:11 +01:00
Sylvestre Ledru 0a54e7c6d9 clippy: add the same rules as coreutils 2025-03-23 14:35:35 +01:00
Daniel Hofstetter 5d264c9c7b Merge pull request #507 from uutils/dependabot/cargo/tempfile-3.19.1
build(deps): bump tempfile from 3.19.0 to 3.19.1
2025-03-20 07:06:01 +01:00
dependabot[bot] d8355d48a3 build(deps): bump tempfile from 3.19.0 to 3.19.1
Bumps [tempfile](https://github.com/Stebalien/tempfile) from 3.19.0 to 3.19.1.
- [Changelog](https://github.com/Stebalien/tempfile/blob/master/CHANGELOG.md)
- [Commits](https://github.com/Stebalien/tempfile/compare/v3.19.0...v3.19.1)

---
updated-dependencies:
- dependency-name: tempfile
  dependency-type: direct:production
  update-type: version-update:semver-patch
...

Signed-off-by: dependabot[bot] <support@github.com>
2025-03-20 03:42:20 +00:00
Sylvestre Ledru a7b596daef Merge pull request #506 from cakebaker/ci_update_dist
ci: update `dist` from `0.12` to `0.28`
2025-03-14 10:21:51 +01:00
Daniel Hofstetter 22a58468b8 ci: update dist from 0.12 to 0.28 2025-03-14 10:05:01 +01:00
Daniel Hofstetter 0f9ca9eace Merge pull request #505 from uutils/dependabot/cargo/tempfile-3.19.0
build(deps): bump tempfile from 3.18.0 to 3.19.0
2025-03-14 07:20:48 +01:00
dependabot[bot] a90f505510 build(deps): bump tempfile from 3.18.0 to 3.19.0
Bumps [tempfile](https://github.com/Stebalien/tempfile) from 3.18.0 to 3.19.0.
- [Changelog](https://github.com/Stebalien/tempfile/blob/master/CHANGELOG.md)
- [Commits](https://github.com/Stebalien/tempfile/compare/v3.18.0...v3.19.0)

---
updated-dependencies:
- dependency-name: tempfile
  dependency-type: direct:production
  update-type: version-update:semver-minor
...

Signed-off-by: dependabot[bot] <support@github.com>
2025-03-14 03:05:16 +00:00
Daniel Hofstetter e32e754102 Merge pull request #502 from uutils/dependabot/cargo/once_cell-1.21.0
build(deps): bump once_cell from 1.20.3 to 1.21.0
2025-03-11 09:40:13 +01:00
dependabot[bot] 83dc5fe7de build(deps): bump once_cell from 1.20.3 to 1.21.0
Bumps [once_cell](https://github.com/matklad/once_cell) from 1.20.3 to 1.21.0.
- [Changelog](https://github.com/matklad/once_cell/blob/master/CHANGELOG.md)
- [Commits](https://github.com/matklad/once_cell/compare/v1.20.3...v1.21.0)

---
updated-dependencies:
- dependency-name: once_cell
  dependency-type: direct:production
  update-type: version-update:semver-minor
...

Signed-off-by: dependabot[bot] <support@github.com>
2025-03-11 08:29:42 +00:00
Sylvestre Ledru cb3f3cfea4 Merge pull request #503 from cakebaker/remove_unused_once_cell
Remove unused `once_cell` dependency
2025-03-11 09:28:39 +01:00
Daniel Hofstetter 1f9d90eb4f Remove unused once_cell dependency 2025-03-11 09:11:34 +01:00
Daniel Hofstetter 98ce63a65e Merge pull request #501 from uutils/dependabot/cargo/clap-4.5.32
build(deps): bump clap from 4.5.31 to 4.5.32
2025-03-11 07:16:03 +01:00
dependabot[bot] a547d24f46 build(deps): bump clap from 4.5.31 to 4.5.32
Bumps [clap](https://github.com/clap-rs/clap) from 4.5.31 to 4.5.32.
- [Release notes](https://github.com/clap-rs/clap/releases)
- [Changelog](https://github.com/clap-rs/clap/blob/master/CHANGELOG.md)
- [Commits](https://github.com/clap-rs/clap/compare/v4.5.31...clap_complete-v4.5.32)

---
updated-dependencies:
- dependency-name: clap
  dependency-type: direct:production
  update-type: version-update:semver-patch
...

Signed-off-by: dependabot[bot] <support@github.com>
2025-03-11 03:40:49 +00:00
Daniel Hofstetter b263b20801 Merge pull request #500 from uutils/dependabot/cargo/tempfile-3.18.0
build(deps): bump tempfile from 3.17.1 to 3.18.0
2025-03-07 07:05:56 +01:00
dependabot[bot] 5ae9315c1b build(deps): bump tempfile from 3.17.1 to 3.18.0
Bumps [tempfile](https://github.com/Stebalien/tempfile) from 3.17.1 to 3.18.0.
- [Changelog](https://github.com/Stebalien/tempfile/blob/master/CHANGELOG.md)
- [Commits](https://github.com/Stebalien/tempfile/compare/v3.17.1...v3.18.0)

---
updated-dependencies:
- dependency-name: tempfile
  dependency-type: direct:production
  update-type: version-update:semver-minor
...

Signed-off-by: dependabot[bot] <support@github.com>
2025-03-07 03:51:50 +00:00
hanbings 87459296e6 Merge pull request #499 from cakebaker/bump_dependencies_to_remove_older_windows_sys
Bump dependencies to remove two `windows-sys` versions
2025-03-02 16:55:08 +08:00
Daniel Hofstetter e9374afc99 Bump deps to remove two windows-sys versions
anstream from 0.6.12 to 0.6.18
anstyle-query from 1.0.0 to 1.1.2
anstyle-wincon from 3.0.1 to 3.0.7
parking_lot_core from 0.9.9 to 0.9.10
winapi-util from 0.1.8 to 0.1.9
2025-03-01 15:52:30 +01:00
hanbings 1ea16258c3 Merge pull request #498 from cakebaker/find_fix_unused_import_on_windows
find: fix "unused import" warning on Windows
2025-03-01 00:12:14 +08:00
Daniel Hofstetter 9226ff10b6 find: fix "unused import" warning on Windows 2025-02-28 16:52:46 +01:00
Daniel Hofstetter 8c93719bfc Merge pull request #495 from uutils/dependabot/cargo/tempfile-3.17.1
build(deps): bump tempfile from 3.13.0 to 3.17.1
2025-02-28 16:51:03 +01:00
Daniel Hofstetter 629f5b793d Merge pull request #485 from uutils/dependabot/cargo/predicates-3.1.3
build(deps): bump predicates from 3.1.2 to 3.1.3
2025-02-28 16:50:14 +01:00
Daniel Hofstetter d7ce651130 Merge pull request #491 from uutils/dependabot/cargo/once_cell-1.20.3
build(deps): bump once_cell from 1.20.2 to 1.20.3
2025-02-28 16:48:51 +01:00
Daniel Hofstetter 7be665cbbe Merge pull request #496 from uutils/dependabot/cargo/clap-4.5.31
build(deps): bump clap from 4.5.20 to 4.5.31
2025-02-28 16:43:05 +01:00
dependabot[bot] 5319654dfb build(deps): bump clap from 4.5.20 to 4.5.31
Bumps [clap](https://github.com/clap-rs/clap) from 4.5.20 to 4.5.31.
- [Release notes](https://github.com/clap-rs/clap/releases)
- [Changelog](https://github.com/clap-rs/clap/blob/master/CHANGELOG.md)
- [Commits](https://github.com/clap-rs/clap/compare/clap_complete-v4.5.20...v4.5.31)

---
updated-dependencies:
- dependency-name: clap
  dependency-type: direct:production
  update-type: version-update:semver-patch
...

Signed-off-by: dependabot[bot] <support@github.com>
2025-02-25 03:03:17 +00:00
dependabot[bot] 145b96871a build(deps): bump tempfile from 3.13.0 to 3.17.1
Bumps [tempfile](https://github.com/Stebalien/tempfile) from 3.13.0 to 3.17.1.
- [Changelog](https://github.com/Stebalien/tempfile/blob/master/CHANGELOG.md)
- [Commits](https://github.com/Stebalien/tempfile/compare/v3.13.0...v3.17.1)

---
updated-dependencies:
- dependency-name: tempfile
  dependency-type: direct:production
  update-type: version-update:semver-minor
...

Signed-off-by: dependabot[bot] <support@github.com>
2025-02-18 03:38:09 +00:00
dependabot[bot] fb4108192c build(deps): bump once_cell from 1.20.2 to 1.20.3
Bumps [once_cell](https://github.com/matklad/once_cell) from 1.20.2 to 1.20.3.
- [Changelog](https://github.com/matklad/once_cell/blob/master/CHANGELOG.md)
- [Commits](https://github.com/matklad/once_cell/compare/v1.20.2...v1.20.3)

---
updated-dependencies:
- dependency-name: once_cell
  dependency-type: direct:production
  update-type: version-update:semver-patch
...

Signed-off-by: dependabot[bot] <support@github.com>
2025-02-14 08:06:30 +00:00
Sylvestre Ledru e0397917e4 Merge pull request #470 from cakebaker/ci_fix_code_coverage
ci: use `-Cinstrument-coverage` instead of `-Zprofile`
2025-02-13 18:16:44 +01:00
Daniel Hofstetter 9d1a97768f ci: use -Cinstrument-coverage instead of -Zprofile
and use cargo-llvm-cov instead of grcov.

Support for -Zprofile has been removed from Rust nightly: https://github.com/rust-lang/rust/pull/131829
2025-02-07 14:45:53 +01:00
dependabot[bot] fc3de09ca2 build(deps): bump predicates from 3.1.2 to 3.1.3
Bumps [predicates](https://github.com/assert-rs/predicates-rs) from 3.1.2 to 3.1.3.
- [Changelog](https://github.com/assert-rs/predicates-rs/blob/master/CHANGELOG.md)
- [Commits](https://github.com/assert-rs/predicates-rs/compare/v3.1.2...v3.1.3)

---
updated-dependencies:
- dependency-name: predicates
  dependency-type: direct:production
  update-type: version-update:semver-patch
...

Signed-off-by: dependabot[bot] <support@github.com>
2025-01-20 09:34:31 +00:00
hanbings 78e520106c Merge pull request #486 from sylvestre/uucore
Update to uucore 0.0.29
2025-01-20 17:33:23 +08:00
Sylvestre Ledru a21c379953 Update to uucore 0.0.29 2025-01-20 10:12:10 +01:00
Sylvestre Ledru c45e474c7e Merge pull request #487 from hanbings/fix-ci
ci: Fix issues related to downloading builds in ci.
2025-01-20 10:11:35 +01:00
hanbings f536f813e2 Run cargo clippy. 2025-01-20 16:22:17 +08:00
hanbings 8685fa5c64 Switch to using js script to download builds. 2025-01-20 16:16:28 +08:00
Sylvestre Ledru b7f93ea816 Merge pull request #475 from cakebaker/find_fix_clippy_warnings
find: fix new clippy warnings
2025-01-20 08:47:09 +01:00
hanbings 10c24ca5f1 Update action-download-artifact to try to fix the download issue. 2025-01-20 03:25:00 +08:00
hanbings 33cd6573aa Adjust CI to new configuration files for Ubuntu 24.04. 2025-01-20 03:00:24 +08:00
hanbings 6ce5ffaa9e Adjust CI to new configuration files for Ubuntu 24.04. 2025-01-20 02:49:28 +08:00
dependabot[bot] 78b264deae build(deps): bump serial_test from 3.1.1 to 3.2.0 (#471)
Bumps [serial_test](https://github.com/palfrey/serial_test) from 3.1.1 to 3.2.0.
- [Release notes](https://github.com/palfrey/serial_test/releases)
- [Commits](https://github.com/palfrey/serial_test/compare/v3.1.1...v3.2.0)

---
updated-dependencies:
- dependency-name: serial_test
  dependency-type: direct:production
  update-type: version-update:semver-minor
...

Signed-off-by: dependabot[bot] <support@github.com>
Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>
2025-01-20 02:25:13 +08:00
Daniel Hofstetter 3fa75542c4 find: fix needless_lifetimes warning 2024-11-29 10:23:25 +01:00
Daniel Hofstetter 4e954a7a41 find: fix empty_line_after_outer_attr warnings 2024-11-29 10:20:45 +01:00
Daniel Hofstetter 50b7ec67e0 Merge pull request #468 from uutils/dependabot/cargo/regex-1.11.1
build(deps): bump regex from 1.11.0 to 1.11.1
2024-10-25 07:03:50 +02:00
dependabot[bot] b3f4deda63 build(deps): bump regex from 1.11.0 to 1.11.1
Bumps [regex](https://github.com/rust-lang/regex) from 1.11.0 to 1.11.1.
- [Release notes](https://github.com/rust-lang/regex/releases)
- [Changelog](https://github.com/rust-lang/regex/blob/master/CHANGELOG.md)
- [Commits](https://github.com/rust-lang/regex/compare/1.11.0...1.11.1)

---
updated-dependencies:
- dependency-name: regex
  dependency-type: direct:production
  update-type: version-update:semver-patch
...

Signed-off-by: dependabot[bot] <support@github.com>
2024-10-25 03:10:12 +00:00
dependabot[bot] 1b3ad03b1f build(deps): bump clap from 4.5.18 to 4.5.20 (#465)
Bumps [clap](https://github.com/clap-rs/clap) from 4.5.18 to 4.5.20.
- [Release notes](https://github.com/clap-rs/clap/releases)
- [Changelog](https://github.com/clap-rs/clap/blob/master/CHANGELOG.md)
- [Commits](https://github.com/clap-rs/clap/compare/clap_complete-v4.5.18...clap_complete-v4.5.20)

---
updated-dependencies:
- dependency-name: clap
  dependency-type: direct:production
  update-type: version-update:semver-patch
...

Signed-off-by: dependabot[bot] <support@github.com>
Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>
Co-authored-by: hanbings <hanbings@hanbings.io>
2024-10-19 15:19:54 +08:00
dependabot[bot] 11a0b64c91 build(deps): bump once_cell from 1.20.0 to 1.20.2 (#464)
Bumps [once_cell](https://github.com/matklad/once_cell) from 1.20.0 to 1.20.2.
- [Changelog](https://github.com/matklad/once_cell/blob/master/CHANGELOG.md)
- [Commits](https://github.com/matklad/once_cell/compare/v1.20.0...v1.20.2)

---
updated-dependencies:
- dependency-name: once_cell
  dependency-type: direct:production
  update-type: version-update:semver-patch
...

Signed-off-by: dependabot[bot] <support@github.com>
Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>
Co-authored-by: hanbings <hanbings@hanbings.io>
2024-10-19 15:03:20 +08:00
dependabot[bot] 2e9e90887f build(deps): bump tempfile from 3.12.0 to 3.13.0 (#458)
Bumps [tempfile](https://github.com/Stebalien/tempfile) from 3.12.0 to 3.13.0.
- [Changelog](https://github.com/Stebalien/tempfile/blob/master/CHANGELOG.md)
- [Commits](https://github.com/Stebalien/tempfile/compare/v3.12.0...v3.13.0)

---
updated-dependencies:
- dependency-name: tempfile
  dependency-type: direct:production
  update-type: version-update:semver-minor
...

Signed-off-by: dependabot[bot] <support@github.com>
Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>
Co-authored-by: hanbings <hanbings@hanbings.io>
2024-10-19 14:53:16 +08:00
Phillips Horselover 526079b5d3 find/time: calculate midnight with local time zone (#467)
* find/time: calculate midnight with local time zone

* find/time: remove deprecated functions

* find/time: add test for local midnight calculation
2024-10-19 14:33:37 +08:00
Daniel Hofstetter dce8b2dda5 Merge pull request #460 from uutils/dependabot/cargo/regex-1.11.0
build(deps): bump regex from 1.10.6 to 1.11.0
2024-09-30 08:25:19 +02:00
dependabot[bot] fb7a56be63 build(deps): bump regex from 1.10.6 to 1.11.0
Bumps [regex](https://github.com/rust-lang/regex) from 1.10.6 to 1.11.0.
- [Release notes](https://github.com/rust-lang/regex/releases)
- [Changelog](https://github.com/rust-lang/regex/blob/master/CHANGELOG.md)
- [Commits](https://github.com/rust-lang/regex/compare/1.10.6...1.11.0)

---
updated-dependencies:
- dependency-name: regex
  dependency-type: direct:production
  update-type: version-update:semver-minor
...

Signed-off-by: dependabot[bot] <support@github.com>
2024-09-30 03:03:45 +00:00
Tavian Barnes acbfcc52ca find/glob: Don't use $. as a non-matching regex (#457)
The oniguruma version built by onig_sys does not include the commit
6f7b0aa ("add ONIG_SYN_BRE_ANCHOR_AT_EDGE_OF_SUBEXP into
ONIG_SYNTAX_POSIX_BASIC and ONIG_SYNTAX_GREP"), causing `$.` to actually
match a literal newline.

Using `$.` is not portable anyway; POSIX says

> A <dollar-sign> ( '$' ) shall be an anchor when used as the last
> character of an entire BRE.
2024-09-27 13:23:31 +08:00
Andrew Liebenow b641b85239 Print help/version without error prefix (#455)
* xargs: print help/version without error prefix

xargs, when executed with -h/--help or -V/--version, is printing an
"Error: " prefix before the help and version text. The exit code is
also incorrect (1, instead of 0).

Display the help/version text without the erroneous prefix, and exit
with the correct exit code (success, 0).

Add tests for this bug to prevent regressions.
2024-09-23 22:20:05 +02:00
Daniel Hofstetter eefc5804d4 Merge pull request #456 from uutils/dependabot/cargo/clap-4.5.18
build(deps): bump clap from 4.5.17 to 4.5.18
2024-09-23 07:08:29 +02:00
dependabot[bot] 309d3d9211 build(deps): bump clap from 4.5.17 to 4.5.18
Bumps [clap](https://github.com/clap-rs/clap) from 4.5.17 to 4.5.18.
- [Release notes](https://github.com/clap-rs/clap/releases)
- [Changelog](https://github.com/clap-rs/clap/blob/master/CHANGELOG.md)
- [Commits](https://github.com/clap-rs/clap/compare/clap_complete-v4.5.17...clap_complete-v4.5.18)

---
updated-dependencies:
- dependency-name: clap
  dependency-type: direct:production
  update-type: version-update:semver-patch
...

Signed-off-by: dependabot[bot] <support@github.com>
2024-09-23 03:24:18 +00:00
Sylvestre Ledru 9d66be6b7d manage the special case 'find %A+ (#454)
* declare the variable where it is used

* manage the special case 'find %A+'

Closes: #451
2024-09-22 16:15:53 +08:00
hanbings 27d95aa1cc Implement -fprintf (#444) 2024-09-21 21:49:04 +02:00
dependabot[bot] 05493375c7 build(deps): bump once_cell from 1.19.0 to 1.20.0 (#452)
Bumps [once_cell](https://github.com/matklad/once_cell) from 1.19.0 to 1.20.0.
- [Changelog](https://github.com/matklad/once_cell/blob/master/CHANGELOG.md)
- [Commits](https://github.com/matklad/once_cell/compare/v1.19.0...v1.20.0)

---
updated-dependencies:
- dependency-name: once_cell
  dependency-type: direct:production
  update-type: version-update:semver-minor
...

Signed-off-by: dependabot[bot] <support@github.com>
Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>
2024-09-16 12:43:27 +08:00
dependabot[bot] 7f3c00db69 build(deps): bump pretty_assertions from 1.4.0 to 1.4.1 (#453)
Bumps [pretty_assertions](https://github.com/rust-pretty-assertions/rust-pretty-assertions) from 1.4.0 to 1.4.1.
- [Release notes](https://github.com/rust-pretty-assertions/rust-pretty-assertions/releases)
- [Changelog](https://github.com/rust-pretty-assertions/rust-pretty-assertions/blob/main/CHANGELOG.md)
- [Commits](https://github.com/rust-pretty-assertions/rust-pretty-assertions/compare/v1.4.0...v1.4.1)

---
updated-dependencies:
- dependency-name: pretty_assertions
  dependency-type: direct:production
  update-type: version-update:semver-patch
...

Signed-off-by: dependabot[bot] <support@github.com>
Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>
2024-09-16 12:39:30 +08:00
hanbings 4d367891dc Implement -fprint0 (#443) 2024-09-09 18:36:44 +02:00
61 changed files with 7704 additions and 2796 deletions
+15
View File
@@ -0,0 +1,15 @@
name: Security audit
on:
schedule:
- cron: "0 0 * * *"
jobs:
audit:
runs-on: ubuntu-latest
steps:
- uses: actions/checkout@v6
with:
persist-credentials: false
- uses: rustsec/audit-check@v2
with:
token: ${{ secrets.GITHUB_TOKEN }}
+20 -73
View File
@@ -2,6 +2,9 @@ on: [push, pull_request]
name: Basic CI
env:
CARGO_INCREMENTAL: "0"
jobs:
check:
name: cargo check
@@ -10,13 +13,7 @@ jobs:
matrix:
os: [ubuntu-latest, macOS-latest, windows-latest]
steps:
- uses: actions/checkout@v4
- name: Install `rust` toolchain
run: |
## Install `rust` toolchain
rustup toolchain install stable --no-self-update -c rustfmt --profile minimal
rustup default stable
- uses: actions/checkout@v6
# For bindgen: https://github.com/rust-lang/rust-bindgen/issues/1797
- uses: KyleMayes/install-llvm-action@v2
if: matrix.os == 'windows-latest'
@@ -37,13 +34,7 @@ jobs:
matrix:
os: [ubuntu-latest, macOS-latest, windows-latest]
steps:
- uses: actions/checkout@v4
- name: Install `rust` toolchain
run: |
## Install `rust` toolchain
rustup toolchain install stable --no-self-update -c rustfmt --profile minimal
rustup default stable
- uses: actions/checkout@v6
# For bindgen: https://github.com/rust-lang/rust-bindgen/issues/1797
- uses: KyleMayes/install-llvm-action@v2
if: matrix.os == 'windows-latest'
@@ -61,14 +52,7 @@ jobs:
name: cargo fmt --all -- --check
runs-on: ubuntu-latest
steps:
- uses: actions/checkout@v4
- name: Install `rust` toolchain
run: |
## Install `rust` toolchain
rustup toolchain install stable --no-self-update -c rustfmt --profile minimal
rustup default stable
- run: rustup component add rustfmt
- uses: actions/checkout@v6
- name: cargo fmt
run: |
cargo fmt --all -- --check
@@ -77,15 +61,8 @@ jobs:
name: cargo clippy -- -D warnings
runs-on: ubuntu-latest
steps:
- uses: actions/checkout@v4
- name: Install `rust` toolchain
run: |
## Install `rust` toolchain
rustup toolchain install stable --no-self-update -c rustfmt --profile minimal
rustup default stable
- run: rustup component add clippy
- name: cargo clippy
run: |
- uses: actions/checkout@v6
- run: |
cargo clippy --all-targets -- -D warnings
grcov:
@@ -95,59 +72,29 @@ jobs:
matrix:
os:
- ubuntu-latest
toolchain:
- nightly
cargo_flags:
- "--all-features"
steps:
- name: Checkout source code
uses: actions/checkout@v4
- name: Install `rust` toolchain
run: |
## Install `rust` toolchain
rustup toolchain install nightly --no-self-update -c rustfmt --profile minimal
rustup default nightly
- name: "`grcov` ~ install"
run: cargo install grcov
- name: cargo test
run: |
cargo test --all --no-fail-fast ${{ matrix.cargo_flags }}
uses: actions/checkout@v6
- name: Install cargo-llvm-cov
uses: taiki-e/install-action@cargo-llvm-cov
- name: Generate code coverage
env:
CARGO_INCREMENTAL: "0"
RUSTFLAGS: "-Zprofile -Ccodegen-units=1 -Copt-level=0 -Clink-dead-code -Coverflow-checks=off -Zpanic_abort_tests -Cpanic=abort -Cdebug-assertions=off"
RUSTDOCFLAGS: "-Zprofile -Ccodegen-units=1 -Copt-level=0 -Clink-dead-code -Coverflow-checks=off -Zpanic_abort_tests -Cpanic=abort -Cdebug-assertions=off"
- name: Generate coverage data
id: grcov
RUSTC_BOOTSTRAP: 1
run: |
grcov target/debug/ \
--branch \
--llvm \
--source-dir . \
--output-path lcov.info \
--ignore-not-existing \
--excl-line "#\\[derive\\(" \
--excl-br-line "#\\[derive\\(" \
--excl-start "#\\[cfg\\(test\\)\\]" \
--excl-br-start "#\\[cfg\\(test\\)\\]" \
--commit-sha ${{ github.sha }} \
--service-job-id ${{ github.job }} \
--service-name "GitHub Actions" \
--service-number ${{ github.run_id }}
cargo llvm-cov --all-features --lcov --branch --output-path lcov.info
- name: Upload coverage as artifact
uses: actions/upload-artifact@v4
uses: actions/upload-artifact@v7
with:
name: lcov.info
# path: ${{ steps.grcov.outputs.report }}
path: lcov.info
- name: Upload coverage to codecov.io
uses: codecov/codecov-action@v4
uses: codecov/codecov-action@v7
with:
token: ${{ secrets.CODECOV_TOKEN }}
# file: ${{ steps.grcov.outputs.report }}
file: lcov.info
files: lcov.info
fail_ci_if_error: true
env:
CODECOV_TOKEN: ${{ secrets.CODECOV_TOKEN }}
+37
View File
@@ -0,0 +1,37 @@
name: CodSpeed
on:
push:
branches:
- "main"
pull_request:
# `workflow_dispatch` allows CodSpeed to trigger backtest
# performance analysis in order to generate initial data.
workflow_dispatch:
permissions:
contents: read
id-token: write
jobs:
codspeed:
name: Run benchmarks
runs-on: ubuntu-latest
steps:
- uses: actions/checkout@v6
- name: Setup Rust toolchain, cache and cargo-codspeed binary
uses: moonrepo/setup-rust@v1
with:
channel: stable
cache-target: release
bins: cargo-codspeed
- name: Build the benchmark target(s)
run: cargo codspeed build
- name: Run the benchmarks
uses: CodSpeedHQ/action@v4
with:
mode: simulation
run: cargo codspeed run
+2 -2
View File
@@ -18,7 +18,7 @@ jobs:
steps:
- name: List Annotations
uses: actions/github-script@v7
uses: actions/github-script@v9
with:
script: |
let artifacts = await github.rest.actions.listWorkflowRunArtifacts({
@@ -46,7 +46,7 @@ jobs:
- run: unzip comment.zip
- name: Comment on PR
uses: actions/github-script@v7
uses: actions/github-script@v9
with:
github-token: ${{ secrets.GITHUB_TOKEN }}
script: |
+122 -61
View File
@@ -1,33 +1,41 @@
on: [push, pull_request]
name: External-testsuites
env:
CARGO_INCREMENTAL: "0"
jobs:
gnu-tests:
permissions:
actions: read
contents: write # Publish binaries instead of discarding
name: Run GNU findutils tests
runs-on: ubuntu-latest
steps:
- name: Checkout findutils
uses: actions/checkout@v4
uses: actions/checkout@v6
with:
path: findutils
- name: Checkout GNU findutils
uses: actions/checkout@v4
uses: actions/checkout@v6
with:
repository: gnu-mirror-unofficial/findutils
path: findutils.gnu
ref: 5768a03ddfb5e18b1682e339d6cdd24ff721c510
submodules: true
- name: Install `rust` toolchain
submodules: false
- name: Override submodule URL and initialize submodules
# Use github instead of upstream git server
run: |
## Install `rust` toolchain
rustup toolchain install stable --no-self-update -c rustfmt --profile minimal
rustup default stable
git submodule sync --recursive
git config submodule.gnulib.url https://github.com/coreutils/gnulib.git
git submodule update --init --recursive --depth 1
working-directory: findutils.gnu
- name: Install dependencies
shell: bash
run: |
# Enable sources & install dependencies
sudo find /etc/apt/sources.list* -type f -exec sed -i 'p; s/^deb /deb-src /' '{}' +
sudo sed -i 's/^Types: deb$/Types: deb deb-src/' /etc/apt/sources.list.d/ubuntu.sources
sudo apt-get update
sudo apt-get build-dep findutils
- name: Run GNU tests
@@ -35,11 +43,27 @@ jobs:
run: |
cd findutils
bash util/build-gnu.sh ||:
install --strip -Dm755 target/release/{find,xargs} -t findutils-x86_64-unknown-linux-gnu
ZSTD_CLEVEL=19 tar --zstd -caf ../findutils-x86_64-unknown-linux-gnu.tar.zst findutils-x86_64-unknown-linux-gnu
- name: Publish latest commit
uses: softprops/action-gh-release@v3
if: github.event_name == 'push' && github.ref == 'refs/heads/main'
with:
tag_name: latest-commit
body: |
commit: ${{ github.sha }}
draft: false
prerelease: true
files: |
findutils-x86_64-unknown-linux-gnu.tar.zst
env:
GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }}
- name: Extract testing info
shell: bash
run: |
- name: Upload gnu-test-report
uses: actions/upload-artifact@v4
uses: actions/upload-artifact@v7
with:
name: gnu-test-report
path: |
@@ -47,28 +71,47 @@ jobs:
findutils.gnu/xargs/testsuite/*.log
findutils.gnu/tests/**/*.log
- name: Upload gnu-result
uses: actions/upload-artifact@v4
uses: actions/upload-artifact@v7
with:
name: gnu-result
path: gnu-result.json
- name: Download the result
uses: dawidd6/action-download-artifact@v6
- name: Download artifacts (gnu-result and gnu-test-report)
uses: actions/github-script@v9
with:
workflow: compat.yml
workflow_conclusion: completed
name: gnu-result
repo: uutils/findutils
branch: main
path: dl
- name: Download the log
uses: dawidd6/action-download-artifact@v6
with:
workflow: compat.yml
workflow_conclusion: completed
name: gnu-test-report
repo: uutils/findutils
branch: main
path: dl
script: |
let fs = require('fs');
fs.mkdirSync('${{ github.workspace }}/dl', { recursive: true });
async function downloadArtifact(artifactName) {
// List all artifacts from the workflow run
let artifacts = await github.rest.actions.listWorkflowRunArtifacts({
owner: context.repo.owner,
repo: context.repo.repo,
run_id: ${{ github.run_id }},
});
// Find the specified artifact
let matchArtifact = artifacts.data.artifacts.find((artifact) => artifact.name === artifactName);
if (!matchArtifact) {
throw new Error(`Artifact "${artifactName}" not found.`);
}
// Download the artifact
let download = await github.rest.actions.downloadArtifact({
owner: context.repo.owner,
repo: context.repo.repo,
artifact_id: matchArtifact.id,
archive_format: 'zip',
});
// Save the artifact to a file
fs.writeFileSync(`${{ github.workspace }}/dl/${artifactName}.zip`, Buffer.from(download.data));
}
// Download the required artifacts
await downloadArtifact("gnu-result");
await downloadArtifact("gnu-test-report");
- name: Compare failing tests against master
shell: bash
run: |
@@ -76,6 +119,8 @@ jobs:
- name: Compare against main results
shell: bash
run: |
unzip dl/gnu-result.zip -d dl/
unzip dl/gnu-test-report.zip -d dl/
mv dl/gnu-result.json latest-gnu-result.json
python findutils/util/compare_gnu_result.py
@@ -84,60 +129,74 @@ jobs:
runs-on: ubuntu-latest
steps:
- name: Checkout findutils
uses: actions/checkout@v4
uses: actions/checkout@v6
with:
path: findutils
- name: Checkout BFS
uses: actions/checkout@v4
uses: actions/checkout@v6
with:
repository: tavianator/bfs
path: bfs
ref: "4.0"
- name: Install `rust` toolchain
run: |
## Install `rust` toolchain
rustup toolchain install stable --no-self-update -c rustfmt --profile minimal
rustup default stable
- name: Install dependencies
shell: bash
run: |
# Enable sources & install dependencies
sudo find /etc/apt/sources.list* -type f -exec sed -i 'p; s/^deb /deb-src /' '{}' +
sudo sed -i 's/^Types: deb$/Types: deb deb-src/' /etc/apt/sources.list.d/ubuntu.sources
sudo apt-get update
sudo apt-get build-dep bfs
- name: Run BFS tests
shell: bash
run: |
cd findutils
export CARGO_INCREMENTAL=0
bash util/build-bfs.sh ||:
- name: Upload bfs-test-report
uses: actions/upload-artifact@v4
uses: actions/upload-artifact@v7
with:
name: bfs-test-report
path: bfs/tests.log
- name: Upload bfs-result
uses: actions/upload-artifact@v4
uses: actions/upload-artifact@v7
with:
name: bfs-result
path: bfs-result.json
- name: Download the result
uses: dawidd6/action-download-artifact@v6
- name: Download artifacts (gnu-result and bfs-test-report)
uses: actions/github-script@v9
with:
workflow: compat.yml
workflow_conclusion: completed
name: bfs-result
repo: uutils/findutils
branch: main
path: dl
- name: Download the log
uses: dawidd6/action-download-artifact@v6
with:
workflow: compat.yml
workflow_conclusion: completed
name: bfs-test-report
repo: uutils/findutils
branch: main
path: dl
script: |
let fs = require('fs');
fs.mkdirSync('${{ github.workspace }}/dl', { recursive: true });
async function downloadArtifact(artifactName) {
// List all artifacts from the workflow run
let artifacts = await github.rest.actions.listWorkflowRunArtifacts({
owner: context.repo.owner,
repo: context.repo.repo,
run_id: ${{ github.run_id }},
});
// Find the specified artifact
let matchArtifact = artifacts.data.artifacts.find((artifact) => artifact.name === artifactName);
if (!matchArtifact) {
throw new Error(`Artifact "${artifactName}" not found.`);
}
// Download the artifact
let download = await github.rest.actions.downloadArtifact({
owner: context.repo.owner,
repo: context.repo.repo,
artifact_id: matchArtifact.id,
archive_format: 'zip',
});
// Save the artifact to a file
fs.writeFileSync(`${{ github.workspace }}/dl/${artifactName}.zip`, Buffer.from(download.data));
}
// Download the required artifacts
await downloadArtifact("bfs-result");
await downloadArtifact("bfs-test-report");
- name: Compare failing tests against main
shell: bash
run: |
@@ -145,6 +204,8 @@ jobs:
- name: Compare against main results
shell: bash
run: |
unzip dl/bfs-result.zip -d dl/
unzip dl/bfs-test-report.zip -d dl/
mv dl/bfs-result.json latest-bfs-result.json
python findutils/util/compare_bfs_result.py
@@ -156,8 +217,8 @@ jobs:
steps:
- name: List Annotations
uses: actions/github-script@v7
uses: actions/github-script@v9
with:
script: |
let runs = await github.rest.checks.listForRef({
@@ -177,7 +238,7 @@ jobs:
repo: context.repo.repo,
check_run_id: result.id
});
run.data.forEach(data => {
annotations.data.push({
run: result.name,
@@ -187,14 +248,14 @@ jobs:
}
// Remove duplicate items.
annotations.data = annotations.data.filter((value, index, self) =>
annotations.data = annotations.data.filter((value, index, self) =>
self.findIndex(v => v.annotation.message === value.annotation.message) === index);
let fs = require('fs');
fs.writeFileSync('${{ github.workspace }}/annotations.json', JSON.stringify(annotations));
- name: Upload annotations
uses: actions/upload-artifact@v4
uses: actions/upload-artifact@v7
with:
name: comment
path: annotations.json
path: annotations.json
+99 -74
View File
@@ -1,20 +1,21 @@
# Copyright 2022-2023, axodotdev
# This file was autogenerated by dist: https://opensource.axo.dev/cargo-dist/
#
# Copyright 2022-2024, axodotdev
# SPDX-License-Identifier: MIT or Apache-2.0
#
# CI that:
#
# * checks for a Git Tag that looks like a release
# * builds artifacts with cargo-dist (archives, installers, hashes)
# * builds artifacts with dist (archives, installers, hashes)
# * uploads those artifacts to temporary workflow zip
# * on success, uploads the artifacts to a Github Release
# * on success, uploads the artifacts to a GitHub Release
#
# Note that the Github Release will be created with a generated
# Note that the GitHub Release will be created with a generated
# title/body based on your changelogs.
name: Release
permissions:
contents: write
"contents": "write"
# This task will run whenever you push a git tag that looks like a version
# like "1.0.0", "v0.1.0-prerelease.1", "my-app/0.1.0", "releases/v1.0.0", etc.
@@ -23,30 +24,30 @@ permissions:
# must be a Cargo-style SemVer Version (must have at least major.minor.patch).
#
# If PACKAGE_NAME is specified, then the announcement will be for that
# package (erroring out if it doesn't have the given version or isn't cargo-dist-able).
# package (erroring out if it doesn't have the given version or isn't dist-able).
#
# If PACKAGE_NAME isn't specified, then the announcement will be for all
# (cargo-dist-able) packages in the workspace with that version (this mode is
# (dist-able) packages in the workspace with that version (this mode is
# intended for workspaces with only one dist-able package, or with all dist-able
# packages versioned/released in lockstep).
#
# If you push multiple tags at once, separate instances of this workflow will
# spin up, creating an independent announcement for each one. However Github
# spin up, creating an independent announcement for each one. However, GitHub
# will hard limit this to 3 tags per commit, as it will assume more tags is a
# mistake.
#
# If there's a prerelease-style suffix to the version, then the release(s)
# will be marked as a prerelease.
on:
pull_request:
push:
tags:
- '**[0-9]+.[0-9]+.[0-9]+*'
pull_request:
jobs:
# Run 'cargo dist plan' (or host) to determine what tasks we need to do
# Run 'dist plan' (or host) to determine what tasks we need to do
plan:
runs-on: ubuntu-latest
runs-on: "ubuntu-latest"
outputs:
val: ${{ steps.plan.outputs.manifest }}
tag: ${{ !github.event.pull_request && github.ref_name || '' }}
@@ -55,14 +56,19 @@ jobs:
env:
GH_TOKEN: ${{ secrets.GITHUB_TOKEN }}
steps:
- uses: actions/checkout@v4
- uses: actions/checkout@v6
with:
submodules: recursive
- name: Install cargo-dist
- name: Install dist
# we specify bash to get pipefail; it guards against the `curl` command
# failing. otherwise `sh` won't catch that `curl` returned non-0
shell: bash
run: "curl --proto '=https' --tlsv1.2 -LsSf https://github.com/axodotdev/cargo-dist/releases/download/v0.12.0/cargo-dist-installer.sh | sh"
run: "curl --proto '=https' --tlsv1.2 -LsSf https://github.com/axodotdev/cargo-dist/releases/download/v0.28.0/cargo-dist-installer.sh | sh"
- name: Cache dist
uses: actions/upload-artifact@v7
with:
name: cargo-dist-cache
path: ~/.cargo/bin/dist
# sure would be cool if github gave us proper conditionals...
# so here's a doubly-nested ternary-via-truthiness to try to provide the best possible
# functionality based on whether this is a pull_request, and whether it's from a fork.
@@ -70,12 +76,12 @@ jobs:
# but also really annoying to build CI around when it needs secrets to work right.)
- id: plan
run: |
cargo dist ${{ (!github.event.pull_request && format('host --steps=create --tag={0}', github.ref_name)) || 'plan' }} --output-format=json > plan-dist-manifest.json
echo "cargo dist ran successfully"
dist ${{ (!github.event.pull_request && format('host --steps=create --tag={0}', github.ref_name)) || 'plan' }} --output-format=json > plan-dist-manifest.json
echo "dist ran successfully"
cat plan-dist-manifest.json
echo "manifest=$(jq -c "." plan-dist-manifest.json)" >> "$GITHUB_OUTPUT"
- name: "Upload dist-manifest.json"
uses: actions/upload-artifact@v4
uses: actions/upload-artifact@v7
with:
name: artifacts-plan-dist-manifest
path: plan-dist-manifest.json
@@ -89,31 +95,41 @@ jobs:
if: ${{ fromJson(needs.plan.outputs.val).ci.github.artifacts_matrix.include != null && (needs.plan.outputs.publishing == 'true' || fromJson(needs.plan.outputs.val).ci.github.pr_run_mode == 'upload') }}
strategy:
fail-fast: false
# Target platforms/runners are computed by cargo-dist in create-release.
# Target platforms/runners are computed by dist in create-release.
# Each member of the matrix has the following arguments:
#
# - runner: the github runner
# - dist-args: cli flags to pass to cargo dist
# - install-dist: expression to run to install cargo-dist on the runner
# - dist-args: cli flags to pass to dist
# - install-dist: expression to run to install dist on the runner
#
# Typically there will be:
# - 1 "global" task that builds universal installers
# - N "local" tasks that build each platform's binaries and platform-specific installers
matrix: ${{ fromJson(needs.plan.outputs.val).ci.github.artifacts_matrix }}
runs-on: ${{ matrix.runner }}
container: ${{ matrix.container && matrix.container.image || null }}
env:
GH_TOKEN: ${{ secrets.GITHUB_TOKEN }}
BUILD_MANIFEST_NAME: target/distrib/${{ join(matrix.targets, '-') }}-dist-manifest.json
steps:
- uses: actions/checkout@v4
- name: enable windows longpaths
run: |
git config --global core.longpaths true
- uses: actions/checkout@v6
with:
submodules: recursive
- uses: swatinem/rust-cache@v2
- name: Install cargo-dist
run: ${{ matrix.install_dist }}
- name: Install Rust non-interactively if not already installed
if: ${{ matrix.container }}
run: |
if ! command -v cargo > /dev/null 2>&1; then
curl --proto '=https' --tlsv1.2 -sSf https://sh.rustup.rs | sh -s -- -y
echo "$HOME/.cargo/bin" >> $GITHUB_PATH
fi
- name: Install dist
run: ${{ matrix.install_dist.run }}
# Get the dist-manifest
- name: Fetch local artifacts
uses: actions/download-artifact@v4
uses: actions/download-artifact@v8
with:
pattern: artifacts-*
path: target/distrib/
@@ -124,8 +140,8 @@ jobs:
- name: Build artifacts
run: |
# Actually do builds and make zips and whatnot
cargo dist build ${{ needs.plan.outputs.tag-flag }} --print=linkage --output-format=json ${{ matrix.dist_args }} > dist-manifest.json
echo "cargo dist ran successfully"
dist build ${{ needs.plan.outputs.tag-flag }} --print=linkage --output-format=json ${{ matrix.dist_args }} > dist-manifest.json
echo "dist ran successfully"
- id: cargo-dist
name: Post-build
# We force bash here just because github makes it really hard to get values up
@@ -135,12 +151,12 @@ jobs:
run: |
# Parse out what we just built and upload it to scratch storage
echo "paths<<EOF" >> "$GITHUB_OUTPUT"
jq --raw-output ".artifacts[]?.path | select( . != null )" dist-manifest.json >> "$GITHUB_OUTPUT"
dist print-upload-files-from-manifest --manifest dist-manifest.json >> "$GITHUB_OUTPUT"
echo "EOF" >> "$GITHUB_OUTPUT"
cp dist-manifest.json "$BUILD_MANIFEST_NAME"
- name: "Upload artifacts"
uses: actions/upload-artifact@v4
uses: actions/upload-artifact@v7
with:
name: artifacts-build-local-${{ join(matrix.targets, '_') }}
path: |
@@ -152,20 +168,23 @@ jobs:
needs:
- plan
- build-local-artifacts
runs-on: "ubuntu-20.04"
runs-on: "ubuntu-latest"
env:
GH_TOKEN: ${{ secrets.GITHUB_TOKEN }}
BUILD_MANIFEST_NAME: target/distrib/global-dist-manifest.json
steps:
- uses: actions/checkout@v4
- uses: actions/checkout@v6
with:
submodules: recursive
- name: Install cargo-dist
shell: bash
run: "curl --proto '=https' --tlsv1.2 -LsSf https://github.com/axodotdev/cargo-dist/releases/download/v0.12.0/cargo-dist-installer.sh | sh"
- name: Install cached dist
uses: actions/download-artifact@v8
with:
name: cargo-dist-cache
path: ~/.cargo/bin/
- run: chmod +x ~/.cargo/bin/dist
# Get all the local artifacts for the global tasks to use (for e.g. checksums)
- name: Fetch local artifacts
uses: actions/download-artifact@v4
uses: actions/download-artifact@v8
with:
pattern: artifacts-*
path: target/distrib/
@@ -173,17 +192,17 @@ jobs:
- id: cargo-dist
shell: bash
run: |
cargo dist build ${{ needs.plan.outputs.tag-flag }} --output-format=json "--artifacts=global" > dist-manifest.json
echo "cargo dist ran successfully"
dist build ${{ needs.plan.outputs.tag-flag }} --output-format=json "--artifacts=global" > dist-manifest.json
echo "dist ran successfully"
# Parse out what we just built and upload it to scratch storage
echo "paths<<EOF" >> "$GITHUB_OUTPUT"
jq --raw-output ".artifacts[]?.path | select( . != null )" dist-manifest.json >> "$GITHUB_OUTPUT"
jq --raw-output ".upload_files[]" dist-manifest.json >> "$GITHUB_OUTPUT"
echo "EOF" >> "$GITHUB_OUTPUT"
cp dist-manifest.json "$BUILD_MANIFEST_NAME"
- name: "Upload artifacts"
uses: actions/upload-artifact@v4
uses: actions/upload-artifact@v7
with:
name: artifacts-build-global
path: |
@@ -199,55 +218,42 @@ jobs:
if: ${{ always() && needs.plan.outputs.publishing == 'true' && (needs.build-global-artifacts.result == 'skipped' || needs.build-global-artifacts.result == 'success') && (needs.build-local-artifacts.result == 'skipped' || needs.build-local-artifacts.result == 'success') }}
env:
GH_TOKEN: ${{ secrets.GITHUB_TOKEN }}
runs-on: "ubuntu-20.04"
runs-on: "ubuntu-latest"
outputs:
val: ${{ steps.host.outputs.manifest }}
steps:
- uses: actions/checkout@v4
- uses: actions/checkout@v6
with:
submodules: recursive
- name: Install cargo-dist
run: "curl --proto '=https' --tlsv1.2 -LsSf https://github.com/axodotdev/cargo-dist/releases/download/v0.12.0/cargo-dist-installer.sh | sh"
- name: Install cached dist
uses: actions/download-artifact@v8
with:
name: cargo-dist-cache
path: ~/.cargo/bin/
- run: chmod +x ~/.cargo/bin/dist
# Fetch artifacts from scratch-storage
- name: Fetch artifacts
uses: actions/download-artifact@v4
uses: actions/download-artifact@v8
with:
pattern: artifacts-*
path: target/distrib/
merge-multiple: true
# This is a harmless no-op for Github Releases, hosting for that happens in "announce"
- id: host
shell: bash
run: |
cargo dist host ${{ needs.plan.outputs.tag-flag }} --steps=upload --steps=release --output-format=json > dist-manifest.json
dist host ${{ needs.plan.outputs.tag-flag }} --steps=upload --steps=release --output-format=json > dist-manifest.json
echo "artifacts uploaded and released successfully"
cat dist-manifest.json
echo "manifest=$(jq -c "." dist-manifest.json)" >> "$GITHUB_OUTPUT"
- name: "Upload dist-manifest.json"
uses: actions/upload-artifact@v4
uses: actions/upload-artifact@v7
with:
# Overwrite the previous copy
name: artifacts-dist-manifest
path: dist-manifest.json
# Create a Github Release while uploading all files to it
announce:
needs:
- plan
- host
# use "always() && ..." to allow us to wait for all publish jobs while
# still allowing individual publish jobs to skip themselves (for prereleases).
# "host" however must run to completion, no skipping allowed!
if: ${{ always() && needs.host.result == 'success' }}
runs-on: "ubuntu-20.04"
env:
GH_TOKEN: ${{ secrets.GITHUB_TOKEN }}
steps:
- uses: actions/checkout@v4
with:
submodules: recursive
- name: "Download Github Artifacts"
uses: actions/download-artifact@v4
# Create a GitHub Release while uploading all files to it
- name: "Download GitHub Artifacts"
uses: actions/download-artifact@v8
with:
pattern: artifacts-*
path: artifacts
@@ -256,11 +262,30 @@ jobs:
run: |
# Remove the granular manifests
rm -f artifacts/*-dist-manifest.json
- name: Create Github Release
uses: ncipollo/release-action@v1
- name: Create GitHub Release
env:
PRERELEASE_FLAG: "${{ fromJson(steps.host.outputs.manifest).announcement_is_prerelease && '--prerelease' || '' }}"
ANNOUNCEMENT_TITLE: "${{ fromJson(steps.host.outputs.manifest).announcement_title }}"
ANNOUNCEMENT_BODY: "${{ fromJson(steps.host.outputs.manifest).announcement_github_body }}"
RELEASE_COMMIT: "${{ github.sha }}"
run: |
# Write and read notes from a file to avoid quoting breaking things
echo "$ANNOUNCEMENT_BODY" > $RUNNER_TEMP/notes.txt
gh release create "${{ needs.plan.outputs.tag }}" --draft --target "$RELEASE_COMMIT" $PRERELEASE_FLAG --title "$ANNOUNCEMENT_TITLE" --notes-file "$RUNNER_TEMP/notes.txt" artifacts/*
announce:
needs:
- plan
- host
# use "always() && ..." to allow us to wait for all publish jobs while
# still allowing individual publish jobs to skip themselves (for prereleases).
# "host" however must run to completion, no skipping allowed!
if: ${{ always() && needs.host.result == 'success' }}
runs-on: "ubuntu-latest"
env:
GH_TOKEN: ${{ secrets.GITHUB_TOKEN }}
steps:
- uses: actions/checkout@v6
with:
tag: ${{ needs.plan.outputs.tag }}
name: ${{ fromJson(needs.host.outputs.val).announcement_title }}
body: ${{ fromJson(needs.host.outputs.val).announcement_github_body }}
prerelease: ${{ fromJson(needs.host.outputs.val).announcement_is_prerelease }}
artifacts: "artifacts/*"
submodules: recursive
+2
View File
@@ -15,3 +15,5 @@ repos:
pass_filenames: false
types: [file, rust]
language: system
ci:
skip: [rust-linting, rust-clippy]
+3 -5
View File
@@ -11,6 +11,8 @@ check out these documents:
- Our community's [CODE_OF_CONDUCT.md](./CODE_OF_CONDUCT.md).
- [DEVELOPMENT.md](./DEVELOPMENT.md) for setting up your development
environment.
- Our [Review Guidelines](https://uutils.github.io/reviews/) for what we expect
from a pull request and how reviews are done.
Now follows a very important warning:
@@ -180,7 +182,7 @@ To ensure easy collaboration, we have guidelines for using Git and GitHub.
### Commit messages
You can read this section in the Git book to learn how to write good commit
messages: https://git-scm.com/book/ch5-2.html.
messages: https://git-scm.com/book/en/v2/Distributed-Git-Contributing-to-a-Project.
In addition, here are a few examples for a summary line when committing to
uutils:
@@ -231,10 +233,6 @@ you contribute must at least compile without warnings for all platforms in the
CI. However, you can use `#[cfg(...)]` attributes to create platform dependent
features.
**Tip:** For Windows, Microsoft provides some images (VMWare, Hyper-V,
VirtualBox and Parallels) for development:
<https://developer.microsoft.com/windows/downloads/virtual-machines/>
## Licensing
uutils is distributed under the terms of the MIT License; see the `LICENSE` file
Generated
+1444 -403
View File
File diff suppressed because it is too large Load Diff
+86 -32
View File
@@ -1,6 +1,6 @@
[package]
name = "findutils"
version = "0.7.0"
version = "0.9.0"
homepage = "https://github.com/uutils/findutils"
repository = "https://github.com/uutils/findutils"
edition = "2021"
@@ -10,29 +10,56 @@ description = "Rust implementation of GNU findutils"
authors = ["uutils developers"]
[dependencies]
chrono = "0.4.38"
clap = "4.5"
argmax = "0.4.0"
chrono = "0.4.45"
clap = { version = "4.6", features = ["env"] }
faccess = "0.2.4"
nix = { version = "0.31", features = ["fs", "user"] }
onig = { version = "6.5", default-features = false }
regex = "1.12"
uucore = { version = "0.9.0", features = ["entries", "fs", "fsext", "mode"] }
walkdir = "2.5"
regex = "1.10"
once_cell = "1.19"
onig = { version = "6.4", default-features = false }
uucore = { version = "0.0.27", features = ["entries", "fs", "fsext", "mode"] }
nix = { version = "0.29", features = ["fs", "user"] }
itertools = "0.14.0"
thiserror = "2.0.12"
[dev-dependencies]
criterion = { version = "4.7.0", package = "codspeed-criterion-compat" }
assert_cmd = "2"
ctor = "1.0"
filetime = "0.2"
nix = { version = "0.29", features = ["fs"] }
predicates = "3"
serial_test = "3.1"
nix = { version = "0.31", features = ["fs"] }
rstest = "0.26.1"
tempfile = "3"
pretty_assertions = "1.4.0"
uutests = "0.9.0"
[[bench]]
name = "find_bench"
harness = false
[[bench]]
name = "xargs_bench"
harness = false
[[bench]]
name = "updatedb_bench"
harness = false
[[bench]]
name = "locate_bench"
harness = false
[[bin]]
name = "find"
path = "src/find/main.rs"
[[bin]]
name = "locate"
path = "src/locate/main.rs"
[[bin]]
name = "updatedb"
path = "src/updatedb/main.rs"
[[bin]]
name = "xargs"
path = "src/xargs/main.rs"
@@ -41,25 +68,52 @@ path = "src/xargs/main.rs"
name = "testing-commandline"
path = "src/testing/commandline/main.rs"
# The profile that 'cargo dist' will build with
[profile.dist]
inherits = "release"
[profile.release]
lto = "thin"
codegen-units = 1
# Config for 'cargo dist'
[workspace.metadata.dist]
# The preferred cargo-dist version to use in CI (Cargo.toml SemVer syntax)
cargo-dist-version = "0.12.0"
# CI backends to support
ci = ["github"]
# The installers to generate for each app
installers = []
# Target platforms to build apps for (Rust target-triple syntax)
targets = [
"aarch64-apple-darwin",
"x86_64-apple-darwin",
"x86_64-unknown-linux-gnu",
"x86_64-pc-windows-msvc",
]
# Publish jobs to run in CI
pr-run-mode = "plan"
[profile.release-fast]
inherits = "release"
panic = "abort"
[lints.clippy]
all = { level = "warn", priority = -1 }
cargo = { level = "warn", priority = -1 }
pedantic = { level = "warn", priority = -1 }
use_self = "warn" # nursery lint
# Group-level allows for lints that are too noisy or not worth enforcing for now.
multiple_crate_versions = "allow"
cargo_common_metadata = "allow"
uninlined_format_args = "allow"
missing_errors_doc = "allow"
missing_panics_doc = "allow"
must_use_candidate = "allow"
match_same_arms = "allow"
cast_possible_truncation = "allow"
too_many_lines = "allow"
cast_possible_wrap = "allow"
cast_sign_loss = "allow"
struct_excessive_bools = "allow"
cast_precision_loss = "allow"
cast_lossless = "allow"
ignored_unit_patterns = "allow"
similar_names = "allow"
float_cmp = "allow"
return_self_not_must_use = "allow"
inline_always = "allow"
fn_params_excessive_bools = "allow"
used_underscore_items = "allow"
should_panic_without_expect = "allow"
doc_markdown = "allow"
unused_self = "allow"
enum_glob_use = "allow"
unnested_or_patterns = "allow"
implicit_hasher = "allow"
doc_link_with_quotes = "allow"
format_push_string = "allow"
flat_map_option = "allow"
from_iter_instead_of_collect = "allow"
large_types_passed_by_value = "allow"
# Disable for now, we have a few occurrences
# panic = "warn"
+2 -2
View File
@@ -20,8 +20,8 @@ bash util/build-gnu.sh tests/misc/help-version.sh
## Comparing with GNU
![Evolution over time - GNU testsuite](https://github.com/uutils/findutils-tracking/blob/main/gnu-results.png?raw=true)
![Evolution over time - BFS testsuite](https://github.com/uutils/findutils-tracking/blob/main/bfs-results.png?raw=true)
![Evolution over time - GNU testsuite](https://github.com/uutils/findutils-tracking/blob/main/gnu-results.svg?raw=true)
![Evolution over time - BFS testsuite](https://github.com/uutils/findutils-tracking/blob/main/bfs-results.svg?raw=true)
## Build/run with BFS
+44
View File
@@ -0,0 +1,44 @@
# Security Policy
## Supported Versions
We provide security updates only for the latest released version of `uutils/findutils`.
Older versions may not receive patches.
If you are using a version packaged by your Linux distribution, please check with your distribution maintainers for their update policy.
---
## Reporting a Vulnerability
**Do not open public GitHub issues for security vulnerabilities.**
This prevents accidental disclosure before a fix is available.
Instead, please use the following method:
- **Email:** [sylvestre@debian.org](mailto:Sylvestre@debian.org)
- **Encryption (optional):** You may encrypt your report using our PGP key:
Fingerprint: B60D B599 4D39 BEC4 D1A9 5CCF 7E65 28DA 752F 1BE1
---
### What to Include in Your Report
To help us investigate and resolve the issue quickly, please include as much detail as possible:
- **Type of issue:** e.g. privilege escalation, information disclosure.
- **Location in the source:** file path, commit hash, branch, or tag.
- **Steps to reproduce:** exact commands, test cases, or scripts.
- **Special configuration:** any flags, environment variables, or system setup required.
- **Affected systems:** OS/distribution and version(s) where the issue occurs.
- **Impact:** your assessment of the potential severity (DoS, RCE, data leak, etc.).
---
## Disclosure Policy
We follow a **Coordinated Vulnerability Disclosure (CVD)** process:
1. We will acknowledge receipt of your report within **10 days**.
2. We will investigate, reproduce, and assess the issue.
3. We will provide a timeline for developing and releasing a fix.
4. Once a fix is available, we will publish a GitHub Security Advisory.
5. You will be credited in the advisory unless you request anonymity.
+166
View File
@@ -0,0 +1,166 @@
// Copyright 2024 the uutils developers
//
// Use of this source code is governed by a MIT-style
// license that can be found in the LICENSE file or at
// https://opensource.org/licenses/MIT.
//! End-to-end benchmarks for `find`, run through the real `find_main` entry
//! point so they exercise argument parsing, the matcher tree and the directory
//! walk together. Output is sent to a sink so the benchmarks measure the work
//! `find` does rather than terminal I/O.
use std::cell::RefCell;
use std::io::{self, Write};
use std::path::{Path, PathBuf};
use std::time::SystemTime;
use criterion::{black_box, criterion_group, criterion_main, Criterion};
use findutils::find::{find_main, Dependencies};
/// `Dependencies` implementation that throws output away. A fixed `now` keeps
/// time-based matchers (`-newer`, `-mtime`, …) deterministic across runs.
struct SinkDependencies {
output: RefCell<io::Sink>,
now: SystemTime,
}
impl SinkDependencies {
fn new() -> Self {
Self {
output: RefCell::new(io::sink()),
now: SystemTime::now(),
}
}
}
impl Dependencies for SinkDependencies {
fn get_output(&self) -> &RefCell<dyn Write> {
&self.output
}
fn now(&self) -> SystemTime {
self.now
}
fn confirm(&self, _prompt: &str) -> bool {
false
}
}
/// Run `find` end-to-end. `args` are the arguments after the program name
/// (flags, paths, expression). The exit status is ignored — we only care about
/// the work performed.
fn run(args: &[&str]) {
let mut argv: Vec<&str> = Vec::with_capacity(args.len() + 1);
argv.push("find");
argv.extend_from_slice(args);
let deps = SinkDependencies::new();
let _ = find_main(&argv, &deps);
}
/// Build a moderately deep directory tree to walk. `depth` levels, each holding
/// `dirs` sub-directories and `files` files. File names vary so name/regex
/// matchers have something to discriminate on, and sizes vary so `-size` does
/// real work. Returns the root directory.
fn build_tree(depth: u32, dirs: u32, files: u32) -> PathBuf {
let root = std::env::temp_dir().join(format!("uu_find_bench_{}", std::process::id()));
let _ = std::fs::remove_dir_all(&root);
std::fs::create_dir_all(&root).unwrap();
populate(&root, depth, dirs, files, 0);
root
}
fn populate(dir: &Path, depth: u32, dirs: u32, files: u32, seed: u32) {
for f in 0..files {
let n = seed.wrapping_add(f);
// A mix of extensions and a sprinkling of a rare marker name.
let name = match n % 5 {
0 => format!("module_{n}.rs"),
1 => format!("data_{n}.txt"),
2 => format!("image_{n}.png"),
3 => format!("README_{n}.md"),
_ if n % 500 == 0 => format!("RAREHIT_{n}.log"),
_ => format!("file_{n}.log"),
};
// Sizes from a few bytes up to ~8 KiB so -size buckets differ.
let size = (n as usize % 8192) + 1;
let path = dir.join(name);
std::fs::write(&path, vec![b'x'; size]).unwrap();
}
if depth == 0 {
return;
}
for d in 0..dirs {
let sub = dir.join(format!("dir_{d}"));
std::fs::create_dir_all(&sub).unwrap();
populate(
&sub,
depth - 1,
dirs,
files,
seed.wrapping_add((d + 1) * 31),
);
}
}
fn bench_e2e(c: &mut Criterion) {
// depth 4, 4 dirs/level, 25 files/dir → a few thousand entries.
let root = build_tree(4, 4, 25);
let dir = root.to_str().unwrap();
let mut group = c.benchmark_group("find");
// Plain full walk with the implicit -print.
group.bench_function("walk_all", |b| {
b.iter(|| run(black_box(&[dir])));
});
// Filter by file type only.
group.bench_function("type_f", |b| {
b.iter(|| run(black_box(&[dir, "-type", "f"])));
});
// Glob name match — a common invocation.
group.bench_function("name_glob", |b| {
b.iter(|| run(black_box(&[dir, "-name", "*.rs"])));
});
// Case-insensitive name match.
group.bench_function("iname_glob", |b| {
b.iter(|| run(black_box(&[dir, "-iname", "*.RS"])));
});
// Regex over the whole path.
group.bench_function("regex_path", |b| {
b.iter(|| run(black_box(&[dir, "-regex", r".*/module_[0-9]+\.rs"])));
});
// Size predicate forces a stat per entry.
group.bench_function("size_gt", |b| {
b.iter(|| run(black_box(&[dir, "-type", "f", "-size", "+4k"])));
});
// Combined predicate with AND/OR and grouping.
group.bench_function("combined_expr", |b| {
b.iter(|| {
run(black_box(&[
dir, "-type", "f", "(", "-name", "*.rs", "-o", "-name", "*.md", ")",
]));
});
});
// Prune whole subtrees, then print the rest.
group.bench_function("prune", |b| {
b.iter(|| {
run(black_box(&[
dir, "-name", "dir_0", "-prune", "-o", "-type", "f", "-print",
]));
});
});
// -printf with several directives exercises the formatter.
group.bench_function("printf", |b| {
b.iter(|| run(black_box(&[dir, "-type", "f", "-printf", "%p %s %y\\n"])));
});
group.finish();
let _ = std::fs::remove_dir_all(&root);
}
criterion_group!(benches, bench_e2e);
criterion_main!(benches);
+127
View File
@@ -0,0 +1,127 @@
// Copyright 2024 the uutils developers
//
// Use of this source code is governed by a MIT-style
// license that can be found in the LICENSE file or at
// https://opensource.org/licenses/MIT.
//! End-to-end benchmarks for `locate`, run through the real `locate_main` entry
//! point. A LOCATE02 database is built once (via `updatedb`) from a generated
//! tree, then each case scans it in `-c`/count mode so the database decoding
//! and pattern matching dominate rather than terminal output.
//!
//! `locate` is Unix-only (it relies on `OsStr`/`CStr` byte APIs), so the
//! benchmark body is compiled only there.
#[cfg(unix)]
mod bench {
use std::path::{Path, PathBuf};
use criterion::{black_box, criterion_group, Criterion};
use findutils::locate::locate_main;
use findutils::updatedb::updatedb_main;
/// Run `locate` end-to-end. `args` are the arguments after the program name.
fn run(args: &[&str]) {
let mut argv: Vec<&str> = Vec::with_capacity(args.len() + 1);
argv.push("locate");
argv.extend_from_slice(args);
let _ = locate_main(&argv);
}
fn build_tree(depth: u32, dirs: u32, files: u32) -> PathBuf {
let root = std::env::temp_dir().join(format!("uu_locate_bench_{}", std::process::id()));
let _ = std::fs::remove_dir_all(&root);
std::fs::create_dir_all(&root).unwrap();
populate(&root, depth, dirs, files, 0);
root
}
fn populate(dir: &Path, depth: u32, dirs: u32, files: u32, seed: u32) {
for f in 0..files {
let n = seed.wrapping_add(f);
let name = match n % 4 {
0 => format!("module_{n}.rs"),
1 => format!("data_{n}.txt"),
2 => format!("image_{n}.png"),
_ => format!("file_{n}.log"),
};
std::fs::write(dir.join(name), b"x").unwrap();
}
if depth == 0 {
return;
}
for d in 0..dirs {
let sub = dir.join(format!("dir_{d}"));
std::fs::create_dir_all(&sub).unwrap();
populate(
&sub,
depth - 1,
dirs,
files,
seed.wrapping_add((d + 1) * 31),
);
}
}
pub fn bench_e2e(c: &mut Criterion) {
// ~8.5k paths, then front-coded into a LOCATE02 database once.
let root = build_tree(4, 4, 25);
let dir = root.to_str().unwrap();
let db = std::env::temp_dir().join(format!("uu_locate_bench_{}.db", std::process::id()));
let db_path = db.to_str().unwrap();
let _ = updatedb_main(&[
"updatedb",
&format!("--localpaths={dir}"),
&format!("--output={db_path}"),
"--prunepaths=",
"--prunefs=",
]);
let mut group = c.benchmark_group("locate");
// Pattern matching nothing: forces a full decode + match of every entry.
group.bench_function("count_no_match", |b| {
b.iter(|| run(black_box(&["-d", db_path, "-c", "NONEXISTENT_TOKEN_XYZ"])));
});
// Substring matching many entries (count mode → no per-match output).
group.bench_function("count_many", |b| {
b.iter(|| run(black_box(&["-d", db_path, "-c", ".log"])));
});
// Basename matching (-b) restricts the comparison to the file name.
group.bench_function("basename", |b| {
b.iter(|| run(black_box(&["-d", db_path, "-c", "-b", "module"])));
});
// Case-insensitive matching (-i).
group.bench_function("ignore_case", |b| {
b.iter(|| run(black_box(&["-d", db_path, "-c", "-i", "MODULE"])));
});
// Regex matching (-r) over the whole path.
group.bench_function("regex", |b| {
b.iter(|| {
run(black_box(&[
"-d",
db_path,
"-c",
"-r",
r"module_[0-9]+\.rs",
]));
});
});
group.finish();
let _ = std::fs::remove_dir_all(&root);
let _ = std::fs::remove_file(&db);
}
criterion_group!(benches, bench_e2e);
}
#[cfg(unix)]
criterion::criterion_main!(bench::benches);
#[cfg(not(unix))]
fn main() {}
+110
View File
@@ -0,0 +1,110 @@
// Copyright 2024 the uutils developers
//
// Use of this source code is governed by a MIT-style
// license that can be found in the LICENSE file or at
// https://opensource.org/licenses/MIT.
//! End-to-end benchmarks for `updatedb`, run through the real `updatedb_main`
//! entry point. Each case walks a generated directory tree (via the internal
//! `find`), encodes it into the LOCATE02 database format and writes the result
//! to a temp file, so the walk + front-coding + write dominate the measurement.
use std::path::{Path, PathBuf};
use criterion::{black_box, criterion_group, criterion_main, Criterion};
use findutils::updatedb::updatedb_main;
/// Run `updatedb` end-to-end. `args` are the arguments after the program name.
fn run(args: &[&str]) {
let mut argv: Vec<&str> = Vec::with_capacity(args.len() + 1);
argv.push("updatedb");
argv.extend_from_slice(args);
let _ = updatedb_main(&argv);
}
/// Build a directory tree to index. `depth` levels, each holding `dirs`
/// sub-directories and `files` files with varied names. Returns the root.
fn build_tree(depth: u32, dirs: u32, files: u32) -> PathBuf {
let root = std::env::temp_dir().join(format!("uu_updatedb_bench_{}", std::process::id()));
let _ = std::fs::remove_dir_all(&root);
std::fs::create_dir_all(&root).unwrap();
populate(&root, depth, dirs, files, 0);
root
}
fn populate(dir: &Path, depth: u32, dirs: u32, files: u32, seed: u32) {
for f in 0..files {
let n = seed.wrapping_add(f);
let name = match n % 4 {
0 => format!("module_{n}.rs"),
1 => format!("data_{n}.txt"),
2 => format!("image_{n}.png"),
_ => format!("file_{n}.log"),
};
// Tiny files: updatedb only records names, so content size is irrelevant.
std::fs::write(dir.join(name), b"x").unwrap();
}
if depth == 0 {
return;
}
for d in 0..dirs {
let sub = dir.join(format!("dir_{d}"));
std::fs::create_dir_all(&sub).unwrap();
populate(
&sub,
depth - 1,
dirs,
files,
seed.wrapping_add((d + 1) * 31),
);
}
}
fn bench_e2e(c: &mut Criterion) {
// depth 4, 4 dirs/level, 25 files/dir → ~8.5k indexed paths.
let root = build_tree(4, 4, 25);
let dir = root.to_str().unwrap();
let db = std::env::temp_dir().join(format!("uu_updatedb_bench_{}.db", std::process::id()));
let db_path = db.to_str().unwrap();
let localpaths = format!("--localpaths={dir}");
let output = format!("--output={db_path}");
let mut group = c.benchmark_group("updatedb");
// Full build: walk, front-code and write the whole tree. Empty prune
// options keep the run deterministic regardless of where temp_dir lives.
group.bench_function("build_full", |b| {
b.iter(|| {
run(black_box(&[
&localpaths,
&output,
"--prunepaths=",
"--prunefs=",
]));
});
});
// Build with a prune clause that drops every `dir_0` subtree, exercising the
// -regex/-prune path updatedb hands to find.
group.bench_function("build_pruned", |b| {
b.iter(|| {
run(black_box(&[
&localpaths,
&output,
"--prunepaths=.*/dir_0",
"--prunefs=",
]));
});
});
group.finish();
let _ = std::fs::remove_dir_all(&root);
let _ = std::fs::remove_file(&db);
}
criterion_group!(benches, bench_e2e);
criterion_main!(benches);
+77
View File
@@ -0,0 +1,77 @@
// Copyright 2024 the uutils developers
//
// Use of this source code is governed by a MIT-style
// license that can be found in the LICENSE file or at
// https://opensource.org/licenses/MIT.
//! End-to-end benchmarks for `xargs`, run through the real `xargs_main` entry
//! point. Input is supplied via `-a <file>` (rather than stdin) so the harness
//! can feed a fixed corpus without touching the process's stdin, and the
//! command is `true` so the measurement is dominated by `xargs`'s own work
//! (reading, splitting and batching arguments) rather than the child.
use std::path::PathBuf;
use criterion::{black_box, criterion_group, criterion_main, Criterion};
use findutils::xargs::xargs_main;
/// Run `xargs` end-to-end. `args` are the arguments after the program name.
/// The exit status is ignored — we only care about the work performed.
fn run(args: &[&str]) {
let mut argv: Vec<&str> = Vec::with_capacity(args.len() + 1);
argv.push("xargs");
argv.extend_from_slice(args);
let _ = xargs_main(&argv);
}
/// Write `count` short tokens to a temp file, joined by `sep`. Returns the path.
fn build_input(count: u32, sep: &str, tag: &str) -> PathBuf {
let mut content = String::new();
for i in 0..count {
if i > 0 {
content.push_str(sep);
}
content.push_str(&format!("item_{i}"));
}
let path = std::env::temp_dir().join(format!("uu_xargs_bench_{}_{tag}", std::process::id()));
std::fs::write(&path, content).unwrap();
path
}
fn bench_e2e(c: &mut Criterion) {
// Whitespace- and newline-separated corpora, plus a NUL-separated one for
// the `-0` path. A few thousand short tokens keeps parsing dominant while
// `true` batches stay to a handful of (untraced) spawns.
let ws = build_input(4000, " ", "ws");
let nul = build_input(4000, "\0", "nul");
let ws_path = ws.to_str().unwrap();
let nul_path = nul.to_str().unwrap();
let mut group = c.benchmark_group("xargs");
// Default whitespace splitting, single batch (fits one command line).
group.bench_function("split_whitespace", |b| {
b.iter(|| run(black_box(&["-a", ws_path, "true"])));
});
// NUL-delimited input (`find -print0 | xargs -0` shape).
group.bench_function("split_null", |b| {
b.iter(|| run(black_box(&["-0", "-a", nul_path, "true"])));
});
// Cap arguments per command with -n, exercising the batching path across
// several (untraced) invocations.
group.bench_function("batched_n", |b| {
b.iter(|| run(black_box(&["-a", ws_path, "-n", "1000", "true"])));
});
// Bound each command line by size with -s, another batching trigger.
group.bench_function("batched_size", |b| {
b.iter(|| run(black_box(&["-a", ws_path, "-s", "4096", "true"])));
});
group.finish();
let _ = std::fs::remove_file(&ws);
let _ = std::fs::remove_file(&nul);
}
criterion_group!(benches, bench_e2e);
criterion_main!(benches);
+24
View File
@@ -0,0 +1,24 @@
[workspace]
members = ["cargo:."]
# Config for 'dist'
[dist]
# The preferred dist version to use in CI (Cargo.toml SemVer syntax)
cargo-dist-version = "0.28.0"
# CI backends to support
ci = "github"
# The installers to generate for each app
installers = ["shell"]
# Target platforms to build apps for (Rust target-triple syntax)
targets = ["aarch64-apple-darwin", "x86_64-apple-darwin", "x86_64-unknown-linux-gnu", "x86_64-pc-windows-msvc"]
# Which actions to run on pull requests
pr-run-mode = "plan"
# Path that installers should place binaries in
install-path = "CARGO_HOME"
# Whether to install an updater program
install-updater = false
# Ignore out-of-date contents
allow-dirty = ["ci"]
[dist.github-custom-runners]
x86_64-unknown-linux-gnu = "ubuntu-latest"
+1 -1
View File
@@ -16,7 +16,7 @@ pub struct DeleteMatcher;
impl DeleteMatcher {
pub fn new() -> Self {
DeleteMatcher
Self
}
fn delete(&self, entry: &WalkEntry) -> io::Result<()> {
+73 -2
View File
@@ -14,8 +14,8 @@ use super::{Matcher, MatcherIO, WalkEntry};
pub struct EmptyMatcher;
impl EmptyMatcher {
pub fn new() -> EmptyMatcher {
EmptyMatcher
pub fn new() -> Self {
Self
}
}
@@ -62,6 +62,8 @@ mod tests {
use super::*;
use crate::find::matchers::tests::get_dir_entry_for;
use crate::find::tests::FakeDependencies;
#[cfg(unix)]
use std::os::unix::fs::PermissionsExt;
#[test]
fn empty_files() {
@@ -96,4 +98,73 @@ mod tests {
let file_info = get_dir_entry_for(&temp_dir_path, subdir_name);
assert!(!matcher.matches(&file_info, &mut deps.new_matcher_io()));
}
#[test]
fn empty_file_vs_empty_directory() {
let empty_file_info = get_dir_entry_for("test_data/simple", "abbbc");
let temp_dir = Builder::new()
.prefix("empty_file_vs_empty_directory")
.tempdir()
.unwrap();
let temp_dir_path = temp_dir.path().to_string_lossy();
let subdir_name = "empty_subdir";
std::fs::create_dir(temp_dir.path().join(subdir_name)).unwrap();
let matcher = EmptyMatcher::new();
let deps = FakeDependencies::new();
// Both an empty file and an empty directory should match.
assert!(
matcher.matches(&empty_file_info, &mut deps.new_matcher_io()),
"empty file should match"
);
let empty_dir_info = get_dir_entry_for(&temp_dir_path, subdir_name);
assert!(
matcher.matches(&empty_dir_info, &mut deps.new_matcher_io()),
"empty directory should match"
);
}
#[test]
#[cfg(unix)]
fn non_readable_directory() {
let temp_dir = Builder::new()
.prefix("non_readable_directory")
.tempdir()
.unwrap();
let temp_dir_path = temp_dir.path().to_string_lossy();
let subdir_name = "unreadable";
std::fs::create_dir(temp_dir.path().join(subdir_name)).unwrap();
let mut perms = std::fs::metadata(temp_dir.path().join(subdir_name))
.unwrap()
.permissions();
perms.set_mode(0o000);
std::fs::set_permissions(temp_dir.path().join(subdir_name), perms).unwrap();
// If we can still read the directory, we're likely running as root.
if std::fs::read_dir(temp_dir.path().join(subdir_name)).is_ok() {
// Restore permissions before skipping.
let mut perms = std::fs::metadata(temp_dir.path().join(subdir_name))
.unwrap()
.permissions();
perms.set_mode(0o755);
std::fs::set_permissions(temp_dir.path().join(subdir_name), perms).unwrap();
return;
}
let matcher = EmptyMatcher::new();
let deps = FakeDependencies::new();
let file_info = get_dir_entry_for(&temp_dir_path, subdir_name);
assert!(!matcher.matches(&file_info, &mut deps.new_matcher_io()));
// Restore permissions so tempdir can be cleaned up.
let mut perms = std::fs::metadata(temp_dir.path().join(subdir_name))
.unwrap()
.permissions();
perms.set_mode(0o755);
std::fs::set_permissions(temp_dir.path().join(subdir_name), perms).unwrap();
}
}
+30 -33
View File
@@ -24,7 +24,7 @@ enum Entry {
}
/// File types.
#[derive(Clone, Copy, Debug, Eq, PartialEq)]
#[derive(Clone, Copy, Debug, Eq, PartialEq, Hash)]
pub enum FileType {
Unknown,
Fifo,
@@ -51,34 +51,34 @@ impl FileType {
}
impl From<fs::FileType> for FileType {
fn from(t: fs::FileType) -> FileType {
fn from(t: fs::FileType) -> Self {
if t.is_dir() {
return FileType::Directory;
return Self::Directory;
}
if t.is_file() {
return FileType::Regular;
return Self::Regular;
}
if t.is_symlink() {
return FileType::Symlink;
return Self::Symlink;
}
#[cfg(unix)]
{
if t.is_fifo() {
return FileType::Fifo;
return Self::Fifo;
}
if t.is_char_device() {
return FileType::CharDevice;
return Self::CharDevice;
}
if t.is_block_device() {
return FileType::BlockDevice;
return Self::BlockDevice;
}
if t.is_socket() {
return FileType::Socket;
return Self::Socket;
}
}
FileType::Unknown
Self::Unknown
}
}
@@ -150,14 +150,14 @@ impl Display for WalkError {
impl Error for WalkError {}
impl From<io::Error> for WalkError {
fn from(e: io::Error) -> WalkError {
WalkError::from(&e)
fn from(e: io::Error) -> Self {
Self::from(&e)
}
}
impl From<&io::Error> for WalkError {
fn from(e: &io::Error) -> WalkError {
WalkError {
fn from(e: &io::Error) -> Self {
Self {
path: None,
depth: None,
raw: e.raw_os_error(),
@@ -166,32 +166,31 @@ impl From<&io::Error> for WalkError {
}
impl From<walkdir::Error> for WalkError {
fn from(e: walkdir::Error) -> WalkError {
WalkError::from(&e)
fn from(e: walkdir::Error) -> Self {
Self::from(&e)
}
}
impl From<&walkdir::Error> for WalkError {
fn from(e: &walkdir::Error) -> WalkError {
WalkError {
path: e.path().map(|p| p.to_owned()),
fn from(e: &walkdir::Error) -> Self {
Self {
path: e.path().map(std::borrow::ToOwned::to_owned),
depth: Some(e.depth()),
raw: e.io_error().and_then(|e| e.raw_os_error()),
raw: e.io_error().and_then(std::io::Error::raw_os_error),
}
}
}
impl From<WalkError> for io::Error {
fn from(e: WalkError) -> io::Error {
io::Error::from(&e)
fn from(e: WalkError) -> Self {
Self::from(&e)
}
}
impl From<&WalkError> for io::Error {
fn from(e: &WalkError) -> io::Error {
fn from(e: &WalkError) -> Self {
e.raw
.map(io::Error::from_raw_os_error)
.unwrap_or_else(|| ErrorKind::Other.into())
.map_or_else(|| ErrorKind::Other.into(), Self::from_raw_os_error)
}
}
@@ -221,7 +220,7 @@ impl WalkEntry {
pub fn from_walkdir(
result: walkdir::Result<DirEntry>,
follow: Follow,
) -> Result<WalkEntry, WalkError> {
) -> Result<Self, WalkError> {
let result = result.map_err(WalkError::from);
match result {
@@ -242,7 +241,7 @@ impl WalkEntry {
// Detect broken symlinks and replace them with explicit entries
if let (Some(path), Some(depth)) = (e.path(), e.depth()) {
if let Ok(meta) = path.symlink_metadata() {
return Ok(WalkEntry {
return Ok(Self {
inner: Entry::Explicit(path.into(), depth),
follow: Follow::Never,
meta: Ok(meta).into(),
@@ -278,9 +277,8 @@ impl WalkEntry {
Entry::Explicit(path, _) => {
// Path::file_name() only works if the last component is normal
path.components()
.last()
.map(|c| c.as_os_str())
.unwrap_or_else(|| path.as_os_str())
.next_back()
.map_or_else(|| path.as_os_str(), std::path::Component::as_os_str)
}
Entry::WalkDir(ent) => ent.file_name(),
}
@@ -311,7 +309,7 @@ impl WalkEntry {
Entry::Explicit(_, _) => Ok(self.get_metadata()?),
Entry::WalkDir(ent) => Ok(ent.metadata()?),
});
result.as_ref().map_err(|e| e.clone())
result.as_ref().map_err(std::clone::Clone::clone)
}
/// Get the file type of this entry.
@@ -319,8 +317,7 @@ impl WalkEntry {
match &self.inner {
Entry::Explicit(_, _) => self
.metadata()
.map(|m| m.file_type().into())
.unwrap_or(FileType::Unknown),
.map_or(FileType::Unknown, |m| m.file_type().into()),
Entry::WalkDir(ent) => ent.file_type().into(),
}
}

Some files were not shown because too many files have changed in this diff Show More