Skip to content

Commit 2bf17ba

Browse files
author
Vicent Marti
committed
Ok, now with shared base object
1 parent 7292caf commit 2bf17ba

File tree

4 files changed

+41
-66
lines changed

4 files changed

+41
-66
lines changed

blob.go

Lines changed: 3 additions & 17 deletions
Original file line numberDiff line numberDiff line change
@@ -8,31 +8,17 @@ package git
88
import "C"
99
import (
1010
"unsafe"
11-
"runtime"
1211
)
1312

1413
type Blob struct {
15-
ptr *C.git_blob
14+
gitObject
1615
}
1716

18-
func (o *Blob) Id() *Oid {
19-
return newOidFromC(C.git_blob_id(o.ptr))
20-
}
21-
22-
func (o *Blob) Type() ObjectType {
23-
return OBJ_BLOB
24-
}
25-
26-
func (o *Blob) Free() {
27-
runtime.SetFinalizer(o, nil)
28-
C.git_blob_free(o.ptr)
29-
}
30-
31-
func (v *Blob) Size() int64 {
17+
func (v Blob) Size() int64 {
3218
return int64(C.git_blob_rawsize(v.ptr))
3319
}
3420

35-
func (v *Blob) Contents() []byte {
21+
func (v Blob) Contents() []byte {
3622
size := C.int(C.git_blob_rawsize(v.ptr))
3723
buffer := unsafe.Pointer(C.git_blob_rawcontent(v.ptr))
3824
return C.GoBytes(buffer, size)

commit.go

Lines changed: 6 additions & 20 deletions
Original file line numberDiff line numberDiff line change
@@ -9,34 +9,20 @@ extern int _go_git_treewalk(git_tree *tree, git_treewalk_mode mode, void *ptr);
99
import "C"
1010

1111
import (
12-
"runtime"
1312
"unsafe"
1413
"time"
1514
)
1615

1716
// Commit
1817
type Commit struct {
19-
ptr *C.git_commit
18+
gitObject
2019
}
2120

22-
func (o *Commit) Id() *Oid {
23-
return newOidFromC(C.git_commit_id(o.ptr))
24-
}
25-
26-
func (o *Commit) Type() ObjectType {
27-
return OBJ_COMMIT
28-
}
29-
30-
func (o *Commit) Free() {
31-
runtime.SetFinalizer(o, nil)
32-
C.git_commit_free(o.ptr)
33-
}
34-
35-
func (c *Commit) Message() string {
21+
func (c Commit) Message() string {
3622
return C.GoString(C.git_commit_message(c.ptr))
3723
}
3824

39-
func (c *Commit) Tree() (*Tree, error) {
25+
func (c Commit) Tree() (*Tree, error) {
4026
var ptr *C.git_object
4127

4228
err := C.git_commit_tree(&ptr, c.ptr)
@@ -47,16 +33,16 @@ func (c *Commit) Tree() (*Tree, error) {
4733
return allocObject(ptr).(*Tree), nil
4834
}
4935

50-
func (c *Commit) TreeId() *Oid {
36+
func (c Commit) TreeId() *Oid {
5137
return newOidFromC(C.git_commit_tree_id(c.ptr))
5238
}
5339

54-
func (c *Commit) Author() *Signature {
40+
func (c Commit) Author() *Signature {
5541
ptr := C.git_commit_author(c.ptr)
5642
return newSignatureFromC(ptr)
5743
}
5844

59-
func (c *Commit) Committer() *Signature {
45+
func (c Commit) Committer() *Signature {
6046
ptr := C.git_commit_committer(c.ptr)
6147
return newSignatureFromC(ptr)
6248
}

object.go

Lines changed: 27 additions & 11 deletions
Original file line numberDiff line numberDiff line change
@@ -25,25 +25,41 @@ type Object interface {
2525
Type() ObjectType
2626
}
2727

28+
type gitObject struct {
29+
ptr *C.git_object
30+
}
31+
32+
func (o gitObject) Id() *Oid {
33+
return newOidFromC(C.git_commit_id(o.ptr))
34+
}
35+
36+
func (o gitObject) Type() ObjectType {
37+
return ObjectType(C.git_object_type(o.ptr))
38+
}
39+
40+
func (o gitObject) Free() {
41+
runtime.SetFinalizer(o, nil)
42+
C.git_commit_free(o.ptr)
43+
}
44+
2845
func allocObject(cobj *C.git_object) Object {
29-
var object Object
3046

3147
switch ObjectType(C.git_object_type(cobj)) {
3248
case OBJ_COMMIT:
33-
object = &Commit{cobj}
34-
runtime.SetFinalizer(object, (*Commit).Free)
49+
commit := &Commit{gitObject{cobj}}
50+
runtime.SetFinalizer(commit, (*Commit).Free)
51+
return commit
3552

3653
case OBJ_TREE:
37-
object = &Tree{cobj}
38-
runtime.SetFinalizer(object, (*Tree).Free)
54+
tree := &Tree{gitObject{cobj}}
55+
runtime.SetFinalizer(tree, (*Tree).Free)
56+
return tree
3957

4058
case OBJ_BLOB:
41-
object = &Blob{cobj}
42-
runtime.SetFinalizer(object, (*Blob).Free)
43-
44-
default:
45-
return nil
59+
blob := &Blob{gitObject{cobj}}
60+
runtime.SetFinalizer(blob, (*Blob).Free)
61+
return blob
4662
}
4763

48-
return object
64+
return nil
4965
}

tree.go

Lines changed: 5 additions & 18 deletions
Original file line numberDiff line numberDiff line change
@@ -14,20 +14,7 @@ import (
1414
)
1515

1616
type Tree struct {
17-
ptr *C.git_tree
18-
}
19-
20-
func (o *Tree) Id() *Oid {
21-
return newOidFromC(C.git_tree_id(o.ptr))
22-
}
23-
24-
func (o *Tree) Type() ObjectType {
25-
return OBJ_TREE
26-
}
27-
28-
func (o *Tree) Free() {
29-
runtime.SetFinalizer(o, nil)
30-
C.git_tree_free(o.ptr)
17+
gitObject
3118
}
3219

3320
type TreeEntry struct {
@@ -44,7 +31,7 @@ func newTreeEntry(entry *C.git_tree_entry) *TreeEntry {
4431
}
4532
}
4633

47-
func (t *Tree) EntryByName(filename string) *TreeEntry {
34+
func (t Tree) EntryByName(filename string) *TreeEntry {
4835
cname := C.CString(filename)
4936
defer C.free(unsafe.Pointer(cname))
5037

@@ -56,7 +43,7 @@ func (t *Tree) EntryByName(filename string) *TreeEntry {
5643
return newTreeEntry(entry)
5744
}
5845

59-
func (t *Tree) EntryByIndex(index uint64) *TreeEntry {
46+
func (t Tree) EntryByIndex(index uint64) *TreeEntry {
6047
entry := C.git_tree_entry_byindex(t.ptr, C.size_t(index))
6148
if entry == nil {
6249
return nil
@@ -65,7 +52,7 @@ func (t *Tree) EntryByIndex(index uint64) *TreeEntry {
6552
return newTreeEntry(entry)
6653
}
6754

68-
func (t *Tree) EntryCount() uint64 {
55+
func (t Tree) EntryCount() uint64 {
6956
num := C.git_tree_entrycount(t.ptr)
7057
return uint64(num)
7158
}
@@ -81,7 +68,7 @@ func CallbackGitTreeWalk(_root unsafe.Pointer, _entry unsafe.Pointer, ptr unsafe
8168
return C.int(callback(root, newTreeEntry(entry)))
8269
}
8370

84-
func (t *Tree) Walk(callback TreeWalkCallback) error {
71+
func (t Tree) Walk(callback TreeWalkCallback) error {
8572
err := C._go_git_treewalk(
8673
t.ptr,
8774
C.GIT_TREEWALK_PRE,

0 commit comments

Comments
 (0)