cache-tree: extract subtree_pos()
This method will be helpful to use outside of cache-tree.c in a later feature. The implementation is subtle due to subtree_name_cmp() sorting by length and then lexicographically. Signed-off-by: Derrick Stolee <dstolee@microsoft.com> Signed-off-by: Junio C Hamano <gitster@pobox.com>
This commit is contained in:
parent
8d87e338e1
commit
c80dd3967f
@ -45,7 +45,7 @@ static int subtree_name_cmp(const char *one, int onelen,
|
|||||||
return memcmp(one, two, onelen);
|
return memcmp(one, two, onelen);
|
||||||
}
|
}
|
||||||
|
|
||||||
static int subtree_pos(struct cache_tree *it, const char *path, int pathlen)
|
int cache_tree_subtree_pos(struct cache_tree *it, const char *path, int pathlen)
|
||||||
{
|
{
|
||||||
struct cache_tree_sub **down = it->down;
|
struct cache_tree_sub **down = it->down;
|
||||||
int lo, hi;
|
int lo, hi;
|
||||||
@ -72,7 +72,7 @@ static struct cache_tree_sub *find_subtree(struct cache_tree *it,
|
|||||||
int create)
|
int create)
|
||||||
{
|
{
|
||||||
struct cache_tree_sub *down;
|
struct cache_tree_sub *down;
|
||||||
int pos = subtree_pos(it, path, pathlen);
|
int pos = cache_tree_subtree_pos(it, path, pathlen);
|
||||||
if (0 <= pos)
|
if (0 <= pos)
|
||||||
return it->down[pos];
|
return it->down[pos];
|
||||||
if (!create)
|
if (!create)
|
||||||
@ -123,7 +123,7 @@ static int do_invalidate_path(struct cache_tree *it, const char *path)
|
|||||||
it->entry_count = -1;
|
it->entry_count = -1;
|
||||||
if (!*slash) {
|
if (!*slash) {
|
||||||
int pos;
|
int pos;
|
||||||
pos = subtree_pos(it, path, namelen);
|
pos = cache_tree_subtree_pos(it, path, namelen);
|
||||||
if (0 <= pos) {
|
if (0 <= pos) {
|
||||||
cache_tree_free(&it->down[pos]->cache_tree);
|
cache_tree_free(&it->down[pos]->cache_tree);
|
||||||
free(it->down[pos]);
|
free(it->down[pos]);
|
||||||
|
@ -27,6 +27,8 @@ void cache_tree_free(struct cache_tree **);
|
|||||||
void cache_tree_invalidate_path(struct index_state *, const char *);
|
void cache_tree_invalidate_path(struct index_state *, const char *);
|
||||||
struct cache_tree_sub *cache_tree_sub(struct cache_tree *, const char *);
|
struct cache_tree_sub *cache_tree_sub(struct cache_tree *, const char *);
|
||||||
|
|
||||||
|
int cache_tree_subtree_pos(struct cache_tree *it, const char *path, int pathlen);
|
||||||
|
|
||||||
void cache_tree_write(struct strbuf *, struct cache_tree *root);
|
void cache_tree_write(struct strbuf *, struct cache_tree *root);
|
||||||
struct cache_tree *cache_tree_read(const char *buffer, unsigned long size);
|
struct cache_tree *cache_tree_read(const char *buffer, unsigned long size);
|
||||||
|
|
||||||
|
Loading…
Reference in New Issue
Block a user