TODO: Review #104. TODO: Review #105. TODO: Tests for #106.
Bug fixes:
- Pull #106: Fix escape() not escaping backslash characters.
Improvements:
- Pull #110: Nicer debug print outs (and str for regex pattern).
- Issue #103: Using re2 fails if pyre2 is also installed.
Bug fixes:
- Issue #101: pyright strict errors with pathspec >= 1.0.0.
- Issue #102: No module named 'tomllib'.
Bug fixes:
- Type hint collections.abc.Callable does not properly replace typing.Callable until Python 3.9.2.
Bug fixes:
- Issue #100: ValueError(f"{patterns=!r} cannot be empty.") when using black.
Major changes:
- Issue #91: Dropped support of EoL Python 3.8.
- Added concept of backends to allow for faster regular expression matching. The backend can be controlled using the backend argument to PathSpec(), PathSpec.from_lines(), GitIgnoreSpec(), and GitIgnoreSpec.from_lines().
- Renamed "gitwildmatch" pattern back to "gitignore". The "gitignore" pattern behaves slightly differently when used with PathSpec (gitignore as documented) than with GitIgnoreSpec (replicates Git's edge cases).
API changes:
- Breaking: protected method pathspec.pathspec.PathSpec._match_file() (with a leading underscore) has been removed and replaced by backends. This does not affect normal usage of PathSpec or GitIgnoreSpec. Only custom subclasses will be affected. If this breaks your usage, let me know by opening an issue.
- Deprecated: "gitwildmatch" is now an alias for "gitignore".
- Deprecated: pathspec.patterns.GitWildMatchPattern is now an alias for pathspec.patterns.gitignore.spec.GitIgnoreSpecPattern.
- Deprecated: pathspec.patterns.gitwildmatch module has been replaced by the pathspec.patterns.gitignore package.
- Deprecated: pathspec.patterns.gitwildmatch.GitWildMatchPattern is now an alias for pathspec.patterns.gitignore.spec.GitIgnoreSpecPattern.
- Deprecated: pathspec.patterns.gitwildmatch.GitWildMatchPatternError is now an alias for pathspec.patterns.gitignore.GitIgnorePatternError.
- Removed: pathspec.patterns.gitwildmatch.GitIgnorePattern has been deprecated since v0.4 (2016-07-15).
- Signature of method pathspec.pattern.RegexPattern.match_file() has been changed from def match_file(self, file: str) -> RegexMatchResult | None to def match_file(self, file: AnyStr) -> RegexMatchResult | None to reflect usage.
- Signature of class method pathspec.pattern.RegexPattern.pattern_to_regex() has been changed from def pattern_to_regex(cls, pattern: str) -> tuple[str, bool] to def pattern_to_regex(cls, pattern: AnyStr) -> tuple[AnyStr | None, bool | None] to reflect usage and documentation.
New features:
- Added optional "hyperscan" backend using hyperscan library. It will automatically be used when installed. This dependency can be installed with
pip install 'pathspec[hyperscan]'. - Added optional "re2" backend using the google-re2 library. It will automatically be used when installed. This dependency can be installed with
pip install 'pathspec[re2]'. - Added optional dependency on typing-extensions library to improve some type hints.
Bug fixes:
- Issue #93: Do not remove leading spaces.
- Issue #95: Matching for files inside folder does not seem to behave like .gitignore's.
- Issue #98: UnboundLocalError in RegexPattern when initialized with pattern=None.
- Type hint on return value of pathspec.pattern.RegexPattern.match_file() to match documentation.
Improvements:
- Mark Python 3.13 and 3.14 as supported.
- No-op patterns are now filtered out when matching files, slightly improving performance.
- Fix performance regression in iter_tree_files() from v0.10.