Skip to content

Commit 3d88b0c

Browse files
authored
Merge pull request #468 from pkratoch/environments
Add support for environments in comps xml
2 parents 06a5468 + 291f509 commit 3d88b0c

1 file changed

Lines changed: 31 additions & 2 deletions

File tree

ext/repo_comps.c

Lines changed: 31 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -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

6062
static 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

Comments
 (0)