Testing versioning with git in go in versions
parent
259a8efc70
commit
7964518d36
|
|
@ -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
|
||||
}
|
||||
|
|
@ -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())
|
||||
}
|
||||
Loading…
Reference in New Issue