[Python-checkins] python/dist/src/Lib/test test_glob.py,1.8,1.9
jlgijsbers at users.sourceforge.net
jlgijsbers at users.sourceforge.net
Sat Jan 8 14:13:22 CET 2005
Update of /cvsroot/python/python/dist/src/Lib/test
In directory sc8-pr-cvs1.sourceforge.net:/tmp/cvs-serv8739/Lib/test
Modified Files:
test_glob.py
Log Message:
Patch #943206:
`glob.glob()` currently calls itself recursively to build a list of matches of
the dirname part of the pattern and then filters by the basename part. This is
effectively BFS. ``glob.glob('*/*/*/*/*/foo')`` will build a huge list of all
directories 5 levels deep even if only a handful of them contain a ``foo``
entry. A generator-based recusion would never have to store these list at once
by implementing DFS. This patch converts the `glob` function to an `iglob`
recursive generator . `glob()` now just returns ``list(iglob(pattern))``.
I also cleaned up the code a bit (reduced duplicate `has_magic()` checks and
created a second `glob0` helper func so that the main loop need not be
duplicated).
Thanks to Cherniavsky Beni for the patch!
Index: test_glob.py
===================================================================
RCS file: /cvsroot/python/python/dist/src/Lib/test/test_glob.py,v
retrieving revision 1.8
retrieving revision 1.9
diff -u -d -r1.8 -r1.9
--- test_glob.py 30 Aug 2004 10:19:56 -0000 1.8
+++ test_glob.py 8 Jan 2005 13:13:19 -0000 1.9
@@ -61,7 +61,9 @@
else:
pattern = os.path.join(*parts)
p = os.path.join(self.tempdir, pattern)
- return glob.glob(p)
+ res = glob.glob(p)
+ self.assertEqual(list(glob.iglob(p)), res)
+ return res
def assertSequencesEqual_noorder(self, l1, l2):
self.assertEqual(set(l1), set(l2))
More information about the Python-checkins
mailing list