From 9d4c8f671af479cba90e1db2f68d9abf9daaa4a4 Mon Sep 17 00:00:00 2001 From: Arch Librarian Date: Mon, 20 Sep 2004 16:54:34 +0000 Subject: Force-LoopBreak Author: jgg Date: 1999-08-12 05:59:47 GMT Force-LoopBreak --- apt-pkg/orderlist.h | 6 +++--- apt-pkg/packagemanager.cc | 13 ++++++++++++- 2 files changed, 15 insertions(+), 4 deletions(-) (limited to 'apt-pkg') diff --git a/apt-pkg/orderlist.h b/apt-pkg/orderlist.h index f15db4ce6..7e1b8efbc 100644 --- a/apt-pkg/orderlist.h +++ b/apt-pkg/orderlist.h @@ -1,6 +1,6 @@ // -*- mode: cpp; mode: fold -*- // Description /*{{{*/ -// $Id: orderlist.h,v 1.6 1999/08/03 05:19:41 jgg Exp $ +// $Id: orderlist.h,v 1.7 1999/08/12 05:59:54 jgg Exp $ /* ###################################################################### Order List - Represents and Manipulates an ordered list of packages. @@ -88,7 +88,7 @@ class pkgOrderList enum Flags {Added = (1 << 0), AddPending = (1 << 1), Immediate = (1 << 2), Loop = (1 << 3), UnPacked = (1 << 4), Configured = (1 << 5), - Removed = (1 << 6), + Removed = (1 << 6), // Early Remove InList = (1 << 7), States = (UnPacked | Configured | Removed)}; @@ -98,7 +98,7 @@ class pkgOrderList void Flag(PkgIterator Pkg,unsigned long State, unsigned long F) {Flags[Pkg->ID] = (Flags[Pkg->ID] & (~F)) | State;}; inline void Flag(PkgIterator Pkg,unsigned long F) {Flags[Pkg->ID] |= F;}; inline void Flag(Package *Pkg,unsigned long F) {Flags[Pkg->ID] |= F;}; - inline bool IsNow(PkgIterator Pkg) {return (Flags[Pkg->ID] & States) == 0;}; + inline bool IsNow(PkgIterator Pkg) {return (Flags[Pkg->ID] & (States & (~Removed))) == 0;}; bool IsMissing(PkgIterator Pkg); void WipeFlags(unsigned long F); void SetFileList(string *FileList) {this->FileList = FileList;}; diff --git a/apt-pkg/packagemanager.cc b/apt-pkg/packagemanager.cc index 68827f53c..28a8d7fb2 100644 --- a/apt-pkg/packagemanager.cc +++ b/apt-pkg/packagemanager.cc @@ -1,6 +1,6 @@ // -*- mode: cpp; mode: fold -*- // Description /*{{{*/ -// $Id: packagemanager.cc,v 1.19 1999/08/03 05:19:41 jgg Exp $ +// $Id: packagemanager.cc,v 1.20 1999/08/12 05:59:54 jgg Exp $ /* ###################################################################### Package Manager - Abstacts the package manager @@ -364,6 +364,17 @@ bool pkgPackageManager::EarlyRemove(PkgIterator Pkg) // Woops, it will not be re-installed! if (List->IsFlag(Pkg,pkgOrderList::InList) == false) return false; + + // Essential packages get special treatment + if ((Pkg->Flags & pkgCache::Flag::Essential) != 0) + { + if (_config->FindB("APT::Force-LoopBreak",false) == false) + return _error->Error("This installation run will require temporarily " + "removing the essential package %s due to a " + "Conflicts/Pre-Depends loop. This is often bad, " + "but if you really want to do it, activate the " + "APT::Force-LoopBreak option.",Pkg.Name()); + } bool Res = SmartRemove(Pkg); if (Cache[Pkg].Delete() == false) -- cgit v1.2.3