]> git.ipfire.org Git - thirdparty/libsolv.git/commitdiff
- only add selfprovides if name is set
authorMichael Schroeder <mls@suse.de>
Wed, 1 Jul 2009 08:32:28 +0000 (10:32 +0200)
committerMichael Schroeder <mls@suse.de>
Wed, 1 Jul 2009 08:32:28 +0000 (10:32 +0200)
- add ARCH_ALL

ext/repo_content.c
ext/repo_deb.c
ext/repo_helix.c
ext/repo_products.c
ext/repo_releasefile_products.c
ext/repo_rpmmd.c
ext/repo_susetags.c
ext/repo_zyppdb.c
src/knownid.h
src/policy.c
src/poolarch.c

index 6f7a87706dbf1b1b089f1502fb9e82e84ceaba84..5d88ca4b5509a05f6c69fc512b1734a9ce556297 100644 (file)
@@ -376,7 +376,9 @@ repo_add_content(Repo *repo, FILE *fp, int flags)
                  /* finish old solvable */
                  if (!s->arch)
                    s->arch = ARCH_NOARCH;
-                 if (s->arch != ARCH_SRC && s->arch != ARCH_NOSRC)
+                 if (!s->evr)
+                   s->evr = ID_EMPTY;
+                 if (s->name && s->arch != ARCH_SRC && s->arch != ARCH_NOSRC)
                    s->provides = repo_addid_dep(repo, s->provides, rel2id(pool, s->name, s->evr, REL_EQ, 1), 0);
                  if (code10)
                    s->supplements = repo_fix_supplements(repo, s->provides, s->supplements, 0);
@@ -514,7 +516,9 @@ repo_add_content(Repo *repo, FILE *fp, int flags)
 
       if (!s->arch)
        s->arch = ARCH_NOARCH;
-      if (s->arch != ARCH_SRC && s->arch != ARCH_NOSRC)
+      if (!s->evr)
+       s->evr = ID_EMPTY;
+      if (s->name && s->arch != ARCH_SRC && s->arch != ARCH_NOSRC)
         s->provides = repo_addid_dep(repo, s->provides, rel2id(pool, s->name, s->evr, REL_EQ, 1), 0);
       if (code10)
        s->supplements = repo_fix_supplements(repo, s->provides, s->supplements, 0);
@@ -530,7 +534,7 @@ repo_add_content(Repo *repo, FILE *fp, int flags)
          p->arch = otherarchs[i];
 
          /* self provides */
-         if (p->arch != ARCH_SRC && p->arch != ARCH_NOSRC)
+         if (s->name && p->arch != ARCH_SRC && p->arch != ARCH_NOSRC)
              p->provides = repo_addid_dep(repo, p->provides, rel2id(pool, p->name, p->evr, REL_EQ, 1), 0);
 
          /* now merge the attributes */
index 2bd3f4cb193f592daa0a207c21a1183230017121..e75924ebbaaaa5c394e90d1fe3e329788c82b2e4 100644 (file)
@@ -266,6 +266,12 @@ control2solvable(Solvable *s, Repodata *data, char *control)
          break;
        }
     }
+  if (!s->arch)
+    s->arch = ARCH_ALL;
+  if (!s->evr)
+    s->evr = ID_EMPTY;
+  if (s->name)
+    s->provides = repo_addid_dep(repo, s->provides, rel2id(pool, s->name, s->evr, REL_EQ, 1), 0);
 }
 
 void
index fcff7c92d79d1d81b6100934b43edc0832fe9997..e62b810afa995163b73f61836a16223fa6c68c7e 100644 (file)
@@ -619,7 +619,7 @@ endElement(void *userData, const char *name)
                         pd->version ? pd->evrspace + pd->version : 0,
                         pd->release ? pd->evrspace + pd->release : 0);
       /* ensure self-provides */
-      if (s->arch != ARCH_SRC && s->arch != ARCH_NOSRC)
+      if (s->name && s->arch != ARCH_SRC && s->arch != ARCH_NOSRC)
         s->provides = repo_addid_dep(pd->repo, s->provides, rel2id(pool, s->name, s->evr, REL_EQ, 1), 0);
       s->supplements = repo_fix_supplements(pd->repo, s->provides, s->supplements, pd->freshens);
       s->conflicts = repo_fix_conflicts(pd->repo, s->conflicts);
index 7325cd7b6647a91174678ffbb500c00f73dda9f1..e751d84af8d80eb2454c3ffc67d33b26f82cee17 100644 (file)
@@ -293,7 +293,9 @@ endElement(void *userData, const char *name)
       pd->tmprel = sat_free((void *)pd->tmprel);
       if (!s->arch)
        s->arch = ARCH_NOARCH;
-      if (s->arch != ARCH_SRC && s->arch != ARCH_NOSRC)
+      if (!s->evr)
+       s->evr = ID_EMPTY;
+      if (s->name && s->arch != ARCH_SRC && s->arch != ARCH_NOSRC)
        s->provides = repo_addid_dep(pd->repo, s->provides, rel2id(pd->pool, s->name, s->evr, REL_EQ, 1), 0);
       pd->solvable = 0;
       break;
index 92773953ea97dd38df4cfc34e77594e62430ef14..2703c924f4c4b15c5bfe08dec85db94fa0cec143 100644 (file)
@@ -102,11 +102,9 @@ add_releasefile_product(Repo *repo, FILE *fp)
     {
       Solvable *s = pool_id2solvable(pool, repo_add_solvable(repo));
       s->name = name;
-      if (version)
-       s->evr = version;
-      if (arch)
-       s->arch = arch;
-      if (s->arch != ARCH_SRC && s->arch != ARCH_NOSRC)
+      s->evr = version ? version : ID_EMPTY;
+      s->arch = arch ? arch : ARCH_NOARCH;
+      if (s->name && s->arch != ARCH_SRC && s->arch != ARCH_NOSRC)
        s->provides = repo_addid_dep(repo, s->provides, rel2id(pool, s->name, s->evr, REL_EQ, 1), 0);
     }
 }
index 51ea5951776a2d1be3a0ca0206074d449de460b5..12d63bc1c7da973fd148af0fd8d6b6ef284c9799 100644 (file)
@@ -902,7 +902,7 @@ endElement(void *userData, const char *name)
         s->arch = ARCH_NOARCH;
       if (!s->evr)
         s->evr = ID_EMPTY;     /* some patterns have this */
-      if (s->arch != ARCH_SRC && s->arch != ARCH_NOSRC)
+      if (s->name && s->arch != ARCH_SRC && s->arch != ARCH_NOSRC)
         s->provides = repo_addid_dep(repo, s->provides, rel2id(pool, s->name, s->evr, REL_EQ, 1), 0);
       s->supplements = repo_fix_supplements(repo, s->provides, s->supplements, pd->freshens);
       s->conflicts = repo_fix_conflicts(repo, s->conflicts);
index 10500e7ee558f8cca7a274735e35d2a5fd9ee3d0..b6f7b33c1d6c41d44d04632bde25c1a3e1859669 100644 (file)
@@ -383,7 +383,7 @@ finish_solvable(struct parsedata *pd, Solvable *s, Id handle, Offset freshens)
 #endif
   /* A self provide, except for source packages.  This is harmless
      to do twice (in case we see the same package twice).  */
-  if (s->arch != ARCH_SRC && s->arch != ARCH_NOSRC)
+  if (s->name && s->arch != ARCH_SRC && s->arch != ARCH_NOSRC)
     s->provides = repo_addid_dep(pd->repo, s->provides,
                rel2id(pool, s->name, s->evr, REL_EQ, 1), 0);
   /* XXX This uses repo_addid_dep internally, so should also be
index 13086d9bd3d1af418961c5ba7895a0be0948e813..cb0b1c950277858caa7ca126226a717fedc18059 100644 (file)
@@ -231,10 +231,11 @@ endElement(void *userData, const char *name)
   switch (pd->state)
     {
     case STATE_PRODUCT:
-
       if (!s->arch)
        s->arch = ARCH_NOARCH;
-      if (s->arch != ARCH_SRC && s->arch != ARCH_NOSRC)
+      if (!s->evr)
+       s->evr = ID_EMPTY;
+      if (s->name && s->arch != ARCH_SRC && s->arch != ARCH_NOSRC)
        s->provides = repo_addid_dep(pd->repo, s->provides, rel2id(pd->pool, s->name, s->evr, REL_EQ, 1), 0);
       pd->solvable = 0;
       break;
index 38e37ffe140dbad1639ca36ee7021b21f9f2c13d..021474f29e8c533151b09f8dd33068ee7521d326 100644 (file)
@@ -57,6 +57,7 @@ KNOWNID(SYSTEM_SYSTEM,                        "system:system"),
 KNOWNID(ARCH_SRC,                      "src"),
 KNOWNID(ARCH_NOSRC,                    "nosrc"),
 KNOWNID(ARCH_NOARCH,                   "noarch"),
+KNOWNID(ARCH_ALL,                      "all"),
 
 KNOWNID(REPOSITORY_SOLVABLES,          "repository:solvables"),
 KNOWNID(REPOSITORY_DELTAINFO,          "repository:deltainfo"),
index 650da2b01ab60747c0894efd9611687ca4fb4cb8..8c442a0d149829effc398022b42e7d332eefc679 100644 (file)
@@ -397,8 +397,13 @@ policy_illegal_archchange(Solver *solv, Solvable *s1, Solvable *s2)
     }
 
   /* we allow changes to/from noarch */
+#ifndef DEBIAN_SEMANTICS
   if (a1 == a2 || a1 == ARCH_NOARCH || a2 == ARCH_NOARCH)
     return 0;
+#else
+  if (a1 == a2 || a1 == ARCH_ALL || a2 == ARCH_ALL)
+    return 0;
+#endif
   if (!pool->id2arch)
     return 0;
   a1 = a1 <= pool->lastarch ? pool->id2arch[a1] : 0;
index 0ccdaa917f6e9d990ffdd4b9b453d7531c0be19e..c25f8765fe5315d641e370c099e2f65d671f923a 100644 (file)
@@ -62,7 +62,11 @@ pool_setarch(Pool *pool, const char *arch)
       pool->lastarch = 0;
       return;
     }
+#ifndef DEBIAN_SEMANTICS
   id = ARCH_NOARCH;
+#else
+  id = ARCH_ALL;
+#endif
   lastarch = id + 255;
   id2arch = sat_calloc(lastarch + 1, sizeof(Id));
   id2arch[id] = 1;