func MergeFile(ancestor MergeFileInput, ours MergeFileInput, theirs MergeFileInput, options *MergeFileOptions) (*MergeFileResult, error) { var cancestor C.git_merge_file_input var cours C.git_merge_file_input var ctheirs C.git_merge_file_input populateCMergeFileInput(&cancestor, ancestor) defer freeCMergeFileInput(&cancestor) populateCMergeFileInput(&cours, ours) defer freeCMergeFileInput(&cours) populateCMergeFileInput(&ctheirs, theirs) defer freeCMergeFileInput(&ctheirs) var copts *C.git_merge_file_options if options != nil { copts = &C.git_merge_file_options{} ecode := C.git_merge_file_init_options(copts, C.GIT_MERGE_FILE_OPTIONS_VERSION) if ecode < 0 { return nil, MakeGitError(ecode) } populateCMergeFileOptions(copts, *options) } runtime.LockOSThread() defer runtime.UnlockOSThread() var result C.git_merge_file_result ecode := C.git_merge_file(&result, &cancestor, &cours, &ctheirs, copts) if ecode < 0 { return nil, MakeGitError(ecode) } return newMergeFileResultFromC(&result), nil }
func MergeFile(ancestor MergeFileInput, ours MergeFileInput, theirs MergeFileInput, options *MergeFileOptions) (*MergeFileResult, error) { ancestorPath := C.CString(ancestor.Path) defer C.free(unsafe.Pointer(ancestorPath)) var ancestorContents *byte if len(ancestor.Contents) > 0 { ancestorContents = &ancestor.Contents[0] } oursPath := C.CString(ours.Path) defer C.free(unsafe.Pointer(oursPath)) var oursContents *byte if len(ours.Contents) > 0 { oursContents = &ours.Contents[0] } theirsPath := C.CString(theirs.Path) defer C.free(unsafe.Pointer(theirsPath)) var theirsContents *byte if len(theirs.Contents) > 0 { theirsContents = &theirs.Contents[0] } var copts *C.git_merge_file_options if options != nil { copts = &C.git_merge_file_options{} ecode := C.git_merge_file_init_options(copts, C.GIT_MERGE_FILE_OPTIONS_VERSION) if ecode < 0 { return nil, MakeGitError(ecode) } populateCMergeFileOptions(copts, *options) defer freeCMergeFileOptions(copts) } runtime.LockOSThread() defer runtime.UnlockOSThread() var result C.git_merge_file_result ecode := C._go_git_merge_file(&result, (*C.char)(unsafe.Pointer(ancestorContents)), C.size_t(len(ancestor.Contents)), ancestorPath, C.uint(ancestor.Mode), (*C.char)(unsafe.Pointer(oursContents)), C.size_t(len(ours.Contents)), oursPath, C.uint(ours.Mode), (*C.char)(unsafe.Pointer(theirsContents)), C.size_t(len(theirs.Contents)), theirsPath, C.uint(theirs.Mode), copts) if ecode < 0 { return nil, MakeGitError(ecode) } return newMergeFileResultFromC(&result), nil }