diff --git a/cmd/pttodo-cli/cli.go b/cmd/pttodo-cli/cli.go index d1c5fdd..d6c6d5a 100644 --- a/cmd/pttodo-cli/cli.go +++ b/cmd/pttodo-cli/cli.go @@ -195,6 +195,19 @@ 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 { + return err + } else if err := yaml.Unmarshal(a, &rootTemp); err != nil { + return err + } else if b, err := ioutil.ReadFile(filepath); err != nil { + return err + } else if err := yaml.Unmarshal(b, &rootOld); err != nil { + return err + } else if rootTemp.Equals(rootOld) { + log.Printf("no changes to %s", filepath) + return nil + } if dry { log.Printf("would've saved %s as %s", tempFile, filepath) return nil @@ -295,22 +308,32 @@ func dump(dry bool, writer io.Writer, filepaths []string, tags []string, search, return err } - var root2 pttodo.Root + var root2, root2post pttodo.Root if err := yaml.Unmarshal(b, &root2); err != nil { return err } + if err := yaml.Unmarshal(b, &root2post); err != nil { + return err + } + root2.MoveScheduledToTodo() - root.MergeIn(root2) if !dry { - b3, err := yaml.Marshal(root2) - if err != nil { - return err - } - if err := os.WriteFile(filepath, b3, os.ModePerm); err != nil { - return err + if !root2.Equals(root2post) { + log.Printf("refreshing %s", filepath) + b3, err := yaml.Marshal(root2) + if err != nil { + return err + } + if err := os.WriteFile(filepath, b3, os.ModePerm); err != nil { + return err + } + } else { + log.Printf("not refreshing %s", filepath) } } + + root.MergeIn(root2) } root.MoveScheduledToTodo()