summaryrefslogtreecommitdiff
path: root/remote.go
diff options
context:
space:
mode:
authorAaron O'Mullan <[email protected]>2015-08-31 12:42:34 +0200
committerCarlos Martín Nieto <[email protected]>2015-08-31 12:43:36 +0200
commita572b15df69c4b0350a1134045a7e7a66b06de21 (patch)
tree46fe6233a0cb3ad2db231f3bc86ac62a634b44f4 /remote.go
parentc0c6caed3a9564602af1f1881933229f99f4729f (diff)
Add back support for RemoteCallbacks in Remote.Push()
Diffstat (limited to 'remote.go')
-rw-r--r--remote.go27
1 files changed, 19 insertions, 8 deletions
diff --git a/remote.go b/remote.go
index 6f3c9ea..e1e4845 100644
--- a/remote.go
+++ b/remote.go
@@ -153,6 +153,9 @@ type HostkeyCertificate struct {
}
type PushOptions struct {
+ // Callbacks to use for this push operation
+ RemoteCallbacks RemoteCallbacks
+
PbParallelism uint
}
@@ -591,6 +594,17 @@ func populateFetchOptions(options *C.git_fetch_options, opts *FetchOptions) {
options.download_tags = C.git_remote_autotag_option_t(opts.DownloadTags)
}
+func populatePushOptions(options *C.git_push_options, opts *PushOptions) {
+ C.git_push_init_options(options, C.GIT_PUSH_OPTIONS_VERSION)
+ if opts == nil {
+ return
+ }
+
+ options.pb_parallelism = C.uint(opts.PbParallelism)
+
+ populateRemoteCallbacks(&options.callbacks, &opts.RemoteCallbacks)
+}
+
// Fetch performs a fetch operation. refspecs specifies which refspecs
// to use for this fetch, use an empty list to use the refspecs from
// the configuration; msg specifies what to use for the reflog
@@ -689,22 +703,19 @@ func (o *Remote) Ls(filterRefs ...string) ([]RemoteHead, error) {
}
func (o *Remote) Push(refspecs []string, opts *PushOptions) error {
- var copts C.git_push_options
- C.git_push_init_options(&copts, C.GIT_PUSH_OPTIONS_VERSION)
- if opts != nil {
- 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)
+ var coptions C.git_push_options
+ populatePushOptions(&coptions, opts)
+ defer untrackCalbacksPayload(&coptions.callbacks)
+
runtime.LockOSThread()
defer runtime.UnlockOSThread()
- defer untrackCalbacksPayload(&copts.callbacks)
- ret := C.git_remote_push(o.ptr, &crefspecs, &copts)
+ ret := C.git_remote_push(o.ptr, &crefspecs, &coptions)
if ret < 0 {
return MakeGitError(ret)
}