зеркало из https://github.com/microsoft/git.git
use fspathhash() everywhere
cf2dc1c238
(speed up alt_odb_usable() with many alternates, 2021-07-07)
introduced the function fspathhash() for calculating path hashes while
respecting the configuration option core.ignorecase. Call it instead of
open-coding it; the resulting code is shorter and less repetitive.
Signed-off-by: René Scharfe <l.s.r@web.de>
Signed-off-by: Junio C Hamano <gitster@pobox.com>
This commit is contained in:
Родитель
940fe202ad
Коммит
7431842325
|
@ -380,10 +380,7 @@ static void insert_recursive_pattern(struct pattern_list *pl, struct strbuf *pat
|
||||||
struct pattern_entry *e = xmalloc(sizeof(*e));
|
struct pattern_entry *e = xmalloc(sizeof(*e));
|
||||||
e->patternlen = path->len;
|
e->patternlen = path->len;
|
||||||
e->pattern = strbuf_detach(path, NULL);
|
e->pattern = strbuf_detach(path, NULL);
|
||||||
hashmap_entry_init(&e->ent,
|
hashmap_entry_init(&e->ent, fspathhash(e->pattern));
|
||||||
ignore_case ?
|
|
||||||
strihash(e->pattern) :
|
|
||||||
strhash(e->pattern));
|
|
||||||
|
|
||||||
hashmap_add(&pl->recursive_hashmap, &e->ent);
|
hashmap_add(&pl->recursive_hashmap, &e->ent);
|
||||||
|
|
||||||
|
@ -399,10 +396,7 @@ static void insert_recursive_pattern(struct pattern_list *pl, struct strbuf *pat
|
||||||
e = xmalloc(sizeof(struct pattern_entry));
|
e = xmalloc(sizeof(struct pattern_entry));
|
||||||
e->patternlen = newlen;
|
e->patternlen = newlen;
|
||||||
e->pattern = xstrndup(oldpattern, newlen);
|
e->pattern = xstrndup(oldpattern, newlen);
|
||||||
hashmap_entry_init(&e->ent,
|
hashmap_entry_init(&e->ent, fspathhash(e->pattern));
|
||||||
ignore_case ?
|
|
||||||
strihash(e->pattern) :
|
|
||||||
strhash(e->pattern));
|
|
||||||
|
|
||||||
if (!hashmap_get_entry(&pl->parent_hashmap, e, ent, NULL))
|
if (!hashmap_get_entry(&pl->parent_hashmap, e, ent, NULL))
|
||||||
hashmap_add(&pl->parent_hashmap, &e->ent);
|
hashmap_add(&pl->parent_hashmap, &e->ent);
|
||||||
|
|
13
dir.c
13
dir.c
|
@ -782,9 +782,7 @@ static void add_pattern_to_hashsets(struct pattern_list *pl, struct path_pattern
|
||||||
translated->pattern = truncated;
|
translated->pattern = truncated;
|
||||||
translated->patternlen = given->patternlen - 2;
|
translated->patternlen = given->patternlen - 2;
|
||||||
hashmap_entry_init(&translated->ent,
|
hashmap_entry_init(&translated->ent,
|
||||||
ignore_case ?
|
fspathhash(translated->pattern));
|
||||||
strihash(translated->pattern) :
|
|
||||||
strhash(translated->pattern));
|
|
||||||
|
|
||||||
if (!hashmap_get_entry(&pl->recursive_hashmap,
|
if (!hashmap_get_entry(&pl->recursive_hashmap,
|
||||||
translated, ent, NULL)) {
|
translated, ent, NULL)) {
|
||||||
|
@ -813,9 +811,7 @@ static void add_pattern_to_hashsets(struct pattern_list *pl, struct path_pattern
|
||||||
translated->pattern = dup_and_filter_pattern(given->pattern);
|
translated->pattern = dup_and_filter_pattern(given->pattern);
|
||||||
translated->patternlen = given->patternlen;
|
translated->patternlen = given->patternlen;
|
||||||
hashmap_entry_init(&translated->ent,
|
hashmap_entry_init(&translated->ent,
|
||||||
ignore_case ?
|
fspathhash(translated->pattern));
|
||||||
strihash(translated->pattern) :
|
|
||||||
strhash(translated->pattern));
|
|
||||||
|
|
||||||
hashmap_add(&pl->recursive_hashmap, &translated->ent);
|
hashmap_add(&pl->recursive_hashmap, &translated->ent);
|
||||||
|
|
||||||
|
@ -845,10 +841,7 @@ static int hashmap_contains_path(struct hashmap *map,
|
||||||
/* Check straight mapping */
|
/* Check straight mapping */
|
||||||
p.pattern = pattern->buf;
|
p.pattern = pattern->buf;
|
||||||
p.patternlen = pattern->len;
|
p.patternlen = pattern->len;
|
||||||
hashmap_entry_init(&p.ent,
|
hashmap_entry_init(&p.ent, fspathhash(p.pattern));
|
||||||
ignore_case ?
|
|
||||||
strihash(p.pattern) :
|
|
||||||
strhash(p.pattern));
|
|
||||||
return !!hashmap_get_entry(map, &p, ent, NULL);
|
return !!hashmap_get_entry(map, &p, ent, NULL);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
@ -61,11 +61,6 @@ static int path_hashmap_cmp(const void *cmp_data,
|
||||||
return strcmp(a->path, key ? key : b->path);
|
return strcmp(a->path, key ? key : b->path);
|
||||||
}
|
}
|
||||||
|
|
||||||
static unsigned int path_hash(const char *path)
|
|
||||||
{
|
|
||||||
return ignore_case ? strihash(path) : strhash(path);
|
|
||||||
}
|
|
||||||
|
|
||||||
/*
|
/*
|
||||||
* For dir_rename_entry, directory names are stored as a full path from the
|
* For dir_rename_entry, directory names are stored as a full path from the
|
||||||
* toplevel of the repository and do not include a trailing '/'. Also:
|
* toplevel of the repository and do not include a trailing '/'. Also:
|
||||||
|
@ -463,7 +458,7 @@ static int save_files_dirs(const struct object_id *oid,
|
||||||
strbuf_addstr(base, path);
|
strbuf_addstr(base, path);
|
||||||
|
|
||||||
FLEX_ALLOC_MEM(entry, path, base->buf, base->len);
|
FLEX_ALLOC_MEM(entry, path, base->buf, base->len);
|
||||||
hashmap_entry_init(&entry->e, path_hash(entry->path));
|
hashmap_entry_init(&entry->e, fspathhash(entry->path));
|
||||||
hashmap_add(&opt->priv->current_file_dir_set, &entry->e);
|
hashmap_add(&opt->priv->current_file_dir_set, &entry->e);
|
||||||
|
|
||||||
strbuf_setlen(base, baselen);
|
strbuf_setlen(base, baselen);
|
||||||
|
@ -737,14 +732,14 @@ static char *unique_path(struct merge_options *opt,
|
||||||
|
|
||||||
base_len = newpath.len;
|
base_len = newpath.len;
|
||||||
while (hashmap_get_from_hash(&opt->priv->current_file_dir_set,
|
while (hashmap_get_from_hash(&opt->priv->current_file_dir_set,
|
||||||
path_hash(newpath.buf), newpath.buf) ||
|
fspathhash(newpath.buf), newpath.buf) ||
|
||||||
(!opt->priv->call_depth && file_exists(newpath.buf))) {
|
(!opt->priv->call_depth && file_exists(newpath.buf))) {
|
||||||
strbuf_setlen(&newpath, base_len);
|
strbuf_setlen(&newpath, base_len);
|
||||||
strbuf_addf(&newpath, "_%d", suffix++);
|
strbuf_addf(&newpath, "_%d", suffix++);
|
||||||
}
|
}
|
||||||
|
|
||||||
FLEX_ALLOC_MEM(entry, path, newpath.buf, newpath.len);
|
FLEX_ALLOC_MEM(entry, path, newpath.buf, newpath.len);
|
||||||
hashmap_entry_init(&entry->e, path_hash(entry->path));
|
hashmap_entry_init(&entry->e, fspathhash(entry->path));
|
||||||
hashmap_add(&opt->priv->current_file_dir_set, &entry->e);
|
hashmap_add(&opt->priv->current_file_dir_set, &entry->e);
|
||||||
return strbuf_detach(&newpath, NULL);
|
return strbuf_detach(&newpath, NULL);
|
||||||
}
|
}
|
||||||
|
|
Загрузка…
Ссылка в новой задаче