Преглед на файлове

* code cleanups (thanks matt!), moved UsePackage before the description list build in pkgcachegen to catch MMap errors early

Michael Vogt преди 21 години
родител
ревизия
770c32ec85
променени са 10 файла, в които са добавени 50 реда и са изтрити 31 реда
  1. 2 2
      apt-pkg/acquire-item.h
  2. 1 1
      apt-pkg/cacheiterators.h
  3. 3 3
      apt-pkg/deb/debindexfile.cc
  4. 6 4
      apt-pkg/deb/deblistparser.cc
  5. 3 1
      apt-pkg/deb/debmetaindex.cc
  6. 11 5
      apt-pkg/indexfile.cc
  7. 1 1
      apt-pkg/indexfile.h
  8. 3 3
      apt-pkg/init.cc
  9. 1 1
      apt-pkg/pkgcache.cc
  10. 19 10
      apt-pkg/pkgcachegen.cc

+ 2 - 2
apt-pkg/acquire-item.h

@@ -9,7 +9,7 @@
    the Owner Acquire class. Derived classes will then call QueueURI to 
    register all the URI's they wish to fetch at the initial moment.   
    
-   Tree item classes are provided to provide functionality for
+   Three item classes are provided to provide functionality for
    downloading of Index, Translation and Packages files.
    
    A Archive class is provided for downloading .deb files. It does Md5
@@ -106,7 +106,7 @@ class pkgAcqIndex : public pkgAcquire::Item
 	       string ShortDesct, string ExpectedMD5, string compressExt="");
 };
 
-// Item class for index files
+// Item class for translated package index files
 class pkgAcqIndexTrans : public pkgAcqIndex
 {
    public:

+ 1 - 1
apt-pkg/cacheiterators.h

@@ -99,7 +99,7 @@ class pkgCache::VerIterator
 {
    Version *Ver;
    pkgCache *Owner;
-   
+
    void _dummy();
    
    public:

+ 3 - 3
apt-pkg/deb/debindexfile.cc

@@ -358,7 +358,7 @@ string debTranslationsIndex::IndexURI(const char *Type) const
 /* */
 bool debTranslationsIndex::GetIndexes(pkgAcquire *Owner) const
 {
-   if (UseTranslation()) {
+   if (TranslationsAvailable()) {
      string TranslationFile = "Translation-" + LanguageCode();
      new pkgAcqIndexTrans(Owner, IndexURI(LanguageCode().c_str()),
 			  Info(TranslationFile.c_str()),
@@ -403,7 +403,7 @@ string debTranslationsIndex::Info(const char *Type) const
 									/*}}}*/
 bool debTranslationsIndex::HasPackages() const
 {
-   if(!UseTranslation())
+   if(!TranslationsAvailable())
       return false;
    
    return FileExists(IndexFile(LanguageCode().c_str()));
@@ -435,7 +435,7 @@ bool debTranslationsIndex::Merge(pkgCacheGenerator &Gen,OpProgress &Prog) const
 {
    // Check the translation file, if in use
    string TranslationFile = IndexFile(LanguageCode().c_str());
-   if (UseTranslation() && FileExists(TranslationFile))
+   if (TranslationsAvailable() && FileExists(TranslationFile))
    {
      FileFd Trans(TranslationFile,FileFd::ReadOnly);
      debListParser TransParser(&Trans);

+ 6 - 4
apt-pkg/deb/deblistparser.cc

@@ -143,14 +143,16 @@ string debListParser::DescriptionLanguage()
                                                                         /*}}}*/
 // ListParser::Description - Return the description_md5 MD5SumValue	/*{{{*/
 // ---------------------------------------------------------------------
-/* This is to return the md5 string to allow the check if is the right
-   description. If thisreturns a blank string then calculate the md5
-   value. */
+/* This is to return the md5 string to allow the check if it is the right
+   description. If no Description-md5 is found in the section it will be
+   calculated.
+ */
 MD5SumValue debListParser::Description_md5()
 {
    string value = Section.FindS("Description-md5");
 
-   if (value.empty()) {
+   if (value.empty()) 
+   {
       MD5Summation md5;
       md5.Add((Description() + "\n").c_str());
       return md5.Result();

+ 3 - 1
apt-pkg/deb/debmetaindex.cc

@@ -189,8 +189,10 @@ vector <pkgIndexFile *> *debReleaseIndex::GetIndexFiles()
       if ((*I)->IsSrc)
          Indexes->push_back(new debSourcesIndex (URI, Dist, (*I)->Section, IsTrusted()));
       else 
+      {
          Indexes->push_back(new debPackagesIndex (URI, Dist, (*I)->Section, IsTrusted()));
-      Indexes->push_back(new debTranslationsIndex(URI,Dist,(*I)->Section));
+	 Indexes->push_back(new debTranslationsIndex(URI, Dist, (*I)->Section));
+      }
    }
 
    return Indexes;

+ 11 - 5
apt-pkg/indexfile.cc

@@ -70,10 +70,10 @@ string pkgIndexFile::SourceInfo(pkgSrcRecords::Parser const &Record,
    return string();
 }
 									/*}}}*/
-// IndexFile::UseTranslation - Check if will use Translation	        /*{{{*/
+// IndexFile::TranslationsAvailable - Check if will use Translation    /*{{{*/
 // ---------------------------------------------------------------------
 /* */
-bool pkgIndexFile::UseTranslation()
+bool pkgIndexFile::TranslationsAvailable()
 {
   const string Translation = _config->Find("APT::Acquire::Translation");
   
@@ -89,7 +89,6 @@ bool pkgIndexFile::UseTranslation()
 /* common cases: de_DE, de_DE@euro, de_DE.UTF-8, de_DE.UTF-8@euro,
                  de_DE.ISO8859-1, tig_ER
                  more in /etc/gdm/locale.conf 
-		 approach: just get the first letter before the underscore?!?
 */
 
 bool pkgIndexFile::CheckLanguageCode(const char *Lang)
@@ -105,13 +104,20 @@ bool pkgIndexFile::CheckLanguageCode(const char *Lang)
 									/*}}}*/
 // IndexFile::LanguageCode - Return the Language Code            	/*{{{*/
 // ---------------------------------------------------------------------
-/* */
+/* return the language code */
 string pkgIndexFile::LanguageCode()
 {
   const string Translation = _config->Find("APT::Acquire::Translation");
 
-  if (Translation.compare("environment") == 0) {
+  if (Translation.compare("environment") == 0) 
+  {
      string lang = std::setlocale(LC_MESSAGES,NULL);
+
+     // FIXME: this needs to be added
+     // we have a mapping of the language codes that contains all the language
+     // codes that need the country code as well 
+     // (like pt_BR, pt_PT, sv_SE, zh_*, en_*)
+
      if(lang.size() > 2)
 	return lang.substr(0,2);
      else

+ 1 - 1
apt-pkg/indexfile.h

@@ -81,7 +81,7 @@ class pkgIndexFile
    virtual bool MergeFileProvides(pkgCacheGenerator &/*Gen*/,OpProgress &/*Prog*/) const {return true;};
    virtual pkgCache::PkgFileIterator FindInCache(pkgCache &Cache) const;
 
-   static bool UseTranslation();
+   static bool TranslationsAvailable();
    static bool CheckLanguageCode(const char *Lang);
    static string LanguageCode();
 

+ 3 - 3
apt-pkg/init.cc

@@ -33,9 +33,6 @@ const char *pkgOS = COMMON_OS;
    is prepended, this allows a fair degree of flexability. */
 bool pkgInitConfig(Configuration &Cnf)
 {
-   // Translation
-   Cnf.Set("APT::Acquire::Translation", "environment");
-
    // General APT things
    if (strcmp(COMMON_OS,"linux") == 0 ||
        strcmp(COMMON_OS,"unknown") == 0)
@@ -104,6 +101,9 @@ bool pkgInitConfig(Configuration &Cnf)
       bindtextdomain(textdomain(0),Cnf.FindDir("Dir::Locale").c_str());
    }
 #endif
+
+   // Translation
+   Cnf.Set("APT::Acquire::Translation", "environment");
    
    return true;
 }

+ 1 - 1
apt-pkg/pkgcache.cc

@@ -244,11 +244,11 @@ const char *pkgCache::Priority(unsigned char Prio)
    return 0;
 }
 									/*}}}*/
-
 // Bases for iterator classes						/*{{{*/
 void pkgCache::VerIterator::_dummy() {}
 void pkgCache::DepIterator::_dummy() {}
 void pkgCache::PrvIterator::_dummy() {}
+void pkgCache::DescIterator::_dummy() {}
 									/*}}}*/
 // PkgIterator::operator ++ - Postfix incr				/*{{{*/
 // ---------------------------------------------------------------------

+ 19 - 10
apt-pkg/pkgcachegen.cc

@@ -125,31 +125,39 @@ bool pkgCacheGenerator::MergeList(ListParser &List,
       string Version = List.Version();
       if (Version.empty() == true)
       {
+	 // we first process the package, then the descriptions
+	 // (this has the bonus that we get MMap error when we run out
+	 //  of MMap space)
+	 if (List.UsePackage(Pkg,pkgCache::VerIterator(Cache)) == false)
+	    return _error->Error(_("Error occurred while processing %s (UsePackage1)"),
+				 PackageName.c_str());
+
  	 // Find the right version to write the description
  	 MD5SumValue CurMd5 = List.Description_md5();
  	 pkgCache::VerIterator Ver = Pkg.VersionList();
  	 map_ptrloc *LastVer = &Pkg->VersionList;
- 	 
+
   	 for (; Ver.end() == false; LastVer = &Ver->NextVer, Ver++) 
  	 {
  	    pkgCache::DescIterator Desc = Ver.DescriptionList();
  	    map_ptrloc *LastDesc = &Ver->DescriptionList;
-       
+
  	    for (; Desc.end() == false; LastDesc = &Desc->NextDesc, Desc++)
- 	       if (MD5SumValue(Desc.md5()) == CurMd5) {
+	    {
+
+ 	       if (MD5SumValue(Desc.md5()) == CurMd5) 
+               {
  		  // Add new description
  		  *LastDesc = NewDescription(Desc, List.DescriptionLanguage(), CurMd5, *LastDesc);
  		  Desc->ParentPkg = Pkg.Index();
- 
+		  
  		  if (NewFileDesc(Desc,List) == false)
  		     return _error->Error(_("Error occured while processing %s (NewFileDesc1)"),PackageName.c_str());
  		  break;
  	       }
+	    }
  	 }
- 
-	 if (List.UsePackage(Pkg,pkgCache::VerIterator(Cache)) == false)
-	    return _error->Error(_("Error occurred while processing %s (UsePackage1)"),
-				 PackageName.c_str());
+
 	 continue;
       }
 
@@ -403,14 +411,15 @@ bool pkgCacheGenerator::NewFileDesc(pkgCache::DescIterator &Desc,
    unsigned long DescFile = Map.Allocate(sizeof(pkgCache::DescFile));
    if (DescFile == 0)
       return 0;
-   
+
    pkgCache::DescFileIterator DF(Cache,Cache.DescFileP + DescFile);
    DF->File = CurrentFile - Cache.PkgFileP;
-   
+
    // Link it to the end of the list
    map_ptrloc *Last = &Desc->FileList;
    for (pkgCache::DescFileIterator D = Desc.FileList(); D.end() == false; D++)
       Last = &D->NextFile;
+
    DF->NextFile = *Last;
    *Last = DF.Index();