remote: new _ls

This commit is contained in:
Carlos Martín Nieto 2013-11-14 01:04:06 +01:00
parent 09f2361ba6
commit 82b24a762c
2 changed files with 19 additions and 10 deletions

View File

@ -5,11 +5,11 @@ package git
#include <git2.h>
#include <git2/errors.h>
extern int _go_git_remote_ls(git_remote *remote, void *payload);
extern int _go_git_remote_set_callbacks(git_remote *remote, void *payload);
*/
import "C"
import (
"reflect"
"runtime"
"unsafe"
)
@ -90,14 +90,29 @@ func (r *Remote) Save() error {
}
func (r *Remote) Ls() ([]*RemoteHead, error) {
var data headlistData
runtime.LockOSThread()
defer runtime.UnlockOSThread()
ret := C._go_git_remote_ls(r.ptr, unsafe.Pointer(&data))
var cheads **C.git_remote_head
var slice []*C.git_remote_head
var csize C.size_t
ret := C.git_remote_ls(&cheads, &csize, r.ptr)
if ret < 0 {
return nil, LastError()
}
return data.slice, nil
sliceHeader := (*reflect.SliceHeader)((unsafe.Pointer(&slice)))
sliceHeader.Cap = int(csize)
sliceHeader.Len = int(csize)
sliceHeader.Data = uintptr(unsafe.Pointer(cheads))
heads := make([]*RemoteHead, csize)
for i, h := range slice {
heads[i] = newRemoteHeadFromC(h)
}
return heads, nil
}
func (r *Remote) Download() error {
@ -155,7 +170,6 @@ type headlistData struct {
slice []*RemoteHead
}
//export remoteHeadlistCb
func remoteHeadlistCb(rhead *C.git_remote_head, dataptr unsafe.Pointer) int {
data := (*headlistData)(dataptr)

View File

@ -26,11 +26,6 @@ int _go_git_odb_foreach(git_odb *db, void *payload)
return git_odb_foreach(db, (git_odb_foreach_cb)&odbForEachCb, payload);
}
int _go_git_remote_ls(git_remote *remote, void *payload)
{
return git_remote_ls(remote, (git_headlist_cb) remoteHeadlistCb, payload);
}
int _go_git_remote_set_callbacks(git_remote *remote, void *payload)
{
git_remote_callbacks cbs = GIT_REMOTE_CALLBACKS_INIT;