add changes, bump version
[platform/upstream/libsolv.git] / ext / repo_content.c
index a51f7c2..2ce6940 100644 (file)
@@ -213,6 +213,7 @@ repo_add_content(Repo *repo, FILE *fp, int flags)
   char *defvendor = 0;
 
   int i = 0;
+  int res = 0;
 
   /* architectures
      we use the first architecture in BASEARCHS or noarch
@@ -289,6 +290,29 @@ repo_add_content(Repo *repo, FILE *fp, int flags)
              repodata_add_poolstr_array(data, SOLVID_META, REPOSITORY_REPOID, value);
              continue;
            }
+         if (istag ("REPOKEYWORDS"))
+           {
+             add_multiple_strings(data, SOLVID_META, REPOSITORY_KEYWORDS, value);
+             continue;
+           }
+         if (istag ("DISTRO"))
+           {
+             Id dh = repodata_new_handle(data);
+             char *p;
+             /* like with createrepo --distro */
+             if ((p = strchr(value, ',')) != 0)
+               {
+                 *p++ = 0;
+                 if (*value)
+                   repodata_set_poolstr(data, dh, REPOSITORY_PRODUCT_CPEID, value);
+               }
+             else
+               p = value;
+             if (*p)
+               repodata_set_str(data, dh, REPOSITORY_PRODUCT_LABEL, p);
+             repodata_add_flexarray(data, SOLVID_META, REPOSITORY_DISTROS, dh);
+             continue;
+           }
 
          if (istag ("DESCRDIR"))
            {
@@ -339,13 +363,15 @@ repo_add_content(Repo *repo, FILE *fp, int flags)
              type = solv_chksum_str2type(checksumtype);
              if (!type)
                {
-                 fprintf(stderr, "Unknown checksum type: %s: %s\n", value, checksumtype);
+                 pool_error(pool, -1, "%s: unknown checksum type '%s'", value, checksumtype);
+                 res = 1;
                  continue;
                }
               l = solv_chksum_len(type);
              if (strlen(checksum) != 2 * l)
                {
-                 fprintf(stderr, "Invalid checksum length: %s: for %s\n", value, checksum);
+                 pool_error(pool, -1, "%s: invalid checksum length for %s", value, checksumtype);
+                 res = 1;
                  continue;
                }
              fh = repodata_new_handle(data);
@@ -441,43 +467,39 @@ repo_add_content(Repo *repo, FILE *fp, int flags)
                    }
                }
             }
+         if (!code10)
+           continue;
 
          /*
           * Every tag below is Code10 only
           *
           */
 
-         if (code10 && istag ("DISTPRODUCT"))
-           /* DISTPRODUCT is for registration and Yast, not for the solver. */
-           repodata_set_str(data, s - pool->solvables, PRODUCT_DISTPRODUCT, value);
-         else if (code10 && istag ("DISTVERSION"))
-           /* DISTVERSION is for registration and Yast, not for the solver. */
-           repodata_set_str(data, s - pool->solvables, PRODUCT_DISTVERSION, value);
-         else if (code10 && istag ("ARCH"))
+         if (istag ("ARCH"))
            /* Theoretically we want to have the best arch of the given
               modifiers which still is compatible with the system
               arch.  We don't know the latter here, though.  */
            s->arch = ARCH_NOARCH;
-         else if (code10 && istag ("PREREQUIRES"))
+         else if (istag ("PREREQUIRES"))
            s->requires = adddep(pool, &pd, s->requires, value, SOLVABLE_PREREQMARKER);
-         else if (code10 && istag ("REQUIRES"))
+         else if (istag ("REQUIRES"))
            s->requires = adddep(pool, &pd, s->requires, value, -SOLVABLE_PREREQMARKER);
-         else if (code10 && istag ("PROVIDES"))
+         else if (istag ("PROVIDES"))
            s->provides = adddep(pool, &pd, s->provides, value, 0);
-         else if (code10 && istag ("CONFLICTS"))
+         else if (istag ("CONFLICTS"))
            s->conflicts = adddep(pool, &pd, s->conflicts, value, 0);
-         else if (code10 && istag ("OBSOLETES"))
+         else if (istag ("OBSOLETES"))
            s->obsoletes = adddep(pool, &pd, s->obsoletes, value, 0);
-         else if (code10 && istag ("RECOMMENDS"))
+         else if (istag ("RECOMMENDS"))
            s->recommends = adddep(pool, &pd, s->recommends, value, 0);
-         else if (code10 && istag ("SUGGESTS"))
+         else if (istag ("SUGGESTS"))
            s->suggests = adddep(pool, &pd, s->suggests, value, 0);
-         else if (code10 && istag ("SUPPLEMENTS"))
+         else if (istag ("SUPPLEMENTS"))
            s->supplements = adddep(pool, &pd, s->supplements, value, 0);
-         else if (code10 && istag ("ENHANCES"))
+         else if (istag ("ENHANCES"))
            s->enhances = adddep(pool, &pd, s->enhances, value, 0);
          /* FRESHENS doesn't seem to exist.  */
-         else if (code10 && istag ("TYPE"))
+         else if (istag ("TYPE"))
            repodata_set_str(data, s - pool->solvables, PRODUCT_TYPE, value);
 
          /* XXX do something about LINGUAS and ARCH?
@@ -545,5 +567,5 @@ repo_add_content(Repo *repo, FILE *fp, int flags)
   solv_free(otherarchs);
   if (!(flags & REPO_NO_INTERNALIZE))
     repodata_internalize(data);
-  return 0;
+  return res;
 }