From da64faf8bde3de19fb9b0fc029df2bf6f5b691a1 Mon Sep 17 00:00:00 2001 From: Jesse Ezell Date: Fri, 28 Feb 2014 11:13:51 -0800 Subject: [PATCH 1/3] switch from iota to explicit def --- merge.go | 16 ++++++++-------- 1 file changed, 8 insertions(+), 8 deletions(-) diff --git a/merge.go b/merge.go index 11219e0..82e01fb 100644 --- a/merge.go +++ b/merge.go @@ -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 { @@ -96,16 +96,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 { From 6af4d4a82534f0cebc3d9ac680f83da1aace884a Mon Sep 17 00:00:00 2001 From: Jesse Ezell Date: Fri, 28 Feb 2014 11:15:39 -0800 Subject: [PATCH 2/3] move finalizer above free --- merge.go | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/merge.go b/merge.go index 82e01fb..570c361 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) { From e5946d4009cf58f7a041f647e953a454159e2d4f Mon Sep 17 00:00:00 2001 From: Jesse Ezell Date: Fri, 28 Feb 2014 14:33:38 -0800 Subject: [PATCH 3/3] Add defaults, add simple test, merge heads should be pointer array --- merge.go | 12 +++++++++++- merge_test.go | 27 +++++++++++++++++++++++++++ 2 files changed, 38 insertions(+), 1 deletion(-) create mode 100644 merge_test.go diff --git a/merge.go b/merge.go index 570c361..59cdd58 100644 --- a/merge.go +++ b/merge.go @@ -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), @@ -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") + } +}