summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--push.go11
-rw-r--r--push_test.go25
-rw-r--r--remote.go37
m---------vendor/libgit20
4 files changed, 59 insertions, 14 deletions
diff --git a/push.go b/push.go
index e6fe51f..ff96b08 100644
--- a/push.go
+++ b/push.go
@@ -31,6 +31,7 @@ func (p *Push) Free() {
C.git_push_free(p.ptr)
}
+// This class is deprecated. Please use Remote.Push() instead
func (remote *Remote) NewPush() (*Push, error) {
runtime.LockOSThread()
@@ -56,16 +57,6 @@ func (p *Push) Finish() error {
return nil
}
-func (p *Push) UnpackOk() bool {
-
- ret := C.git_push_unpack_ok(p.ptr)
- if ret == 0 {
- return false
- }
- return true
-
-}
-
func (p *Push) UpdateTips(sig *Signature, msg string) error {
var csig *C.git_signature = nil
diff --git a/push_test.go b/push_test.go
index 65f4dd2..3911875 100644
--- a/push_test.go
+++ b/push_test.go
@@ -48,10 +48,27 @@ func Test_Push_ToRemote(t *testing.T) {
})
checkFatal(t, err)
- if !push.UnpackOk() {
- t.Fatalf("unable to unpack")
- }
-
defer remote.Free()
defer repo.Free()
}
+
+func TestRemotePush(t *testing.T) {
+ repo := createBareTestRepo(t)
+ defer os.RemoveAll(repo.Path())
+ localRepo := createTestRepo(t)
+ defer os.RemoveAll(localRepo.Workdir())
+
+ remote, err := localRepo.CreateRemote("test_push", repo.Path())
+ checkFatal(t, err)
+
+ seedTestRepo(t, localRepo)
+
+ err = remote.Push([]string{"refs/heads/master"}, nil, nil, "")
+ checkFatal(t, err)
+
+ _, err = localRepo.LookupReference("refs/remotes/test_push/master")
+ checkFatal(t, err)
+
+ _, err = repo.LookupReference("refs/heads/master")
+ checkFatal(t, err)
+}
diff --git a/remote.go b/remote.go
index 604ef40..021e207 100644
--- a/remote.go
+++ b/remote.go
@@ -650,3 +650,40 @@ func (o *Remote) Ls(filterRefs ...string) ([]RemoteHead, error) {
return heads, nil
}
+
+func (o *Remote) Push(refspecs []string, opts *PushOptions, sig *Signature, msg string) error {
+ var csig *C.git_signature = nil
+ if sig != nil {
+ csig = sig.toC()
+ defer C.free(unsafe.Pointer(csig))
+ }
+
+ var cmsg *C.char
+ if msg == "" {
+ cmsg = nil
+ } else {
+ cmsg = C.CString(msg)
+ defer C.free(unsafe.Pointer(cmsg))
+ }
+
+ var copts C.git_push_options
+ C.git_push_init_options(&copts, C.GIT_PUSH_OPTIONS_VERSION)
+ if opts != nil {
+ copts.version = C.uint(opts.Version)
+ copts.pb_parallelism = C.uint(opts.PbParallelism)
+ }
+
+ crefspecs := C.git_strarray{}
+ crefspecs.count = C.size_t(len(refspecs))
+ crefspecs.strings = makeCStringsFromStrings(refspecs)
+ defer freeStrarray(&crefspecs)
+
+ runtime.LockOSThread()
+ defer runtime.UnlockOSThread()
+
+ ret := C.git_remote_push(o.ptr, &crefspecs, &copts, csig, cmsg)
+ if ret < 0 {
+ return MakeGitError(ret)
+ }
+ return nil
+}
diff --git a/vendor/libgit2 b/vendor/libgit2
-Subproject 169497d1e7c238d2925577d1af3dc03e9a507cd
+Subproject 4eb97ef3bf18403fbce351ae4cac673655d2886