diff options
Diffstat (limited to 'tree.go')
| -rw-r--r-- | tree.go | 18 |
1 files changed, 17 insertions, 1 deletions
@@ -13,8 +13,9 @@ import ( "unsafe" ) +type Filemode int const ( - FilemodeNew = C.GIT_FILEMODE_NEW + FilemodeNew Filemode = C.GIT_FILEMODE_NEW FilemodeTree = C.GIT_FILEMODE_TREE FilemodeBlob = C.GIT_FILEMODE_BLOB FilemodeBlobExecutable = C.GIT_FILEMODE_BLOB_EXECUTABLE @@ -54,6 +55,21 @@ func (t Tree) EntryByName(filename string) *TreeEntry { return newTreeEntry(entry) } +// EntryByPath looks up an entry by its full path, recursing into +// deeper trees if necessary (i.e. if there are slashes in the path) +func (t Tree) EntryByPath(path string) (*TreeEntry, error) { + cpath := C.CString(path) + defer C.free(unsafe.Pointer(cpath)) + var entry *C.git_tree_entry + + ret := C.git_tree_entry_bypath(&entry, t.ptr, cpath) + if ret < 0 { + return nil, LastError() + } + + return newTreeEntry(entry), nil +} + func (t Tree) EntryByIndex(index uint64) *TreeEntry { entry := C.git_tree_entry_byindex(t.ptr, C.size_t(index)) if entry == nil { |
