From: Serhiy Storchaka Date: Sun, 11 Feb 2024 10:24:13 +0000 (+0200) Subject: gh-79382: Fix recursive glob() with trailing "**" (GH-115134) X-Git-Tag: v3.13.0a4~81 X-Git-Url: http://git.ipfire.org/gitweb.cgi?a=commitdiff_plain;h=aeffc7f8951e04258f0fd8cadfa6cd8b704730f6;p=thirdparty%2FPython%2Fcpython.git gh-79382: Fix recursive glob() with trailing "**" (GH-115134) Trailing "**" no longer allows to match files and non-existing paths in recursive glob(). --- diff --git a/Lib/glob.py b/Lib/glob.py index 4a335a10766c..343be78a73b2 100644 --- a/Lib/glob.py +++ b/Lib/glob.py @@ -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) diff --git a/Lib/test/test_glob.py b/Lib/test/test_glob.py index aa5fac8eca13..8b2ea8f89f5d 100644 --- a/Lib/test/test_glob.py +++ b/Lib/test/test_glob.py @@ -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') diff --git a/Misc/NEWS.d/next/Library/2024-02-07-12-37-52.gh-issue-79382.Yz_5WB.rst b/Misc/NEWS.d/next/Library/2024-02-07-12-37-52.gh-issue-79382.Yz_5WB.rst new file mode 100644 index 000000000000..5eb188894318 --- /dev/null +++ b/Misc/NEWS.d/next/Library/2024-02-07-12-37-52.gh-issue-79382.Yz_5WB.rst @@ -0,0 +1,2 @@ +Trailing ``**`` no longer allows to match files and non-existing paths in +recursive :func:`~glob.glob`.