Hi, this patch series refactors "object-file.c" to get rid of the dependency on `the_repository`. In many such cases this is done by passing in a `struct odb_source`, which prepares us for eventually converting this into the "loose" object source with pluggable object databases. The patch series is built on top of a30f80fde92 (The eighth batch, 2025-07-08) with "ps/object-store" at 841a03b4046 (odb: rename `read_object_with_reference()`, 2025-07-01) merged into it. Changes in v2: - Two small typo improvements. - Drop the last three patches from this series that move some global config into repo settings. Those cause a change in behaviour, and fixing that is a lot of effort that falls outside of the scope of this patch series. - Link to v1: https://lore.kernel.org/r/20250709-pks-object-file-wo-the-repository-v1-0-62627b55707f@xxxxxx Thanks! Patrick --- Patrick Steinhardt (16): object-file: fix -Wsign-compare warnings object-file: stop using `the_hash_algo` object-file: get rid of `the_repository` in `has_loose_object()` object-file: inline `check_and_freshen()` functions object-file: get rid of `the_repository` when freshening objects object-file: get rid of `the_repository` in `loose_object_info()` object-file: get rid of `the_repository` in `finalize_object_file()` loose: write loose objects map via their source odb: introduce `odb_write_object()` object-file: get rid of `the_repository` when writing objects object-file: inline `for_each_loose_file_in_objdir_buf()` object-file: remove declaration for `for_each_file_in_obj_subdir()` object-file: get rid of `the_repository` in loose object iterators object-file: get rid of `the_repository` in `read_loose_object()` object-file: get rid of `the_repository` in `force_object_loose()` object-file: get rid of `the_repository` in index-related functions apply.c | 11 +- builtin/cat-file.c | 2 +- builtin/checkout.c | 2 +- builtin/count-objects.c | 2 +- builtin/fast-import.c | 4 +- builtin/fsck.c | 16 +-- builtin/gc.c | 10 +- builtin/index-pack.c | 2 +- builtin/merge-file.c | 3 +- builtin/mktag.c | 2 +- builtin/mktree.c | 2 +- builtin/notes.c | 3 +- builtin/pack-objects.c | 34 ++++-- builtin/prune.c | 2 +- builtin/receive-pack.c | 4 +- builtin/replace.c | 3 +- builtin/tag.c | 4 +- builtin/unpack-objects.c | 15 +-- bulk-checkin.c | 2 +- cache-tree.c | 5 +- commit.c | 4 +- http.c | 4 +- loose.c | 16 +-- loose.h | 4 +- match-trees.c | 2 +- merge-ort.c | 7 +- midx-write.c | 2 +- notes-cache.c | 3 +- notes.c | 12 +- object-file.c | 306 ++++++++++++++++++++++------------------------- object-file.h | 65 ++++------ odb.c | 10 ++ odb.h | 38 ++++++ pack-write.c | 16 +-- pack.h | 3 +- prune-packed.c | 2 +- reachable.c | 2 +- read-cache.c | 2 +- tmp-objdir.c | 2 +- 39 files changed, 333 insertions(+), 295 deletions(-) Range-diff versus v1: 1: c150744a648 = 1: 4fc36ad30ae object-file: fix -Wsign-compare warnings 2: 5cdc43d3d27 ! 2: c5ad1d12618 object-file: stop using `the_hash_algo` @@ Commit message anymore, either by deriving it from already-available context or by using `the_repository->hash_algo`. The latter variant doesn't yet help to remove the global dependency, but such users will be adapted in the - following commits to not use `the_repository` anymore, either. + following commits to not use `the_repository` anymore. Signed-off-by: Patrick Steinhardt <ps@xxxxxx> 3: 8e63fb2d760 = 3: 76478623aa7 object-file: get rid of `the_repository` in `has_loose_object()` 4: 14153d37df4 = 4: ee7b31c95cd object-file: inline `check_and_freshen()` functions 5: 70abad2d817 = 5: 4b7407f17b7 object-file: get rid of `the_repository` when freshening objects 6: 5fc03ab39da = 6: 40a7c009c7b object-file: get rid of `the_repository` in `loose_object_info()` 7: 9a07f6a27df = 7: 9568d7e996e object-file: get rid of `the_repository` in `finalize_object_file()` 8: 739008ad578 = 8: cf974b8b48d loose: write loose objects map via their source 9: f2f00d6f566 ! 9: fec51b64457 odb: introduce `odb_write_object()` @@ odb.h: enum for_each_object_flags { + WRITE_OBJECT_PERSIST = (1 << 0), + + /* -+ * Do not print an error in case something gose wrong. ++ * Do not print an error in case something goes wrong. + */ + WRITE_OBJECT_SILENT = (1 << 1), +}; 10: 84411e2a8fc = 10: ece58da8182 object-file: get rid of `the_repository` when writing objects 11: f051bfbada1 = 11: a76d5f24040 object-file: inline `for_each_loose_file_in_objdir_buf()` 12: 3754b37207a = 12: 70e60db13f6 object-file: remove declaration for `for_each_file_in_obj_subdir()` 13: be855be5c0e = 13: 77ec9b765dc object-file: get rid of `the_repository` in loose object iterators 14: 6cb7f6bc040 = 14: b091f019d01 object-file: get rid of `the_repository` in `read_loose_object()` 15: 8ddb96c9f30 = 15: 3982420285b object-file: get rid of `the_repository` in `force_object_loose()` 16: d885f70f58d = 16: 21272b2644b object-file: get rid of `the_repository` in index-related functions 17: 1640212fe06 < -: ----------- environment: move compression level into repo settings 18: 36496f2c42c < -: ----------- environment: move object creation mode into repo settings 19: 8760509c0bb < -: ----------- object-file: drop USE_THE_REPOSITORY_VARIABLE --- base-commit: f0228c39bf2fe539583cd594671039f05765bc9b change-id: 20250709-pks-object-file-wo-the-repository-9f41234c4747