if no original file, then edit merges with nil and calls itself an inbox
parent
ead31e077b
commit
ea904ea729
41
cmd/edit.go
41
cmd/edit.go
|
|
@ -12,6 +12,7 @@ import (
|
|||
"syscall"
|
||||
"time"
|
||||
|
||||
"github.com/google/uuid"
|
||||
"gogs.inhome.blapointe.com/bel/pttodo/pttodo"
|
||||
"gopkg.in/yaml.v2"
|
||||
)
|
||||
|
|
@ -50,28 +51,21 @@ func _edit(filepaths func() []string) error {
|
|||
}
|
||||
|
||||
edits := map[string]string{}
|
||||
originals := map[string]string{}
|
||||
for _, editedFile := range editedFiles {
|
||||
edits[path.Base(editedFile)] = editedFile
|
||||
originalFile := func() string {
|
||||
last := ""
|
||||
for _, f := range filepaths() {
|
||||
if path.Base(f) == path.Base(editedFile) {
|
||||
return f
|
||||
}
|
||||
last = f
|
||||
}
|
||||
if last != "" {
|
||||
return path.Join(path.Dir(last), path.Base(editedFile))
|
||||
}
|
||||
panic("how?")
|
||||
}()
|
||||
|
||||
edited, err := pttodo.NewTodosFromFile(editedFile)
|
||||
if err != nil {
|
||||
return err
|
||||
}
|
||||
original, err := pttodo.NewRootFromFile(originalFile)
|
||||
original, err := pttodo.NewRootFromFile(func() string {
|
||||
for _, f := range filepaths() {
|
||||
if path.Base(f) == path.Base(editedFile) {
|
||||
return f
|
||||
}
|
||||
}
|
||||
return "/dev/null"
|
||||
}())
|
||||
if err != nil {
|
||||
return err
|
||||
}
|
||||
|
|
@ -94,8 +88,6 @@ func _edit(filepaths func() []string) error {
|
|||
original.AutoMove()
|
||||
|
||||
if err := func() error {
|
||||
originals[path.Base(editedFile)] = originalFile
|
||||
|
||||
f, err := os.Create(editedFile)
|
||||
if err != nil {
|
||||
return err
|
||||
|
|
@ -108,14 +100,27 @@ func _edit(filepaths func() []string) error {
|
|||
}
|
||||
}
|
||||
|
||||
for _, f := range originals {
|
||||
dir := ""
|
||||
for _, f := range filepaths() {
|
||||
if edited, ok := edits[path.Base(f)]; ok {
|
||||
if err := os.Rename(edited, f); err != nil {
|
||||
return err
|
||||
}
|
||||
delete(edits, path.Base(f))
|
||||
} else if err := os.Remove(f); err != nil {
|
||||
return err
|
||||
}
|
||||
dir = path.Dir(f)
|
||||
}
|
||||
|
||||
for base, editedFile := range edits {
|
||||
f := path.Join(dir, base)
|
||||
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 {
|
||||
return err
|
||||
}
|
||||
}
|
||||
|
||||
return nil
|
||||
|
|
|
|||
Loading…
Reference in New Issue