summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorJesse Ezell <[email protected]>2014-03-11 12:42:18 -0700
committerJesse Ezell <[email protected]>2014-03-11 12:42:18 -0700
commit86efca063082691d412844639d001887f62df1de (patch)
tree83549865d1ff678e55b0bdae295505fd8c952fd0
parent7cbbeff7ac9fd559f207b0f7aa200f537cc42598 (diff)
parente5946d4009cf58f7a041f647e953a454159e2d4f (diff)
Merge branch 'jezell/merge' into merge
-rw-r--r--merge.go30
-rw-r--r--merge_test.go27
2 files changed, 47 insertions, 10 deletions
diff --git a/merge.go b/merge.go
index 11219e0..59cdd58 100644
--- a/merge.go
+++ b/merge.go
@@ -26,8 +26,8 @@ func newMergeHeadFromC(c *C.git_merge_head) *MergeHead {
}
func (mh *MergeHead) Free() {
- C.git_merge_head_free(mh.ptr)
runtime.SetFinalizer(mh, nil)
+ C.git_merge_head_free(mh.ptr)
}
func (r *Repository) MergeHeadFromFetchHead(branchName string, remoteURL string, oid *Oid) (*MergeHead, error) {
@@ -72,9 +72,9 @@ func (r *Repository) MergeHeadFromRef(ref *Reference) (*MergeHead, error) {
type MergeFlag int
const (
- MergeFlagDefault MergeFlag = iota
- MergeNoFastForward
- MergeFastForwardOnly
+ MergeFlagDefault MergeFlag = 0
+ MergeNoFastForward = 1
+ MergeFastForwardOnly = 2
)
type MergeOptions struct {
@@ -85,6 +85,12 @@ type MergeOptions struct {
//TODO: CheckoutOptions CheckoutOptions
}
+func DefaultMergeOptions() MergeOptions {
+ options := MergeOptions{Version: 1}
+ options.TreeOptions = DefaultMergeTreeOptions()
+ return options
+}
+
func (mo *MergeOptions) toC() *C.git_merge_opts {
return &C.git_merge_opts{
version: C.uint(mo.Version),
@@ -96,16 +102,16 @@ func (mo *MergeOptions) toC() *C.git_merge_opts {
type MergeTreeFlag int
const (
- MergeTreeFindRenames MergeTreeFlag = 1 << iota
+ MergeTreeFindRenames MergeTreeFlag = 1 << 0
)
type MergeFileFavorType int
const (
- MergeFileFavorNormal MergeFileFavorType = iota
- MergeFileFavorOurs
- MergeFileFavorTheirs
- MergeFileFavorUnion
+ MergeFileFavorNormal MergeFileFavorType = 0
+ MergeFileFavorOurs = 1
+ MergeFileFavorTheirs = 2
+ MergeFileFavorUnion = 3
)
type MergeTreeOptions struct {
@@ -117,6 +123,10 @@ type MergeTreeOptions struct {
FileFavor MergeFileFavorType
}
+func DefaultMergeTreeOptions() MergeTreeOptions {
+ return MergeTreeOptions{Version: 1}
+}
+
func (mo *MergeTreeOptions) toC() *C.git_merge_tree_opts {
return &C.git_merge_tree_opts{
version: C.uint(mo.Version),
@@ -170,7 +180,7 @@ func (mr *MergeResult) FastForwardId() (*Oid, error) {
return newOidFromC(&oid), nil
}
-func (r *Repository) Merge(theirHeads []MergeHead, options MergeOptions) (*MergeResult, error) {
+func (r *Repository) Merge(theirHeads []*MergeHead, options MergeOptions) (*MergeResult, error) {
runtime.LockOSThread()
defer runtime.UnlockOSThread()
diff --git a/merge_test.go b/merge_test.go
new file mode 100644
index 0000000..9bf9b9d
--- /dev/null
+++ b/merge_test.go
@@ -0,0 +1,27 @@
+package git
+
+import (
+ "testing"
+)
+
+func Test_Merge_With_Self(t *testing.T) {
+
+ repo := createTestRepo(t)
+ seedTestRepo(t, repo)
+
+ master, err := repo.LookupReference("refs/heads/master")
+ checkFatal(t, err)
+
+ mergeHead, err := repo.MergeHeadFromRef(master)
+ checkFatal(t, err)
+
+ options := DefaultMergeOptions()
+ mergeHeads := make([]*MergeHead, 1)
+ mergeHeads[0] = mergeHead
+ results, err := repo.Merge(mergeHeads, options)
+ checkFatal(t, err)
+
+ if !results.IsUpToDate() {
+ t.Fatal("Expected up to date")
+ }
+}