Git fork

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>

authored by

Patrick Steinhardt and committed by
Junio C Hamano
a95da5c8 22600c04

+16
+16
refs/files-backend.c
··· 918 918 return ok; 919 919 } 920 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 + 921 929 static int files_ref_iterator_peel(struct ref_iterator *ref_iterator, 922 930 struct object_id *peeled) 923 931 { ··· 936 944 937 945 static struct ref_iterator_vtable files_ref_iterator_vtable = { 938 946 .advance = files_ref_iterator_advance, 947 + .seek = files_ref_iterator_seek, 939 948 .peel = files_ref_iterator_peel, 940 949 .release = files_ref_iterator_release, 941 950 }; ··· 2294 2303 return ok; 2295 2304 } 2296 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 + 2297 2312 static int files_reflog_iterator_peel(struct ref_iterator *ref_iterator UNUSED, 2298 2313 struct object_id *peeled UNUSED) 2299 2314 { ··· 2309 2324 2310 2325 static struct ref_iterator_vtable files_reflog_iterator_vtable = { 2311 2326 .advance = files_reflog_iterator_advance, 2327 + .seek = files_reflog_iterator_seek, 2312 2328 .peel = files_reflog_iterator_peel, 2313 2329 .release = files_reflog_iterator_release, 2314 2330 };