diff options
| author | lhchavez <[email protected]> | 2020-02-23 07:05:25 -0800 |
|---|---|---|
| committer | GitHub <[email protected]> | 2020-02-23 07:05:25 -0800 |
| commit | 21d618136f415486d95965e75af80c0e6688a0d5 (patch) | |
| tree | fb156488aa27d753c7fe7864b9917a48d027b38e | |
| parent | 06764f48dce903bf95701c6ef75ad0fe46c0dedf (diff) | |
| parent | a140f2310f56eb06d37454514e67647a8a49d197 (diff) | |
Merge pull request #423 from josharian/more-annotated-commit
merge: add two missing AnnotatedCommit methods
| -rw-r--r-- | merge.go | 42 | ||||
| -rw-r--r-- | merge_test.go | 21 |
2 files changed, 60 insertions, 3 deletions
@@ -27,6 +27,15 @@ func newAnnotatedCommitFromC(ptr *C.git_annotated_commit, r *Repository) *Annota return mh } +func (mh *AnnotatedCommit) Id() *Oid { + runtime.LockOSThread() + defer runtime.UnlockOSThread() + + ret := newOidFromC(C.git_annotated_commit_id(mh.ptr)) + runtime.KeepAlive(mh) + return ret +} + func (mh *AnnotatedCommit) Free() { runtime.SetFinalizer(mh, nil) C.git_annotated_commit_free(mh.ptr) @@ -49,7 +58,9 @@ func (r *Repository) AnnotatedCommitFromFetchHead(branchName string, remoteURL s return nil, MakeGitError(ret) } - return newAnnotatedCommitFromC(ptr, r), nil + annotatedCommit := newAnnotatedCommitFromC(ptr, r) + runtime.KeepAlive(r) + return annotatedCommit, nil } func (r *Repository) LookupAnnotatedCommit(oid *Oid) (*AnnotatedCommit, error) { @@ -62,7 +73,10 @@ func (r *Repository) LookupAnnotatedCommit(oid *Oid) (*AnnotatedCommit, error) { if ret < 0 { return nil, MakeGitError(ret) } - return newAnnotatedCommitFromC(ptr, r), nil + + annotatedCommit := newAnnotatedCommitFromC(ptr, r) + runtime.KeepAlive(r) + return annotatedCommit, nil } func (r *Repository) AnnotatedCommitFromRef(ref *Reference) (*AnnotatedCommit, error) { @@ -76,7 +90,29 @@ func (r *Repository) AnnotatedCommitFromRef(ref *Reference) (*AnnotatedCommit, e if ret < 0 { return nil, MakeGitError(ret) } - return newAnnotatedCommitFromC(ptr, r), nil + + annotatedCommit := newAnnotatedCommitFromC(ptr, r) + runtime.KeepAlive(r) + return annotatedCommit, nil +} + +func (r *Repository) AnnotatedCommitFromRevspec(spec string) (*AnnotatedCommit, error) { + crevspec := C.CString(spec) + defer C.free(unsafe.Pointer(crevspec)) + + runtime.LockOSThread() + defer runtime.UnlockOSThread() + + var ptr *C.git_annotated_commit + ret := C.git_annotated_commit_from_revspec(&ptr, r.ptr, crevspec) + runtime.KeepAlive(r) + if ret < 0 { + return nil, MakeGitError(ret) + } + + annotatedCommit := newAnnotatedCommitFromC(ptr, r) + runtime.KeepAlive(r) + return annotatedCommit, nil } type MergeTreeFlag int diff --git a/merge_test.go b/merge_test.go index f2c84bc..7cf034f 100644 --- a/merge_test.go +++ b/merge_test.go @@ -5,6 +5,22 @@ import ( "time" ) +func TestAnnotatedCommitFromRevspec(t *testing.T) { + t.Parallel() + repo := createTestRepo(t) + defer cleanupTestRepo(t, repo) + + seedTestRepo(t, repo) + + mergeHead, err := repo.AnnotatedCommitFromRevspec("refs/heads/master") + checkFatal(t, err) + + expectedId := "473bf778b67b6d53e2ab289e0f1a2e8addef2fc2" + if mergeHead.Id().String() != expectedId { + t.Errorf("mergeHead.Id() = %v, want %v", mergeHead.Id(), expectedId) + } +} + func TestMergeWithSelf(t *testing.T) { t.Parallel() repo := createTestRepo(t) @@ -18,6 +34,11 @@ func TestMergeWithSelf(t *testing.T) { mergeHead, err := repo.AnnotatedCommitFromRef(master) checkFatal(t, err) + expectedId := "473bf778b67b6d53e2ab289e0f1a2e8addef2fc2" + if mergeHead.Id().String() != expectedId { + t.Errorf("mergeHead.Id() = %v, want %v", mergeHead.Id(), expectedId) + } + mergeHeads := make([]*AnnotatedCommit, 1) mergeHeads[0] = mergeHead err = repo.Merge(mergeHeads, nil, nil) |
