From 73a3366d53eaeb9ca687fcd2e4f392735645ee7c Mon Sep 17 00:00:00 2001 From: Kovid Goyal Date: Wed, 15 Feb 2023 10:46:47 +0530 Subject: [PATCH] Fix atomic write not working when file does not exist --- tools/utils/atomic-write.go | 10 ++++++++-- 1 file changed, 8 insertions(+), 2 deletions(-) diff --git a/tools/utils/atomic-write.go b/tools/utils/atomic-write.go index f67f1cd04..1b9402f37 100644 --- a/tools/utils/atomic-write.go +++ b/tools/utils/atomic-write.go @@ -3,6 +3,7 @@ package utils import ( + "errors" "fmt" "io/fs" "os" @@ -12,12 +13,17 @@ import ( var _ = fmt.Print func AtomicWriteFile(path string, data []byte, perm os.FileMode) (err error) { - path, err = filepath.EvalSymlinks(path) + npath, err := filepath.EvalSymlinks(path) + if errors.Is(err, fs.ErrNotExist) { + err = nil + npath = path + } if err == nil { + path = npath path, err = filepath.Abs(path) if err == nil { var f *os.File - f, err = os.CreateTemp(filepath.Dir(path), filepath.Base(path)) + f, err = os.CreateTemp(filepath.Dir(path), filepath.Base(path)+".atomic-write-") if err == nil { removed := false defer func() {