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"
|
"syscall"
|
||||||
"time"
|
"time"
|
||||||
|
|
||||||
|
"github.com/google/uuid"
|
||||||
"gogs.inhome.blapointe.com/bel/pttodo/pttodo"
|
"gogs.inhome.blapointe.com/bel/pttodo/pttodo"
|
||||||
"gopkg.in/yaml.v2"
|
"gopkg.in/yaml.v2"
|
||||||
)
|
)
|
||||||
|
|
@ -50,28 +51,21 @@ func _edit(filepaths func() []string) error {
|
||||||
}
|
}
|
||||||
|
|
||||||
edits := map[string]string{}
|
edits := map[string]string{}
|
||||||
originals := map[string]string{}
|
|
||||||
for _, editedFile := range editedFiles {
|
for _, editedFile := range editedFiles {
|
||||||
edits[path.Base(editedFile)] = editedFile
|
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)
|
edited, err := pttodo.NewTodosFromFile(editedFile)
|
||||||
if err != nil {
|
if err != nil {
|
||||||
return err
|
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 {
|
if err != nil {
|
||||||
return err
|
return err
|
||||||
}
|
}
|
||||||
|
|
@ -94,8 +88,6 @@ func _edit(filepaths func() []string) error {
|
||||||
original.AutoMove()
|
original.AutoMove()
|
||||||
|
|
||||||
if err := func() error {
|
if err := func() error {
|
||||||
originals[path.Base(editedFile)] = originalFile
|
|
||||||
|
|
||||||
f, err := os.Create(editedFile)
|
f, err := os.Create(editedFile)
|
||||||
if err != nil {
|
if err != nil {
|
||||||
return err
|
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 edited, ok := edits[path.Base(f)]; ok {
|
||||||
if err := os.Rename(edited, f); err != nil {
|
if err := os.Rename(edited, f); err != nil {
|
||||||
return err
|
return err
|
||||||
}
|
}
|
||||||
|
delete(edits, path.Base(f))
|
||||||
} else if err := os.Remove(f); err != nil {
|
} else if err := os.Remove(f); err != nil {
|
||||||
return err
|
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
|
return nil
|
||||||
|
|
|
||||||
Loading…
Reference in New Issue