diff options
| author | Jesse Ezell <[email protected]> | 2014-02-26 08:45:44 -0800 |
|---|---|---|
| committer | Jesse Ezell <[email protected]> | 2014-02-26 08:45:44 -0800 |
| commit | baf4a8433663f87e2732f9c2632a070221f166f2 (patch) | |
| tree | 2e8ec293db11776d4f6dd448c6f426c8491bc864 /index.go | |
| parent | fe509411a5e8bd45a1c5607d1cc212d8ebf45541 (diff) | |
| parent | 1c1f7bd1fab3be4a1274149292979bea4ee8aadf (diff) | |
Merge branch 'master' of https://github.com/libgit2/git2go into add-branch-lookup
Diffstat (limited to 'index.go')
| -rw-r--r-- | index.go | 44 |
1 files changed, 41 insertions, 3 deletions
@@ -6,7 +6,9 @@ package git */ import "C" import ( + "fmt" "runtime" + "time" "unsafe" ) @@ -14,6 +16,17 @@ type Index struct { ptr *C.git_index } +type IndexEntry struct { + Ctime time.Time + Mtime time.Time + Mode uint + Uid uint + Gid uint + Size uint + Id *Oid + Path string +} + func newIndexFromC(ptr *C.git_index) *Index { idx := &Index{ptr} runtime.SetFinalizer(idx, (*Index).Free) @@ -29,7 +42,7 @@ func (v *Index) AddByPath(path string) error { ret := C.git_index_add_bypath(v.ptr, cstr) if ret < 0 { - return LastError() + return MakeGitError(ret) } return nil @@ -43,7 +56,7 @@ func (v *Index) WriteTree() (*Oid, error) { ret := C.git_index_write_tree(oid.toC(), v.ptr) if ret < 0 { - return nil, LastError() + return nil, MakeGitError(ret) } return oid, nil @@ -55,7 +68,7 @@ func (v *Index) Write() (error) { ret := C.git_index_write(v.ptr) if ret < 0 { - return LastError() + return MakeGitError(ret) } return nil @@ -65,3 +78,28 @@ 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{ + 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.id), + 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 +} |
