- 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 6f7a877..5d88ca4 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 2bd3f4c..e75924e 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 fcff7c9..e62b810 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 7325cd7..e751d84 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 9277395..2703c92 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 51ea595..12d63bc 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 10500e7..b6f7b33 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 13086d9..cb0b1c9 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 38e37ff..021474f 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 650da2b..8c442a0 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 0ccdaa9..c25f876 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;