diff --git a/.jules/bolt.md b/.jules/bolt.md new file mode 100644 index 0000000000..a82bf23efb --- /dev/null +++ b/.jules/bolt.md @@ -0,0 +1,4 @@ + +## 2024-05-24 - Optimize path containment checks +**Learning:** `os.path.commonpath` is a significant bottleneck for frequent path containment checks due to internal list allocations and path splitting overhead. +**Action:** Use `os.path.abspath` and `str.startswith()` instead, conditionally appending a trailing `os.sep` to the absolute directory before comparison to prevent path traversal bugs (e.g., `abs_path == abs_dir or abs_path.startswith(abs_dir + ('' if abs_dir.endswith(os.sep) else os.sep))`). diff --git a/helpers/files.py b/helpers/files.py index c77ab54cf1..cd5d763c8c 100644 --- a/helpers/files.py +++ b/helpers/files.py @@ -653,7 +653,8 @@ def is_in_dir(path: str, dir: str): # check if the given path is within the directory abs_path = os.path.abspath(path) abs_dir = os.path.abspath(dir) - return os.path.commonpath([abs_path, abs_dir]) == abs_dir + # ⚡ Bolt Optimization: Use string prefix matching instead of commonpath to avoid list allocations and path splitting overhead + return abs_path == abs_dir or abs_path.startswith(abs_dir + ('' if abs_dir.endswith(os.sep) else os.sep)) def get_subdirectories(