From a572b15df69c4b0350a1134045a7e7a66b06de21 Mon Sep 17 00:00:00 2001 From: Aaron O'Mullan Date: Mon, 31 Aug 2015 12:42:34 +0200 Subject: [PATCH] Add back support for RemoteCallbacks in Remote.Push() --- remote.go | 27 +++++++++++++++++++-------- 1 file 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) }