summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorAndrew Gallant <jamslam@gmail.com>2019-01-23 18:12:35 -0500
committerAndrew Gallant <jamslam@gmail.com>2019-01-23 18:12:35 -0500
commit23be3cf850386ec0d4d8724fb9bf5ddeaab2c27d (patch)
tree667cb25777094c7b296a1004f3f0f2df0de85526
parentb48bbf527d9d533a6636fa829ee466ea4130f3a0 (diff)
ignore: fix handling of **
When deciding whether to add the `**/` prefix or not, we should choose not to add it if the pattern is simply a bare `**`. Previously, we were only not adding it if it was `**/`, which is correct, but we also need to do it for `**` since `**` can already match anywhere. There's likely a more principled solution to this, but this works for now. Fixes #1173
-rw-r--r--ignore/src/gitignore.rs4
-rw-r--r--tests/regression.rs8
2 files changed, 10 insertions, 2 deletions
diff --git a/ignore/src/gitignore.rs b/ignore/src/gitignore.rs
index 1a44e626..48d1bb4b 100644
--- a/ignore/src/gitignore.rs
+++ b/ignore/src/gitignore.rs
@@ -69,8 +69,7 @@ impl Glob {
/// Returns true if and only if this glob has a `**/` prefix.
fn has_doublestar_prefix(&self) -> bool {
- self.actual.starts_with("**/")
- || (self.actual == "**" && self.is_only_dir)
+ self.actual.starts_with("**/") || self.actual == "**"
}
}
@@ -710,6 +709,7 @@ mod tests {
ignored!(ig40, ROOT, "\\*", "*");
ignored!(ig41, ROOT, "\\a", "a");
ignored!(ig42, ROOT, "s*.rs", "sfoo.rs");
+ ignored!(ig43, ROOT, "**", "foo.rs");
not_ignored!(ignot1, ROOT, "amonths", "months");
not_ignored!(ignot2, ROOT, "monthsa", "months");
diff --git a/tests/regression.rs b/tests/regression.rs
index 8102fd90..e4da2f1c 100644
--- a/tests/regression.rs
+++ b/tests/regression.rs
@@ -596,3 +596,11 @@ rgtest!(r1164, |dir: Dir, mut cmd: TestCommand| {
cmd.arg("--no-ignore-file-case-insensitive").stdout()
);
});
+
+// See: https://github.com/BurntSushi/ripgrep/issues/1173
+rgtest!(r1173, |dir: Dir, mut cmd: TestCommand| {
+ dir.create_dir(".git");
+ dir.create(".gitignore", "**");
+ dir.create("foo", "test");
+ cmd.arg("test").assert_err();
+});