// -*- mode: cpp; mode: fold -*-
// Description /*{{{*/
-// $Id: packagemanager.cc,v 1.10 1998/12/10 04:22:46 jgg Exp $
+// $Id: packagemanager.cc,v 1.14 1999/02/21 08:38:53 jgg Exp $
/* ######################################################################
Package Manager - Abstacts the package manager
continue;
// Skip Packages that need configure only.
- if (Pkg.State() == pkgCache::PkgIterator::NeedsConfigure)
+ if (Pkg.State() == pkgCache::PkgIterator::NeedsConfigure &&
+ Cache[Pkg].Keep() == true)
continue;
new pkgAcqArchive(Owner,Sources,Recs,Cache[Pkg].InstVerIter(Cache),
bool pkgPackageManager::FixMissing()
{
pkgProblemResolver Resolve(Cache);
-
+
+ bool Bad = false;
for (PkgIterator I = Cache.PkgBegin(); I.end() == false; I++)
{
- if (Cache[I].Keep() == true)
+ // These don't need files
+ if (Cache[I].Keep() == true)
+ continue;
+ if (Cache[I].Delete() == true)
continue;
- if (FileNames[I->ID].empty() == false || Cache[I].Delete() == true)
+
+ // We have a filename
+ if (FileNames[I->ID].empty() == false)
+ continue;
+
+ // Skip Packages that need configure only.
+ if (I.State() == pkgCache::PkgIterator::NeedsConfigure &&
+ Cache[I].Keep() == true)
continue;
+
+ // Okay, this file is missing and we need it. Mark it for keep
+ Bad = true;
Cache.MarkKeep(I);
}
+ if (Bad == false)
+ return true;
+
// Now downgrade everything that is broken
return Resolve.ResolveByKeep() == true && Cache.BrokenCount() == 0;
}
delete List;
List = new pkgOrderList(Cache);
+ bool NoImmConfigure = _config->FindB("APT::Immediate-Configure",false);
+
// Generate the list of affected packages and sort it
for (PkgIterator I = Cache.PkgBegin(); I.end() == false; I++)
{
- // Mark the package for immediate configuration
- if ((I->Flags & pkgCache::Flag::Essential) == pkgCache::Flag::Essential)
+ // Mark the package and its dependends for immediate configuration
+ if (((I->Flags & pkgCache::Flag::Essential) == pkgCache::Flag::Essential ||
+ (I->Flags & pkgCache::Flag::Important) == pkgCache::Flag::Important) &&
+ NoImmConfigure == false)
{
List->Flag(I,pkgOrderList::Immediate);
continue;
// Append it to the list
- List->push_back(I);
-
- if ((I->Flags & pkgCache::Flag::ImmediateConf) == pkgCache::Flag::ImmediateConf)
- List->Flag(I,pkgOrderList::Immediate);
+ List->push_back(I);
}
return true;