Imported Upstream version 0.7.2
[platform/upstream/libsolv.git] / ext / repo_cudf.c
index be693ff..64bb86f 100644 (file)
@@ -11,7 +11,6 @@
 #include <stdlib.h>
 #include <string.h>
 #include <unistd.h>
-#include <zlib.h>
 #include <errno.h>
 
 #include "pool.h"
@@ -157,7 +156,7 @@ finishpackage(Pool *pool, Solvable *s, int keep, Queue *job)
   if (!s->evr)
     s->evr = ID_EMPTY;
   sid = pool_rel2id(pool, s->name, s->evr, REL_EQ, 1);
-  s->provides = repo_addid_dep(s->repo, s->provides, sid, 0); 
+  s->provides = repo_addid_dep(s->repo, s->provides, sid, 0);
   if (!job || !pool->installed || s->repo != pool->installed)
     return;
   if (keep == KEEP_VERSION)
@@ -177,7 +176,7 @@ finishpackage(Pool *pool, Solvable *s, int keep, Queue *job)
 int
 repo_add_cudf(Repo *repo, Repo *installedrepo, FILE *fp, Queue *job, int flags)
 {
-  Pool *pool = repo->pool;
+  Pool *pool;
   char *buf, *p;
   int bufa, bufl, c;
   Solvable *s;
@@ -190,12 +189,13 @@ repo_add_cudf(Repo *repo, Repo *installedrepo, FILE *fp, Queue *job, int flags)
   xrepo = repo ? repo : installedrepo;
   if (!xrepo)
     return -1;
+  pool = xrepo->pool;
 
   buf = solv_malloc(4096);
   bufa = 4096;
   bufl = 0;
   s = 0;
+
   while (fgets(buf + bufl, bufa - bufl, fp) > 0)
     {
       bufl += strlen(buf + bufl);
@@ -224,10 +224,7 @@ repo_add_cudf(Repo *repo, Repo *installedrepo, FILE *fp, Queue *job, int flags)
       if (!*buf)
        {
          if (s && !repo && !isinstalled)
-           {
-             repo_free_solvable(repo, s - pool->solvables, 1);
-             s = 0;
-           }
+           s = solvable_free(s, 1);
          if (s)
            finishpackage(pool, s, keep, job);
          s = 0;
@@ -281,7 +278,7 @@ repo_add_cudf(Repo *repo, Repo *installedrepo, FILE *fp, Queue *job, int flags)
              Id id, *idp;
              Offset off = makedeps(xrepo, p, 0, 0);
              for (idp = xrepo->idarraydata + off; (id = *idp) != 0; idp++)
-               queue_push2(job, SOLVER_UPDATE|SOLVER_SOLVABLE_PROVIDES, id);
+               queue_push2(job, SOLVER_INSTALL|SOLVER_ORUPDATE|SOLVER_SOLVABLE_PROVIDES, id);
            }
          continue;
        }
@@ -323,10 +320,7 @@ repo_add_cudf(Repo *repo, Repo *installedrepo, FILE *fp, Queue *job, int flags)
                {
                  isinstalled = 1;
                  if (!installedrepo)
-                   {
-                     repo_free_solvable(repo, s - pool->solvables, 1);
-                     s = 0;
-                   }
+                   s = solvable_free(s, 1);
                  else if (s->repo != installedrepo)
                    {
                      copysolvabledata(pool, s, installedrepo);
@@ -348,6 +342,11 @@ repo_add_cudf(Repo *repo, Repo *installedrepo, FILE *fp, Queue *job, int flags)
              s->name = pool_str2id(pool, p, 1);
              continue;
            }
+         if (!strcmp(buf, "provides"))
+           {
+             s->provides = makedeps(s->repo, p, s->provides, 0);
+             continue;
+           }
          break;
        case 'r':
          if (!strcmp(buf, "depends"))
@@ -366,10 +365,7 @@ repo_add_cudf(Repo *repo, Repo *installedrepo, FILE *fp, Queue *job, int flags)
        }
     }
   if (s && !repo && !isinstalled)
-    {
-      repo_free_solvable(repo, s - pool->solvables, 1);
-      s = 0;
-    }
+    s = solvable_free(s, 1);
   if (s)
     finishpackage(pool, s, keep, job);
   solv_free(buf);