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
@@ -76,3 +77,17 @@ func TestCloneWithCallback(t *testing.T) {
76
77
}
77
78
defer remote .Free ()
78
79
}
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 {
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 {
@@ -592,6 +595,9 @@ func (r *Remote) free() {
592
595
// Free releases the resources of the Remote.
593
596
func (r * Remote ) Free () {
594
597
r .repo .Remotes .untrackRemote (r )
598
+ if r .weak {
599
+ return
600
+ }
595
601
r .free ()
596
602
}
597
603
@@ -1221,3 +1227,12 @@ func freeRemoteCreateOptions(ptr *C.git_remote_create_options) {
1221
1227
C .free (unsafe .Pointer (ptr .name ))
1222
1228
C .free (unsafe .Pointer (ptr .fetchspec ))
1223
1229
}
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
22
22
*/
23
23
import "C"
24
24
import (
25
- "errors"
26
25
"fmt"
27
26
"io"
28
27
"reflect"
@@ -296,8 +295,10 @@ func smartTransportCallback(
296
295
registeredSmartTransport := pointerHandles .Get (handle ).(* RegisteredSmartTransport )
297
296
remote , ok := remotePointers .get (owner )
298
297
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
301
302
}
302
303
303
304
managed := & managedSmartSubtransport {
You can’t perform that action at this time.
0 commit comments