]> git.ipfire.org Git - thirdparty/libsolv.git/commitdiff
Split solver_dep_fulfilled_cplx from inline function solver_dep_fulfilled
authorMichael Schroeder <mls@suse.de>
Mon, 4 Sep 2017 11:46:16 +0000 (13:46 +0200)
committerMichael Schroeder <mls@suse.de>
Mon, 4 Sep 2017 11:46:16 +0000 (13:46 +0200)
src/solver.c
src/solver_private.h

index 842f67cd1ff16b45dfd9e86ee23e01abe09e8b5b..5d1052d295795292d9f759798dc8b05d71a14cc4 100644 (file)
@@ -104,6 +104,57 @@ solver_splitprovides(Solver *solv, Id dep, Map *m)
   return 0;
 }
 
+int
+solver_dep_fulfilled_cplx(Solver *solv, Reldep *rd)
+{
+  Pool *pool = solv->pool;
+  if (rd->flags == REL_COND)
+    {
+      if (ISRELDEP(rd->evr))
+       {
+         Reldep *rd2 = GETRELDEP(pool, rd->evr);
+         if (rd2->flags == REL_ELSE)
+           {
+             if (solver_dep_fulfilled(solv, rd2->name))
+               return solver_dep_fulfilled(solv, rd->name);
+             return solver_dep_fulfilled(solv, rd2->evr);
+           }
+       }
+      if (solver_dep_fulfilled(solv, rd->name))
+       return 1;
+      return !solver_dep_fulfilled(solv, rd->evr);
+    }
+  if (rd->flags == REL_UNLESS)
+    {
+      if (ISRELDEP(rd->evr))
+       {
+         Reldep *rd2 = GETRELDEP(pool, rd->evr);
+         if (rd2->flags == REL_ELSE)
+           {
+             if (!solver_dep_fulfilled(solv, rd2->name))
+               return solver_dep_fulfilled(solv, rd->name);
+             return solver_dep_fulfilled(solv, rd2->evr);
+           }
+       }
+      if (!solver_dep_fulfilled(solv, rd->name))
+       return 0;
+      return !solver_dep_fulfilled(solv, rd->evr);
+    }
+  if (rd->flags == REL_AND)
+    {
+      if (!solver_dep_fulfilled(solv, rd->name))
+       return 0;
+      return solver_dep_fulfilled(solv, rd->evr);
+    }
+  if (rd->flags == REL_OR)
+    {
+      if (solver_dep_fulfilled(solv, rd->name))
+       return 1;
+      return solver_dep_fulfilled(solv, rd->evr);
+    }
+  return 0;
+}
+
 
 /* mirrors solver_dep_fulfilled, but returns 2 if a new package
  * was involved */
index c796e4ca3cc38bf9b0f0fdf2f7fb4af9a8be5f3a..a2342238c340fa430c002aba10fa7a02cf21d124 100644 (file)
@@ -17,6 +17,7 @@ extern void solver_run_sat(Solver *solv, int disablerules, int doweak);
 extern void solver_reset(Solver *solv);
 
 extern int solver_splitprovides(Solver *solv, Id dep, Map *m);
+extern int solver_dep_fulfilled_cplx(Solver *solv, Reldep *rd);
 
 static inline int
 solver_dep_fulfilled(Solver *solv, Id dep)
@@ -27,50 +28,8 @@ solver_dep_fulfilled(Solver *solv, Id dep)
   if (ISRELDEP(dep))
     {
       Reldep *rd = GETRELDEP(pool, dep);
-      if (rd->flags == REL_COND)
-       {
-         if (ISRELDEP(rd->evr))
-           {
-             Reldep *rd2 = GETRELDEP(pool, rd->evr);
-             if (rd2->flags == REL_ELSE)
-               {
-                 if (solver_dep_fulfilled(solv, rd2->name))
-                   return solver_dep_fulfilled(solv, rd->name);
-                 return solver_dep_fulfilled(solv, rd2->evr);
-               }
-           }
-          if (solver_dep_fulfilled(solv, rd->name))
-           return 1;
-         return !solver_dep_fulfilled(solv, rd->evr);
-       }
-      if (rd->flags == REL_UNLESS)
-       {
-         if (ISRELDEP(rd->evr))
-           {
-             Reldep *rd2 = GETRELDEP(pool, rd->evr);
-             if (rd2->flags == REL_ELSE)
-               {
-                 if (!solver_dep_fulfilled(solv, rd2->name))
-                   return solver_dep_fulfilled(solv, rd->name);
-                 return solver_dep_fulfilled(solv, rd2->evr);
-               }
-           }
-          if (!solver_dep_fulfilled(solv, rd->name))
-           return 0;
-         return !solver_dep_fulfilled(solv, rd->evr);
-       }
-      if (rd->flags == REL_AND)
-        {
-          if (!solver_dep_fulfilled(solv, rd->name))
-            return 0;
-          return solver_dep_fulfilled(solv, rd->evr);
-        }
-      if (rd->flags == REL_OR)
-       {
-          if (solver_dep_fulfilled(solv, rd->name))
-           return 1;
-          return solver_dep_fulfilled(solv, rd->evr);
-       }
+      if (rd->flags == REL_COND || rd->flags == REL_UNLESS || rd->flags == REL_AND || rd->flags == REL_OR)
+       return solver_dep_fulfilled_cplx(solv, rd);
       if (rd->flags == REL_NAMESPACE && rd->name == NAMESPACE_SPLITPROVIDES)
         return solver_splitprovides(solv, rd->evr, 0);
     }