Merge pull request #390 from libgit2/cmn/go-vet

Fix a couple of issues reported by go-vet
diff --git a/.travis.yml b/.travis.yml
index f3b8b46..6131e6d 100644
--- a/.travis.yml
+++ b/.travis.yml
@@ -1,9 +1,8 @@
 language: go
 
 go:
-  - 1.5
-  - 1.6
   - 1.7
+  - 1.8
   - tip
 
 script: make test-static
diff --git a/remote.go b/remote.go
index d3f437d..b4b1dd7 100644
--- a/remote.go
+++ b/remote.go
@@ -144,6 +144,7 @@
 type Remote struct {
 	ptr       *C.git_remote
 	callbacks RemoteCallbacks
+	repo      *Repository
 }
 
 type CertificateKind uint
@@ -370,6 +371,7 @@
 func (r *Remote) Free() {
 	runtime.SetFinalizer(r, nil)
 	C.git_remote_free(r.ptr)
+	r.ptr = nil
 }
 
 type RemoteCollection struct {
@@ -383,6 +385,7 @@
 	defer runtime.UnlockOSThread()
 
 	ecode := C.git_remote_list(&r, c.repo.ptr)
+	runtime.KeepAlive(c.repo)
 	if ecode < 0 {
 		return nil, MakeGitError(ecode)
 	}
@@ -393,7 +396,7 @@
 }
 
 func (c *RemoteCollection) Create(name string, url string) (*Remote, error) {
-	remote := &Remote{}
+	remote := &Remote{repo: c.repo}
 
 	cname := C.CString(name)
 	defer C.free(unsafe.Pointer(cname))
@@ -419,6 +422,7 @@
 	defer runtime.UnlockOSThread()
 
 	ret := C.git_remote_delete(c.repo.ptr, cname)
+	runtime.KeepAlive(c.repo)
 	if ret < 0 {
 		return MakeGitError(ret)
 	}
@@ -426,7 +430,7 @@
 }
 
 func (c *RemoteCollection) CreateWithFetchspec(name string, url string, fetch string) (*Remote, error) {
-	remote := &Remote{}
+	remote := &Remote{repo: c.repo}
 
 	cname := C.CString(name)
 	defer C.free(unsafe.Pointer(cname))
@@ -447,7 +451,7 @@
 }
 
 func (c *RemoteCollection) CreateAnonymous(url string) (*Remote, error) {
-	remote := &Remote{}
+	remote := &Remote{repo: c.repo}
 
 	curl := C.CString(url)
 	defer C.free(unsafe.Pointer(curl))
@@ -464,7 +468,7 @@
 }
 
 func (c *RemoteCollection) Lookup(name string) (*Remote, error) {
-	remote := &Remote{}
+	remote := &Remote{repo: c.repo}
 
 	cname := C.CString(name)
 	defer C.free(unsafe.Pointer(cname))
@@ -481,15 +485,21 @@
 }
 
 func (o *Remote) Name() string {
-	return C.GoString(C.git_remote_name(o.ptr))
+	s := C.git_remote_name(o.ptr)
+	runtime.KeepAlive(o)
+	return C.GoString(s)
 }
 
 func (o *Remote) Url() string {
-	return C.GoString(C.git_remote_url(o.ptr))
+	s := C.git_remote_url(o.ptr)
+	runtime.KeepAlive(o)
+	return C.GoString(s)
 }
 
 func (o *Remote) PushUrl() string {
-	return C.GoString(C.git_remote_pushurl(o.ptr))
+	s := C.git_remote_pushurl(o.ptr)
+	runtime.KeepAlive(o)
+	return C.GoString(s)
 }
 
 func (c *RemoteCollection) Rename(remote, newname string) ([]string, error) {
@@ -504,6 +514,7 @@
 	defer runtime.UnlockOSThread()
 
 	ret := C.git_remote_rename(&cproblems, c.repo.ptr, cremote, cnewname)
+	runtime.KeepAlive(c.repo)
 	if ret < 0 {
 		return []string{}, MakeGitError(ret)
 	}
@@ -522,6 +533,7 @@
 	defer runtime.UnlockOSThread()
 
 	ret := C.git_remote_set_url(c.repo.ptr, cremote, curl)
+	runtime.KeepAlive(c.repo)
 	if ret < 0 {
 		return MakeGitError(ret)
 	}
@@ -538,6 +550,7 @@
 	defer runtime.UnlockOSThread()
 
 	ret := C.git_remote_set_pushurl(c.repo.ptr, cremote, curl)
+	runtime.KeepAlive(c.repo)
 	if ret < 0 {
 		return MakeGitError(ret)
 	}
@@ -554,6 +567,7 @@
 	defer runtime.UnlockOSThread()
 
 	ret := C.git_remote_add_fetch(c.repo.ptr, cremote, crefspec)
+	runtime.KeepAlive(c.repo)
 	if ret < 0 {
 		return MakeGitError(ret)
 	}
@@ -605,6 +619,7 @@
 	defer runtime.UnlockOSThread()
 
 	ret := C.git_remote_get_fetch_refspecs(&crefspecs, o.ptr)
+	runtime.KeepAlive(o)
 	if ret < 0 {
 		return nil, MakeGitError(ret)
 	}
@@ -624,6 +639,7 @@
 	defer runtime.UnlockOSThread()
 
 	ret := C.git_remote_add_push(c.repo.ptr, cremote, crefspec)
+	runtime.KeepAlive(c.repo)
 	if ret < 0 {
 		return MakeGitError(ret)
 	}
@@ -641,12 +657,16 @@
 		return nil, MakeGitError(ret)
 	}
 	defer C.git_strarray_free(&crefspecs)
+	runtime.KeepAlive(o)
+
 	refspecs := makeStringsFromCStrings(crefspecs.strings, int(crefspecs.count))
 	return refspecs, nil
 }
 
 func (o *Remote) RefspecCount() uint {
-	return uint(C.git_remote_refspec_count(o.ptr))
+	count := C.git_remote_refspec_count(o.ptr)
+	runtime.KeepAlive(o)
+	return uint(count)
 }
 
 func populateFetchOptions(options *C.git_fetch_options, opts *FetchOptions) {
@@ -706,6 +726,7 @@
 	defer runtime.UnlockOSThread()
 
 	ret := C.git_remote_fetch(o.ptr, &crefspecs, coptions, cmsg)
+	runtime.KeepAlive(o)
 	if ret < 0 {
 		return MakeGitError(ret)
 	}
@@ -734,17 +755,18 @@
 	var cproxy C.git_proxy_options
 	populateProxyOptions(&cproxy, proxyOpts)
 	defer freeProxyOptions(&cproxy)
-	
+
 	cheaders := C.git_strarray{}
 	cheaders.count = C.size_t(len(headers))
 	cheaders.strings = makeCStringsFromStrings(headers)
 	defer freeStrarray(&cheaders)
 
-
 	runtime.LockOSThread()
 	defer runtime.UnlockOSThread()
 
-	if ret := C.git_remote_connect(o.ptr, C.git_direction(direction), &ccallbacks, &cproxy, &cheaders); ret != 0 {
+	ret := C.git_remote_connect(o.ptr, C.git_direction(direction), &ccallbacks, &cproxy, &cheaders)
+	runtime.KeepAlive(o)
+	if ret != 0 {
 		return MakeGitError(ret)
 	}
 	return nil
@@ -755,6 +777,7 @@
 	defer runtime.UnlockOSThread()
 
 	C.git_remote_disconnect(o.ptr)
+	runtime.KeepAlive(o)
 }
 
 func (o *Remote) Ls(filterRefs ...string) ([]RemoteHead, error) {
@@ -765,7 +788,9 @@
 	runtime.LockOSThread()
 	defer runtime.UnlockOSThread()
 
-	if ret := C.git_remote_ls(&refs, &length, o.ptr); ret != 0 {
+	ret := C.git_remote_ls(&refs, &length, o.ptr)
+	runtime.KeepAlive(o)
+	if ret != 0 {
 		return nil, MakeGitError(ret)
 	}
 
@@ -820,6 +845,7 @@
 	defer runtime.UnlockOSThread()
 
 	ret := C.git_remote_push(o.ptr, &crefspecs, coptions)
+	runtime.KeepAlive(o)
 	if ret < 0 {
 		return MakeGitError(ret)
 	}
@@ -838,6 +864,7 @@
 	defer runtime.UnlockOSThread()
 
 	ret := C.git_remote_prune(o.ptr, &ccallbacks)
+	runtime.KeepAlive(o)
 	if ret < 0 {
 		return MakeGitError(ret)
 	}