diff --git a/cmd/pttodo-cli/cli.go b/cmd/pttodo-cli/cli.go index 69efeae..04d2d09 100644 --- a/cmd/pttodo-cli/cli.go +++ b/cmd/pttodo-cli/cli.go @@ -125,11 +125,11 @@ func add(dry bool, filepaths []string, todo pttodo.Todo) error { target := filepaths[0] var original pttodo.Root - b, err := ioutil.ReadFile(target) - if err != nil && !os.IsNotExist(err) { + r, err := filePathReader(target) + if err != nil { return err } - if err := yaml.Unmarshal(b, &original); err != nil { + if err := yaml.NewDecoder(r).Decode(&original); err != nil { return err } @@ -157,9 +157,9 @@ func edit(dry bool, filepaths []string) error { originals := map[string]pttodo.Root{} for _, target := range filepaths { var original pttodo.Root - if b, err := ioutil.ReadFile(target); err != nil && !os.IsNotExist(err) { + if r, err := filePathReader(target); err != nil { return err - } else if err := yaml.Unmarshal(b, &original); err != nil { + } else if err := yaml.NewDecoder(r).Decode(&original); err != nil { return err } else if c, err := yaml.Marshal(original.Todo); err != nil { return err @@ -175,9 +175,9 @@ func edit(dry bool, filepaths []string) error { for { err := func() error { 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 - } else if err := yaml.Unmarshal(b, &todos); err != nil { + } else if err := yaml.NewDecoder(r).Decode(&todos); err != nil { return err } return nil @@ -199,12 +199,12 @@ func edit(dry bool, filepaths []string) error { return nil } 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 { return err } var newTodos []pttodo.Todo - if err := yaml.Unmarshal(b, &newTodos); err != nil { + if err := yaml.NewDecoder(r).Decode(&newTodos); err != nil { return err } original := originals[target] @@ -301,13 +301,13 @@ func _edit(dry bool, filepaths []string) error { saveOne := func(filepath string) error { tempFile := path.Join(tempDir, path.Base(filepath)) var rootTemp, rootOld pttodo.Root - if a, err := ioutil.ReadFile(tempFile); err != nil { + if a, err := filePathReader(tempFile); err != nil { return err - } else if err := yaml.Unmarshal(a, &rootTemp); err != nil { + } else if err := yaml.NewDecoder(a).Decode(&rootTemp); err != nil { return err - } else if b, err := ioutil.ReadFile(filepath); err != nil { + } else if b, err := filePathReader(filepath); err != nil { return err - } else if err := yaml.Unmarshal(b, &rootOld); err != nil { + } else if err := yaml.NewDecoder(b).Decode(&rootOld); err != nil { return err } else if rootTemp.Equals(rootOld) { //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) { - var reader io.Reader if path == "-" { - reader = os.Stdin - } else { - b, err := ioutil.ReadFile(path) - if err != nil { - return nil, err - } - reader = bytes.NewReader(b) + return os.Stdin, nil } - 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) { diff --git a/cmd/pttodo-cli/pttodo-cli b/cmd/pttodo-cli/pttodo-cli deleted file mode 100755 index a1b93e0..0000000 Binary files a/cmd/pttodo-cli/pttodo-cli and /dev/null differ