mirror of
https://git.proxmox.com/git/libgit2
synced 2025-05-09 07:20:07 +00:00
Add git_tree_cache_get
Signed-off-by: Carlos Martín Nieto <cmn@elego.de>
This commit is contained in:
parent
b419fe2d8c
commit
3ba69ba8a4
@ -7,7 +7,7 @@
|
||||
|
||||
#include "tree-cache.h"
|
||||
|
||||
static git_tree_cache *find_child(git_tree_cache *tree, const char *path)
|
||||
static git_tree_cache *find_child(const git_tree_cache *tree, const char *path)
|
||||
{
|
||||
size_t i, dirlen;
|
||||
const char *end;
|
||||
@ -53,6 +53,29 @@ void git_tree_cache_invalidate_path(git_tree_cache *tree, const char *path)
|
||||
}
|
||||
}
|
||||
|
||||
const git_tree_cache *git_tree_cache_get(const git_tree_cache *tree, const char *path)
|
||||
{
|
||||
const char *ptr = path, *end;
|
||||
|
||||
if (tree == NULL) {
|
||||
return NULL;
|
||||
}
|
||||
|
||||
while (1) {
|
||||
end = strchr(ptr, '/');
|
||||
|
||||
tree = find_child(tree, ptr);
|
||||
if (tree == NULL) { /* Can't find it */
|
||||
return NULL;
|
||||
}
|
||||
|
||||
if (end == NULL || end + 1 == '\0')
|
||||
return tree;
|
||||
|
||||
ptr = end + 1;
|
||||
}
|
||||
}
|
||||
|
||||
static int read_tree_internal(git_tree_cache **out,
|
||||
const char **buffer_in, const char *buffer_end, git_tree_cache *parent)
|
||||
{
|
||||
|
@ -25,6 +25,7 @@ typedef struct git_tree_cache git_tree_cache;
|
||||
|
||||
int git_tree_cache_read(git_tree_cache **tree, const char *buffer, size_t buffer_size);
|
||||
void git_tree_cache_invalidate_path(git_tree_cache *tree, const char *path);
|
||||
const git_tree_cache *git_tree_cache_get(const git_tree_cache *tree, const char *path);
|
||||
void git_tree_cache_free(git_tree_cache *tree);
|
||||
|
||||
#endif
|
||||
|
Loading…
Reference in New Issue
Block a user