[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:
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

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 @@
             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