summaryrefslogtreecommitdiff
path: root/merge.go
diff options
context:
space:
mode:
Diffstat (limited to 'merge.go')
-rw-r--r--merge.go34
1 files changed, 19 insertions, 15 deletions
diff --git a/merge.go b/merge.go
index 272bf6a..535a5e7 100644
--- a/merge.go
+++ b/merge.go
@@ -85,8 +85,8 @@ const (
)
type MergeOptions struct {
- Version uint
- TreeFlags MergeTreeFlag
+ Version uint
+ TreeFlags MergeTreeFlag
RenameThreshold uint
TargetLimit uint
@@ -98,7 +98,7 @@ type MergeOptions struct {
func mergeOptionsFromC(opts *C.git_merge_options) MergeOptions {
return MergeOptions{
Version: uint(opts.version),
- TreeFlags: MergeTreeFlag(opts.tree_flags),
+ TreeFlags: MergeTreeFlag(opts.tree_flags),
RenameThreshold: uint(opts.rename_threshold),
TargetLimit: uint(opts.target_limit),
FileFavor: MergeFileFavor(opts.file_favor),
@@ -262,10 +262,10 @@ func (r *Repository) MergeBases(one, two *Oid) ([]*Oid, error) {
}
oids := make([]*Oid, coids.count)
- hdr := reflect.SliceHeader {
+ hdr := reflect.SliceHeader{
Data: uintptr(unsafe.Pointer(coids.ids)),
- Len: int(coids.count),
- Cap: int(coids.count),
+ Len: int(coids.count),
+ Cap: int(coids.count),
}
goSlice := *(*[]C.git_oid)(unsafe.Pointer(&hdr))
@@ -321,17 +321,21 @@ type MergeFileInput struct {
}
// populate a C struct with merge file input, make sure to use freeMergeFileInput to clean up allocs
-func populateCMergeFileInput(c *C.git_merge_file_input, input MergeFileInput) {
+func populateCMergeFileInput(c *C.git_merge_file_input, input MergeFileInput) *C.char {
c.path = C.CString(input.Path)
+ var toFree *C.char
if input.Contents != nil {
- c.ptr = (*C.char)(unsafe.Pointer(&input.Contents[0]))
+ toFree = C.CString(string(input.Contents))
+ c.ptr = toFree
c.size = C.size_t(len(input.Contents))
}
c.mode = C.uint(input.Mode)
+ return toFree
}
-func freeCMergeFileInput(c *C.git_merge_file_input) {
+func freeCMergeFileInput(c *C.git_merge_file_input, toFree *C.char) {
C.free(unsafe.Pointer(c.path))
+ C.free(unsafe.Pointer(toFree))
}
type MergeFileFlags int
@@ -382,12 +386,12 @@ func MergeFile(ancestor MergeFileInput, ours MergeFileInput, theirs MergeFileInp
var cours C.git_merge_file_input
var ctheirs C.git_merge_file_input
- populateCMergeFileInput(&cancestor, ancestor)
- defer freeCMergeFileInput(&cancestor)
- populateCMergeFileInput(&cours, ours)
- defer freeCMergeFileInput(&cours)
- populateCMergeFileInput(&ctheirs, theirs)
- defer freeCMergeFileInput(&ctheirs)
+ t := populateCMergeFileInput(&cancestor, ancestor)
+ defer freeCMergeFileInput(&cancestor, t)
+ t = populateCMergeFileInput(&cours, ours)
+ defer freeCMergeFileInput(&cours, t)
+ t = populateCMergeFileInput(&ctheirs, theirs)
+ defer freeCMergeFileInput(&ctheirs, t)
var copts *C.git_merge_file_options
if options != nil {