@@ -70,12 +70,26 @@ func (r *Registry) doSave(code string) error {
7070 return err
7171 }
7272
73- err = os .WriteFile (path .Join (r .dir , fileName (code )), data , 0644 )
73+ dstPath := path .Join (r .dir , fileName (code ))
74+
75+ tmpFile , err := os .CreateTemp (r .dir , fileName (code )+ ".tmp-*" )
7476 if err != nil {
7577 return err
7678 }
79+ tmpName := tmpFile .Name ()
7780
78- return nil
81+ if _ , err := tmpFile .Write (data ); err != nil {
82+ tmpFile .Close ()
83+ os .Remove (tmpName )
84+ return err
85+ }
86+
87+ if err := tmpFile .Close (); err != nil {
88+ os .Remove (tmpName )
89+ return err
90+ }
91+
92+ return os .Rename (tmpName , dstPath )
7993}
8094
8195func (r * Registry ) doLoad (code string ) (RegistryItem , error ) {
@@ -112,5 +126,24 @@ func (r *Registry) doSaveMetadata() error {
112126 return err
113127 }
114128
115- return os .WriteFile (path .Join (r .dir , metadataFile ), data , 0644 )
129+ dstPath := path .Join (r .dir , metadataFile )
130+
131+ tmpFile , err := os .CreateTemp (r .dir , metadataFile + ".tmp-*" )
132+ if err != nil {
133+ return err
134+ }
135+ tmpName := tmpFile .Name ()
136+
137+ if _ , err := tmpFile .Write (data ); err != nil {
138+ tmpFile .Close ()
139+ os .Remove (tmpName )
140+ return err
141+ }
142+
143+ if err := tmpFile .Close (); err != nil {
144+ os .Remove (tmpName )
145+ return err
146+ }
147+
148+ return os .Rename (tmpName , dstPath )
116149}
0 commit comments