while ((key = *keyp++) != 0)
{
id = keys[key].name;
- if (id == REPODATA_ADDEDFILEPROVIDES && keys[key].type == REPOKEY_TYPE_IDARRAY)
+ if (id == REPODATA_ADDEDFILEPROVIDES && keys[key].type == REPOKEY_TYPE_REL_IDARRAY)
{
+ Id old = 0;
/* + 1 just in case */
ida = sat_calloc(keys[key].size + 1, sizeof(Id));
- read_idarray(maindata, numid, idmap, ida, ida + keys[key].size + 1);
+ read_idarray(maindata, 0, 0, ida, ida + keys[key].size + 1);
maindata->addedfileprovides = ida;
+ for (; *ida; ida++)
+ {
+ old += *ida - 1;
+ if (old >= numid)
+ {
+ *ida = 0;
+ break;
+ }
+ *ida = idmap ? idmap[old] : old;
+ }
continue;
}
skip_item(maindata, keys[key].type, numid, numrel);
key = cbdata.mykeys + cbdata.nmykeys;
key->name = REPODATA_ADDEDFILEPROVIDES;
- key->type = REPOKEY_TYPE_IDARRAY;
+ key->type = REPOKEY_TYPE_REL_IDARRAY;
key->size = 0;
key->storage = KEY_STORAGE_SOLVABLE;
cbdata.keymap[key->name] = cbdata.nmykeys++;
data_addid(&xd, repodataschemata[i]);
if (fileinfo[i].addedfileprovides)
{
- for (j = 0; fileinfo[i].addedfileprovides[j]; j++)
- data_addideof(&xd, needid[fileinfo[i].addedfileprovides[j]].need, fileinfo[i].addedfileprovides[j + 1] ? 0 : 1);
+ data_addidarray_sort(&xd, pool, needid, fileinfo[i].addedfileprovides, 0);
}
else
{