summaryrefslogtreecommitdiff
path: root/merge.go
diff options
context:
space:
mode:
Diffstat (limited to 'merge.go')
-rw-r--r--merge.go71
1 files changed, 42 insertions, 29 deletions
diff --git a/merge.go b/merge.go
index 93ac71b..5b68a8b 100644
--- a/merge.go
+++ b/merge.go
@@ -2,11 +2,10 @@ package git
/*
#include <git2.h>
-#include <git2/errors.h>
-extern git_merge_head** _go_git_make_merge_head_array(size_t len);
-extern void _go_git_merge_head_array_set(git_merge_head** array, git_merge_head* ptr, size_t n);
-extern git_merge_head* _go_git_merge_head_array_get(git_merge_head** array, size_t n);
+extern git_annotated_commit** _go_git_make_merge_head_array(size_t len);
+extern void _go_git_annotated_commit_array_set(git_annotated_commit** array, git_annotated_commit* ptr, size_t n);
+extern git_annotated_commit* _go_git_annotated_commit_array_get(git_annotated_commit** array, size_t n);
*/
import "C"
@@ -15,23 +14,23 @@ import (
"unsafe"
)
-type MergeHead struct {
- ptr *C.git_merge_head
+type AnnotatedCommit struct {
+ ptr *C.git_annotated_commit
}
-func newMergeHeadFromC(c *C.git_merge_head) *MergeHead {
- mh := &MergeHead{ptr: c}
- runtime.SetFinalizer(mh, (*MergeHead).Free)
+func newAnnotatedCommitFromC(c *C.git_annotated_commit) *AnnotatedCommit {
+ mh := &AnnotatedCommit{ptr: c}
+ runtime.SetFinalizer(mh, (*AnnotatedCommit).Free)
return mh
}
-func (mh *MergeHead) Free() {
+func (mh *AnnotatedCommit) Free() {
runtime.SetFinalizer(mh, nil)
- C.git_merge_head_free(mh.ptr)
+ C.git_annotated_commit_free(mh.ptr)
}
-func (r *Repository) MergeHeadFromFetchHead(branchName string, remoteURL string, oid *Oid) (*MergeHead, error) {
- mh := &MergeHead{}
+func (r *Repository) AnnotatedCommitFromFetchHead(branchName string, remoteURL string, oid *Oid) (*AnnotatedCommit, error) {
+ mh := &AnnotatedCommit{}
cbranchName := C.CString(branchName)
defer C.free(unsafe.Pointer(cbranchName))
@@ -39,33 +38,42 @@ func (r *Repository) MergeHeadFromFetchHead(branchName string, remoteURL string,
cremoteURL := C.CString(remoteURL)
defer C.free(unsafe.Pointer(cremoteURL))
- ret := C.git_merge_head_from_fetchhead(&mh.ptr, r.ptr, cbranchName, cremoteURL, oid.toC())
+ runtime.LockOSThread()
+ defer runtime.UnlockOSThread()
+
+ ret := C.git_annotated_commit_from_fetchhead(&mh.ptr, r.ptr, cbranchName, cremoteURL, oid.toC())
if ret < 0 {
return nil, MakeGitError(ret)
}
- runtime.SetFinalizer(mh, (*MergeHead).Free)
+ runtime.SetFinalizer(mh, (*AnnotatedCommit).Free)
return mh, nil
}
-func (r *Repository) MergeHeadFromId(oid *Oid) (*MergeHead, error) {
- mh := &MergeHead{}
+func (r *Repository) LookupAnnotatedCommit(oid *Oid) (*AnnotatedCommit, error) {
+ mh := &AnnotatedCommit{}
- ret := C.git_merge_head_from_id(&mh.ptr, r.ptr, oid.toC())
+ runtime.LockOSThread()
+ defer runtime.UnlockOSThread()
+
+ ret := C.git_annotated_commit_lookup(&mh.ptr, r.ptr, oid.toC())
if ret < 0 {
return nil, MakeGitError(ret)
}
- runtime.SetFinalizer(mh, (*MergeHead).Free)
+ runtime.SetFinalizer(mh, (*AnnotatedCommit).Free)
return mh, nil
}
-func (r *Repository) MergeHeadFromRef(ref *Reference) (*MergeHead, error) {
- mh := &MergeHead{}
+func (r *Repository) AnnotatedCommitFromRef(ref *Reference) (*AnnotatedCommit, error) {
+ mh := &AnnotatedCommit{}
- ret := C.git_merge_head_from_ref(&mh.ptr, r.ptr, ref.ptr)
+ runtime.LockOSThread()
+ defer runtime.UnlockOSThread()
+
+ ret := C.git_annotated_commit_from_ref(&mh.ptr, r.ptr, ref.ptr)
if ret < 0 {
return nil, MakeGitError(ret)
}
- runtime.SetFinalizer(mh, (*MergeHead).Free)
+ runtime.SetFinalizer(mh, (*AnnotatedCommit).Free)
return mh, nil
}
@@ -98,6 +106,10 @@ func mergeOptionsFromC(opts *C.git_merge_options) MergeOptions {
func DefaultMergeOptions() (MergeOptions, error) {
opts := C.git_merge_options{}
+
+ runtime.LockOSThread()
+ defer runtime.UnlockOSThread()
+
ecode := C.git_merge_init_options(&opts, C.GIT_MERGE_OPTIONS_VERSION)
if ecode < 0 {
return MergeOptions{}, MakeGitError(ecode)
@@ -127,19 +139,20 @@ const (
MergeFileFavorUnion MergeFileFavor = C.GIT_MERGE_FILE_FAVOR_UNION
)
-func (r *Repository) Merge(theirHeads []*MergeHead, mergeOptions *MergeOptions, checkoutOptions *CheckoutOpts) error {
+func (r *Repository) Merge(theirHeads []*AnnotatedCommit, mergeOptions *MergeOptions, checkoutOptions *CheckoutOpts) error {
runtime.LockOSThread()
defer runtime.UnlockOSThread()
cMergeOpts := mergeOptions.toC()
cCheckoutOpts := checkoutOptions.toC()
+ defer freeCheckoutOpts(cCheckoutOpts)
- gmerge_head_array := make([]*C.git_merge_head, len(theirHeads))
+ gmerge_head_array := make([]*C.git_annotated_commit, len(theirHeads))
for i := 0; i < len(theirHeads); i++ {
gmerge_head_array[i] = theirHeads[i].ptr
}
ptr := unsafe.Pointer(&gmerge_head_array[0])
- err := C.git_merge(r.ptr, (**C.git_merge_head)(ptr), C.size_t(len(theirHeads)), cMergeOpts, cCheckoutOpts)
+ err := C.git_merge(r.ptr, (**C.git_annotated_commit)(ptr), C.size_t(len(theirHeads)), cMergeOpts, cCheckoutOpts)
if err < 0 {
return MakeGitError(err)
}
@@ -164,18 +177,18 @@ const (
MergePreferenceFastForwardOnly MergePreference = C.GIT_MERGE_PREFERENCE_FASTFORWARD_ONLY
)
-func (r *Repository) MergeAnalysis(theirHeads []*MergeHead) (MergeAnalysis, MergePreference, error) {
+func (r *Repository) MergeAnalysis(theirHeads []*AnnotatedCommit) (MergeAnalysis, MergePreference, error) {
runtime.LockOSThread()
defer runtime.UnlockOSThread()
- gmerge_head_array := make([]*C.git_merge_head, len(theirHeads))
+ gmerge_head_array := make([]*C.git_annotated_commit, len(theirHeads))
for i := 0; i < len(theirHeads); i++ {
gmerge_head_array[i] = theirHeads[i].ptr
}
ptr := unsafe.Pointer(&gmerge_head_array[0])
var analysis C.git_merge_analysis_t
var preference C.git_merge_preference_t
- err := C.git_merge_analysis(&analysis, &preference, r.ptr, (**C.git_merge_head)(ptr), C.size_t(len(theirHeads)))
+ err := C.git_merge_analysis(&analysis, &preference, r.ptr, (**C.git_annotated_commit)(ptr), C.size_t(len(theirHeads)))
if err < 0 {
return MergeAnalysisNone, MergePreferenceNone, MakeGitError(err)
}