From 050d3807435bdb0ac77fcd9f411c6da739cde4e9 Mon Sep 17 00:00:00 2001 From: Mr-Pine Date: Sun, 8 Jun 2025 12:36:21 +0200 Subject: [PATCH] Don't recursively walk local-only dirs with NO_DELETE --- PFERD/output_dir.py | 14 ++++++++++++-- PFERD/report.py | 3 +++ 2 files changed, 15 insertions(+), 2 deletions(-) diff --git a/PFERD/output_dir.py b/PFERD/output_dir.py index fea69cf..4aaf4b6 100644 --- a/PFERD/output_dir.py +++ b/PFERD/output_dir.py @@ -531,6 +531,13 @@ async def _cleanup(self, path: Path, pure: PurePath) -> None: await self._cleanup_file(path, pure) async def _cleanup_dir(self, path: Path, pure: PurePath, delete_self: bool = True) -> None: + if self._on_conflict in { + OnConflict.NO_DELETE, + OnConflict.NO_DELETE_PROMPT_OVERWRITE, + } and not self.report.contains_marked(pure): + self._report_not_deleted(pure) + return + for child in sorted(path.iterdir()): pure_child = pure / child.name await self._cleanup(child, pure_child) @@ -551,8 +558,11 @@ async def _cleanup_file(self, path: Path, pure: PurePath) -> None: except OSError: pass else: - log.not_deleted("[bold bright_magenta]", "Not deleted", fmt_path(pure)) - self._report.not_delete_file(pure) + self._report_not_deleted(pure) + + def _report_not_deleted(self, path: PurePath) -> None: + log.not_deleted("[bold bright_magenta]", "Not deleted", fmt_path(path)) + self._report.not_delete_file(path) def load_prev_report(self) -> None: log.explain_topic(f"Loading previous report from {fmt_real_path(self._report_path)}") diff --git a/PFERD/report.py b/PFERD/report.py index 5b37c1c..1a2a469 100644 --- a/PFERD/report.py +++ b/PFERD/report.py @@ -176,6 +176,9 @@ def marked(self) -> set[PurePath]: def is_marked(self, path: PurePath) -> bool: return path in self.marked + def contains_marked(self, path: PurePath) -> bool: + return any(marked_file.is_relative_to(path) for marked_file in self.marked) + def add_file(self, path: PurePath) -> None: """ Unlike mark(), this function accepts any paths.