]> git.ipfire.org Git - thirdparty/git.git/commitdiff
refs/iterator: implement seeking for files iterators
authorPatrick Steinhardt <ps@pks.im>
Wed, 12 Mar 2025 15:56:21 +0000 (16:56 +0100)
committerJunio C Hamano <gitster@pobox.com>
Wed, 12 Mar 2025 18:31:20 +0000 (11:31 -0700)
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>
refs/files-backend.c

index e97a267ad6520573fe04fce394383c46e123370a..5f921e85eb4ff378fae2c8f5080f14f66c62807f 100644 (file)
@@ -918,6 +918,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)
 {
@@ -936,6 +944,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,
 };
@@ -2294,6 +2303,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)
 {
@@ -2309,6 +2324,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,
 };