Imported Upstream version 0.6.23
[platform/upstream/libsolv.git] / src / solvable.c
index cccc89d..2570e4f 100644 (file)
@@ -409,305 +409,12 @@ solvable_lookup_sourcepkg(Solvable *s)
 
 /*****************************************************************************/
 
-static inline Id dep2name(Pool *pool, Id dep)
-{
-  while (ISRELDEP(dep))
-    {
-      Reldep *rd = GETRELDEP(pool, dep);
-      dep = rd->name;
-    }
-  return dep;
-}
-
-static int providedbyinstalled_multiversion(Pool *pool, Map *installed, Id n, Id con)
-{
-  Id p, pp;
-  Solvable *sn = pool->solvables + n;
-
-  FOR_PROVIDES(p, pp, sn->name)
-    {
-      Solvable *s = pool->solvables + p;
-      if (s->name != sn->name || s->arch != sn->arch)
-        continue;
-      if (!MAPTST(installed, p))
-        continue;
-      if (pool_match_nevr(pool, pool->solvables + p, con))
-        continue;
-      return 1;         /* found installed package that doesn't conflict */
-    }
-  return 0;
-}
-
-static inline int providedbyinstalled(Pool *pool, Map *installed, Id dep, int ispatch, Map *multiversionmap)
-{
-  Id p, pp;
-  FOR_PROVIDES(p, pp, dep)
-    {
-      if (p == SYSTEMSOLVABLE)
-       return -1;
-      if (ispatch && !pool_match_nevr(pool, pool->solvables + p, dep))
-       continue;
-      if (ispatch && multiversionmap && multiversionmap->size && MAPTST(multiversionmap, p) && ISRELDEP(dep))
-       if (providedbyinstalled_multiversion(pool, installed, p, dep))
-         continue;
-      if (MAPTST(installed, p))
-       return 1;
-    }
-  return 0;
-}
-
-/*
- * solvable_trivial_installable_map - anwers is a solvable is installable
- * without any other installs/deinstalls.
- * The packages considered to be installed are provided via the
- * installedmap bitmap. A additional "conflictsmap" bitmap providing
- * information about the conflicts of the installed packages can be
- * used for extra speed up. Provide a NULL pointer if you do not
- * have this information.
- * Both maps can be created with pool_create_state_maps() or
- * solver_create_state_maps().
- *
- * returns:
- * 1:  solvable is installable without any other package changes
- * 0:  solvable is not installable
- * -1: solvable is installable, but doesn't constrain any installed packages
- */
-int
-solvable_trivial_installable_map(Solvable *s, Map *installedmap, Map *conflictsmap, Map *multiversionmap)
-{
-  Pool *pool = s->repo->pool;
-  Solvable *s2;
-  Id p, *dp;
-  Id *reqp, req;
-  Id *conp, con;
-  int r, interesting = 0;
-
-  if (conflictsmap && MAPTST(conflictsmap, s - pool->solvables))
-    return 0;
-  if (s->requires)
-    {
-      reqp = s->repo->idarraydata + s->requires;
-      while ((req = *reqp++) != 0)
-       {
-         if (req == SOLVABLE_PREREQMARKER)
-           continue;
-          r = providedbyinstalled(pool, installedmap, req, 0, 0);
-         if (!r)
-           return 0;
-         if (r > 0)
-           interesting = 1;
-       }
-    }
-  if (s->conflicts)
-    {
-      int ispatch = 0;
-
-      if (!strncmp("patch:", pool_id2str(pool, s->name), 6))
-       ispatch = 1;
-      conp = s->repo->idarraydata + s->conflicts;
-      while ((con = *conp++) != 0)
-       {
-         if (providedbyinstalled(pool, installedmap, con, ispatch, multiversionmap))
-           {
-             if (ispatch && solvable_is_irrelevant_patch(s, installedmap))
-               return -1;
-             return 0;
-           }
-         if (!interesting && ISRELDEP(con))
-           {
-              con = dep2name(pool, con);
-             if (providedbyinstalled(pool, installedmap, con, ispatch, multiversionmap))
-               interesting = 1;
-           }
-       }
-      if (ispatch && interesting && solvable_is_irrelevant_patch(s, installedmap))
-       interesting = 0;
-    }
-#if 0
-  if (s->repo)
-    {
-      Id *obsp, obs;
-      Repo *installed = 0;
-      if (s->obsoletes && s->repo != installed)
-       {
-         obsp = s->repo->idarraydata + s->obsoletes;
-         while ((obs = *obsp++) != 0)
-           {
-             if (providedbyinstalled(pool, installedmap, obs, 0, 0))
-               return 0;
-           }
-       }
-      if (s->repo != installed)
-       {
-         Id pp;
-         FOR_PROVIDES(p, pp, s->name)
-           {
-             s2 = pool->solvables + p;
-             if (s2->repo == installed && s2->name == s->name)
-               return 0;
-           }
-       }
-    }
-#endif
-  if (!conflictsmap)
-    {
-      int i;
-
-      p = s - pool->solvables;
-      for (i = 1; i < pool->nsolvables; i++)
-       {
-         if (!MAPTST(installedmap, i))
-           continue;
-         s2 = pool->solvables + i;
-         if (!s2->conflicts)
-           continue;
-         conp = s2->repo->idarraydata + s2->conflicts;
-         while ((con = *conp++) != 0)
-           {
-             dp = pool_whatprovides_ptr(pool, con);
-             for (; *dp; dp++)
-               if (*dp == p)
-                 return 0;
-           }
-       }
-     }
-  return interesting ? 1 : -1;
-}
-
-/*
- * different interface for solvable_trivial_installable_map, where
- * the information about the installed packages is provided
- * by a queue.
- */
-int
-solvable_trivial_installable_queue(Solvable *s, Queue *installed, Map *multiversionmap)
-{
-  Pool *pool = s->repo->pool;
-  int i;
-  Id p;
-  Map installedmap;
-  int r;
-
-  map_init(&installedmap, pool->nsolvables);
-  for (i = 0; i < installed->count; i++)
-    {
-      p = installed->elements[i];
-      if (p > 0)               /* makes it work with decisionq */
-       MAPSET(&installedmap, p);
-    }
-  r = solvable_trivial_installable_map(s, &installedmap, 0, multiversionmap);
-  map_free(&installedmap);
-  return r;
-}
-
-/*
- * different interface for solvable_trivial_installable_map, where
- * the information about the installed packages is provided
- * by a repo containing the installed solvables.
- */
-int
-solvable_trivial_installable_repo(Solvable *s, Repo *installed, Map *multiversionmap)
-{
-  Pool *pool = s->repo->pool;
-  Id p;
-  Solvable *s2;
-  Map installedmap;
-  int r;
-
-  map_init(&installedmap, pool->nsolvables);
-  FOR_REPO_SOLVABLES(installed, p, s2)
-    MAPSET(&installedmap, p);
-  r = solvable_trivial_installable_map(s, &installedmap, 0, multiversionmap);
-  map_free(&installedmap);
-  return r;
-}
-
-/* FIXME: this mirrors policy_illegal_vendorchange */
-static int
-pool_illegal_vendorchange(Pool *pool, Solvable *s1, Solvable *s2)
-{
-  Id v1, v2;
-  Id vendormask1, vendormask2;
-
-  if (pool->custom_vendorcheck)
-    return pool->custom_vendorcheck(pool, s1, s2);
-  /* treat a missing vendor as empty string */
-  v1 = s1->vendor ? s1->vendor : ID_EMPTY;
-  v2 = s2->vendor ? s2->vendor : ID_EMPTY;
-  if (v1 == v2)
-    return 0;
-  vendormask1 = pool_vendor2mask(pool, v1);
-  if (!vendormask1)
-    return 1;   /* can't match */
-  vendormask2 = pool_vendor2mask(pool, v2);
-  if ((vendormask1 & vendormask2) != 0)
-    return 0;
-  return 1;     /* no class matches */
-}
-
-/* check if this patch is relevant according to the vendor. To bad that patches
- * don't have a vendor, so we need to do some careful repo testing. */
-int
-solvable_is_irrelevant_patch(Solvable *s, Map *installedmap)
-{
-  Pool *pool = s->repo->pool;
-  Id con, *conp;
-  int hadpatchpackage = 0;
-
-  if (!s->conflicts)
-    return 0;
-  conp = s->repo->idarraydata + s->conflicts;
-  while ((con = *conp++) != 0)
-    {
-      Reldep *rd;
-      Id p, pp, p2, pp2;
-      if (!ISRELDEP(con))
-       continue;
-      rd = GETRELDEP(pool, con);
-      if (rd->flags != REL_LT)
-       continue;
-      FOR_PROVIDES(p, pp, con)
-       {
-         Solvable *si;
-         if (!MAPTST(installedmap, p))
-           continue;
-         si = pool->solvables + p;
-         if (!pool_match_nevr(pool, si, con))
-           continue;
-         FOR_PROVIDES(p2, pp2, rd->name)
-           {
-             Solvable *s2 = pool->solvables + p2;
-             if (!pool_match_nevr(pool, s2, rd->name))
-               continue;
-             if (pool_match_nevr(pool, s2, con))
-               continue;       /* does not fulfill patch */
-             if (s2->repo == s->repo)
-               {
-                 hadpatchpackage = 1;
-                 /* ok, we have a package from the patch repo that solves the conflict. check vendor */
-                 if (si->vendor == s2->vendor)
-                   return 0;
-                 if (!pool_illegal_vendorchange(pool, si, s2))
-                   return 0;
-                 /* vendor change was illegal, ignore conflict */
-               }
-           }
-       }
-    }
-  /* if we didn't find a patchpackage don't claim that the patch is irrelevant */
-  if (!hadpatchpackage)
-    return 0;
-  return 1;
-}
-
-/*****************************************************************************/
-
 /*
  * Create maps containing the state of each solvable. Input is a "installed" queue,
  * it contains all solvable ids that are considered to be installed.
  *
- * The created maps can be used for solvable_trivial_installable_map(),
- * pool_calc_duchanges(), pool_calc_installsizechange().
+ * The created maps can be used for * pool_calc_duchanges() and
+ * pool_calc_installsizechange().
  *
  */
 void