Support for index-entries
This commit is contained in:
parent
4e0a28b064
commit
179b69ce21
40
index.go
40
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
|
||||
}
|
||||
|
|
Loading…
Reference in New Issue