| /* |
| * Copyright (c) 2011, Google Inc. |
| */ |
| #ifndef BULK_CHECKIN_H |
| #define BULK_CHECKIN_H |
| |
| #include "object.h" |
| |
| void prepare_loose_object_bulk_checkin(void); |
| void fsync_loose_object_bulk_checkin(int fd, const char *filename); |
| |
| /* |
| * This creates one packfile per large blob unless bulk-checkin |
| * machinery is "plugged". |
| * |
| * This also bypasses the usual "convert-to-git" dance, and that is on |
| * purpose. We could write a streaming version of the converting |
| * functions and insert that before feeding the data to fast-import |
| * (or equivalent in-core API described above). However, that is |
| * somewhat complicated, as we do not know the size of the filter |
| * result, which we need to know beforehand when writing a git object. |
| * Since the primary motivation for trying to stream from the working |
| * tree file and to avoid mmaping it in core is to deal with large |
| * binary blobs, they generally do not want to get any conversion, and |
| * callers should avoid this code path when filters are requested. |
| */ |
| int index_blob_bulk_checkin(struct object_id *oid, |
| int fd, size_t size, |
| const char *path, unsigned flags); |
| |
| /* |
| * Tell the object database to optimize for adding |
| * multiple objects. end_odb_transaction must be called |
| * to make new objects visible. Transactions can be nested, |
| * and objects are only visible after the outermost transaction |
| * is complete or the transaction is flushed. |
| */ |
| void begin_odb_transaction(void); |
| |
| /* |
| * Make any objects that are currently part of a pending object |
| * database transaction visible. It is valid to call this function |
| * even if no transaction is active. |
| */ |
| void flush_odb_transaction(void); |
| |
| /* |
| * Tell the object database to make any objects from the |
| * current transaction visible if this is the final nested |
| * transaction. |
| */ |
| void end_odb_transaction(void); |
| |
| #endif |