bpy.path.reduce_dirs() - new utility function to de-duplicate and remove nested paths before doing a recursive search.

This commit is contained in:
Campbell Barton 2013-08-12 07:44:38 +00:00
parent 795fa1f199
commit 4fbe426151

@ -35,6 +35,7 @@ __all__ = (
"extensions_audio",
"is_subdir",
"module_names",
"reduce_dirs",
"relpath",
"resolve_ncase",
)
@ -304,3 +305,27 @@ def basename(path):
Use for Windows compatibility.
"""
return _os.path.basename(path[2:] if path[:2] in {"//", b"//"} else path)
def reduce_dirs(dirs):
"""
Given a sequence of directories, remove duplicates and
any directories nested in one of the other paths.
(Useful for recursive path searching).
:arg dirs: Sequence of directory paths.
:type dirs: sequence
:return: A unique list of paths.
:rtype: list
"""
dirs = list({_os.path.normpath(_os.path.abspath(d)) for d in dirs})
dirs.sort(key=lambda d: len(d))
for i in range(len(dirs) -1, -1, -1):
for j in range(i):
print(i, j)
if len(dirs[i]) == len(dirs[j]):
break
elif is_subdir(dirs[i], dirs[j]):
del dirs[i]
break
return dirs