Icky pooh.. partial revert of 64174eee41f502ed847e89fe52ba79311533e4f8
authorPanu Matilainen <pmatilai@turre.koti.laiskiainen.org>
Sat, 7 Jul 2007 19:41:20 +0000 (22:41 +0300)
committerPanu Matilainen <pmatilai@turre.koti.laiskiainen.org>
Sat, 7 Jul 2007 19:41:20 +0000 (22:41 +0300)
to return to the a** backwards acquire semantics wrt compressed files.
Fixes unneeded redownloading of indexes and probably causes less breakage
in API abusers like Synaptic.

apt-pkg/acquire-item.cc
apt-pkg/repository.cc
apt-pkg/repository.h
apt-pkg/rpm/repomd.cc
apt-pkg/rpm/repomd.h
apt-pkg/rpm/rpmindexfile.cc

index 6022964..897dade 100644 (file)
@@ -208,7 +208,7 @@ pkgAcqIndex::pkgAcqIndex(pkgAcquire *Owner,pkgRepository *Repository,
    DestFile += URItoFileName(URI);
 
    // Create the item
-   Desc.URI = URI; 
+   Desc.URI = URI + "." + Repository->GetComprMethod(URI)
    Desc.Description = URIDesc;
    Desc.Owner = this;
    Desc.ShortDesc = ShortDesc;
@@ -295,7 +295,7 @@ void pkgAcqIndex::Done(string Message,off_t Size,string MD5,
       string MD5Hash;
 
       if (Repository != NULL && Repository->HasRelease() == true &&
-         Repository->FindChecksums(flUnCompressed(RealURI),FSize,MD5Hash) == true)
+         Repository->FindChecksums(RealURI,FSize,MD5Hash) == true)
       {
         // We must always get here if the repository is authenticated
         
@@ -332,14 +332,14 @@ void pkgAcqIndex::Done(string Message,off_t Size,string MD5,
         
       // Done, move it into position
       string FinalFile = _config->FindDir("Dir::State::lists");
-      FinalFile += URItoFileName(flUnCompressed(RealURI));
+      FinalFile += URItoFileName(RealURI);
       Rename(DestFile,FinalFile);
       chmod(FinalFile.c_str(),0644);
       
       /* We restore the original name to DestFile so that the clean operation
          will work OK */
       DestFile = _config->FindDir("Dir::State::lists") + "partial/";
-      DestFile += URItoFileName(flUnCompressed(RealURI));
+      DestFile += URItoFileName(RealURI);
       
       // Remove the compressed version.
       if (Erase == true)
@@ -385,10 +385,11 @@ void pkgAcqIndex::Done(string Message,off_t Size,string MD5,
    
    Decompression = true;
    DestFile += ".decomp";
-   if (flExtension(FileName) == "gz") {
+   string ComprMeth = Repository->GetComprMethod(RealURI);
+   if (ComprMeth == "gz") {
       Desc.URI = "gzip:" + FileName;
       Mode = "gzip";
-   } else if (flExtension(FileName) == "bz2") {
+   } else if (ComprMeth == "bz2") {
       Desc.URI = "bzip2:" + FileName;
       Mode = "bzip2";
    } else {
index 63b474b..81cbab5 100644 (file)
@@ -92,5 +92,5 @@ bool pkgRepository::FindChecksums(string URI,off_t &Size, string &MD5)
    MD5 = IndexChecksums[Path].MD5;
    return true;
 }
-                                                                       /*}}}*/
+
 // vim:sts=3:sw=3
index d20325b..eb8d1b2 100644 (file)
@@ -49,6 +49,7 @@ class pkgRepository
    virtual string FindURI(string DataType) {return "";};
    // LORG:2006-02-23 
    virtual string GetCheckMethod() {return CheckMethod;};
+   virtual string GetComprMethod(string URI) {return "bz2";};
    
    pkgRepository(string URI,string Dist, const pkgSourceList::Vendor *Vendor,
                 string RootURI)
index e70a87c..6ff7378 100644 (file)
@@ -54,6 +54,7 @@ bool repomdRepository::ParseRelease(string File)
         continue;
 
       string Hash = "";
+      string RealPath = "";
       string Path = "";
       string ChecksumType = "";
       string DataType = "";
@@ -91,7 +92,9 @@ bool repomdRepository::ParseRelease(string File)
       }
 
       n = NULL;
+      RealPath = Path;
       if (flExtension(Path) == "gz" || flExtension(Path) == "bz2") {
+        Path = Path.substr(0, Path.size()-flExtension(Path).size()-1);
         n = FindNode(Node, "open-checksum");
       } else {
         n = FindNode(Node, "checksum");
@@ -108,6 +111,7 @@ bool repomdRepository::ParseRelease(string File)
       IndexChecksums[Path].MD5 = Hash;
       IndexChecksums[Path].Size = 0;
       RepoFiles[DataType].Path = Path;
+      RepoFiles[DataType].RealPath = RealPath;
       RepoFiles[DataType].TimeStamp = TimeStamp;
       if (ChecksumType == "sha") {
         CheckMethod = "SHA1-Hash";
@@ -130,6 +134,20 @@ string repomdRepository::FindURI(string DataType)
    return Res;
 }
 
+string repomdRepository::GetComprMethod(string URI)
+{
+   string Res = "";
+   string Path = string(URI,RootURI.size());
+   
+   map<string,RepoFile>::iterator I;
+   for (I = RepoFiles.begin(); I != RepoFiles.end(); I++) {
+      if (Path == flUnCompressed(I->second.RealPath)) {
+        Res = flExtension(I->second.RealPath);
+      }
+   }
+   return Res;
+}
+   
 
 #endif /* APT_WITH_REPOMD */
 
index f5ee23a..9f536d0 100644 (file)
@@ -26,6 +26,7 @@ class repomdRepository : public pkgRepository
    
    struct RepoFile {
       string Path;
+      string RealPath;
       string Type;
       string TimeStamp;
    };
@@ -37,6 +38,7 @@ class repomdRepository : public pkgRepository
    virtual bool IsAuthenticated() const { return false; };
    virtual bool ParseRelease(string File);
    virtual string FindURI(string DataType);
+   virtual string GetComprMethod(string URI);
    
    repomdRepository(string URI,string Dist, const pkgSourceList::Vendor *Vendor,
                 string RootURI)
index f632a4c..d913499 100644 (file)
@@ -152,7 +152,7 @@ string rpmListIndex::Info(string Type) const
 inline string rpmListIndex::IndexFile(string Type) const
 {
    return _config->FindDir("Dir::State::lists") +
-         URItoFileName(flNoExtension(IndexURI(Type)));
+         URItoFileName(IndexURI(Type));
 }
 
 
@@ -171,9 +171,6 @@ string rpmListIndex::IndexURI(string Type) const
       Res = URI + Dist + "/base/";
    
    Res += Type + '.' + Section;
-   if (Type == "pkglist" || Type == "srclist") {
-      Res += ".bz2";
-   }
 
    if (rpmdata->HasIndexTranslation() == true)
    {
@@ -706,7 +703,7 @@ string rpmRepomdIndex::IndexPath() const
 string rpmRepomdIndex::IndexFile(string Type) const
 {
    return _config->FindDir("Dir::State::lists") +
-         URItoFileName(flNoExtension(IndexURI(AutoType(Type))));
+         URItoFileName(IndexURI(AutoType(Type)));
 }