aboutsummaryrefslogtreecommitdiff
path: root/odb.h
diff options
context:
space:
mode:
authorJustin Tobler <jltobler@gmail.com>2026-02-02 18:10:01 -0600
committerJunio C Hamano <gitster@pobox.com>2026-02-02 17:14:03 -0800
commitfa7d067923a342c298b7723935c60217a5244e4e (patch)
tree1a6244c91017c049a74e3cfd9ddc7d1d76b31b57 /odb.h
parent8bf06d05a581dfb552cd0e290680f75d3676eb1d (diff)
downloadgit-fa7d067923a342c298b7723935c60217a5244e4e.tar.xz
odb: prepare `struct odb_transaction` to become generic
An ODB transaction handles how objects are stored temporarily and eventually committed. Due to object storage being implemented differently for a given ODB source, the ODB transactions must be implemented in a manner specific to the source the objects are being written to. To provide generic transactions, `struct odb_transaction` is updated to store a commit callback that can be configured to support a specific ODB source. For now `struct odb_transaction_files` is the only transaction type and what is always returned when starting a transaction. Signed-off-by: Justin Tobler <jltobler@gmail.com> Signed-off-by: Junio C Hamano <gitster@pobox.com>
Diffstat (limited to 'odb.h')
-rw-r--r--odb.h17
1 files changed, 17 insertions, 0 deletions
diff --git a/odb.h b/odb.h
index bab07755f4..83d3a37805 100644
--- a/odb.h
+++ b/odb.h
@@ -77,7 +77,24 @@ struct odb_source {
struct packed_git;
struct packfile_store;
struct cached_object_entry;
+
+/*
+ * A transaction may be started for an object database prior to writing new
+ * objects via odb_transaction_begin(). These objects are not committed until
+ * odb_transaction_commit() is invoked. Only a single transaction may be pending
+ * at a time.
+ *
+ * Each ODB source is expected to implement its own transaction handling.
+ */
struct odb_transaction;
+typedef void (*odb_transaction_commit_fn)(struct odb_transaction *transaction);
+struct odb_transaction {
+ /* The ODB source the transaction is opened against. */
+ struct odb_source *source;
+
+ /* The ODB source specific callback invoked to commit a transaction. */
+ odb_transaction_commit_fn commit;
+};
/*
* The object database encapsulates access to objects in a repository. It