]> git.saurik.com Git - apt.git/commitdiff
Merge remote-tracking branch 'mvo/feature/limit-default-pdiffs' into debian/sid
authorMichael Vogt <mvo@debian.org>
Wed, 9 Oct 2013 12:55:01 +0000 (14:55 +0200)
committerMichael Vogt <mvo@debian.org>
Wed, 9 Oct 2013 12:55:01 +0000 (14:55 +0200)
1  2 
apt-pkg/acquire-item.cc

diff --combined apt-pkg/acquire-item.cc
index 04505b35a32990ac96a748b5b513101d37bbebda,da00c9dd5c9df4adeda84de116a94558e11ca5d3..b7692131212175e86cb19dc066ecb70e5f1fc237
@@@ -143,32 -143,6 +143,32 @@@ void pkgAcquire::Item::Rename(string Fr
     }   
  }
                                                                        /*}}}*/
 +bool pkgAcquire::Item::RenameOnError(pkgAcquire::Item::RenameOnErrorState const error)/*{{{*/
 +{
 +   if(FileExists(DestFile))
 +      Rename(DestFile, DestFile + ".FAILED");
 +
 +   switch (error)
 +   {
 +      case HashSumMismatch:
 +       ErrorText = _("Hash Sum mismatch");
 +       Status = StatAuthError;
 +       ReportMirrorFailure("HashChecksumFailure");
 +       break;
 +      case SizeMismatch:
 +       ErrorText = _("Size mismatch");
 +       Status = StatAuthError;
 +       ReportMirrorFailure("SizeFailure");
 +       break;
 +      case InvalidFormat:
 +       ErrorText = _("Invalid file format");
 +       Status = StatError;
 +       // do not report as usually its not the mirrors fault, but Portal/Proxy
 +       break;
 +   }
 +   return false;
 +}
 +                                                                      /*}}}*/
  // Acquire::Item::ReportMirrorFailure                                 /*{{{*/
  // ---------------------------------------------------------------------
  void pkgAcquire::Item::ReportMirrorFailure(string FailCode)
@@@ -460,7 -434,7 +460,7 @@@ bool pkgAcqDiffIndex::ParseDiffIndex(st
         if (available_patches.empty() == false)
         {
            // patching with too many files is rather slow compared to a fast download
-           unsigned long const fileLimit = _config->FindI("Acquire::PDiffs::FileLimit", 0);
+           unsigned long const fileLimit = _config->FindI("Acquire::PDiffs::FileLimit", 20);
            if (fileLimit != 0 && fileLimit < available_patches.size())
            {
               if (Debug)
@@@ -621,7 -595,9 +621,7 @@@ void pkgAcqIndexDiffs::Finish(bool allD
  
        if(!ExpectedHash.empty() && !ExpectedHash.VerifyFile(DestFile))
        {
 -       Status = StatAuthError;
 -       ErrorText = _("MD5Sum mismatch");
 -       Rename(DestFile,DestFile + ".FAILED");
 +       RenameOnError(HashSumMismatch);
         Dequeue();
         return;
        }
@@@ -890,7 -866,10 +890,7 @@@ void pkgAcqIndex::Done(string Message,u
  
        if (!ExpectedHash.empty() && ExpectedHash.toStr() != Hash)
        {
 -         Status = StatAuthError;
 -         ErrorText = _("Hash Sum mismatch");
 -         Rename(DestFile,DestFile + ".FAILED");
 -       ReportMirrorFailure("HashChecksumFailure");
 +       RenameOnError(HashSumMismatch);
           return;
        }
  
        if (Verify == true)
        {
         FileFd fd(DestFile, FileFd::ReadOnly);
 -       pkgTagSection sec;
 -       pkgTagFile tag(&fd);
 -
 -         // Only test for correctness if the file is not empty (empty is ok)
 -         if (fd.Size() > 0) {
 -            if (_error->PendingError() || !tag.Step(sec)) {
 -               Status = StatError;
 -               _error->DumpErrors();
 -               Rename(DestFile,DestFile + ".FAILED");
 -               return;
 -            } else if (!sec.Exists("Package")) {
 -               Status = StatError;
 -               ErrorText = ("Encountered a section with no Package: header");
 -               Rename(DestFile,DestFile + ".FAILED");
 -               return;
 -            }
 +       // Only test for correctness if the file is not empty (empty is ok)
 +       if (fd.FileSize() > 0)
 +       {
 +          pkgTagSection sec;
 +          pkgTagFile tag(&fd);
 +
 +          // all our current indexes have a field 'Package' in each section
 +          if (_error->PendingError() == true || tag.Step(sec) == false || sec.Exists("Package") == false)
 +          {
 +             RenameOnError(InvalidFormat);
 +             return;
 +          }
           }
        }
         
@@@ -1736,40 -1719,34 +1736,40 @@@ pkgAcqArchive::pkgAcqArchive(pkgAcquir
     }
  
     // check if we have one trusted source for the package. if so, switch
 -   // to "TrustedOnly" mode
 +   // to "TrustedOnly" mode - but only if not in AllowUnauthenticated mode
 +   bool const allowUnauth = _config->FindB("APT::Get::AllowUnauthenticated", false);
 +   bool const debugAuth = _config->FindB("Debug::pkgAcquire::Auth", false);
 +   bool seenUntrusted = false;
     for (pkgCache::VerFileIterator i = Version.FileList(); i.end() == false; ++i)
     {
        pkgIndexFile *Index;
        if (Sources->FindIndex(i.File(),Index) == false)
           continue;
 -      if (_config->FindB("Debug::pkgAcquire::Auth", false))
 -      {
 +
 +      if (debugAuth == true)
           std::cerr << "Checking index: " << Index->Describe()
 -                   << "(Trusted=" << Index->IsTrusted() << ")\n";
 -      }
 -      if (Index->IsTrusted()) {
 +                   << "(Trusted=" << Index->IsTrusted() << ")" << std::endl;
 +
 +      if (Index->IsTrusted() == true)
 +      {
           Trusted = true;
 -       break;
 +       if (allowUnauth == false)
 +          break;
        }
 +      else
 +         seenUntrusted = true;
     }
  
     // "allow-unauthenticated" restores apts old fetching behaviour
     // that means that e.g. unauthenticated file:// uris are higher
     // priority than authenticated http:// uris
 -   if (_config->FindB("APT::Get::AllowUnauthenticated",false) == true)
 +   if (allowUnauth == true && seenUntrusted == true)
        Trusted = false;
  
     // Select a source
     if (QueueNext() == false && _error->PendingError() == false)
 -      _error->Error(_("I wasn't able to locate a file for the %s package. "
 -                  "This might mean you need to manually fix this package."),
 -                  Version.ParentPkg().Name());
 +      _error->Error(_("Can't find a source to download version '%s' of '%s'"),
 +                  Version.VerStr(), Version.ParentPkg().FullName(false).c_str());
  }
                                                                        /*}}}*/
  // AcqArchive::QueueNext - Queue the next file source                 /*{{{*/
@@@ -1923,14 -1900,18 +1923,14 @@@ void pkgAcqArchive::Done(string Message
     // Check the size
     if (Size != Version->Size)
     {
 -      Status = StatError;
 -      ErrorText = _("Size mismatch");
 +      RenameOnError(SizeMismatch);
        return;
     }
     
     // Check the hash
     if(ExpectedHash.toStr() != CalcHash)
     {
 -      Status = StatError;
 -      ErrorText = _("Hash Sum mismatch");
 -      if(FileExists(DestFile))
 -       Rename(DestFile,DestFile + ".FAILED");
 +      RenameOnError(HashSumMismatch);
        return;
     }
  
@@@ -2070,7 -2051,9 +2070,7 @@@ void pkgAcqFile::Done(string Message,un
     // Check the hash
     if(!ExpectedHash.empty() && ExpectedHash.toStr() != CalcHash)
     {
 -      Status = StatError;
 -      ErrorText = _("Hash Sum mismatch");
 -      Rename(DestFile,DestFile + ".FAILED");
 +      RenameOnError(HashSumMismatch);
        return;
     }