unpack-trees: ensure full index
The next change will translate full indexes into sparse indexes at write time. The existing logic provides a way for every sparse index to be expanded to a full index at read time. However, there are cases where an index is written and then continues to be used in-memory to perform further updates. unpack_trees() is frequently called after such a write. In particular, commands like 'git reset' do this double-update of the index. Ensure that we have a full index when entering unpack_trees(), but only when command_requires_full_index is true. This is always true at the moment, but we will later relax that after unpack_trees() is updated to handle sparse directory entries. Signed-off-by: Derrick Stolee <dstolee@microsoft.com> Signed-off-by: Junio C Hamano <gitster@pobox.com>maint
							parent
							
								
									2782db3eed
								
							
						
					
					
						commit
						6863df3550
					
				|  | @ -1567,6 +1567,7 @@ static int verify_absent(const struct cache_entry *, | ||||||
|  */ |  */ | ||||||
| int unpack_trees(unsigned len, struct tree_desc *t, struct unpack_trees_options *o) | int unpack_trees(unsigned len, struct tree_desc *t, struct unpack_trees_options *o) | ||||||
| { | { | ||||||
|  | 	struct repository *repo = the_repository; | ||||||
| 	int i, ret; | 	int i, ret; | ||||||
| 	static struct cache_entry *dfc; | 	static struct cache_entry *dfc; | ||||||
| 	struct pattern_list pl; | 	struct pattern_list pl; | ||||||
|  | @ -1578,6 +1579,12 @@ int unpack_trees(unsigned len, struct tree_desc *t, struct unpack_trees_options | ||||||
| 	trace_performance_enter(); | 	trace_performance_enter(); | ||||||
| 	trace2_region_enter("unpack_trees", "unpack_trees", the_repository); | 	trace2_region_enter("unpack_trees", "unpack_trees", the_repository); | ||||||
|  |  | ||||||
|  | 	prepare_repo_settings(repo); | ||||||
|  | 	if (repo->settings.command_requires_full_index) { | ||||||
|  | 		ensure_full_index(o->src_index); | ||||||
|  | 		ensure_full_index(o->dst_index); | ||||||
|  | 	} | ||||||
|  |  | ||||||
| 	if (!core_apply_sparse_checkout || !o->update) | 	if (!core_apply_sparse_checkout || !o->update) | ||||||
| 		o->skip_sparse_checkout = 1; | 		o->skip_sparse_checkout = 1; | ||||||
| 	if (!o->skip_sparse_checkout && !o->pl) { | 	if (!o->skip_sparse_checkout && !o->pl) { | ||||||
|  |  | ||||||
		Loading…
	
		Reference in New Issue
	
	 Derrick Stolee
						Derrick Stolee