[Libosinfo] [PATCH 4/7] media: Add variant info API/XML
Christophe Fergeau
cfergeau at redhat.com
Wed Nov 27 09:30:39 UTC 2013
On Tue, Nov 26, 2013 at 04:16:30PM +0000, Zeeshan Ali (Khattak) wrote:
> Add:
>
> * ability to associate media to a variant of the OS in the 'media' XML
> node.
> * API to query variant of the OS, media is associated with.
Same comment about ahving an XML example in there
> ---
> data/schemas/libosinfo.rng | 5 +++++
> osinfo/libosinfo.syms | 2 ++
> osinfo/osinfo_db.c | 5 +++++
> osinfo/osinfo_loader.c | 7 +++++++
> osinfo/osinfo_media.c | 31 +++++++++++++++++++++++++++++++
> osinfo/osinfo_media.h | 3 +++
> 6 files changed, 53 insertions(+)
>
> diff --git a/data/schemas/libosinfo.rng b/data/schemas/libosinfo.rng
> index cc13982..ecd83c2 100644
> --- a/data/schemas/libosinfo.rng
> +++ b/data/schemas/libosinfo.rng
> @@ -338,6 +338,11 @@
> </attribute>
> </optional>
> <optional>
> + <attribute name='variant'>
> + <text/>
> + </attribute>
> + </optional>
> + <optional>
> <element name='url'>
> <ref name='url'/>
> </element>
> diff --git a/osinfo/libosinfo.syms b/osinfo/libosinfo.syms
> index 528c2a5..1de56e3 100644
> --- a/osinfo/libosinfo.syms
> +++ b/osinfo/libosinfo.syms
> @@ -448,6 +448,8 @@ LIBOSINFO_0.2.9 {
> osinfo_os_get_release_status;
> osinfo_release_status_get_type;
>
> + osinfo_media_get_variant;
> +
> osinfo_os_add_variant;
> osinfo_os_get_variant_list;
>
> diff --git a/osinfo/osinfo_db.c b/osinfo/osinfo_db.c
> index f19d9b4..d851499 100644
> --- a/osinfo/osinfo_db.c
> +++ b/osinfo/osinfo_db.c
> @@ -627,6 +627,7 @@ static void fill_media (OsinfoDb *db, OsinfoMedia *media,
> const gchar *initrd_path;
> const gchar *arch;
> const gchar *url;
> + const gchar *variant;
>
> languages = match_languages(db, media, matched_media);
> if (languages != NULL)
> @@ -642,6 +643,10 @@ static void fill_media (OsinfoDb *db, OsinfoMedia *media,
> url = osinfo_media_get_url(matched_media);
> if (url != NULL)
> g_object_set(G_OBJECT(media), "url", url, NULL);
> + variant = osinfo_entity_get_param_value(OSINFO_ENTITY(matched_media),
> + "variant");
> + if (variant != NULL)
> + osinfo_entity_set_param(OSINFO_ENTITY(media), "variant", variant);
>
> kernel_path = osinfo_media_get_kernel_path(matched_media);
> if (kernel_path != NULL)
> diff --git a/osinfo/osinfo_loader.c b/osinfo/osinfo_loader.c
> index 84dd843..85e036e 100644
> --- a/osinfo/osinfo_loader.c
> +++ b/osinfo/osinfo_loader.c
> @@ -892,6 +892,13 @@ static OsinfoMedia *osinfo_loader_media (OsinfoLoader *loader,
> xmlFree(installer_reboots);
> }
>
> + if (variant) {
> + osinfo_entity_set_param(OSINFO_ENTITY(media),
> + OSINFO_MEDIA_PROP_VARIANT,
> + (gchar *)variant);
> + xmlFree(variant);
> + }
> +
> gint nnodes = osinfo_loader_nodeset("./iso/*", ctxt, &nodes, err);
> if (error_is_set(err)) {
> g_object_unref(media);
> diff --git a/osinfo/osinfo_media.c b/osinfo/osinfo_media.c
> index 118ff8b..c3c9d20 100644
> --- a/osinfo/osinfo_media.c
> +++ b/osinfo/osinfo_media.c
> @@ -1136,6 +1136,37 @@ void osinfo_media_set_os(OsinfoMedia *media, OsinfoOs *os)
> }
>
> /**
> + * osinfo_media_get_variant:
> + * @media: an #OsinfoMedia instance
> + *
> + * Gets the variant of the associated operating system.
> + *
> + * Returns: (transfer full): the operating system variant, or NULL
> + */
> +OsinfoVariant *osinfo_media_get_variant(OsinfoMedia *media)
> +{
> + const char *id;
> + OsinfoOs *os;
> + OsinfoVariantList *variants;
> + OsinfoEntity *variant;
> +
> + g_return_val_if_fail(OSINFO_IS_MEDIA(media), NULL);
> +
> + id = osinfo_entity_get_param_value(OSINFO_ENTITY(media),
> + OSINFO_MEDIA_PROP_VARIANT);
> + if (id == NULL)
> + return NULL;
> +
> + os = g_weak_ref_get(&media->priv->os);
> + variants = osinfo_os_get_variant_list(os);
> + g_object_unref (os);
> + variant = osinfo_list_find_by_id(OSINFO_LIST(variants), id);
> + g_return_val_if_fail(OSINFO_IS_VARIANT(variant), NULL);
> +
> + return g_object_ref (variant);
> +}
> +
> +/**
> * osinfo_media_get_languages:
> * @media: an #OsinfoMedia instance
> *
> diff --git a/osinfo/osinfo_media.h b/osinfo/osinfo_media.h
> index 308f75e..87ef8af 100644
> --- a/osinfo/osinfo_media.h
> +++ b/osinfo/osinfo_media.h
> @@ -26,6 +26,7 @@
> #include <glib-object.h>
> #include <gio/gio.h>
> #include <osinfo/osinfo_entity.h>
> +#include <osinfo/osinfo_variant.h>
>
> #ifndef __OSINFO_MEDIA_H__
> #define __OSINFO_MEDIA_H__
> @@ -84,6 +85,7 @@ typedef struct _OsinfoMediaPrivate OsinfoMediaPrivate;
> #define OSINFO_MEDIA_PROP_LANG "l10n-language"
> #define OSINFO_MEDIA_PROP_LANG_REGEX "l10n-language-regex"
> #define OSINFO_MEDIA_PROP_LANG_MAP "l10n-language-map"
> +#define OSINFO_MEDIA_PROP_VARIANT "variant"
>
> /* object */
> struct _OsinfoMedia
> @@ -128,6 +130,7 @@ const gchar *osinfo_media_get_application_id(OsinfoMedia *media);
> const gchar *osinfo_media_get_kernel_path(OsinfoMedia *media);
> const gchar *osinfo_media_get_initrd_path(OsinfoMedia *media);
> OsinfoOs *osinfo_media_get_os(OsinfoMedia *media);
> +OsinfoVariant *osinfo_media_get_variant(OsinfoMedia *media);
> GList *osinfo_media_get_languages(OsinfoMedia *media);
> gboolean osinfo_media_get_installer(OsinfoMedia *media);
> gboolean osinfo_media_get_live(OsinfoMedia *media);
> --
> 1.8.4.2
>
> _______________________________________________
> Libosinfo mailing list
> Libosinfo at redhat.com
> https://www.redhat.com/mailman/listinfo/libosinfo
-------------- next part --------------
A non-text attachment was scrubbed...
Name: not available
Type: application/pgp-signature
Size: 198 bytes
Desc: not available
URL: <http://listman.redhat.com/archives/libosinfo/attachments/20131127/94289f2a/attachment.sig>
More information about the Libosinfo
mailing list