diff --git a/cmd/edit.go b/cmd/edit.go index a4c8327..f5c80c8 100644 --- a/cmd/edit.go +++ b/cmd/edit.go @@ -103,7 +103,7 @@ func _edit(filepaths []string) error { dir := "" for _, f := range filepaths { if edited, ok := edits[path.Base(f)]; ok { - if err := os.Rename(edited, f); err != nil { + if err := rename(edited, f); err != nil { return err } delete(edits, path.Base(f)) @@ -118,7 +118,7 @@ func _edit(filepaths []string) error { if _, err := os.Stat(f); err == nil { f = fmt.Sprintf("%s.todo.%s", f, uuid.New().String()) } - if err := os.Rename(editedFile, f); err != nil { + if err := rename(editedFile, f); err != nil { return err } } diff --git a/cmd/main.go b/cmd/main.go index a2a2725..609d37e 100644 --- a/cmd/main.go +++ b/cmd/main.go @@ -68,7 +68,20 @@ func merge(filepath string, mergeTargetFilePath string) error { if err != nil { return err } - return os.Rename(tmppath, filepath) + return rename(tmppath, filepath) +} + +func rename(oldpath, newpath string) error { + b, err := io.ReadFile(oldpath) + if err != nil { + return err + } + + if err := io.WriteFile(b, newpath, os.ModePerm); err != nil { + return err + } + + return os.Remove(oldpath) } func marshalRootToTempFile(root pttodo.Root) (string, error) {