summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorVicent Marti <[email protected]>2013-04-16 23:18:35 +0200
committerVicent Marti <[email protected]>2013-04-16 23:18:35 +0200
commit7292cafac2d2c4462f3bc0b850e702d6d87f629e (patch)
tree9179ef3ed0028099cf11d4a1dc008355a8f92bcf
parentd190d8a6b3717402744902d060be57195f27d604 (diff)
Add @carlosmn's tests
-rw-r--r--git_test.go47
-rw-r--r--index_test.go15
-rw-r--r--object_test.go68
-rw-r--r--reference_test.go24
-rw-r--r--repository.go24
5 files changed, 137 insertions, 41 deletions
diff --git a/git_test.go b/git_test.go
new file mode 100644
index 0000000..52aea1d
--- /dev/null
+++ b/git_test.go
@@ -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: "[email protected]",
+ 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
+}
+
diff --git a/index_test.go b/index_test.go
index fe6fb87..9828d0f 100644
--- a/index_test.go
+++ b/index_test.go
@@ -4,23 +4,8 @@ import (
"os"
"runtime"
"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) {
repo := createTestRepo(t)
defer os.RemoveAll(repo.Workdir())
diff --git a/object_test.go b/object_test.go
new file mode 100644
index 0000000..82dce98
--- /dev/null
+++ b/object_test.go
@@ -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")
+ }
+}
diff --git a/reference_test.go b/reference_test.go
index 8043833..3ea421d 100644
--- a/reference_test.go
+++ b/reference_test.go
@@ -4,35 +4,15 @@ import (
"os"
"runtime"
"testing"
- "time"
)
func TestRefModification(t *testing.T) {
repo := createTestRepo(t)
defer os.RemoveAll(repo.Workdir())
- loc, err := time.LoadLocation("Europe/Berlin")
- checkFatal(t, err)
- sig := &Signature{
- Name: "Rand Om Hacker",
- Email: "[email protected]",
- 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)
+ commitId, treeId := seedTestRepo(t, repo)
- _, err = repo.CreateReference("refs/tags/tree", treeId, true)
+ _, err := repo.CreateReference("refs/tags/tree", treeId, true)
checkFatal(t, err)
tag, err := repo.LookupReference("refs/tags/tree")
diff --git a/repository.go b/repository.go
index 015e5bf..0a07dc3 100644
--- a/repository.go
+++ b/repository.go
@@ -72,7 +72,7 @@ func (v *Repository) Index() (*Index, error) {
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
ret := C.git_object_lookup(&ptr, v.ptr, oid.toC(), C.git_otype(t))
if ret < 0 {
@@ -82,8 +82,12 @@ func (v *Repository) Lookup(oid *Oid, t ObjectType) (Object, error) {
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) {
- obj, err := v.Lookup(oid, OBJ_TREE)
+ obj, err := v.lookupType(oid, OBJ_TREE)
if err != nil {
return nil, err
}
@@ -92,7 +96,7 @@ func (v *Repository) LookupTree(oid *Oid) (*Tree, 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 {
return nil, err
}
@@ -101,7 +105,7 @@ func (v *Repository) LookupCommit(oid *Oid) (*Commit, 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 {
return nil, err
}
@@ -247,3 +251,15 @@ func (v *Repository) TreeBuilder() (*TreeBuilder, error) {
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
+}