read-cache: add invalidate parameter to remove_marked_cache_entries

When marking cache entries for removal, and later removing them all at once using 'remove_marked_cache_entries()', cache entries currently have to be invalidated manually in the cache tree and in the untracked cache. Add an invalidate flag to the function. With the flag set, the function will take care of invalidating the path in the cache tree and in the untracked cache. Note that the current callsites already do the invalidation properly in other places, so we're just passing 0 from there to keep the status quo. This will be useful in a subsequent commit. Signed-off-by: Thomas Gummerer <t.gummerer@gmail.com> Signed-off-by: Junio C Hamano <gitster@pobox.com>

Thomas Gummerer committed Dec 20, 2018 at 13:48 UTC 6fdc2057225ad1ae735ecaacdcace77c8b0b6b76
4 files changed +10 -4
cache.h
+1 -1
@@ -751,7 +751,7 @@ extern void rename_index_entry_at(struct index_state *, int pos, const char *new
751 /* Remove entry, return true if there are more entries to go. */
752 extern int remove_index_entry_at(struct index_state *, int pos);
753
754 -extern void remove_marked_cache_entries(struct index_state *istate);
754 +extern void remove_marked_cache_entries(struct index_state *istate, int invalidate);
755 extern int remove_file_from_index(struct index_state *, const char *path);
756 #define ADD_CACHE_VERBOSE 1
757 #define ADD_CACHE_PRETEND 2
read-cache.c
+7 -1
@@ -590,13 +590,19 @@ int remove_index_entry_at(struct index_state *istate, int pos)
590 * CE_REMOVE is set in ce_flags. This is much more effective than
591 * calling remove_index_entry_at() for each entry to be removed.
592 */
593 -void remove_marked_cache_entries(struct index_state *istate)
593 +void remove_marked_cache_entries(struct index_state *istate, int invalidate)
594 {
595 struct cache_entry **ce_array = istate->cache;
596 unsigned int i, j;
597
598 for (i = j = 0; i < istate->cache_nr; i++) {
599 if (ce_array[i]->ce_flags & CE_REMOVE) {
600 + if (invalidate) {
601 + cache_tree_invalidate_path(istate,
602 + ce_array[i]->name);
603 + untracked_cache_remove_from_index(istate,
604 + ce_array[i]->name);
605 + }
606 remove_name_hash(istate, ce_array[i]);
607 save_or_free_index_entry(istate, ce_array[i]);
608 }
split-index.c
+1 -1
@@ -162,7 +162,7 @@ void merge_base_index(struct index_state *istate)
162 ewah_each_bit(si->replace_bitmap, replace_entry, istate);
163 ewah_each_bit(si->delete_bitmap, mark_entry_for_delete, istate);
164 if (si->nr_deletions)
165 - remove_marked_cache_entries(istate);
165 + remove_marked_cache_entries(istate, 0);
166
167 for (i = si->nr_replacements; i < si->saved_cache_nr; i++) {
168 if (!ce_namelen(si->saved_cache[i]))
unpack-trees.c
+1 -1
@@ -392,7 +392,7 @@ static int check_updates(struct unpack_trees_options *o)
392 unlink_entry(ce);
393 }
394 }
395 - remove_marked_cache_entries(index);
395 + remove_marked_cache_entries(index, 0);
396 remove_scheduled_dirs();
397
398 if (should_update_submodules() && o->update && !o->dry_run)