globset: fix bug where trailing . in file name was incorrectly handled

I'm not sure why I did this, but I think I was trying to imitate the
contract of [`std::path::Path::file_name`]:

> Returns None if the path terminates in `..`.

But the status quo clearly did not implement this. And as a result, if
you have a glob that ends in a `.`, it was instead treated as the empty
string (which only matches the empty string).

We fix this by implementing the semantic from the standard library
correctly.

Fixes #2990

[`std::path::Path::file_name`]: https://doc.rust-lang.org/std/path/struct.Path.html#method.file_name
This commit is contained in:
Andrew Gallant
2025-08-17 17:18:27 -04:00
parent ba23ced817
commit 4df1298127
3 changed files with 27 additions and 5 deletions

View File

@@ -23,6 +23,8 @@ Bug fixes:
Ignore a UTF-8 BOM marker at the start of `.gitignore` (and similar files).
* [BUG #2944](https://github.com/BurntSushi/ripgrep/pull/2944):
Fix a bug where the "bytes searched" in `--stats` output could be incorrect.
* [BUG #2990](https://github.com/BurntSushi/ripgrep/issues/2990):
Fix a bug where ripgrep would mishandle globs that ended with a `.`.
Feature enhancements: