]> git.ipfire.org Git - thirdparty/libsolv.git/commitdiff
Make arch<->noarch pkg changes work for suse patches
authorMichael Schroeder <mls@suse.de>
Tue, 12 Nov 2019 10:22:50 +0000 (11:22 +0100)
committerMichael Schroeder <mls@suse.de>
Tue, 12 Nov 2019 10:22:50 +0000 (11:22 +0100)
This means we add a single pkg < evr conflict for noarch packages,
and both pkg.arch < evr and pkg.noarch < evr conflicts otherwise.

ext/repo_updateinfoxml.c

index 51c3f5abd6fb7aee1f46a6cb577b2a8aee111bb3..5b980a168e3b1e0e6c8035ebfb8a403960466bb0 100644 (file)
@@ -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);