diff options
author | Junio C Hamano <gitster@pobox.com> | 2024-03-05 09:09:46 -0800 |
---|---|---|
committer | Junio C Hamano <gitster@pobox.com> | 2024-03-05 09:09:46 -0800 |
commit | 2efe7958d6b3119a4471d718ee530b296b5d50b6 (patch) | |
tree | e1fb958ece45688347ee20a9d848cf9982d8326e /refs | |
parent | b387623c12f3f4a376e4d35a610fd3e55d7ea907 (diff) | |
parent | 43f70eaea0e3fa9d98c895e9341674a67262b657 (diff) | |
download | git-2efe7958d6b3119a4471d718ee530b296b5d50b6.tar.gz |
Merge branch 'ps/reftable-iteration-perf-part2' into ps/reftable-reflog-iteration-perf
* 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 6c11c4a5e3..249a618b5a 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; }; @@ -371,8 +372,8 @@ static int reftable_ref_iterator_advance(struct ref_iterator *ref_iterator) if (!starts_with(iter->ref.refname, "refs/")) 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; } @@ -481,6 +482,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; |