Applications can use this to determine if an OS is an actual released OS, a pre-release or a development snapshot. Co-author: Christophe Fergeau <cfergeau@xxxxxxxxxx> --- data/schemas/libosinfo.rng | 11 +++++++++++ osinfo/libosinfo.syms | 5 +++++ osinfo/osinfo_loader.c | 1 + osinfo/osinfo_os.c | 19 +++++++++++++++++++ osinfo/osinfo_os.h | 21 +++++++++++++++++++-- 5 files changed, 55 insertions(+), 2 deletions(-) diff --git a/data/schemas/libosinfo.rng b/data/schemas/libosinfo.rng index d491832..a504266 100644 --- a/data/schemas/libosinfo.rng +++ b/data/schemas/libosinfo.rng @@ -481,6 +481,9 @@ <optional> <ref name='devices-rel'/> </optional> + <optional> + <ref name='release-status'/> + </optional> <zeroOrMore> <ref name='resources'/> </zeroOrMore> @@ -740,4 +743,12 @@ <param name="pattern">strict|warn|none</param> </data> </define> + + <define name='release-status'> + <element name='release-status'> + <data type="string"> + <param name="pattern">snapshot|prerelease|released</param> + </data> + </element> + </define> </grammar> diff --git a/osinfo/libosinfo.syms b/osinfo/libosinfo.syms index ccd7c30..fa5be4e 100644 --- a/osinfo/libosinfo.syms +++ b/osinfo/libosinfo.syms @@ -444,6 +444,11 @@ LIBOSINFO_0.2.8 { osinfo_product_get_release_date_string; } LIBOSINFO_0.2.7; +LIBOSINFO_0.2.9 { + osinfo_os_get_release_status; + osinfo_release_status_get_type; +} LIBOSINFO_0.2.8; + /* Symbols in next release... LIBOSINFO_0.0.2 { diff --git a/osinfo/osinfo_loader.c b/osinfo/osinfo_loader.c index 9873cbd..bb7e9a4 100644 --- a/osinfo/osinfo_loader.c +++ b/osinfo/osinfo_loader.c @@ -1166,6 +1166,7 @@ static void osinfo_loader_os(OsinfoLoader *loader, const OsinfoEntityKey keys[] = { { OSINFO_OS_PROP_FAMILY, G_TYPE_STRING }, { OSINFO_OS_PROP_DISTRO, G_TYPE_STRING }, + { OSINFO_OS_PROP_RELEASE_STATUS, G_TYPE_STRING }, { NULL, G_TYPE_INVALID } }; diff --git a/osinfo/osinfo_os.c b/osinfo/osinfo_os.c index 638d9c1..8d1cc66 100644 --- a/osinfo/osinfo_os.c +++ b/osinfo/osinfo_os.c @@ -402,6 +402,25 @@ const gchar *osinfo_os_get_distro(OsinfoOs *os) } /** + * osinfo_os_get_release_status: + * @os: an #OsinfoOs + * + * Use this to determine the release status of the @os. + * + * Returns: (transfer none): release status of @os. + */ +OsinfoReleaseStatus osinfo_os_get_release_status(OsinfoOs *os) +{ + g_return_val_if_fail(OSINFO_IS_OS(os), OSINFO_RELEASE_STATUS_RELEASED); + + return osinfo_entity_get_param_value_enum + (OSINFO_ENTITY(os), + OSINFO_OS_PROP_RELEASE_STATUS, + OSINFO_TYPE_RELEASE_STATUS, + OSINFO_RELEASE_STATUS_RELEASED); +} + +/** * osinfo_os_get_media_list: * @os: an operating system * diff --git a/osinfo/osinfo_os.h b/osinfo/osinfo_os.h index d667e3b..433c511 100644 --- a/osinfo/osinfo_os.h +++ b/osinfo/osinfo_os.h @@ -55,8 +55,9 @@ typedef struct _OsinfoOsClass OsinfoOsClass; typedef struct _OsinfoOsPrivate OsinfoOsPrivate; -#define OSINFO_OS_PROP_FAMILY "family" -#define OSINFO_OS_PROP_DISTRO "distro" +#define OSINFO_OS_PROP_FAMILY "family" +#define OSINFO_OS_PROP_DISTRO "distro" +#define OSINFO_OS_PROP_RELEASE_STATUS "release-status" /* object */ struct _OsinfoOs @@ -78,6 +79,21 @@ struct _OsinfoOsClass /* class members */ }; +/** + * OsinfoReleaseStatus: + * @OSINFO_RELEASE_STATUS_RELEASED: A released OS. + * @OSINFO_RELEASE_STATUS_SNAPSHOT: A continuous integration snapshot and not + * an actual released product yet. For example, gnome-continuous images for + * development snapshots of GNOME and nightly build ISOs of Fedora etc. + * @OSINFO_RELEASE_STATUS_PRERELEASE: A pre-release. For example, alpha and + * beta pre-releases of Fedora etc. + */ +typedef enum { + OSINFO_RELEASE_STATUS_RELEASED, + OSINFO_RELEASE_STATUS_SNAPSHOT, + OSINFO_RELEASE_STATUS_PRERELEASE +} OsinfoReleaseStatus; + GType osinfo_os_get_type(void); OsinfoOs *osinfo_os_new(const gchar *id); @@ -93,6 +109,7 @@ OsinfoDeviceLinkList *osinfo_os_get_device_links(OsinfoOs *os, OsinfoFilter *fil OsinfoDeviceLink *osinfo_os_add_device(OsinfoOs *os, OsinfoDevice *dev); const gchar *osinfo_os_get_family(OsinfoOs *os); const gchar *osinfo_os_get_distro(OsinfoOs *os); +OsinfoReleaseStatus osinfo_os_get_release_status(OsinfoOs *os); OsinfoMediaList *osinfo_os_get_media_list(OsinfoOs *os); void osinfo_os_add_media(OsinfoOs *os, OsinfoMedia *media); OsinfoTreeList *osinfo_os_get_tree_list(OsinfoOs *os); -- 1.8.4.2 _______________________________________________ Libosinfo mailing list Libosinfo@xxxxxxxxxx https://www.redhat.com/mailman/listinfo/libosinfo