Skip to content

Commit b750c80

Browse files
committed
refactor: use defer for cleanup with proper error handling
Signed-off-by: bupd <bupdprasanth@gmail.com>
1 parent c3108ec commit b750c80

File tree

1 file changed

+16
-10
lines changed

1 file changed

+16
-10
lines changed

internal/state/state_persistence.go

Lines changed: 16 additions & 10 deletions
Original file line numberDiff line numberDiff line change
@@ -45,22 +45,28 @@ func SaveState(path string, stateMap []StateMap, configDigest string) error {
4545
}
4646
tmpName := tmp.Name()
4747

48-
if _, err := tmp.Write(data); err != nil {
49-
_ = tmp.Close()
50-
_ = os.Remove(tmpName)
48+
cleanup := func() {
49+
if closeErr := tmp.Close(); closeErr != nil && err == nil {
50+
err = fmt.Errorf("close temp file: %w", closeErr)
51+
}
52+
if err != nil {
53+
if removeErr := os.Remove(tmpName); removeErr != nil && !errors.Is(removeErr, os.ErrNotExist) {
54+
err = fmt.Errorf("%w (cleanup failed: %v)", err, removeErr)
55+
}
56+
}
57+
}
58+
defer cleanup()
59+
60+
if _, err = tmp.Write(data); err != nil {
5161
return fmt.Errorf("write temp file: %w", err)
5262
}
53-
if err := tmp.Sync(); err != nil {
54-
_ = tmp.Close()
55-
_ = os.Remove(tmpName)
63+
if err = tmp.Sync(); err != nil {
5664
return fmt.Errorf("sync temp file: %w", err)
5765
}
58-
if err := tmp.Close(); err != nil {
59-
_ = os.Remove(tmpName)
66+
if err = tmp.Close(); err != nil {
6067
return fmt.Errorf("close temp file: %w", err)
6168
}
62-
if err := os.Rename(tmpName, path); err != nil {
63-
_ = os.Remove(tmpName)
69+
if err = os.Rename(tmpName, path); err != nil {
6470
return fmt.Errorf("rename temp to state file: %w", err)
6571
}
6672

0 commit comments

Comments
 (0)