1
0
mirror of https://github.com/openSUSE/libsolv.git synced 2026-02-05 12:45:46 +01:00

Support orderwithrequires dependencies in susedata.xml

This commit is contained in:
Michael Schroeder
2025-06-03 13:20:20 +02:00
parent 6eb8741bcc
commit b6d4ecaaa4

View File

@@ -94,6 +94,7 @@ enum state {
STATE_SUGGESTS,
STATE_ENHANCES,
STATE_FRESHENS,
STATE_ORDERWITHREQUIRES,
STATE_SOURCERPM,
STATE_HEADERRANGE,
STATE_BUILDHOST,
@@ -107,6 +108,7 @@ enum state {
STATE_SUGGESTSENTRY,
STATE_ENHANCESENTRY,
STATE_FRESHENSENTRY,
STATE_ORDERWITHREQUIRESENTRY,
STATE_FILE,
@@ -195,6 +197,7 @@ static struct solv_xmlparser_element stateswitches[] = {
{ STATE_SOLVABLE, "rpm:suggests", STATE_SUGGESTS, 0 },
{ STATE_SOLVABLE, "rpm:enhances", STATE_ENHANCES, 0 },
{ STATE_SOLVABLE, "rpm:freshens", STATE_FRESHENS, 0 },
{ STATE_SOLVABLE, "rpm:orderwithrequires", STATE_ORDERWITHREQUIRES, 0 },
{ STATE_SOLVABLE, "rpm:sourcerpm", STATE_SOURCERPM, 1 },
{ STATE_SOLVABLE, "rpm:header-range", STATE_HEADERRANGE, 0 },
{ STATE_SOLVABLE, "rpm:buildhost", STATE_BUILDHOST, 1 },
@@ -214,6 +217,7 @@ static struct solv_xmlparser_element stateswitches[] = {
{ STATE_SUGGESTS, "rpm:entry", STATE_SUGGESTSENTRY, 0 },
{ STATE_ENHANCES, "rpm:entry", STATE_ENHANCESENTRY, 0 },
{ STATE_FRESHENS, "rpm:entry", STATE_FRESHENSENTRY, 0 },
{ STATE_ORDERWITHREQUIRES, "rpm:entry", STATE_ORDERWITHREQUIRESENTRY, 0 },
{ STATE_INCLUDES, "item", STATE_INCLUDESENTRY, 0 },
{ STATE_EXTENDS, "item", STATE_EXTENDSENTRY, 0 },
@@ -229,6 +233,7 @@ struct parsedata {
char *kind;
Solvable *solvable;
Offset freshens;
Offset orderwithrequires;
struct solv_xmlparser xmlp;
struct joindata jd;
@@ -670,6 +675,8 @@ startElement(struct solv_xmlparser *xmlp, int state, const char *name, const cha
one.
*/
pd->extending = 0;
pd->freshens = 0;
pd->orderwithrequires = 0;
if ((pkgid = solv_xmlparser_find_attr("pkgid", atts)) != NULL)
{
unsigned char chk[256];
@@ -704,7 +711,6 @@ startElement(struct solv_xmlparser *xmlp, int state, const char *name, const cha
handle = repo_add_solvable(pd->repo);
if (!pd->first)
pd->first = handle;
pd->freshens = 0;
}
pd->handle = handle;
pd->solvable = pool_id2solvable(pool, handle);
@@ -779,6 +785,12 @@ startElement(struct solv_xmlparser *xmlp, int state, const char *name, const cha
case STATE_FRESHENSENTRY:
pd->freshens = adddep(pool, pd, pd->freshens, atts, 0);
break;
case STATE_ORDERWITHREQUIRES:
pd->orderwithrequires = 0;
break;
case STATE_ORDERWITHREQUIRESENTRY:
pd->orderwithrequires = adddep(pool, pd, pd->orderwithrequires, atts, 0);
break;
case STATE_EULA:
case STATE_SUMMARY:
case STATE_CATEGORY:
@@ -931,6 +943,12 @@ endElement(struct solv_xmlparser *xmlp, int state, char *content)
switch (state)
{
case STATE_SOLVABLE:
if (pd->orderwithrequires)
{
while (repo->idarraydata[pd->orderwithrequires])
repodata_add_idarray(pd->data, s - pool->solvables, SOLVABLE_ORDERWITHREQUIRES, repo->idarraydata[pd->orderwithrequires++]);
pd->orderwithrequires = 0;
}
if (pd->extending)
{
pd->solvable = 0;