]> git.ipfire.org Git - thirdparty/git.git/commitdiff
read-cache: add invalidate parameter to remove_marked_cache_entries
authorThomas Gummerer <t.gummerer@gmail.com>
Thu, 20 Dec 2018 13:48:16 +0000 (13:48 +0000)
committerJunio C Hamano <gitster@pobox.com>
Wed, 2 Jan 2019 23:28:05 +0000 (15:28 -0800)
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>
cache.h
read-cache.c
split-index.c
unpack-trees.c

diff --git a/cache.h b/cache.h
index c1c953e810abcc506d05cd26c21d389418dd17c6..1deee48f5bff74226eb4f1ed21bc607a98d85b9e 100644 (file)
--- a/cache.h
+++ b/cache.h
@@ -751,7 +751,7 @@ extern void rename_index_entry_at(struct index_state *, int pos, const char *new
 /* Remove entry, return true if there are more entries to go. */
 extern int remove_index_entry_at(struct index_state *, int pos);
 
-extern void remove_marked_cache_entries(struct index_state *istate);
+extern void remove_marked_cache_entries(struct index_state *istate, int invalidate);
 extern int remove_file_from_index(struct index_state *, const char *path);
 #define ADD_CACHE_VERBOSE 1
 #define ADD_CACHE_PRETEND 2
index bd45dc3e24d7dc28820d26cc6e6d377f92fda46d..978d43f6763999c90845eefb5912135ee1a76d47 100644 (file)
@@ -590,13 +590,19 @@ int remove_index_entry_at(struct index_state *istate, int pos)
  * CE_REMOVE is set in ce_flags.  This is much more effective than
  * calling remove_index_entry_at() for each entry to be removed.
  */
-void remove_marked_cache_entries(struct index_state *istate)
+void remove_marked_cache_entries(struct index_state *istate, int invalidate)
 {
        struct cache_entry **ce_array = istate->cache;
        unsigned int i, j;
 
        for (i = j = 0; i < istate->cache_nr; i++) {
                if (ce_array[i]->ce_flags & CE_REMOVE) {
+                       if (invalidate) {
+                               cache_tree_invalidate_path(istate,
+                                                          ce_array[i]->name);
+                               untracked_cache_remove_from_index(istate,
+                                                                 ce_array[i]->name);
+                       }
                        remove_name_hash(istate, ce_array[i]);
                        save_or_free_index_entry(istate, ce_array[i]);
                }
index 5820412dc5203032d1247575d79c6107a163295a..8aebc3661bebf0da236a2c06633c241520f685e0 100644 (file)
@@ -162,7 +162,7 @@ void merge_base_index(struct index_state *istate)
        ewah_each_bit(si->replace_bitmap, replace_entry, istate);
        ewah_each_bit(si->delete_bitmap, mark_entry_for_delete, istate);
        if (si->nr_deletions)
-               remove_marked_cache_entries(istate);
+               remove_marked_cache_entries(istate, 0);
 
        for (i = si->nr_replacements; i < si->saved_cache_nr; i++) {
                if (!ce_namelen(si->saved_cache[i]))
index e8d1a6ac504ec04be62dbb26998c1cf79a6901da..8e6afa924d184c526be753c9a6344b4d53a48d57 100644 (file)
@@ -392,7 +392,7 @@ static int check_updates(struct unpack_trees_options *o)
                                unlink_entry(ce);
                }
        }
-       remove_marked_cache_entries(index);
+       remove_marked_cache_entries(index, 0);
        remove_scheduled_dirs();
 
        if (should_update_submodules() && o->update && !o->dry_run)