summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--merge.go19
-rw-r--r--merge_test.go21
2 files changed, 36 insertions, 4 deletions
diff --git a/merge.go b/merge.go
index ab30fb2..06e98a0 100644
--- a/merge.go
+++ b/merge.go
@@ -58,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) {
@@ -71,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) {
@@ -85,7 +90,10 @@ 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) {
@@ -101,7 +109,10 @@ func (r *Repository) AnnotatedCommitFromRevspec(spec string) (*AnnotatedCommit,
if ret < 0 {
return nil, MakeGitError(ret)
}
- return newAnnotatedCommitFromC(ptr, r), nil
+
+ 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)