summaryrefslogtreecommitdiffstats
path: root/Lib
diff options
context:
space:
mode:
authorSerhiy Storchaka <storchaka@gmail.com>2024-02-11 10:24:13 (GMT)
committerGitHub <noreply@github.com>2024-02-11 10:24:13 (GMT)
commitaeffc7f8951e04258f0fd8cadfa6cd8b704730f6 (patch)
treed94631781d5bfe099bb9c143ebb8710c20e4db98 /Lib
parent573acb30f22a84c0f2c951efa002c9946e29b6a3 (diff)
downloadcpython-aeffc7f8951e04258f0fd8cadfa6cd8b704730f6.zip
cpython-aeffc7f8951e04258f0fd8cadfa6cd8b704730f6.tar.gz
cpython-aeffc7f8951e04258f0fd8cadfa6cd8b704730f6.tar.bz2
gh-79382: Fix recursive glob() with trailing "**" (GH-115134)
Trailing "**" no longer allows to match files and non-existing paths in recursive glob().
Diffstat (limited to 'Lib')
-rw-r--r--Lib/glob.py3
-rw-r--r--Lib/test/test_glob.py11
2 files changed, 13 insertions, 1 deletions
diff --git a/Lib/glob.py b/Lib/glob.py
index 4a335a1..343be78 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 aa5fac8..8b2ea8f 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')