refs/iterator: implement seeking for files iterators
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> Signed-off-by: Junio C Hamano <gitster@pobox.com>
Patrick Steinhardt committed
Mar 12, 2025 at 16:56 UTC
a95da5c8aec733c5b2e051bdfaa451f11570e87a
1 file changed
+16
refs/files-backend.c
+16
@@ -918,6 +918,14 @@ static int files_ref_iterator_advance(struct ref_iterator *ref_iterator)
918
return ok;
919
}
920
921
+static int files_ref_iterator_seek(struct ref_iterator *ref_iterator,
922
+ const char *prefix)
923
+{
924
+ struct files_ref_iterator *iter =
925
+ (struct files_ref_iterator *)ref_iterator;
926
+ return ref_iterator_seek(iter->iter0, prefix);
927
+}
928
+
929
static int files_ref_iterator_peel(struct ref_iterator *ref_iterator,
930
struct object_id *peeled)
931
{
@@ -936,6 +944,7 @@ static void files_ref_iterator_release(struct ref_iterator *ref_iterator)
944
945
static struct ref_iterator_vtable files_ref_iterator_vtable = {
946
.advance = files_ref_iterator_advance,
947
+ .seek = files_ref_iterator_seek,
948
.peel = files_ref_iterator_peel,
949
.release = files_ref_iterator_release,
950
};
@@ -2294,6 +2303,12 @@ static int files_reflog_iterator_advance(struct ref_iterator *ref_iterator)
2303
return ok;
2304
}
2305
2306
+static int files_reflog_iterator_seek(struct ref_iterator *ref_iterator UNUSED,
2307
+ const char *prefix UNUSED)
2308
+{
2309
+ BUG("ref_iterator_seek() called for reflog_iterator");
2310
+}
2311
+
2312
static int files_reflog_iterator_peel(struct ref_iterator *ref_iterator UNUSED,
2313
struct object_id *peeled UNUSED)
2314
{
@@ -2309,6 +2324,7 @@ static void files_reflog_iterator_release(struct ref_iterator *ref_iterator)
2324
2325
static struct ref_iterator_vtable files_reflog_iterator_vtable = {
2326
.advance = files_reflog_iterator_advance,
2327
+ .seek = files_reflog_iterator_seek,
2328
.peel = files_reflog_iterator_peel,
2329
.release = files_reflog_iterator_release,
2330
};