10 func atomicWriteFile(name string, data []byte, mode os.FileMode) error {
11 if err := os.MkdirAll(path.Dir(name), 0755); err != nil {
14 tmp, err := ioutil.TempFile(path.Dir(name), path.Base(name)+"~")
23 _, err = tmp.Write(data)
31 err = os.Chmod(tmp.Name(), mode)
35 err = os.Rename(tmp.Name(), name)
43 func atomicWriteJSON(name string, data interface{}, mode os.FileMode) error {
44 j, err := json.MarshalIndent(data, "", " ")
48 return atomicWriteFile(name, j, mode)