mirror of
https://github.com/BurntSushi/ripgrep.git
synced 2025-05-19 09:40:22 -07:00
add a max-depth option for directory traversal
CR and add integration test
This commit is contained in:
parent
3e892a7a80
commit
babe80d498
@ -136,6 +136,10 @@ the raw speed of grep.
|
|||||||
-L, --follow
|
-L, --follow
|
||||||
: Follow symlinks.
|
: Follow symlinks.
|
||||||
|
|
||||||
|
--maxdepth *NUM*
|
||||||
|
: Descend at most NUM directories below the command line arguments.
|
||||||
|
A value of zero searches only the starting-points themselves.
|
||||||
|
|
||||||
--mmap
|
--mmap
|
||||||
: Search using memory maps when possible. This is enabled by default
|
: Search using memory maps when possible. This is enabled by default
|
||||||
when ripgrep thinks it will be faster. (Note that mmap searching
|
when ripgrep thinks it will be faster. (Note that mmap searching
|
||||||
|
12
src/args.rs
12
src/args.rs
@ -136,6 +136,10 @@ Less common options:
|
|||||||
-L, --follow
|
-L, --follow
|
||||||
Follow symlinks.
|
Follow symlinks.
|
||||||
|
|
||||||
|
--maxdepth NUM
|
||||||
|
Descend at most NUM directories below the command line arguments.
|
||||||
|
A value of zero only searches the starting-points themselves.
|
||||||
|
|
||||||
--mmap
|
--mmap
|
||||||
Search using memory maps when possible. This is enabled by default
|
Search using memory maps when possible. This is enabled by default
|
||||||
when ripgrep thinks it will be faster. (Note that mmap searching
|
when ripgrep thinks it will be faster. (Note that mmap searching
|
||||||
@ -222,6 +226,7 @@ pub struct RawArgs {
|
|||||||
flag_invert_match: bool,
|
flag_invert_match: bool,
|
||||||
flag_line_number: bool,
|
flag_line_number: bool,
|
||||||
flag_fixed_strings: bool,
|
flag_fixed_strings: bool,
|
||||||
|
flag_maxdepth: Option<usize>,
|
||||||
flag_mmap: bool,
|
flag_mmap: bool,
|
||||||
flag_no_heading: bool,
|
flag_no_heading: bool,
|
||||||
flag_no_ignore: bool,
|
flag_no_ignore: bool,
|
||||||
@ -272,6 +277,7 @@ pub struct Args {
|
|||||||
invert_match: bool,
|
invert_match: bool,
|
||||||
line_number: bool,
|
line_number: bool,
|
||||||
line_per_match: bool,
|
line_per_match: bool,
|
||||||
|
maxdepth: Option<usize>,
|
||||||
mmap: bool,
|
mmap: bool,
|
||||||
no_ignore: bool,
|
no_ignore: bool,
|
||||||
no_ignore_parent: bool,
|
no_ignore_parent: bool,
|
||||||
@ -399,6 +405,7 @@ impl RawArgs {
|
|||||||
invert_match: self.flag_invert_match,
|
invert_match: self.flag_invert_match,
|
||||||
line_number: !self.flag_no_line_number && self.flag_line_number,
|
line_number: !self.flag_no_line_number && self.flag_line_number,
|
||||||
line_per_match: self.flag_vimgrep,
|
line_per_match: self.flag_vimgrep,
|
||||||
|
maxdepth: self.flag_maxdepth,
|
||||||
mmap: mmap,
|
mmap: mmap,
|
||||||
no_ignore: no_ignore,
|
no_ignore: no_ignore,
|
||||||
no_ignore_parent:
|
no_ignore_parent:
|
||||||
@ -681,7 +688,10 @@ impl Args {
|
|||||||
|
|
||||||
/// Create a new recursive directory iterator at the path given.
|
/// Create a new recursive directory iterator at the path given.
|
||||||
pub fn walker(&self, path: &Path) -> Result<walk::Iter> {
|
pub fn walker(&self, path: &Path) -> Result<walk::Iter> {
|
||||||
let wd = WalkDir::new(path).follow_links(self.follow);
|
let mut wd = WalkDir::new(path).follow_links(self.follow);
|
||||||
|
if let Some(maxdepth) = self.maxdepth {
|
||||||
|
wd = wd.max_depth(maxdepth);
|
||||||
|
}
|
||||||
let mut ig = Ignore::new();
|
let mut ig = Ignore::new();
|
||||||
// Only register ignore rules if this is a directory. If it's a file,
|
// Only register ignore rules if this is a directory. If it's a file,
|
||||||
// then it was explicitly given by the end user, so we always search
|
// then it was explicitly given by the end user, so we always search
|
||||||
|
@ -831,6 +831,21 @@ sherlock\x00can extract a clew from a wisp of straw or a flake of cigar ash;
|
|||||||
assert_eq!(lines, expected);
|
assert_eq!(lines, expected);
|
||||||
});
|
});
|
||||||
|
|
||||||
|
// See: https://github.com/BurntSushi/ripgrep/issues/109
|
||||||
|
clean!(max_depth, "far", ".", |wd: WorkDir, mut cmd: Command| {
|
||||||
|
wd.create_dir("one");
|
||||||
|
wd.create("one/pass", "far");
|
||||||
|
wd.create_dir("one/too");
|
||||||
|
wd.create("one/too/many", "far");
|
||||||
|
|
||||||
|
cmd.arg("--maxdepth").arg("2");
|
||||||
|
|
||||||
|
let lines: String = wd.stdout(&mut cmd);
|
||||||
|
let expected = path("one/pass:far\n");
|
||||||
|
|
||||||
|
assert_eq!(lines, expected);
|
||||||
|
});
|
||||||
|
|
||||||
#[test]
|
#[test]
|
||||||
fn binary_nosearch() {
|
fn binary_nosearch() {
|
||||||
let wd = WorkDir::new("binary_nosearch");
|
let wd = WorkDir::new("binary_nosearch");
|
||||||
|
Loading…
x
Reference in New Issue
Block a user