#include "git-compat-util.h" #include "gettext.h" #include "odb/source.h" #include "odb/transaction.h" int odb_transaction_begin(struct object_database *odb, struct odb_transaction **out, enum odb_transaction_flags flags) { int ret; if (odb->transaction) return error(_("object database transaction already pending")); ret = odb_source_begin_transaction(odb->sources, out, flags); if (!ret) odb->transaction = *out; return ret; } int odb_transaction_commit(struct odb_transaction *transaction) { int ret; if (!transaction) return 0; /* * Ensure the transaction ending matches the pending transaction. */ ASSERT(transaction == transaction->source->odb->transaction); ret = transaction->commit(transaction); transaction->source->odb->transaction = NULL; free(transaction); return ret; } int odb_transaction_write_object_stream(struct odb_transaction *transaction, struct odb_write_stream *stream, size_t len, struct object_id *oid) { return transaction->write_object_stream(transaction, stream, len, oid); } int odb_transaction_env(struct odb_transaction *transaction, struct strvec *env) { if (!transaction) return 0; return transaction->env(transaction, env); }