[PATCH 0/9] object-file: move writing of loose objects into "loose" source
- From
Patrick Steinhardt <ps@pks.im>
- Date
- Jul 17, 2026, 09:32 UTC
- Message-ID
- <20260717-pks-odb-move-loose-object-writing-v1-0-46446a3cb5b7@pks.im>
Hi,
this patch series refactors "object-file.c" so that we can move the logic that writes loose objects into "odb/source-loose.c". This ensures that the logic to read and write loose objects is mostly self-contained within that source's implementation now.
To achieve that, this series first refactors `force_object_loose()` so that it can work on top of the generic `odb_source_write_object()` instead of having to call into `write_loose_object()`. This is the bulk of the patch series.
This patch series is built on top of 44de1520f0 (Merge branch 'master' of https://github.com/j6t/git-gui, 2026-07-16) with the following two topics merged into it:
- jt/receive-pack-use-odb-transaction at bdee7b3013
(builtin/receive-pack: stage incoming objects via ODB transactions,
2026-07-10). - jk/git-hash-cleanups at 9e396aa553 (hash: check ctx->active flag in
all wrapper functions, 2026-07-07).Note that jt/receive-pack-use-odb-transaction requires an evil merge:
diff --git a/odb/source-packed.c b/odb/source-packed.c index 06b31dd743..cbb06da038 100644 --- a/odb/source-packed.c +++ b/odb/source-packed.c @@ -545,7 +545,8 @@ static int odb_source_packed_write_object_stream(struct odb_source *source UNUSE } static int odb_source_packed_begin_transaction(struct odb_source *source UNUSED, - struct odb_transaction **out UNUSED) + struct odb_transaction **out UNUSED, + enum odb_transaction_flags flags UNUSED) { return error("packed backend cannot begin transactions"); } Thanks! Patrick --- Patrick Steinhardt (9): odb: compute compat object ID in `odb_write_object_ext()` t/u-odb-inmemory: implement wrapper for writing objects odb: compute object hash in `odb_write_object_ext()` odb: lift object existence check out of the "loose" backend odb: support setting mtime when writing objects object-file: fix memory leak in `force_object_loose()` object-file: force objects loose via generic interface object-file: move `force_object_loose()` object-file: move logic to write loose objects builtin/pack-objects.c | 48 ++++- object-file.c | 449 +++--------------------------------------- object-file.h | 32 +-- odb.c | 39 +++- odb.h | 10 +- odb/source-files.c | 14 +- odb/source-inmemory.c | 14 +- odb/source-loose.c | 402 +++++++++++++++++++++++++++++++++---- odb/source-packed.c | 17 +- odb/source.h | 20 +- read-cache.c | 2 +- t/unit-tests/u-odb-inmemory.c | 53 +++-- 12 files changed, 551 insertions(+), 549 deletions(-) --- base-commit: 8061f1ea286318fbf976f58df3985bd60237b8a7 change-id: 20260703-pks-odb-move-loose-object-writing-8bcf1f51b04d