[PATCH 13/14] refs/iterator: implement seeking for "files" iterators
- From
Patrick Steinhardt <ps@pks.im>
- Date
- Feb 17, 2025, 15:50 UTC
- Message-ID
- <20250217-pks-update-ref-optimization-v1-13-a2b6d87a24af@pks.im>
- In-Reply-To
- <20250217-pks-update-ref-optimization-v1-0-a2b6d87a24af@pks.im>
Implement seeking for "files" iterators. As we simply use a ref-cache iterator under the hood the implementation is straight-forward. Note that we do not implement seeking on reflog iterators, same as with the "reftable" backend.
Signed-off-by: Patrick Steinhardt <ps@pks.im> --- refs/files-backend.c | 16 ++++++++++++++++ 1 file changed, 16 insertions(+)
diff --git a/refs/files-backend.c b/refs/files-backend.c index 9511b6f3448..acc28e1ad81 100644 --- a/refs/files-backend.c +++ b/refs/files-backend.c @@ -922,6 +922,14 @@ static int files_ref_iterator_advance(struct ref_iterator *ref_iterator) return ok; } +static int files_ref_iterator_seek(struct ref_iterator *ref_iterator, + const char *prefix) +{ + struct files_ref_iterator *iter = + (struct files_ref_iterator *)ref_iterator; + return ref_iterator_seek(iter->iter0, prefix); +} + static int files_ref_iterator_peel(struct ref_iterator *ref_iterator, struct object_id *peeled) { @@ -940,6 +948,7 @@ static void files_ref_iterator_release(struct ref_iterator *ref_iterator) static struct ref_iterator_vtable files_ref_iterator_vtable = { .advance = files_ref_iterator_advance, + .seek = files_ref_iterator_seek, .peel = files_ref_iterator_peel, .release = files_ref_iterator_release, }; @@ -2298,6 +2307,12 @@ static int files_reflog_iterator_advance(struct ref_iterator *ref_iterator) return ok; } +static int files_reflog_iterator_seek(struct ref_iterator *ref_iterator UNUSED, + const char *prefix UNUSED) +{ + BUG("ref_iterator_seek() called for reflog_iterator"); +} + static int files_reflog_iterator_peel(struct ref_iterator *ref_iterator UNUSED, struct object_id *peeled UNUSED) { @@ -2313,6 +2328,7 @@ static void files_reflog_iterator_release(struct ref_iterator *ref_iterator) static struct ref_iterator_vtable files_reflog_iterator_vtable = { .advance = files_reflog_iterator_advance, + .seek = files_reflog_iterator_seek, .peel = files_reflog_iterator_peel, .release = files_reflog_iterator_release, };
-- 2.48.1.666.gff9fcf71b7.dirty