Commit 3ba69ba8 by Carlos Martín Nieto Committed by Vicent Marti

Add git_tree_cache_get

Signed-off-by: Carlos Martín Nieto <cmn@elego.de>
parent b419fe2d
......@@ -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
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment