add POOL_FLAG_IMPLICITOBSOLETEUSESCOLORS to match the current rpm behaviour
authorMichael Schroeder <mls@suse.de>
Tue, 4 Jun 2013 11:18:33 +0000 (13:18 +0200)
committerMichael Schroeder <mls@suse.de>
Tue, 4 Jun 2013 11:18:33 +0000 (13:18 +0200)
Sigh. I hope that's the last time rpm changes the way it handles obsoletes.

bindings/solv.i
doc/libsolv-bindings.3
doc/libsolv-bindings.txt
ext/testcase.c
src/policy.c
src/pool.c
src/pool.h
src/rules.c
src/solver.c
src/transaction.c

index 8ab7ab2..f2be540 100644 (file)
@@ -1036,6 +1036,7 @@ typedef struct {
   static const int POOL_FLAG_OBSOLETEUSESPROVIDES = POOL_FLAG_OBSOLETEUSESPROVIDES;
   static const int POOL_FLAG_IMPLICITOBSOLETEUSESPROVIDES = POOL_FLAG_IMPLICITOBSOLETEUSESPROVIDES;
   static const int POOL_FLAG_OBSOLETEUSESCOLORS = POOL_FLAG_OBSOLETEUSESCOLORS;
+  static const int POOL_FLAG_IMPLICITOBSOLETEUSESCOLORS = POOL_FLAG_IMPLICITOBSOLETEUSESCOLORS;
   static const int POOL_FLAG_NOINSTALLEDOBSOLETES = POOL_FLAG_NOINSTALLEDOBSOLETES;
   static const int POOL_FLAG_HAVEDISTEPOCH = POOL_FLAG_HAVEDISTEPOCH;
   static const int POOL_FLAG_NOOBSOLETESMULTIVERSION = POOL_FLAG_NOOBSOLETESMULTIVERSION;
index e956e16..7582e0a 100644 (file)
@@ -2,12 +2,12 @@
 .\"     Title: libsolv-bindings
 .\"    Author: [see the "Author" section]
 .\" Generator: DocBook XSL Stylesheets v1.76.1 <http://docbook.sf.net/>
-.\"      Date: 06/03/2013
+.\"      Date: 06/04/2013
 .\"    Manual: LIBSOLV
 .\"    Source: libsolv
 .\"  Language: English
 .\"
-.TH "LIBSOLV\-BINDINGS" "3" "06/03/2013" "libsolv" "LIBSOLV"
+.TH "LIBSOLV\-BINDINGS" "3" "06/04/2013" "libsolv" "LIBSOLV"
 .\" -----------------------------------------------------------------
 .\" * Define some portability stuff
 .\" -----------------------------------------------------------------
@@ -136,7 +136,12 @@ An implicit obsoletes is the internal mechanism to remove the old package on an
 .PP
 \fBPOOL_FLAG_OBSOLETEUSESCOLORS\fR
 .RS 4
-Rpm\(cqs multilib implementation (used in RedHat and Fedora) distinguishes between 32bit and 64bit packages (the terminology is that they have a different color)\&. If obsolteusescolors is set, packages with different colors will not obsolete each other\&. This is also true for implicit obsoletes, thus you can install both the 32bit and the 64bit version of a package with the same name\&.
+Rpm\(cqs multilib implementation (used in RedHat and Fedora) distinguishes between 32bit and 64bit packages (the terminology is that they have a different color)\&. If obsolteusescolors is set, packages with different colors will not obsolete each other\&.
+.RE
+.PP
+\fBPOOL_FLAG_IMPLICITOBSOLETEUSESCOLORS\fR
+.RS 4
+Same as POOL_FLAG_OBSOLETEUSESCOLORS, but used to find out if packages of the same name can be installed in parallel\&. For current Fedora systems, POOL_FLAG_OBSOLETEUSESCOLORS should be false and POOL_FLAG_IMPLICITOBSOLETEUSESCOLORS should be true (this is the default if FEDORA is defined when libsolv is compiled)\&.
 .RE
 .PP
 \fBPOOL_FLAG_NOINSTALLEDOBSOLETES\fR
index 3601d98..dca24c1 100644 (file)
@@ -88,9 +88,14 @@ Define which repository contains all the installed packages.
   distinguishes between 32bit and 64bit packages (the terminology
   is that they have a different color). If obsolteusescolors is
   set, packages with different colors will not obsolete each other.
-  This is also true for implicit obsoletes, thus you can install
-  both the 32bit and the 64bit version of a package with the
-  same name.
+
+*POOL_FLAG_IMPLICITOBSOLETEUSESCOLORS*::
+  Same as POOL_FLAG_OBSOLETEUSESCOLORS, but used to find out if
+  packages of the same name can be installed in parallel. For
+  current Fedora systems, POOL_FLAG_OBSOLETEUSESCOLORS should be
+  false and POOL_FLAG_IMPLICITOBSOLETEUSESCOLORS should be true
+  (this is the default if FEDORA is defined when libsolv is
+  compiled).
 
 *POOL_FLAG_NOINSTALLEDOBSOLETES*::
   New versions of rpm consider the obsoletes of installed packages
index 77b5fab..1db9051 100644 (file)
@@ -110,6 +110,7 @@ static struct poolflags2str {
   { POOL_FLAG_OBSOLETEUSESPROVIDES,         "obsoleteusesprovides", 0 },
   { POOL_FLAG_IMPLICITOBSOLETEUSESPROVIDES, "implicitobsoleteusesprovides", 0 },
   { POOL_FLAG_OBSOLETEUSESCOLORS,           "obsoleteusescolors", 0 },
+  { POOL_FLAG_IMPLICITOBSOLETEUSESCOLORS,   "implicitobsoleteusescolors", 0 },
   { POOL_FLAG_NOINSTALLEDOBSOLETES,         "noinstalledobsoletes", 0 },
   { POOL_FLAG_HAVEDISTEPOCH,                "havedistepoch", 0 },
   { POOL_FLAG_NOOBSOLETESMULTIVERSION,      "noobsoletesmultiversion", 0 },
index 915c865..c3385d8 100644 (file)
@@ -871,6 +871,7 @@ policy_findupdatepackages(Solver *solv, Solvable *s, Queue *qs, int allow_all)
       ps = pool->solvables + p;
       if (s->name == ps->name) /* name match */
        {
+         /* XXX: check implicitobsoleteusescolors? */
          if (!allowdowngrade && pool_evrcmp(pool, s->evr, ps->evr, EVRCMP_COMPARE) > 0)
            continue;
        }
index 6eea5ea..06f1e9e 100644 (file)
@@ -81,7 +81,7 @@ pool_create(void)
 
   pool->debugmask = SOLV_DEBUG_RESULT; /* FIXME */
 #ifdef FEDORA
-  pool->obsoleteusescolors = 1;
+  pool->implicitobsoleteusescolors = 1;
 #endif
 #ifdef RPM5
   pool->noobsoletesmultiversion = 1;
@@ -171,6 +171,8 @@ pool_get_flag(Pool *pool, int flag)
       return pool->implicitobsoleteusesprovides;
     case POOL_FLAG_OBSOLETEUSESCOLORS:
       return pool->obsoleteusescolors;
+    case POOL_FLAG_IMPLICITOBSOLETEUSESCOLORS:
+      return pool->implicitobsoleteusescolors;
     case POOL_FLAG_NOINSTALLEDOBSOLETES:
       return pool->noinstalledobsoletes;
     case POOL_FLAG_HAVEDISTEPOCH:
@@ -206,6 +208,9 @@ pool_set_flag(Pool *pool, int flag, int value)
     case POOL_FLAG_OBSOLETEUSESCOLORS:
       pool->obsoleteusescolors = value;
       break;
+    case POOL_FLAG_IMPLICITOBSOLETEUSESCOLORS:
+      pool->implicitobsoleteusescolors = value;
+      break;
     case POOL_FLAG_NOINSTALLEDOBSOLETES:
       pool->noinstalledobsoletes = value;
       break;
index 1da09bc..a3cb364 100644 (file)
@@ -128,6 +128,7 @@ struct _Pool {
   int obsoleteusesprovides;    /* true: obsoletes are matched against provides, not names */
   int implicitobsoleteusesprovides;    /* true: implicit obsoletes due to same name are matched against provides, not names */
   int obsoleteusescolors;      /* true: obsoletes check arch color */
+  int implicitobsoleteusescolors;      /* true: implicit obsoletes check arch color */
   int noinstalledobsoletes;    /* true: ignore obsoletes of installed packages */
   int forbidselfconflicts;     /* true: packages which conflict with itself are not installable */
   int noobsoletesmultiversion; /* true: obsoletes are ignored for multiversion installs */
@@ -188,6 +189,7 @@ struct _Pool {
 #define POOL_FLAG_HAVEDISTEPOCH                                7
 #define POOL_FLAG_NOOBSOLETESMULTIVERSION              8
 #define POOL_FLAG_ADDFILEPROVIDESFILTERED              9
+#define POOL_FLAG_IMPLICITOBSOLETEUSESCOLORS           10
 
 /* ----------------------------------------------- */
 
index 1c3244c..ae14eba 100644 (file)
@@ -719,7 +719,7 @@ solver_addrpmrulesforsolvable(Solver *solv, Solvable *s, Map *m)
                    continue;
                  if (!pool->implicitobsoleteusesprovides && s->name != ps->name)
                    continue;
-                 if (pool->obsoleteusescolors && !pool_colormatch(pool, s, ps))
+                 if (pool->implicitobsoleteusescolors && !pool_colormatch(pool, s, ps))
                    continue;
                  if (s->name == ps->name)
                    addrpmrule(solv, -n, -p, SOLVER_RULE_RPM_SAME_NAME, 0);
@@ -1496,7 +1496,7 @@ add_obsoletes(Solver *solv, Id p, Queue *q)
            continue;
          if (!pool->implicitobsoleteusesprovides && ps->name != s->name)
            continue;
-         if (pool->obsoleteusescolors && !pool_colormatch(pool, s, ps)) 
+         if (pool->implicitobsoleteusescolors && !pool_colormatch(pool, s, ps)) 
            continue;
          queue_push(q, p2);
          lastp2 = p2;
@@ -2420,7 +2420,7 @@ solver_addchoicerules(Solver *solv)
                continue;
              if (!pool->implicitobsoleteusesprovides && s->name != s2->name)
                continue;
-             if (pool->obsoleteusescolors && !pool_colormatch(pool, s, s2))
+             if (pool->implicitobsoleteusescolors && !pool_colormatch(pool, s, s2))
                continue;
              break;
            }
index a3369ce..052c834 100644 (file)
@@ -2954,7 +2954,7 @@ solver_solve(Solver *solv, Queue *job)
   POOL_DEBUG(SOLV_DEBUG_STATS, "dosplitprovides=%d, noupdateprovide=%d, noinfarchcheck=%d\n", solv->dosplitprovides, solv->noupdateprovide, solv->noinfarchcheck);
   POOL_DEBUG(SOLV_DEBUG_STATS, "allowuninstall=%d, allowdowngrade=%d, allownamechange=%d, allowarchchange=%d, allowvendorchange=%d\n", solv->allowuninstall, solv->allowdowngrade, solv->allownamechange, solv->allowarchchange, solv->allowvendorchange);
   POOL_DEBUG(SOLV_DEBUG_STATS, "promoteepoch=%d, forbidselfconflicts=%d\n", pool->promoteepoch, pool->forbidselfconflicts);
-  POOL_DEBUG(SOLV_DEBUG_STATS, "obsoleteusesprovides=%d, implicitobsoleteusesprovides=%d, obsoleteusescolors=%d\n", pool->obsoleteusesprovides, pool->implicitobsoleteusesprovides, pool->obsoleteusescolors);
+  POOL_DEBUG(SOLV_DEBUG_STATS, "obsoleteusesprovides=%d, implicitobsoleteusesprovides=%d, obsoleteusescolors=%d, implicitobsoleteusescolors=%d\n", pool->obsoleteusesprovides, pool->implicitobsoleteusesprovides, pool->obsoleteusescolors, pool->implicitobsoleteusescolors);
   POOL_DEBUG(SOLV_DEBUG_STATS, "dontinstallrecommended=%d, addalreadyrecommended=%d\n", solv->dontinstallrecommended, solv->addalreadyrecommended);
 
   /* create whatprovides if not already there */
@@ -3549,7 +3549,7 @@ solver_solve(Solver *solv, Queue *job)
   if (!solv->noinfarchcheck)
     {
       solver_addinfarchrules(solv, &addedmap);
-      if (pool->obsoleteusescolors)
+      if (pool->implicitobsoleteusescolors)
        {
          /* currently doesn't work well with infarch rules, so make
            * them weak */
index cf039cf..65c4bc5 100644 (file)
@@ -587,7 +587,7 @@ create_transaction_info(Transaction *trans, Queue *decisionq)
            continue;
          if (!pool->implicitobsoleteusesprovides && s->name != s2->name)
            continue;
-         if (pool->obsoleteusescolors && !pool_colormatch(pool, s, s2))
+         if (pool->implicitobsoleteusescolors && !pool_colormatch(pool, s, s2))
            continue;
          queue_push2(ti, p, p2);
        }