Raw
1 #include "git-compat-util.h"
2 #include "odb/source.h"
3 #include "odb/transaction.h"
4
5 struct odb_transaction *odb_transaction_begin(struct object_database *odb)
6 {
7 if (odb->transaction)
8 return NULL;
9
10 odb_source_begin_transaction(odb->sources, &odb->transaction);
11
12 return odb->transaction;
13 }
14
15 void odb_transaction_commit(struct odb_transaction *transaction)
16 {
17 if (!transaction)
18 return;
19
20 /*
21 * Ensure the transaction ending matches the pending transaction.
22 */
23 ASSERT(transaction == transaction->source->odb->transaction);
24
25 transaction->commit(transaction);
26 transaction->source->odb->transaction = NULL;
27 free(transaction);
28 }
29
30 int odb_transaction_write_object_stream(struct odb_transaction *transaction,
31 struct odb_write_stream *stream,
32 size_t len, struct object_id *oid)
33 {
34 return transaction->write_object_stream(transaction, stream, len, oid);
35 }