summaryrefslogtreecommitdiff
path: root/tree.go
diff options
context:
space:
mode:
Diffstat (limited to 'tree.go')
-rw-r--r--tree.go57
1 files changed, 37 insertions, 20 deletions
diff --git a/tree.go b/tree.go
index 8c74e5d..8356fba 100644
--- a/tree.go
+++ b/tree.go
@@ -14,23 +14,25 @@ import (
)
type Filemode int
+
const (
- FilemodeNew Filemode = C.GIT_FILEMODE_NEW
- FilemodeTree = C.GIT_FILEMODE_TREE
- FilemodeBlob = C.GIT_FILEMODE_BLOB
- FilemodeBlobExecutable = C.GIT_FILEMODE_BLOB_EXECUTABLE
- FilemodeLink = C.GIT_FILEMODE_LINK
- FilemodeCommit = C.GIT_FILEMODE_COMMIT
+ FilemodeNew Filemode = C.GIT_FILEMODE_NEW
+ FilemodeTree = C.GIT_FILEMODE_TREE
+ FilemodeBlob = C.GIT_FILEMODE_BLOB
+ FilemodeBlobExecutable = C.GIT_FILEMODE_BLOB_EXECUTABLE
+ FilemodeLink = C.GIT_FILEMODE_LINK
+ FilemodeCommit = C.GIT_FILEMODE_COMMIT
)
type Tree struct {
gitObject
+ cast_ptr *C.git_tree
}
type TreeEntry struct {
- Name string
- Id *Oid
- Type ObjectType
+ Name string
+ Id *Oid
+ Type ObjectType
Filemode int
}
@@ -47,7 +49,7 @@ func (t Tree) EntryByName(filename string) *TreeEntry {
cname := C.CString(filename)
defer C.free(unsafe.Pointer(cname))
- entry := C.git_tree_entry_byname(t.ptr, cname)
+ entry := C.git_tree_entry_byname(t.cast_ptr, cname)
if entry == nil {
return nil
}
@@ -65,16 +67,16 @@ func (t Tree) EntryByPath(path string) (*TreeEntry, error) {
runtime.LockOSThread()
defer runtime.UnlockOSThread()
- ret := C.git_tree_entry_bypath(&entry, t.ptr, cpath)
+ ret := C.git_tree_entry_bypath(&entry, t.cast_ptr, cpath)
if ret < 0 {
- return nil, LastError()
+ return nil, MakeGitError(ret)
}
return newTreeEntry(entry), nil
}
func (t Tree) EntryByIndex(index uint64) *TreeEntry {
- entry := C.git_tree_entry_byindex(t.ptr, C.size_t(index))
+ entry := C.git_tree_entry_byindex(t.cast_ptr, C.size_t(index))
if entry == nil {
return nil
}
@@ -83,7 +85,7 @@ func (t Tree) EntryByIndex(index uint64) *TreeEntry {
}
func (t Tree) EntryCount() uint64 {
- num := C.git_tree_entrycount(t.ptr)
+ num := C.git_tree_entrycount(t.cast_ptr)
return uint64(num)
}
@@ -103,20 +105,20 @@ func (t Tree) Walk(callback TreeWalkCallback) error {
defer runtime.UnlockOSThread()
err := C._go_git_treewalk(
- t.ptr,
+ t.cast_ptr,
C.GIT_TREEWALK_PRE,
unsafe.Pointer(&callback),
)
if err < 0 {
- return LastError()
+ return MakeGitError(err)
}
return nil
}
type TreeBuilder struct {
- ptr *C.git_treebuilder
+ ptr *C.git_treebuilder
repo *Repository
}
@@ -125,7 +127,7 @@ func (v *TreeBuilder) Free() {
C.git_treebuilder_free(v.ptr)
}
-func (v *TreeBuilder) Insert(filename string, id *Oid, filemode int) (error) {
+func (v *TreeBuilder) Insert(filename string, id *Oid, filemode int) error {
cfilename := C.CString(filename)
defer C.free(unsafe.Pointer(cfilename))
@@ -134,7 +136,22 @@ func (v *TreeBuilder) Insert(filename string, id *Oid, filemode int) (error) {
err := C.git_treebuilder_insert(nil, v.ptr, cfilename, id.toC(), C.git_filemode_t(filemode))
if err < 0 {
- return LastError()
+ return MakeGitError(err)
+ }
+
+ return nil
+}
+
+func (v *TreeBuilder) Remove(filename string) error {
+ cfilename := C.CString(filename)
+ defer C.free(unsafe.Pointer(cfilename))
+
+ runtime.LockOSThread()
+ defer runtime.UnlockOSThread()
+
+ err := C.git_treebuilder_remove(v.ptr, cfilename)
+ if err < 0 {
+ return MakeGitError(err)
}
return nil
@@ -149,7 +166,7 @@ func (v *TreeBuilder) Write() (*Oid, error) {
err := C.git_treebuilder_write(oid.toC(), v.repo.ptr, v.ptr)
if err < 0 {
- return nil, LastError()
+ return nil, MakeGitError(err)
}
return oid, nil