Переглянути джерело

Avoid wedging the entire system if recoverable :/.

Jay Freeman (saurik) 9 роки тому
батько
коміт
4e99adb0d3
3 змінених файлів з 31 додано та 23 видалено
  1. 8 4
      apt-pkg/deb/deblistparser.cc
  2. 22 18
      apt-pkg/pkgcachegen.cc
  3. 1 1
      apt-pkg/tagfile.cc

+ 8 - 4
apt-pkg/deb/deblistparser.cc

@@ -824,8 +824,10 @@ bool debListParser::ParseDepends(pkgCache::VerIterator &Ver,
       unsigned int Op;
 
       Start = ParseDepends(Start, Stop, Package, Version, Op, false, false, false);
-      if (Start == 0)
-	 return _error->Error("Problem parsing dependency %zu",static_cast<size_t>(Key)); // TODO
+      if (Start == 0) {
+	 _error->Warning("Problem parsing dependency %zu",static_cast<size_t>(Key)); // TODO
+         continue;
+      }
       size_t const found = Package.rfind(':');
 
       if (found == string::npos)
@@ -892,8 +894,10 @@ bool debListParser::ParseProvides(pkgCache::VerIterator &Ver)
       {
 	 Start = ParseDepends(Start,Stop,Package,Version,Op, false, false, false);
 	 const size_t archfound = Package.rfind(':');
-	 if (Start == 0)
-	    return _error->Error("Problem parsing Provides line");
+	 if (Start == 0) {
+	    _error->Warning("Problem parsing Provides line");
+            continue;
+         }
 	 if (unlikely(Op != pkgCache::Dep::NoOp && Op != pkgCache::Dep::Equals)) {
 	    _error->Warning("Ignoring Provides line with non-equal DepCompareOp for package %s", Package.to_string().c_str());
 	 } else if (archfound != string::npos) {

+ 22 - 18
apt-pkg/pkgcachegen.cc

@@ -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;
@@ -1589,7 +1593,7 @@ static bool BuildCache(pkgCacheGenerator &Gen,
 	 }
 
 	 if ((*i)->Merge(Gen, Progress) == false)
-	    return false;
+	    continue;
 
 	 std::vector <pkgIndexFile *> *Indexes = (*i)->GetIndexFiles();
 	 if (Indexes != NULL)

+ 1 - 1
apt-pkg/tagfile.cc

@@ -215,7 +215,7 @@ bool pkgTagFile::Step(pkgTagSection &Tag)
 	    break;
 
 	 if (Resize() == false)
-	    return _error->Error(_("Unable to parse package file %s (%d)"),
+	    return _error->Warning(_("Unable to parse package file %s (%d)"),
 		  d->Fd->Name().c_str(), 1);
 
       } while (Tag.Scan(d->Start,d->End - d->Start, false) == false);