summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--clone.go8
-rw-r--r--clone_test.go10
2 files changed, 13 insertions, 5 deletions
diff --git a/clone.go b/clone.go
index f67f511..b5c5a5b 100644
--- a/clone.go
+++ b/clone.go
@@ -20,8 +20,6 @@ type CloneOptions struct {
}
func Clone(url string, path string, options *CloneOptions) (*Repository, error) {
- repo := new(Repository)
-
curl := C.CString(url)
defer C.free(unsafe.Pointer(curl))
@@ -37,7 +35,8 @@ func Clone(url string, path string, options *CloneOptions) (*Repository, error)
runtime.LockOSThread()
defer runtime.UnlockOSThread()
- ret := C.git_clone(&repo.ptr, curl, cpath, copts)
+ var ptr *C.git_repository
+ ret := C.git_clone(&ptr, curl, cpath, copts)
freeCheckoutOpts(&copts.checkout_opts)
C.free(unsafe.Pointer(copts.checkout_branch))
C.free(unsafe.Pointer(copts))
@@ -46,8 +45,7 @@ func Clone(url string, path string, options *CloneOptions) (*Repository, error)
return nil, MakeGitError(ret)
}
- runtime.SetFinalizer(repo, (*Repository).Free)
- return repo, nil
+ return newRepositoryFromC(ptr), nil
}
func populateCloneOptions(ptr *C.git_clone_options, opts *CloneOptions) {
diff --git a/clone_test.go b/clone_test.go
index fd83fec..7cdc362 100644
--- a/clone_test.go
+++ b/clone_test.go
@@ -15,8 +15,18 @@ func TestClone(t *testing.T) {
path, err := ioutil.TempDir("", "git2go")
checkFatal(t, err)
+ ref, err := repo.References.Lookup("refs/heads/master")
+ checkFatal(t, err)
+
repo2, err := Clone(repo.Path(), path, &CloneOptions{Bare: true})
defer cleanupTestRepo(t, repo2)
checkFatal(t, err)
+
+ ref2, err := repo2.References.Lookup("refs/heads/master")
+ checkFatal(t, err)
+
+ if ref.Cmp(ref2) != 0 {
+ t.Fatal("reference in clone does not match original ref")
+ }
}