diff --git a/doc/ostree-sections.txt b/doc/ostree-sections.txt index aaecbb48..428c69f2 100644 --- a/doc/ostree-sections.txt +++ b/doc/ostree-sections.txt @@ -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 diff --git a/src/libostree/ostree-repo-commit.c b/src/libostree/ostree-repo-commit.c index cba299fa..a2bd263b 100644 --- a/src/libostree/ostree-repo-commit.c +++ b/src/libostree/ostree-repo-commit.c @@ -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 diff --git a/src/libostree/ostree-repo.h b/src/libostree/ostree-repo.h index 1511b843..d55874f8 100644 --- a/src/libostree/ostree-repo.h +++ b/src/libostree/ostree-repo.h @@ -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, diff --git a/src/ostree/ot-builtin-pull-local.c b/src/ostree/ot-builtin-pull-local.c index 1a037460..f051d6a5 100644 --- a/src/ostree/ot-builtin-pull-local.c +++ b/src/ostree/ot-builtin-pull-local.c @@ -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; }