Commit Graph

149 Commits

Author SHA1 Message Date
Thayne McCombs 4e7b403c1f Use clap-derive for option parsing
This makes the definition of arguments to fd a little more ergonomic,
and makes it easier to insure the types for the arguments are consitent.
2022-10-08 00:41:33 -06:00
Jonathan Goren 60c14b1af2 make DirEntry Ord 2022-03-16 18:38:16 +02:00
Thayne McCombs 50c0fa812f
Merge branch 'master' into master 2022-03-15 01:20:35 -06:00
Thayne McCombs 9fb0c5d372 Group together output from multi exec commands
So that if multiple `--exec` options are given, and the commands are run
in parallel, the buffered output for related commands will be
consecutive.
2022-03-08 10:15:48 +01:00
Thayne McCombs 6e5c8d9c20 Fix some clippy warnings 2022-03-04 08:30:41 +01:00
Tavian Barnes e7f192f1c6 Revert "Switch from std::sync::mpsc to crossbeam-channel"
@sharkdp [noticed][1] a quite severe performance degredation due to this
change.  Switch back to std::sync::mpsc until we can fix the performance
regression.

This reverts commit a4bb734482.

[1]: https://github.com/sharkdp/fd/pull/895#issuecomment-1002099369
2021-12-28 12:11:32 -05:00
Thayne McCombs b7e077320d
Fix logic for --no-ignore-parent (#908)
Make sure that using `--no-ignore-vcs` or `--no-ignore` don't also
enable `--no-ignore-parent`. So that if `--no-ignore-vcs` is enabled, it
continues to respect .fdignore and .ignore in the parent directories.

Fixes: #907
Fixes: #901
2021-12-22 23:38:00 -07:00
Jonathan Goren 3dc61b5f28 rename module entry -> dir_entry 2021-12-11 15:43:52 +02:00
Jonathan Goren 813a802b2c send DirEntries to output instead of just path 2021-12-11 15:42:07 +02:00
Tavian Barnes 4baefb2f5a walk: Split wants_to_quit into two separate flags
quit_flag is now used to quit the sender threads for any reason, either
due to an interrupt or because the receiver is done.

interrupt_flag is used specifically for ^C interrupts, and causes the
receiver to stop between printing paths, to avoid unfinished escape
sequences when colors are being used.

Fixes #867.
2021-12-05 12:06:49 -05:00
Tavian Barnes 97a8825b00 output: Remove wants_to_quit handling from print_entry()
Since we only check it once per path now, we might as well just check it
before printing anything.
2021-12-05 12:06:49 -05:00
Tavian Barnes a4bb734482 Switch from std::sync::mpsc to crossbeam-channel
This lets us avoid https://github.com/rust-lang/rust/issues/39364, which
could potentially be seen now that we're using recv_timeout().
2021-12-01 10:24:58 -05:00
Tavian Barnes 16ae03c3b4 walk: Encapsulate the buffering behavior in a struct
The new ReceiverBuffer struct allows us to factor out the receiver
implementation into a number of helper methods.  The new implementation
uses rx.{recv,recv_timeout} instead of a for loop, which enables us to
switch to streaming mode at the right time without waiting for more
results.

Fixes #868.
2021-11-27 12:56:22 -05:00
David Peter f219da4b3a Use non-sync channel 2021-11-26 21:23:47 +01:00
Thayne McCombs e990a13405 squash! Add buffering to stdout when it's not a terminal
Co-authored-by: sourlemon207 <jw1756@protonmail.com>
2021-11-26 21:23:47 +01:00
Thayne McCombs feac240eb5 Add buffering to stdout when it's not a terminal
This is based on the work of #736 by @sourlemon207.

I've added the suggestion I recommended on that PR.
2021-11-26 21:23:47 +01:00
Tavian Barnes 2b1bf471b1 Add an exit() method to ExitCode 2021-11-15 07:53:57 +01:00
Devon Hollowood 17dd2a6dfe
Implement `--batch-size` (#866) 2021-10-22 00:05:13 -06:00
Tavian Barnes 7b5b3ec47b walk: Add a cache for DirEntry metadata 2021-10-13 09:13:44 +02:00
Niklas Mohrin 02e9850112 Refactor: Rename `Options` to `Config` 2021-10-12 18:49:07 +02:00
Niklas Mohrin 3de948ae0d Refactor: use some nice Rust methods in buffering code 2021-10-12 18:49:07 +02:00
Niklas Mohrin 45a86459b2 Refactor: `merge_exit_codes` now takes an `impl IntoIterator<Item = ExitCode>`
This way, callers don't need to collect into a slice / vec.
2021-10-12 18:49:07 +02:00
Tavian Barnes 476d404938
Merge pull request #817 from will459/add_no_ignore_parent
Add --no-ignore-parent flag
2021-09-01 13:22:01 -04:00
Asha20 334488cab7
Add -q/--quiet/--has-match flag (#813)
Instead of printing to stdout, the program will return 1 as the exit
code if there are no matches and 0 otherwise.
2021-08-14 17:57:01 +02:00
Thayne McCombs e4730603d0 Address feedback for removing buffering when running on a single thread 2021-08-11 09:38:55 +02:00
Max Triano 154cd6e329 Clarifying comments 2021-08-11 09:38:55 +02:00
Max Triano 394e967b5f No buffering cmd output when running on 1 thread 2021-08-11 09:38:55 +02:00
Thayne McCombs 115ae93df9 Refactor file types check to be on impl of FileTypes
Relates to #382
2021-08-10 20:30:23 +02:00
himself65 4e04d13215 Fix return out of match pattern 2021-08-09 13:36:09 +02:00
William Correia f8ae334ca9
Add --no-ignore-parent flag
- Flag toggles parent checking in the `ignore` crate.  This should
  affect both git and non-git ignore files.
- Updated Changelog.
2021-08-08 17:38:24 -04:00
David Peter a7a4499d1d Fix unneeded references 2021-07-27 09:05:23 +02:00
David Peter 2a2126c40a Fix clippy warnings 2021-07-27 09:05:23 +02:00
sharkdp b2fa188029 Avoid panic when sending errors after receiver shutdown
fixes #678
2020-10-28 13:10:25 +01:00
Matthias Reitinger ec4cc981fc
Add --prune flag
closes #535
2020-10-25 08:16:01 +01:00
Amrit Rathie fd1ddc9d08 Change dependency dirs to dirs-next 2020-10-24 15:25:07 +02:00
sharkdp 3283a7b345 Fix warning 2020-05-19 14:01:00 +02:00
Bobbie Soedirgo 79d5a5bdc5 Add global fdignore support 2020-05-18 21:19:09 +02:00
Alexandru Macovei d7cc34e36f [ownership] depend on users 0.10.0 on unix; parse user and group names 2020-05-18 21:11:33 +02:00
sharkdp cb56add1d8 Add new `--type socket` and `--type pipe` filters
closes #511
2020-04-16 09:59:45 +02:00
sharkdp d63c63be8c Add --min-depth and --exact-depth
Add new `--min-depth <depth>` and `--exact-depth <depth>` options in addition to the existing
option to limit the maximum depth.

closes #404
2020-04-15 17:02:41 +02:00
sharkdp 4815ee416e Remove process::exit instance 2020-04-03 22:36:32 +02:00
sharkdp 4590ae8535 Proper error handling within walk.rs 2020-04-03 22:36:32 +02:00
sharkdp b415d7234b Rename fshelper to filesystem 2020-04-03 22:36:32 +02:00
sharkdp e0cba4b700 Remove 'internal' module 2020-04-03 22:36:32 +02:00
sharkdp c79d1638f5 Move MAX_BUFFER_LENGTH 2020-04-03 22:36:32 +02:00
sharkdp 65096a653e Move FdOptions to Options 2020-04-03 22:36:32 +02:00
sharkdp e42ddda5a6 Clean up exit code handling 2020-04-03 10:48:27 +02:00
sharkdp 4274075f6f Remove outdated license headers (not strictly required by Apache-2.0) 2020-04-03 10:19:13 +02:00
sharkdp b9d0e72f70 Solve clippy issues 2020-04-03 10:08:47 +02:00
sharkdp d43827fe57 Add --max-results=<count> option
This new option can be used instead of piping to `head -n <count>` for
improved performance:

| Command | Mean [ms] | Min [ms] | Max [ms] | Relative |
|:---|---:|---:|---:|---:|
| `fd --max-buffer-time=0 flow.yaml` | 153.9 ± 2.5 | 151.3 | 170.3 | 4.21 ± 5.86 |
| `fd --max-buffer-time=0 flow.yaml \| head -n 1` | 145.3 ± 17.4 | 111.0 | 180.2 | 3.98 ± 5.55 |
| `fd --max-results=1 flow.yaml` | 36.5 ± 50.8 | 7.2 | 145.7 | 1.00 |

Note: there is a large standard deviation on the last result due to the
non-deterministic file system traversal. With `--max-results`, we don't
have to traverse the whole filesystem tree, so it's all about luck.

closes #472
closes #476
2020-04-02 20:27:41 +02:00