]> git.ipfire.org Git - thirdparty/Python/cpython.git/commit
Patch #943206:
authorJohannes Gijsbers <jlg@dds.nl>
Sat, 8 Jan 2005 13:13:19 +0000 (13:13 +0000)
committerJohannes Gijsbers <jlg@dds.nl>
Sat, 8 Jan 2005 13:13:19 +0000 (13:13 +0000)
commit836f5433f7ee79f208186ca0d10594b22cf7e05b
treed5909575b732a17a75dc5e0e76180d61a5d037c6
parente4172eadf3fb9c1de591305ad4ca4ce3e252abd3
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!
Doc/lib/libglob.tex
Lib/glob.py
Lib/test/test_glob.py