Skip to content

Commit 8276571

Browse files
authored
Merge pull request #38 from bpineau/atomic_changes
Use a temp file + rename for atomic changes
2 parents b59030b + 5f6a8a9 commit 8276571

File tree

1 file changed

+14
-2
lines changed

1 file changed

+14
-2
lines changed

pkg/recorder/recorder.go

Lines changed: 14 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -144,10 +144,22 @@ func (w *Listener) save(file string, data []byte) error {
144144
w.actives[w.relativePath(file)] = true
145145
w.activesLock.Unlock()
146146

147-
err = afero.WriteFile(appFs, file, data, 0600)
147+
tmpf, err := afero.TempFile(appFs, "", "katafygio")
148+
if err != nil {
149+
return fmt.Errorf("failed to create a temporary file: %v", err)
150+
}
148151

152+
_, err = tmpf.Write(data)
149153
if err != nil {
150-
return fmt.Errorf("failed to write to %s on disk: %v", file, err)
154+
return fmt.Errorf("failed to write to %s on disk: %v", tmpf.Name(), err)
155+
}
156+
157+
if err := tmpf.Close(); err != nil {
158+
return fmt.Errorf("failed to close a temporary file: %v", err)
159+
}
160+
161+
if err := appFs.Rename(tmpf.Name(), file); err != nil {
162+
return fmt.Errorf("failed to rename %s to %s: %v", tmpf.Name(), file, err)
151163
}
152164

153165
return nil

0 commit comments

Comments
 (0)