From 514f039c9052c23047c310f911ba8c0c2e74a1c7 Mon Sep 17 00:00:00 2001 From: Patrick Steinhardt Date: Mon, 1 Jun 2026 10:20:24 +0200 Subject: [PATCH] odb/source-loose: move loose source into "odb/" subsystem In subsequent patches we'll be turning `struct odb_source_loose` into a proper `struct odb_source`. As a first step towards this goal, move its struct out of "object-file.c" and into "odb/source-loose.c". This detaches the implementation of the loose object source from the generic object file code, following the same convention already used by the "files" and "in-memory" sources. No functional changes are intended. Signed-off-by: Patrick Steinhardt Signed-off-by: Junio C Hamano --- Makefile | 1 + meson.build | 1 + object-file.c | 8 -------- object-file.h | 21 +-------------------- odb/source-loose.c | 10 ++++++++++ odb/source-loose.h | 34 ++++++++++++++++++++++++++++++++++ 6 files changed, 47 insertions(+), 28 deletions(-) create mode 100644 odb/source-loose.c create mode 100644 odb/source-loose.h diff --git a/Makefile b/Makefile index a43b8ee067..01356235c3 100644 --- a/Makefile +++ b/Makefile @@ -1217,6 +1217,7 @@ LIB_OBJS += odb.o LIB_OBJS += odb/source.o LIB_OBJS += odb/source-files.o LIB_OBJS += odb/source-inmemory.o +LIB_OBJS += odb/source-loose.o LIB_OBJS += odb/streaming.o LIB_OBJS += odb/transaction.o LIB_OBJS += oid-array.o diff --git a/meson.build b/meson.build index 664d831329..c85e598835 100644 --- a/meson.build +++ b/meson.build @@ -405,6 +405,7 @@ libgit_sources = [ 'odb/source.c', 'odb/source-files.c', 'odb/source-inmemory.c', + 'odb/source-loose.c', 'odb/streaming.c', 'odb/transaction.c', 'oid-array.c', diff --git a/object-file.c b/object-file.c index 90f995d000..641bd9c079 100644 --- a/object-file.c +++ b/object-file.c @@ -2205,14 +2205,6 @@ struct odb_transaction *odb_transaction_files_begin(struct odb_source *source) return &transaction->base; } -struct odb_source_loose *odb_source_loose_new(struct odb_source *source) -{ - struct odb_source_loose *loose; - CALLOC_ARRAY(loose, 1); - loose->source = source; - return loose; -} - void odb_source_loose_free(struct odb_source_loose *loose) { if (!loose) diff --git a/object-file.h b/object-file.h index 5241b8dd5c..1d8312cf7f 100644 --- a/object-file.h +++ b/object-file.h @@ -4,6 +4,7 @@ #include "git-zlib.h" #include "object.h" #include "odb.h" +#include "odb/source-loose.h" struct index_state; @@ -20,26 +21,6 @@ struct object_info; struct odb_read_stream; struct odb_source; -struct odb_source_loose { - struct odb_source *source; - - /* - * Used to store the results of readdir(3) calls when we are OK - * sacrificing accuracy due to races for speed. That includes - * object existence with OBJECT_INFO_QUICK, as well as - * our search for unique abbreviated hashes. Don't use it for tasks - * requiring greater accuracy! - * - * Be sure to call odb_load_loose_cache() before using. - */ - uint32_t subdir_seen[8]; /* 256 bits */ - struct oidtree *cache; - - /* Map between object IDs for loose objects. */ - struct loose_object_map *map; -}; - -struct odb_source_loose *odb_source_loose_new(struct odb_source *source); void odb_source_loose_free(struct odb_source_loose *loose); /* Reprepare the loose source by emptying the loose object cache. */ diff --git a/odb/source-loose.c b/odb/source-loose.c new file mode 100644 index 0000000000..b944d21813 --- /dev/null +++ b/odb/source-loose.c @@ -0,0 +1,10 @@ +#include "git-compat-util.h" +#include "odb/source-loose.h" + +struct odb_source_loose *odb_source_loose_new(struct odb_source *source) +{ + struct odb_source_loose *loose; + CALLOC_ARRAY(loose, 1); + loose->source = source; + return loose; +} diff --git a/odb/source-loose.h b/odb/source-loose.h new file mode 100644 index 0000000000..8b4bac77ea --- /dev/null +++ b/odb/source-loose.h @@ -0,0 +1,34 @@ +#ifndef ODB_SOURCE_LOOSE_H +#define ODB_SOURCE_LOOSE_H + +#include "odb/source.h" + +struct object_database; +struct oidtree; + +/* + * An object database source that stores its objects in loose format, one + * file per object. This source is part of the files source. + */ +struct odb_source_loose { + struct odb_source *source; + + /* + * Used to store the results of readdir(3) calls when we are OK + * sacrificing accuracy due to races for speed. That includes + * object existence with OBJECT_INFO_QUICK, as well as + * our search for unique abbreviated hashes. Don't use it for tasks + * requiring greater accuracy! + * + * Be sure to call odb_load_loose_cache() before using. + */ + uint32_t subdir_seen[8]; /* 256 bits */ + struct oidtree *cache; + + /* Map between object IDs for loose objects. */ + struct loose_object_map *map; +}; + +struct odb_source_loose *odb_source_loose_new(struct odb_source *source); + +#endif -- 2.52.0