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
@@ -76,3 +77,17 @@ func TestCloneWithCallback(t *testing.T) {
7677 }
7778 defer remote .Free ()
7879}
80+
81+ // TestCloneWithExternalHTTPUrl
82+ func TestCloneWithExternalHTTPUrl (t * testing.T ) {
83+
84+ path , err := ioutil .TempDir ("" , "git2go" )
85+ defer os .RemoveAll (path )
86+
87+ // clone the repo
88+ url := "https://github.com/libgit2/TestGitRepository"
89+ _ , err = Clone (url , path , & CloneOptions {})
90+ if err != nil {
91+ t .Fatal ("cannot clone remote repo via https, error: " , err )
92+ }
93+ }
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 {
@@ -592,6 +595,9 @@ func (r *Remote) free() {
592595// Free releases the resources of the Remote.
593596func (r * Remote ) Free () {
594597 r .repo .Remotes .untrackRemote (r )
598+ if r .weak {
599+ return
600+ }
595601 r .free ()
596602}
597603
@@ -1221,3 +1227,12 @@ func freeRemoteCreateOptions(ptr *C.git_remote_create_options) {
12211227 C .free (unsafe .Pointer (ptr .name ))
12221228 C .free (unsafe .Pointer (ptr .fetchspec ))
12231229}
1230+
1231+ // createNewEmptyRemote used to get a new empty object of *Remote
1232+ func createNewEmptyRemote () * Remote {
1233+ return & Remote {
1234+ callbacks : RemoteCallbacks {},
1235+ repo : nil ,
1236+ weak : false ,
1237+ }
1238+ }
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"
@@ -296,8 +295,10 @@ func smartTransportCallback(
296295 registeredSmartTransport := pointerHandles .Get (handle ).(* RegisteredSmartTransport )
297296 remote , ok := remotePointers .get (owner )
298297 if ! ok {
299- err := errors .New ("remote pointer not found" )
300- return setCallbackError (errorMessage , err )
298+ // create a new empty remote and set it
299+ // as a weak pointer, so that control stays in golang
300+ remote = createNewEmptyRemote ()
301+ remote .weak = true
301302 }
302303
303304 managed := & managedSmartSubtransport {
You can’t perform that action at this time.
0 commit comments