Update glob from CPython 3.12.2

This commit is contained in:
CPython Developers
2024-04-22 08:38:14 +09:00
committed by Jeong, YunWon
parent 84099514e6
commit 97e3e969e4
2 changed files with 34 additions and 1 deletions

3
Lib/glob.py vendored
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)

32
Lib/test/test_glob.py vendored
View File

@@ -40,6 +40,11 @@ class GlobTests(unittest.TestCase):
os.symlink(self.norm('broken'), self.norm('sym1'))
os.symlink('broken', self.norm('sym2'))
os.symlink(os.path.join('a', 'bcd'), self.norm('sym3'))
self.open_dirfd()
def open_dirfd(self):
if self.dir_fd is not None:
os.close(self.dir_fd)
if {os.open, os.stat} <= os.supports_dir_fd and os.scandir in os.supports_fd:
self.dir_fd = os.open(self.tempdir, os.O_RDONLY | os.O_DIRECTORY)
else:
@@ -332,6 +337,33 @@ 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', '**'), [])
@unittest.skipUnless(hasattr(os, "mkfifo"), 'requires os.mkfifo()')
@unittest.skipIf(sys.platform == "vxworks",
"fifo requires special path on VxWorks")
def test_glob_named_pipe(self):
path = os.path.join(self.tempdir, 'mypipe')
os.mkfifo(path)
# gh-117127: Reopen self.dir_fd to pick up directory changes
self.open_dirfd()
self.assertEqual(self.rglob('mypipe'), [path])
self.assertEqual(self.rglob('mypipe*'), [path])
self.assertEqual(self.rglob('mypipe', ''), [])
self.assertEqual(self.rglob('mypipe', 'sub'), [])
self.assertEqual(self.rglob('mypipe', '*'), [])
def test_glob_many_open_files(self):
depth = 30
base = os.path.join(self.tempdir, 'deep')