diff options
Diffstat (limited to 'release')
-rw-r--r-- | release/scripts/modules/bpy/path.py | 25 |
1 files changed, 25 insertions, 0 deletions
diff --git a/release/scripts/modules/bpy/path.py b/release/scripts/modules/bpy/path.py index cfc0f474215..33039fa8494 100644 --- a/release/scripts/modules/bpy/path.py +++ b/release/scripts/modules/bpy/path.py @@ -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 |