summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
-rw-r--r--CHANGELOG.md2
-rw-r--r--crates/ignore/src/gitignore.rs18
2 files changed, 19 insertions, 1 deletions
diff --git a/CHANGELOG.md b/CHANGELOG.md
index a3cf8073..5de53e23 100644
--- a/CHANGELOG.md
+++ b/CHANGELOG.md
@@ -46,6 +46,8 @@ Bug fixes:
Fix gitignore parsing bug where a trailing `\/` resulted in an error.
* [BUG #2243](https://github.com/BurntSushi/ripgrep/issues/2243):
Fix `--sort` flag for values other than `path`.
+* [BUG #2392](https://github.com/BurntSushi/ripgrep/issues/2392):
+ Improve global git config parsing of the `excludesFile` field.
* [BUG #2480](https://github.com/BurntSushi/ripgrep/issues/2480):
Fix bug when using inline regex flags with `-e/--regexp`.
* [BUG #2523](https://github.com/BurntSushi/ripgrep/issues/2523):
diff --git a/crates/ignore/src/gitignore.rs b/crates/ignore/src/gitignore.rs
index da007298..0b667f26 100644
--- a/crates/ignore/src/gitignore.rs
+++ b/crates/ignore/src/gitignore.rs
@@ -605,7 +605,7 @@ fn parse_excludes_file(data: &[u8]) -> Option<PathBuf> {
Regex::builder()
.configure(Regex::config().utf8_empty(false))
.syntax(syntax::Config::new().utf8(false))
- .build(r"(?im-u)^\s*excludesfile\s*=\s*(\S+)\s*$")
+ .build(r#"(?im-u)^\s*excludesfile\s*=\s*"?\s*(\S+?)\s*"?\s*$"#)
.unwrap()
});
// We don't care about amortizing allocs here I think. This should only
@@ -772,6 +772,22 @@ mod tests {
assert!(super::parse_excludes_file(&data).is_none());
}
+ #[test]
+ fn parse_excludes_file4() {
+ let data = bytes("[core]\nexcludesFile = \"~/foo/bar\"");
+ let got = super::parse_excludes_file(&data);
+ assert_eq!(
+ path_string(got.unwrap()),
+ super::expand_tilde("~/foo/bar")
+ );
+ }
+
+ #[test]
+ fn parse_excludes_file5() {
+ let data = bytes("[core]\nexcludesFile = \" \"~/foo/bar \" \"");
+ assert!(super::parse_excludes_file(&data).is_none());
+ }
+
// See: https://github.com/BurntSushi/ripgrep/issues/106
#[test]
fn regression_106() {