bpy.path.reduce_dirs() - new utility function to de-duplicate and remove nested paths before doing a recursive search.
This commit is contained in:
@@ -35,6 +35,7 @@ __all__ = (
|
|||||||
"extensions_audio",
|
"extensions_audio",
|
||||||
"is_subdir",
|
"is_subdir",
|
||||||
"module_names",
|
"module_names",
|
||||||
|
"reduce_dirs",
|
||||||
"relpath",
|
"relpath",
|
||||||
"resolve_ncase",
|
"resolve_ncase",
|
||||||
)
|
)
|
||||||
@@ -304,3 +305,27 @@ def basename(path):
|
|||||||
Use for Windows compatibility.
|
Use for Windows compatibility.
|
||||||
"""
|
"""
|
||||||
return _os.path.basename(path[2:] if path[:2] in {"//", b"//"} else path)
|
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
|
||||||
|
|||||||
Reference in New Issue
Block a user