On 12/13/2017 5:31 PM, Ken Brown wrote: > On 12/13/2017 1:05 PM, Achim Gratz wrote: >> Ken Brown writes: >>> 1. Uninstall A. >>> 2. Don't uninstall B. >>> >>> On the surface, it would seem that libsolv chose 2 by default, because >>> it returned an empty transaction list.  This was reflected in the log >>> and was also clear when I selected 'Back'. >> >> I don't think there is a default in this case.  I also see in zypper >> that the order of the proposed solutions (there can be way more than two >> if the dependencies are more complicated) is not always the same, so >> there is no preference implied by the order as well. >> >>> Maybe we have to deal with this situation ourselves.  Whenever a >>> problem involves a missing dependency, we could choose as default >>> solution the one that installs/keeps the dependent package, as is >>> currently done. >> >> That solution unfortunately isn't always the one that causes the least >> amount of transactions or even the least amount of breakage. > > That may be true, but I still think it's a reasonable default.  The user > doesn't have to accept it.  Also, it's consistent with what setup > currently does, so it won't surprise anyone. > > The attached patch attempts to implement my suggestion. > > Ken > > > 0001-Implement-a-default-solution-for-SOLVER_RULE_PKG_REQ.patch > > + if (type == SOLVER_RULE_PKG_REQUIRES) > + { > + packagemeta *pkg = db.findBinary(PackageSpecification(pool_dep2str(pool.pool, dep))); > + if (!pkg->desired && pkg->installed < pkg->default_version) > + // User chose to uninstall or skip a required package. > + trans.push_back(SolverTransaction(pkg->default_version, > + SolverTransaction::transInstall)); This isn't quite right. We also need a transErase if the package is installed. Revised patch attached. Ken