Skip to content

Commit 054818c

Browse files
authored
Merge pull request #402 from kontura/collection_o
Updateinfo metadata with multiple collections in a single pkglist (using only ids)
2 parents 5bd0f26 + fdf5d0d commit 054818c

2 files changed

Lines changed: 28 additions & 12 deletions

File tree

ext/repo_updateinfoxml.c

Lines changed: 26 additions & 12 deletions
Original file line numberDiff line numberDiff line change
@@ -110,9 +110,10 @@ struct parsedata {
110110
Id handle;
111111
Solvable *solvable;
112112
time_t buildtime;
113-
Id collhandle;
113+
Id pkghandle;
114114
struct solv_xmlparser xmlp;
115115
struct joindata jd;
116+
Id collhandle;
116117
};
117118

118119
/*
@@ -287,6 +288,12 @@ startElement(struct solv_xmlparser *xmlp, int state, const char *name, const cha
287288
}
288289
break;
289290

291+
case STATE_COLLECTION:
292+
{
293+
pd->collhandle = repodata_new_handle(pd->data);
294+
}
295+
break;
296+
290297
/* <package arch="ppc64" name="imlib-debuginfo" release="6.fc8"
291298
* src="http://download.fedoraproject.org/pub/fedora/linux/updates/8/ppc64/imlib-debuginfo-1.9.15-6.fc8.ppc64.rpm"
292299
* version="1.9.15">
@@ -326,12 +333,12 @@ startElement(struct solv_xmlparser *xmlp, int state, const char *name, const cha
326333
solvable->conflicts = repo_addid_dep(pd->repo, solvable->conflicts, id, 0);
327334
}
328335

329-
/* who needs the collection anyway? */
330-
pd->collhandle = repodata_new_handle(pd->data);
331-
repodata_set_id(pd->data, pd->collhandle, UPDATE_COLLECTION_NAME, n);
332-
repodata_set_id(pd->data, pd->collhandle, UPDATE_COLLECTION_EVR, evr);
336+
/* UPDATE_COLLECTION is misnamed, it should have been UPDATE_PACKAGE */
337+
pd->pkghandle = repodata_new_handle(pd->data);
338+
repodata_set_id(pd->data, pd->pkghandle, UPDATE_COLLECTION_NAME, n);
339+
repodata_set_id(pd->data, pd->pkghandle, UPDATE_COLLECTION_EVR, evr);
333340
if (a)
334-
repodata_set_id(pd->data, pd->collhandle, UPDATE_COLLECTION_ARCH, a);
341+
repodata_set_id(pd->data, pd->pkghandle, UPDATE_COLLECTION_ARCH, a);
335342
break;
336343
}
337344
case STATE_MODULE:
@@ -364,6 +371,7 @@ startElement(struct solv_xmlparser *xmlp, int state, const char *name, const cha
364371
if (arch)
365372
repodata_set_poolstr(pd->data, module_handle, UPDATE_MODULE_ARCH, arch);
366373
repodata_add_flexarray(pd->data, pd->handle, UPDATE_MODULE, module_handle);
374+
repodata_add_flexarray(pd->data, pd->collhandle, UPDATE_MODULE, module_handle);
367375
break;
368376
}
369377

@@ -427,15 +435,21 @@ endElement(struct solv_xmlparser *xmlp, int state, char *content)
427435
repodata_set_str(pd->data, pd->handle, UPDATE_MESSAGE, content);
428436
break;
429437

430-
case STATE_PACKAGE:
431-
repodata_add_flexarray(pd->data, pd->handle, UPDATE_COLLECTION, pd->collhandle);
438+
case STATE_COLLECTION:
439+
repodata_add_flexarray(pd->data, pd->handle, UPDATE_COLLECTIONLIST, pd->collhandle);
432440
pd->collhandle = 0;
433441
break;
434442

443+
case STATE_PACKAGE:
444+
repodata_add_flexarray(pd->data, pd->handle, UPDATE_COLLECTION, pd->pkghandle);
445+
repodata_add_flexarray(pd->data, pd->collhandle, UPDATE_COLLECTION, pd->pkghandle);
446+
pd->pkghandle = 0;
447+
break;
448+
435449
/* <filename>libntlm-0.4.2-1.fc8.x86_64.rpm</filename> */
436450
/* <filename>libntlm-0.4.2-1.fc8.x86_64.rpm</filename> */
437451
case STATE_FILENAME:
438-
repodata_set_str(pd->data, pd->collhandle, UPDATE_COLLECTION_FILENAME, content);
452+
repodata_set_str(pd->data, pd->pkghandle, UPDATE_COLLECTION_FILENAME, content);
439453
break;
440454

441455
/* <reboot_suggested>True</reboot_suggested> */
@@ -444,7 +458,7 @@ endElement(struct solv_xmlparser *xmlp, int state, char *content)
444458
{
445459
/* FIXME: this is per-package, the global flag should be computed at runtime */
446460
repodata_set_void(pd->data, pd->handle, UPDATE_REBOOT);
447-
repodata_set_void(pd->data, pd->collhandle, UPDATE_REBOOT);
461+
repodata_set_void(pd->data, pd->pkghandle, UPDATE_REBOOT);
448462
}
449463
break;
450464

@@ -454,7 +468,7 @@ endElement(struct solv_xmlparser *xmlp, int state, char *content)
454468
{
455469
/* FIXME: this is per-package, the global flag should be computed at runtime */
456470
repodata_set_void(pd->data, pd->handle, UPDATE_RESTART);
457-
repodata_set_void(pd->data, pd->collhandle, UPDATE_RESTART);
471+
repodata_set_void(pd->data, pd->pkghandle, UPDATE_RESTART);
458472
}
459473
break;
460474

@@ -464,7 +478,7 @@ endElement(struct solv_xmlparser *xmlp, int state, char *content)
464478
{
465479
/* FIXME: this is per-package, the global flag should be computed at runtime */
466480
repodata_set_void(pd->data, pd->handle, UPDATE_RELOGIN);
467-
repodata_set_void(pd->data, pd->collhandle, UPDATE_RELOGIN);
481+
repodata_set_void(pd->data, pd->pkghandle, UPDATE_RELOGIN);
468482
}
469483
break;
470484
default:

src/knownid.h

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -268,6 +268,8 @@ KNOWNID(LIBSOLV_SELF_DESTRUCT_PKG, "libsolv-self-destruct-pkg()"), /* this
268268
KNOWNID(SOLVABLE_CONSTRAINS, "solvable:constrains"), /* conda */
269269
KNOWNID(SOLVABLE_TRACK_FEATURES, "solvable:track_features"), /* conda */
270270

271+
KNOWNID(UPDATE_COLLECTIONLIST, "update:collectionlist"), /* list of UPDATE_COLLECTION (actually packages) and UPDATE_MODULE */
272+
271273
KNOWNID(ID_NUM_INTERNAL, 0)
272274

273275
#ifdef KNOWNID_INITIALIZE

0 commit comments

Comments
 (0)