]> git.saurik.com Git - apt.git/blobdiff - apt-pkg/pkgcachegen.cc
Bug #807012 also involves package dependencies :/.
[apt.git] / apt-pkg / pkgcachegen.cc
index 8a8c8842296942215686a0e06add983491b3ebc0..51bb9ec7b3545fb97b479549169e02f2c7c666df 100644 (file)
@@ -249,8 +249,10 @@ bool pkgCacheGenerator::MergeList(ListParser &List,
    while (List.Step() == true)
    {
       string const PackageName = List.Package();
-      if (PackageName.empty() == true)
-        return false;
+      if (PackageName.empty() == true) {
+          _error->Warning("Encountered a section with no Package: header");
+          continue;
+      }
 
       Counter++;
       if (Counter % 100 == 0 && Progress != 0)
@@ -264,24 +266,26 @@ bool pkgCacheGenerator::MergeList(ListParser &List,
       {
         // package descriptions
         if (MergeListGroup(List, PackageName) == false)
-           return false;
+           continue;
         continue;
       }
 
       // Get a pointer to the package structure
       pkgCache::PkgIterator Pkg;
       Dynamic<pkgCache::PkgIterator> DynPkg(Pkg);
-      if (NewPackage(Pkg, PackageName, Arch) == false)
+      if (NewPackage(Pkg, PackageName, Arch) == false) {
         // TRANSLATOR: The first placeholder is a package name,
         // the other two should be copied verbatim as they include debug info
-        return _error->Error(_("Error occurred while processing %s (%s%d)"),
+        _error->Warning(_("Error occurred while processing %s (%s%d)"),
                              PackageName.c_str(), "NewPackage", 1);
+         continue;
+      }
 
 
       if (Version.empty() == true)
       {
         if (MergeListPackage(List, Pkg) == false)
-           return false;
+           continue;
       }
       else
       {
@@ -336,7 +340,7 @@ bool pkgCacheGenerator::MergeListPackage(ListParser &List, pkgCache::PkgIterator
    pkgCache::VerIterator Ver(Cache);
    Dynamic<pkgCache::VerIterator> DynVer(Ver);
    if (List.UsePackage(Pkg, Ver) == false)
-      return _error->Error(_("Error occurred while processing %s (%s%d)"),
+      return _error->Warning(_("Error occurred while processing %s (%s%d)"),
                           Pkg.Name(), "UsePackage", 1);
 
    // Find the right version to write the description
@@ -415,11 +419,11 @@ bool pkgCacheGenerator::MergeListVersion(ListParser &List, pkgCache::PkgIterator
       if (Res == 0 && Ver.end() == false && Ver->Hash == Hash)
       {
         if (List.UsePackage(Pkg,Ver) == false)
-           return _error->Error(_("Error occurred while processing %s (%s%d)"),
+           return _error->Warning(_("Error occurred while processing %s (%s%d)"),
                                 Pkg.Name(), "UsePackage", 2);
 
         if (NewFileVer(Ver,List) == false)
-           return _error->Error(_("Error occurred while processing %s (%s%d)"),
+           return _error->Warning(_("Error occurred while processing %s (%s%d)"),
                                 Pkg.Name(), "NewFileVer", 1);
 
         // Read only a single record and return
@@ -436,7 +440,7 @@ bool pkgCacheGenerator::MergeListVersion(ListParser &List, pkgCache::PkgIterator
    // Add a new version
    map_pointer_t const verindex = NewVersion(Ver, Version, Pkg.Index(), Hash, *LastVer);
    if (unlikely(verindex == 0))
-      return _error->Error(_("Error occurred while processing %s (%s%d)"),
+      return _error->Warning(_("Error occurred while processing %s (%s%d)"),
                           Pkg.Name(), "NewVersion", 1);
 
    if (oldMap != Map.Data())
@@ -444,15 +448,15 @@ bool pkgCacheGenerator::MergeListVersion(ListParser &List, pkgCache::PkgIterator
    *LastVer = verindex;
 
    if (unlikely(List.NewVersion(Ver) == false))
-      return _error->Error(_("Error occurred while processing %s (%s%d)"),
+      return _error->Warning(_("Error occurred while processing %s (%s%d)"),
                           Pkg.Name(), "NewVersion", 2);
 
    if (unlikely(List.UsePackage(Pkg,Ver) == false))
-      return _error->Error(_("Error occurred while processing %s (%s%d)"),
+      return _error->Warning(_("Error occurred while processing %s (%s%d)"),
                           Pkg.Name(), "UsePackage", 3);
 
    if (unlikely(NewFileVer(Ver,List) == false))
-      return _error->Error(_("Error occurred while processing %s (%s%d)"),
+      return _error->Warning(_("Error occurred while processing %s (%s%d)"),
                           Pkg.Name(), "NewFileVer", 2);
 
    pkgCache::GrpIterator Grp = Pkg.Group();
@@ -473,12 +477,12 @@ bool pkgCacheGenerator::MergeListVersion(ListParser &List, pkgCache::PkgIterator
         Dynamic<pkgCache::VerIterator> DynV(V);
         for (; V.end() != true; ++V)
            if (unlikely(AddImplicitDepends(V, Pkg) == false))
-              return _error->Error(_("Error occurred while processing %s (%s%d)"),
+              return _error->Warning(_("Error occurred while processing %s (%s%d)"),
                                    Pkg.Name(), "AddImplicitDepends", 1);
       }
    }
    if (unlikely(AddImplicitDepends(Grp, Pkg, Ver) == false))
-      return _error->Error(_("Error occurred while processing %s (%s%d)"),
+      return _error->Warning(_("Error occurred while processing %s (%s%d)"),
                           Pkg.Name(), "AddImplicitDepends", 2);
 
    // Read only a single record and return
@@ -522,7 +526,7 @@ bool pkgCacheGenerator::AddNewDescription(ListParser &List, pkgCache::VerIterato
 
    map_pointer_t const descindex = NewDescription(Desc, lang, CurMd5, md5idx);
    if (unlikely(descindex == 0))
-      return _error->Error(_("Error occurred while processing %s (%s%d)"),
+      return _error->Warning(_("Error occurred while processing %s (%s%d)"),
            Ver.ParentPkg().Name(), "NewDescription", 1);
 
    md5idx = Desc->md5sum;
@@ -536,7 +540,7 @@ bool pkgCacheGenerator::AddNewDescription(ListParser &List, pkgCache::VerIterato
    *LastNextDesc = descindex;
 
    if (NewFileDesc(Desc,List) == false)
-      return _error->Error(_("Error occurred while processing %s (%s%d)"),
+      return _error->Warning(_("Error occurred while processing %s (%s%d)"),
            Ver.ParentPkg().Name(), "NewFileDesc", 1);
 
    return true;
@@ -1546,16 +1550,14 @@ static map_filesize_t ComputeSize(pkgSourceList const * const List, FileIterator
 }
                                                                        /*}}}*/
 // BuildCache - Merge the list of index files into the cache           /*{{{*/
-static bool BuildCache(pkgCacheGenerator &Gen,
+static void BuildCache(pkgCacheGenerator &Gen,
                       OpProgress * const Progress,
                       map_filesize_t &CurrentSize,map_filesize_t TotalSize,
                       pkgSourceList const * const List,
                       FileIterator const Start, FileIterator const End)
 {
-   bool mergeFailure = false;
-
    auto const indexFileMerge = [&](pkgIndexFile * const I) {
-      if (I->HasPackages() == false || mergeFailure)
+      if (I->HasPackages() == false)
         return;
 
       if (I->Exists() == false)
@@ -1574,7 +1576,7 @@ static bool BuildCache(pkgCacheGenerator &Gen,
       CurrentSize += Size;
 
       if (I->Merge(Gen,Progress) == false)
-        mergeFailure = true;
+        return;
    };
 
    if (List !=  NULL)
@@ -1589,13 +1591,11 @@ static bool BuildCache(pkgCacheGenerator &Gen,
         }
 
         if ((*i)->Merge(Gen, Progress) == false)
-           return false;
+           continue;
 
         std::vector <pkgIndexFile *> *Indexes = (*i)->GetIndexFiles();
         if (Indexes != NULL)
            std::for_each(Indexes->begin(), Indexes->end(), indexFileMerge);
-        if (mergeFailure)
-           return false;
       }
    }
 
@@ -1603,10 +1603,7 @@ static bool BuildCache(pkgCacheGenerator &Gen,
    {
       Gen.SelectReleaseFile("", "");
       std::for_each(Start, End, indexFileMerge);
-      if (mergeFailure)
-        return false;
    }
-   return true;
 }
                                                                        /*}}}*/
 // CacheGenerator::MakeStatusCache - Construct the status cache                /*{{{*/
@@ -1780,9 +1777,8 @@ bool pkgCacheGenerator::MakeStatusCache(pkgSourceList &List,OpProgress *Progress
         return false;
 
       TotalSize += ComputeSize(&List, Files.begin(),Files.end());
-      if (BuildCache(*Gen, Progress, CurrentSize, TotalSize, &List,
-              Files.end(),Files.end()) == false)
-        return false;
+      BuildCache(*Gen, Progress, CurrentSize, TotalSize, &List,
+              Files.end(),Files.end());
 
       if (Writeable == true && SrcCacheFile.empty() == false)
         if (writeBackMMapToFile(Gen.get(), Map.get(), SrcCacheFile) == false)
@@ -1793,9 +1789,8 @@ bool pkgCacheGenerator::MakeStatusCache(pkgSourceList &List,OpProgress *Progress
    {
       if (Debug == true)
         std::clog << "Building status cache in pkgcache.bin now" << std::endl;
-      if (BuildCache(*Gen, Progress, CurrentSize, TotalSize, NULL,
-              Files.begin(), Files.end()) == false)
-        return false;
+      BuildCache(*Gen, Progress, CurrentSize, TotalSize, NULL,
+              Files.begin(), Files.end());
 
       if (Writeable == true && CacheFile.empty() == false)
         if (writeBackMMapToFile(Gen.get(), Map.get(), CacheFile) == false)
@@ -1816,9 +1811,8 @@ bool pkgCacheGenerator::MakeStatusCache(pkgSourceList &List,OpProgress *Progress
       }
 
       Files = List.GetVolatileFiles();
-      if (BuildCache(*Gen, Progress, CurrentSize, TotalSize, NULL,
-              Files.begin(), Files.end()) == false)
-        return false;
+      BuildCache(*Gen, Progress, CurrentSize, TotalSize, NULL,
+              Files.begin(), Files.end());
    }
 
    if (OutMap != nullptr)
@@ -1857,9 +1851,8 @@ bool pkgCacheGenerator::MakeOnlyStatusCache(OpProgress *Progress,DynamicMMap **O
    pkgCacheGenerator Gen(Map.get(),Progress);
    if (Gen.Start() == false || _error->PendingError() == true)
       return false;
-   if (BuildCache(Gen,Progress,CurrentSize,TotalSize, NULL,
-                 Files.begin(), Files.end()) == false)
-      return false;
+   BuildCache(Gen,Progress,CurrentSize,TotalSize, NULL,
+                 Files.begin(), Files.end());
 
    if (_error->PendingError() == true)
       return false;