summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--clone.go9
-rw-r--r--credentials.go (renamed from transport.go)33
-rw-r--r--push.go3
-rw-r--r--remote.go52
-rw-r--r--wrapper.c5
5 files changed, 37 insertions, 65 deletions
diff --git a/clone.go b/clone.go
index 630c343..51dbd65 100644
--- a/clone.go
+++ b/clone.go
@@ -4,11 +4,6 @@ package git
#include <git2.h>
#include <git2/errors.h>
-static git_clone_options git_clone_options_init() {
- git_clone_options ret = GIT_CLONE_OPTIONS_INIT;
- return ret;
-}
-
*/
import "C"
import (
@@ -60,7 +55,9 @@ func Clone(url string, path string, options *CloneOptions) (*Repository, error)
}
func populateCloneOptions(ptr *C.git_clone_options, opts *CloneOptions) {
- *ptr = C.git_clone_options_init()
+ ptr = &C.git_clone_options{}
+ C.git_clone_init_options(ptr, 1)
+
if opts == nil {
return
}
diff --git a/transport.go b/credentials.go
index e97a70c..c5ed055 100644
--- a/transport.go
+++ b/credentials.go
@@ -8,39 +8,35 @@ import "C"
import "unsafe"
type CredType uint
+
const (
CredTypeUserpassPlaintext CredType = C.GIT_CREDTYPE_USERPASS_PLAINTEXT
- CredTypeSshKey = C.GIT_CREDTYPE_SSH_KEY
- CredTypeSshCustom = C.GIT_CREDTYPE_SSH_CUSTOM
- CredTypeDefault = C.GIT_CREDTYPE_DEFAULT
+ CredTypeSshKey = C.GIT_CREDTYPE_SSH_KEY
+ CredTypeSshCustom = C.GIT_CREDTYPE_SSH_CUSTOM
+ CredTypeDefault = C.GIT_CREDTYPE_DEFAULT
)
-type Cred interface {
- HasUsername() bool
- Type() CredType
-}
-
-type gitCred struct {
+type Cred struct {
ptr *C.git_cred
}
-func (o gitCred) HasUsername() bool {
+func (o *Cred) HasUsername() bool {
if C.git_cred_has_username(o.ptr) == 1 {
return true
}
return false
}
-func (o gitCred) Type() CredType {
- return (CredType)(o.ptr.credtype);
+func (o *Cred) Type() CredType {
+ return (CredType)(o.ptr.credtype)
}
-func credFromC(ptr *C.git_cred) Cred {
- return gitCred{ptr}
+func credFromC(ptr *C.git_cred) *Cred {
+ return &Cred{ptr}
}
func NewCredUserpassPlaintext(username string, password string) (int, Cred) {
- cred := gitCred{}
+ cred := Cred{}
cusername := C.CString(username)
defer C.free(unsafe.Pointer(cusername))
cpassword := C.CString(password)
@@ -50,7 +46,7 @@ func NewCredUserpassPlaintext(username string, password string) (int, Cred) {
}
func NewCredSshKey(username string, publickey string, privatekey string, passphrase string) (int, Cred) {
- cred := gitCred{}
+ cred := Cred{}
cusername := C.CString(username)
defer C.free(unsafe.Pointer(cusername))
cpublickey := C.CString(publickey)
@@ -64,7 +60,7 @@ func NewCredSshKey(username string, publickey string, privatekey string, passphr
}
func NewCredSshKeyFromAgent(username string) (int, Cred) {
- cred := gitCred{}
+ cred := Cred{}
cusername := C.CString(username)
defer C.free(unsafe.Pointer(cusername))
ret := C.git_cred_ssh_key_from_agent(&cred.ptr, cusername)
@@ -72,8 +68,7 @@ func NewCredSshKeyFromAgent(username string) (int, Cred) {
}
func NewCredDefault() (int, Cred) {
- cred := gitCred{}
+ cred := Cred{}
ret := C.git_cred_default_new(&cred.ptr)
return int(ret), cred
}
-
diff --git a/push.go b/push.go
index d1742e3..8b205c7 100644
--- a/push.go
+++ b/push.go
@@ -59,9 +59,6 @@ func (p *Push) Finish() error {
func (p *Push) UnpackOk() bool {
- runtime.LockOSThread()
- defer runtime.UnlockOSThread()
-
ret := C.git_push_unpack_ok(p.ptr)
if ret == 0 {
return false
diff --git a/remote.go b/remote.go
index 900a314..3621b5f 100644
--- a/remote.go
+++ b/remote.go
@@ -5,7 +5,6 @@ package git
#include <git2/errors.h>
extern void _go_git_setup_callbacks(git_remote_callbacks *callbacks);
-extern git_remote_callbacks _go_git_remote_callbacks_init();
extern void _go_git_set_strarray_n(git_strarray *array, char *str, size_t n);
extern char *_go_git_get_strarray_n(git_strarray *array, size_t n);
@@ -15,7 +14,22 @@ import "unsafe"
import "runtime"
type TransferProgress struct {
- ptr *C.git_transfer_progress
+ TotalObjects uint
+ IndexedObjects uint
+ ReceivedObjects uint
+ LocalObjects uint
+ TotalDeltas uint
+ ReceivedBytes uint
+}
+
+func newTransferProgressFromC(c *C.git_transfer_progress) TransferProgress {
+ return TransferProgress{
+ TotalObjects: uint(c.total_objects),
+ IndexedObjects: uint(c.indexed_objects),
+ ReceivedObjects: uint(c.received_objects),
+ LocalObjects: uint(c.local_objects),
+ TotalDeltas: uint(c.total_deltas),
+ ReceivedBytes: uint(c.received_bytes)}
}
type RemoteCompletion uint
@@ -28,7 +42,7 @@ const (
type ProgressCallback func(str string) int
type CompletionCallback func(RemoteCompletion) int
-type CredentialsCallback func(url string, username_from_url string, allowed_types CredType) (int, Cred)
+type CredentialsCallback func(url string, username_from_url string, allowed_types CredType) (int, *Cred)
type TransferProgressCallback func(stats TransferProgress) int
type UpdateTipsCallback func(refname string, a *Oid, b *Oid) int
@@ -45,7 +59,7 @@ type Remote struct {
}
func populateRemoteCallbacks(ptr *C.git_remote_callbacks, callbacks *RemoteCallbacks) {
- *ptr = C._go_git_remote_callbacks_init()
+ C.git_remote_init_callbacks(ptr, C.GIT_REMOTE_CALLBACKS_VERSION)
if callbacks == nil {
return
}
@@ -81,9 +95,7 @@ func credentialsCallback(_cred **C.git_cred, _url *C.char, _username_from_url *C
url := C.GoString(_url)
username_from_url := C.GoString(_username_from_url)
ret, cred := callbacks.CredentialsCallback(url, username_from_url, (CredType)(allowed_types))
- if gcred, ok := cred.(gitCred); ok {
- *_cred = gcred.ptr
- }
+ *_cred = cred.ptr
return ret
}
@@ -93,7 +105,7 @@ func transferProgressCallback(stats *C.git_transfer_progress, data unsafe.Pointe
if callbacks.TransferProgressCallback == nil {
return 0
}
- return callbacks.TransferProgressCallback(TransferProgress{stats})
+ return callbacks.TransferProgressCallback(newTransferProgressFromC(stats))
}
//export updateTipsCallback
@@ -108,30 +120,6 @@ func updateTipsCallback(_refname *C.char, _a *C.git_oid, _b *C.git_oid, data uns
return callbacks.UpdateTipsCallback(refname, a, b)
}
-func (o TransferProgress) TotalObjects() uint {
- return uint(o.ptr.total_objects)
-}
-
-func (o TransferProgress) IndexedObjects() uint {
- return uint(o.ptr.indexed_objects)
-}
-
-func (o TransferProgress) ReceivedObjects() uint {
- return uint(o.ptr.received_objects)
-}
-
-func (o TransferProgress) LocalObjects() uint {
- return uint(o.ptr.local_objects)
-}
-
-func (o TransferProgress) TotalDeltas() uint {
- return uint(o.ptr.total_deltas)
-}
-
-func (o TransferProgress) ReceivedBytes() uint {
- return uint(o.ptr.received_bytes)
-}
-
func RemoteIsValidName(name string) bool {
cname := C.CString(name)
defer C.free(unsafe.Pointer(cname))
diff --git a/wrapper.c b/wrapper.c
index 8e337df..bc69cd5 100644
--- a/wrapper.c
+++ b/wrapper.c
@@ -38,11 +38,6 @@ void _go_git_setup_callbacks(git_remote_callbacks *callbacks) {
callbacks->update_tips = (update_tips_cb)updateTipsCallback;
}
-git_remote_callbacks _go_git_remote_callbacks_init() {
- git_remote_callbacks ret = GIT_REMOTE_CALLBACKS_INIT;
- return ret;
-}
-
void _go_git_set_strarray_n(git_strarray *array, char *str, size_t n) {
array->strings[n] = str;
}