MergeBasesMany finds all merge bases given a list of commits.
(oids []*Oid)
| 373 | |
| 374 | // MergeBasesMany finds all merge bases given a list of commits. |
| 375 | func (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. |
| 408 | func (r *Repository) MergeBaseOctopus(oids []*Oid) (*Oid, error) { |