Skip to content

Commit 751d0f6

Browse files
mmathesiussgallagher
authored andcommitted
Add YAML emit capabilities to PackagerV3 object
Signed-off-by: Merlin Mathesius <[email protected]>
1 parent e771d41 commit 751d0f6

File tree

3 files changed

+337
-15
lines changed

3 files changed

+337
-15
lines changed

modulemd/include/private/modulemd-packager-v3-private.h

Lines changed: 20 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -15,6 +15,7 @@
1515

1616
#include "modulemd-2.0/modulemd-packager-v3.h"
1717
#include <glib-object.h>
18+
#include <yaml.h>
1819

1920

2021
G_BEGIN_DECLS
@@ -110,4 +111,23 @@ modulemd_packager_v3_parse_yaml (ModulemdSubdocumentInfo *subdoc,
110111
GError **error);
111112

112113

114+
/**
115+
* modulemd_packager_v3_emit_yaml:
116+
* @self: This #ModulemdModulePackagerV3 object.
117+
* @emitter: (inout): A libyaml emitter object positioned where the data
118+
* section of a #ModulemdModulePackagerV3 belongs in the YAML document.
119+
* @error: (out): A #GError that will return the reason for an emission or
120+
* validation error.
121+
*
122+
* Returns: TRUE if the modulemd-packager v3 document was emitted successfully.
123+
* FALSE and sets @error appropriately if the YAML could not be emitted.
124+
*
125+
* Since: 2.11
126+
*/
127+
gboolean
128+
modulemd_packager_v3_emit_yaml (ModulemdPackagerV3 *self,
129+
yaml_emitter_t *emitter,
130+
GError **error);
131+
132+
113133
G_END_DECLS

modulemd/modulemd-packager-v3.c

Lines changed: 141 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1628,3 +1628,144 @@ modulemd_packager_v3_parse_module_components (yaml_parser_t *parser,
16281628

16291629
return TRUE;
16301630
}
1631+
1632+
1633+
gboolean
1634+
modulemd_packager_v3_emit_yaml (ModulemdPackagerV3 *self,
1635+
yaml_emitter_t *emitter,
1636+
GError **error)
1637+
{
1638+
MODULEMD_INIT_TRACE ();
1639+
g_autoptr (GError) nested_error = NULL;
1640+
gsize i;
1641+
g_autoptr (GPtrArray) keys = NULL;
1642+
gboolean ret;
1643+
1644+
/* Emit document headers */
1645+
if (!modulemd_yaml_emit_document_headers (
1646+
emitter, MODULEMD_YAML_DOC_PACKAGER, MD_PACKAGER_VERSION_THREE, error))
1647+
{
1648+
return FALSE;
1649+
}
1650+
1651+
/* Start data: */
1652+
EMIT_MAPPING_START (emitter, error);
1653+
1654+
if (modulemd_packager_v3_get_module_name (self) != NULL)
1655+
{
1656+
EMIT_KEY_VALUE (
1657+
emitter, error, "name", modulemd_packager_v3_get_module_name (self));
1658+
}
1659+
1660+
if (modulemd_packager_v3_get_stream_name (self) != NULL)
1661+
{
1662+
EMIT_KEY_VALUE_FULL (emitter,
1663+
error,
1664+
"stream",
1665+
modulemd_packager_v3_get_stream_name (self),
1666+
YAML_DOUBLE_QUOTED_SCALAR_STYLE);
1667+
}
1668+
1669+
EMIT_KEY_VALUE (
1670+
emitter, error, "summary", modulemd_packager_v3_get_summary (self));
1671+
EMIT_KEY_VALUE_FULL (emitter,
1672+
error,
1673+
"description",
1674+
modulemd_packager_v3_get_description (self),
1675+
YAML_FOLDED_SCALAR_STYLE);
1676+
1677+
if (NON_EMPTY_TABLE (self->module_licenses))
1678+
{
1679+
EMIT_STRING_SET (emitter, error, "license", self->module_licenses);
1680+
}
1681+
1682+
if (self->xmd != NULL)
1683+
{
1684+
EMIT_SCALAR (emitter, error, "xmd");
1685+
if (!modulemd_yaml_emit_variant (emitter, self->xmd, error))
1686+
{
1687+
return FALSE;
1688+
}
1689+
}
1690+
1691+
if (NON_EMPTY_TABLE (self->build_configs))
1692+
{
1693+
EMIT_SCALAR (emitter, error, "configurations");
1694+
EMIT_SEQUENCE_START (emitter, error);
1695+
keys =
1696+
modulemd_ordered_str_keys (self->build_configs, modulemd_strcmp_sort);
1697+
for (i = 0; i < keys->len; i++)
1698+
{
1699+
ret = modulemd_build_config_emit_yaml (
1700+
g_hash_table_lookup (self->build_configs,
1701+
g_ptr_array_index (keys, i)),
1702+
emitter,
1703+
error);
1704+
if (!ret)
1705+
{
1706+
return FALSE;
1707+
}
1708+
}
1709+
EMIT_SEQUENCE_END (emitter, error);
1710+
}
1711+
1712+
1713+
if (self->community || self->documentation || self->tracker)
1714+
{
1715+
EMIT_SCALAR (emitter, error, "references");
1716+
EMIT_MAPPING_START (emitter, error);
1717+
EMIT_KEY_VALUE_IF_SET (emitter, error, "community", self->community);
1718+
EMIT_KEY_VALUE_IF_SET (
1719+
emitter, error, "documentation", self->documentation);
1720+
EMIT_KEY_VALUE_IF_SET (emitter, error, "tracker", self->tracker);
1721+
EMIT_MAPPING_END (emitter, error);
1722+
}
1723+
1724+
EMIT_HASHTABLE_VALUES_IF_NON_EMPTY (
1725+
emitter, error, "profiles", self->profiles, modulemd_profile_emit_yaml);
1726+
1727+
if (NON_EMPTY_TABLE (self->rpm_api))
1728+
{
1729+
EMIT_SCALAR (emitter, error, "api");
1730+
EMIT_MAPPING_START (emitter, error);
1731+
EMIT_STRING_SET (emitter, error, "rpms", self->rpm_api);
1732+
EMIT_MAPPING_END (emitter, error);
1733+
}
1734+
1735+
if (NON_EMPTY_TABLE (self->rpm_filters))
1736+
{
1737+
EMIT_SCALAR (emitter, error, "filter");
1738+
EMIT_MAPPING_START (emitter, error);
1739+
EMIT_STRING_SET (emitter, error, "rpms", self->rpm_filters);
1740+
EMIT_MAPPING_END (emitter, error);
1741+
}
1742+
1743+
if (NON_EMPTY_TABLE (self->rpm_components) ||
1744+
NON_EMPTY_TABLE (self->module_components))
1745+
{
1746+
EMIT_SCALAR (emitter, error, "components");
1747+
EMIT_MAPPING_START (emitter, error);
1748+
EMIT_HASHTABLE_VALUES_IF_NON_EMPTY (emitter,
1749+
error,
1750+
"rpms",
1751+
self->rpm_components,
1752+
modulemd_component_rpm_emit_yaml);
1753+
EMIT_HASHTABLE_VALUES_IF_NON_EMPTY (emitter,
1754+
error,
1755+
"modules",
1756+
self->module_components,
1757+
modulemd_component_module_emit_yaml);
1758+
EMIT_MAPPING_END (emitter, error);
1759+
}
1760+
1761+
/* The "data" mapping */
1762+
EMIT_MAPPING_END (emitter, error);
1763+
/* The overall document mapping */
1764+
EMIT_MAPPING_END (emitter, error);
1765+
if (!mmd_emitter_end_document (emitter, error))
1766+
{
1767+
return FALSE;
1768+
}
1769+
1770+
return TRUE;
1771+
}

0 commit comments

Comments
 (0)