summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--index.go18
-rw-r--r--index_test.go19
2 files changed, 35 insertions, 2 deletions
diff --git a/index.go b/index.go
index 6da3c98..7336249 100644
--- a/index.go
+++ b/index.go
@@ -23,7 +23,7 @@ type IndexEntry struct {
Uid uint
Gid uint
Size uint
- Id *Oid
+ Id *Oid
Path string
}
@@ -48,6 +48,20 @@ func (v *Index) AddByPath(path string) error {
return nil
}
+func (v *Index) WriteTreeTo(repo *Repository) (*Oid, error) {
+ oid := new(Oid)
+
+ runtime.LockOSThread()
+ defer runtime.UnlockOSThread()
+
+ ret := C.git_index_write_tree_to(oid.toC(), v.ptr, repo.ptr)
+ if ret < 0 {
+ return nil, MakeGitError(ret)
+ }
+
+ return oid, nil
+}
+
func (v *Index) WriteTree() (*Oid, error) {
oid := new(Oid)
@@ -62,7 +76,7 @@ func (v *Index) WriteTree() (*Oid, error) {
return oid, nil
}
-func (v *Index) Write() (error) {
+func (v *Index) Write() error {
runtime.LockOSThread()
defer runtime.UnlockOSThread()
diff --git a/index_test.go b/index_test.go
index 9828d0f..5920b93 100644
--- a/index_test.go
+++ b/index_test.go
@@ -22,6 +22,25 @@ func TestCreateRepoAndStage(t *testing.T) {
}
}
+func TestIndexWriteTreeTo(t *testing.T) {
+ repo := createTestRepo(t)
+ defer os.RemoveAll(repo.Workdir())
+
+ repo2 := createTestRepo(t)
+ defer os.RemoveAll(repo.Workdir())
+
+ idx, err := repo.Index()
+ checkFatal(t, err)
+ err = idx.AddByPath("README")
+ checkFatal(t, err)
+ treeId, err := idx.WriteTreeTo(repo2)
+ checkFatal(t, err)
+
+ if treeId.String() != "b7119b11e8ef7a1a5a34d3ac87f5b075228ac81e" {
+ t.Fatalf("%v", treeId.String())
+ }
+}
+
func checkFatal(t *testing.T, err error) {
if err == nil {
return