]> git.saurik.com Git - apt.git/blobdiff - apt-pkg/depcache.cc
* merged fixes from otavio (thanks!)
[apt.git] / apt-pkg / depcache.cc
index af2fd54c7a10f7ad33cde8d8b70c7fb3d1c9d52b..7f571945412cf7be2b3173c0f18bff5aa1343454 100644 (file)
@@ -178,7 +178,7 @@ bool pkgDepCache::readStateFile(OpProgress *Prog)
    return true;
 }
 
-bool pkgDepCache::writeStateFile(OpProgress *prog)
+bool pkgDepCache::writeStateFile(OpProgress *prog, bool InstalledOnly)
 {
    if(_config->FindB("Debug::pkgAutoRemove",false))
       std::clog << "pkgDepCache::writeStateFile()" << std::endl;
@@ -216,7 +216,6 @@ bool pkgDepCache::writeStateFile(OpProgress *prog)
         pkgCache::PkgIterator pkg=Cache->FindPkg(pkgname);
         if(pkg.end() || pkg.VersionList().end()) 
            continue;
-        bool oldAuto = section.FindI("Auto-Installed");
         bool newAuto = (PkgState[pkg->ID].Flags & Flag::Auto);
         if(_config->FindB("Debug::pkgAutoRemove",false))
            std::clog << "Update exisiting AutoInstall info: " 
@@ -1150,7 +1149,7 @@ bool pkgDepCache::Policy::IsImportantDep(DepIterator Dep)
       string s = _config->Find("APT::Install-Recommends-Section","");
       if(s.size() > 0) 
       {
-        const char *sec = Dep.TargetPkg().Section();
+        const char *sec = Dep.ParentVer().Section();
         if (sec && strcmp(sec, s.c_str()) == 0)
            return true;
       }
@@ -1286,6 +1285,7 @@ void pkgDepCache::MarkPackage(const pkgCache::PkgIterator &pkg,
                              bool follow_suggests)
 {
    pkgDepCache::StateCache &state = PkgState[pkg->ID];
+   VerIterator currver            = pkg.CurrentVer();
    VerIterator candver            = state.CandidateVerIter(*this);
    VerIterator instver            = state.InstVerIter(*this);
 
@@ -1306,9 +1306,11 @@ void pkgDepCache::MarkPackage(const pkgCache::PkgIterator &pkg,
    }
 #endif
 
-   // Ignore versions other than the InstVer, and ignore packages
-   // that are already going to be removed or just left uninstalled.
-   if(!(ver == instver && !instver.end()))
+   // For packages that are not going to be removed, ignore versions
+   // other than the InstVer.  For packages that are going to be
+   // removed, ignore versions other than the current version.
+   if(!(ver == instver && !instver.end()) &&
+      !(ver == currver && instver.end() && !ver.end()))
       return;
 
    // if we are marked already we are done