@@ -54,13 +54,16 @@ enum state {
5454 STATE_CDISPLAY_ORDER ,
5555 STATE_GROUPLIST ,
5656 STATE_GROUPID ,
57+ STATE_ENVIRONMENT ,
58+ STATE_OPTIONLIST ,
5759 NUMSTATES
5860};
5961
6062static struct solv_xmlparser_element stateswitches [] = {
6163 { STATE_START , "comps" , STATE_COMPS , 0 },
6264 { STATE_COMPS , "group" , STATE_GROUP , 0 },
6365 { STATE_COMPS , "category" , STATE_CATEGORY , 0 },
66+ { STATE_COMPS , "environment" , STATE_ENVIRONMENT , 0 },
6467 { STATE_GROUP , "id" , STATE_ID , 1 },
6568 { STATE_GROUP , "name" , STATE_NAME , 1 },
6669 { STATE_GROUP , "description" , STATE_DESCRIPTION , 1 },
@@ -77,6 +80,13 @@ static struct solv_xmlparser_element stateswitches[] = {
7780 { STATE_CATEGORY , "grouplist" , STATE_GROUPLIST , 0 },
7881 { STATE_CATEGORY , "display_order" , STATE_DISPLAY_ORDER , 1 },
7982 { STATE_GROUPLIST , "groupid" , STATE_GROUPID , 1 },
83+ { STATE_ENVIRONMENT , "id" , STATE_ID , 1 },
84+ { STATE_ENVIRONMENT , "name" , STATE_NAME , 1 },
85+ { STATE_ENVIRONMENT , "description" , STATE_DESCRIPTION , 1 },
86+ { STATE_ENVIRONMENT , "grouplist" , STATE_GROUPLIST , 0 },
87+ { STATE_ENVIRONMENT , "optionlist" , STATE_OPTIONLIST , 0 },
88+ { STATE_ENVIRONMENT , "display_order" , STATE_DISPLAY_ORDER , 1 },
89+ { STATE_OPTIONLIST , "groupid" , STATE_GROUPID , 1 },
8090 { NUMSTATES }
8191};
8292
@@ -128,9 +138,15 @@ startElement(struct solv_xmlparser *xmlp, int state, const char *name, const cha
128138 {
129139 case STATE_GROUP :
130140 case STATE_CATEGORY :
141+ case STATE_ENVIRONMENT :
131142 s = pd -> solvable = pool_id2solvable (pool , repo_add_solvable (pd -> repo ));
132143 pd -> handle = s - pool -> solvables ;
133- pd -> kind = state == STATE_GROUP ? "group" : "category" ;
144+ if (state == STATE_GROUP )
145+ pd -> kind = "group" ;
146+ else if (state == STATE_CATEGORY )
147+ pd -> kind = "category" ;
148+ else
149+ pd -> kind = "environment" ;
134150 pd -> isvisible = COMPS_DEFAULT_ISVISIBLE ;
135151 pd -> isdefault = COMPS_DEFAULT_ISDEFAULT ;
136152 break ;
@@ -160,6 +176,18 @@ startElement(struct solv_xmlparser *xmlp, int state, const char *name, const cha
160176 break ;
161177 }
162178
179+ case STATE_GROUPLIST :
180+ {
181+ pd -> reqtype = SOLVABLE_REQUIRES ;
182+ break ;
183+ }
184+
185+ case STATE_OPTIONLIST :
186+ {
187+ pd -> reqtype = SOLVABLE_SUGGESTS ;
188+ break ;
189+ }
190+
163191 default :
164192 break ;
165193 }
@@ -177,6 +205,7 @@ endElement(struct solv_xmlparser *xmlp, int state, char *content)
177205 {
178206 case STATE_GROUP :
179207 case STATE_CATEGORY :
208+ case STATE_ENVIRONMENT :
180209 if (!s -> arch )
181210 s -> arch = ARCH_NOARCH ;
182211 if (!s -> evr )
@@ -211,7 +240,7 @@ endElement(struct solv_xmlparser *xmlp, int state, char *content)
211240
212241 case STATE_GROUPID :
213242 id = pool_str2id (pd -> pool , join2 (& pd -> jd , "group" , ":" , content ), 1 );
214- s -> requires = repo_addid_dep (pd -> repo , s -> requires , id , 0 );
243+ repo_add_idarray (pd -> repo , pd -> handle , pd -> reqtype , id );
215244 break ;
216245
217246 case STATE_USERVISIBLE :
0 commit comments