Merge branch 'eb/limit-bulk-checkin-to-blobs'
The "streaming" interface used for bulk-checkin codepath has been narrowed to take only blob objects for now, with no real loss of functionality. * eb/limit-bulk-checkin-to-blobs: bulk-checkin: only support blobs in index_bulk_checkin
This commit is contained in:
@ -155,10 +155,10 @@ static int already_written(struct bulk_checkin_packfile *state, struct object_id
|
|||||||
* status before calling us just in case we ask it to call us again
|
* status before calling us just in case we ask it to call us again
|
||||||
* with a new pack.
|
* with a new pack.
|
||||||
*/
|
*/
|
||||||
static int stream_to_pack(struct bulk_checkin_packfile *state,
|
static int stream_blob_to_pack(struct bulk_checkin_packfile *state,
|
||||||
git_hash_ctx *ctx, off_t *already_hashed_to,
|
git_hash_ctx *ctx, off_t *already_hashed_to,
|
||||||
int fd, size_t size, enum object_type type,
|
int fd, size_t size, const char *path,
|
||||||
const char *path, unsigned flags)
|
unsigned flags)
|
||||||
{
|
{
|
||||||
git_zstream s;
|
git_zstream s;
|
||||||
unsigned char ibuf[16384];
|
unsigned char ibuf[16384];
|
||||||
@ -170,7 +170,7 @@ static int stream_to_pack(struct bulk_checkin_packfile *state,
|
|||||||
|
|
||||||
git_deflate_init(&s, pack_compression_level);
|
git_deflate_init(&s, pack_compression_level);
|
||||||
|
|
||||||
hdrlen = encode_in_pack_object_header(obuf, sizeof(obuf), type, size);
|
hdrlen = encode_in_pack_object_header(obuf, sizeof(obuf), OBJ_BLOB, size);
|
||||||
s.next_out = obuf + hdrlen;
|
s.next_out = obuf + hdrlen;
|
||||||
s.avail_out = sizeof(obuf) - hdrlen;
|
s.avail_out = sizeof(obuf) - hdrlen;
|
||||||
|
|
||||||
@ -247,11 +247,10 @@ static void prepare_to_stream(struct bulk_checkin_packfile *state,
|
|||||||
die_errno("unable to write pack header");
|
die_errno("unable to write pack header");
|
||||||
}
|
}
|
||||||
|
|
||||||
static int deflate_to_pack(struct bulk_checkin_packfile *state,
|
static int deflate_blob_to_pack(struct bulk_checkin_packfile *state,
|
||||||
struct object_id *result_oid,
|
struct object_id *result_oid,
|
||||||
int fd, size_t size,
|
int fd, size_t size,
|
||||||
enum object_type type, const char *path,
|
const char *path, unsigned flags)
|
||||||
unsigned flags)
|
|
||||||
{
|
{
|
||||||
off_t seekback, already_hashed_to;
|
off_t seekback, already_hashed_to;
|
||||||
git_hash_ctx ctx;
|
git_hash_ctx ctx;
|
||||||
@ -265,7 +264,7 @@ static int deflate_to_pack(struct bulk_checkin_packfile *state,
|
|||||||
return error("cannot find the current offset");
|
return error("cannot find the current offset");
|
||||||
|
|
||||||
header_len = format_object_header((char *)obuf, sizeof(obuf),
|
header_len = format_object_header((char *)obuf, sizeof(obuf),
|
||||||
type, size);
|
OBJ_BLOB, size);
|
||||||
the_hash_algo->init_fn(&ctx);
|
the_hash_algo->init_fn(&ctx);
|
||||||
the_hash_algo->update_fn(&ctx, obuf, header_len);
|
the_hash_algo->update_fn(&ctx, obuf, header_len);
|
||||||
the_hash_algo->init_fn(&checkpoint.ctx);
|
the_hash_algo->init_fn(&checkpoint.ctx);
|
||||||
@ -283,8 +282,8 @@ static int deflate_to_pack(struct bulk_checkin_packfile *state,
|
|||||||
idx->offset = state->offset;
|
idx->offset = state->offset;
|
||||||
crc32_begin(state->f);
|
crc32_begin(state->f);
|
||||||
}
|
}
|
||||||
if (!stream_to_pack(state, &ctx, &already_hashed_to,
|
if (!stream_blob_to_pack(state, &ctx, &already_hashed_to,
|
||||||
fd, size, type, path, flags))
|
fd, size, path, flags))
|
||||||
break;
|
break;
|
||||||
/*
|
/*
|
||||||
* Writing this object to the current pack will make
|
* Writing this object to the current pack will make
|
||||||
@ -351,11 +350,11 @@ void fsync_loose_object_bulk_checkin(int fd, const char *filename)
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
int index_bulk_checkin(struct object_id *oid,
|
int index_blob_bulk_checkin(struct object_id *oid,
|
||||||
int fd, size_t size, enum object_type type,
|
int fd, size_t size,
|
||||||
const char *path, unsigned flags)
|
const char *path, unsigned flags)
|
||||||
{
|
{
|
||||||
int status = deflate_to_pack(&bulk_checkin_packfile, oid, fd, size, type,
|
int status = deflate_blob_to_pack(&bulk_checkin_packfile, oid, fd, size,
|
||||||
path, flags);
|
path, flags);
|
||||||
if (!odb_transaction_nesting)
|
if (!odb_transaction_nesting)
|
||||||
flush_bulk_checkin_packfile(&bulk_checkin_packfile);
|
flush_bulk_checkin_packfile(&bulk_checkin_packfile);
|
||||||
|
@ -9,8 +9,8 @@
|
|||||||
void prepare_loose_object_bulk_checkin(void);
|
void prepare_loose_object_bulk_checkin(void);
|
||||||
void fsync_loose_object_bulk_checkin(int fd, const char *filename);
|
void fsync_loose_object_bulk_checkin(int fd, const char *filename);
|
||||||
|
|
||||||
int index_bulk_checkin(struct object_id *oid,
|
int index_blob_bulk_checkin(struct object_id *oid,
|
||||||
int fd, size_t size, enum object_type type,
|
int fd, size_t size,
|
||||||
const char *path, unsigned flags);
|
const char *path, unsigned flags);
|
||||||
|
|
||||||
/*
|
/*
|
||||||
|
@ -2446,11 +2446,11 @@ static int index_core(struct index_state *istate,
|
|||||||
* binary blobs, they generally do not want to get any conversion, and
|
* binary blobs, they generally do not want to get any conversion, and
|
||||||
* callers should avoid this code path when filters are requested.
|
* callers should avoid this code path when filters are requested.
|
||||||
*/
|
*/
|
||||||
static int index_stream(struct object_id *oid, int fd, size_t size,
|
static int index_blob_stream(struct object_id *oid, int fd, size_t size,
|
||||||
enum object_type type, const char *path,
|
const char *path,
|
||||||
unsigned flags)
|
unsigned flags)
|
||||||
{
|
{
|
||||||
return index_bulk_checkin(oid, fd, size, type, path, flags);
|
return index_blob_bulk_checkin(oid, fd, size, path, flags);
|
||||||
}
|
}
|
||||||
|
|
||||||
int index_fd(struct index_state *istate, struct object_id *oid,
|
int index_fd(struct index_state *istate, struct object_id *oid,
|
||||||
@ -2472,7 +2472,7 @@ int index_fd(struct index_state *istate, struct object_id *oid,
|
|||||||
ret = index_core(istate, oid, fd, xsize_t(st->st_size),
|
ret = index_core(istate, oid, fd, xsize_t(st->st_size),
|
||||||
type, path, flags);
|
type, path, flags);
|
||||||
else
|
else
|
||||||
ret = index_stream(oid, fd, xsize_t(st->st_size), type, path,
|
ret = index_blob_stream(oid, fd, xsize_t(st->st_size), path,
|
||||||
flags);
|
flags);
|
||||||
close(fd);
|
close(fd);
|
||||||
return ret;
|
return ret;
|
||||||
|
Reference in New Issue
Block a user