Skip to content

Commit aac9f0c

Browse files
committed
Add support for modular updateinfo.xml data
Module advisory data can specify which advisory is applicable for which modular stream. Module information can be absent or there could be multiple entries. If there is a module entry in advisory and none of modules in advisory is enabled on the system, advisory is not relevant for the system and should be ignored.
1 parent dc7d0f1 commit aac9f0c

2 files changed

Lines changed: 45 additions & 0 deletions

File tree

ext/repo_updateinfoxml.c

Lines changed: 37 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -37,6 +37,7 @@
3737
* <pkglist>
3838
* <collection short="F8">
3939
* <name>Fedora 8</name>
40+
* <module name="pki-deps" stream="10.6" version="20181019123559" context="9edba152" arch="x86_64"/>
4041
* <package arch="ppc64" name="imlib-debuginfo" release="6.fc8" src="http://download.fedoraproject.org/pub/fedora/linux/updates/8/ppc64/imlib-debuginfo-1.9.15-6.fc8.ppc64.rpm" version="1.9.15">
4142
* <filename>imlib-debuginfo-1.9.15-6.fc8.ppc64.rpm</filename>
4243
* <reboot_suggested>True</reboot_suggested>
@@ -70,6 +71,7 @@ enum state {
7071
STATE_RELOGIN,
7172
STATE_RIGHTS,
7273
STATE_SEVERITY,
74+
STATE_MODULE,
7375
NUMSTATES
7476
};
7577

@@ -92,6 +94,7 @@ static struct solv_xmlparser_element stateswitches[] = {
9294
{ STATE_PKGLIST, "collection", STATE_COLLECTION, 0 },
9395
{ STATE_COLLECTION, "name", STATE_NAME, 1 },
9496
{ STATE_COLLECTION, "package", STATE_PACKAGE, 0 },
97+
{ STATE_COLLECTION, "module", STATE_MODULE, 0 },
9598
{ STATE_PACKAGE, "filename", STATE_FILENAME, 1 },
9699
{ STATE_PACKAGE, "reboot_suggested",STATE_REBOOT, 1 },
97100
{ STATE_PACKAGE, "restart_suggested",STATE_RESTART, 1 },
@@ -321,6 +324,40 @@ startElement(struct solv_xmlparser *xmlp, int state, const char *name, const cha
321324
repodata_set_id(pd->data, pd->collhandle, UPDATE_COLLECTION_ARCH, a);
322325
break;
323326
}
327+
case STATE_MODULE:
328+
{
329+
const char *name = 0, *stream = 0, *version = 0, *context = 0, *arch = 0;
330+
Id name_id, stream_id, version_id, context_id, arch_id = 0;
331+
for (; *atts; atts += 2)
332+
{
333+
if (!strcmp(*atts, "arch"))
334+
arch = atts[1];
335+
else if (!strcmp(*atts, "name"))
336+
name = atts[1];
337+
else if (!strcmp(*atts, "stream"))
338+
stream = atts[1];
339+
else if (!strcmp(*atts, "version"))
340+
version = atts[1];
341+
else if (!strcmp(*atts, "context"))
342+
context = atts[1];
343+
}
344+
name_id = pool_str2id(pool, name, 1);
345+
if (arch)
346+
arch_id = pool_str2id(pool, arch, 1);
347+
stream_id = pool_str2id(pool, stream, 1);
348+
version_id = pool_str2id(pool, version, 1);
349+
context_id = pool_str2id(pool, context, 1);
350+
351+
Id module_handle = repodata_new_handle(pd->data);
352+
repodata_set_id(pd->data, module_handle, UPDATE_MODULE_NAME, name_id);
353+
repodata_set_id(pd->data, module_handle, UPDATE_MODULE_STREAM, stream_id);
354+
repodata_set_id(pd->data, module_handle, UPDATE_MODULE_VERSION, version_id);
355+
repodata_set_id(pd->data, module_handle, UPDATE_MODULE_CONTEXT, context_id);
356+
if (arch_id)
357+
repodata_set_id(pd->data, module_handle, UPDATE_MODULE_ARCH, arch_id);
358+
repodata_add_flexarray(pd->data, pd->handle, UPDATE_MODULE, module_handle);
359+
break;
360+
}
324361

325362
default:
326363
break;

src/knownid.h

Lines changed: 8 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -250,6 +250,14 @@ KNOWNID(SIGNATURE_TIME, "signature:time"),
250250
KNOWNID(SIGNATURE_EXPIRES, "signature:expires"),
251251
KNOWNID(SIGNATURE_DATA, "signature:data"),
252252

253+
/* 'content' of patch, usually list of modules */
254+
KNOWNID(UPDATE_MODULE, "update:module"), /* "name stream version context arch" */
255+
KNOWNID(UPDATE_MODULE_NAME, "update:module:name"), /* name */
256+
KNOWNID(UPDATE_MODULE_STREAM, "update:module:stream"), /* stream */
257+
KNOWNID(UPDATE_MODULE_VERSION, "update:module:version"), /* version */
258+
KNOWNID(UPDATE_MODULE_CONTEXT, "update:module:context"), /* context */
259+
KNOWNID(UPDATE_MODULE_ARCH, "update:module:arch"), /* architecture */
260+
253261
KNOWNID(ID_NUM_INTERNAL, 0)
254262

255263
#ifdef KNOWNID_INITIALIZE

0 commit comments

Comments
 (0)