no prior file exists ok

Bel LaPointe 2022-09-10 11:24:41 -06:00
parent f90124ca27
commit 47f46a8d78
2 changed files with 22 additions and 22 deletions

View File

@ -125,11 +125,11 @@ func add(dry bool, filepaths []string, todo pttodo.Todo) error {
target := filepaths[0] target := filepaths[0]
var original pttodo.Root var original pttodo.Root
b, err := ioutil.ReadFile(target) r, err := filePathReader(target)
if err != nil && !os.IsNotExist(err) { if err != nil {
return err return err
} }
if err := yaml.Unmarshal(b, &original); err != nil { if err := yaml.NewDecoder(r).Decode(&original); err != nil {
return err return err
} }
@ -157,9 +157,9 @@ func edit(dry bool, filepaths []string) error {
originals := map[string]pttodo.Root{} originals := map[string]pttodo.Root{}
for _, target := range filepaths { for _, target := range filepaths {
var original pttodo.Root var original pttodo.Root
if b, err := ioutil.ReadFile(target); err != nil && !os.IsNotExist(err) { if r, err := filePathReader(target); err != nil {
return err return err
} else if err := yaml.Unmarshal(b, &original); err != nil { } else if err := yaml.NewDecoder(r).Decode(&original); err != nil {
return err return err
} else if c, err := yaml.Marshal(original.Todo); err != nil { } else if c, err := yaml.Marshal(original.Todo); err != nil {
return err return err
@ -175,9 +175,9 @@ func edit(dry bool, filepaths []string) error {
for { for {
err := func() error { err := func() error {
var todos []pttodo.Todo var todos []pttodo.Todo
if b, err := ioutil.ReadFile(path.Join(tempDir, path.Base(target))); err != nil { if r, err := filePathReader(path.Join(tempDir, path.Base(target))); err != nil {
return err return err
} else if err := yaml.Unmarshal(b, &todos); err != nil { } else if err := yaml.NewDecoder(r).Decode(&todos); err != nil {
return err return err
} }
return nil return nil
@ -199,12 +199,12 @@ func edit(dry bool, filepaths []string) error {
return nil return nil
} }
for _, target := range filepaths { for _, target := range filepaths {
b, err := ioutil.ReadFile(path.Join(tempDir, path.Base(target))) r, err := filePathReader(path.Join(tempDir, path.Base(target)))
if err != nil { if err != nil {
return err return err
} }
var newTodos []pttodo.Todo var newTodos []pttodo.Todo
if err := yaml.Unmarshal(b, &newTodos); err != nil { if err := yaml.NewDecoder(r).Decode(&newTodos); err != nil {
return err return err
} }
original := originals[target] original := originals[target]
@ -301,13 +301,13 @@ func _edit(dry bool, filepaths []string) error {
saveOne := func(filepath string) error { saveOne := func(filepath string) error {
tempFile := path.Join(tempDir, path.Base(filepath)) tempFile := path.Join(tempDir, path.Base(filepath))
var rootTemp, rootOld pttodo.Root var rootTemp, rootOld pttodo.Root
if a, err := ioutil.ReadFile(tempFile); err != nil { if a, err := filePathReader(tempFile); err != nil {
return err return err
} else if err := yaml.Unmarshal(a, &rootTemp); err != nil { } else if err := yaml.NewDecoder(a).Decode(&rootTemp); err != nil {
return err return err
} else if b, err := ioutil.ReadFile(filepath); err != nil { } else if b, err := filePathReader(filepath); err != nil {
return err return err
} else if err := yaml.Unmarshal(b, &rootOld); err != nil { } else if err := yaml.NewDecoder(b).Decode(&rootOld); err != nil {
return err return err
} else if rootTemp.Equals(rootOld) { } else if rootTemp.Equals(rootOld) {
//log.Printf("no changes to %s", filepath) //log.Printf("no changes to %s", filepath)
@ -533,17 +533,17 @@ func dump(dry bool, writer io.Writer, filepaths []string, tags []string, search,
} }
func filePathReader(path string) (io.Reader, error) { func filePathReader(path string) (io.Reader, error) {
var reader io.Reader
if path == "-" { if path == "-" {
reader = os.Stdin return os.Stdin, nil
} else {
b, err := ioutil.ReadFile(path)
if err != nil {
return nil, err
}
reader = bytes.NewReader(b)
} }
return reader, nil b, err := ioutil.ReadFile(path)
if os.IsNotExist(err) {
return bytes.NewReader([]byte("{}")), nil
}
if err != nil {
return nil, err
}
return bytes.NewReader(b), nil
} }
func listDir(dname string) ([]string, error) { func listDir(dname string) ([]string, error) {

Binary file not shown.