From 5e312de78360736fa3ef505909ef84da211362ca Mon Sep 17 00:00:00 2001 From: David Kalnischkies Date: Tue, 15 Sep 2009 23:52:04 +0200 Subject: Add even more config options and try to handle configuration problems arising if we upgrade essential or predependencies which need to be configured before even unpacking packages depending on them. --- apt-pkg/packagemanager.cc | 37 +++++++++++++++++++++++++------------ 1 file changed, 25 insertions(+), 12 deletions(-) (limited to 'apt-pkg/packagemanager.cc') diff --git a/apt-pkg/packagemanager.cc b/apt-pkg/packagemanager.cc index cc9ce21c7..442143516 100644 --- a/apt-pkg/packagemanager.cc +++ b/apt-pkg/packagemanager.cc @@ -57,7 +57,10 @@ bool pkgPackageManager::GetArchives(pkgAcquire *Owner,pkgSourceList *Sources, if (CreateOrderList() == false) return false; - if (List->OrderUnpack() == false) + bool const ordering = + _config->FindB("PackageManager::UnpackAll",true) ? + List->OrderUnpack() : List->OrderCritical(); + if (ordering == false) return _error->Error("Internal ordering error"); for (pkgOrderList::iterator I = List->begin(); I != List->end(); I++) @@ -163,7 +166,7 @@ bool pkgPackageManager::CreateOrderList() delete List; List = new pkgOrderList(&Cache); - bool NoImmConfigure = !_config->FindB("APT::Immediate-Configure",true); + static bool const NoImmConfigure = !_config->FindB("APT::Immediate-Configure",true); // Generate the list of affected packages and sort it for (PkgIterator I = Cache.PkgBegin(); I.end() == false; I++) @@ -266,13 +269,16 @@ bool pkgPackageManager::ConfigureAll() if (OList.OrderConfigure() == false) return false; - + + std::string const conf = _config->Find("PackageManager::Configure","all"); + bool const ConfigurePkgs = (conf == "all"); + // Perform the configuring for (pkgOrderList::iterator I = OList.begin(); I != OList.end(); I++) { PkgIterator Pkg(Cache,*I); - if (Configure(Pkg) == false) + if (ConfigurePkgs == true && Configure(Pkg) == false) return false; List->Flag(Pkg,pkgOrderList::Configured,pkgOrderList::States); @@ -291,16 +297,20 @@ bool pkgPackageManager::SmartConfigure(PkgIterator Pkg) if (DepAdd(OList,Pkg) == false) return false; - - if (OList.OrderConfigure() == false) - return false; - + + static std::string const conf = _config->Find("PackageManager::Configure","all"); + static bool const ConfigurePkgs = (conf == "all" || conf == "smart"); + + if (ConfigurePkgs == true) + if (OList.OrderConfigure() == false) + return false; + // Perform the configuring for (pkgOrderList::iterator I = OList.begin(); I != OList.end(); I++) { PkgIterator Pkg(Cache,*I); - if (Configure(Pkg) == false) + if (ConfigurePkgs == true && Configure(Pkg) == false) return false; List->Flag(Pkg,pkgOrderList::Configured,pkgOrderList::States); @@ -577,9 +587,12 @@ pkgPackageManager::OrderResult pkgPackageManager::OrderInstall() Reset(); if (Debug == true) - clog << "Begining to order" << endl; + clog << "Beginning to order" << endl; - if (List->OrderUnpack(FileNames) == false) + bool const ordering = + _config->FindB("PackageManager::UnpackAll",true) ? + List->OrderUnpack(FileNames) : List->OrderCritical(); + if (ordering == false) { _error->Error("Internal ordering error"); return Failed; @@ -632,7 +645,7 @@ pkgPackageManager::OrderResult pkgPackageManager::OrderInstall() return Failed; DoneSomething = true; } - + // Final run through the configure phase if (ConfigureAll() == false) return Failed; -- cgit v1.2.3-70-g09d2 From d183f850e7e3e467e8665d116ffbb238fdcc4ea9 Mon Sep 17 00:00:00 2001 From: Michael Vogt Date: Tue, 29 Sep 2009 15:51:48 +0200 Subject: * apt-pkg/packagemanager.cc: - fix overly aggressive immediate config propergation (thanks to David Kalnischkies) --- apt-pkg/packagemanager.cc | 10 +++++++--- apt-pkg/packagemanager.h | 2 +- debian/changelog | 8 +++++++- 3 files changed, 15 insertions(+), 5 deletions(-) (limited to 'apt-pkg/packagemanager.cc') diff --git a/apt-pkg/packagemanager.cc b/apt-pkg/packagemanager.cc index 442143516..dbcd461ac 100644 --- a/apt-pkg/packagemanager.cc +++ b/apt-pkg/packagemanager.cc @@ -125,7 +125,7 @@ bool pkgPackageManager::FixMissing() /* This adds the immediate flag to the pkg and recursively to the dependendies */ -void pkgPackageManager::ImmediateAdd(PkgIterator I, bool UseInstallVer) +void pkgPackageManager::ImmediateAdd(PkgIterator I, bool UseInstallVer, unsigned const int &Depth) { DepIterator D; @@ -143,12 +143,16 @@ void pkgPackageManager::ImmediateAdd(PkgIterator I, bool UseInstallVer) for ( /* nothing */ ; D.end() == false; D++) if (D->Type == pkgCache::Dep::Depends || D->Type == pkgCache::Dep::PreDepends) { + // ignore dependencies if no instal/upgrade/remove is going to happen + if (D.TargetPkg() == 0 || Cache[D.TargetPkg()].Keep()) + continue; + if(!List->IsFlag(D.TargetPkg(), pkgOrderList::Immediate)) { if(Debug) - clog << "ImmediateAdd(): Adding Immediate flag to " << I.Name() << endl; + clog << OutputInDepth(Depth) << "ImmediateAdd(): Adding Immediate flag to " << D.TargetPkg() << " cause of " << D.DepType() << " " << I.Name() << endl; List->Flag(D.TargetPkg(),pkgOrderList::Immediate); - ImmediateAdd(D.TargetPkg(), UseInstallVer); + ImmediateAdd(D.TargetPkg(), UseInstallVer, Depth + 1); } } return; diff --git a/apt-pkg/packagemanager.h b/apt-pkg/packagemanager.h index a1bfdc52d..af1476b7a 100644 --- a/apt-pkg/packagemanager.h +++ b/apt-pkg/packagemanager.h @@ -49,7 +49,7 @@ class pkgPackageManager : protected pkgCache::Namespace bool Debug; bool DepAdd(pkgOrderList &Order,PkgIterator P,int Depth = 0); - void ImmediateAdd(PkgIterator P, bool UseInstallVer); + void ImmediateAdd(PkgIterator P, bool UseInstallVer, unsigned const int &Depth = 0); virtual OrderResult OrderInstall(); bool CheckRConflicts(PkgIterator Pkg,DepIterator Dep,const char *Ver); bool CreateOrderList(); diff --git a/debian/changelog b/debian/changelog index 8808a4e82..9da06b054 100644 --- a/debian/changelog +++ b/debian/changelog @@ -1,5 +1,6 @@ apt (0.7.25) UNRELEASED; urgency=low + [ Christian Perrier ] * Fix apt-ftparchive(1) wrt description of the "-o" option. Thanks to Dann Frazier for the patch. Closes: #273100 * po/LINGUAS. Re-disable Hebrew. Closes: #534992 @@ -10,8 +11,13 @@ apt (0.7.25) UNRELEASED; urgency=low Closes: #479997 * Polish translation update by Wiktor Wandachowicz Closes: #548571 + + [ Michael Vogt ] + * apt-pkg/packagemanager.cc: + - fix overly aggressive immediate config propergation + (thanks to David Kalnischkies) - -- Christian Perrier Sat, 26 Sep 2009 11:17:25 +0200 + -- Michael Vogt Tue, 29 Sep 2009 15:51:34 +0200 apt (0.7.24) unstable; urgency=low -- cgit v1.2.3-70-g09d2