summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--merge.go50
1 files changed, 47 insertions, 3 deletions
diff --git a/merge.go b/merge.go
index 03ace2b..11219e0 100644
--- a/merge.go
+++ b/merge.go
@@ -69,18 +69,62 @@ func (r *Repository) MergeHeadFromRef(ref *Reference) (*MergeHead, error) {
return mh, nil
}
+type MergeFlag int
+
+const (
+ MergeFlagDefault MergeFlag = iota
+ MergeNoFastForward
+ MergeFastForwardOnly
+)
+
type MergeOptions struct {
+ Version uint
+ Flags MergeFlag
+
+ TreeOptions MergeTreeOptions
+ //TODO: CheckoutOptions CheckoutOptions
}
func (mo *MergeOptions) toC() *C.git_merge_opts {
- return nil
+ return &C.git_merge_opts{
+ version: C.uint(mo.Version),
+ merge_flags: C.git_merge_flags_t(mo.Flags),
+ merge_tree_opts: *mo.TreeOptions.toC(),
+ }
}
+type MergeTreeFlag int
+
+const (
+ MergeTreeFindRenames MergeTreeFlag = 1 << iota
+)
+
+type MergeFileFavorType int
+
+const (
+ MergeFileFavorNormal MergeFileFavorType = iota
+ MergeFileFavorOurs
+ MergeFileFavorTheirs
+ MergeFileFavorUnion
+)
+
type MergeTreeOptions struct {
+ Version uint
+ Flags MergeTreeFlag
+ RenameThreshold uint
+ TargetLimit uint
+ //TODO: SimilarityMetric *DiffSimilarityMetric
+ FileFavor MergeFileFavorType
}
func (mo *MergeTreeOptions) toC() *C.git_merge_tree_opts {
- return nil
+ return &C.git_merge_tree_opts{
+ version: C.uint(mo.Version),
+ flags: C.git_merge_tree_flag_t(mo.Flags),
+ rename_threshold: C.uint(mo.RenameThreshold),
+ target_limit: C.uint(mo.TargetLimit),
+ file_favor: C.git_merge_file_favor_t(mo.FileFavor),
+ }
}
type MergeResult struct {
@@ -192,4 +236,4 @@ func (r *Repository) MergeBase(one *Oid, two *Oid) (*Oid, error) {
return newOidFromC(&oid), nil
}
-// int git_merge_base_many(git_oid *out, git_repository *repo, size_t length, const git_oid input_array[]);
+//TODO: int git_merge_base_many(git_oid *out, git_repository *repo, size_t length, const git_oid input_array[]);