Don't sort ref_list too early
get_ref_dir is called recursively for subdirectories, which means that we were calling sort_ref_list for each directory of refs instead of once for all the refs. This is a massive wast of processing, so now just call sort_ref_list on the result of the top-level get_ref_dir, so that the sort is only done once. In the common case of only a few different directories of refs the difference isn't very noticable, but it becomes very noticeable when you have a large number of direcotries containing refs (e.g. as created by Gerrit). Reported by Martin Fick. Signed-off-by: Julian Phillips <julian@quantumfyre.co.uk> Signed-off-by: Junio C Hamano <gitster@pobox.com>
This commit is contained in:
parent
7ed863a85a
commit
b4f223c636
4
refs.c
4
refs.c
@ -319,7 +319,7 @@ static struct ref_list *get_ref_dir(const char *submodule, const char *base,
|
|||||||
free(ref);
|
free(ref);
|
||||||
closedir(dir);
|
closedir(dir);
|
||||||
}
|
}
|
||||||
return sort_ref_list(list);
|
return list;
|
||||||
}
|
}
|
||||||
|
|
||||||
struct warn_if_dangling_data {
|
struct warn_if_dangling_data {
|
||||||
@ -361,11 +361,13 @@ static struct ref_list *get_loose_refs(const char *submodule)
|
|||||||
if (submodule) {
|
if (submodule) {
|
||||||
free_ref_list(submodule_refs.loose);
|
free_ref_list(submodule_refs.loose);
|
||||||
submodule_refs.loose = get_ref_dir(submodule, "refs", NULL);
|
submodule_refs.loose = get_ref_dir(submodule, "refs", NULL);
|
||||||
|
submodule_refs.loose = sort_ref_list(submodule_refs.loose);
|
||||||
return submodule_refs.loose;
|
return submodule_refs.loose;
|
||||||
}
|
}
|
||||||
|
|
||||||
if (!cached_refs.did_loose) {
|
if (!cached_refs.did_loose) {
|
||||||
cached_refs.loose = get_ref_dir(NULL, "refs", NULL);
|
cached_refs.loose = get_ref_dir(NULL, "refs", NULL);
|
||||||
|
cached_refs.loose = sort_ref_list(cached_refs.loose);
|
||||||
cached_refs.did_loose = 1;
|
cached_refs.did_loose = 1;
|
||||||
}
|
}
|
||||||
return cached_refs.loose;
|
return cached_refs.loose;
|
||||||
|
Loading…
Reference in New Issue
Block a user