gh-79382: Fix recursive glob() with trailing "**" (GH-115134)

Trailing "**" no longer allows to match files and non-existing paths in
recursive glob().
This commit is contained in:
Serhiy Storchaka 2024-02-11 12:24:13 +02:00 committed by GitHub
parent 573acb30f2
commit aeffc7f895
No known key found for this signature in database
GPG Key ID: B5690EEEBB952194
3 changed files with 15 additions and 1 deletions

View File

@ -132,7 +132,8 @@ def glob1(dirname, pattern):
def _glob2(dirname, pattern, dir_fd, dironly, include_hidden=False):
assert _isrecursive(pattern)
yield pattern[:0]
if not dirname or _isdir(dirname, dir_fd):
yield pattern[:0]
yield from _rlistdir(dirname, dir_fd, dironly,
include_hidden=include_hidden)

View File

@ -333,6 +333,17 @@ class GlobTests(unittest.TestCase):
eq(glob.glob('**', recursive=True, include_hidden=True),
[join(*i) for i in full+rec])
def test_glob_non_directory(self):
eq = self.assertSequencesEqual_noorder
eq(self.rglob('EF'), self.joins(('EF',)))
eq(self.rglob('EF', ''), [])
eq(self.rglob('EF', '*'), [])
eq(self.rglob('EF', '**'), [])
eq(self.rglob('nonexistent'), [])
eq(self.rglob('nonexistent', ''), [])
eq(self.rglob('nonexistent', '*'), [])
eq(self.rglob('nonexistent', '**'), [])
def test_glob_many_open_files(self):
depth = 30
base = os.path.join(self.tempdir, 'deep')

View File

@ -0,0 +1,2 @@
Trailing ``**`` no longer allows to match files and non-existing paths in
recursive :func:`~glob.glob`.