Skip to content

Commit

Permalink
Name hash fixups: export (and rename) remove_hash_entry
Browse files Browse the repository at this point in the history
This makes the name hash removal function (which really just sets the
bit that disables lookups of it) available to external routines, and
makes read_cache_unmerged() use it when it drops an unmerged entry from
the index.

It's renamed to remove_index_entry(), and we drop the (unused) 'istate'
argument.

Signed-off-by: Linus Torvalds <torvalds@linux-foundation.org>
Signed-off-by: Junio C Hamano <gitster@pobox.com>
  • Loading branch information
Linus Torvalds authored and Junio C Hamano committed Feb 23, 2008
1 parent a22c637 commit d070e3a
Show file tree
Hide file tree
Showing 3 changed files with 17 additions and 16 deletions.
1 change: 1 addition & 0 deletions builtin-read-tree.c
Original file line number Diff line number Diff line change
Expand Up @@ -41,6 +41,7 @@ static int read_cache_unmerged(void)
for (i = 0; i < active_nr; i++) {
struct cache_entry *ce = active_cache[i];
if (ce_stage(ce)) {
remove_index_entry(ce);
if (last && !strcmp(ce->name, last->name))
continue;
cache_tree_invalidate_path(active_cache_tree, ce->name);
Expand Down
14 changes: 14 additions & 0 deletions cache.h
Original file line number Diff line number Diff line change
Expand Up @@ -137,6 +137,20 @@ struct cache_entry {
#define CE_HASHED (0x100000)
#define CE_UNHASHED (0x200000)

/*
* We don't actually *remove* it, we can just mark it invalid so that
* we won't find it in lookups.
*
* Not only would we have to search the lists (simple enough), but
* we'd also have to rehash other hash buckets in case this makes the
* hash bucket empty (common). So it's much better to just mark
* it.
*/
static inline void remove_index_entry(struct cache_entry *ce)
{
ce->ce_flags |= CE_UNHASHED;
}

static inline unsigned create_ce_flags(size_t len, unsigned stage)
{
if (len >= CE_NAMEMASK)
Expand Down
18 changes: 2 additions & 16 deletions read-cache.c
Original file line number Diff line number Diff line change
Expand Up @@ -70,25 +70,11 @@ static void set_index_entry(struct index_state *istate, int nr, struct cache_ent
hash_index_entry(istate, ce);
}

/*
* We don't actually *remove* it, we can just mark it invalid so that
* we won't find it in lookups.
*
* Not only would we have to search the lists (simple enough), but
* we'd also have to rehash other hash buckets in case this makes the
* hash bucket empty (common). So it's much better to just mark
* it.
*/
static void remove_hash_entry(struct index_state *istate, struct cache_entry *ce)
{
ce->ce_flags |= CE_UNHASHED;
}

static void replace_index_entry(struct index_state *istate, int nr, struct cache_entry *ce)
{
struct cache_entry *old = istate->cache[nr];

remove_hash_entry(istate, old);
remove_index_entry(old);
set_index_entry(istate, nr, ce);
istate->cache_changed = 1;
}
Expand Down Expand Up @@ -417,7 +403,7 @@ int remove_index_entry_at(struct index_state *istate, int pos)
{
struct cache_entry *ce = istate->cache[pos];

remove_hash_entry(istate, ce);
remove_index_entry(ce);
istate->cache_changed = 1;
istate->cache_nr--;
if (pos >= istate->cache_nr)
Expand Down

0 comments on commit d070e3a

Please sign in to comment.