Name hash fixups: export (and rename) remove_hash_entry
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>maint
							parent
							
								
									a22c637124
								
							
						
					
					
						commit
						d070e3a31b
					
				|  | @ -41,6 +41,7 @@ static int read_cache_unmerged(void) | ||||||
| 	for (i = 0; i < active_nr; i++) { | 	for (i = 0; i < active_nr; i++) { | ||||||
| 		struct cache_entry *ce = active_cache[i]; | 		struct cache_entry *ce = active_cache[i]; | ||||||
| 		if (ce_stage(ce)) { | 		if (ce_stage(ce)) { | ||||||
|  | 			remove_index_entry(ce); | ||||||
| 			if (last && !strcmp(ce->name, last->name)) | 			if (last && !strcmp(ce->name, last->name)) | ||||||
| 				continue; | 				continue; | ||||||
| 			cache_tree_invalidate_path(active_cache_tree, ce->name); | 			cache_tree_invalidate_path(active_cache_tree, ce->name); | ||||||
|  |  | ||||||
							
								
								
									
										14
									
								
								cache.h
								
								
								
								
							
							
						
						
									
										14
									
								
								cache.h
								
								
								
								
							|  | @ -137,6 +137,20 @@ struct cache_entry { | ||||||
| #define CE_HASHED    (0x100000) | #define CE_HASHED    (0x100000) | ||||||
| #define CE_UNHASHED  (0x200000) | #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) | static inline unsigned create_ce_flags(size_t len, unsigned stage) | ||||||
| { | { | ||||||
| 	if (len >= CE_NAMEMASK) | 	if (len >= CE_NAMEMASK) | ||||||
|  |  | ||||||
							
								
								
									
										18
									
								
								read-cache.c
								
								
								
								
							
							
						
						
									
										18
									
								
								read-cache.c
								
								
								
								
							|  | @ -70,25 +70,11 @@ static void set_index_entry(struct index_state *istate, int nr, struct cache_ent | ||||||
| 		hash_index_entry(istate, ce); | 		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) | static void replace_index_entry(struct index_state *istate, int nr, struct cache_entry *ce) | ||||||
| { | { | ||||||
| 	struct cache_entry *old = istate->cache[nr]; | 	struct cache_entry *old = istate->cache[nr]; | ||||||
|  |  | ||||||
| 	remove_hash_entry(istate, old); | 	remove_index_entry(old); | ||||||
| 	set_index_entry(istate, nr, ce); | 	set_index_entry(istate, nr, ce); | ||||||
| 	istate->cache_changed = 1; | 	istate->cache_changed = 1; | ||||||
| } | } | ||||||
|  | @ -417,7 +403,7 @@ int remove_index_entry_at(struct index_state *istate, int pos) | ||||||
| { | { | ||||||
| 	struct cache_entry *ce = istate->cache[pos]; | 	struct cache_entry *ce = istate->cache[pos]; | ||||||
|  |  | ||||||
| 	remove_hash_entry(istate, ce); | 	remove_index_entry(ce); | ||||||
| 	istate->cache_changed = 1; | 	istate->cache_changed = 1; | ||||||
| 	istate->cache_nr--; | 	istate->cache_nr--; | ||||||
| 	if (pos >= istate->cache_nr) | 	if (pos >= istate->cache_nr) | ||||||
|  |  | ||||||
		Loading…
	
		Reference in New Issue
	
	 Linus Torvalds
						Linus Torvalds