Use packagemeta::set_action() to update the action for packagemeta object in more (hopefully all) the places it gets changed.
(Future work: ideally we'd opaque packagemeta internals more by making installed/curr/desired/etc. object private, rather than letting users grovel around in those details) --- libsolv.cc | 16 ++++++++++------ package_db.cc | 4 ++-- package_meta.cc | 7 +++++-- 3 files changed, 17 insertions(+), 10 deletions(-) diff --git a/libsolv.cc b/libsolv.cc index 9e3b066..bd8fa4c 100644 --- a/libsolv.cc +++ b/libsolv.cc @@ -740,16 +740,19 @@ SolverSolution::trans2db() const case SolverTransaction::transInstall: if (pv.Type() == package_binary) { - pkg->desired = pkg->default_version = pv; - pkg->pick(true); + pkg->set_action(packagemeta::Install_action, pv); + pkg->default_version = pv; } else // source package pkg->srcpick(true); break; case SolverTransaction::transErase: // Only relevant if pkg is still in its "no change" state - if (pkg->desired == pkg->installed && !pkg->picked()) - pkg->desired = pkg->default_version = packageversion(); + if (pkg->get_action() == packagemeta::NoChange_action) + { + pkg->set_action(packagemeta::Uninstall_action, packageversion()); + pkg->default_version = packageversion(); + } break; default: break; @@ -767,13 +770,14 @@ SolverSolution::db2trans() p != db.packages.end (); ++p) { packagemeta *pkg = p->second; - if (pkg->desired && pkg->picked()) // install/upgrade/reinstall + if ((pkg->get_action() == packagemeta::Install_action) || + (pkg->get_action() == packagemeta::Reinstall_action)) { trans.push_back(SolverTransaction(pkg->desired, SolverTransaction::transInstall)); if (pkg->installed) trans.push_back(SolverTransaction(pkg->installed, SolverTransaction::transErase)); } - else if (!pkg->desired && pkg->installed) // uninstall + else if (pkg->get_action() == packagemeta::Uninstall_action) trans.push_back(SolverTransaction(pkg->installed, SolverTransaction::transErase)); if (pkg->srcpicked()) diff --git a/package_db.cc b/package_db.cc index 59c59ef..847f44e 100644 --- a/package_db.cc +++ b/package_db.cc @@ -758,7 +758,7 @@ packagedb::noChanges () i != packages.end(); i++) { packagemeta *pkg = i->second; - pkg->desired = pkg->default_version = pkg->installed; - pkg->pick(false); + pkg->set_action(packagemeta::NoChange_action, pkg->installed); + pkg->default_version = pkg->installed; } } diff --git a/package_meta.cc b/package_meta.cc index b731254..2564f95 100644 --- a/package_meta.cc +++ b/package_meta.cc @@ -553,8 +553,11 @@ packagemeta::set_action (_actions action, packageversion const &default_version) } } else - // else, if not installed, skip - desired = packageversion (); + { + // else, if not installed, skip + desired = packageversion (); + pick(false); + } } else if (action == Install_action) { -- 2.21.0