[PATCH 00/17] odb: make object database sources pluggable
- From
Patrick Steinhardt <ps@pks.im>
- Date
- Feb 23, 2026, 16:17 UTC
- Message-ID
- <20260223-b4-pks-odb-source-pluggable-v1-0-253bac1db598@pks.im>
Hi,
this patch series finally makes the object database source pluggable. This is done by moving backend-specific logics into callback functions that are part of `struct odb_source` and providing thin wrappers that call those functions.
To set expectations: this is only a start, there is still functionality missing that needs to be made pluggable. Most importantly:
- Counting of objects.
- Abbreviating object IDs and finding ambiguous objects.
- Consistency checks.
- Optimizing the object database.
- Generating packfiles.
These will all happen in later patch series. That being said, with this patch series one already gets a lot of the basic functionality, and it's almost possible to do local workflows. Only "almost" though because we rely on abbreviating object IDs in a lot of places, but once that part is implemented in a subsequent patch series you can indeed work locally with an alternate backend.
Furthermore, what I didn't include as part of this patch series just yet is the introduction of the "objectStorage" extension. I mostly wanted to focus on the mostly-trivial parts without introducing any change in behaviour.
Thanks!
Patrick
---
Patrick Steinhardt (17):
odb: split `struct odb_source` into separate header
odb: introduce "files" source
odb: embed base source in the "files" backend
odb: move reparenting logic into respective subsystems
odb/source: introduce source type for robustness
odb/source: make `free()` function pluggable
odb/source: make `reprepare()` function pluggable
odb/source: make `close()` function pluggable
odb/source: make `read_object_info()` function pluggable
odb/source: make `read_object_stream()` function pluggable
odb/source: make `for_each_object()` function pluggable
odb/source: make `freshen_object()` function pluggable
odb/source: make `write_object()` function pluggable
odb/source: make `write_object_stream()` function pluggable
odb/source: make `read_alternates()` function pluggable
odb/source: make `write_alternate()` function pluggable
odb/source: make `begin_transaction()` function pluggableMakefile | 2 + builtin/cat-file.c | 3 +- builtin/fast-import.c | 12 +- builtin/grep.c | 6 +- builtin/index-pack.c | 8 +- builtin/pack-objects.c | 13 +- commit-graph.c | 6 +- http.c | 3 +- loose.c | 23 ++- meson.build | 2 + midx.c | 26 +-- object-file.c | 40 +++-- odb.c | 191 +++----------------- odb.h | 86 +-------- odb/source-files.c | 239 +++++++++++++++++++++++++ odb/source-files.h | 35 ++++ odb/source.c | 38 ++++ odb/source.h | 464 +++++++++++++++++++++++++++++++++++++++++++++++++ odb/streaming.c | 8 +- packfile.c | 36 ++-- packfile.h | 7 +- tmp-objdir.c | 42 ++--- tmp-objdir.h | 15 -- 23 files changed, 950 insertions(+), 355 deletions(-)
--- base-commit: 197ce3527e423304844fef02ea067a85c0c75e70 change-id: 20260120-b4-pks-odb-source-pluggable-5c724250b3c8