libostree: Add API to write metadata as stream

And use it in pull-local.  The goal here is to kill users of
ostree_repo_load_variant(), and move a bit more towards hiding the
variants.
This commit is contained in:
Colin Walters 2013-09-18 18:44:57 -04:00
parent b4082d5642
commit 9b31b526cc
4 changed files with 47 additions and 17 deletions

View File

@ -76,6 +76,7 @@ ostree_repo_write_metadata
ostree_repo_write_metadata_async
ostree_repo_write_metadata_finish
ostree_repo_write_metadata_trusted
ostree_repo_write_metadata_stream_trusted
ostree_repo_write_content
ostree_repo_write_content_trusted
ostree_repo_write_content_async

View File

@ -823,6 +823,33 @@ ostree_repo_write_metadata (OstreeRepo *self,
cancellable, error);
}
/**
* ostree_repo_write_metadata_stream_trusted:
* @self: Repo
* @objtype: Object type
* @checksum: Store object with this ASCII SHA256 checksum
* @object_input: Metadata object stream
* @length: Length, may be 0 for unknown
* @cancellable: Cancellable
* @error: Error
*
* Store the metadata object @variant; the provided @checksum is
* trusted.
*/
gboolean
ostree_repo_write_metadata_stream_trusted (OstreeRepo *self,
OstreeObjectType objtype,
const char *checksum,
GInputStream *object_input,
guint64 length,
GCancellable *cancellable,
GError **error)
{
/* Ignore provided length for now */
return write_object (self, objtype, checksum, object_input, 0, NULL,
cancellable, error);
}
/**
* ostree_repo_write_metadata_trusted:
* @self: Repo

View File

@ -169,6 +169,14 @@ gboolean ostree_repo_write_metadata_trusted (OstreeRepo *self,
GCancellable *cancellable,
GError **error);
gboolean ostree_repo_write_metadata_stream_trusted (OstreeRepo *self,
OstreeObjectType objtype,
const char *checksum,
GInputStream *object_input,
guint64 length,
GCancellable *cancellable,
GError **error);
gboolean ostree_repo_write_content_trusted (OstreeRepo *self,
const char *checksum,
GInputStream *object_input,

View File

@ -61,32 +61,26 @@ import_one_object (OtLocalCloneData *data,
GError **error)
{
gboolean ret = FALSE;
guint64 length;
gs_unref_object GInputStream *object = NULL;
if (!ostree_repo_load_object_stream (data->src_repo, objtype, checksum,
&object, &length,
cancellable, error))
goto out;
if (objtype == OSTREE_OBJECT_TYPE_FILE)
{
guint64 length;
gs_unref_object GInputStream *file_object = NULL;
if (!ostree_repo_load_object_stream (data->src_repo, objtype, checksum,
&file_object, &length,
cancellable, error))
goto out;
if (!ostree_repo_write_content_trusted (data->dest_repo, checksum,
file_object, length,
object, length,
cancellable, error))
goto out;
}
else
{
gs_unref_variant GVariant *metadata = NULL;
if (!ostree_repo_load_variant (data->src_repo, objtype, checksum, &metadata,
error))
goto out;
if (!ostree_repo_write_metadata_trusted (data->dest_repo, objtype, checksum, metadata,
cancellable, error))
if (!ostree_repo_write_metadata_stream_trusted (data->dest_repo, objtype,
checksum, object, length,
cancellable, error))
goto out;
}