GH-102613: Improve performance of pathlib.Path.rglob()
#104244
Merged
Add this suggestion to a batch that can be applied as a single commit. This suggestion is invalid because no changes were made to the code. Suggestions cannot be applied while the pull request is closed. Suggestions cannot be applied while viewing a subset of changes. Only one suggestion per line can be applied in a batch. Add this suggestion to a batch that can be applied as a single commit. Applying suggestions on deleted lines is not supported. You must change the existing code in this line in order to create a valid suggestion. Outdated suggestions cannot be applied. This suggestion has been applied or marked resolved. Suggestions cannot be applied from pending reviews. Suggestions cannot be applied on multi-line comments. Suggestions cannot be applied while the pull request is queued to merge. Suggestion cannot be applied right now. Please check back later.
Stop de-duplicating results in
_RecursiveWildcardSelector
. A new_DoubleRecursiveWildcardSelector
class is introduced which performs de-duplication, but this is used only for patterns with multiple non-adjacent**
segments, such aspath.glob('**/foo/**')
. By avoiding the use of a set in most cases,PurePath.__hash__()
is not called, and so paths do not need to be parsed and (case-) normalised.Also merge adjacent
**
segments in patterns.Timings: