func WriteToFile()

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)
}