Support for index-entries

This commit is contained in:
Axel Wagner 2013-05-22 14:41:42 +02:00
parent 4e0a28b064
commit 179b69ce21
1 changed files with 40 additions and 0 deletions

View File

@ -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
}