Add @carlosmn's tests
This commit is contained in:
parent
d190d8a6b3
commit
7292cafac2
|
@ -0,0 +1,47 @@
|
||||||
|
package git
|
||||||
|
|
||||||
|
import (
|
||||||
|
"testing"
|
||||||
|
"io/ioutil"
|
||||||
|
"time"
|
||||||
|
)
|
||||||
|
|
||||||
|
func createTestRepo(t *testing.T) *Repository {
|
||||||
|
// figure out where we can create the test repo
|
||||||
|
path, err := ioutil.TempDir("", "git2go")
|
||||||
|
checkFatal(t, err)
|
||||||
|
repo, err := InitRepository(path, false)
|
||||||
|
checkFatal(t, err)
|
||||||
|
|
||||||
|
tmpfile := "README"
|
||||||
|
err = ioutil.WriteFile(path + "/" + tmpfile, []byte("foo\n"), 0644)
|
||||||
|
checkFatal(t, err)
|
||||||
|
|
||||||
|
return repo
|
||||||
|
}
|
||||||
|
|
||||||
|
func seedTestRepo(t *testing.T, repo *Repository) (*Oid, *Oid) {
|
||||||
|
loc, err := time.LoadLocation("Europe/Berlin")
|
||||||
|
checkFatal(t, err)
|
||||||
|
sig := &Signature{
|
||||||
|
Name: "Rand Om Hacker",
|
||||||
|
Email: "random@hacker.com",
|
||||||
|
When: time.Date(2013, 03, 06, 14, 30, 0, 0, loc),
|
||||||
|
}
|
||||||
|
|
||||||
|
idx, err := repo.Index()
|
||||||
|
checkFatal(t, err)
|
||||||
|
err = idx.AddByPath("README")
|
||||||
|
checkFatal(t, err)
|
||||||
|
treeId, err := idx.WriteTree()
|
||||||
|
checkFatal(t, err)
|
||||||
|
|
||||||
|
message := "This is a commit\n"
|
||||||
|
tree, err := repo.LookupTree(treeId)
|
||||||
|
checkFatal(t, err)
|
||||||
|
commitId, err := repo.CreateCommit("HEAD", sig, sig, message, tree)
|
||||||
|
checkFatal(t, err)
|
||||||
|
|
||||||
|
return commitId, treeId
|
||||||
|
}
|
||||||
|
|
|
@ -4,23 +4,8 @@ import (
|
||||||
"os"
|
"os"
|
||||||
"runtime"
|
"runtime"
|
||||||
"testing"
|
"testing"
|
||||||
"io/ioutil"
|
|
||||||
)
|
)
|
||||||
|
|
||||||
func createTestRepo(t *testing.T) *Repository {
|
|
||||||
// figure out where we can create the test repo
|
|
||||||
path, err := ioutil.TempDir("", "git2go")
|
|
||||||
checkFatal(t, err)
|
|
||||||
repo, err := InitRepository(path, false)
|
|
||||||
checkFatal(t, err)
|
|
||||||
|
|
||||||
tmpfile := "README"
|
|
||||||
err = ioutil.WriteFile(path + "/" + tmpfile, []byte("foo\n"), 0644)
|
|
||||||
checkFatal(t, err)
|
|
||||||
|
|
||||||
return repo
|
|
||||||
}
|
|
||||||
|
|
||||||
func TestCreateRepoAndStage(t *testing.T) {
|
func TestCreateRepoAndStage(t *testing.T) {
|
||||||
repo := createTestRepo(t)
|
repo := createTestRepo(t)
|
||||||
defer os.RemoveAll(repo.Workdir())
|
defer os.RemoveAll(repo.Workdir())
|
||||||
|
|
|
@ -0,0 +1,68 @@
|
||||||
|
package git
|
||||||
|
|
||||||
|
import (
|
||||||
|
"os"
|
||||||
|
"testing"
|
||||||
|
)
|
||||||
|
|
||||||
|
func TestObjectPoymorphism(t *testing.T) {
|
||||||
|
repo := createTestRepo(t)
|
||||||
|
defer os.RemoveAll(repo.Workdir())
|
||||||
|
commitId, treeId := seedTestRepo(t, repo)
|
||||||
|
|
||||||
|
var obj Object
|
||||||
|
|
||||||
|
commit, err := repo.LookupCommit(commitId)
|
||||||
|
checkFatal(t, err)
|
||||||
|
|
||||||
|
obj = commit
|
||||||
|
if obj.Type() != OBJ_COMMIT {
|
||||||
|
t.Fatalf("Wrong object type, expected commit, have %v", obj.Type())
|
||||||
|
}
|
||||||
|
|
||||||
|
tree, err := repo.LookupTree(treeId)
|
||||||
|
checkFatal(t, err)
|
||||||
|
|
||||||
|
obj = tree
|
||||||
|
if obj.Type() != OBJ_TREE {
|
||||||
|
t.Fatalf("Wrong object type, expected tree, have %v", obj.Type())
|
||||||
|
}
|
||||||
|
|
||||||
|
tree2, ok := obj.(*Tree)
|
||||||
|
if !ok {
|
||||||
|
t.Fatalf("Converting back to *Tree is not ok")
|
||||||
|
}
|
||||||
|
|
||||||
|
if tree2.EntryByName("README") == nil {
|
||||||
|
t.Fatalf("Tree did not have expected \"README\" entry")
|
||||||
|
}
|
||||||
|
|
||||||
|
_, ok = obj.(*Commit)
|
||||||
|
if ok {
|
||||||
|
t.Fatalf("*Tree is somehow the same as *Commit")
|
||||||
|
}
|
||||||
|
|
||||||
|
obj, err = repo.Lookup(tree.Id())
|
||||||
|
checkFatal(t, err)
|
||||||
|
|
||||||
|
_, ok = obj.(*Tree)
|
||||||
|
if !ok {
|
||||||
|
t.Fatalf("Lookup creates the wrong type")
|
||||||
|
}
|
||||||
|
|
||||||
|
if obj.Type() != OBJ_TREE {
|
||||||
|
t.Fatalf("Type() doesn't agree with dynamic type")
|
||||||
|
}
|
||||||
|
|
||||||
|
obj, err = repo.RevparseSingle("HEAD")
|
||||||
|
checkFatal(t, err)
|
||||||
|
if obj.Type() != OBJ_COMMIT || obj.Id().String() != commit.Id().String() {
|
||||||
|
t.Fatalf("Failed to parse the right revision")
|
||||||
|
}
|
||||||
|
|
||||||
|
obj, err = repo.RevparseSingle("HEAD^{tree}")
|
||||||
|
checkFatal(t, err)
|
||||||
|
if obj.Type() != OBJ_TREE || obj.Id().String() != tree.Id().String() {
|
||||||
|
t.Fatalf("Failed to parse the right revision")
|
||||||
|
}
|
||||||
|
}
|
|
@ -4,35 +4,15 @@ import (
|
||||||
"os"
|
"os"
|
||||||
"runtime"
|
"runtime"
|
||||||
"testing"
|
"testing"
|
||||||
"time"
|
|
||||||
)
|
)
|
||||||
|
|
||||||
func TestRefModification(t *testing.T) {
|
func TestRefModification(t *testing.T) {
|
||||||
repo := createTestRepo(t)
|
repo := createTestRepo(t)
|
||||||
defer os.RemoveAll(repo.Workdir())
|
defer os.RemoveAll(repo.Workdir())
|
||||||
|
|
||||||
loc, err := time.LoadLocation("Europe/Berlin")
|
commitId, treeId := seedTestRepo(t, repo)
|
||||||
checkFatal(t, err)
|
|
||||||
sig := &Signature{
|
|
||||||
Name: "Rand Om Hacker",
|
|
||||||
Email: "random@hacker.com",
|
|
||||||
When: time.Date(2013, 03, 06, 14, 30, 0, 0, loc),
|
|
||||||
}
|
|
||||||
|
|
||||||
idx, err := repo.Index()
|
_, err := repo.CreateReference("refs/tags/tree", treeId, true)
|
||||||
checkFatal(t, err)
|
|
||||||
err = idx.AddByPath("README")
|
|
||||||
checkFatal(t, err)
|
|
||||||
treeId, err := idx.WriteTree()
|
|
||||||
checkFatal(t, err)
|
|
||||||
|
|
||||||
message := "This is a commit\n"
|
|
||||||
tree, err := repo.LookupTree(treeId)
|
|
||||||
checkFatal(t, err)
|
|
||||||
commitId, err := repo.CreateCommit("HEAD", sig, sig, message, tree)
|
|
||||||
checkFatal(t, err)
|
|
||||||
|
|
||||||
_, err = repo.CreateReference("refs/tags/tree", treeId, true)
|
|
||||||
checkFatal(t, err)
|
checkFatal(t, err)
|
||||||
|
|
||||||
tag, err := repo.LookupReference("refs/tags/tree")
|
tag, err := repo.LookupReference("refs/tags/tree")
|
||||||
|
|
|
@ -72,7 +72,7 @@ func (v *Repository) Index() (*Index, error) {
|
||||||
return newIndexFromC(ptr), nil
|
return newIndexFromC(ptr), nil
|
||||||
}
|
}
|
||||||
|
|
||||||
func (v *Repository) Lookup(oid *Oid, t ObjectType) (Object, error) {
|
func (v *Repository) lookupType(oid *Oid, t ObjectType) (Object, error) {
|
||||||
var ptr *C.git_object
|
var ptr *C.git_object
|
||||||
ret := C.git_object_lookup(&ptr, v.ptr, oid.toC(), C.git_otype(t))
|
ret := C.git_object_lookup(&ptr, v.ptr, oid.toC(), C.git_otype(t))
|
||||||
if ret < 0 {
|
if ret < 0 {
|
||||||
|
@ -82,8 +82,12 @@ func (v *Repository) Lookup(oid *Oid, t ObjectType) (Object, error) {
|
||||||
return allocObject(ptr), nil
|
return allocObject(ptr), nil
|
||||||
}
|
}
|
||||||
|
|
||||||
|
func (v *Repository) Lookup(oid *Oid) (Object, error) {
|
||||||
|
return v.lookupType(oid, OBJ_ANY)
|
||||||
|
}
|
||||||
|
|
||||||
func (v *Repository) LookupTree(oid *Oid) (*Tree, error) {
|
func (v *Repository) LookupTree(oid *Oid) (*Tree, error) {
|
||||||
obj, err := v.Lookup(oid, OBJ_TREE)
|
obj, err := v.lookupType(oid, OBJ_TREE)
|
||||||
if err != nil {
|
if err != nil {
|
||||||
return nil, err
|
return nil, err
|
||||||
}
|
}
|
||||||
|
@ -92,7 +96,7 @@ func (v *Repository) LookupTree(oid *Oid) (*Tree, error) {
|
||||||
}
|
}
|
||||||
|
|
||||||
func (v *Repository) LookupCommit(oid *Oid) (*Commit, error) {
|
func (v *Repository) LookupCommit(oid *Oid) (*Commit, error) {
|
||||||
obj, err := v.Lookup(oid, OBJ_COMMIT)
|
obj, err := v.lookupType(oid, OBJ_COMMIT)
|
||||||
if err != nil {
|
if err != nil {
|
||||||
return nil, err
|
return nil, err
|
||||||
}
|
}
|
||||||
|
@ -101,7 +105,7 @@ func (v *Repository) LookupCommit(oid *Oid) (*Commit, error) {
|
||||||
}
|
}
|
||||||
|
|
||||||
func (v *Repository) LookupBlob(oid *Oid) (*Blob, error) {
|
func (v *Repository) LookupBlob(oid *Oid) (*Blob, error) {
|
||||||
obj, err := v.Lookup(oid, OBJ_BLOB)
|
obj, err := v.lookupType(oid, OBJ_BLOB)
|
||||||
if err != nil {
|
if err != nil {
|
||||||
return nil, err
|
return nil, err
|
||||||
}
|
}
|
||||||
|
@ -247,3 +251,15 @@ func (v *Repository) TreeBuilder() (*TreeBuilder, error) {
|
||||||
return bld, nil
|
return bld, nil
|
||||||
}
|
}
|
||||||
|
|
||||||
|
func (v *Repository) RevparseSingle(spec string) (Object, error) {
|
||||||
|
cspec := C.CString(spec)
|
||||||
|
defer C.free(unsafe.Pointer(cspec))
|
||||||
|
|
||||||
|
var ptr *C.git_object
|
||||||
|
ecode := C.git_revparse_single(&ptr, v.ptr, cspec)
|
||||||
|
if ecode < 0 {
|
||||||
|
return nil, LastError()
|
||||||
|
}
|
||||||
|
|
||||||
|
return allocObject(ptr), nil
|
||||||
|
}
|
||||||
|
|
Loading…
Reference in New Issue