Impl versions with shell commands

master
Bel LaPointe 2019-11-21 14:09:46 -07:00
parent 217a221cf4
commit fecd343f1b
3 changed files with 95 additions and 44 deletions

View File

@ -0,0 +1,65 @@
package versions
import (
"io/ioutil"
"local/notes-server/config"
"os"
"path"
"testing"
)
func TestVersionsHappy(t *testing.T) {
d, err := ioutil.TempDir(os.TempDir(), "prefix")
if err != nil {
t.Fatal(err)
}
defer os.RemoveAll(d)
if err := ioutil.WriteFile(path.Join(d, "a.md"), []byte("# Hello"), os.ModePerm); err != nil {
t.Fatal(err)
}
if err := ioutil.WriteFile(path.Join(d, "b.md"), []byte("# World"), os.ModePerm); err != nil {
t.Fatal(err)
}
config.Root = d
v, err := New()
if err != nil {
t.Error(err)
}
if err := v.AddAll(); err != nil {
t.Error("failed add", err)
}
if err := v.Commit(); err != nil {
t.Error("failed commit", err)
}
if err := v.Gitmmit(); err != nil {
t.Error("failed gitmmit", err)
}
}
func TestVersionsBad(t *testing.T) {
config.Root = "/not/a/real/path"
if _, err := New(); err == nil {
t.Error("passed new from nil path")
}
}
func TestVersionsDirty(t *testing.T) {
if os.Getenv("DIRTY") == "" {
return
}
config.Root = "/tmp/foo"
v, err := New()
if err != nil {
t.Fatal(err)
}
ioutil.WriteFile(path.Join(config.Root, "file.md"), []byte(`
# Hello
## World
I'm a doc
`), os.ModePerm)
if err := v.Gitmmit(); err != nil {
t.Fatal(err)
}
t.Log(v)
}

View File

@ -1,6 +1,8 @@
package versions package versions
import ( import (
"fmt"
"local/notes-server/config"
"os/exec" "os/exec"
"time" "time"
) )
@ -9,25 +11,32 @@ type Versions struct {
} }
func New() (*Versions, error) { func New() (*Versions, error) {
return &Versions{}, nil v := &Versions{}
v.cmd("git", "init")
return v, nil
} }
func (v *Versions) Gitmmit() error { func (v *Versions) Gitmmit() error {
if err := v.AddAll(); err != nil { if err := v.AddAll(); err != nil {
return err return fmt.Errorf("cannot add all: %v", err)
} }
if err := v.Commit(); err != nil { if err := v.Commit(); err != nil {
return err return fmt.Errorf("cannot commit: %v", err)
} }
return nil return nil
} }
func (v *Versions) AddAll() error { func (v *Versions) AddAll() error {
cmd := exec.Command("git", "add", "-A", ":/") return v.cmd("git", "add", "-A", ":/")
return cmd.Run()
} }
func (v *Versions) Commit() error { func (v *Versions) Commit() error {
cmd := exec.Command("git", "commit", "-m", time.Now().String()) return v.cmd("git", "commit", "-m", time.Now().String())
return cmd.Run() }
func (v *Versions) cmd(cmd string, args ...string) error {
command := exec.Command(cmd, args...)
command.Dir = config.Root
_, err := command.CombinedOutput()
return err
} }

View File

@ -8,58 +8,35 @@ import (
"testing" "testing"
) )
func TestVersionsHappy(t *testing.T) { func TestVersions(t *testing.T) {
d, err := ioutil.TempDir(os.TempDir(), "prefix") d, err := ioutil.TempDir(os.TempDir(), "prefix")
if err != nil {
t.Fatal(err)
}
defer os.RemoveAll(d)
if err := ioutil.WriteFile(path.Join(d, "a.md"), []byte("# Hello"), os.ModePerm); err != nil {
t.Fatal(err)
}
if err := ioutil.WriteFile(path.Join(d, "b.md"), []byte("# World"), os.ModePerm); err != nil {
t.Fatal(err)
}
config.Root = d config.Root = d
v, err := New()
if err != nil { if err != nil {
t.Error(err) t.Fatal(err)
}
for _, f := range []string{"a", "b"} {
ioutil.WriteFile(path.Join(d, f+".md"), []byte(f), os.ModePerm)
} }
v, err := New()
if err != nil {
t.Fatal(err)
}
if err := v.AddAll(); err != nil { if err := v.AddAll(); err != nil {
t.Error(err) t.Error(err)
} }
if err := v.Commit(); err != nil { if err := v.Commit(); err != nil {
t.Error(err) t.Error(err)
} }
if err := v.Gitmmit(); err != nil {
if err := v.Gitmmit(); err == nil {
t.Error(err) t.Error(err)
} }
}
func TestVersionsBad(t *testing.T) { for _, f := range []string{"c", "b"} {
config.Root = "/not/a/real/path" ioutil.WriteFile(path.Join(d, f+".md"), []byte("d"), os.ModePerm)
if _, err := New(); err == nil {
t.Error(err)
} }
}
func TestVersionsDirty(t *testing.T) {
if os.Getenv("DIRTY") == "" {
return
}
config.Root = "/tmp/foo"
v, err := New()
if err != nil {
t.Fatal(err)
}
ioutil.WriteFile(path.Join(config.Root, "file.md"), []byte(`
# Hello
## World
I'm a doc
`), os.ModePerm)
if err := v.Gitmmit(); err != nil { if err := v.Gitmmit(); err != nil {
t.Fatal(err) t.Error(config.Root, err)
} }
t.Log(v)
} }