]> git.ipfire.org Git - thirdparty/git.git/blobdiff - name-hash.c
reftable: reftable file level tests
[thirdparty/git.git] / name-hash.c
index 4e03fac9bb12599d897cc54c7154eceab267784d..7487d331240e2aa25d1ecfbe22cee9eb4998df50 100644 (file)
@@ -8,6 +8,7 @@
 #include "cache.h"
 #include "thread-utils.h"
 #include "trace2.h"
+#include "sparse-index.h"
 
 struct dir_entry {
        struct hashmap_entry ent;
@@ -109,8 +110,11 @@ static void hash_index_entry(struct index_state *istate, struct cache_entry *ce)
        if (ce->ce_flags & CE_HASHED)
                return;
        ce->ce_flags |= CE_HASHED;
-       hashmap_entry_init(&ce->ent, memihash(ce->name, ce_namelen(ce)));
-       hashmap_add(&istate->name_hash, &ce->ent);
+
+       if (!S_ISSPARSEDIR(ce->ce_mode)) {
+               hashmap_entry_init(&ce->ent, memihash(ce->name, ce_namelen(ce)));
+               hashmap_add(&istate->name_hash, &ce->ent);
+       }
 
        if (ignore_case)
                add_dir_entry(istate, ce);
@@ -225,7 +229,7 @@ static void init_dir_mutex(void)
 {
        int j;
 
-       lazy_dir_mutex_array = xcalloc(LAZY_MAX_MUTEX, sizeof(pthread_mutex_t));
+       CALLOC_ARRAY(lazy_dir_mutex_array, LAZY_MAX_MUTEX);
 
        for (j = 0; j < LAZY_MAX_MUTEX; j++)
                init_recursive_mutex(&lazy_dir_mutex_array[j]);
@@ -514,9 +518,9 @@ static void threaded_lazy_init_name_hash(
        k_start = 0;
        nr_each = DIV_ROUND_UP(istate->cache_nr, lazy_nr_dir_threads);
 
-       lazy_entries = xcalloc(istate->cache_nr, sizeof(struct lazy_entry));
-       td_dir = xcalloc(lazy_nr_dir_threads, sizeof(struct lazy_dir_thread_data));
-       td_name = xcalloc(1, sizeof(struct lazy_name_thread_data));
+       CALLOC_ARRAY(lazy_entries, istate->cache_nr);
+       CALLOC_ARRAY(td_dir, lazy_nr_dir_threads);
+       CALLOC_ARRAY(td_name, 1);
 
        init_dir_mutex();
 
@@ -680,6 +684,7 @@ int index_dir_exists(struct index_state *istate, const char *name, int namelen)
        struct dir_entry *dir;
 
        lazy_init_name_hash(istate);
+       expand_to_path(istate, name, namelen, 0);
        dir = find_dir_entry(istate, name, namelen);
        return dir && dir->nr;
 }
@@ -690,6 +695,7 @@ void adjust_dirname_case(struct index_state *istate, char *name)
        const char *ptr = startPtr;
 
        lazy_init_name_hash(istate);
+       expand_to_path(istate, name, strlen(name), 0);
        while (*ptr) {
                while (*ptr && *ptr != '/')
                        ptr++;
@@ -713,6 +719,7 @@ struct cache_entry *index_file_exists(struct index_state *istate, const char *na
        unsigned int hash = memihash(name, namelen);
 
        lazy_init_name_hash(istate);
+       expand_to_path(istate, name, namelen, icase);
 
        ce = hashmap_get_entry_from_hash(&istate->name_hash, hash, NULL,
                                         struct cache_entry, ent);