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 { 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() {