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
2
2
3
3
import (
4
4
"io/ioutil"
5
+ "os"
5
6
"testing"
6
7
)
7
8
@@ -70,3 +71,17 @@ func TestCloneWithCallback(t *testing.T) {
70
71
}
71
72
defer remote .Free ()
72
73
}
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 {
182
182
ptr * C.git_remote
183
183
callbacks RemoteCallbacks
184
184
repo * Repository
185
+ // weak indicates that a remote is a weak pointer and should not be
186
+ // freed.
187
+ weak bool
185
188
}
186
189
187
190
type remotePointerList struct {
@@ -602,6 +605,9 @@ func (r *Remote) free() {
602
605
// Free releases the resources of the Remote.
603
606
func (r * Remote ) Free () {
604
607
r .repo .Remotes .untrackRemote (r )
608
+ if r .weak {
609
+ return
610
+ }
605
611
r .free ()
606
612
}
607
613
@@ -1231,3 +1237,12 @@ func freeRemoteCreateOptions(ptr *C.git_remote_create_options) {
1231
1237
C .free (unsafe .Pointer (ptr .name ))
1232
1238
C .free (unsafe .Pointer (ptr .fetchspec ))
1233
1239
}
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
22
22
*/
23
23
import "C"
24
24
import (
25
- "errors"
26
25
"fmt"
27
26
"io"
28
27
"reflect"
@@ -306,8 +305,10 @@ func smartTransportCallback(
306
305
registeredSmartTransport := pointerHandles .Get (handle ).(* RegisteredSmartTransport )
307
306
remote , ok := remotePointers .get (owner )
308
307
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
311
312
}
312
313
313
314
managed := & managedSmartSubtransport {
You can’t perform that action at this time.
0 commit comments