]> git.saurik.com Git - apt.git/blobdiff - apt-pkg/depcache.cc
add options to disable specific checksums for Indexes
[apt.git] / apt-pkg / depcache.cc
index 4a8e53eb333c8a1ce5d1dbb98da1db1e5aa00a8c..ddbd3769905bd69931b1e177a2f62a8e2617c1df 100644 (file)
@@ -167,7 +167,7 @@ bool pkgDepCache::readStateFile(OpProgress *Prog)                   /*{{{*/
 {
    FileFd state_file;
    string const state = _config->FindFile("Dir::State::extended_states");
-   if(FileExists(state)) {
+   if(RealFileExists(state)) {
       state_file.Open(state, FileFd::ReadOnly);
       int const file_size = state_file.Size();
       if(Prog != NULL)
@@ -226,7 +226,7 @@ bool pkgDepCache::writeStateFile(OpProgress *prog, bool InstalledOnly)      /*{{{*/
    string const state = _config->FindFile("Dir::State::extended_states");
 
    // if it does not exist, create a empty one
-   if(!FileExists(state)) 
+   if(!RealFileExists(state)) 
    {
       StateFile.Open(state, FileFd::WriteAtomic);
       StateFile.Close();
@@ -339,7 +339,7 @@ bool pkgDepCache::CheckDep(DepIterator Dep,int Type,PkgIterator &Res)
    /* Check simple depends. A depends -should- never self match but 
       we allow it anyhow because dpkg does. Technically it is a packaging
       bug. Conflicts may never self match */
-   if (Dep.TargetPkg()->Group != Dep.ParentPkg()->Group ||
+   if (Dep.TargetPkg() != Dep.ParentPkg() ||
        (Dep->Type != Dep::Conflicts && Dep->Type != Dep::DpkgBreaks && Dep->Type != Dep::Obsoletes))
    {
       PkgIterator Pkg = Dep.TargetPkg();
@@ -1257,9 +1257,10 @@ void pkgDepCache::MarkInstall(PkgIterator const &Pkg,bool AutoInst,
 
    if(FromUser)
      {
-       // Set it to manual if it's a new install or cancelling the
-       // removal of a garbage package.
-       if(P.Status == 2 || (!Pkg.CurrentVer().end() && !P.Marked))
+       // Set it to manual if it's a new install or already installed,
+       // but only if its not marked by the autoremover (aptitude depend on this behavior)
+       // or if we do automatic installation (aptitude never does it)
+       if(P.Status == 2 || (Pkg->CurrentVer != 0 && (AutoInst == true || P.Marked == false)))
         P.Flags &= ~Flag::Auto;
      }
    else
@@ -1330,8 +1331,6 @@ void pkgDepCache::MarkInstall(PkgIterator const &Pkg,bool AutoInst,
           for (DepIterator D = instVer.DependsList(); D.end() != true; D++)
             {
               //FIXME: deal better with or-groups(?)
-              DepIterator LocalStart = D;
-
               if(IsImportantDep(D) && !D.IsCritical() &&
                  Start.TargetPkg() == D.TargetPkg())
                 {
@@ -1523,7 +1522,7 @@ void pkgDepCache::SetCandidateVersion(VerIterator TargetVer, bool const &Pseudo)
    RemoveSizes(Pkg);
    RemoveStates(Pkg);
 
-   if (P.CandidateVer == P.InstallVer)
+   if (P.CandidateVer == P.InstallVer && P.Install() == true)
       P.InstallVer = (Version *)TargetVer;
    P.CandidateVer = (Version *)TargetVer;
    P.Update(Pkg,*this);
@@ -1570,6 +1569,7 @@ bool pkgDepCache::SetCandidateRelease(pkgCache::VerIterator TargetVer,
                                        std::string const &TargetRel,
                                        std::list<std::pair<pkgCache::VerIterator, pkgCache::VerIterator> > &Changed)
 {
+   ActionGroup group(*this);
    SetCandidateVersion(TargetVer);
 
    if (TargetRel == "installed" || TargetRel == "candidate") // both doesn't make sense in this context
@@ -1920,10 +1920,11 @@ void pkgDepCache::MarkPackage(const pkgCache::PkgIterator &pkg,
       return;
 
    VerIterator const currver = pkg.CurrentVer();
-   VerIterator const candver = state.CandidateVerIter(*this);
    VerIterator const instver = state.InstVerIter(*this);
 
 #if 0
+   VerIterator const candver = state.CandidateVerIter(*this);
+
    // If a package was garbage-collected but is now being marked, we
    // should re-select it 
    // For cases when a pkg is set to upgrade and this trigger the