From aba891ef741a31a687a0996d6e6f88f674a9b029 Mon Sep 17 00:00:00 2001 From: Michael Schroeder Date: Mon, 7 Jul 2025 13:27:04 +0200 Subject: [PATCH] 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:" 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. --- ext/repo_autopattern.c | 18 ++++++++++++++++-- 1 file changed, 16 insertions(+), 2 deletions(-) diff --git a/ext/repo_autopattern.c b/ext/repo_autopattern.c index 40d21128..23dd1733 100644 --- a/ext/repo_autopattern.c +++ b/ext/repo_autopattern.c @@ -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); -- 2.47.3