sharkdp
44605d55dd
Use .to_string() instead of .description()
2020-03-22 15:54:43 +01:00
sharkdp
d05e7171d4
Fix for older versions of Rust
2020-02-28 20:42:14 +01:00
sharkdp
81dee25438
Add additional check for symlink
2020-02-28 20:42:14 +01:00
sharkdp
bbf0f1cc1f
New implementation of broken-symlink handling
2020-02-28 20:42:14 +01:00
sharkdp
bfc8c42444
Revert back to master state
2020-02-28 20:42:14 +01:00
sharkdp
d6034119ae
Add comment for broken symlinks
2020-02-28 20:42:14 +01:00
sharkdp
82e6562cfc
Further simplify the code
2020-02-28 20:42:14 +01:00
sharkdp
8cea65c1b8
Simplify match statement
2020-02-28 20:42:14 +01:00
Tom Milligan
9d73402ef2
walk: catch ignore NotFound error in the case of a broken symlink
2020-02-28 20:42:14 +01:00
fusillicode
0f2429cabc
Add unit tests for merge_exitcodes
2020-02-22 12:32:35 +01:00
fusillicode
232e3937f2
Rename error_if_any_error to merge_exitcodes
2020-02-22 12:32:35 +01:00
fusillicode
e23398e6d0
Extract error_if_any_error as free function
2020-02-22 12:32:35 +01:00
fusillicode
7213f5a88e
Add collection of job & thread exit codes + default to ExitCode::Error if any ExitCode::Error
2020-02-22 12:32:35 +01:00
sharkdp
f7d1938556
Formatting
2020-01-01 12:05:50 +01:00
Simon Engmann
dea1fbe722
Restrict --one-file-system
to supported systems
...
Instead of having the option do nothing at runtime on unsupported
platforms, it is now only available on the systems that support it in
the first place.
2020-01-01 11:54:01 +01:00
Simon Engmann
94993ca6c2
Rename --same-file-system
to --one-file-system
2020-01-01 11:54:01 +01:00
Simon Engmann
8796de57b5
Add same file system functionality
...
This adds a `--same-file-system` CLI option that instructs the walker to
not cross file system boundaries.
Due to the fact that the corresponding option of the `ignore` crate's
`WalkBuilder` does not support platforms other than Unix and Windows,
the option does nothing on platforms other than those.
Resolves #507
2020-01-01 11:54:01 +01:00
sharkdp
0f27485faf
Quit immediately if the channel::send call failed
2020-01-01 11:21:52 +01:00
sharkdp
d48aeda6b2
Apply clippy suggestions
2019-09-23 20:23:11 +02:00
sharkdp
08fcd7ce59
Make --changed-within/before work for directories
...
closes #470
2019-09-15 17:03:23 +02:00
sharkdp
641594c2c6
Use regex::bytes::* instead of regex::*
2019-09-15 16:47:38 +02:00
sharkdp
2545aaabd2
Exit immediately when Ctrl-C has been pressed twice
2019-09-15 13:06:03 +02:00
sharkdp
a0505bd4df
Expose exit status from --exec-batch <cmd>
...
closes #333
2019-09-13 23:05:35 +02:00
Tavian Barnes
5cbd8405ec
Check the pattern before anything else, since it doesn't require metadata
...
This should partially address #432 by decreasing the number of stat() calls:
$ strace -c -f ./fd-before '\.h$' /usr -j1 -S +1k >/dev/null
% time seconds usecs/call calls errors syscall
------ ----------- ----------- --------- --------- ----------------
15.71 8.831948 7 1192279 46059 stat
$ strace -c -f ./fd-after '\.h$' /usr -j1 -S +1k >/dev/null
% time seconds usecs/call calls errors syscall
------ ----------- ----------- --------- --------- ----------------
7.92 1.972474 10 183907 46046 stat
Though it's not as few as possible:
$ strace -c -f find /usr -iname '*.h' -size +1k >/dev/null
% time seconds usecs/call calls errors syscall
------ ----------- ----------- --------- --------- ----------------
19.01 0.946500 5 161649 newfstatat
$ strace -c -f bfs /usr -iname '*.h' -size +1k >/dev/null
% time seconds usecs/call calls errors syscall
------ ----------- ----------- --------- --------- ----------------
13.73 0.406565 5 69005 statx
Performance is much better when metadata is required:
$ hyperfine ./fd-{before,after}" '\.h$' /usr -j1 -S +1k"
Benchmark #1 : ./fd-before '\.h$' /usr -j1 -S +1k
Time (mean ± σ): 4.623 s ± 0.154 s [User: 1.465 s, System: 3.354 s]
Range (min … max): 4.327 s … 4.815 s 10 runs
Benchmark #2 : ./fd-after '\.h$' /usr -j1 -S +1k
Time (mean ± σ): 2.650 s ± 0.058 s [User: 1.258 s, System: 1.592 s]
Range (min … max): 2.568 s … 2.723 s 10 runs
Summary
'./fd-after '\.h$' /usr -j1 -S +1k' ran
1.74 ± 0.07 times faster than './fd-before '\.h$' /usr -j1 -S +1k'
While remaining the same when it's not:
$ hyperfine ./fd-{before,after}" '\.h$' /usr -j1"
Benchmark #1 : ./fd-before '\.h$' /usr -j1
Time (mean ± σ): 2.382 s ± 0.038 s [User: 1.221 s, System: 1.286 s]
Range (min … max): 2.325 s … 2.433 s 10 runs
Benchmark #2 : ./fd-after '\.h$' /usr -j1
Time (mean ± σ): 2.362 s ± 0.034 s [User: 1.193 s, System: 1.294 s]
Range (min … max): 2.307 s … 2.422 s 10 runs
Summary
'./fd-after '\.h$' /usr -j1' ran
1.01 ± 0.02 times faster than './fd-before '\.h$' /usr -j1'
2019-05-08 07:28:47 -05:00
Alexandru Macovei
c2b46f247f
avoid cloning command, in the wake of 9d26b74
2019-01-30 20:42:43 +01:00
Alexandru Macovei
fe53af064b
fix most clippy lints
2019-01-26 16:15:48 +01:00
Alexandru Macovei
6aa87f3423
save one indent level in error handling for add_ignore
2019-01-26 16:15:48 +01:00
Alexandru Macovei
74e593c43c
inline value used only once
2019-01-26 16:15:48 +01:00
Alexandru Macovei
df4227c614
Uniform names for config and wants_to_quit. Pass Arc's by ref.
2019-01-26 16:15:48 +01:00
Alexandru Macovei
5ade72a5e1
split spawn_receiver(..) and spawn_senders(..) from scan(..).
...
This is just a split commit, refraining from renaming too much.
The drop(tx) call is no longer necessary, as the first sender
is dropped at the end of spawn_senders(..)
2019-01-26 16:15:48 +01:00
sharkdp
8cfdcf43f6
Lock stdout only once
2019-01-09 08:20:20 +01:00
Alexandru Macovei
051ff5987a
[2018 edition] remove all extern crate lines from sources
2019-01-07 12:52:30 +01:00
Alexandru Macovei
64e6ea9fe9
[2018 edition] run cargo fix edition and edition-idioms
2019-01-07 12:52:30 +01:00
kimsnj
6b40a075cd
exec-batch: fix a panic with -X "echo {}" and pass stdio to child cmd
2018-11-12 21:11:40 +01:00
kimsnj
45d1b15cff
Add support for batch execution of command
2018-11-12 21:11:40 +01:00
sharkdp
f064ee5509
Properly use .ignore files, see #156
2018-10-27 18:11:50 +02:00
sharkdp
81a27fa9bd
Unify error messages, closes #342
2018-10-27 16:30:29 +02:00
sharkdp
6ff58abb6c
Re-enable .ignore files, closes #156
2018-10-27 15:42:02 +02:00
Park Juhyung
095bad550f
Print errors when --verbose is set
2018-10-23 21:50:25 +02:00
yobrave
e2bb932f87
Doc: add chinese readme link ( #347 )
2018-10-19 22:05:15 +02:00
Josh Leeb-du Toit
8543ca645d
Split internals.rs into module and multiple files
...
This PR splits `internals.rs` into the `internal` module with multiple
files, and moves `FdOptions` into `opts.rs`.
The main motivation behind this is to move logic for constructing
`FdOptions` out of the main function and more readable and easier to
understand in the `opts` module. The goal will eventually to be able
to write `FdOptions::from(matches)` and have the options constructed.
2018-10-12 19:14:19 +02:00
Josh Leeb-du Toit
984f04f142
Add print_error macros to replace functions
...
This patch replaces the `print_error` and `print_error_and_exit`
functions with equivalent macros.
2018-10-12 07:31:21 +02:00
Karim SENHAJI
abe8aa55c0
clean-up first implementation of modification date filter
2018-10-10 19:52:37 +02:00
Karim SENHAJI
54c117d72f
Add support for --changed-before and --changed-with for modification time based search
2018-10-10 19:52:37 +02:00
Josh Leeb-du Toit
cb1cfa108b
ErrorCode enum variants to be more descriptive
2018-10-03 16:06:18 +02:00
Josh Leeb-du Toit
8bdd8f8e8f
Move exit code consts into enum
...
Previously, the constants defined in `src/exit_codes` weren't being
used, and the constants for exit codes were being redefined in the
`internals` module.
This PR removes the exit code consts and instead uses an enum defined in
`src/exit_codes`. This centralizes the definitions of exit codes making
them easier to modify and keep track of.
2018-10-03 16:06:18 +02:00
psinghal20
f9c4e8d399
refactor: loosen strict handling of missing --ignore-file
2018-10-03 13:11:51 +02:00
sharkdp
046b0574dc
Rename error => print_error_and_exit and introduce print_error
2018-10-01 22:00:23 +02:00
psinghal20
6407dc4eb4
chore: format code via rustfmt
2018-10-01 22:00:23 +02:00
psinghal20
2ebef2d46f
feat: enable display of error messages
2018-10-01 22:00:23 +02:00
sharkdp
27caa33729
cargo fmt
2018-09-27 23:01:38 +02:00
sharkdp
aa70c5a446
Add --type empty
...
Add a new `empty`/`e` type to search for empty files and/or directories.
To search for both empty files and directories, use one of the
following:
fd --type empty
fd -te
fd --type empty --type file --type directory
To search for empty files, use
fd --type empty --type file
fd -te -tf
To search for empty directories, use
fd --type empty --type directory
fd -te -td
closes #273
2018-08-19 17:05:04 +02:00
sharkdp
50a2bab5cd
Use short-circuiting for --type
searches
...
Reverses the order of boolean checks for `--type` searches,
making them about 10% to 50% faster(!).
2018-08-19 16:27:23 +02:00
sharkdp
641976cf7a
Remove duplicated lstat
syscall
...
Removes a unnecessary `lstat` syscall by calling `.metadata()` only
once. This makes `--type executable` searches about 15% faster.
2018-08-19 16:23:06 +02:00
sharkdp
c1ef68662c
Update for new rustfmt
2018-05-14 21:00:00 +02:00
sharkdp
4172ed03f0
Do not include non-files when using --size
2018-04-25 23:08:05 +02:00
Steve Pentland
2f3b472dfd
Changes from review
2018-04-25 08:14:12 +02:00
Steve Pentland
0207c1371e
Initial impl of size constraints.
...
This adds find-style size constraints with + or - indicating greater
or less than, a numerical size, and a unit
2018-04-25 08:14:12 +02:00
sharkdp
6a9f16e159
Run latest version of rustfmt
2018-04-13 23:13:22 +02:00
sharkdp
37483036e0
Implement --ignore-file
2018-03-26 08:28:22 +02:00
sharkdp
f9a32583a5
Move is_executable to fshelper module
2018-03-25 19:48:09 +02:00
sharkdp
2cf8e7b8a5
Move is_executable to internal module
2018-03-25 18:37:50 +02:00
Pramod Bisht
67f6fdf6a7
Code formating
2018-03-25 16:53:12 +02:00
Pramod Bisht
8ce127e443
changed executable=> executable_only
2018-03-25 16:53:12 +02:00
Pramod Bisht
b1e48efc4a
Addresses #246
...
Some implementation to search by filetype `executables`
2018-03-25 16:53:12 +02:00
sharkdp
5397787824
Skip fifos, sockets, .. when using --type f/d/l
2018-03-15 21:38:52 +01:00
sharkdp
47d95284aa
Skip invalid utf8 filenames, closes #250
2018-02-26 08:20:31 +01:00
sharkdp
631931b431
Only construct entry_path if needed
2018-02-25 18:17:11 +01:00
sharkdp
40d811c7be
Rewrite of file-type filtering leading to 5% speed-up
2018-02-25 18:17:11 +01:00
sharkdp
b4be1f161c
Add support for .fdignore files
2018-02-21 22:55:26 +01:00
Martin Larralde
370d9f081f
Use RegexSet instead of hand-written parser
2018-02-10 14:18:37 +01:00
Martin Larralde
86fe9977e8
Implement multiple suffixes extension support with tests ( #214 )
2018-02-10 14:18:37 +01:00
Dock O'Neal
bc2b7a33ae
Fixing exec hang by disabling ctrl-c handling for exec
2018-01-25 07:47:04 +01:00
David Peter
32a34cf8c9
Introduce maximum output buffer size ( #212 )
...
Closes #191
2018-01-03 10:40:08 +01:00
sharkdp
39fb41f05a
Move exit codes to 'internal' module
2018-01-03 10:00:22 +01:00
Dock
26ad7da347
Using wants_to_quit to exit the sender as well as the reciever ( #211 )
...
Closes #210
2018-01-03 09:26:11 +01:00
sharkdp
a5f5ad6254
Re-enable code style check
2018-01-01 16:00:32 +01:00
Thejaswi Kadur
faf934da4b
Added support for filtering by multiple filetypes and extensions ( #205 )
...
Closes #177
Closes #199
2018-01-01 12:09:33 +01:00
sharkdp
aaf9e024d5
Updates for 6.1.0
2017-12-09 21:40:13 -08:00
Dock
51aea57a6a
Add multiple path support ( #182 )
...
* Adding support for multiple paths. (panic)
- Started adding multiple file support
- fd panics with multiple files right now
* Moved the ctrlc handler to main.
- Moved the ctrlc handler to main so we can search multiple files
* Tests now allow custom directory setup
- TestEnv::new() now takes two arguments, the directories to create and
the files to create inside those directories.
* rust-fmt changes
* rust-fmt changes
* Moving code around, no need to do everything in one big loop
- PathDisplay was never actually used for anything, removed it during refactor of main
- Removed redundant logic for absolute paths
- Moved code placed needlessly inside a loop in the last commit outside of that loop.
* Moving code around, no need to do everything in one big loop
- PathDisplay was never actually used for anything, removed it during refactor of main
- Removed redundant logic for absolute paths
- Moved code placed needlessly inside a loop in the last commit outside of that loop.
* Removed commented code in testenv
* Refactored walk::scan to accept the path buffer vector. Using the ParallelWalker allows for multithreaded searching of multiple directories
* Moved ctrlc handler back into walker, it is only called once from main now.
* Moved the colored output check back to it's original place
* Removing shell-escape, not sure how it got added...
* Added test for `fd 'a.foo' test1` to show that a.foo is only found in the test1 and not the test2 direcotry
* Removing side effect from walk::scan, `dir_vec` is no longer a mutable reference and an iterator is being used instead.
* Running rustfmt to format code correctly
2017-12-06 14:52:23 -08:00
ptzz
9bd1d12c00
Add --no-ignore-vcs option
...
When passed, .gitignore files will not be respected.
2017-11-22 23:18:22 +01:00
Dock
c0bfc65d88
Handle terminal signals ( #128 )
...
fixes #87
2017-11-22 23:05:09 +01:00
sharkdp
bba5c4f607
Fix some clippy warnings
2017-10-26 21:13:56 +02:00
sharkdp
9d26b74c2a
Workaround for the unsafe
block.
...
See #147
2017-10-25 22:45:00 +02:00
sharkdp
5ad69fb2fb
Add support for exclude-patterns
...
* Add `--exclude`/`-E` option.
* Support for multiple exclude patterns
Example:
``` bash
> fd --exclude 'tests/**/*.rs' mod
src/exec/mod.rs
src/fshelper/mod.rs
src/lscolors/mod.rs
```
Closes #89
2017-10-25 22:22:12 +02:00
J.W
e38b7d7bff
Fix --type: skip if file type is unknown
2017-10-25 18:29:40 +02:00
sharkdp
e9cf8af911
Updates and preparations for v5.0
2017-10-22 12:10:51 +02:00
Antti Keränen
701b8f209b
Relicense under MIT/Apache-2.0
2017-10-22 10:36:42 +02:00
J.W
8d85debc12
Refactor path handling ( fixes #113 )
...
* Fix path check
* Fix full path matching
* Allow more simple driver names in Windows tests
* Factor out special is_dir() check for "." and ".."
2017-10-18 20:04:34 +02:00
Michael Aaron Murphy
2a23905af5
Fix merge conflicts
2017-10-15 09:37:48 -04:00
J.W
e649c8fa79
Use a uniform output format for searching ../
...
closes #107 , fixes #82 by the way
2017-10-15 15:01:24 +02:00
Michael Aaron Murphy
1bc58b2fbb
Group outputs from exec
2017-10-14 18:06:49 -04:00
Michael Aaron Murphy
718f723d31
Enable absolute paths w/ exec
2017-10-14 16:42:47 -04:00
Michael Aaron Murphy
884bd41cae
Apply cargo fmt
2017-10-14 14:04:04 -04:00
Michael Aaron Murphy
fb1cd3a322
Fix for older builds
...
Rust 1.19 will be a requirement, however.
2017-10-14 13:38:54 -04:00
Michael Aaron Murphy
4a5a5faf4d
Implement --exec feature
...
Closes #84
2017-10-14 12:24:17 -04:00
sharkdp
8fc3a83d92
Use absolute path to perform search, fixes #81
...
Previously, we were using the relative path to extract the search
string. For the current directory, the returned relative path was equal
to `""`. This is why the current directory did not show in the search
results (see #81 ).
This commit also changes the way that `--full-path` works, which was
previously working on relative paths. It seems more useful to search the
absolute path, though. Otherwise, search results could change just by
calling fd (with a given search path) from a different directory.
2017-10-13 18:16:26 +02:00
Antti Keränen
049b9ec06b
Format the source code using rustfmt
2017-10-12 19:33:14 +02:00
Garrett Squire
ccb899a511
break main into separate modules
2017-10-11 08:21:09 +02:00