Skip to content

Commit b6d4eca

Browse files
committed
Support orderwithrequires dependencies in susedata.xml
1 parent 6eb8741 commit b6d4eca

File tree

1 file changed

+19
-1
lines changed

1 file changed

+19
-1
lines changed

ext/repo_rpmmd.c

Lines changed: 19 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -94,6 +94,7 @@ enum state {
9494
STATE_SUGGESTS,
9595
STATE_ENHANCES,
9696
STATE_FRESHENS,
97+
STATE_ORDERWITHREQUIRES,
9798
STATE_SOURCERPM,
9899
STATE_HEADERRANGE,
99100
STATE_BUILDHOST,
@@ -107,6 +108,7 @@ enum state {
107108
STATE_SUGGESTSENTRY,
108109
STATE_ENHANCESENTRY,
109110
STATE_FRESHENSENTRY,
111+
STATE_ORDERWITHREQUIRESENTRY,
110112

111113
STATE_FILE,
112114

@@ -195,6 +197,7 @@ static struct solv_xmlparser_element stateswitches[] = {
195197
{ STATE_SOLVABLE, "rpm:suggests", STATE_SUGGESTS, 0 },
196198
{ STATE_SOLVABLE, "rpm:enhances", STATE_ENHANCES, 0 },
197199
{ STATE_SOLVABLE, "rpm:freshens", STATE_FRESHENS, 0 },
200+
{ STATE_SOLVABLE, "rpm:orderwithrequires", STATE_ORDERWITHREQUIRES, 0 },
198201
{ STATE_SOLVABLE, "rpm:sourcerpm", STATE_SOURCERPM, 1 },
199202
{ STATE_SOLVABLE, "rpm:header-range", STATE_HEADERRANGE, 0 },
200203
{ STATE_SOLVABLE, "rpm:buildhost", STATE_BUILDHOST, 1 },
@@ -214,6 +217,7 @@ static struct solv_xmlparser_element stateswitches[] = {
214217
{ STATE_SUGGESTS, "rpm:entry", STATE_SUGGESTSENTRY, 0 },
215218
{ STATE_ENHANCES, "rpm:entry", STATE_ENHANCESENTRY, 0 },
216219
{ STATE_FRESHENS, "rpm:entry", STATE_FRESHENSENTRY, 0 },
220+
{ STATE_ORDERWITHREQUIRES, "rpm:entry", STATE_ORDERWITHREQUIRESENTRY, 0 },
217221

218222
{ STATE_INCLUDES, "item", STATE_INCLUDESENTRY, 0 },
219223
{ STATE_EXTENDS, "item", STATE_EXTENDSENTRY, 0 },
@@ -229,6 +233,7 @@ struct parsedata {
229233
char *kind;
230234
Solvable *solvable;
231235
Offset freshens;
236+
Offset orderwithrequires;
232237

233238
struct solv_xmlparser xmlp;
234239
struct joindata jd;
@@ -670,6 +675,8 @@ startElement(struct solv_xmlparser *xmlp, int state, const char *name, const cha
670675
one.
671676
*/
672677
pd->extending = 0;
678+
pd->freshens = 0;
679+
pd->orderwithrequires = 0;
673680
if ((pkgid = solv_xmlparser_find_attr("pkgid", atts)) != NULL)
674681
{
675682
unsigned char chk[256];
@@ -704,7 +711,6 @@ startElement(struct solv_xmlparser *xmlp, int state, const char *name, const cha
704711
handle = repo_add_solvable(pd->repo);
705712
if (!pd->first)
706713
pd->first = handle;
707-
pd->freshens = 0;
708714
}
709715
pd->handle = handle;
710716
pd->solvable = pool_id2solvable(pool, handle);
@@ -779,6 +785,12 @@ startElement(struct solv_xmlparser *xmlp, int state, const char *name, const cha
779785
case STATE_FRESHENSENTRY:
780786
pd->freshens = adddep(pool, pd, pd->freshens, atts, 0);
781787
break;
788+
case STATE_ORDERWITHREQUIRES:
789+
pd->orderwithrequires = 0;
790+
break;
791+
case STATE_ORDERWITHREQUIRESENTRY:
792+
pd->orderwithrequires = adddep(pool, pd, pd->orderwithrequires, atts, 0);
793+
break;
782794
case STATE_EULA:
783795
case STATE_SUMMARY:
784796
case STATE_CATEGORY:
@@ -931,6 +943,12 @@ endElement(struct solv_xmlparser *xmlp, int state, char *content)
931943
switch (state)
932944
{
933945
case STATE_SOLVABLE:
946+
if (pd->orderwithrequires)
947+
{
948+
while (repo->idarraydata[pd->orderwithrequires])
949+
repodata_add_idarray(pd->data, s - pool->solvables, SOLVABLE_ORDERWITHREQUIRES, repo->idarraydata[pd->orderwithrequires++]);
950+
pd->orderwithrequires = 0;
951+
}
934952
if (pd->extending)
935953
{
936954
pd->solvable = 0;

0 commit comments

Comments
 (0)