Welcome to mirror list, hosted at ThFree Co, Russian Federation.

git.kernel.org/pub/scm/git/git.git - Unnamed repository; edit this file 'description' to name the repository.
summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorJunio C Hamano <gitster@pobox.com>2021-02-06 03:40:45 +0300
committerJunio C Hamano <gitster@pobox.com>2021-02-06 03:40:45 +0300
commit6254fa13596cee0ea645317ba3eb4552430f38b4 (patch)
tree478d0213d0acbaed6cec84a10a92670520b736bd /ls-refs.c
parent5198426d914ae15b52f85958c224a92f48e4f95e (diff)
parentb3970c702cb0acc0551d88a5f34ad4ad2e2a6d39 (diff)
Merge branch 'tb/ls-refs-optim'
The ls-refs protocol operation has been optimized to narrow the sub-hierarchy of refs/ it walks to produce response. * tb/ls-refs-optim: ls-refs.c: traverse prefixes of disjoint "ref-prefix" sets ls-refs.c: initialize 'prefixes' before using it refs: expose 'for_each_fullref_in_prefixes'
Diffstat (limited to 'ls-refs.c')
-rw-r--r--ls-refs.c6
1 files changed, 5 insertions, 1 deletions
diff --git a/ls-refs.c b/ls-refs.c
index 7b9ae6498b..5ff5473869 100644
--- a/ls-refs.c
+++ b/ls-refs.c
@@ -90,6 +90,7 @@ int ls_refs(struct repository *r, struct strvec *keys,
struct ls_refs_data data;
memset(&data, 0, sizeof(data));
+ strvec_init(&data.prefixes);
git_config(ls_refs_config, NULL);
@@ -109,7 +110,10 @@ int ls_refs(struct repository *r, struct strvec *keys,
die(_("expected flush after ls-refs arguments"));
head_ref_namespaced(send_ref, &data);
- for_each_namespaced_ref(send_ref, &data);
+ if (!data.prefixes.nr)
+ strvec_push(&data.prefixes, "");
+ for_each_fullref_in_prefixes(get_git_namespace(), data.prefixes.v,
+ send_ref, &data, 0);
packet_flush(1);
strvec_clear(&data.prefixes);
return 0;