Use Filemode in TreeBuilder.Insert, and add test coverage for some
TreeBuilder methods.
diff --git a/tree.go b/tree.go
index 8288176..eba9f3d 100644
--- a/tree.go
+++ b/tree.go
@@ -149,7 +149,7 @@
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 Filemode) error {
cfilename := C.CString(filename)
defer C.free(unsafe.Pointer(cfilename))
diff --git a/tree_test.go b/tree_test.go
index 4c6a4ed..fae395a 100644
--- a/tree_test.go
+++ b/tree_test.go
@@ -20,3 +20,44 @@
t.Fatalf("entry id %v was not found", id)
}
}
+
+func TestTreeBuilderInsert(t *testing.T) {
+ repo := createTestRepo(t)
+ defer cleanupTestRepo(t, repo)
+
+ subTree, err := repo.TreeBuilder()
+ if err != nil {
+ t.Fatalf("TreeBuilder: %v", err)
+ }
+ defer subTree.Free()
+
+ odb, err := repo.Odb()
+ if err != nil {
+ t.Fatalf("repo.Odb: %v", err)
+ }
+ blobId, err := odb.Write([]byte("hello"), ObjectBlob)
+ if err != nil {
+ t.Fatalf("odb.Write: %v", err)
+ }
+ if err = subTree.Insert("subfile", blobId, FilemodeBlobExecutable); err != nil {
+ t.Fatalf("TreeBuilder.Insert: %v", err)
+ }
+ treeID, err := subTree.Write()
+ if err != nil {
+ t.Fatalf("TreeBuilder.Write: %v", err)
+ }
+
+ tree, err := repo.LookupTree(treeID)
+ if err != nil {
+ t.Fatalf("LookupTree: %v", err)
+ }
+
+ entry, err := tree.EntryByPath("subfile")
+ if err != nil {
+ t.Fatalf("tree.EntryByPath(%q): %v", "subfile", err)
+ }
+
+ if !entry.Id.Equal(blobId) {
+ t.Fatalf("got oid %v, want %v", entry.Id, blobId)
+ }
+}