]> git.saurik.com Git - apt.git/blobdiff - apt-pkg/pkgcachegen.cc
Various minor bug fixes
[apt.git] / apt-pkg / pkgcachegen.cc
index fd4f8965b4775ae603e79081cf9a57b0a12315f4..804c59a48cd38708dc9f79c564115564d0073f97 100644 (file)
@@ -1,6 +1,6 @@
 // -*- mode: cpp; mode: fold -*-
 // Description                                                         /*{{{*/
 // -*- mode: cpp; mode: fold -*-
 // Description                                                         /*{{{*/
-// $Id: pkgcachegen.cc,v 1.37 1999/04/19 02:35:38 jgg Exp $
+// $Id: pkgcachegen.cc,v 1.39 1999/06/04 05:54:20 jgg Exp $
 /* ######################################################################
    
    Package Cache Generator - Generator for the cache structure.
 /* ######################################################################
    
    Package Cache Generator - Generator for the cache structure.
@@ -111,20 +111,34 @@ bool pkgCacheGenerator::MergeList(ListParser &List)
       
       /* We already have a version for this item, record that we
          saw it */
       
       /* We already have a version for this item, record that we
          saw it */
-      if (Res == 0)
+      unsigned long Hash = List.VersionHash();
+      if (Res == 0 && Ver->Hash == Hash)
       {
         if (List.UsePackage(Pkg,Ver) == false)
            return _error->Error("Error occured while processing %s (UsePackage2)",PackageName.c_str());
       {
         if (List.UsePackage(Pkg,Ver) == false)
            return _error->Error("Error occured while processing %s (UsePackage2)",PackageName.c_str());
-        
+
         if (NewFileVer(Ver,List) == false)
            return _error->Error("Error occured while processing %s (NewFileVer1)",PackageName.c_str());
         
         continue;
       }      
 
         if (NewFileVer(Ver,List) == false)
            return _error->Error("Error occured while processing %s (NewFileVer1)",PackageName.c_str());
         
         continue;
       }      
 
+      // Skip to the end of the same version set.
+      if (Res == 0)
+      {
+        for (; Ver.end() == false; Last = &Ver->NextVer, Ver++)
+        {
+           Res = pkgVersionCompare(Version.begin(),Version.end(),Ver.VerStr(),
+                                   Ver.VerStr() + strlen(Ver.VerStr()));
+           if (Res != 0)
+              break;
+        }
+      }
+
       // Add a new version
       *Last = NewVersion(Ver,Version,*Last);
       Ver->ParentPkg = Pkg.Index();
       // Add a new version
       *Last = NewVersion(Ver,Version,*Last);
       Ver->ParentPkg = Pkg.Index();
+      Ver->Hash = Hash;
       if (List.NewVersion(Ver) == false)
         return _error->Error("Error occured while processing %s (NewVersion1)",PackageName.c_str());
 
       if (List.NewVersion(Ver) == false)
         return _error->Error("Error occured while processing %s (NewVersion1)",PackageName.c_str());