From 610426eabeccb3c04bbd7f49862248beb82b280a Mon Sep 17 00:00:00 2001 From: Ken Brown Date: Thu, 19 Oct 2017 14:44:45 -0400 Subject: [PATCH] Fix the functionality of taskKeep A taskKeep is generated whenever the user wants to keep an installed version that's different from the default_version, where the latter is whatever the solver has chosen. We need to make sure that default_version is set appropriately wherever it is needed. --- choose.cc | 7 +++++++ libsolv.cc | 11 ++++++----- package_meta.h | 2 +- prereq.cc | 3 +-- 4 files changed, 15 insertions(+), 8 deletions(-) diff --git a/choose.cc b/choose.cc index f0e6802..ad37639 100644 --- a/choose.cc +++ b/choose.cc @@ -420,6 +420,13 @@ ChooserPage::changeTrust(int button, bool test, bool initial) { // but initially we want a task list with any package changes caused by // command line options + // and we don't want to generate spurious Keep tasks + for (packagedb::packagecollection::iterator p = db.packages.begin (); + p != db.packages.end (); ++p) + { + packagemeta *pkg = p->second; + pkg->default_version = pkg->installed; + } q.setTasks(); } db.defaultTrust(q, mode, test); diff --git a/libsolv.cc b/libsolv.cc index 289f19c..e623555 100644 --- a/libsolv.cc +++ b/libsolv.cc @@ -526,7 +526,8 @@ SolverTasks::setTasks() // decode UI state to action // skip and keep don't change dependency solution - // except when we want to keep an old version + // except when we want to keep a version different from the one + // chosen by the solver if (pkg->installed != pkg->desired) { if (pkg->desired) @@ -538,7 +539,7 @@ SolverTasks::setTasks() { if (pkg->picked()) add(pkg->installed, taskReinstall); // reinstall - else if (pkg->installed < pkg->default_version) + else if (pkg->installed != pkg->default_version) add(pkg->installed, taskKeep); // keep } // only install action makes sense for source packages @@ -591,7 +592,7 @@ SolverSolution::trans2db() const i != db.packages.end(); i++) { packagemeta *pkg = i->second; - pkg->desired = pkg->installed; + pkg->desired = pkg->default_version = pkg->installed; pkg->pick(false); } // Now make changes according to trans. transErase requires some @@ -614,7 +615,7 @@ SolverSolution::trans2db() const case SolverTransaction::transInstall: if (pv.Type() == package_binary) { - pkg->desired = pv; + pkg->desired = pkg->default_version = pv; pkg->pick(true); } else // source package @@ -623,7 +624,7 @@ SolverSolution::trans2db() const case SolverTransaction::transErase: // Only relevant if pkg is still in its "no change" state if (pkg->desired == pkg->installed && !pkg->picked()) - pkg->desired = packageversion(); + pkg->desired = pkg->default_version = packageversion(); break; default: break; diff --git a/package_meta.h b/package_meta.h index d91f7c9..98253d0 100644 --- a/package_meta.h +++ b/package_meta.h @@ -131,7 +131,7 @@ public: packageversion curr; /* ditto for "test" (experimental) */ packageversion exp; - /* which one is the default according to the chooser global state */ + /* which one is the default according to the solver */ packageversion default_version; /* Now for the user stuff :] */ /* What version does the user want ? */ diff --git a/prereq.cc b/prereq.cc index c5a1fd5..bf7661a 100644 --- a/prereq.cc +++ b/prereq.cc @@ -136,8 +136,7 @@ PrereqPage::whatNext () long PrereqPage::OnBack () { - // Reset the package database to correspond to the solver's default - // solution + // Reset the package database to correspond to the solver's solution packagedb db; db.solution.trans2db(); -- 2.14.2