Merge branch 'jezell/merge' into merge

This commit is contained in:
Jesse Ezell 2014-03-11 12:42:18 -07:00
commit 86efca0630
2 changed files with 47 additions and 10 deletions

View File

@ -26,8 +26,8 @@ func newMergeHeadFromC(c *C.git_merge_head) *MergeHead {
} }
func (mh *MergeHead) Free() { func (mh *MergeHead) Free() {
C.git_merge_head_free(mh.ptr)
runtime.SetFinalizer(mh, nil) runtime.SetFinalizer(mh, nil)
C.git_merge_head_free(mh.ptr)
} }
func (r *Repository) MergeHeadFromFetchHead(branchName string, remoteURL string, oid *Oid) (*MergeHead, error) { 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 type MergeFlag int
const ( const (
MergeFlagDefault MergeFlag = iota MergeFlagDefault MergeFlag = 0
MergeNoFastForward MergeNoFastForward = 1
MergeFastForwardOnly MergeFastForwardOnly = 2
) )
type MergeOptions struct { type MergeOptions struct {
@ -85,6 +85,12 @@ type MergeOptions struct {
//TODO: CheckoutOptions CheckoutOptions //TODO: CheckoutOptions CheckoutOptions
} }
func DefaultMergeOptions() MergeOptions {
options := MergeOptions{Version: 1}
options.TreeOptions = DefaultMergeTreeOptions()
return options
}
func (mo *MergeOptions) toC() *C.git_merge_opts { func (mo *MergeOptions) toC() *C.git_merge_opts {
return &C.git_merge_opts{ return &C.git_merge_opts{
version: C.uint(mo.Version), version: C.uint(mo.Version),
@ -96,16 +102,16 @@ func (mo *MergeOptions) toC() *C.git_merge_opts {
type MergeTreeFlag int type MergeTreeFlag int
const ( const (
MergeTreeFindRenames MergeTreeFlag = 1 << iota MergeTreeFindRenames MergeTreeFlag = 1 << 0
) )
type MergeFileFavorType int type MergeFileFavorType int
const ( const (
MergeFileFavorNormal MergeFileFavorType = iota MergeFileFavorNormal MergeFileFavorType = 0
MergeFileFavorOurs MergeFileFavorOurs = 1
MergeFileFavorTheirs MergeFileFavorTheirs = 2
MergeFileFavorUnion MergeFileFavorUnion = 3
) )
type MergeTreeOptions struct { type MergeTreeOptions struct {
@ -117,6 +123,10 @@ type MergeTreeOptions struct {
FileFavor MergeFileFavorType FileFavor MergeFileFavorType
} }
func DefaultMergeTreeOptions() MergeTreeOptions {
return MergeTreeOptions{Version: 1}
}
func (mo *MergeTreeOptions) toC() *C.git_merge_tree_opts { func (mo *MergeTreeOptions) toC() *C.git_merge_tree_opts {
return &C.git_merge_tree_opts{ return &C.git_merge_tree_opts{
version: C.uint(mo.Version), version: C.uint(mo.Version),
@ -170,7 +180,7 @@ func (mr *MergeResult) FastForwardId() (*Oid, error) {
return newOidFromC(&oid), nil 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() runtime.LockOSThread()
defer runtime.UnlockOSThread() defer runtime.UnlockOSThread()

27
merge_test.go Normal file
View File

@ -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")
}
}