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;
{ 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 }
};
}
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
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])
{
return solv->focus_installed;
case SOLVER_FLAG_YUM_OBSOLETES:
return solv->do_yum_obsoletes;
+ case SOLVER_FLAG_NEED_UPDATEPROVIDE:
+ return solv->needupdateprovide;
default:
break;
}
case SOLVER_FLAG_YUM_OBSOLETES:
solv->do_yum_obsoletes = value;
break;
+ case SOLVER_FLAG_NEED_UPDATEPROVIDE:
+ solv->needupdateprovide = value;
+ break;
default:
break;
}
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 */
#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 */