cache-tree: mark istate->cache_changed on cache tree invalidation
Signed-off-by: Nguyễn Thái Ngọc Duy <pclouds@gmail.com> Signed-off-by: Junio C Hamano <gitster@pobox.com>
This commit is contained in:

committed by
Junio C Hamano

parent
a5c446f116
commit
a5400efe29
@ -2126,7 +2126,7 @@ static struct commit *fake_working_tree_commit(struct diff_options *opt,
|
|||||||
* right now, but someday we might optimize diff-index --cached
|
* right now, but someday we might optimize diff-index --cached
|
||||||
* with cache-tree information.
|
* with cache-tree information.
|
||||||
*/
|
*/
|
||||||
cache_tree_invalidate_path(active_cache_tree, path);
|
cache_tree_invalidate_path(&the_index, path);
|
||||||
|
|
||||||
return commit;
|
return commit;
|
||||||
}
|
}
|
||||||
|
@ -55,7 +55,7 @@ static int mark_ce_flags(const char *path, int flag, int mark)
|
|||||||
active_cache[pos]->ce_flags |= flag;
|
active_cache[pos]->ce_flags |= flag;
|
||||||
else
|
else
|
||||||
active_cache[pos]->ce_flags &= ~flag;
|
active_cache[pos]->ce_flags &= ~flag;
|
||||||
cache_tree_invalidate_path(active_cache_tree, path);
|
cache_tree_invalidate_path(&the_index, path);
|
||||||
active_cache_changed |= CE_ENTRY_CHANGED;
|
active_cache_changed |= CE_ENTRY_CHANGED;
|
||||||
return 0;
|
return 0;
|
||||||
}
|
}
|
||||||
@ -267,7 +267,7 @@ static void chmod_path(int flip, const char *path)
|
|||||||
default:
|
default:
|
||||||
goto fail;
|
goto fail;
|
||||||
}
|
}
|
||||||
cache_tree_invalidate_path(active_cache_tree, path);
|
cache_tree_invalidate_path(&the_index, path);
|
||||||
active_cache_changed |= CE_ENTRY_CHANGED;
|
active_cache_changed |= CE_ENTRY_CHANGED;
|
||||||
report("chmod %cx '%s'", flip, path);
|
report("chmod %cx '%s'", flip, path);
|
||||||
return;
|
return;
|
||||||
|
15
cache-tree.c
15
cache-tree.c
@ -98,7 +98,7 @@ struct cache_tree_sub *cache_tree_sub(struct cache_tree *it, const char *path)
|
|||||||
return find_subtree(it, path, pathlen, 1);
|
return find_subtree(it, path, pathlen, 1);
|
||||||
}
|
}
|
||||||
|
|
||||||
void cache_tree_invalidate_path(struct cache_tree *it, const char *path)
|
static int do_invalidate_path(struct cache_tree *it, const char *path)
|
||||||
{
|
{
|
||||||
/* a/b/c
|
/* a/b/c
|
||||||
* ==> invalidate self
|
* ==> invalidate self
|
||||||
@ -116,7 +116,7 @@ void cache_tree_invalidate_path(struct cache_tree *it, const char *path)
|
|||||||
#endif
|
#endif
|
||||||
|
|
||||||
if (!it)
|
if (!it)
|
||||||
return;
|
return 0;
|
||||||
slash = strchrnul(path, '/');
|
slash = strchrnul(path, '/');
|
||||||
namelen = slash - path;
|
namelen = slash - path;
|
||||||
it->entry_count = -1;
|
it->entry_count = -1;
|
||||||
@ -137,11 +137,18 @@ void cache_tree_invalidate_path(struct cache_tree *it, const char *path)
|
|||||||
(it->subtree_nr - pos - 1));
|
(it->subtree_nr - pos - 1));
|
||||||
it->subtree_nr--;
|
it->subtree_nr--;
|
||||||
}
|
}
|
||||||
return;
|
return 1;
|
||||||
}
|
}
|
||||||
down = find_subtree(it, path, namelen, 0);
|
down = find_subtree(it, path, namelen, 0);
|
||||||
if (down)
|
if (down)
|
||||||
cache_tree_invalidate_path(down->cache_tree, slash + 1);
|
do_invalidate_path(down->cache_tree, slash + 1);
|
||||||
|
return 1;
|
||||||
|
}
|
||||||
|
|
||||||
|
void cache_tree_invalidate_path(struct index_state *istate, const char *path)
|
||||||
|
{
|
||||||
|
if (do_invalidate_path(istate->cache_tree, path))
|
||||||
|
istate->cache_changed |= CACHE_TREE_CHANGED;
|
||||||
}
|
}
|
||||||
|
|
||||||
static int verify_cache(const struct cache_entry * const *cache,
|
static int verify_cache(const struct cache_entry * const *cache,
|
||||||
|
@ -23,7 +23,7 @@ struct cache_tree {
|
|||||||
|
|
||||||
struct cache_tree *cache_tree(void);
|
struct cache_tree *cache_tree(void);
|
||||||
void cache_tree_free(struct cache_tree **);
|
void cache_tree_free(struct cache_tree **);
|
||||||
void cache_tree_invalidate_path(struct cache_tree *, 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 *);
|
||||||
|
|
||||||
void cache_tree_write(struct strbuf *, struct cache_tree *root);
|
void cache_tree_write(struct strbuf *, struct cache_tree *root);
|
||||||
|
1
cache.h
1
cache.h
@ -273,6 +273,7 @@ static inline unsigned int canon_mode(unsigned int mode)
|
|||||||
#define CE_ENTRY_REMOVED (1 << 2)
|
#define CE_ENTRY_REMOVED (1 << 2)
|
||||||
#define CE_ENTRY_ADDED (1 << 3)
|
#define CE_ENTRY_ADDED (1 << 3)
|
||||||
#define RESOLVE_UNDO_CHANGED (1 << 4)
|
#define RESOLVE_UNDO_CHANGED (1 << 4)
|
||||||
|
#define CACHE_TREE_CHANGED (1 << 5)
|
||||||
|
|
||||||
struct index_state {
|
struct index_state {
|
||||||
struct cache_entry **cache;
|
struct cache_entry **cache;
|
||||||
|
@ -65,7 +65,7 @@ void rename_index_entry_at(struct index_state *istate, int nr, const char *new_n
|
|||||||
new->ce_namelen = namelen;
|
new->ce_namelen = namelen;
|
||||||
memcpy(new->name, new_name, namelen + 1);
|
memcpy(new->name, new_name, namelen + 1);
|
||||||
|
|
||||||
cache_tree_invalidate_path(istate->cache_tree, old->name);
|
cache_tree_invalidate_path(istate, old->name);
|
||||||
remove_index_entry_at(istate, nr);
|
remove_index_entry_at(istate, nr);
|
||||||
add_index_entry(istate, new, ADD_CACHE_OK_TO_ADD|ADD_CACHE_OK_TO_REPLACE);
|
add_index_entry(istate, new, ADD_CACHE_OK_TO_ADD|ADD_CACHE_OK_TO_REPLACE);
|
||||||
}
|
}
|
||||||
@ -521,7 +521,7 @@ int remove_file_from_index(struct index_state *istate, const char *path)
|
|||||||
int pos = index_name_pos(istate, path, strlen(path));
|
int pos = index_name_pos(istate, path, strlen(path));
|
||||||
if (pos < 0)
|
if (pos < 0)
|
||||||
pos = -pos-1;
|
pos = -pos-1;
|
||||||
cache_tree_invalidate_path(istate->cache_tree, path);
|
cache_tree_invalidate_path(istate, path);
|
||||||
while (pos < istate->cache_nr && !strcmp(istate->cache[pos]->name, path))
|
while (pos < istate->cache_nr && !strcmp(istate->cache[pos]->name, path))
|
||||||
remove_index_entry_at(istate, pos);
|
remove_index_entry_at(istate, pos);
|
||||||
return 0;
|
return 0;
|
||||||
@ -939,7 +939,7 @@ static int add_index_entry_with_check(struct index_state *istate, struct cache_e
|
|||||||
int skip_df_check = option & ADD_CACHE_SKIP_DFCHECK;
|
int skip_df_check = option & ADD_CACHE_SKIP_DFCHECK;
|
||||||
int new_only = option & ADD_CACHE_NEW_ONLY;
|
int new_only = option & ADD_CACHE_NEW_ONLY;
|
||||||
|
|
||||||
cache_tree_invalidate_path(istate->cache_tree, ce->name);
|
cache_tree_invalidate_path(istate, ce->name);
|
||||||
pos = index_name_stage_pos(istate, ce->name, ce_namelen(ce), ce_stage(ce));
|
pos = index_name_stage_pos(istate, ce->name, ce_namelen(ce), ce_stage(ce));
|
||||||
|
|
||||||
/* existing match? Just replace it. */
|
/* existing match? Just replace it. */
|
||||||
|
@ -1263,7 +1263,7 @@ static void invalidate_ce_path(const struct cache_entry *ce,
|
|||||||
struct unpack_trees_options *o)
|
struct unpack_trees_options *o)
|
||||||
{
|
{
|
||||||
if (ce)
|
if (ce)
|
||||||
cache_tree_invalidate_path(o->src_index->cache_tree, ce->name);
|
cache_tree_invalidate_path(o->src_index, ce->name);
|
||||||
}
|
}
|
||||||
|
|
||||||
/*
|
/*
|
||||||
|
Reference in New Issue
Block a user