summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorAxel Wagner <[email protected]>2013-05-22 14:41:42 +0200
committerAxel Wagner <[email protected]>2013-05-22 14:41:42 +0200
commit179b69ce21fd1742c4f51e4ae0f2c1ef6929019e (patch)
tree07df0aa73bcd0bfd381c650a65407a7ffa43d387
parent4e0a28b064047513194a842e9c16d9beab545f41 (diff)
Support for index-entries
-rw-r--r--index.go40
1 files changed, 40 insertions, 0 deletions
diff --git a/index.go b/index.go
index 72b1d5b..90a49de 100644
--- a/index.go
+++ b/index.go
@@ -7,7 +7,9 @@ package git
*/
import "C"
import (
+ "fmt"
"runtime"
+ "time"
"unsafe"
)
@@ -15,6 +17,18 @@ type Index struct {
ptr *C.git_index
}
+type IndexEntry struct {
+ ptr *C.git_index_entry
+ Ctime time.Time
+ Mtime time.Time
+ Mode uint
+ Uid uint
+ Gid uint
+ Size uint
+ Oid *Oid
+ Path string
+}
+
func newIndexFromC(ptr *C.git_index) *Index {
idx := &Index{ptr}
runtime.SetFinalizer(idx, (*Index).Free)
@@ -47,3 +61,29 @@ func (v *Index) Free() {
runtime.SetFinalizer(v, nil)
C.git_index_free(v.ptr)
}
+
+func (v *Index) EntryCount() uint {
+ return uint(C.git_index_entrycount(v.ptr))
+}
+
+func newIndexEntryFromC(entry *C.git_index_entry) *IndexEntry {
+ return &IndexEntry{
+ entry,
+ time.Unix(int64(entry.ctime.seconds), int64(entry.ctime.nanoseconds)),
+ time.Unix(int64(entry.mtime.seconds), int64(entry.mtime.nanoseconds)),
+ uint(entry.mode),
+ uint(entry.uid),
+ uint(entry.gid),
+ uint(entry.file_size),
+ newOidFromC(&entry.oid),
+ C.GoString(entry.path),
+ }
+}
+
+func (v *Index) EntryByIndex(index uint) (*IndexEntry, error) {
+ centry := C.git_index_get_byindex(v.ptr, C.size_t(index))
+ if centry == nil {
+ return nil, fmt.Errorf("Index out of Bounds")
+ }
+ return newIndexEntryFromC(centry), nil
+}