MCPcopy Create free account
hub / github.com/libgit2/git2go / MergeBasesMany

Method MergeBasesMany

merge.go:375–405  ·  view source on GitHub ↗

MergeBasesMany finds all merge bases given a list of commits.

(oids []*Oid)

Source from the content-addressed store, hash-verified

373
374// MergeBasesMany finds all merge bases given a list of commits.
375func (r *Repository) MergeBasesMany(oids []*Oid) ([]*Oid, error) {
376 inCoids := make([]C.git_oid, len(oids))
377 for i := 0; i < len(oids); i++ {
378 inCoids[i] = *oids[i].toC()
379 }
380
381 runtime.LockOSThread()
382 defer runtime.UnlockOSThread()
383
384 var outCoids C.git_oidarray
385 ret := C.git_merge_bases_many(&outCoids, r.ptr, C.size_t(len(oids)), &inCoids[0])
386 runtime.KeepAlive(r)
387 runtime.KeepAlive(inCoids)
388 if ret < 0 {
389 return nil, MakeGitError(ret)
390 }
391
392 outOids := make([]*Oid, outCoids.count)
393 hdr := reflect.SliceHeader{
394 Data: uintptr(unsafe.Pointer(outCoids.ids)),
395 Len: int(outCoids.count),
396 Cap: int(outCoids.count),
397 }
398 goSlice := *(*[]C.git_oid)(unsafe.Pointer(&hdr))
399
400 for i, cid := range goSlice {
401 outOids[i] = newOidFromC(&cid)
402 }
403
404 return outOids, nil
405}
406
407// MergeBaseOctopus finds a merge base in preparation for an octopus merge.
408func (r *Repository) MergeBaseOctopus(oids []*Oid) (*Oid, error) {

Callers 1

TestMergeBasesManyFunction · 0.80

Calls 3

MakeGitErrorFunction · 0.85
newOidFromCFunction · 0.85
toCMethod · 0.45

Tested by 1

TestMergeBasesManyFunction · 0.64