10000 Update glob from CPython 3.12.2 · RustPython/RustPython@97e3e96 · GitHub
[go: up one dir, main page]

Skip to content

Commit 97e3e96

Browse files
CPython Developersyouknowone
CPython Developers
authored andcommitted
Update glob from CPython 3.12.2
1 parent 8409951 commit 97e3e96

File tree

2 files changed

+34
-1
lines changed

2 files changed

+34
-1
lines changed

Lib/glob.py

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -132,7 +132,8 @@ def glob1(dirname, pattern):
132132

133133
def _glob2(dirname, pattern, dir_fd, dironly, include_hidden=False):
134134
assert _isrecursive(pattern)
135-
yield pattern[:0]
135+
if not dirname or _isdir(dirname, dir_fd):
136+
yield pattern[:0]
136137
yield from _rlistdir(dirname, dir_fd, dironly,
137138
include_hidden=include_hidden)
138139

Lib/test/test_glob.py

Lines changed: 32 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -40,6 +40,11 @@ def setUp(self):
4040
os.symlink(self.norm('broken'), self.norm('sym1'))
4141
os.symlink('broken', self.norm('sym2'))
4242
os.symlink(os.path.join('a', 'bcd'), self.norm('sym3'))
43+
self.open_dirfd()
44+
45+
def open_dirfd(self):
46+
if self.dir_fd is not None:
47+
os.close(self.dir_fd)
4348
if {os.open, os.stat} <= os.supports_dir_fd and os.scandir in os.supports_fd:
4449
self.dir_fd = os.open(self.tempdir, os.O_RDONLY | os.O_DIRECTORY)
4550
else:
@@ -332,6 +337,33 @@ def test_recursive_glob(self):
332337
eq(glob.glob('**', recursive=True, include_hidden=True),
333338
[join(*i) for i in full+rec])
334339

340+
def test_glob_non_directory(self):
341+
eq = self.assertSequencesEqual_noorder
342+
eq(self.rglob('EF'), self.joins(('EF',)))
343+
eq(self.rglob('EF', ''), [])
344+
eq(self.rglob('EF', '*'), [])
345+
eq(self.rglob('EF', '**'), [])
346+
eq(self.rglob('nonexistent'), [])
347+
eq(self.rglob('nonexistent', ''), [])
348+
eq(self.rglob('nonexistent', '*'), [])
349+
eq(self.rglob('nonexistent', '**'), [])
350+
351+
@unittest.skipUnless(hasattr(os, "mkfifo"), 'requires os.mkfifo()')
352+
@unittest.skipIf(sys.platform == "vxworks",
353+
"fifo requires special path on VxWorks")
354+
def test_glob_named_pipe(self):
355+
path = os.path.join(self.tempdir, 'mypipe')
356+
os.mkfifo(path)
357+
358+
# gh-117127: Reopen self.dir_fd to pick up directory changes
359+
self.open_dirfd()
360+
361+
self.assertEqual(self.rglob('mypipe'), [path])
362+
self.assertEqual(self.rglob('mypipe*'), [path])
363+
self.assertEqual(self.rglob('mypipe', ''), [])
364+
self.assertEqual(self.rglob('mypipe', 'sub'), [])
365+
self.assertEqual(self.rglob('mypipe', '*'), [])
366+
335367
def test_glob_many_open_files(self):
336368
depth = 30
337369
base = os.path.join(self.tempdir, 'deep')

0 commit comments

Comments
 (0)
0