]> git.ipfire.org Git - thirdparty/git.git/commitdiff
name-hash: don't add sparse directories in threaded lazy init
authorAlex Mironov <alexandrfox@gmail.com>
Wed, 21 May 2025 21:29:31 +0000 (21:29 +0000)
committerJunio C Hamano <gitster@pobox.com>
Wed, 21 May 2025 21:51:08 +0000 (14:51 -0700)
Ensure that logic added in 5f11669586 (name-hash: don't add directories
to name_hash, 2021-04-12) also applies in multithreaded hashtable init
path.

As per the original single-threaded change above: sparse directory entries
represent a directory that is outside the sparse-checkout definition.
These are not paths to blobs, so should not be added to the name_hash
table. Instead, they should be added to the directory hashtable when
'ignore_case' is true.

Add a condition to avoid placing sparse directories into the name_hash
hashtable. This avoids filling the table with extra entries that will
never be queried.

Signed-off-by: Alex Mironov <alexandrfox@gmail.com>
Signed-off-by: Junio C Hamano <gitster@pobox.com>
name-hash.c

index d66de1cdfd563336f468817306664dea9a4a9e7a..b91e276267891e67d6efce3c26a744bb95eac371 100644 (file)
@@ -492,8 +492,10 @@ static void *lazy_name_thread_proc(void *_data)
        for (k = 0; k < d->istate->cache_nr; k++) {
                struct cache_entry *ce_k = d->istate->cache[k];
                ce_k->ce_flags |= CE_HASHED;
-               hashmap_entry_init(&ce_k->ent, d->lazy_entries[k].hash_name);
-               hashmap_add(&d->istate->name_hash, &ce_k->ent);
+               if (!S_ISSPARSEDIR(ce_k->ce_mode)) {
+                       hashmap_entry_init(&ce_k->ent, d->lazy_entries[k].hash_name);
+                       hashmap_add(&d->istate->name_hash, &ce_k->ent);
+               }
        }
 
        return NULL;