- oops, forgot some changes
authorMichael Schroeder <mls@suse.de>
Wed, 30 Apr 2008 13:40:10 +0000 (13:40 +0000)
committerMichael Schroeder <mls@suse.de>
Wed, 30 Apr 2008 13:40:10 +0000 (13:40 +0000)
src/solver.c
src/solverdebug.c

index ea1c686..3a11115 100644 (file)
  *
  */
 
+static inline Id dep2name(Pool *pool, Id dep) 
+{
+  while (ISRELDEP(dep))
+    {    
+      Reldep *rd = rd = GETRELDEP(pool, dep);
+      dep = rd->name;
+    }    
+  return dep; 
+}
+
 int
 solver_splitprovides(Solver *solv, Id dep)
 {
@@ -1117,9 +1127,10 @@ addrpmrulesforsolvable(Solver *solv, Solvable *s, Map *m)
              obsp = s->repo->idarraydata + s->obsoletes;
              while ((obs = *obsp++) != 0)
                {
+                 Id obsname = dep2name(pool, obs);
                  FOR_PROVIDES(p, pp, obs)
                    {
-                     if (!solv->obsoleteusesprovides && s->name != pool->solvables[p].name)
+                     if (!solv->obsoleteusesprovides && obsname != pool->solvables[p].name)
                        continue;
                      addrule(solv, -n, -p);
                    }
@@ -2878,11 +2889,12 @@ solver_problemruleinfo(Solver *solv, Queue *job, Id rid, Id *depp, Id *sourcep,
          obsp = s->repo->idarraydata + s->obsoletes;
          while ((obs = *obsp++) != 0)
            {
+             Id obsname = dep2name(pool, obs);
              FOR_PROVIDES(p, pp, obs)
                {
                  if (p != -r->w2)
                    continue;
-                 if (!solv->obsoleteusesprovides && s->name != pool->solvables[p].name)
+                 if (!solv->obsoleteusesprovides && obsname != pool->solvables[p].name)
                    continue;
                  *depp = obs;
                  *sourcep = -r->p;
@@ -2896,11 +2908,12 @@ solver_problemruleinfo(Solver *solv, Queue *job, Id rid, Id *depp, Id *sourcep,
          obsp = s2->repo->idarraydata + s2->obsoletes;
          while ((obs = *obsp++) != 0)
            {
+             Id obsname = dep2name(pool, obs);
              FOR_PROVIDES(p, pp, obs)
                {
                  if (p != -r->p)
                    continue;
-                 if (!solv->obsoleteusesprovides && s2->name != pool->solvables[p].name)
+                 if (!solv->obsoleteusesprovides && obsname != pool->solvables[p].name)
                    continue;
                  *depp = obs;
                  *sourcep = -r->w2;
@@ -3566,6 +3579,7 @@ solver_solve(Solver *solv, Queue *job)
          addupdaterule(solv, s, 1);
          r = solv->rules + solv->nrules - 1;
          sr = r - (installed->end - installed->start);
+         unifyrules_sortcmp_data = pool;
          if (!unifyrules_sortcmp(r, sr))
            {
              /* identical rule, kill feature rule */
index 993bc23..0c0c261 100644 (file)
  *
  */
 
+static inline Id dep2name(Pool *pool, Id dep) 
+{
+  while (ISRELDEP(dep))
+    {    
+      Reldep *rd = rd = GETRELDEP(pool, dep);
+      dep = rd->name;
+    }    
+  return dep; 
+}
+
 Id *
 solver_create_decisions_obsoletesmap(Solver *solv)
 {
@@ -88,16 +98,19 @@ solver_create_decisions_obsoletesmap(Solver *solv)
            continue;
          obsp = s->repo->idarraydata + s->obsoletes;
          while ((obs = *obsp++) != 0)
-           FOR_PROVIDES(p, pp, obs)
-             {
-               if (!solv->obsoleteusesprovides && s->name != pool->solvables[p].name)
-                 continue;
-               if (pool->solvables[p].repo == installed && !obsoletesmap[p])
-                 {
-                   obsoletesmap[p] = n;
-                   obsoletesmap[n]++;
-                 }
-             }
+           {
+             Id obsname = dep2name(pool, obs);
+             FOR_PROVIDES(p, pp, obs)
+               {
+                 if (!solv->obsoleteusesprovides && obsname != pool->solvables[p].name)
+                   continue;
+                 if (pool->solvables[p].repo == installed && !obsoletesmap[p])
+                   {
+                     obsoletesmap[p] = n;
+                     obsoletesmap[n]++;
+                   }
+               }
+           }
        }
     }
   return obsoletesmap;