Find tree entry by id #230
18
tree.go
18
tree.go
|
@ -55,6 +55,24 @@ func (t Tree) EntryByName(filename string) *TreeEntry {
|
||||||
return newTreeEntry(entry)
|
return newTreeEntry(entry)
|
||||||
}
|
}
|
||||||
|
|
||||||
|
// EntryById performs a lookup for a tree entry with the given SHA value.
|
||||||
|
//
|
||||||
|
// It returns a *TreeEntry that is owned by the Tree. You don't have to
|
||||||
|
// free it, but you must not use it after the Tree is freed.
|
||||||
|
//
|
||||||
|
// Warning: this must examine every entry in the tree, so it is not fast.
|
||||||
|
func (t Tree) EntryById(id *Oid) *TreeEntry {
|
||||||
|
runtime.LockOSThread()
|
||||||
|
defer runtime.UnlockOSThread()
|
||||||
|
|
||||||
|
entry := C.git_tree_entry_byid(t.cast_ptr, id.toC())
|
||||||
|
if entry == nil {
|
||||||
|
return nil
|
||||||
|
}
|
||||||
|
|
||||||
|
return newTreeEntry(entry)
|
||||||
|
}
|
||||||
|
|
||||||
// EntryByPath looks up an entry by its full path, recursing into
|
// EntryByPath looks up an entry by its full path, recursing into
|
||||||
// deeper trees if necessary (i.e. if there are slashes in the path)
|
// deeper trees if necessary (i.e. if there are slashes in the path)
|
||||||
func (t Tree) EntryByPath(path string) (*TreeEntry, error) {
|
func (t Tree) EntryByPath(path string) (*TreeEntry, error) {
|
||||||
|
|
|
@ -0,0 +1,22 @@
|
||||||
|
package git
|
||||||
|
|
||||||
|
import "testing"
|
||||||
|
|
||||||
|
func TestTreeEntryById(t *testing.T) {
|
||||||
|
repo := createTestRepo(t)
|
||||||
|
defer cleanupTestRepo(t, repo)
|
||||||
|
|
||||||
|
_, treeID := seedTestRepo(t, repo)
|
||||||
|
|
||||||
|
tree, err := repo.LookupTree(treeID)
|
||||||
|
checkFatal(t, err)
|
||||||
|
|
||||||
|
id, err := NewOid("257cc5642cb1a054f08cc83f2d943e56fd3ebe99")
|
||||||
|
checkFatal(t, err)
|
||||||
|
|
||||||
|
entry := tree.EntryById(id)
|
||||||
|
|
||||||
|
if entry == nil {
|
||||||
|
t.Fatalf("entry id %v was not found", id)
|
||||||
|
}
|
||||||
|
}
|
Loading…
Reference in New Issue