]> git.ipfire.org Git - thirdparty/git.git/commitdiff
odb: stop including "odb/source.h"
authorPatrick Steinhardt <ps@pks.im>
Thu, 12 Mar 2026 08:42:56 +0000 (09:42 +0100)
committerJunio C Hamano <gitster@pobox.com>
Thu, 12 Mar 2026 15:38:42 +0000 (08:38 -0700)
The "odb.h" header currently includes the "odb/source.h" file. This is
somewhat roundabout though: most callers shouldn't have to care about
the `struct odb_source`, but should rather use the ODB-level functions.
Furthermore, it means that a couple of definitions have to live on the
source level even though they should be part of the generic interface.

Reverse the relation between "odb/source.h" and "odb.h" and move the
enums and typedefs that relate to the generic interfaces back into
"odb.h". Add the necessary includes to all files that rely on the
transitive include.

Suggested-by: Justin Tobler <jltobler@gmail.com>
Signed-off-by: Patrick Steinhardt <ps@pks.im>
Signed-off-by: Junio C Hamano <gitster@pobox.com>
builtin/multi-pack-index.c
builtin/submodule--helper.c
odb.h
odb/source.h
odb/streaming.c
repository.c
submodule-config.c
tmp-objdir.c

index 5f364aa816ba25d48c8f59ffd3a33c3344ce84a8..3fcb207f1aa0549be1c4a539f3d1d7e03f344ae0 100644 (file)
@@ -9,6 +9,7 @@
 #include "strbuf.h"
 #include "trace2.h"
 #include "odb.h"
+#include "odb/source.h"
 #include "replace-object.h"
 #include "repository.h"
 
index 143f7cb3cca7d0995ff4870e9a90ad051c2ad1c2..4957487536f453c9b872a1c6332d844159e6383b 100644 (file)
@@ -29,6 +29,7 @@
 #include "object-file.h"
 #include "object-name.h"
 #include "odb.h"
+#include "odb/source.h"
 #include "advice.h"
 #include "branch.h"
 #include "list-objects-filter-options.h"
diff --git a/odb.h b/odb.h
index 86e0365c243863b824dcf79df02f83ddff3d7efa..7a583e38732b7d50a0b98024b5419116eab7909b 100644 (file)
--- a/odb.h
+++ b/odb.h
@@ -3,7 +3,6 @@
 
 #include "hashmap.h"
 #include "object.h"
-#include "odb/source.h"
 #include "oidset.h"
 #include "oidmap.h"
 #include "string-list.h"
@@ -12,6 +11,7 @@
 struct oidmap;
 struct oidtree;
 struct strbuf;
+struct strvec;
 struct repository;
 struct multi_pack_index;
 
@@ -339,6 +339,42 @@ struct object_info {
  */
 #define OBJECT_INFO_INIT { 0 }
 
+/* Flags that can be passed to `odb_read_object_info_extended()`. */
+enum object_info_flags {
+       /* Invoke lookup_replace_object() on the given hash. */
+       OBJECT_INFO_LOOKUP_REPLACE = (1 << 0),
+
+       /* Do not reprepare object sources when the first lookup has failed. */
+       OBJECT_INFO_QUICK = (1 << 1),
+
+       /*
+        * Do not attempt to fetch the object if missing (even if fetch_is_missing is
+        * nonzero).
+        */
+       OBJECT_INFO_SKIP_FETCH_OBJECT = (1 << 2),
+
+       /* Die if object corruption (not just an object being missing) was detected. */
+       OBJECT_INFO_DIE_IF_CORRUPT = (1 << 3),
+
+       /*
+        * We have already tried reading the object, but it couldn't be found
+        * via any of the attached sources, and are now doing a second read.
+        * This second read asks the individual sources to also evaluate
+        * whether any on-disk state may have changed that may have caused the
+        * object to appear.
+        *
+        * This flag is for internal use, only. The second read only occurs
+        * when `OBJECT_INFO_QUICK` was not passed.
+        */
+       OBJECT_INFO_SECOND_READ = (1 << 4),
+
+       /*
+        * This is meant for bulk prefetching of missing blobs in a partial
+        * clone. Implies OBJECT_INFO_SKIP_FETCH_OBJECT and OBJECT_INFO_QUICK.
+        */
+       OBJECT_INFO_FOR_PREFETCH = (OBJECT_INFO_SKIP_FETCH_OBJECT | OBJECT_INFO_QUICK),
+};
+
 /*
  * Read object info from the object database and populate the `object_info`
  * structure. Returns 0 on success, a negative error code otherwise.
@@ -432,6 +468,18 @@ enum odb_for_each_object_flags {
        ODB_FOR_EACH_OBJECT_SKIP_ON_DISK_KEPT_PACKS = (1<<4),
 };
 
+/*
+ * A callback function that can be used to iterate through objects. If given,
+ * the optional `oi` parameter will be populated the same as if you would call
+ * `odb_read_object_info()`.
+ *
+ * Returning a non-zero error code will cause iteration to abort. The error
+ * code will be propagated.
+ */
+typedef int (*odb_for_each_object_cb)(const struct object_id *oid,
+                                     struct object_info *oi,
+                                     void *cb_data);
+
 /*
  * Iterate through all objects contained in the object database. Note that
  * objects may be iterated over multiple times in case they are either stored
index caac5581495ecead5b14d95acfe95329a47c6418..a1fd9dd92091378fee5a856d462073dcdb51851a 100644 (file)
@@ -2,6 +2,7 @@
 #define ODB_SOURCE_H
 
 #include "object.h"
+#include "odb.h"
 
 enum odb_source_type {
        /*
@@ -14,61 +15,10 @@ enum odb_source_type {
        ODB_SOURCE_FILES,
 };
 
-/* Flags that can be passed to `odb_read_object_info_extended()`. */
-enum object_info_flags {
-       /* Invoke lookup_replace_object() on the given hash. */
-       OBJECT_INFO_LOOKUP_REPLACE = (1 << 0),
-
-       /* Do not reprepare object sources when the first lookup has failed. */
-       OBJECT_INFO_QUICK = (1 << 1),
-
-       /*
-        * Do not attempt to fetch the object if missing (even if fetch_is_missing is
-        * nonzero).
-        */
-       OBJECT_INFO_SKIP_FETCH_OBJECT = (1 << 2),
-
-       /* Die if object corruption (not just an object being missing) was detected. */
-       OBJECT_INFO_DIE_IF_CORRUPT = (1 << 3),
-
-       /*
-        * We have already tried reading the object, but it couldn't be found
-        * via any of the attached sources, and are now doing a second read.
-        * This second read asks the individual sources to also evaluate
-        * whether any on-disk state may have changed that may have caused the
-        * object to appear.
-        *
-        * This flag is for internal use, only. The second read only occurs
-        * when `OBJECT_INFO_QUICK` was not passed.
-        */
-       OBJECT_INFO_SECOND_READ = (1 << 4),
-
-       /*
-        * This is meant for bulk prefetching of missing blobs in a partial
-        * clone. Implies OBJECT_INFO_SKIP_FETCH_OBJECT and OBJECT_INFO_QUICK.
-        */
-       OBJECT_INFO_FOR_PREFETCH = (OBJECT_INFO_SKIP_FETCH_OBJECT | OBJECT_INFO_QUICK),
-};
-
 struct object_id;
-struct object_info;
 struct odb_read_stream;
-struct odb_transaction;
-struct odb_write_stream;
 struct strvec;
 
-/*
- * A callback function that can be used to iterate through objects. If given,
- * the optional `oi` parameter will be populated the same as if you would call
- * `odb_read_object_info()`.
- *
- * Returning a non-zero error code will cause iteration to abort. The error
- * code will be propagated.
- */
-typedef int (*odb_for_each_object_cb)(const struct object_id *oid,
-                                     struct object_info *oi,
-                                     void *cb_data);
-
 /*
  * The source is the part of the object database that stores the actual
  * objects. It thus encapsulates the logic to read and write the specific
index a4355cd2458c3856d847da3b46be291fcffb8b61..5927a12954ba5901b0e557514eafbdbc6d987f0e 100644 (file)
@@ -7,6 +7,7 @@
 #include "environment.h"
 #include "repository.h"
 #include "odb.h"
+#include "odb/source.h"
 #include "odb/streaming.h"
 #include "replace-object.h"
 
index e7fa42c14f22546e23fe988e6cd54e8196c2e90d..05c26bdbc3bc08704bdc05705cb93c9a50ddbcc8 100644 (file)
@@ -2,6 +2,7 @@
 #include "abspath.h"
 #include "repository.h"
 #include "odb.h"
+#include "odb/source.h"
 #include "config.h"
 #include "object.h"
 #include "lockfile.h"
index 1f19fe207741bc364cc26321fe2145b18a5c198c..72a46b7a54bc3da96f0199d6ca04f23a88acda4f 100644 (file)
@@ -14,6 +14,7 @@
 #include "strbuf.h"
 #include "object-name.h"
 #include "odb.h"
+#include "odb/source.h"
 #include "parse-options.h"
 #include "thread-utils.h"
 #include "tree-walk.h"
index e436eed07e44499c52bd8469e39799c42974c347..d199d39e7c9d51c3f9dcd100535dc513e62b5c4d 100644 (file)
@@ -11,6 +11,7 @@
 #include "strvec.h"
 #include "quote.h"
 #include "odb.h"
+#include "odb/source.h"
 #include "repository.h"
 
 struct tmp_objdir {