OCI: Add flatpak_oci_registry_load_image_config helper

We can't use load_versioned() for images because in the docker
case there is no mediatype field.
This commit is contained in:
Alexander Larsson
2019-06-13 12:47:03 +02:00
parent 09831d535a
commit 94ed2946ab
5 changed files with 51 additions and 0 deletions

View File

@@ -53,5 +53,6 @@ typedef struct FlatpakDir FlatpakDir;
typedef struct FlatpakDeploy FlatpakDeploy;
typedef struct FlatpakOciRegistry FlatpakOciRegistry;
typedef struct _FlatpakOciManifest FlatpakOciManifest;
typedef struct _FlatpakOciImage FlatpakOciImage;
#endif /* __FLATPAK_COMMON_TYPES_H__ */

View File

@@ -225,6 +225,9 @@ void flatpak_oci_image_set_layer (FlatpakOciImage *image,
GHashTable * flatpak_oci_image_get_labels (FlatpakOciImage *self);
int flatpak_oci_image_add_history (FlatpakOciImage *image);
FlatpakOciImage * flatpak_oci_image_from_json (GBytes *bytes,
GError **error);
void flatpak_oci_add_annotations_for_commit (GHashTable *annotations,
const char *ref,
const char *commit,

View File

@@ -211,6 +211,26 @@ flatpak_oci_versioned_from_json (GBytes *bytes, GError **error)
return NULL;
}
FlatpakOciImage *
flatpak_oci_image_from_json (GBytes *bytes,
GError **error)
{
g_autoptr(JsonParser) parser = NULL;
JsonNode *root = NULL;
parser = json_parser_new ();
if (!json_parser_load_from_data (parser,
g_bytes_get_data (bytes, NULL),
g_bytes_get_size (bytes),
error))
return NULL;
root = json_parser_get_root (parser);
return (FlatpakOciImage *) flatpak_json_from_node (root, FLATPAK_TYPE_OCI_IMAGE, error);
}
const char *
flatpak_oci_versioned_get_mediatype (FlatpakOciVersioned *self)
{

View File

@@ -105,6 +105,12 @@ FlatpakOciVersioned * flatpak_oci_registry_load_versioned (FlatpakOciRegistry *
gsize *out_size,
GCancellable *cancellable,
GError **error);
FlatpakOciImage * flatpak_oci_registry_load_image_config (FlatpakOciRegistry *self,
const char *repository,
const char *digest,
gsize *out_size,
GCancellable *cancellable,
GError **error);
FlatpakOciLayerWriter *flatpak_oci_registry_write_layer (FlatpakOciRegistry *self,
GCancellable *cancellable,
GError **error);

View File

@@ -957,6 +957,27 @@ flatpak_oci_registry_load_versioned (FlatpakOciRegistry *self,
return flatpak_oci_versioned_from_json (bytes, error);
}
FlatpakOciImage *
flatpak_oci_registry_load_image_config (FlatpakOciRegistry *self,
const char *repository,
const char *digest,
gsize *out_size,
GCancellable *cancellable,
GError **error)
{
g_autoptr(GBytes) bytes = NULL;
g_assert (self->valid);
bytes = flatpak_oci_registry_load_blob (self, repository, FALSE, digest, cancellable, error);
if (bytes == NULL)
return NULL;
if (out_size)
*out_size = g_bytes_get_size (bytes);
return flatpak_oci_image_from_json (bytes, error);
}
struct FlatpakOciLayerWriter
{
GObject parent;