aboutsummaryrefslogtreecommitdiff
path: root/cmd/krino/sort_test.go
diff options
context:
space:
mode:
authorLukasz Kasprzak <lukas@labunix.xyz>2026-09-14 23:42:35 +0200
committerLukasz Kasprzak <lukas@labunix.xyz>2026-09-14 23:42:35 +0200
commit166565025832c8a8faf7397766aeaa878980dd2d (patch)
tree8184682259223341e41763434b01e6baa2fb4ec9 /cmd/krino/sort_test.go
parentbb8b547023b0867f31d7452faceef5769a45b94b (diff)
downloadkrino-166565025832c8a8faf7397766aeaa878980dd2d.tar.gz
krino-166565025832c8a8faf7397766aeaa878980dd2d.zip
a real run's later directories are not blocked by earlier claims; -n across directories documented
Diffstat (limited to 'cmd/krino/sort_test.go')
-rw-r--r--cmd/krino/sort_test.go33
1 files changed, 33 insertions, 0 deletions
diff --git a/cmd/krino/sort_test.go b/cmd/krino/sort_test.go
index 12edb24..2a72e6a 100644
--- a/cmd/krino/sort_test.go
+++ b/cmd/krino/sort_test.go
@@ -232,3 +232,36 @@ func TestDryRunShowsNeverDeletedSkip(t *testing.T) {
t.Errorf("explain should name the skipped delete for exactly one copy:\n%s\n%s", outA, outB)
}
}
+
+// TestLaterDirectoryIsNotBlockedByAnEarlierOnesClaims: in a real run each
+// directory is applied before the next is planned, so the disk is the
+// truth; a path an earlier directory moved a file away from, or planned and
+// did not apply, is not "taken" for a later one (triage 28i).
+func TestLaterDirectoryIsNotBlockedByAnEarlierOnesClaims(t *testing.T) {
+ h := home(t)
+ old := time.Date(2026, 1, 1, 0, 0, 0, 0, time.UTC)
+ for _, p := range []string{"ca/x.txt", "cb/x.txt"} {
+ full := filepath.Join(h, p)
+ os.MkdirAll(filepath.Dir(full), 0o755)
+ os.WriteFile(full, []byte(p), 0o644)
+ os.Chtimes(full, old, old)
+ }
+ if code, _, errOut := runCLI(t, "init"); code != 0 {
+ t.Fatal(errOut)
+ }
+ for _, n := range []string{"ca", "cb"} {
+ if code, _, errOut := runCLI(t, "new", n, filepath.Join(h, n)); code != 0 {
+ t.Fatal(errOut)
+ }
+ }
+ dirs := filepath.Join(h, ".config", "krino", "dirs")
+ os.WriteFile(filepath.Join(dirs, "ca.conf"), []byte("(path \"~/ca\")\n(rule \"away\" (move \"~/elsewhere\"))\n"), 0o644)
+ os.WriteFile(filepath.Join(dirs, "cb.conf"), []byte("(path \"~/cb\")\n(on-conflict skip)\n(rule \"in\" (move \"~/ca\"))\n"), 0o644)
+ code, out, errOut := runCLI(t, "-y", "ca", "cb")
+ if code != 0 {
+ t.Fatalf("exit %d\n%s\n%s", code, out, errOut)
+ }
+ if b, err := os.ReadFile(filepath.Join(h, "ca", "x.txt")); err != nil || string(b) != "cb/x.txt" {
+ t.Errorf("cb's x.txt did not move into the place ca's left free: %q, %v\n%s", b, err, out)
+ }
+}