new edit ready for shuffles
parent
e8a83176aa
commit
8c050d1d89
|
|
@ -109,6 +109,55 @@ func verifyFile(path string) error {
|
||||||
}
|
}
|
||||||
|
|
||||||
func edit(dry bool, filepaths []string) error {
|
func edit(dry bool, filepaths []string) error {
|
||||||
|
tempDir, err := ioutil.TempDir(os.TempDir(), "edit-pttodo-*")
|
||||||
|
if err != nil {
|
||||||
|
return err
|
||||||
|
}
|
||||||
|
for _, target := range filepaths {
|
||||||
|
if b, err := ioutil.ReadFile(target); err != nil && !os.IsNotExist(err) {
|
||||||
|
return err
|
||||||
|
} else if err := ioutil.WriteFile(path.Join(tempDir, path.Base(target)), b, os.ModePerm); err != nil {
|
||||||
|
return err
|
||||||
|
}
|
||||||
|
}
|
||||||
|
if err := vimd(tempDir); err != nil {
|
||||||
|
return err
|
||||||
|
}
|
||||||
|
for _, target := range filepaths {
|
||||||
|
for {
|
||||||
|
err := verifyFile(path.Join(tempDir, path.Base(target)))
|
||||||
|
if err == nil {
|
||||||
|
break
|
||||||
|
}
|
||||||
|
log.Printf("%v, press <Enter> to resume editing", err)
|
||||||
|
b := make([]byte, 1)
|
||||||
|
if _, err := os.Stdin.Read(b); err != nil {
|
||||||
|
break
|
||||||
|
}
|
||||||
|
if err := vimd(tempDir); err != nil {
|
||||||
|
return err
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
if dry {
|
||||||
|
return nil
|
||||||
|
}
|
||||||
|
for _, target := range filepaths {
|
||||||
|
var todo pttodo.Root
|
||||||
|
if b, err := ioutil.ReadFile(path.Join(tempDir, path.Base(target))); err != nil {
|
||||||
|
return err
|
||||||
|
} else if err := yaml.Unmarshal(b, &todo); err != nil {
|
||||||
|
return err
|
||||||
|
} else if c, err := yaml.Marshal(todo); err != nil {
|
||||||
|
return err
|
||||||
|
} else if err := ioutil.WriteFile(target, c, os.ModePerm); err != nil {
|
||||||
|
return err
|
||||||
|
}
|
||||||
|
}
|
||||||
|
return nil
|
||||||
|
}
|
||||||
|
|
||||||
|
func _edit(dry bool, filepaths []string) error {
|
||||||
tempDir, err := ioutil.TempDir(os.TempDir(), "edit-pttodo")
|
tempDir, err := ioutil.TempDir(os.TempDir(), "edit-pttodo")
|
||||||
if err != nil {
|
if err != nil {
|
||||||
return err
|
return err
|
||||||
|
|
@ -140,45 +189,7 @@ func edit(dry bool, filepaths []string) error {
|
||||||
return nil
|
return nil
|
||||||
}
|
}
|
||||||
vi := func() error {
|
vi := func() error {
|
||||||
bin := "vim"
|
return vimd(tempDir)
|
||||||
editorbin, err := exec.LookPath(bin)
|
|
||||||
if err != nil {
|
|
||||||
editorbin, err = exec.LookPath("vi")
|
|
||||||
}
|
|
||||||
if err != nil {
|
|
||||||
return err
|
|
||||||
}
|
|
||||||
args := []string{editorbin, "-p"}
|
|
||||||
tempfiles, err := listDir(tempDir)
|
|
||||||
if err != nil {
|
|
||||||
return err
|
|
||||||
}
|
|
||||||
args = append(args, tempfiles...)
|
|
||||||
cpid, err := syscall.ForkExec(
|
|
||||||
editorbin,
|
|
||||||
args,
|
|
||||||
&syscall.ProcAttr{
|
|
||||||
Dir: tempDir,
|
|
||||||
Env: os.Environ(),
|
|
||||||
Files: []uintptr{os.Stdin.Fd(), os.Stdout.Fd(), os.Stderr.Fd()},
|
|
||||||
Sys: nil,
|
|
||||||
},
|
|
||||||
)
|
|
||||||
if err != nil {
|
|
||||||
return err
|
|
||||||
}
|
|
||||||
proc, err := os.FindProcess(cpid)
|
|
||||||
if err != nil {
|
|
||||||
return err
|
|
||||||
}
|
|
||||||
state, err := proc.Wait()
|
|
||||||
if err != nil {
|
|
||||||
return err
|
|
||||||
}
|
|
||||||
if exitCode := state.ExitCode(); exitCode != 0 {
|
|
||||||
return fmt.Errorf("bad exit code on vim: %d, state: %+v", exitCode, state)
|
|
||||||
}
|
|
||||||
return nil
|
|
||||||
}
|
}
|
||||||
verifyOne := func(tempFile string) error {
|
verifyOne := func(tempFile string) error {
|
||||||
for {
|
for {
|
||||||
|
|
@ -248,6 +259,48 @@ func edit(dry bool, filepaths []string) error {
|
||||||
return nil
|
return nil
|
||||||
}
|
}
|
||||||
|
|
||||||
|
func vimd(d string) error {
|
||||||
|
bin := "vim"
|
||||||
|
editorbin, err := exec.LookPath(bin)
|
||||||
|
if err != nil {
|
||||||
|
editorbin, err = exec.LookPath("vi")
|
||||||
|
}
|
||||||
|
if err != nil {
|
||||||
|
return err
|
||||||
|
}
|
||||||
|
args := []string{editorbin, "-p"}
|
||||||
|
files, err := listDir(d)
|
||||||
|
if err != nil {
|
||||||
|
return err
|
||||||
|
}
|
||||||
|
args = append(args, files...)
|
||||||
|
cpid, err := syscall.ForkExec(
|
||||||
|
editorbin,
|
||||||
|
args,
|
||||||
|
&syscall.ProcAttr{
|
||||||
|
Dir: d,
|
||||||
|
Env: os.Environ(),
|
||||||
|
Files: []uintptr{os.Stdin.Fd(), os.Stdout.Fd(), os.Stderr.Fd()},
|
||||||
|
Sys: nil,
|
||||||
|
},
|
||||||
|
)
|
||||||
|
if err != nil {
|
||||||
|
return err
|
||||||
|
}
|
||||||
|
proc, err := os.FindProcess(cpid)
|
||||||
|
if err != nil {
|
||||||
|
return err
|
||||||
|
}
|
||||||
|
state, err := proc.Wait()
|
||||||
|
if err != nil {
|
||||||
|
return err
|
||||||
|
}
|
||||||
|
if exitCode := state.ExitCode(); exitCode != 0 {
|
||||||
|
return fmt.Errorf("bad exit code on vim: %d, state: %+v", exitCode, state)
|
||||||
|
}
|
||||||
|
return nil
|
||||||
|
}
|
||||||
|
|
||||||
func merge(dry bool, filepath string, mergeTargetFilePath string) error {
|
func merge(dry bool, filepath string, mergeTargetFilePath string) error {
|
||||||
baseReader, err := filePathReader(filepath)
|
baseReader, err := filePathReader(filepath)
|
||||||
if err != nil {
|
if err != nil {
|
||||||
|
|
|
||||||
Binary file not shown.
|
|
@ -0,0 +1,5 @@
|
||||||
|
todo:
|
||||||
|
- a
|
||||||
|
- a
|
||||||
|
scheduled: []
|
||||||
|
done: []
|
||||||
Loading…
Reference in New Issue