Testing versioning with git in go in versions

master
Bel LaPointe 2019-11-12 14:48:28 -07:00
parent 259a8efc70
commit 7964518d36
2 changed files with 145 additions and 0 deletions

67
versions/versions.go Normal file
View File

@ -0,0 +1,67 @@
package versions
import (
"local/notes-server/config"
"time"
git "gopkg.in/src-d/go-git.v4"
"gopkg.in/src-d/go-git.v4/plumbing/object"
)
type Versions struct {
repo *git.Repository
}
func New() (*Versions, error) {
repo, err := git.PlainInit(config.Root, false)
if err != nil {
repo, err = git.PlainOpen(config.Root)
}
return &Versions{
repo: repo,
}, err
}
func (v *Versions) Gitmmit() error {
if err := v.AddAll(); err != nil {
return err
}
if err := v.Commit(); err != nil {
return err
}
return nil
}
func (v *Versions) AddAll() error {
worktree, err := v.worktree()
if err != nil {
return err
}
for _, path := range []string{".", "./*", "./**", "/", "/**", "/*"} {
if err := worktree.AddGlob(path); err != nil {
return err
}
}
return nil
}
func (v *Versions) Commit() error {
worktree, err := v.worktree()
if err != nil {
return err
}
opts := &git.CommitOptions{Author: &object.Signature{}}
_, err = worktree.Commit(time.Now().String(), opts)
return err
}
func (v *Versions) worktree() (*git.Worktree, error) {
worktree, err := v.repo.Worktree()
if err != nil {
return nil, err
}
return worktree, nil
}

78
versions/versions_test.go Normal file
View File

@ -0,0 +1,78 @@
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.repo.Head(); err == nil {
t.Error(err)
}
if err := v.AddAll(); err != nil {
t.Error(err)
}
if _, err := v.repo.Head(); err == nil {
t.Error(err)
}
if err := v.Commit(); err != nil {
t.Error(err)
}
if _, err := v.repo.Head(); err != nil {
t.Error(err)
}
if err := v.Gitmmit(); err != nil {
t.Error(err)
}
if _, err := v.repo.Head(); err != nil {
t.Error(err)
}
}
func TestVersionsBad(t *testing.T) {
config.Root = "/not/a/real/path"
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 {
t.Fatal(err)
}
t.Log(v)
t.Log(v.repo.Config())
}