in internal/utils/files.go [59:90]
func WriteToFile(path string, data []byte) error {
if err := ensureDir(filepath.Dir(path)); err != nil {
return err
}
tmpFile, err := os.Create(path + ".tmp")
if err != nil {
return err
}
_, err = tmpFile.Write(data)
if err != nil {
return err
}
CheckError(fmt.Sprintf("close %s", tmpFile.Name()), tmpFile.Close())
prevContent, err := FileReadAll(path)
if err == nil {
bakFile, err := os.Create(path + ".bak")
if err != nil {
_, err = bakFile.Write(prevContent)
}
if err != nil {
return err
}
CheckError(fmt.Sprintf("close %s", bakFile.Name()), bakFile.Close())
}
_, err = os.Stat(path)
if err == nil {
CheckError(fmt.Sprintf("remove %s", path), os.Remove(path))
}
return os.Rename(path+".tmp", path)
}