]> git.ipfire.org Git - thirdparty/libsolv.git/commitdiff
Add SOLVER_FLAG_NEED_UPDATEPROVIDE
authorMichael Schroeder <mls@suse.de>
Tue, 7 Apr 2015 14:31:10 +0000 (16:31 +0200)
committerMichael Schroeder <mls@suse.de>
Tue, 7 Apr 2015 14:31:10 +0000 (16:31 +0200)
This flag makes the solver only consider packages providing the
old package name as update candidates.

bindings/solv.i
ext/testcase.c
src/policy.c
src/solver.c
src/solver.h

index 50f0b5078e7ac18a4ff8ef60a099211bdf996771..40307964a605ef75d366450e7406347334596374 100644 (file)
@@ -2801,6 +2801,7 @@ rb_eval_string(
   static const int SOLVER_FLAG_BREAK_ORPHANS = SOLVER_FLAG_BREAK_ORPHANS;
   static const int SOLVER_FLAG_FOCUS_INSTALLED = SOLVER_FLAG_FOCUS_INSTALLED;
   static const int SOLVER_FLAG_YUM_OBSOLETES = SOLVER_FLAG_YUM_OBSOLETES;
+  static const int SOLVER_FLAG_NEED_UPDATEPROVIDE = SOLVER_FLAG_NEED_UPDATEPROVIDE;
 
   static const int SOLVER_REASON_UNRELATED = SOLVER_REASON_UNRELATED;
   static const int SOLVER_REASON_UNIT_RULE = SOLVER_REASON_UNIT_RULE;
index 14202525aa4aa3da605f83ddc94b2054da565c22..d1c76bed4bec9e783cb358b99d319f3c5f619339 100644 (file)
@@ -109,6 +109,7 @@ static struct solverflags2str {
   { SOLVER_FLAG_BREAK_ORPHANS,              "breakorphans", 0 },
   { SOLVER_FLAG_FOCUS_INSTALLED,            "focusinstalled", 0 },
   { SOLVER_FLAG_YUM_OBSOLETES,              "yumobsoletes", 0 },
+  { SOLVER_FLAG_NEED_UPDATEPROVIDE,         "needupdateprovide", 0 },
   { 0, 0, 0 }
 };
 
index afdfafd342cc0fb650e02d2d55ccbd02d7abcded..773b829a6a9968397dfb4ea594f09524bad7670b 100644 (file)
@@ -1360,7 +1360,7 @@ policy_findupdatepackages(Solver *solv, Solvable *s, Queue *qs, int allow_all)
        }
       else if (!allownamechange)
        continue;
-      else if (!solv->noupdateprovide && ps->obsoletes)   /* provides/obsoletes combination ? */
+      else if ((!solv->noupdateprovide || solv->needupdateprovide) && ps->obsoletes)   /* provides/obsoletes combination ? */
        {
          /* check if package ps obsoletes installed package s */
          /* implicitobsoleteusescolors is somewhat wrong here, but we nevertheless
@@ -1400,7 +1400,7 @@ policy_findupdatepackages(Solver *solv, Solvable *s, Queue *qs, int allow_all)
     return;
   /* if we have found some valid candidates and noupdateprovide is not set, we're
      done. otherwise we fallback to all obsoletes */
-  if (!solv->noupdateprovide && haveprovobs)
+  if (solv->needupdateprovide || (!solv->noupdateprovide && haveprovobs))
     return;
   if (solv->obsoletes && solv->obsoletes[n - solv->installed->start])
     {
index 6077f5156b67682d0020618a489ad262c3f041e2..53b4bc81e35080b73dac01af72c084bb824daf78 100644 (file)
@@ -1764,6 +1764,8 @@ solver_get_flag(Solver *solv, int flag)
     return solv->focus_installed;
   case SOLVER_FLAG_YUM_OBSOLETES:
     return solv->do_yum_obsoletes;
+  case SOLVER_FLAG_NEED_UPDATEPROVIDE:
+    return solv->needupdateprovide;
   default:
     break;
   }
@@ -1839,6 +1841,9 @@ solver_set_flag(Solver *solv, int flag, int value)
   case SOLVER_FLAG_YUM_OBSOLETES:
     solv->do_yum_obsoletes = value;
     break;
+  case SOLVER_FLAG_NEED_UPDATEPROVIDE:
+    solv->needupdateprovide = value;
+    break;
   default:
     break;
   }
index c555f16d9142473b4023ab09a758c627dfc24581..1a47ae018e1bc1cdaca6a68353b8343dcc1b201f 100644 (file)
@@ -155,6 +155,7 @@ struct _Solver {
   int allowvendorchange;               /* allow to change vendor of installed solvables */
   int allowuninstall;                  /* allow removal of installed solvables */
   int noupdateprovide;                 /* true: update packages needs not to provide old package */
+  int needupdateprovide;               /* true: update packages must provide old package */
   int dosplitprovides;                 /* true: consider legacy split provides */
   int dontinstallrecommended;          /* true: do not install recommended packages */
   int addalreadyrecommended;           /* true: also install recommended packages that were already recommended by the installed packages */
@@ -295,6 +296,7 @@ typedef struct _Solver Solver;
 #define SOLVER_FLAG_BREAK_ORPHANS              19
 #define SOLVER_FLAG_FOCUS_INSTALLED            20
 #define SOLVER_FLAG_YUM_OBSOLETES              21
+#define SOLVER_FLAG_NEED_UPDATEPROVIDE         22
 
 #define GET_USERINSTALLED_NAMES                        (1 << 0)        /* package names instead of ids */
 #define GET_USERINSTALLED_INVERTED             (1 << 1)        /* autoinstalled */