called mutiple times on the same package, this is to make sure that when loops are broken all packages that are required
are kept in the same dpkg run.
if (Pkg.State() == pkgCache::PkgIterator::NeedsConfigure &&
Cache[Pkg].Keep() == true)
{
if (Pkg.State() == pkgCache::PkgIterator::NeedsConfigure &&
Cache[Pkg].Keep() == true)
{
- List->Flag(Pkg,pkgOrderList::UnPacked,pkgOrderList::States);
- if (Immediate == true &&
- List->IsFlag(Pkg,pkgOrderList::Immediate) == true)
- if (SmartConfigure(Pkg) == false)
- _error->Warning(_("Could not perform immediate configuration on already unpacked '%s'. "
- "Please see man 5 apt.conf under APT::Immediate-Configure for details."),Pkg.Name());
- return true;
+ cout << "SmartUnPack called on Package " << Pkg.Name() << " but its unpacked" << endl;
+ return false;
+
+ bool PkgLoop = List->IsFlag(Pkg,pkgOrderList::Loop);
VerIterator const instVer = Cache[Pkg].InstVerIter(Cache);
VerIterator const instVer = Cache[Pkg].InstVerIter(Cache);
// Check if it needs to be unpacked
if (List->IsFlag(BrokenPkg,pkgOrderList::InList) && Cache[BrokenPkg].Delete() == false &&
// Check if it needs to be unpacked
if (List->IsFlag(BrokenPkg,pkgOrderList::InList) && Cache[BrokenPkg].Delete() == false &&
- !List->IsFlag(BrokenPkg,pkgOrderList::Loop) && List->IsNow(BrokenPkg)) {
+ List->IsNow(BrokenPkg)) {
+ if (PkgLoop && List->IsFlag(BrokenPkg,pkgOrderList::Loop)) {
+ // This dependancy has already been dealt with by another SmartUnPack on Pkg
+ break;
+ }
List->Flag(Pkg,pkgOrderList::Loop);
// Found a break, so unpack the package
if (Debug)
List->Flag(Pkg,pkgOrderList::Loop);
// Found a break, so unpack the package
if (Debug)
P.end() == false; P++)
CheckRConflicts(Pkg,P.ParentPkg().RevDependsList(),P.ProvideVersion());
P.end() == false; P++)
CheckRConflicts(Pkg,P.ParentPkg().RevDependsList(),P.ProvideVersion());
+ if (PkgLoop) return true;
+
List->Flag(Pkg,pkgOrderList::UnPacked,pkgOrderList::States);
if (instVer->MultiArch == pkgCache::Version::Same)
List->Flag(Pkg,pkgOrderList::UnPacked,pkgOrderList::States);
if (instVer->MultiArch == pkgCache::Version::Same)