summaryrefslogtreecommitdiff
path: root/walk.go
diff options
context:
space:
mode:
authorJesse Ezell <[email protected]>2014-03-20 22:02:19 -0700
committerJesse Ezell <[email protected]>2014-03-20 22:02:19 -0700
commit37964e878f70229171f94668cb96f347b798e2b2 (patch)
tree5781761e13e57edb3589844b6faa799c1158b93a /walk.go
parentd0b334b24409ddc190a7010be0072d87df6b6bfe (diff)
parent2811845a1287d949a74b8ed80a5791fd8875002a (diff)
merge with latest
Diffstat (limited to 'walk.go')
-rw-r--r--walk.go29
1 files changed, 19 insertions, 10 deletions
diff --git a/walk.go b/walk.go
index 6979b6b..71df7bb 100644
--- a/walk.go
+++ b/walk.go
@@ -14,11 +14,12 @@ import (
// RevWalk
type SortType uint
+
const (
- SortNone SortType = C.GIT_SORT_NONE
- SortTopological = C.GIT_SORT_TOPOLOGICAL
- SortTime = C.GIT_SORT_TIME
- SortReverse = C.GIT_SORT_REVERSE
+ SortNone SortType = C.GIT_SORT_NONE
+ SortTopological = C.GIT_SORT_TOPOLOGICAL
+ SortTime = C.GIT_SORT_TIME
+ SortReverse = C.GIT_SORT_REVERSE
)
type RevWalk struct {
@@ -26,6 +27,12 @@ type RevWalk struct {
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)
}
@@ -40,22 +47,22 @@ func (v *RevWalk) PushHead() (err error) {
ecode := C.git_revwalk_push_head(v.ptr)
if ecode < 0 {
- err = LastError()
+ err = MakeGitError(ecode)
}
return
}
-func (v *RevWalk) Next(oid *Oid) (err error) {
+func (v *RevWalk) Next(id *Oid) (err error) {
runtime.LockOSThread()
defer runtime.UnlockOSThread()
- ret := C.git_revwalk_next(oid.toC(), v.ptr)
+ ret := C.git_revwalk_next(id.toC(), v.ptr)
switch {
case ret == ITEROVER:
err = io.EOF
case ret < 0:
- err = LastError()
+ err = MakeGitError(ret)
}
return
@@ -92,6 +99,8 @@ func (v *RevWalk) Sorting(sm SortType) {
C.git_revwalk_sorting(v.ptr, C.uint(sm))
}
-func freeRevWalk(walk *RevWalk) {
- C.git_revwalk_free(walk.ptr)
+func (v *RevWalk) Free() {
+
+ runtime.SetFinalizer(v, nil)
+ C.git_revwalk_free(v.ptr)
}