aboutsummaryrefslogtreecommitdiff
path: root/docs
diff options
context:
space:
mode:
authorLukasz Kasprzak <lukas@labunix.xyz>2026-09-14 10:56:21 +0200
committerLukasz Kasprzak <lukas@labunix.xyz>2026-09-14 10:56:21 +0200
commit1506c7dcd6032c04c1df6f5785b6dd3dfe4511cc (patch)
treefb6d573ca8726c1b1d91ba273a284ba666cde3f6 /docs
parentebdd7bb254a0f19f815a644d26ce232de7be0adb (diff)
downloadkrino-1506c7dcd6032c04c1df6f5785b6dd3dfe4511cc.tar.gz
krino-1506c7dcd6032c04c1df6f5785b6dd3dfe4511cc.zip
krino: duplicates are found, never deleted
A rule combining (duplicate) with a delete action is refused at load, and a file that is a duplicate under any duplicate scope its directory uses gets no delete step from any rule: the plan shows it skipped and the chain continues. A failed duplicate check blocks the delete too. Tests cover (matched), another rule's own condition, a test evaluation skipped, two scopes and a failed check, each checking every copy is still on disk.
Diffstat (limited to 'docs')
-rw-r--r--docs/design.md4
1 files changed, 3 insertions, 1 deletions
diff --git a/docs/design.md b/docs/design.md
index 150e135..153bab0 100644
--- a/docs/design.md
+++ b/docs/design.md
@@ -243,7 +243,9 @@ jdupes. Two rules enforce this:
plan shows the step as "skipped: a duplicate is never deleted" and the
rest of the chain continues from the file's current path. This covers what
rule 1 cannot see: a later rule deleting through `(matched)` or through a
- condition of its own.
+ condition of its own. If that lookup fails, the delete is skipped too, as
+ "duplicate check failed, so not deleted: REASON": krino cannot show the
+ file is not a duplicate, so it keeps it.
Together they mean no rule can delete every copy of content that a duplicate
test in that directory can see. Under each scope every scanned file in a