Procházet zdrojové kódy

* apt-pkg/cdrom.cc:
- use aptconfiguration to get the supported compression types

Michael Vogt před 15 roky
rodič
revize
82c8f08ec6
2 změnil soubory, kde provedl 59 přidání a 29 odebrání
  1. 54 29
      apt-pkg/cdrom.cc
  2. 5 0
      debian/changelog

+ 54 - 29
apt-pkg/cdrom.cc

@@ -78,27 +78,43 @@ bool pkgCdrom::FindPackages(string CD,
    {
    {
       SigList.push_back(CD);
       SigList.push_back(CD);
    }
    }
+
    /* Aha! We found some package files. We assume that everything under 
    /* Aha! We found some package files. We assume that everything under 
       this dir is controlled by those package files so we don't look down
       this dir is controlled by those package files so we don't look down
       anymore */
       anymore */
-   if (stat("Packages",&Buf) == 0 || stat("Packages.gz",&Buf) == 0 ||
-       stat("Packages.bz2",&Buf) == 0 || stat("Packages.xz",&Buf) == 0)
-   {
-      List.push_back(CD);
+    std::vector<std::string> types = APT::Configuration::getCompressionTypes();
+    types.push_back("");
+    for (std::vector<std::string>::const_iterator t = types.begin();
+         t != types.end(); ++t)
+    {
+       std::string filename = std::string("Packages");
+       if ((*t).size() > 0)
+          filename.append("."+*t);
+       if (stat(filename.c_str(), &Buf) == 0)
+       {
+          List.push_back(CD);
       
       
-      // Continue down if thorough is given
-      if (_config->FindB("APT::CDROM::Thorough",false) == false)
-	 return true;
-   }
-   if (stat("Sources.xz",&Buf) == 0 || stat("Sources.bz2",&Buf) == 0 ||
-       stat("Sources.gz",&Buf) == 0 || stat("Sources",&Buf) == 0)
-   {
-      SList.push_back(CD);
+          // Continue down if thorough is given
+          if (_config->FindB("APT::CDROM::Thorough",false) == false)
+             return true;
+          break;
+       }
+    }
+    for (std::vector<std::string>::const_iterator t = types.begin();
+         t != types.end(); ++t)
+    {
+       std::string filename = std::string("Sources");
+       if ((*t).size() > 0)
+          filename.append("."+*t);
+       {
+          SList.push_back(CD);
       
       
-      // Continue down if thorough is given
-      if (_config->FindB("APT::CDROM::Thorough",false) == false)
-	 return true;
-   }
+          // Continue down if thorough is given
+          if (_config->FindB("APT::CDROM::Thorough",false) == false)
+             return true;
+          break;
+       }
+    }
 
 
    // see if we find translatin indexes
    // see if we find translatin indexes
    if (stat("i18n",&Buf) == 0)
    if (stat("i18n",&Buf) == 0)
@@ -111,12 +127,15 @@ bool pkgCdrom::FindPackages(string CD,
 	    if (_config->FindB("Debug::aptcdrom",false) == true)
 	    if (_config->FindB("Debug::aptcdrom",false) == true)
 	       std::clog << "found translations: " << Dir->d_name << "\n";
 	       std::clog << "found translations: " << Dir->d_name << "\n";
 	    string file = Dir->d_name;
 	    string file = Dir->d_name;
-	    if(file.substr(file.size()-3,file.size()) == ".gz" ||
-	       file.substr(file.size()-3,file.size()) == ".xz")
-	       file = file.substr(0,file.size()-3);
-	    if(file.substr(file.size()-4,file.size()) == ".bz2")
-	       file = file.substr(0,file.size()-4);
-	    TransList.push_back(CD+"i18n/"+ file);
+            for (std::vector<std::string>::const_iterator t = types.begin();
+                 t != types.end(); ++t)
+            {
+               std::string needle = "." + *t;
+               if(file.substr(file.size()-needle.size()) == needle)
+                  file = file.substr(0, file.size()-needle.size());
+               TransList.push_back(CD+"i18n/"+ file);
+               break;
+            }
 	 }
 	 }
       }
       }
       closedir(D);
       closedir(D);
@@ -262,13 +281,19 @@ bool pkgCdrom::DropRepeats(vector<string> &List,const char *Name)
    for (unsigned int I = 0; I != List.size(); I++)
    for (unsigned int I = 0; I != List.size(); I++)
    {
    {
       struct stat Buf;
       struct stat Buf;
-      if (stat((List[I] + Name).c_str(),&Buf) != 0 &&
-	  stat((List[I] + Name + ".gz").c_str(),&Buf) != 0 && 
-	  stat((List[I] + Name + ".bz2").c_str(),&Buf) != 0 && 
-	  stat((List[I] + Name + ".xz").c_str(),&Buf) != 0)
-	 _error->Errno("stat","Failed to stat %s%s",List[I].c_str(),
-		       Name);
-      Inodes[I] = Buf.st_ino;
+      std::vector<std::string> types = APT::Configuration::getCompressionTypes();
+      types.push_back("");
+      for (std::vector<std::string>::const_iterator t = types.begin();
+           t != types.end(); ++t)
+      {
+         std::string filename = List[I] + Name;
+         if ((*t).size() > 0)
+            filename.append("." + *t);
+         if (stat(filename.c_str(), &Buf) != 0)
+            _error->Errno("stat","Failed to stat %s%s",List[I].c_str(),
+                          Name);
+         Inodes[I] = Buf.st_ino;
+      }
    }
    }
    
    
    if (_error->PendingError() == true) {
    if (_error->PendingError() == true) {

+ 5 - 0
debian/changelog

@@ -1,7 +1,12 @@
 apt (0.8.16~exp9) UNRELEASED; urgency=low
 apt (0.8.16~exp9) UNRELEASED; urgency=low
 
 
+  [ Julian Andres Klode ]
   * apt-pkg/cdrom.cc:
   * apt-pkg/cdrom.cc:
     - Accept .bz2, .xz files in addition to .gz files (Closes: #649451)
     - Accept .bz2, .xz files in addition to .gz files (Closes: #649451)
+  
+  [ Michael Vogt ]
+  * apt-pkg/cdrom.cc:
+    - use aptconfiguration to get the supported compression types
 
 
  -- Julian Andres Klode <jak@debian.org>  Mon, 21 Nov 2011 18:46:36 +0100
  -- Julian Andres Klode <jak@debian.org>  Mon, 21 Nov 2011 18:46:36 +0100