func Clone(url string, path string, options *CloneOptions) (*Repository, error) { repo := new(Repository) curl := C.CString(url) defer C.free(unsafe.Pointer(curl)) cpath := C.CString(path) defer C.free(unsafe.Pointer(cpath)) var copts C.git_clone_options populateCloneOptions(&copts, options) defer freeCheckoutOpts(&copts.checkout_opts) if len(options.CheckoutBranch) != 0 { copts.checkout_branch = C.CString(options.CheckoutBranch) defer C.free(unsafe.Pointer(copts.checkout_branch)) } runtime.LockOSThread() defer runtime.UnlockOSThread() ret := C.git_clone(&repo.ptr, curl, cpath, &copts) if ret < 0 { return nil, MakeGitError(ret) } runtime.SetFinalizer(repo, (*Repository).Free) return repo, nil }
func populateCloneOptions(ptr *C.git_clone_options, opts *CloneOpts) { ptr.version = 1 checkout := C.git_checkout_opts_init() populateCheckoutOpts(&checkout, &opts.Checkout) ptr.checkout_opts = checkout }
func populateCloneOptions(ptr *C.git_clone_options, opts *CloneOptions) { C.git_clone_init_options(ptr, C.GIT_CLONE_OPTIONS_VERSION) if opts == nil { return } populateCheckoutOpts(&ptr.checkout_opts, opts.CheckoutOpts) populateFetchOptions(&ptr.fetch_opts, opts.FetchOptions) ptr.bare = cbool(opts.Bare) if opts.RemoteCreateCallback != nil { // Go v1.1 does not allow to assign a C function pointer C._go_git_populate_remote_cb(ptr) ptr.remote_cb_payload = pointerHandles.Track(*opts) } }
func populateCloneOptions(ptr *C.git_clone_options, opts *CloneOptions) { C.git_clone_init_options(ptr, C.GIT_CLONE_OPTIONS_VERSION) if opts == nil { return } populateCheckoutOpts(&ptr.checkout_opts, opts.CheckoutOpts) populateRemoteCallbacks(&ptr.remote_callbacks, opts.RemoteCallbacks) if opts.Bare { ptr.bare = 1 } else { ptr.bare = 0 } if opts.IgnoreCertErrors { ptr.ignore_cert_errors = 1 } else { ptr.ignore_cert_errors = 0 } }
func populateCloneOptions(ptr *C.git_clone_options, opts *CloneOptions) { C.git_clone_init_options(ptr, C.GIT_CLONE_OPTIONS_VERSION) if opts == nil { return } populateCheckoutOpts(&ptr.checkout_opts, opts.CheckoutOpts) populateRemoteCallbacks(&ptr.remote_callbacks, opts.RemoteCallbacks) ptr.bare = cbool(opts.Bare) if opts.RemoteCreateCallback != nil { ptr.remote_cb = opts.RemoteCreateCallback defer C.free(unsafe.Pointer(opts.RemoteCreateCallback)) if opts.RemoteCreatePayload != nil { ptr.remote_cb_payload = opts.RemoteCreatePayload defer C.free(opts.RemoteCreatePayload) } } }