Merge remote-tracking branch 'upstream/master' into next
Conflicts: branch.go
This commit is contained in:
commit
e50203a253
|
@ -92,18 +92,18 @@ func (repo *Repository) NewBranchIterator(flags BranchType) (*BranchIterator, er
|
||||||
|
|
||||||
func (repo *Repository) CreateBranch(branchName string, target *Commit, force bool) (*Branch, error) {
|
func (repo *Repository) CreateBranch(branchName string, target *Commit, force bool) (*Branch, error) {
|
||||||
|
|
||||||
ref := new(Reference)
|
var ptr *C.git_reference
|
||||||
cBranchName := C.CString(branchName)
|
cBranchName := C.CString(branchName)
|
||||||
cForce := cbool(force)
|
cForce := cbool(force)
|
||||||
|
|
||||||
runtime.LockOSThread()
|
runtime.LockOSThread()
|
||||||
defer runtime.UnlockOSThread()
|
defer runtime.UnlockOSThread()
|
||||||
|
|
||||||
ret := C.git_branch_create(&ref.ptr, repo.ptr, cBranchName, target.cast_ptr, cForce)
|
ret := C.git_branch_create(&ptr, repo.ptr, cBranchName, target.cast_ptr, cForce)
|
||||||
if ret < 0 {
|
if ret < 0 {
|
||||||
return nil, MakeGitError(ret)
|
return nil, MakeGitError(ret)
|
||||||
}
|
}
|
||||||
return ref.Branch(), nil
|
return newReferenceFromC(ptr, repo).Branch(), nil
|
||||||
}
|
}
|
||||||
|
|
||||||
func (b *Branch) Delete() error {
|
func (b *Branch) Delete() error {
|
||||||
|
|
12
clone.go
12
clone.go
|
@ -28,18 +28,20 @@ func Clone(url string, path string, options *CloneOptions) (*Repository, error)
|
||||||
cpath := C.CString(path)
|
cpath := C.CString(path)
|
||||||
defer C.free(unsafe.Pointer(cpath))
|
defer C.free(unsafe.Pointer(cpath))
|
||||||
|
|
||||||
var copts C.git_clone_options
|
copts := (*C.git_clone_options)(C.calloc(1, C.size_t(unsafe.Sizeof(C.git_clone_options{}))))
|
||||||
populateCloneOptions(&copts, options)
|
populateCloneOptions(copts, options)
|
||||||
defer freeCheckoutOpts(&copts.checkout_opts)
|
|
||||||
|
|
||||||
if len(options.CheckoutBranch) != 0 {
|
if len(options.CheckoutBranch) != 0 {
|
||||||
copts.checkout_branch = C.CString(options.CheckoutBranch)
|
copts.checkout_branch = C.CString(options.CheckoutBranch)
|
||||||
defer C.free(unsafe.Pointer(copts.checkout_branch))
|
|
||||||
}
|
}
|
||||||
|
|
||||||
runtime.LockOSThread()
|
runtime.LockOSThread()
|
||||||
defer runtime.UnlockOSThread()
|
defer runtime.UnlockOSThread()
|
||||||
ret := C.git_clone(&repo.ptr, curl, cpath, &copts)
|
ret := C.git_clone(&repo.ptr, curl, cpath, copts)
|
||||||
|
freeCheckoutOpts(&copts.checkout_opts)
|
||||||
|
C.free(unsafe.Pointer(copts.checkout_branch))
|
||||||
|
C.free(unsafe.Pointer(copts))
|
||||||
|
|
||||||
if ret < 0 {
|
if ret < 0 {
|
||||||
return nil, MakeGitError(ret)
|
return nil, MakeGitError(ret)
|
||||||
}
|
}
|
||||||
|
|
2
git.go
2
git.go
|
@ -86,6 +86,8 @@ const (
|
||||||
ErrPassthrough ErrorCode = C.GIT_PASSTHROUGH
|
ErrPassthrough ErrorCode = C.GIT_PASSTHROUGH
|
||||||
// Signals end of iteration with iterator
|
// Signals end of iteration with iterator
|
||||||
ErrIterOver ErrorCode = C.GIT_ITEROVER
|
ErrIterOver ErrorCode = C.GIT_ITEROVER
|
||||||
|
// Authentication failed
|
||||||
|
ErrAuth ErrorCode = C.GIT_EAUTH
|
||||||
)
|
)
|
||||||
|
|
||||||
var (
|
var (
|
||||||
|
|
28
remote.go
28
remote.go
|
@ -168,18 +168,24 @@ func newRemoteHeadFromC(ptr *C.git_remote_head) RemoteHead {
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
func untrackCalbacksPayload(callbacks *C.git_remote_callbacks) {
|
||||||
|
if callbacks != nil && callbacks.payload != nil {
|
||||||
|
pointerHandles.Untrack(callbacks.payload)
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
func populateRemoteCallbacks(ptr *C.git_remote_callbacks, callbacks *RemoteCallbacks) {
|
func populateRemoteCallbacks(ptr *C.git_remote_callbacks, callbacks *RemoteCallbacks) {
|
||||||
C.git_remote_init_callbacks(ptr, C.GIT_REMOTE_CALLBACKS_VERSION)
|
C.git_remote_init_callbacks(ptr, C.GIT_REMOTE_CALLBACKS_VERSION)
|
||||||
if callbacks == nil {
|
if callbacks == nil {
|
||||||
return
|
return
|
||||||
}
|
}
|
||||||
C._go_git_setup_callbacks(ptr)
|
C._go_git_setup_callbacks(ptr)
|
||||||
ptr.payload = unsafe.Pointer(callbacks)
|
ptr.payload = pointerHandles.Track(callbacks)
|
||||||
}
|
}
|
||||||
|
|
||||||
//export sidebandProgressCallback
|
//export sidebandProgressCallback
|
||||||
func sidebandProgressCallback(_str *C.char, _len C.int, data unsafe.Pointer) int {
|
func sidebandProgressCallback(_str *C.char, _len C.int, data unsafe.Pointer) int {
|
||||||
callbacks := (*RemoteCallbacks)(data)
|
callbacks := pointerHandles.Get(data).(*RemoteCallbacks)
|
||||||
if callbacks.SidebandProgressCallback == nil {
|
if callbacks.SidebandProgressCallback == nil {
|
||||||
return 0
|
return 0
|
||||||
}
|
}
|
||||||
|
@ -189,7 +195,7 @@ func sidebandProgressCallback(_str *C.char, _len C.int, data unsafe.Pointer) int
|
||||||
|
|
||||||
//export completionCallback
|
//export completionCallback
|
||||||
func completionCallback(completion_type C.git_remote_completion_type, data unsafe.Pointer) int {
|
func completionCallback(completion_type C.git_remote_completion_type, data unsafe.Pointer) int {
|
||||||
callbacks := (*RemoteCallbacks)(data)
|
callbacks := pointerHandles.Get(data).(*RemoteCallbacks)
|
||||||
if callbacks.CompletionCallback == nil {
|
if callbacks.CompletionCallback == nil {
|
||||||
return 0
|
return 0
|
||||||
}
|
}
|
||||||
|
@ -198,7 +204,7 @@ func completionCallback(completion_type C.git_remote_completion_type, data unsaf
|
||||||
|
|
||||||
//export credentialsCallback
|
//export credentialsCallback
|
||||||
func credentialsCallback(_cred **C.git_cred, _url *C.char, _username_from_url *C.char, allowed_types uint, data unsafe.Pointer) int {
|
func credentialsCallback(_cred **C.git_cred, _url *C.char, _username_from_url *C.char, allowed_types uint, data unsafe.Pointer) int {
|
||||||
callbacks := (*RemoteCallbacks)(data)
|
callbacks, _ := pointerHandles.Get(data).(*RemoteCallbacks)
|
||||||
if callbacks.CredentialsCallback == nil {
|
if callbacks.CredentialsCallback == nil {
|
||||||
return 0
|
return 0
|
||||||
}
|
}
|
||||||
|
@ -211,7 +217,7 @@ func credentialsCallback(_cred **C.git_cred, _url *C.char, _username_from_url *C
|
||||||
|
|
||||||
//export transferProgressCallback
|
//export transferProgressCallback
|
||||||
func transferProgressCallback(stats *C.git_transfer_progress, data unsafe.Pointer) int {
|
func transferProgressCallback(stats *C.git_transfer_progress, data unsafe.Pointer) int {
|
||||||
callbacks := (*RemoteCallbacks)(data)
|
callbacks, _ := pointerHandles.Get(data).(*RemoteCallbacks)
|
||||||
if callbacks.TransferProgressCallback == nil {
|
if callbacks.TransferProgressCallback == nil {
|
||||||
return 0
|
return 0
|
||||||
}
|
}
|
||||||
|
@ -220,7 +226,7 @@ func transferProgressCallback(stats *C.git_transfer_progress, data unsafe.Pointe
|
||||||
|
|
||||||
//export updateTipsCallback
|
//export updateTipsCallback
|
||||||
func updateTipsCallback(_refname *C.char, _a *C.git_oid, _b *C.git_oid, data unsafe.Pointer) int {
|
func updateTipsCallback(_refname *C.char, _a *C.git_oid, _b *C.git_oid, data unsafe.Pointer) int {
|
||||||
callbacks := (*RemoteCallbacks)(data)
|
callbacks, _ := pointerHandles.Get(data).(*RemoteCallbacks)
|
||||||
if callbacks.UpdateTipsCallback == nil {
|
if callbacks.UpdateTipsCallback == nil {
|
||||||
return 0
|
return 0
|
||||||
}
|
}
|
||||||
|
@ -232,7 +238,7 @@ func updateTipsCallback(_refname *C.char, _a *C.git_oid, _b *C.git_oid, data uns
|
||||||
|
|
||||||
//export certificateCheckCallback
|
//export certificateCheckCallback
|
||||||
func certificateCheckCallback(_cert *C.git_cert, _valid C.int, _host *C.char, data unsafe.Pointer) int {
|
func certificateCheckCallback(_cert *C.git_cert, _valid C.int, _host *C.char, data unsafe.Pointer) int {
|
||||||
callbacks := (*RemoteCallbacks)(data)
|
callbacks, _ := pointerHandles.Get(data).(*RemoteCallbacks)
|
||||||
// if there's no callback set, we need to make sure we fail if the library didn't consider this cert valid
|
// if there's no callback set, we need to make sure we fail if the library didn't consider this cert valid
|
||||||
if callbacks.CertificateCheckCallback == nil {
|
if callbacks.CertificateCheckCallback == nil {
|
||||||
if _valid == 1 {
|
if _valid == 1 {
|
||||||
|
@ -273,7 +279,7 @@ func certificateCheckCallback(_cert *C.git_cert, _valid C.int, _host *C.char, da
|
||||||
|
|
||||||
//export packProgressCallback
|
//export packProgressCallback
|
||||||
func packProgressCallback(stage C.int, current, total C.uint, data unsafe.Pointer) int {
|
func packProgressCallback(stage C.int, current, total C.uint, data unsafe.Pointer) int {
|
||||||
callbacks := (*RemoteCallbacks)(data)
|
callbacks, _ := pointerHandles.Get(data).(*RemoteCallbacks)
|
||||||
|
|
||||||
if callbacks.PackProgressCallback == nil {
|
if callbacks.PackProgressCallback == nil {
|
||||||
return 0
|
return 0
|
||||||
|
@ -284,7 +290,7 @@ func packProgressCallback(stage C.int, current, total C.uint, data unsafe.Pointe
|
||||||
|
|
||||||
//export pushTransferProgressCallback
|
//export pushTransferProgressCallback
|
||||||
func pushTransferProgressCallback(current, total C.uint, bytes C.size_t, data unsafe.Pointer) int {
|
func pushTransferProgressCallback(current, total C.uint, bytes C.size_t, data unsafe.Pointer) int {
|
||||||
callbacks := (*RemoteCallbacks)(data)
|
callbacks, _ := pointerHandles.Get(data).(*RemoteCallbacks)
|
||||||
if callbacks.PushTransferProgressCallback == nil {
|
if callbacks.PushTransferProgressCallback == nil {
|
||||||
return 0
|
return 0
|
||||||
}
|
}
|
||||||
|
@ -294,7 +300,7 @@ func pushTransferProgressCallback(current, total C.uint, bytes C.size_t, data un
|
||||||
|
|
||||||
//export pushUpdateReferenceCallback
|
//export pushUpdateReferenceCallback
|
||||||
func pushUpdateReferenceCallback(refname, status *C.char, data unsafe.Pointer) int {
|
func pushUpdateReferenceCallback(refname, status *C.char, data unsafe.Pointer) int {
|
||||||
callbacks := (*RemoteCallbacks)(data)
|
callbacks, _ := pointerHandles.Get(data).(*RemoteCallbacks)
|
||||||
|
|
||||||
if callbacks.PushUpdateReferenceCallback == nil {
|
if callbacks.PushUpdateReferenceCallback == nil {
|
||||||
return 0
|
return 0
|
||||||
|
@ -604,6 +610,7 @@ func (o *Remote) Fetch(refspecs []string, opts *FetchOptions, msg string) error
|
||||||
|
|
||||||
var coptions C.git_fetch_options
|
var coptions C.git_fetch_options
|
||||||
populateFetchOptions(&coptions, opts);
|
populateFetchOptions(&coptions, opts);
|
||||||
|
defer untrackCalbacksPayload(&coptions.callbacks)
|
||||||
|
|
||||||
runtime.LockOSThread()
|
runtime.LockOSThread()
|
||||||
defer runtime.UnlockOSThread()
|
defer runtime.UnlockOSThread()
|
||||||
|
@ -696,6 +703,7 @@ func (o *Remote) Push(refspecs []string, opts *PushOptions) error {
|
||||||
|
|
||||||
runtime.LockOSThread()
|
runtime.LockOSThread()
|
||||||
defer runtime.UnlockOSThread()
|
defer runtime.UnlockOSThread()
|
||||||
|
defer untrackCalbacksPayload(&copts.callbacks)
|
||||||
|
|
||||||
ret := C.git_remote_push(o.ptr, &crefspecs, &copts)
|
ret := C.git_remote_push(o.ptr, &crefspecs, &copts)
|
||||||
if ret < 0 {
|
if ret < 0 {
|
||||||
|
|
Loading…
Reference in New Issue