ripgrep: stop early when --files --quiet is used

This commit tweaks the implementation of the --files flag to stop early
when --quiet is provided.

Fixes #907
This commit is contained in:
Andrew Gallant 2018-07-22 11:05:24 -04:00
parent 03af61fc7b
commit 22ac2e056e
No known key found for this signature in database
GPG Key ID: B2E3A4923F8B0D44
3 changed files with 13 additions and 2 deletions

View File

@ -84,6 +84,9 @@ Bug fixes:
Upgrade `grep` crate to `regex-syntax 0.5.0`.
* [BUG #893](https://github.com/BurntSushi/ripgrep/issues/893):
Improve support for git submodules.
* [BUG #907](https://github.com/BurntSushi/ripgrep/issues/907):
ripgrep will now stop traversing after the first file when `--quiet --files`
is used.
* [BUG #918](https://github.com/BurntSushi/ripgrep/issues/918):
Don't skip tar archives when `-z/--search-zip` is used.
* [BUG #934](https://github.com/BurntSushi/ripgrep/issues/934):

View File

@ -1402,6 +1402,9 @@ fn flag_quiet(args: &mut Vec<RGArg>) {
Do not print anything to stdout. If a match is found in a file, then ripgrep
will stop searching. This is useful when ripgrep is used only for its exit
code (which will be an error if no matches are found).
When --files is used, then ripgrep will stop finding files after finding the
first file that matches all ignore rules.
");
let arg = RGArg::switch("quiet").short("q")
.help(SHORT).long_help(LONG);

View File

@ -245,6 +245,9 @@ fn run_files_parallel(args: Arc<Args>) -> Result<u64> {
args.no_ignore_messages(),
) {
tx.send(dent).unwrap();
if args.quiet() {
return ignore::WalkState::Quit
}
}
ignore::WalkState::Continue
})
@ -266,10 +269,12 @@ fn run_files_one_thread(args: &Arc<Args>) -> Result<u64> {
None => continue,
Some(dent) => dent,
};
if !args.quiet() {
file_count += 1;
if args.quiet() {
break;
} else {
printer.path(dent.path());
}
file_count += 1;
}
Ok(file_count)
}