mirror of
https://github.com/git/git.git
synced 2026-03-04 22:47:35 +01:00
odb/source: make write_object_stream() function pluggable
Introduce a new callback function in `struct odb_source` to make the function pluggable. Signed-off-by: Patrick Steinhardt <ps@pks.im> Signed-off-by: Junio C Hamano <gitster@pobox.com>
This commit is contained in:
committed by
Junio C Hamano
parent
bf6737bcd5
commit
15e787477b
2
odb.c
2
odb.c
@@ -1013,7 +1013,7 @@ int odb_write_object_stream(struct object_database *odb,
|
||||
struct odb_write_stream *stream, size_t len,
|
||||
struct object_id *oid)
|
||||
{
|
||||
return odb_source_loose_write_stream(odb->sources, stream, len, oid);
|
||||
return odb_source_write_object_stream(odb->sources, stream, len, oid);
|
||||
}
|
||||
|
||||
struct object_database *odb_new(struct repository *repo,
|
||||
|
||||
@@ -109,6 +109,14 @@ static int odb_source_files_write_object(struct odb_source *source,
|
||||
oid, compat_oid, flags);
|
||||
}
|
||||
|
||||
static int odb_source_files_write_object_stream(struct odb_source *source,
|
||||
struct odb_write_stream *stream,
|
||||
size_t len,
|
||||
struct object_id *oid)
|
||||
{
|
||||
return odb_source_loose_write_stream(source, stream, len, oid);
|
||||
}
|
||||
|
||||
struct odb_source_files *odb_source_files_new(struct object_database *odb,
|
||||
const char *path,
|
||||
bool local)
|
||||
@@ -128,6 +136,7 @@ struct odb_source_files *odb_source_files_new(struct object_database *odb,
|
||||
files->base.for_each_object = odb_source_files_for_each_object;
|
||||
files->base.freshen_object = odb_source_files_freshen_object;
|
||||
files->base.write_object = odb_source_files_write_object;
|
||||
files->base.write_object_stream = odb_source_files_write_object_stream;
|
||||
|
||||
/*
|
||||
* Ideally, we would only ever store absolute paths in the source. This
|
||||
|
||||
28
odb/source.h
28
odb/source.h
@@ -54,6 +54,7 @@ enum object_info_flags {
|
||||
struct object_id;
|
||||
struct object_info;
|
||||
struct odb_read_stream;
|
||||
struct odb_write_stream;
|
||||
|
||||
/*
|
||||
* A callback function that can be used to iterate through objects. If given,
|
||||
@@ -216,6 +217,18 @@ struct odb_source {
|
||||
struct object_id *oid,
|
||||
struct object_id *compat_oid,
|
||||
unsigned flags);
|
||||
|
||||
/*
|
||||
* This callback is expected to persist the given object stream into
|
||||
* the object source.
|
||||
*
|
||||
* 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_source *source,
|
||||
struct odb_write_stream *stream, size_t len,
|
||||
struct object_id *oid);
|
||||
};
|
||||
|
||||
/*
|
||||
@@ -351,4 +364,19 @@ static inline int odb_source_write_object(struct odb_source *source,
|
||||
compat_oid, flags);
|
||||
}
|
||||
|
||||
/*
|
||||
* Write an object into the object database source via a stream. The overall
|
||||
* length of the object must be known in advance.
|
||||
*
|
||||
* Return 0 on success, a negative error code otherwise. Populates the given
|
||||
* out pointer for the object ID.
|
||||
*/
|
||||
static inline int odb_source_write_object_stream(struct odb_source *source,
|
||||
struct odb_write_stream *stream,
|
||||
size_t len,
|
||||
struct object_id *oid)
|
||||
{
|
||||
return source->write_object_stream(source, stream, len, oid);
|
||||
}
|
||||
|
||||
#endif
|
||||
|
||||
Reference in New Issue
Block a user