]> git.ipfire.org Git - thirdparty/libsolv.git/commitdiff
parse 'content' to separate 'product:...' solvable again
authorKlaus Kaempf <kkaempf@suse.de>
Mon, 4 Aug 2008 15:55:37 +0000 (15:55 +0000)
committerKlaus Kaempf <kkaempf@suse.de>
Mon, 4 Aug 2008 15:55:37 +0000 (15:55 +0000)
tools/repo_content.c
tools/repo_susetags.c

index 63299e47e6b9223e3e8afe24bf6968fc3bd14829..60c62a8de825f1f8575c03bf076c44f43d51c3d8 100644 (file)
@@ -220,8 +220,6 @@ repo_add_content(Repo *repo, FILE *fp)
   Repodata *data;
   Id handle = 0;
   int contentstyle = 0;
-  char *product_name = 0;
-  char *product_version = 0;
   
   memset(&pd, 0, sizeof(pd));
   line = sat_malloc(1024);
@@ -283,33 +281,12 @@ repo_add_content(Repo *repo, FILE *fp)
 
          if (code11 && istag ("REFERENCES"))
            {
-             char *vals[3];
-             Id nameid;
-             Id evrid = 0;
-             
-             if (split(value, vals, 3) == 3)
-               {
-                 if (!strcmp(vals[1], "=")) 
-                   {
-                     nameid = str2id(pool, vals[0], 1);
-                     evrid = str2id(pool, vals[2], 1);
-                 
-                     s = pool_id2solvable(pool, repo_add_solvable(repo));
-                     repodata_extend(data, s - pool->solvables);
-                     handle = repodata_get_handle(data, s - pool->solvables - repo->start);
-
-                     s->name = nameid;
-                     s->evr = evrid;
-                     s->provides = adddep(pool, &pd, s->provides, "product()", 0);
-
-                     continue;
-                   }
-               }
-             fprintf(stderr, "REFERENCES must be 'name = evr'\n");
-             break;
+             repo_set_id(repo, s - pool->solvables, PRODUCT_REFERENCES, str2id(pool, value, 1));
+             continue;
            }
          
-         if (code10 && istag ("PRODUCT"))
+         if ((code10 && istag ("PRODUCT"))
+             || (code11 && istag ("NAME")))
            {
              /* Finish old solvable, but only if it wasn't created
                 on demand without seeing a PRODUCT entry.  */
@@ -317,7 +294,7 @@ repo_add_content(Repo *repo, FILE *fp)
                {
                  if (s && 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 (s)
+                 if (s && code10)
                    s->supplements = repo_fix_legacy(repo, s->provides, s->supplements, 0);
                  /* Only support one product.  */
                  s = pool_id2solvable(pool, repo_add_solvable(repo));
@@ -339,22 +316,11 @@ repo_add_content(Repo *repo, FILE *fp)
            }
          if (istag ("VERSION"))
            {
-             if (code11)
-               {
-                 repo_set_str(repo, s - pool->solvables, PRODUCT_VERSION, value);
-                 product_version = strdup(value);
-               }
-             else
-               /* without a release? but that's like zypp implements it */
-               s->evr = makeevr(pool, value);
-           }
-         else if (code11 && istag ("NAME"))
-           {
-             repo_set_str(repo, s - pool->solvables, PRODUCT_NAME, value);
-             product_name = strdup(value);
+             /* without a release? but that's like zypp implements it */
+             s->evr = makeevr(pool, value);
            }
          else if (code11 && istag ("DISTRIBUTION"))
-           repo_set_str(repo, s - pool->solvables, PRODUCT_DISTRIBUTION, value);
+           repo_set_str(repo, s - pool->solvables, SOLVABLE_DISTRIBUTION, value);
          else if (code11 && istag ("FLAVOR"))
            repo_set_str(repo, s - pool->solvables, PRODUCT_FLAVOR, value);
          else if (istag ("DATADIR"))
@@ -377,10 +343,7 @@ repo_add_content(Repo *repo, FILE *fp)
            repodata_add_poolstr_array(data, handle, PRODUCT_RELNOTESURL, value);
          else if (istag ("VENDOR"))
            {
-             if (code11)
-               repo_set_str(repo, s - pool->solvables, PRODUCT_VENDOR, value);
-             else
-               s->vendor = str2id(pool, value, 1);
+             s->vendor = str2id(pool, value, 1);
            }
          
          /*
@@ -435,31 +398,14 @@ repo_add_content(Repo *repo, FILE *fp)
       fprintf(stderr, "No product solvable created !\n");
       exit(1);
     }
-  if (code11)
-    {
-      if (!product_name) 
-        {
-         fprintf(stderr, "Product must have a name !\n");
-         exit(1);
-       }
-      if (!product_version) 
-        {
-         fprintf(stderr, "Product must have a version !\n");
-         exit(1);
-       }
-      const char *product = join(&pd, "product(", product_name, ")");
-      s->provides = adddep(pool, &pd, s->provides, join(&pd, product, " = ", product_version), 0);
-      free(product_version);
-      free(product_name);
-    }
 
-  if (code10)
+  if (!s->arch)
+    s->arch = ARCH_NOARCH;
+  if (s->arch != ARCH_SRC && s->arch != ARCH_NOSRC)
     {
-      if (!s->arch)
-       s->arch = ARCH_NOARCH;
-      if (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_legacy(repo, s->provides, s->supplements, 0);
+      s->provides = repo_addid_dep(repo, s->provides, rel2id(pool, s->name, s->evr, REL_EQ, 1), 0);
+      if (code10)
+       s->supplements = repo_fix_legacy(repo, s->provides, s->supplements, 0);
     }
   
   if (pd.tmp)
index 261c6285e90a1e2dab6c18e0b658dff3dd5798bb..5cbcb2ba641378a17984377b10ece9baeaa66e1e 100644 (file)
@@ -495,8 +495,6 @@ repo_add_susetags(Repo *repo, FILE *fp, Id product, const char *language, int fl
     {
       if (!strncmp (id2str(pool, pool->solvables[product].name), "product:", 8))
         vendor = pool->solvables[product].vendor;
-      else
-        vendor = str2id(pool, repo_lookup_str(pool->solvables + product, PRODUCT_VENDOR), 0);
     }
   
   memset(&pd, 0, sizeof(pd));
@@ -678,40 +676,28 @@ repo_add_susetags(Repo *repo, FILE *fp, Id product, const char *language, int fl
          /* Now see if we know this solvable already.  If we found neither
             the name nor the arch at all in this repo
             there's no chance of finding the exact solvable either.  */
-         if (name && arch)
+         if (name && arch && (indesc >= 2))
            {
-             if (product && (name == pool->solvables[product].name))
+             int n, nn;
+             /* Now look for a solvable with the given name,evr,arch.
+              Our input is structured so, that the second set of =Pkg
+              lines comes in roughly the same order as the first set, so we 
+              have a hint at where to start our search, namely were we found
+              the last entry.  */
+             for (n = repo->start, nn = n + last_found_pack; n < repo->end; n++, nn++)
                {
-                 s = pool->solvables + product;
-                 s->vendor = vendor;
-                 s->arch = arch;
-                 s->evr = evr;
-                 handle = repodata_get_handle(data, s - pool->solvables - repo->start);
-                 last_found_pack = (s - pool->solvables) - repo->start;
+                 if (nn >= repo->end)
+                   nn = repo->start;
+                 s = pool->solvables + nn;
+                 if (s->repo == repo && s->name == name && s->evr == evr && s->arch == arch)
+                   break;
                }
-             else if (indesc >= 2)
+             if (n == repo->end)
+               s = 0;
+             else
                {
-                 int n, nn;
-                 /* Now look for a solvable with the given name,evr,arch.
-                  Our input is structured so, that the second set of =Pkg
-                  lines comes in roughly the same order as the first set, so we 
-                  have a hint at where to start our search, namely were we found
-                  the last entry.  */
-                 for (n = repo->start, nn = n + last_found_pack; n < repo->end; n++, nn++)
-                   {
-                     if (nn >= repo->end)
-                       nn = repo->start;
-                     s = pool->solvables + nn;
-                     if (s->repo == repo && s->name == name && s->evr == evr && s->arch == arch)
-                       break;
-                   }
-                 if (n == repo->end)
-                   s = 0;
-                 else
-                   {
-                     last_found_pack = nn - repo->start;
-                     handle = repodata_get_handle(data, last_found_pack);
-                   }
+                 last_found_pack = nn - repo->start;
+                 handle = repodata_get_handle(data, last_found_pack);
                }
            }