mirror of
https://github.com/BurntSushi/ripgrep.git
synced 2025-01-29 22:01:04 +02:00
Fix bug when processing parent gitignore files.
This particular bug was triggered whenever a search was run in a directory with a parent directory that contains a relevant .gitignore file. In particular, before matching against a parent directory's gitignore rules, a path's leading `./` was not stripped, which results in errant matching. We now make sure `./` is stripped. Fixes #184.
This commit is contained in:
parent
94d600e6e1
commit
f2e1711781
@ -20,7 +20,7 @@ use std::io;
|
|||||||
use std::path::{Path, PathBuf};
|
use std::path::{Path, PathBuf};
|
||||||
|
|
||||||
use gitignore::{self, Gitignore, GitignoreBuilder, Match, Pattern};
|
use gitignore::{self, Gitignore, GitignoreBuilder, Match, Pattern};
|
||||||
use pathutil::{file_name, is_hidden};
|
use pathutil::{file_name, is_hidden, strip_prefix};
|
||||||
use types::Types;
|
use types::Types;
|
||||||
|
|
||||||
const IGNORE_NAMES: &'static [&'static str] = &[
|
const IGNORE_NAMES: &'static [&'static str] = &[
|
||||||
@ -222,7 +222,10 @@ impl Ignore {
|
|||||||
|
|
||||||
/// Returns true if and only if the given file path should be ignored.
|
/// Returns true if and only if the given file path should be ignored.
|
||||||
pub fn ignored<P: AsRef<Path>>(&self, path: P, is_dir: bool) -> bool {
|
pub fn ignored<P: AsRef<Path>>(&self, path: P, is_dir: bool) -> bool {
|
||||||
let path = path.as_ref();
|
let mut path = path.as_ref();
|
||||||
|
if let Some(p) = strip_prefix("./", path) {
|
||||||
|
path = p;
|
||||||
|
}
|
||||||
let mat = self.overrides.matched(path, is_dir);
|
let mat = self.overrides.matched(path, is_dir);
|
||||||
if let Some(is_ignored) = self.ignore_match(path, mat) {
|
if let Some(is_ignored) = self.ignore_match(path, mat) {
|
||||||
return is_ignored;
|
return is_ignored;
|
||||||
|
@ -837,6 +837,20 @@ clean!(
|
|||||||
assert_eq!(lines, TESTCASE);
|
assert_eq!(lines, TESTCASE);
|
||||||
});
|
});
|
||||||
|
|
||||||
|
// See: https://github.com/BurntSushi/ripgrep/issues/184
|
||||||
|
clean!(regression_184, "test", ".", |wd: WorkDir, mut cmd: Command| {
|
||||||
|
wd.create(".gitignore", ".*");
|
||||||
|
wd.create_dir("foo/bar");
|
||||||
|
wd.create("foo/bar/baz", "test");
|
||||||
|
|
||||||
|
let lines: String = wd.stdout(&mut cmd);
|
||||||
|
assert_eq!(lines, format!("{}:test\n", path("foo/bar/baz")));
|
||||||
|
|
||||||
|
cmd.current_dir(wd.path().join("./foo/bar"));
|
||||||
|
let lines: String = wd.stdout(&mut cmd);
|
||||||
|
assert_eq!(lines, "baz:test\n");
|
||||||
|
});
|
||||||
|
|
||||||
// See: https://github.com/BurntSushi/ripgrep/issues/20
|
// See: https://github.com/BurntSushi/ripgrep/issues/20
|
||||||
sherlock!(feature_20_no_filename, "Sherlock", ".",
|
sherlock!(feature_20_no_filename, "Sherlock", ".",
|
||||||
|wd: WorkDir, mut cmd: Command| {
|
|wd: WorkDir, mut cmd: Command| {
|
||||||
|
Loading…
x
Reference in New Issue
Block a user