Welcome to mirror list, hosted at ThFree Co, Russian Federation.

gitlab.com/gitlab-org/gitaly.git - Unnamed repository; edit this file 'description' to name the repository.
summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
Diffstat (limited to 'vendor/github.com/libgit2/git2go/walk.go')
-rw-r--r--vendor/github.com/libgit2/git2go/walk.go219
1 files changed, 219 insertions, 0 deletions
diff --git a/vendor/github.com/libgit2/git2go/walk.go b/vendor/github.com/libgit2/git2go/walk.go
new file mode 100644
index 000000000..287edb631
--- /dev/null
+++ b/vendor/github.com/libgit2/git2go/walk.go
@@ -0,0 +1,219 @@
+package git
+
+/*
+#include <git2.h>
+*/
+import "C"
+
+import (
+ "runtime"
+ "unsafe"
+)
+
+// RevWalk
+
+type SortType uint
+
+const (
+ SortNone SortType = C.GIT_SORT_NONE
+ SortTopological SortType = C.GIT_SORT_TOPOLOGICAL
+ SortTime SortType = C.GIT_SORT_TIME
+ SortReverse SortType = C.GIT_SORT_REVERSE
+)
+
+type RevWalk struct {
+ ptr *C.git_revwalk
+ repo *Repository
+}
+
+func revWalkFromC(repo *Repository, c *C.git_revwalk) *RevWalk {
+ v := &RevWalk{ptr: c, repo: repo}
+ runtime.SetFinalizer(v, (*RevWalk).Free)
+ return v
+}
+
+func (v *RevWalk) Reset() {
+ C.git_revwalk_reset(v.ptr)
+ runtime.KeepAlive(v)
+}
+
+func (v *RevWalk) Push(id *Oid) error {
+ runtime.LockOSThread()
+ defer runtime.UnlockOSThread()
+
+ ecode := C.git_revwalk_push(v.ptr, id.toC())
+ runtime.KeepAlive(v)
+ runtime.KeepAlive(id)
+ if ecode < 0 {
+ return MakeGitError(ecode)
+ }
+ return nil
+}
+
+func (v *RevWalk) PushGlob(glob string) error {
+ runtime.LockOSThread()
+ defer runtime.UnlockOSThread()
+
+ cstr := C.CString(glob)
+ defer C.free(unsafe.Pointer(cstr))
+
+ ecode := C.git_revwalk_push_glob(v.ptr, cstr)
+ runtime.KeepAlive(v)
+ if ecode < 0 {
+ return MakeGitError(ecode)
+ }
+ return nil
+}
+
+func (v *RevWalk) PushRange(r string) error {
+ runtime.LockOSThread()
+ defer runtime.UnlockOSThread()
+
+ cstr := C.CString(r)
+ defer C.free(unsafe.Pointer(cstr))
+
+ ecode := C.git_revwalk_push_range(v.ptr, cstr)
+ runtime.KeepAlive(v)
+ if ecode < 0 {
+ return MakeGitError(ecode)
+ }
+ return nil
+}
+
+func (v *RevWalk) PushRef(r string) error {
+ runtime.LockOSThread()
+ defer runtime.UnlockOSThread()
+
+ cstr := C.CString(r)
+ defer C.free(unsafe.Pointer(cstr))
+
+ ecode := C.git_revwalk_push_ref(v.ptr, cstr)
+ runtime.KeepAlive(v)
+ if ecode < 0 {
+ return MakeGitError(ecode)
+ }
+ return nil
+}
+
+func (v *RevWalk) PushHead() (err error) {
+ runtime.LockOSThread()
+ defer runtime.UnlockOSThread()
+
+ ecode := C.git_revwalk_push_head(v.ptr)
+ runtime.KeepAlive(v)
+ if ecode < 0 {
+ err = MakeGitError(ecode)
+ }
+ return nil
+}
+
+func (v *RevWalk) Hide(id *Oid) error {
+ runtime.LockOSThread()
+ defer runtime.UnlockOSThread()
+
+ ecode := C.git_revwalk_hide(v.ptr, id.toC())
+ runtime.KeepAlive(v)
+ runtime.KeepAlive(id)
+ if ecode < 0 {
+ return MakeGitError(ecode)
+ }
+ return nil
+}
+
+func (v *RevWalk) HideGlob(glob string) error {
+ runtime.LockOSThread()
+ defer runtime.UnlockOSThread()
+
+ cstr := C.CString(glob)
+ defer C.free(unsafe.Pointer(cstr))
+
+ ecode := C.git_revwalk_hide_glob(v.ptr, cstr)
+ runtime.KeepAlive(v)
+ if ecode < 0 {
+ return MakeGitError(ecode)
+ }
+ return nil
+}
+
+func (v *RevWalk) HideRef(r string) error {
+ runtime.LockOSThread()
+ defer runtime.UnlockOSThread()
+
+ cstr := C.CString(r)
+ defer C.free(unsafe.Pointer(cstr))
+
+ ecode := C.git_revwalk_hide_ref(v.ptr, cstr)
+ runtime.KeepAlive(v)
+ if ecode < 0 {
+ return MakeGitError(ecode)
+ }
+ return nil
+}
+
+func (v *RevWalk) HideHead() (err error) {
+ runtime.LockOSThread()
+ defer runtime.UnlockOSThread()
+
+ ecode := C.git_revwalk_hide_head(v.ptr)
+ runtime.KeepAlive(v)
+ if ecode < 0 {
+ err = MakeGitError(ecode)
+ }
+ return nil
+}
+
+func (v *RevWalk) Next(id *Oid) (err error) {
+ runtime.LockOSThread()
+ defer runtime.UnlockOSThread()
+
+ ret := C.git_revwalk_next(id.toC(), v.ptr)
+ runtime.KeepAlive(v)
+ switch {
+ case ret < 0:
+ err = MakeGitError(ret)
+ }
+
+ return
+}
+
+type RevWalkIterator func(commit *Commit) bool
+
+func (v *RevWalk) Iterate(fun RevWalkIterator) (err error) {
+ oid := new(Oid)
+ for {
+ err = v.Next(oid)
+ if IsErrorCode(err, ErrIterOver) {
+ return nil
+ }
+ if err != nil {
+ return err
+ }
+
+ commit, err := v.repo.LookupCommit(oid)
+ if err != nil {
+ return err
+ }
+
+ cont := fun(commit)
+ if !cont {
+ break
+ }
+ }
+
+ return nil
+}
+
+func (v *RevWalk) SimplifyFirstParent() {
+ C.git_revwalk_simplify_first_parent(v.ptr)
+ runtime.KeepAlive(v)
+}
+
+func (v *RevWalk) Sorting(sm SortType) {
+ C.git_revwalk_sorting(v.ptr, C.uint(sm))
+ runtime.KeepAlive(v)
+}
+
+func (v *RevWalk) Free() {
+ runtime.SetFinalizer(v, nil)
+ C.git_revwalk_free(v.ptr)
+}