remote: new _ls
This commit is contained in:
parent
09f2361ba6
commit
82b24a762c
24
remote.go
24
remote.go
|
@ -5,11 +5,11 @@ package git
|
||||||
#include <git2.h>
|
#include <git2.h>
|
||||||
#include <git2/errors.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);
|
extern int _go_git_remote_set_callbacks(git_remote *remote, void *payload);
|
||||||
*/
|
*/
|
||||||
import "C"
|
import "C"
|
||||||
import (
|
import (
|
||||||
|
"reflect"
|
||||||
"runtime"
|
"runtime"
|
||||||
"unsafe"
|
"unsafe"
|
||||||
)
|
)
|
||||||
|
@ -90,14 +90,29 @@ func (r *Remote) Save() error {
|
||||||
}
|
}
|
||||||
|
|
||||||
func (r *Remote) Ls() ([]*RemoteHead, 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 {
|
if ret < 0 {
|
||||||
return nil, LastError()
|
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 {
|
func (r *Remote) Download() error {
|
||||||
|
@ -155,7 +170,6 @@ type headlistData struct {
|
||||||
slice []*RemoteHead
|
slice []*RemoteHead
|
||||||
}
|
}
|
||||||
|
|
||||||
//export remoteHeadlistCb
|
|
||||||
func remoteHeadlistCb(rhead *C.git_remote_head, dataptr unsafe.Pointer) int {
|
func remoteHeadlistCb(rhead *C.git_remote_head, dataptr unsafe.Pointer) int {
|
||||||
data := (*headlistData)(dataptr)
|
data := (*headlistData)(dataptr)
|
||||||
|
|
||||||
|
|
|
@ -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);
|
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)
|
int _go_git_remote_set_callbacks(git_remote *remote, void *payload)
|
||||||
{
|
{
|
||||||
git_remote_callbacks cbs = GIT_REMOTE_CALLBACKS_INIT;
|
git_remote_callbacks cbs = GIT_REMOTE_CALLBACKS_INIT;
|
||||||
|
|
Loading…
Reference in New Issue