File tree Expand file tree Collapse file tree 3 files changed +34
-3
lines changed Expand file tree Collapse file tree 3 files changed +34
-3
lines changed Original file line number Diff line number Diff line change @@ -2,6 +2,7 @@ package git
22
33import (
44 "io/ioutil"
5+ "os"
56 "testing"
67)
78
@@ -70,3 +71,17 @@ func TestCloneWithCallback(t *testing.T) {
7071 }
7172 defer remote .Free ()
7273}
74+
75+ // TestCloneWithExternalHTTPUrl
76+ func TestCloneWithExternalHTTPUrl (t * testing.T ) {
77+
78+ path , err := ioutil .TempDir ("" , "git2go" )
79+ defer os .RemoveAll (path )
80+
81+ // clone the repo
82+ url := "https://github.com/libgit2/TestGitRepository"
83+ _ , err = Clone (url , path , & CloneOptions {})
84+ if err != nil {
85+ t .Fatal ("cannot clone remote repo via https, error: " , err )
86+ }
87+ }
Original file line number Diff line number Diff line change @@ -182,6 +182,9 @@ type Remote struct {
182182 ptr * C.git_remote
183183 callbacks RemoteCallbacks
184184 repo * Repository
185+ // weak indicates that a remote is a weak pointer and should not be
186+ // freed.
187+ weak bool
185188}
186189
187190type remotePointerList struct {
@@ -602,6 +605,9 @@ func (r *Remote) free() {
602605// Free releases the resources of the Remote.
603606func (r * Remote ) Free () {
604607 r .repo .Remotes .untrackRemote (r )
608+ if r .weak {
609+ return
610+ }
605611 r .free ()
606612}
607613
@@ -1231,3 +1237,12 @@ func freeRemoteCreateOptions(ptr *C.git_remote_create_options) {
12311237 C .free (unsafe .Pointer (ptr .name ))
12321238 C .free (unsafe .Pointer (ptr .fetchspec ))
12331239}
1240+
1241+ // createNewEmptyRemote used to get a new empty object of *Remote
1242+ func createNewEmptyRemote () * Remote {
1243+ return & Remote {
1244+ callbacks : RemoteCallbacks {},
1245+ repo : nil ,
1246+ weak : false ,
1247+ }
1248+ }
Original file line number Diff line number Diff line change @@ -22,7 +22,6 @@ void _go_git_setup_smart_subtransport_stream(_go_managed_smart_subtransport_stre
2222*/
2323import "C"
2424import (
25- "errors"
2625 "fmt"
2726 "io"
2827 "reflect"
@@ -306,8 +305,10 @@ func smartTransportCallback(
306305 registeredSmartTransport := pointerHandles .Get (handle ).(* RegisteredSmartTransport )
307306 remote , ok := remotePointers .get (owner )
308307 if ! ok {
309- err := errors .New ("remote pointer not found" )
310- return setCallbackError (errorMessage , err )
308+ // create a new empty remote and set it
309+ // as a weak pointer, so that control stays in golang
310+ remote = createNewEmptyRemote ()
311+ remote .weak = true
311312 }
312313
313314 managed := & managedSmartSubtransport {
You can’t perform that action at this time.
0 commit comments