Merge branch 'jezell/merge' into merge
This commit is contained in:
commit
86efca0630
30
merge.go
30
merge.go
|
@ -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()
|
||||||
|
|
||||||
|
|
|
@ -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")
|
||||||
|
}
|
||||||
|
}
|
Loading…
Reference in New Issue