From eda735a08ac4e406b25bde278438382b2b92245f Mon Sep 17 00:00:00 2001 From: Daniel Nicoletti Date: Thu, 19 Apr 2012 21:59:53 -0300 Subject: aptcc: separate the try install/remove functions --- backends/aptcc/apt-intf.cpp | 64 ++++++++++++++++++++------------------------- backends/aptcc/apt-intf.h | 6 +++-- 2 files changed, 33 insertions(+), 37 deletions(-) diff --git a/backends/aptcc/apt-intf.cpp b/backends/aptcc/apt-intf.cpp index 2ed68655f..2217a69ef 100644 --- a/backends/aptcc/apt-intf.cpp +++ b/backends/aptcc/apt-intf.cpp @@ -1429,33 +1429,42 @@ bool AptIntf::checkTrusted(pkgAcquire &fetcher, bool simulating) return false; } -bool AptIntf::tryToInstall(const pkgCache::PkgIterator &constPkg, +void AptIntf::tryToRemove(const pkgCache::VerIterator &ver, + pkgDepCache &Cache, + pkgProblemResolver &Fix) +{ + pkgCache::PkgIterator Pkg = ver.ParentPkg(); + + // The package is not installed + if (Pkg->CurrentVer == 0) { + Fix.Clear(Pkg); + Fix.Protect(Pkg); + Fix.Remove(Pkg); + + return; + } + + Fix.Clear(Pkg); + Fix.Protect(Pkg); + Fix.Remove(Pkg); + // TODO this is false since PackageKit can't + // tell it want's o purge + Cache.MarkDelete(Pkg, false); +} + + +bool AptIntf::tryToInstall(const pkgCache::VerIterator &ver, pkgDepCache &Cache, pkgProblemResolver &Fix, - bool Remove, bool BrokenFix, unsigned int &ExpectedInst) { - pkgCache::PkgIterator Pkg = constPkg; - // This is a pure virtual package and there is a single available provides - if (Cache[Pkg].CandidateVer == 0 && Pkg->ProvidesList != 0 && - Pkg.ProvidesList()->NextProvides == 0) { - pkgCache::PkgIterator Tmp = Pkg.ProvidesList().OwnerPkg(); - // TODO this is UGLY!!! create a local PkgIterator for this - Pkg = Tmp; - } + pkgCache::PkgIterator Pkg = ver.ParentPkg(); // Check if there is something at all to install pkgDepCache::StateCache &State = Cache[Pkg]; - if (Remove == true && Pkg->CurrentVer == 0) { - Fix.Clear(Pkg); - Fix.Protect(Pkg); - Fix.Remove(Pkg); - - return true; - } - if (State.CandidateVer == 0 && Remove == false) { + if (State.CandidateVer == 0) { _error->Error("Package %s is virtual and has no installation candidate", Pkg.Name()); pk_backend_error_code(m_backend, @@ -1468,13 +1477,6 @@ bool AptIntf::tryToInstall(const pkgCache::PkgIterator &constPkg, Fix.Clear(Pkg); Fix.Protect(Pkg); - if (Remove == true) { - Fix.Remove(Pkg); - // TODO this is false since PackageKit can't - // tell it want's o purge - Cache.MarkDelete(Pkg, false); - return true; - } // Install it Cache.MarkInstall(Pkg, false); @@ -2309,10 +2311,9 @@ bool AptIntf::runTransaction(const PkgList &install, const PkgList &remove, bool break; } - if (tryToInstall(it->ParentPkg(), + if (tryToInstall(*it, cache, Fix, - false, // remove BrokenFix, ExpectedInst) == false) { return false; @@ -2329,14 +2330,7 @@ bool AptIntf::runTransaction(const PkgList &install, const PkgList &remove, bool break; } - if (tryToInstall(it->ParentPkg(), - cache, - Fix, - true, // remove - BrokenFix, - ExpectedInst) == false) { - return false; - } + tryToRemove(*it, cache, Fix); } // Call the scored problem resolver diff --git a/backends/aptcc/apt-intf.h b/backends/aptcc/apt-intf.h index 8c6485162..bbebbfd4d 100644 --- a/backends/aptcc/apt-intf.h +++ b/backends/aptcc/apt-intf.h @@ -233,10 +233,12 @@ public: private: bool checkTrusted(pkgAcquire &fetcher, bool simulating); bool packageIsSupported(const pkgCache::VerIterator &verIter, string component); - bool tryToInstall(const pkgCache::PkgIterator &constPkg, + void tryToRemove(const pkgCache::VerIterator &ver, + pkgDepCache &Cache, + pkgProblemResolver &Fix); + bool tryToInstall(const pkgCache::VerIterator &ver, pkgDepCache &Cache, pkgProblemResolver &Fix, - bool Remove, bool BrokenFix, unsigned int &ExpectedInst); -- cgit v1.2.3