mirror of
https://github.com/git-for-windows/git.git
synced 2026-04-11 11:58:26 -05:00
How an ODB transaction handles writing objects is expected to vary between implementations. Introduce a new `write_object_stream()` callback in `struct odb_transaction` to make this function pluggable. Rename `index_blob_packfile_transaction()` to `odb_transaction_files_write_object_stream()` and wire it up for use with `struct odb_transaction_files` accordingly. Signed-off-by: Justin Tobler <jltobler@gmail.com> Signed-off-by: Junio C Hamano <gitster@pobox.com>
58 lines
2.0 KiB
C
58 lines
2.0 KiB
C
#ifndef ODB_TRANSACTION_H
|
|
#define ODB_TRANSACTION_H
|
|
|
|
#include "odb.h"
|
|
#include "odb/source.h"
|
|
|
|
/*
|
|
* 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 {
|
|
/* The ODB source the transaction is opened against. */
|
|
struct odb_source *source;
|
|
|
|
/* The ODB source specific callback invoked to commit a transaction. */
|
|
void (*commit)(struct odb_transaction *transaction);
|
|
|
|
/*
|
|
* This callback is expected to write the given object stream into
|
|
* the ODB transaction. Note that for now, only blobs support streaming.
|
|
*
|
|
* The resulting object ID shall be written into the out pointer. The
|
|
* callback is expected to return 0 on success, a negative error code
|
|
* otherwise.
|
|
*/
|
|
int (*write_object_stream)(struct odb_transaction *transaction,
|
|
struct odb_write_stream *stream, size_t len,
|
|
struct object_id *oid);
|
|
};
|
|
|
|
/*
|
|
* Starts an ODB transaction. Subsequent objects are written to the transaction
|
|
* and not committed until odb_transaction_commit() is invoked on the
|
|
* transaction. If the ODB already has a pending transaction, NULL is returned.
|
|
*/
|
|
struct odb_transaction *odb_transaction_begin(struct object_database *odb);
|
|
|
|
/*
|
|
* Commits an ODB transaction making the written objects visible. If the
|
|
* specified transaction is NULL, the function is a no-op.
|
|
*/
|
|
void odb_transaction_commit(struct odb_transaction *transaction);
|
|
|
|
/*
|
|
* Writes the object in the provided stream into the transaction. The resulting
|
|
* object ID is written into the out pointer. Returns 0 on success, a negative
|
|
* error code otherwise.
|
|
*/
|
|
int odb_transaction_write_object_stream(struct odb_transaction *transaction,
|
|
struct odb_write_stream *stream,
|
|
size_t len, struct object_id *oid);
|
|
|
|
#endif
|