summaryrefslogtreecommitdiff
path: root/graph.go
diff options
context:
space:
mode:
Diffstat (limited to 'graph.go')
-rw-r--r--graph.go27
1 files changed, 27 insertions, 0 deletions
diff --git a/graph.go b/graph.go
index 688818c..05da423 100644
--- a/graph.go
+++ b/graph.go
@@ -40,3 +40,30 @@ func (repo *Repository) AheadBehind(local, upstream *Oid) (ahead, behind int, er
return int(aheadT), int(behindT), nil
}
+
+// ReachableFromAny returns whether a commit is reachable from any of a list of
+// commits by following parent edges.
+func (repo *Repository) ReachableFromAny(commit *Oid, descendants []*Oid) (bool, error) {
+ if len(descendants) == 0 {
+ return false, nil
+ }
+
+ coids := make([]C.git_oid, len(descendants))
+ for i := 0; i < len(descendants); i++ {
+ coids[i] = *descendants[i].toC()
+ }
+
+ runtime.LockOSThread()
+ defer runtime.UnlockOSThread()
+
+ ret := C.git_graph_reachable_from_any(repo.ptr, commit.toC(), &coids[0], C.size_t(len(descendants)))
+ runtime.KeepAlive(repo)
+ runtime.KeepAlive(commit)
+ runtime.KeepAlive(coids)
+ runtime.KeepAlive(descendants)
+ if ret < 0 {
+ return false, MakeGitError(ret)
+ }
+
+ return (ret > 0), nil
+}