From 393098522c3f01b1cd765581c4d4e6d43f3a02d0 Mon Sep 17 00:00:00 2001 From: Mirko Nosenzo Date: Sun, 29 May 2016 14:44:29 +0200 Subject: [PATCH 1/3] Remote Refinements - Fixed credentialsCallback return value for missing callback - Added Remote Rename - Added Remote Disconnect --- remote.go | 28 +++++++++++++++++++++++++++- 1 file changed, 27 insertions(+), 1 deletion(-) diff --git a/remote.go b/remote.go index 8a57280..d063c17 100644 --- a/remote.go +++ b/remote.go @@ -215,7 +215,7 @@ func completionCallback(completion_type C.git_remote_completion_type, data unsaf func credentialsCallback(_cred **C.git_cred, _url *C.char, _username_from_url *C.char, allowed_types uint, data unsafe.Pointer) int { callbacks, _ := pointerHandles.Get(data).(*RemoteCallbacks) if callbacks.CredentialsCallback == nil { - return 0 + return C.GIT_PASSTHROUGH } url := C.GoString(_url) username_from_url := C.GoString(_username_from_url) @@ -454,6 +454,25 @@ func (o *Remote) PushUrl() string { return C.GoString(C.git_remote_pushurl(o.ptr)) } +func (c *RemoteCollection) Rename(remote, newname string) error { + cproblems := C.git_strarray{} + + cnewname := C.CString(newname) + defer C.free(unsafe.Pointer(cnewname)) + cremote := C.CString(remote) + defer C.free(unsafe.Pointer(cremote)) + + runtime.LockOSThread() + defer runtime.UnlockOSThread() + + ret := C.git_remote_rename(&cproblems, c.repo.ptr, cremote, cnewname) + if ret < 0 { + return MakeGitError(ret) + } + C.git_strarray_free(&cproblems) + return nil +} + func (c *RemoteCollection) SetUrl(remote, url string) error { curl := C.CString(url) defer C.free(unsafe.Pointer(curl)) @@ -687,6 +706,13 @@ func (o *Remote) Connect(direction ConnectDirection, callbacks *RemoteCallbacks, return nil } +func (o *Remote) Disconnect() { + runtime.LockOSThread() + defer runtime.UnlockOSThread() + + C.git_remote_disconnect(o.ptr) +} + func (o *Remote) Ls(filterRefs ...string) ([]RemoteHead, error) { var refs **C.git_remote_head From c6b94a160eef7546fa61e9e06f50f272d68bab8c Mon Sep 17 00:00:00 2001 From: Mirko Nosenzo Date: Thu, 7 Jul 2016 11:59:37 +0200 Subject: [PATCH 2/3] Returning Problems on Remote Rename Problems can be returned as string array on RemoteCollection Rename --- remote.go | 10 +++++----- 1 file changed, 5 insertions(+), 5 deletions(-) diff --git a/remote.go b/remote.go index d063c17..cfe6e86 100644 --- a/remote.go +++ b/remote.go @@ -454,9 +454,9 @@ func (o *Remote) PushUrl() string { return C.GoString(C.git_remote_pushurl(o.ptr)) } -func (c *RemoteCollection) Rename(remote, newname string) error { +func (c *RemoteCollection) Rename(remote, newname string) ([]string, error) { cproblems := C.git_strarray{} - + defer freeStrarray(&cproblems) cnewname := C.CString(newname) defer C.free(unsafe.Pointer(cnewname)) cremote := C.CString(remote) @@ -467,10 +467,10 @@ func (c *RemoteCollection) Rename(remote, newname string) error { ret := C.git_remote_rename(&cproblems, c.repo.ptr, cremote, cnewname) if ret < 0 { - return MakeGitError(ret) + problems := makeStringsFromCStrings(cproblems.strings, int(cproblems.count)) + return problems, MakeGitError(ret) } - C.git_strarray_free(&cproblems) - return nil + return []string{}, nil } func (c *RemoteCollection) SetUrl(remote, url string) error { From 717a47f7547811622fb1c08c28262a8c63af96fe Mon Sep 17 00:00:00 2001 From: Mirko Nosenzo Date: Sat, 8 Oct 2016 11:15:47 +0200 Subject: [PATCH 3/3] Remote Rename Fix Problem string array is returned if no error is occurred --- remote.go | 7 ++++--- 1 file changed, 4 insertions(+), 3 deletions(-) diff --git a/remote.go b/remote.go index cfe6e86..c537932 100644 --- a/remote.go +++ b/remote.go @@ -467,10 +467,11 @@ func (c *RemoteCollection) Rename(remote, newname string) ([]string, error) { ret := C.git_remote_rename(&cproblems, c.repo.ptr, cremote, cnewname) if ret < 0 { - problems := makeStringsFromCStrings(cproblems.strings, int(cproblems.count)) - return problems, MakeGitError(ret) + return []string{}, MakeGitError(ret) } - return []string{}, nil + + problems := makeStringsFromCStrings(cproblems.strings, int(cproblems.count)) + return problems, nil } func (c *RemoteCollection) SetUrl(remote, url string) error {