浏览代码

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

Michael Vogt 14 年之前
父节点
当前提交
82c8f08ec6
共有 2 个文件被更改,包括 59 次插入29 次删除
  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