mirror of
https://github.com/BurntSushi/ripgrep.git
synced 2025-03-17 20:28:03 +02:00
ignore: fix filtering when searching subdirectories
When searching subdirectories the path was not correctly built and included duplicate parts. This fix will remove the duplicate part if possible. Fixes #1757, Closes #2295
This commit is contained in:
parent
2198bd92fa
commit
cad1f5fae2
@ -21,6 +21,8 @@ Feature enhancements:
|
||||
|
||||
Bug fixes:
|
||||
|
||||
* [BUG #1757](https://github.com/BurntSushi/ripgrep/issues/1757):
|
||||
Fix bug when searching a sub-directory didn't have ignores applied correctly.
|
||||
* [BUG #1891](https://github.com/BurntSushi/ripgrep/issues/1891):
|
||||
Fix bug when using `-w` with a regex that can match the empty string.
|
||||
* [BUG #1911](https://github.com/BurntSushi/ripgrep/issues/1911):
|
||||
|
@ -442,7 +442,29 @@ impl Ignore {
|
||||
}
|
||||
if self.0.opts.parents {
|
||||
if let Some(abs_parent_path) = self.absolute_base() {
|
||||
let path = abs_parent_path.join(path);
|
||||
// What we want to do here is take the absolute base path of
|
||||
// this directory and join it with the path we're searching.
|
||||
// The main issue we want to avoid is accidentally duplicating
|
||||
// directory components, so we try to strip any common prefix
|
||||
// off of `path`. Overall, this seems a little ham-fisted, but
|
||||
// it does fix a nasty bug. It should do fine until we overhaul
|
||||
// this crate.
|
||||
let dirpath = self.0.dir.as_path();
|
||||
let path_prefix = match strip_prefix("./", dirpath) {
|
||||
None => dirpath,
|
||||
Some(stripped_dot_slash) => stripped_dot_slash,
|
||||
};
|
||||
let path = match strip_prefix(path_prefix, path) {
|
||||
None => abs_parent_path.join(path),
|
||||
Some(p) => {
|
||||
let p = match strip_prefix("/", p) {
|
||||
None => p,
|
||||
Some(p) => p,
|
||||
};
|
||||
abs_parent_path.join(p)
|
||||
}
|
||||
};
|
||||
|
||||
for ig in
|
||||
self.parents().skip_while(|ig| !ig.0.is_absolute_parent)
|
||||
{
|
||||
|
@ -952,6 +952,19 @@ rgtest!(r1739_replacement_lineterm_match, |dir: Dir, mut cmd: TestCommand| {
|
||||
eqnice!("af\n", cmd.stdout());
|
||||
});
|
||||
|
||||
// See: https://github.com/BurntSushi/ripgrep/issues/1757
|
||||
rgtest!(f1757, |dir: Dir, _: TestCommand| {
|
||||
dir.create_dir("rust/target");
|
||||
dir.create(".ignore", "rust/target");
|
||||
dir.create("rust/source.rs", "needle");
|
||||
dir.create("rust/target/rustdoc-output.html", "needle");
|
||||
|
||||
let args = &["--files-with-matches", "needle", "rust"];
|
||||
eqnice!("rust/source.rs\n", dir.command().args(args).stdout());
|
||||
let args = &["--files-with-matches", "needle", "./rust"];
|
||||
eqnice!("./rust/source.rs\n", dir.command().args(args).stdout());
|
||||
});
|
||||
|
||||
// See: https://github.com/BurntSushi/ripgrep/issues/1765
|
||||
rgtest!(r1765, |dir: Dir, mut cmd: TestCommand| {
|
||||
dir.create("test", "\n");
|
||||
|
Loading…
x
Reference in New Issue
Block a user