diff options
Diffstat (limited to 'tools/util.py')
-rw-r--r-- | tools/util.py | 25 |
1 files changed, 17 insertions, 8 deletions
diff --git a/tools/util.py b/tools/util.py index 2cb22ed6a..306f2109f 100644 --- a/tools/util.py +++ b/tools/util.py @@ -131,15 +131,24 @@ def touch(fname): # Recursive search for files of certain extensions. -# (Recursive glob doesn't exist in python 2.7.) -def find_exts(directory, *extensions): +# * Recursive glob doesn't exist in python 2.7. +# * On windows, `os.walk()` unconditionally follows symlinks. +# The `skip` parameter should be used to avoid recursing through those. +def find_exts(directories, extensions, skip=[]): + assert isinstance(directories, list) + assert isinstance(extensions, list) + skip = [os.path.normpath(i) for i in skip] matches = [] - for root, dirnames, filenames in os.walk(directory): - for filename in filenames: - for ext in extensions: - if filename.endswith(ext): - matches.append(os.path.join(root, filename)) - break + for directory in directories: + for root, dirnames, filenames in os.walk(directory): + if root in skip: + dirnames[:] = [] # Don't recurse further into this directory. + continue + for filename in filenames: + for ext in extensions: + if filename.endswith(ext): + matches.append(os.path.join(root, filename)) + break return matches |