scan: never record its own database files (closes #115)
check / check (push) Canceled after 0s
check / check (push) Canceled after 0s
When the database lay under a scanned operand, the walk recorded the database file, its -wal and -shm files and its .lock file like any other file, so every rescan updated them and report paired them with empty files. Once the database and the lock file are open, the scan now notes their device and inode, and the walk passes over a file with one of them, as an operand or below one, printing no line and counting nothing. Matching by device and inode holds through a symlinked directory, where comparing paths would not. A record an earlier scan left for one of them is deleted as unverified. README's smoke-test note on keeping the database out of the tree is gone, as it no longer holds. Judgement call: walkRules, in exclude.go, carries the noted files to the walk. Model: opus-5-5
This commit was merged in pull request #128.
This commit is contained in:
+38
@@ -118,6 +118,44 @@ func TestOpenScanDatabaseCreates(t *testing.T) {
|
||||
}
|
||||
}
|
||||
|
||||
// TestDatabaseFiles opens a database through a symlink to its file:
|
||||
// databaseFiles finds the database file and its -wal and -shm files
|
||||
// beside the symlink's target, where SQLite keeps them, and leaves out
|
||||
// the .lock file, which only a scan creates.
|
||||
func TestDatabaseFiles(t *testing.T) {
|
||||
t.Parallel()
|
||||
|
||||
path := testDBPath(t)
|
||||
link := filepath.Join(t.TempDir(), "link.sqlite")
|
||||
|
||||
err := os.Symlink(path, link)
|
||||
if err != nil {
|
||||
t.Fatal(err)
|
||||
}
|
||||
|
||||
db, err := openScanDatabase(t.Context(), link)
|
||||
if err != nil {
|
||||
t.Fatal(err)
|
||||
}
|
||||
|
||||
defer func() { _ = db.Close() }()
|
||||
|
||||
files, err := databaseFiles(link)
|
||||
if err != nil {
|
||||
t.Fatal(err)
|
||||
}
|
||||
|
||||
got := make([]string, 0, len(files))
|
||||
for _, f := range files {
|
||||
got = append(got, f.path)
|
||||
}
|
||||
|
||||
want := []string{path, path + "-wal", path + "-shm"}
|
||||
if !slices.Equal(got, want) {
|
||||
t.Errorf("databaseFiles(%s) = %q, want %q", link, got, want)
|
||||
}
|
||||
}
|
||||
|
||||
func TestOpenDatabaseUnversionedForeign(t *testing.T) {
|
||||
t.Parallel()
|
||||
|
||||
|
||||
Reference in New Issue
Block a user