@@ -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