]> git.saurik.com Git - apt.git/blobdiff - apt-pkg/indexrecords.cc
Implement simple by-hash for apt update
[apt.git] / apt-pkg / indexrecords.cc
index 8a72ca15182f3f31203da6b8d5b08e6e6b1698f4..122194e94adfc7f8a7673344405f5424bf58cd83 100644 (file)
 #include <apt-pkg/hashes.h>
 #include <apt-pkg/gpgv.h>
 
 #include <apt-pkg/hashes.h>
 #include <apt-pkg/gpgv.h>
 
-#include <sys/stat.h>
+#include <stdlib.h>
+#include <time.h>
 #include <clocale>
 #include <clocale>
+#include <map>
+#include <string>
+#include <utility>
+#include <vector>
 
 #include <apti18n.h>
                                                                        /*}}}*/
 
 using std::string;
 
 
 #include <apti18n.h>
                                                                        /*}}}*/
 
 using std::string;
 
-string indexRecords::GetDist() const
+APT_PURE string indexRecords::GetDist() const
 {
    return this->Dist;
 }
 
 {
    return this->Dist;
 }
 
-bool indexRecords::CheckDist(const string MaybeDist) const
+APT_PURE string indexRecords::GetSuite() const
+{
+   return this->Suite;
+}
+
+APT_PURE bool indexRecords::CheckDist(const string MaybeDist) const
 {
    return (this->Dist == MaybeDist
           || this->Suite == MaybeDist);
 }
 
 {
    return (this->Dist == MaybeDist
           || this->Suite == MaybeDist);
 }
 
-string indexRecords::GetExpectedDist() const
+APT_PURE string indexRecords::GetExpectedDist() const
 {
    return this->ExpectedDist;
 }
 
 {
    return this->ExpectedDist;
 }
 
-time_t indexRecords::GetValidUntil() const
+APT_PURE time_t indexRecords::GetValidUntil() const
 {
    return this->ValidUntil;
 }
 
 {
    return this->ValidUntil;
 }
 
-const indexRecords::checkSum *indexRecords::Lookup(const string MetaKey)
+APT_PURE indexRecords::checkSum *indexRecords::Lookup(const string MetaKey)
 {
    std::map<std::string, indexRecords::checkSum* >::const_iterator sum = Entries.find(MetaKey);
    if (sum == Entries.end())
 {
    std::map<std::string, indexRecords::checkSum* >::const_iterator sum = Entries.find(MetaKey);
    if (sum == Entries.end())
@@ -51,7 +61,7 @@ const indexRecords::checkSum *indexRecords::Lookup(const string MetaKey)
    return sum->second;
 }
 
    return sum->second;
 }
 
-bool indexRecords::Exists(string const &MetaKey) const
+APT_PURE bool indexRecords::Exists(string const &MetaKey) const
 {
    return Entries.count(MetaKey) == 1;
 }
 {
    return Entries.count(MetaKey) == 1;
 }
@@ -80,8 +90,8 @@ bool indexRecords::Load(const string Filename)                                /*{{{*/
    Suite = Section.FindS("Suite");
    Dist = Section.FindS("Codename");
 
    Suite = Section.FindS("Suite");
    Dist = Section.FindS("Codename");
 
-   int i;
-   for (i=0;HashString::SupportedHashes()[i] != NULL; i++)
+   bool FoundHashSum = false;
+   for (int i=0;HashString::SupportedHashes()[i] != NULL; i++)
    {
       if (!Section.Find(HashString::SupportedHashes()[i], Start, End))
         continue;
    {
       if (!Section.Find(HashString::SupportedHashes()[i], Start, End))
         continue;
@@ -93,16 +103,20 @@ bool indexRecords::Load(const string Filename)                             /*{{{*/
       {
         if (!parseSumData(Start, End, Name, Hash, Size))
            return false;
       {
         if (!parseSumData(Start, End, Name, Hash, Size))
            return false;
-        indexRecords::checkSum *Sum = new indexRecords::checkSum;
-        Sum->MetaKeyFilename = Name;
-        Sum->Hash = HashString(HashString::SupportedHashes()[i],Hash);
-        Sum->Size = Size;
-        Entries[Name] = Sum;
+
+         if (Entries.find(Name) == Entries.end())
+         {
+            indexRecords::checkSum *Sum = new indexRecords::checkSum;
+            Sum->MetaKeyFilename = Name;
+            Sum->Size = Size;
+            Entries[Name] = Sum;
+         }
+         Entries[Name]->Hashes.push_back(HashString(HashString::SupportedHashes()[i],Hash));
+         FoundHashSum = true;
       }
       }
-      break;
    }
 
    }
 
-   if(HashString::SupportedHashes()[i] == NULL)
+   if(FoundHashSum == false)
    {
       strprintf(ErrorText, _("No Hash entry in Release file %s"), Filename.c_str());
       return false;
    {
       strprintf(ErrorText, _("No Hash entry in Release file %s"), Filename.c_str());
       return false;
@@ -124,10 +138,10 @@ bool indexRecords::Load(const string Filename)                            /*{{{*/
    // get the user settings for this archive and use what expires earlier
    int MaxAge = _config->FindI("Acquire::Max-ValidTime", 0);
    if (Label.empty() == false)
    // get the user settings for this archive and use what expires earlier
    int MaxAge = _config->FindI("Acquire::Max-ValidTime", 0);
    if (Label.empty() == false)
-      MaxAge = _config->FindI(string("Acquire::Max-ValidTime::" + Label).c_str(), MaxAge);
+      MaxAge = _config->FindI(("Acquire::Max-ValidTime::" + Label).c_str(), MaxAge);
    int MinAge = _config->FindI("Acquire::Min-ValidTime", 0);
    if (Label.empty() == false)
    int MinAge = _config->FindI("Acquire::Min-ValidTime", 0);
    if (Label.empty() == false)
-      MinAge = _config->FindI(string("Acquire::Min-ValidTime::" + Label).c_str(), MinAge);
+      MinAge = _config->FindI(("Acquire::Min-ValidTime::" + Label).c_str(), MinAge);
 
    if(MaxAge == 0 &&
       (MinAge == 0 || ValidUntil == 0)) // No user settings, use the one from the Release file
 
    if(MaxAge == 0 &&
       (MinAge == 0 || ValidUntil == 0)) // No user settings, use the one from the Release file