From: Michael Schroeder Date: Tue, 12 Nov 2019 10:22:50 +0000 (+0100) Subject: Make arch<->noarch pkg changes work for suse patches X-Git-Tag: 0.7.8~1 X-Git-Url: http://git.ipfire.org/cgi-bin/gitweb.cgi?a=commitdiff_plain;h=4c4f8e57ff773e5c446aef5d274b5d6ea69293fe;p=thirdparty%2Flibsolv.git Make arch<->noarch pkg changes work for suse patches This means we add a single pkg < evr conflict for noarch packages, and both pkg.arch < evr and pkg.noarch < evr conflicts otherwise. --- diff --git a/ext/repo_updateinfoxml.c b/ext/repo_updateinfoxml.c index 51c3f5ab..5b980a16 100644 --- a/ext/repo_updateinfoxml.c +++ b/ext/repo_updateinfoxml.c @@ -298,8 +298,7 @@ startElement(struct solv_xmlparser *xmlp, int state, const char *name, const cha { const char *arch = 0, *name = 0; Id evr = makeevr_atts(pool, pd, atts); /* parse "epoch", "version", "release" */ - Id n, a = 0; - Id rel_id; + Id n, a, id; for (; *atts; atts += 2) { @@ -308,17 +307,24 @@ startElement(struct solv_xmlparser *xmlp, int state, const char *name, const cha else if (!strcmp(*atts, "name")) name = atts[1]; } - /* generated Id for name */ - n = pool_str2id(pool, name, 1); - rel_id = n; - if (arch) + n = name ? pool_str2id(pool, name, 1) : 0; + a = arch ? pool_str2id(pool, arch, 1) : 0; + + /* generated conflicts for the package */ + if (a && a != ARCH_NOARCH) + { + id = pool_rel2id(pool, n, a, REL_ARCH, 1); + id = pool_rel2id(pool, id, evr, REL_LT, 1); + solvable->conflicts = repo_addid_dep(pd->repo, solvable->conflicts, id, 0); + id = pool_rel2id(pool, n, ARCH_NOARCH, REL_ARCH, 1); + id = pool_rel2id(pool, id, evr, REL_LT, 1); + solvable->conflicts = repo_addid_dep(pd->repo, solvable->conflicts, id, 0); + } + else { - /* generate Id for arch and combine with name */ - a = pool_str2id(pool, arch, 1); - rel_id = pool_rel2id(pool, n, a, REL_ARCH, 1); + id = pool_rel2id(pool, n, evr, REL_LT, 1); + solvable->conflicts = repo_addid_dep(pd->repo, solvable->conflicts, id, 0); } - rel_id = pool_rel2id(pool, rel_id, evr, REL_LT, 1); - solvable->conflicts = repo_addid_dep(pd->repo, solvable->conflicts, rel_id, 0); /* who needs the collection anyway? */ pd->collhandle = repodata_new_handle(pd->data);