Move from an Object interface to a type
An Object should be about representing a libgit2 object rather than showing which methods it should support. Change any return of Object to *Object and provide methods to convert between this and the particular type.
This commit is contained in:
parent
5d989f2cad
commit
b7159b0cd4
2
blob.go
2
blob.go
|
@ -18,7 +18,7 @@ import (
|
||||||
)
|
)
|
||||||
|
|
||||||
type Blob struct {
|
type Blob struct {
|
||||||
gitObject
|
Object
|
||||||
cast_ptr *C.git_blob
|
cast_ptr *C.git_blob
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
@ -14,7 +14,7 @@ import (
|
||||||
|
|
||||||
// Commit
|
// Commit
|
||||||
type Commit struct {
|
type Commit struct {
|
||||||
gitObject
|
Object
|
||||||
cast_ptr *C.git_commit
|
cast_ptr *C.git_commit
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -37,7 +37,7 @@ func (c Commit) Tree() (*Tree, error) {
|
||||||
return nil, MakeGitError(err)
|
return nil, MakeGitError(err)
|
||||||
}
|
}
|
||||||
|
|
||||||
return allocObject((*C.git_object)(ptr), c.repo).(*Tree), nil
|
return allocTree(ptr, c.repo), nil
|
||||||
}
|
}
|
||||||
|
|
||||||
func (c Commit) TreeId() *Oid {
|
func (c Commit) TreeId() *Oid {
|
||||||
|
@ -61,7 +61,7 @@ func (c *Commit) Parent(n uint) *Commit {
|
||||||
return nil
|
return nil
|
||||||
}
|
}
|
||||||
|
|
||||||
return allocObject((*C.git_object)(cobj), c.repo).(*Commit)
|
return allocCommit(cobj, c.repo)
|
||||||
}
|
}
|
||||||
|
|
||||||
func (c *Commit) ParentId(n uint) *Oid {
|
func (c *Commit) ParentId(n uint) *Oid {
|
||||||
|
|
|
@ -127,7 +127,7 @@ func (c *Commit) Describe(opts *DescribeOptions) (*DescribeResult, error) {
|
||||||
runtime.LockOSThread()
|
runtime.LockOSThread()
|
||||||
defer runtime.UnlockOSThread()
|
defer runtime.UnlockOSThread()
|
||||||
|
|
||||||
ecode := C.git_describe_commit(&resultPtr, c.gitObject.ptr, cDescribeOpts)
|
ecode := C.git_describe_commit(&resultPtr, c.ptr, cDescribeOpts)
|
||||||
if ecode < 0 {
|
if ecode < 0 {
|
||||||
return nil, MakeGitError(ecode)
|
return nil, MakeGitError(ecode)
|
||||||
}
|
}
|
||||||
|
|
|
@ -32,10 +32,11 @@ func TestIndexReadTree(t *testing.T) {
|
||||||
ref, err := repo.Head()
|
ref, err := repo.Head()
|
||||||
checkFatal(t, err)
|
checkFatal(t, err)
|
||||||
|
|
||||||
obj, err := ref.Peel(ObjectTree);
|
obj, err := ref.Peel(ObjectTree)
|
||||||
checkFatal(t, err)
|
checkFatal(t, err)
|
||||||
|
|
||||||
tree := obj.(*Tree)
|
tree, err := obj.AsTree()
|
||||||
|
checkFatal(t, err)
|
||||||
|
|
||||||
idx, err := NewIndex()
|
idx, err := NewIndex()
|
||||||
checkFatal(t, err)
|
checkFatal(t, err)
|
||||||
|
|
173
object.go
173
object.go
|
@ -4,7 +4,11 @@ package git
|
||||||
#include <git2.h>
|
#include <git2.h>
|
||||||
*/
|
*/
|
||||||
import "C"
|
import "C"
|
||||||
import "runtime"
|
import (
|
||||||
|
"errors"
|
||||||
|
"fmt"
|
||||||
|
"runtime"
|
||||||
|
)
|
||||||
|
|
||||||
type ObjectType int
|
type ObjectType int
|
||||||
|
|
||||||
|
@ -17,15 +21,7 @@ const (
|
||||||
ObjectTag ObjectType = C.GIT_OBJ_TAG
|
ObjectTag ObjectType = C.GIT_OBJ_TAG
|
||||||
)
|
)
|
||||||
|
|
||||||
type Object interface {
|
type Object struct {
|
||||||
Free()
|
|
||||||
Id() *Oid
|
|
||||||
Type() ObjectType
|
|
||||||
Owner() *Repository
|
|
||||||
Peel(t ObjectType) (Object, error)
|
|
||||||
}
|
|
||||||
|
|
||||||
type gitObject struct {
|
|
||||||
ptr *C.git_object
|
ptr *C.git_object
|
||||||
repo *Repository
|
repo *Repository
|
||||||
}
|
}
|
||||||
|
@ -49,23 +45,128 @@ func (t ObjectType) String() string {
|
||||||
return ""
|
return ""
|
||||||
}
|
}
|
||||||
|
|
||||||
func (o gitObject) Id() *Oid {
|
func (o *Object) Id() *Oid {
|
||||||
return newOidFromC(C.git_object_id(o.ptr))
|
return newOidFromC(C.git_object_id(o.ptr))
|
||||||
}
|
}
|
||||||
|
|
||||||
func (o gitObject) Type() ObjectType {
|
func (o *Object) Type() ObjectType {
|
||||||
return ObjectType(C.git_object_type(o.ptr))
|
return ObjectType(C.git_object_type(o.ptr))
|
||||||
}
|
}
|
||||||
|
|
||||||
// Owner returns a weak reference to the repository which owns this
|
// Owner returns a weak reference to the repository which owns this
|
||||||
// object
|
// object. This won't keep the underlying repository alive.
|
||||||
func (o gitObject) Owner() *Repository {
|
func (o *Object) Owner() *Repository {
|
||||||
return &Repository{
|
return &Repository{
|
||||||
ptr: C.git_object_owner(o.ptr),
|
ptr: C.git_object_owner(o.ptr),
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
func (o *gitObject) Free() {
|
func dupObject(obj *Object, kind ObjectType) (*C.git_object, error) {
|
||||||
|
if obj.Type() != kind {
|
||||||
|
return nil, errors.New(fmt.Sprintf("object is not a %v", kind))
|
||||||
|
}
|
||||||
|
|
||||||
|
var cobj *C.git_object
|
||||||
|
|
||||||
|
runtime.LockOSThread()
|
||||||
|
defer runtime.UnlockOSThread()
|
||||||
|
|
||||||
|
if err := C.git_object_dup(&cobj, obj.ptr); err < 0 {
|
||||||
|
return nil, MakeGitError(err)
|
||||||
|
}
|
||||||
|
|
||||||
|
return cobj, nil
|
||||||
|
}
|
||||||
|
|
||||||
|
func allocTree(ptr *C.git_tree, repo *Repository) *Tree {
|
||||||
|
tree := &Tree{
|
||||||
|
Object: Object{
|
||||||
|
ptr: (*C.git_object)(ptr),
|
||||||
|
repo: repo,
|
||||||
|
},
|
||||||
|
cast_ptr: ptr,
|
||||||
|
}
|
||||||
|
runtime.SetFinalizer(tree, (*Tree).Free)
|
||||||
|
|
||||||
|
return tree
|
||||||
|
}
|
||||||
|
|
||||||
|
func (o *Object) AsTree() (*Tree, error) {
|
||||||
|
cobj, err := dupObject(o, ObjectTree)
|
||||||
|
if err != nil {
|
||||||
|
return nil, err
|
||||||
|
}
|
||||||
|
|
||||||
|
return allocTree((*C.git_tree)(cobj), o.repo), nil
|
||||||
|
}
|
||||||
|
|
||||||
|
func allocCommit(ptr *C.git_commit, repo *Repository) *Commit {
|
||||||
|
commit := &Commit{
|
||||||
|
Object: Object{
|
||||||
|
ptr: (*C.git_object)(ptr),
|
||||||
|
repo: repo,
|
||||||
|
},
|
||||||
|
cast_ptr: ptr,
|
||||||
|
}
|
||||||
|
runtime.SetFinalizer(commit, (*Commit).Free)
|
||||||
|
|
||||||
|
return commit
|
||||||
|
}
|
||||||
|
|
||||||
|
func (o *Object) AsCommit() (*Commit, error) {
|
||||||
|
cobj, err := dupObject(o, ObjectCommit)
|
||||||
|
if err != nil {
|
||||||
|
return nil, err
|
||||||
|
}
|
||||||
|
|
||||||
|
return allocCommit((*C.git_commit)(cobj), o.repo), nil
|
||||||
|
}
|
||||||
|
|
||||||
|
func allocBlob(ptr *C.git_blob, repo *Repository) *Blob {
|
||||||
|
blob := &Blob{
|
||||||
|
Object: Object{
|
||||||
|
ptr: (*C.git_object)(ptr),
|
||||||
|
repo: repo,
|
||||||
|
},
|
||||||
|
cast_ptr: ptr,
|
||||||
|
}
|
||||||
|
runtime.SetFinalizer(blob, (*Blob).Free)
|
||||||
|
|
||||||
|
return blob
|
||||||
|
}
|
||||||
|
|
||||||
|
func (o *Object) AsBlob() (*Blob, error) {
|
||||||
|
cobj, err := dupObject(o, ObjectBlob)
|
||||||
|
if err != nil {
|
||||||
|
return nil, err
|
||||||
|
}
|
||||||
|
|
||||||
|
return allocBlob((*C.git_blob)(cobj), o.repo), nil
|
||||||
|
}
|
||||||
|
|
||||||
|
func allocTag(ptr *C.git_tag, repo *Repository) *Tag {
|
||||||
|
tag := &Tag{
|
||||||
|
Object: Object{
|
||||||
|
ptr: (*C.git_object)(ptr),
|
||||||
|
repo: repo,
|
||||||
|
},
|
||||||
|
cast_ptr: ptr,
|
||||||
|
}
|
||||||
|
runtime.SetFinalizer(tag, (*Tag).Free)
|
||||||
|
|
||||||
|
return tag
|
||||||
|
}
|
||||||
|
|
||||||
|
func (o *Object) AsTag() (*Tag, error) {
|
||||||
|
cobj, err := dupObject(o, ObjectTag)
|
||||||
|
if err != nil {
|
||||||
|
return nil, err
|
||||||
|
}
|
||||||
|
|
||||||
|
return allocTag((*C.git_tag)(cobj), o.repo), nil
|
||||||
|
}
|
||||||
|
|
||||||
|
func (o *Object) Free() {
|
||||||
runtime.SetFinalizer(o, nil)
|
runtime.SetFinalizer(o, nil)
|
||||||
C.git_object_free(o.ptr)
|
C.git_object_free(o.ptr)
|
||||||
}
|
}
|
||||||
|
@ -82,7 +183,7 @@ func (o *gitObject) Free() {
|
||||||
//
|
//
|
||||||
// If peeling a tag we discover an object which cannot be peeled to the target
|
// If peeling a tag we discover an object which cannot be peeled to the target
|
||||||
// type due to the object model, an error will be returned.
|
// type due to the object model, an error will be returned.
|
||||||
func (o *gitObject) Peel(t ObjectType) (Object, error) {
|
func (o *Object) Peel(t ObjectType) (*Object, error) {
|
||||||
var cobj *C.git_object
|
var cobj *C.git_object
|
||||||
|
|
||||||
runtime.LockOSThread()
|
runtime.LockOSThread()
|
||||||
|
@ -95,44 +196,12 @@ func (o *gitObject) Peel(t ObjectType) (Object, error) {
|
||||||
return allocObject(cobj, o.repo), nil
|
return allocObject(cobj, o.repo), nil
|
||||||
}
|
}
|
||||||
|
|
||||||
func allocObject(cobj *C.git_object, repo *Repository) Object {
|
func allocObject(cobj *C.git_object, repo *Repository) *Object {
|
||||||
obj := gitObject{
|
obj := &Object{
|
||||||
ptr: cobj,
|
ptr: cobj,
|
||||||
repo: repo,
|
repo: repo,
|
||||||
}
|
}
|
||||||
|
runtime.SetFinalizer(obj, (*Object).Free)
|
||||||
|
|
||||||
switch ObjectType(C.git_object_type(cobj)) {
|
return obj
|
||||||
case ObjectCommit:
|
|
||||||
commit := &Commit{
|
|
||||||
gitObject: obj,
|
|
||||||
cast_ptr: (*C.git_commit)(cobj),
|
|
||||||
}
|
|
||||||
runtime.SetFinalizer(commit, (*Commit).Free)
|
|
||||||
return commit
|
|
||||||
|
|
||||||
case ObjectTree:
|
|
||||||
tree := &Tree{
|
|
||||||
gitObject: obj,
|
|
||||||
cast_ptr: (*C.git_tree)(cobj),
|
|
||||||
}
|
|
||||||
runtime.SetFinalizer(tree, (*Tree).Free)
|
|
||||||
return tree
|
|
||||||
|
|
||||||
case ObjectBlob:
|
|
||||||
blob := &Blob{
|
|
||||||
gitObject: obj,
|
|
||||||
cast_ptr: (*C.git_blob)(cobj),
|
|
||||||
}
|
|
||||||
runtime.SetFinalizer(blob, (*Blob).Free)
|
|
||||||
return blob
|
|
||||||
case ObjectTag:
|
|
||||||
tag := &Tag{
|
|
||||||
gitObject: obj,
|
|
||||||
cast_ptr: (*C.git_tag)(cobj),
|
|
||||||
}
|
|
||||||
runtime.SetFinalizer(tag, (*Tag).Free)
|
|
||||||
return tag
|
|
||||||
}
|
|
||||||
|
|
||||||
return nil
|
|
||||||
}
|
}
|
||||||
|
|
|
@ -10,12 +10,12 @@ func TestObjectPoymorphism(t *testing.T) {
|
||||||
|
|
||||||
commitId, treeId := seedTestRepo(t, repo)
|
commitId, treeId := seedTestRepo(t, repo)
|
||||||
|
|
||||||
var obj Object
|
var obj *Object
|
||||||
|
|
||||||
commit, err := repo.LookupCommit(commitId)
|
commit, err := repo.LookupCommit(commitId)
|
||||||
checkFatal(t, err)
|
checkFatal(t, err)
|
||||||
|
|
||||||
obj = commit
|
obj = &commit.Object
|
||||||
if obj.Type() != ObjectCommit {
|
if obj.Type() != ObjectCommit {
|
||||||
t.Fatalf("Wrong object type, expected commit, have %v", obj.Type())
|
t.Fatalf("Wrong object type, expected commit, have %v", obj.Type())
|
||||||
}
|
}
|
||||||
|
@ -27,13 +27,13 @@ func TestObjectPoymorphism(t *testing.T) {
|
||||||
tree, err := repo.LookupTree(treeId)
|
tree, err := repo.LookupTree(treeId)
|
||||||
checkFatal(t, err)
|
checkFatal(t, err)
|
||||||
|
|
||||||
obj = tree
|
obj = &tree.Object
|
||||||
if obj.Type() != ObjectTree {
|
if obj.Type() != ObjectTree {
|
||||||
t.Fatalf("Wrong object type, expected tree, have %v", obj.Type())
|
t.Fatalf("Wrong object type, expected tree, have %v", obj.Type())
|
||||||
}
|
}
|
||||||
|
|
||||||
tree2, ok := obj.(*Tree)
|
tree2, err := obj.AsTree()
|
||||||
if !ok {
|
if err != nil {
|
||||||
t.Fatalf("Converting back to *Tree is not ok")
|
t.Fatalf("Converting back to *Tree is not ok")
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -46,16 +46,16 @@ func TestObjectPoymorphism(t *testing.T) {
|
||||||
t.Fatal("Wrong filemode for \"README\"")
|
t.Fatal("Wrong filemode for \"README\"")
|
||||||
}
|
}
|
||||||
|
|
||||||
_, ok = obj.(*Commit)
|
_, err = obj.AsCommit()
|
||||||
if ok {
|
if err == nil {
|
||||||
t.Fatalf("*Tree is somehow the same as *Commit")
|
t.Fatalf("*Tree is somehow the same as *Commit")
|
||||||
}
|
}
|
||||||
|
|
||||||
obj, err = repo.Lookup(tree.Id())
|
obj, err = repo.Lookup(tree.Id())
|
||||||
checkFatal(t, err)
|
checkFatal(t, err)
|
||||||
|
|
||||||
_, ok = obj.(*Tree)
|
_, err = obj.AsTree()
|
||||||
if !ok {
|
if err != nil {
|
||||||
t.Fatalf("Lookup creates the wrong type")
|
t.Fatalf("Lookup creates the wrong type")
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -99,8 +99,8 @@ func TestObjectOwner(t *testing.T) {
|
||||||
tree, err := repo.LookupTree(treeId)
|
tree, err := repo.LookupTree(treeId)
|
||||||
checkFatal(t, err)
|
checkFatal(t, err)
|
||||||
|
|
||||||
checkOwner(t, repo, commit)
|
checkOwner(t, repo, commit.Object)
|
||||||
checkOwner(t, repo, tree)
|
checkOwner(t, repo, tree.Object)
|
||||||
}
|
}
|
||||||
|
|
||||||
func TestObjectPeel(t *testing.T) {
|
func TestObjectPeel(t *testing.T) {
|
||||||
|
@ -109,7 +109,7 @@ func TestObjectPeel(t *testing.T) {
|
||||||
|
|
||||||
commitID, treeID := seedTestRepo(t, repo)
|
commitID, treeID := seedTestRepo(t, repo)
|
||||||
|
|
||||||
var obj Object
|
var obj *Object
|
||||||
|
|
||||||
commit, err := repo.LookupCommit(commitID)
|
commit, err := repo.LookupCommit(commitID)
|
||||||
checkFatal(t, err)
|
checkFatal(t, err)
|
||||||
|
|
|
@ -263,7 +263,7 @@ func (v *Reference) Delete() error {
|
||||||
return nil
|
return nil
|
||||||
}
|
}
|
||||||
|
|
||||||
func (v *Reference) Peel(t ObjectType) (Object, error) {
|
func (v *Reference) Peel(t ObjectType) (*Object, error) {
|
||||||
var cobj *C.git_object
|
var cobj *C.git_object
|
||||||
|
|
||||||
runtime.LockOSThread()
|
runtime.LockOSThread()
|
||||||
|
|
|
@ -145,7 +145,7 @@ func (v *Repository) Index() (*Index, error) {
|
||||||
return newIndexFromC(ptr), nil
|
return newIndexFromC(ptr), nil
|
||||||
}
|
}
|
||||||
|
|
||||||
func (v *Repository) lookupType(id *Oid, t ObjectType) (Object, error) {
|
func (v *Repository) lookupType(id *Oid, t ObjectType) (*Object, error) {
|
||||||
var ptr *C.git_object
|
var ptr *C.git_object
|
||||||
|
|
||||||
runtime.LockOSThread()
|
runtime.LockOSThread()
|
||||||
|
@ -159,7 +159,7 @@ func (v *Repository) lookupType(id *Oid, t ObjectType) (Object, error) {
|
||||||
return allocObject(ptr, v), nil
|
return allocObject(ptr, v), nil
|
||||||
}
|
}
|
||||||
|
|
||||||
func (v *Repository) Lookup(id *Oid) (Object, error) {
|
func (v *Repository) Lookup(id *Oid) (*Object, error) {
|
||||||
return v.lookupType(id, ObjectAny)
|
return v.lookupType(id, ObjectAny)
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -169,7 +169,7 @@ func (v *Repository) LookupTree(id *Oid) (*Tree, error) {
|
||||||
return nil, err
|
return nil, err
|
||||||
}
|
}
|
||||||
|
|
||||||
return obj.(*Tree), nil
|
return obj.AsTree()
|
||||||
}
|
}
|
||||||
|
|
||||||
func (v *Repository) LookupCommit(id *Oid) (*Commit, error) {
|
func (v *Repository) LookupCommit(id *Oid) (*Commit, error) {
|
||||||
|
@ -178,7 +178,7 @@ func (v *Repository) LookupCommit(id *Oid) (*Commit, error) {
|
||||||
return nil, err
|
return nil, err
|
||||||
}
|
}
|
||||||
|
|
||||||
return obj.(*Commit), nil
|
return obj.AsCommit()
|
||||||
}
|
}
|
||||||
|
|
||||||
func (v *Repository) LookupBlob(id *Oid) (*Blob, error) {
|
func (v *Repository) LookupBlob(id *Oid) (*Blob, error) {
|
||||||
|
@ -187,7 +187,7 @@ func (v *Repository) LookupBlob(id *Oid) (*Blob, error) {
|
||||||
return nil, err
|
return nil, err
|
||||||
}
|
}
|
||||||
|
|
||||||
return obj.(*Blob), nil
|
return obj.AsBlob()
|
||||||
}
|
}
|
||||||
|
|
||||||
func (v *Repository) LookupTag(id *Oid) (*Tag, error) {
|
func (v *Repository) LookupTag(id *Oid) (*Tag, error) {
|
||||||
|
@ -196,7 +196,7 @@ func (v *Repository) LookupTag(id *Oid) (*Tag, error) {
|
||||||
return nil, err
|
return nil, err
|
||||||
}
|
}
|
||||||
|
|
||||||
return obj.(*Tag), nil
|
return obj.AsTag()
|
||||||
}
|
}
|
||||||
|
|
||||||
func (v *Repository) Head() (*Reference, error) {
|
func (v *Repository) Head() (*Reference, error) {
|
||||||
|
|
2
reset.go
2
reset.go
|
@ -17,7 +17,7 @@ const (
|
||||||
func (r *Repository) ResetToCommit(commit *Commit, resetType ResetType, opts *CheckoutOpts) error {
|
func (r *Repository) ResetToCommit(commit *Commit, resetType ResetType, opts *CheckoutOpts) error {
|
||||||
runtime.LockOSThread()
|
runtime.LockOSThread()
|
||||||
defer runtime.UnlockOSThread()
|
defer runtime.UnlockOSThread()
|
||||||
ret := C.git_reset(r.ptr, commit.gitObject.ptr, C.git_reset_t(resetType), opts.toC())
|
ret := C.git_reset(r.ptr, commit.ptr, C.git_reset_t(resetType), opts.toC())
|
||||||
|
|
||||||
if ret < 0 {
|
if ret < 0 {
|
||||||
return MakeGitError(ret)
|
return MakeGitError(ret)
|
||||||
|
|
16
revparse.go
16
revparse.go
|
@ -20,16 +20,16 @@ const (
|
||||||
)
|
)
|
||||||
|
|
||||||
type Revspec struct {
|
type Revspec struct {
|
||||||
to Object
|
to *Object
|
||||||
from Object
|
from *Object
|
||||||
flags RevparseFlag
|
flags RevparseFlag
|
||||||
}
|
}
|
||||||
|
|
||||||
func (rs *Revspec) To() Object {
|
func (rs *Revspec) To() *Object {
|
||||||
return rs.to
|
return rs.to
|
||||||
}
|
}
|
||||||
|
|
||||||
func (rs *Revspec) From() Object {
|
func (rs *Revspec) From() *Object {
|
||||||
return rs.from
|
return rs.from
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -38,8 +38,8 @@ func (rs *Revspec) Flags() RevparseFlag {
|
||||||
}
|
}
|
||||||
|
|
||||||
func newRevspecFromC(ptr *C.git_revspec, repo *Repository) *Revspec {
|
func newRevspecFromC(ptr *C.git_revspec, repo *Repository) *Revspec {
|
||||||
var to Object
|
var to *Object
|
||||||
var from Object
|
var from *Object
|
||||||
|
|
||||||
if ptr.to != nil {
|
if ptr.to != nil {
|
||||||
to = allocObject(ptr.to, repo)
|
to = allocObject(ptr.to, repo)
|
||||||
|
@ -73,7 +73,7 @@ func (r *Repository) Revparse(spec string) (*Revspec, error) {
|
||||||
return newRevspecFromC(&crevspec, r), nil
|
return newRevspecFromC(&crevspec, r), nil
|
||||||
}
|
}
|
||||||
|
|
||||||
func (v *Repository) RevparseSingle(spec string) (Object, error) {
|
func (v *Repository) RevparseSingle(spec string) (*Object, error) {
|
||||||
cspec := C.CString(spec)
|
cspec := C.CString(spec)
|
||||||
defer C.free(unsafe.Pointer(cspec))
|
defer C.free(unsafe.Pointer(cspec))
|
||||||
|
|
||||||
|
@ -90,7 +90,7 @@ func (v *Repository) RevparseSingle(spec string) (Object, error) {
|
||||||
return allocObject(ptr, v), nil
|
return allocObject(ptr, v), nil
|
||||||
}
|
}
|
||||||
|
|
||||||
func (r *Repository) RevparseExt(spec string) (Object, *Reference, error) {
|
func (r *Repository) RevparseExt(spec string) (*Object, *Reference, error) {
|
||||||
cspec := C.CString(spec)
|
cspec := C.CString(spec)
|
||||||
defer C.free(unsafe.Pointer(cspec))
|
defer C.free(unsafe.Pointer(cspec))
|
||||||
|
|
||||||
|
|
|
@ -46,7 +46,7 @@ func TestRevparseExt(t *testing.T) {
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
func checkObject(t *testing.T, obj Object, id *Oid) {
|
func checkObject(t *testing.T, obj *Object, id *Oid) {
|
||||||
if obj == nil {
|
if obj == nil {
|
||||||
t.Fatalf("bad object")
|
t.Fatalf("bad object")
|
||||||
}
|
}
|
||||||
|
|
8
tag.go
8
tag.go
|
@ -13,7 +13,7 @@ import (
|
||||||
|
|
||||||
// Tag
|
// Tag
|
||||||
type Tag struct {
|
type Tag struct {
|
||||||
gitObject
|
Object
|
||||||
cast_ptr *C.git_tag
|
cast_ptr *C.git_tag
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -30,7 +30,7 @@ func (t Tag) Tagger() *Signature {
|
||||||
return newSignatureFromC(cast_ptr)
|
return newSignatureFromC(cast_ptr)
|
||||||
}
|
}
|
||||||
|
|
||||||
func (t Tag) Target() Object {
|
func (t Tag) Target() *Object {
|
||||||
var ptr *C.git_object
|
var ptr *C.git_object
|
||||||
ret := C.git_tag_target(&ptr, t.cast_ptr)
|
ret := C.git_tag_target(&ptr, t.cast_ptr)
|
||||||
|
|
||||||
|
@ -70,7 +70,7 @@ func (c *TagsCollection) Create(
|
||||||
}
|
}
|
||||||
defer C.git_signature_free(taggerSig)
|
defer C.git_signature_free(taggerSig)
|
||||||
|
|
||||||
ctarget := commit.gitObject.ptr
|
ctarget := commit.ptr
|
||||||
|
|
||||||
runtime.LockOSThread()
|
runtime.LockOSThread()
|
||||||
defer runtime.UnlockOSThread()
|
defer runtime.UnlockOSThread()
|
||||||
|
@ -102,7 +102,7 @@ func (c *TagsCollection) CreateLightweight(name string, commit *Commit, force bo
|
||||||
cname := C.CString(name)
|
cname := C.CString(name)
|
||||||
defer C.free(unsafe.Pointer(cname))
|
defer C.free(unsafe.Pointer(cname))
|
||||||
|
|
||||||
ctarget := commit.gitObject.ptr
|
ctarget := commit.ptr
|
||||||
|
|
||||||
runtime.LockOSThread()
|
runtime.LockOSThread()
|
||||||
defer runtime.UnlockOSThread()
|
defer runtime.UnlockOSThread()
|
||||||
|
|
Loading…
Reference in New Issue