From 047bd7f1c4e847d11cfa4911d40924b79d673d26 Mon Sep 17 00:00:00 2001 From: sneak Date: Sun, 9 Aug 2026 01:39:13 +0000 Subject: [PATCH] Fix remaining wsl_v5 whitespace findings (refs #61) Insert the blank line wsl_v5 requires above `defer` and `go` statements that share no variables with the statement above them. Applied mechanically via `make lint-fix`; the diff is 60 added blank lines and nothing else. --- cmd/vaultik/main.go | 2 ++ internal/blobgen/compress.go | 1 + internal/chunker/chunker.go | 1 + internal/cli/app.go | 1 + internal/database/database_test.go | 4 ++++ internal/database/repository_debug_test.go | 1 + internal/database/uploads.go | 1 + internal/pidlock/pidlock_test.go | 3 +++ internal/s3/client_test.go | 2 ++ internal/s3/s3_test.go | 4 ++++ internal/snapshot/backup_test.go | 1 + internal/snapshot/file_change_test.go | 2 ++ internal/snapshot/progress.go | 1 + internal/snapshot/scanner.go | 1 + internal/snapshot/scanner_test.go | 2 ++ internal/snapshot/snapshot.go | 9 +++++++++ internal/snapshot/snapshot_test.go | 3 +++ internal/storage/file.go | 3 +++ internal/storage/s3.go | 1 + internal/vaultik/blobcache.go | 1 + internal/vaultik/blobcache_test.go | 5 +++++ internal/vaultik/integration_test.go | 4 ++++ internal/vaultik/restore.go | 3 +++ internal/vaultik/restore_sweeper.go | 1 + internal/vaultik/snapshot.go | 1 + internal/vaultik/verify.go | 2 ++ 26 files changed, 60 insertions(+) diff --git a/cmd/vaultik/main.go b/cmd/vaultik/main.go index c9cbacc..4cda5a9 100644 --- a/cmd/vaultik/main.go +++ b/cmd/vaultik/main.go @@ -16,6 +16,7 @@ func main() { if err != nil { panic("could not create CPU profile: " + err.Error()) } + defer func() { _ = f.Close() }() err = pprof.StartCPUProfile(f) @@ -33,6 +34,7 @@ func main() { if err != nil { panic("could not create memory profile: " + err.Error()) } + defer func() { _ = f.Close() }() runtime.GC() // get up-to-date statistics diff --git a/internal/blobgen/compress.go b/internal/blobgen/compress.go index 8eefc77..40be29c 100644 --- a/internal/blobgen/compress.go +++ b/internal/blobgen/compress.go @@ -64,6 +64,7 @@ func CompressStream( } closed := false + defer func() { if !closed { _ = w.Close() diff --git a/internal/chunker/chunker.go b/internal/chunker/chunker.go index 8fedb30..c5cee7b 100644 --- a/internal/chunker/chunker.go +++ b/internal/chunker/chunker.go @@ -163,6 +163,7 @@ func (c *Chunker) ChunkFile(path string) ([]Chunk, error) { if err != nil { return nil, fmt.Errorf("opening file: %w", err) } + defer func() { err := file.Close() if err != nil && err.Error() != "invalid argument" { diff --git a/internal/cli/app.go b/internal/cli/app.go index e45596c..492f7e4 100644 --- a/internal/cli/app.go +++ b/internal/cli/app.go @@ -157,6 +157,7 @@ func RunApp(ctx context.Context, app *fx.App) error { // Handle shutdown shutdownComplete := make(chan struct{}) + go func() { defer close(shutdownComplete) diff --git a/internal/database/database_test.go b/internal/database/database_test.go index 9e1c214..24cf416 100644 --- a/internal/database/database_test.go +++ b/internal/database/database_test.go @@ -19,6 +19,7 @@ func TestDatabase(t *testing.T) { if err != nil { t.Fatalf("failed to create database: %v", err) } + defer func() { err := db.Close() if err != nil { @@ -73,6 +74,7 @@ func TestDatabaseConcurrentAccess(t *testing.T) { if err != nil { t.Fatalf("failed to create database: %v", err) } + defer func() { err := db.Close() if err != nil { @@ -182,6 +184,7 @@ func TestApplyMigrations_Idempotent(t *testing.T) { if err != nil { t.Fatalf("failed to open database: %v", err) } + defer func() { err := conn.Close() if err != nil { @@ -239,6 +242,7 @@ func TestBootstrapMigrationsTable_FreshDatabase(t *testing.T) { if err != nil { t.Fatalf("failed to open database: %v", err) } + defer func() { err := conn.Close() if err != nil { diff --git a/internal/database/repository_debug_test.go b/internal/database/repository_debug_test.go index db541ed..4a4e2aa 100644 --- a/internal/database/repository_debug_test.go +++ b/internal/database/repository_debug_test.go @@ -17,6 +17,7 @@ func logSnapshotFileIDs(t *testing.T, db *DB) { if err != nil { t.Fatal(err) } + defer func() { err := rows.Close() if err != nil { diff --git a/internal/database/uploads.go b/internal/database/uploads.go index 1070550..312373e 100644 --- a/internal/database/uploads.go +++ b/internal/database/uploads.go @@ -96,6 +96,7 @@ func (r *UploadRepository) GetRecentUploads( if err != nil { return nil, err } + defer func() { err := rows.Close() if err != nil { diff --git a/internal/pidlock/pidlock_test.go b/internal/pidlock/pidlock_test.go index 3adc2e0..1f49372 100644 --- a/internal/pidlock/pidlock_test.go +++ b/internal/pidlock/pidlock_test.go @@ -48,6 +48,7 @@ func TestAcquireBlocksSecondInstance(t *testing.T) { require.NoError(t, err) require.NotNil(t, lock1) + defer func() { _ = lock1.Release() }() // Try to acquire second lock - should fail @@ -72,6 +73,7 @@ func TestAcquireWithStaleLock(t *testing.T) { require.NoError(t, err) require.NotNil(t, lock) + defer func() { _ = lock.Release() }() // Verify our PID is now in the file @@ -117,6 +119,7 @@ func TestAcquireCreatesDirectory(t *testing.T) { require.NoError(t, err) require.NotNil(t, lock) + defer func() { _ = lock.Release() }() // Verify directory was created diff --git a/internal/s3/client_test.go b/internal/s3/client_test.go index 81f986f..75ee0d8 100644 --- a/internal/s3/client_test.go +++ b/internal/s3/client_test.go @@ -12,6 +12,7 @@ import ( //nolint:paralleltest // test servers share a fixed localhost port func TestClient(t *testing.T) { ts := NewTestServer(t) + defer func() { err := ts.Cleanup() if err != nil { @@ -58,6 +59,7 @@ func verifyPutGetHead( if err != nil { t.Fatalf("failed to get object: %v", err) } + defer func() { err := reader.Close() if err != nil { diff --git a/internal/s3/s3_test.go b/internal/s3/s3_test.go index 38dc911..0ab3738 100644 --- a/internal/s3/s3_test.go +++ b/internal/s3/s3_test.go @@ -147,6 +147,7 @@ func (ts *TestServer) Client() *s3.Client { //nolint:paralleltest // test servers share a fixed localhost port func TestBasicS3Operations(t *testing.T) { ts := NewTestServer(t) + defer func() { err := ts.Cleanup() if err != nil { @@ -179,6 +180,7 @@ func TestBasicS3Operations(t *testing.T) { if err != nil { t.Fatalf("failed to get object: %v", err) } + defer func() { err := result.Body.Close() if err != nil { @@ -202,6 +204,7 @@ func TestBasicS3Operations(t *testing.T) { //nolint:paralleltest // test servers share a fixed localhost port func TestBlobOperations(t *testing.T) { ts := NewTestServer(t) + defer func() { err := ts.Cleanup() if err != nil { @@ -268,6 +271,7 @@ func TestBlobOperations(t *testing.T) { //nolint:paralleltest // test servers share a fixed localhost port func TestMetadataOperations(t *testing.T) { ts := NewTestServer(t) + defer func() { err := ts.Cleanup() if err != nil { diff --git a/internal/snapshot/backup_test.go b/internal/snapshot/backup_test.go index a6e2a80..80e0b38 100644 --- a/internal/snapshot/backup_test.go +++ b/internal/snapshot/backup_test.go @@ -461,6 +461,7 @@ func (b *BackupEngine) backupOneFile( if err != nil { return err } + defer func() { err := f.Close() if err != nil { diff --git a/internal/snapshot/file_change_test.go b/internal/snapshot/file_change_test.go index 501b69b..fcd860a 100644 --- a/internal/snapshot/file_change_test.go +++ b/internal/snapshot/file_change_test.go @@ -75,6 +75,7 @@ func TestFileContentChange(t *testing.T) { db, err := database.NewTestDB() require.NoError(t, err) + defer func() { err := db.Close() if err != nil { @@ -165,6 +166,7 @@ func TestMultipleFileChanges(t *testing.T) { db, err := database.NewTestDB() require.NoError(t, err) + defer func() { err := db.Close() if err != nil { diff --git a/internal/snapshot/progress.go b/internal/snapshot/progress.go index 71fbb98..5cd151a 100644 --- a/internal/snapshot/progress.go +++ b/internal/snapshot/progress.go @@ -127,6 +127,7 @@ func NewProgressReporter() *ProgressReporter { // Start begins the progress reporting func (pr *ProgressReporter) Start() { pr.wg.Add(1) + go pr.run() // Print initial multi-line status diff --git a/internal/snapshot/scanner.go b/internal/snapshot/scanner.go index 9a8eb27..8e4b5cd 100644 --- a/internal/snapshot/scanner.go +++ b/internal/snapshot/scanner.go @@ -1673,6 +1673,7 @@ func (s *Scanner) processFileStreaming( if err != nil { return fmt.Errorf("opening file: %w", wrapPermissionError(fileToProcess.Path, err)) } + defer func() { _ = file.Close() }() var chunks []streamingChunkInfo diff --git a/internal/snapshot/scanner_test.go b/internal/snapshot/scanner_test.go index 96c3e83..dfac28e 100644 --- a/internal/snapshot/scanner_test.go +++ b/internal/snapshot/scanner_test.go @@ -164,6 +164,7 @@ func TestScannerSimpleDirectory(t *testing.T) { if err != nil { t.Fatalf("failed to create test database: %v", err) } + defer func() { err := db.Close() if err != nil { @@ -241,6 +242,7 @@ func TestScannerLargeFile(t *testing.T) { if err != nil { t.Fatalf("failed to create test database: %v", err) } + defer func() { err := db.Close() if err != nil { diff --git a/internal/snapshot/snapshot.go b/internal/snapshot/snapshot.go index 2efe8d8..f445e4f 100644 --- a/internal/snapshot/snapshot.go +++ b/internal/snapshot/snapshot.go @@ -259,6 +259,7 @@ func (sm *SnapshotManager) ExportSnapshotMetadata( } log.Debug("Created temporary directory", "path", tempDir) + defer func() { log.Debug("Cleaning up temporary directory", "path", tempDir) @@ -555,6 +556,7 @@ func (sm *SnapshotManager) cleanSnapshotDB( if err != nil { return nil, fmt.Errorf("opening temp database: %w", err) } + defer func() { err := db.Close() if err != nil { @@ -567,6 +569,7 @@ func (sm *SnapshotManager) cleanSnapshotDB( if err != nil { return nil, fmt.Errorf("beginning transaction: %w", err) } + defer func() { rbErr := tx.Rollback() if rbErr != nil && !errors.Is(rbErr, sql.ErrTxDone) { @@ -685,6 +688,7 @@ func (sm *SnapshotManager) compressFile(inputPath, outputPath string) error { if err != nil { return fmt.Errorf("opening input file: %w", err) } + defer func() { err := input.Close() if err != nil { @@ -696,6 +700,7 @@ func (sm *SnapshotManager) compressFile(inputPath, outputPath string) error { if err != nil { return fmt.Errorf("creating output file: %w", err) } + defer func() { err := output.Close() if err != nil { @@ -714,6 +719,7 @@ func (sm *SnapshotManager) compressFile(inputPath, outputPath string) error { // Track if writer has been closed to avoid double-close writerClosed := false + defer func() { if !writerClosed { err := writer.Close() @@ -749,6 +755,7 @@ func (sm *SnapshotManager) copyFile(src, dst string) error { if err != nil { return err } + defer func() { log.Debug("Closing source file", "path", src) @@ -764,6 +771,7 @@ func (sm *SnapshotManager) copyFile(src, dst string) error { if err != nil { return err } + defer func() { log.Debug("Closing destination file", "path", dst) @@ -794,6 +802,7 @@ func (sm *SnapshotManager) generateBlobManifest( if err != nil { return nil, fmt.Errorf("opening database: %w", err) } + defer func() { _ = db.Close() }() // Create repositories to access the data diff --git a/internal/snapshot/snapshot_test.go b/internal/snapshot/snapshot_test.go index fd83d72..878366e 100644 --- a/internal/snapshot/snapshot_test.go +++ b/internal/snapshot/snapshot_test.go @@ -25,12 +25,14 @@ func copyFile(fs afero.Fs, src, dst string) error { if err != nil { return err } + defer func() { _ = sourceFile.Close() }() destFile, err := fs.Create(dst) if err != nil { return err } + defer func() { _ = destFile.Close() }() _, err = io.Copy(destFile, sourceFile) @@ -53,6 +55,7 @@ func verifyCleanedDB( if err != nil { t.Fatalf("failed to open cleaned database: %v", err) } + defer func() { err := cleanedDB.Close() if err != nil { diff --git a/internal/storage/file.go b/internal/storage/file.go index 1dab239..36ed92e 100644 --- a/internal/storage/file.go +++ b/internal/storage/file.go @@ -62,6 +62,7 @@ func (f *FileStorer) Put(_ context.Context, key string, data io.Reader) error { if err != nil { return fmt.Errorf("creating file: %w", err) } + defer func() { _ = file.Close() }() _, err = io.Copy(file, data) @@ -91,6 +92,7 @@ func (f *FileStorer) PutWithProgress( if err != nil { return fmt.Errorf("creating file: %w", err) } + defer func() { _ = file.Close() }() // Wrap with progress tracking @@ -209,6 +211,7 @@ func (f *FileStorer) List(ctx context.Context, prefix string) ([]string, error) // ListStream returns a channel of ObjectInfo for large result sets. func (f *FileStorer) ListStream(ctx context.Context, prefix string) <-chan ObjectInfo { ch := make(chan ObjectInfo) + go func() { defer close(ch) diff --git a/internal/storage/s3.go b/internal/storage/s3.go index 580ac80..1f4f7c5 100644 --- a/internal/storage/s3.go +++ b/internal/storage/s3.go @@ -68,6 +68,7 @@ func (s *S3Storer) List(ctx context.Context, prefix string) ([]string, error) { // ListStream returns a channel of ObjectInfo for large result sets. func (s *S3Storer) ListStream(ctx context.Context, prefix string) <-chan ObjectInfo { ch := make(chan ObjectInfo) + go func() { defer close(ch) diff --git a/internal/vaultik/blobcache.go b/internal/vaultik/blobcache.go index f6a3bd6..2e811d7 100644 --- a/internal/vaultik/blobcache.go +++ b/internal/vaultik/blobcache.go @@ -238,6 +238,7 @@ func (c *blobDiskCache) ReadAt(key string, offset, length int64) ([]byte, error) if err != nil { return nil, err } + defer func() { _ = f.Close() }() buf := make([]byte, length) diff --git a/internal/vaultik/blobcache_test.go b/internal/vaultik/blobcache_test.go index 5d61872..f71f689 100644 --- a/internal/vaultik/blobcache_test.go +++ b/internal/vaultik/blobcache_test.go @@ -14,6 +14,7 @@ func TestBlobDiskCache_BasicGetPut(t *testing.T) { if err != nil { t.Fatal(err) } + defer func() { _ = cache.Close() }() data := []byte("hello world") @@ -79,6 +80,7 @@ func TestBlobDiskCache_OversizedEntryRejected(t *testing.T) { if err != nil { t.Fatal(err) } + defer func() { _ = cache.Close() }() data := make([]byte, 200) @@ -100,6 +102,7 @@ func TestBlobDiskCache_UpdateInPlace(t *testing.T) { if err != nil { t.Fatal(err) } + defer func() { _ = cache.Close() }() err = cache.Put("key1", []byte("v1")) @@ -137,6 +140,7 @@ func TestBlobDiskCache_ReadAt(t *testing.T) { if err != nil { t.Fatal(err) } + defer func() { _ = cache.Close() }() data := make([]byte, 1024) @@ -197,6 +201,7 @@ func TestBlobDiskCache_LRUOrder(t *testing.T) { if err != nil { t.Fatal(err) } + defer func() { _ = cache.Close() }() d := make([]byte, 100) diff --git a/internal/vaultik/integration_test.go b/internal/vaultik/integration_test.go index 0e51afd..bf74e60 100644 --- a/internal/vaultik/integration_test.go +++ b/internal/vaultik/integration_test.go @@ -134,6 +134,7 @@ func (m *MockStorer) ListStream( _ context.Context, prefix string, ) <-chan storage.ObjectInfo { ch := make(chan storage.ObjectInfo) + go func() { defer close(ch) @@ -326,6 +327,7 @@ func TestEndToEndBackup(t *testing.T) { db, err := database.New(ctx, ":memory:") require.NoError(t, err) + defer func() { err := db.Close() if err != nil { @@ -411,6 +413,7 @@ func TestBackupAndVerify(t *testing.T) { db, err := database.New(ctx, ":memory:") require.NoError(t, err) + defer func() { err := db.Close() if err != nil { @@ -968,6 +971,7 @@ func TestDedupOnlySnapshotRestores(t *testing.T) { env := setupDedupBackupEnv( ctx, t, fs, storeDir, dbPath, chunkSize, maxBlobSize) + defer func() { _ = env.db.Close() }() cfg, storer, repos, sm := env.cfg, env.storer, env.repos, env.sm diff --git a/internal/vaultik/restore.go b/internal/vaultik/restore.go index 36a632e..c26c19e 100644 --- a/internal/vaultik/restore.go +++ b/internal/vaultik/restore.go @@ -590,6 +590,7 @@ func (v *Vaultik) downloadSnapshotDB( if err != nil { return nil, fmt.Errorf("downloading %s: %w", dbKey, err) } + defer func() { _ = reader.Close() }() // Read all data @@ -606,6 +607,7 @@ func (v *Vaultik) downloadSnapshotDB( if err != nil { return nil, fmt.Errorf("creating decryption reader: %w", err) } + defer func() { _ = blobReader.Close() }() // Read the binary SQLite database @@ -1115,6 +1117,7 @@ func (v *Vaultik) verifyFile( if err != nil { return 0, fmt.Errorf("opening file: %w", err) } + defer func() { _ = f.Close() }() // Verify each chunk diff --git a/internal/vaultik/restore_sweeper.go b/internal/vaultik/restore_sweeper.go index e363d60..5659f6b 100644 --- a/internal/vaultik/restore_sweeper.go +++ b/internal/vaultik/restore_sweeper.go @@ -110,6 +110,7 @@ func (s *restoreSweeper) blobStillNeeded(blobHash string) (bool, error) { if err != nil { return true, fmt.Errorf("querying referencing files: %w", err) } + defer func() { _ = rows.Close() }() for rows.Next() { diff --git a/internal/vaultik/snapshot.go b/internal/vaultik/snapshot.go index 4e6b98c..80efb3a 100644 --- a/internal/vaultik/snapshot.go +++ b/internal/vaultik/snapshot.go @@ -1130,6 +1130,7 @@ func (v *Vaultik) downloadManifestByKey(remoteKey string) (*snapshot.Manifest, e if err != nil { return nil, err } + defer func() { _ = reader.Close() }() manifest, err := snapshot.DecodeManifest(reader) diff --git a/internal/vaultik/verify.go b/internal/vaultik/verify.go index f5a7365..07d1e01 100644 --- a/internal/vaultik/verify.go +++ b/internal/vaultik/verify.go @@ -96,6 +96,7 @@ func (v *Vaultik) RunDeepVerify(snapshotID string, opts *VerifyOptions) error { if err != nil { return err } + defer func() { if tempDB != nil { _ = tempDB.Close() @@ -343,6 +344,7 @@ func (v *Vaultik) verifyBlob(blobInfo snapshot.BlobInfo, db *sql.DB) error { if err != nil { return fmt.Errorf("failed to download: %w", err) } + defer func() { _ = reader.Close() }() // Get decryptor