1
0
mirror of https://github.com/openSUSE/libsolv.git synced 2026-02-05 12:45:46 +01:00

repo_autopattern: support creation of obsoletes for product packages

This adds support for provides of the type "product-obsoletes(name)".
We translate this to "Obsoletes: product:<name>" in the generated
product pseudo package.

We need this because people used "Obsoletes: product:name" in the
"release" package, but this is no longer allowed in newer rpm versions.
Besides, the obsoletes is kind of wrong in the "release" package
anyway, it belongs in the generated "product:" package.
This commit is contained in:
Michael Schroeder
2025-07-07 13:27:04 +02:00
parent b8b73e246b
commit aba891ef74

View File

@@ -404,17 +404,19 @@ repo_add_autopattern(Repo *repo, int flags)
while ((prv = *prvp++) != 0) /* go through all provides */
{
Id evr = 0;
int flags = 0;
if (ISRELDEP(prv))
{
Reldep *rd = GETRELDEP(pool, prv);
if (rd->flags != REL_EQ)
continue;
prv = rd->name;
evr = rd->evr;
flags = rd->flags;
}
pn = pool_id2str(pool, prv);
if (strncmp("product-", pn, 8) != 0)
continue;
if (flags && flags != REL_EQ && strncmp(pn, "product-obsoletes(", 18) != 0)
continue;
newname = 0;
if (evr)
{
@@ -452,6 +454,18 @@ repo_add_autopattern(Repo *repo, int flags)
repodata_add_poolstr_array(data, s2 - pool->solvables, PRODUCT_URL_TYPE, type);
repodata_add_poolstr_array(data, s2 - pool->solvables, PRODUCT_URL, newname);
}
else if (!strncmp(pn, "product-obsoletes(", 18) && pn[18] && pn[19])
{
if (newname)
pool_freetmpspace(pool, newname);
newname = pool_tmpjoin(pool, "product:", pn + 18, 0);
newname[strlen(newname) - 1] = 0; /* closing ) */
unescape(newname);
Id obs = pool_str2id(pool, newname, 1);
if (flags && evr)
obs = pool_rel2id(pool, obs, evr, flags, 1);
s2->obsoletes = repo_addid_dep(s2->repo, s2->obsoletes, obs, 0);
}
}
}
queue_free(&prdq);