diff options
| author | Junio C Hamano <gitster@pobox.com> | 2024-03-14 14:05:23 -0700 |
|---|---|---|
| committer | Junio C Hamano <gitster@pobox.com> | 2024-03-14 14:05:23 -0700 |
| commit | 448a74e1515ca63bc0877a0461624d7beb1bec2e (patch) | |
| tree | bddabd939ae62f10a5c4f4c1a3625737edee0c28 /refs | |
| parent | 066124da88a6d43d125b30a1bc8a66c2d8ef6423 (diff) | |
| parent | 43f70eaea0e3fa9d98c895e9341674a67262b657 (diff) | |
| download | git-448a74e1515ca63bc0877a0461624d7beb1bec2e.tar.xz | |
Merge branch 'ps/reftable-iteration-perf-part2'
The code to iterate over refs with the reftable backend has seen
some optimization.
* ps/reftable-iteration-perf-part2:
refs/reftable: precompute prefix length
reftable: allow inlining of a few functions
reftable/record: decode keys in place
reftable/record: reuse refname when copying
reftable/record: reuse refname when decoding
reftable/merged: avoid duplicate pqueue emptiness check
reftable/merged: circumvent pqueue with single subiter
reftable/merged: handle subiter cleanup on close only
reftable/merged: remove unnecessary null check for subiters
reftable/merged: make subiters own their records
reftable/merged: advance subiter on subsequent iteration
reftable/merged: make `merged_iter` structure private
reftable/pq: use `size_t` to track iterator index
Diffstat (limited to 'refs')
| -rw-r--r-- | refs/reftable-backend.c | 6 |
1 files changed, 4 insertions, 2 deletions
diff --git a/refs/reftable-backend.c b/refs/reftable-backend.c index 2c88bbd448..74dab18eda 100644 --- a/refs/reftable-backend.c +++ b/refs/reftable-backend.c @@ -346,6 +346,7 @@ struct reftable_ref_iterator { struct object_id oid; const char *prefix; + size_t prefix_len; unsigned int flags; int err; }; @@ -374,8 +375,8 @@ static int reftable_ref_iterator_advance(struct ref_iterator *ref_iterator) continue; } - if (iter->prefix && - strncmp(iter->prefix, iter->ref.refname, strlen(iter->prefix))) { + if (iter->prefix_len && + strncmp(iter->prefix, iter->ref.refname, iter->prefix_len)) { iter->err = 1; break; } @@ -484,6 +485,7 @@ static struct reftable_ref_iterator *ref_iterator_for_stack(struct reftable_ref_ iter = xcalloc(1, sizeof(*iter)); base_ref_iterator_init(&iter->base, &reftable_ref_iterator_vtable); iter->prefix = prefix; + iter->prefix_len = prefix ? strlen(prefix) : 0; iter->base.oid = &iter->oid; iter->flags = flags; iter->refs = refs; |
