]> git.saurik.com Git - apt.git/commitdiff
* merged ddtp support
authorMichael Vogt <michael.vogt@ubuntu.com>
Fri, 11 Aug 2006 17:14:51 +0000 (19:14 +0200)
committerMichael Vogt <michael.vogt@ubuntu.com>
Fri, 11 Aug 2006 17:14:51 +0000 (19:14 +0200)
18 files changed:
1  2 
apt-pkg/acquire-item.cc
apt-pkg/acquire-item.h
apt-pkg/cacheiterators.h
apt-pkg/contrib/strutl.cc
apt-pkg/contrib/strutl.h
apt-pkg/deb/deblistparser.cc
apt-pkg/deb/debmetaindex.cc
apt-pkg/init.cc
apt-pkg/pkgcache.cc
apt-pkg/pkgcache.h
apt-pkg/pkgcachegen.cc
apt-pkg/pkgcachegen.h
apt-pkg/pkgrecords.cc
apt-pkg/pkgrecords.h
cmdline/apt-cache.cc
configure.in
debian/changelog
po/apt-all.pot

diff --combined apt-pkg/acquire-item.cc
index 18ce1076f4cd6364a286750cc4b382ce6f5206e5,e0e0611f04e94dc527be17c21ecef7cd5c28f164..2ecb7781481f874fbfedca327b16d7bd653025d0
@@@ -75,7 -75,7 +75,7 @@@ void pkgAcquire::Item::Failed(string Me
         Dequeue();
         return;
        }
 -      
 +
        Status = StatError;
        Dequeue();
     }   
@@@ -149,7 -149,7 +149,7 @@@ pkgAcqIndex::pkgAcqIndex(pkgAcquire *Ow
     if(comprExt.empty()) 
     {
        // autoselect the compression method
 -      if(FileExists("/usr/bin/bzip2")) 
 +      if(FileExists("/bin/bzip2")) 
         CompressionExtension = ".bz2";
        else 
         CompressionExtension = ".gz";
@@@ -184,7 -184,7 +184,7 @@@ string pkgAcqIndex::Custom600Headers(
  void pkgAcqIndex::Failed(string Message,pkgAcquire::MethodConfig *Cnf)
  {
     // no .bz2 found, retry with .gz
 -   if(Desc.URI.substr(Desc.URI.size()-3,Desc.URI.size()-1) == "bz2") {
 +   if(Desc.URI.substr(Desc.URI.size()-3) == "bz2") {
        Desc.URI = Desc.URI.substr(0,Desc.URI.size()-3) + "gz"; 
  
        // retry with a gzip one 
@@@ -290,7 -290,7 +290,7 @@@ void pkgAcqIndex::Done(string Message,u
     else
        Local = true;
     
 -   string compExt = Desc.URI.substr(Desc.URI.size()-3,Desc.URI.size()-1);
 +   string compExt = Desc.URI.substr(Desc.URI.size()-3);
     char *decompProg;
     if(compExt == "bz2") 
        decompProg = "bzip2";
     Mode = decompProg;
  }
  
+ // AcqIndexTrans::pkgAcqIndexTrans - Constructor                      /*{{{*/
+ // ---------------------------------------------------------------------
+ /* The Translation file is added to the queue */
+ pkgAcqIndexTrans::pkgAcqIndexTrans(pkgAcquire *Owner,
+                           string URI,string URIDesc,string ShortDesc) :
+                       pkgAcqIndex(Owner, URI, URIDesc, ShortDesc, "", "")
+ {
+ }
+                                                                       /*}}}*/
+ // AcqIndexTrans::Failed - Silence failure messages for missing files /*{{{*/
+ // ---------------------------------------------------------------------
+ /* */
+ void pkgAcqIndexTrans::Failed(string Message,pkgAcquire::MethodConfig *Cnf)
+ {
+    if (Cnf->LocalOnly == true || 
+        StringToBool(LookupTag(Message,"Transient-Failure"),false) == false)
+    {      
+       // Ignore this
+       Status = StatDone;
+       Complete = false;
+       Dequeue();
+       return;
+    }
+    
+    Item::Failed(Message,Cnf);
+ }
+                                                                       /*}}}*/
  pkgAcqMetaSig::pkgAcqMetaSig(pkgAcquire *Owner,
                             string URI,string URIDesc,string ShortDesc,
                             string MetaIndexURI, string MetaIndexURIDesc,
                             const vector<IndexTarget*>* IndexTargets,
                             indexRecords* MetaIndexParser) :
     Item(Owner), RealURI(URI), MetaIndexURI(MetaIndexURI),
 -   MetaIndexURIDesc(MetaIndexURIDesc), MetaIndexShortDesc(MetaIndexShortDesc)
 +   MetaIndexURIDesc(MetaIndexURIDesc), MetaIndexShortDesc(MetaIndexShortDesc),
 +   MetaIndexParser(MetaIndexParser), IndexTargets(IndexTargets)
  {
 -   this->MetaIndexParser = MetaIndexParser;
 -   this->IndexTargets = IndexTargets;
     DestFile = _config->FindDir("Dir::State::lists") + "partial/";
     DestFile += URItoFileName(URI);
  
 -   // remove any partial downloaded sig-file. it may confuse proxies
 -   // and is too small to warrant a partial download anyway
 +   // remove any partial downloaded sig-file in partial/. 
 +   // it may confuse proxies and is too small to warrant a 
 +   // partial download anyway
     unlink(DestFile.c_str());
  
     // Create the item
        // File was already in place.  It needs to be re-verified
        // because Release might have changed, so Move it into partial
        Rename(Final,DestFile);
 -      // unlink the file and do not try to use I-M-S and Last-Modified
 -      // if the users proxy is broken
 -      if(_config->FindB("Acquire::BrokenProxy", false) == true) {
 -       std::cerr << "forcing re-get of the signature file as requested" << std::endl;
 -       unlink(DestFile.c_str());
 -      }
     }
  
     QueueURI(Desc);
@@@ -390,24 -425,18 +419,24 @@@ void pkgAcqMetaSig::Done(string Message
                                                                        /*}}}*/
  void pkgAcqMetaSig::Failed(string Message,pkgAcquire::MethodConfig *Cnf)
  {
 -   // Delete any existing sigfile, so that this source isn't
 -   // mistakenly trusted
     string Final = _config->FindDir("Dir::State::lists") + URItoFileName(RealURI);
 -   unlink(Final.c_str());
  
 -   // if we get a timeout if fail
 -   if(LookupTag(Message,"FailReason") == "Timeout" || 
 -      LookupTag(Message,"FailReason") == "TmpResolveFailure") {
 +   // if we get a network error we fail gracefully
 +   if(Status == StatTransientNetworkError)
 +   {
        Item::Failed(Message,Cnf);
 +      // move the sigfile back on network failures (and re-authenticated?)
 +      if(FileExists(DestFile))
 +       Rename(DestFile,Final);
 +
 +      // set the status back to , Item::Failed likes to reset it
 +      Status = pkgAcquire::Item::StatTransientNetworkError;
        return;
     }
  
 +   // Delete any existing sigfile when the acquire failed
 +   unlink(Final.c_str());
 +
     // queue a pkgAcqMetaIndex with no sigfile
     new pkgAcqMetaIndex(Owner, MetaIndexURI, MetaIndexURIDesc, MetaIndexShortDesc,
                       "", IndexTargets, MetaIndexParser);
@@@ -430,9 -459,11 +459,9 @@@ pkgAcqMetaIndex::pkgAcqMetaIndex(pkgAcq
                                 string SigFile,
                                 const vector<struct IndexTarget*>* IndexTargets,
                                 indexRecords* MetaIndexParser) :
 -  Item(Owner), RealURI(URI), SigFile(SigFile)
 +   Item(Owner), RealURI(URI), SigFile(SigFile), AuthPass(false),
 +   MetaIndexParser(MetaIndexParser), IndexTargets(IndexTargets), IMSHit(false)
  {
 -   this->AuthPass = false;
 -   this->MetaIndexParser = MetaIndexParser;
 -   this->IndexTargets = IndexTargets;
     DestFile = _config->FindDir("Dir::State::lists") + "partial/";
     DestFile += URItoFileName(URI);
  
@@@ -524,9 -555,6 +553,9 @@@ void pkgAcqMetaIndex::RetrievalDone(str
        return;
     }
  
 +   // see if the download was a IMSHit
 +   IMSHit = StringToBool(LookupTag(Message,"IMS-Hit"),false);
 +
     Complete = true;
  
     string FinalFile = _config->FindDir("Dir::State::lists");
@@@ -555,7 -583,7 +584,7 @@@ void pkgAcqMetaIndex::AuthDone(string M
        return;
     }
  
 -   if (!VerifyVendor())
 +   if (!VerifyVendor(Message))
     {
        return;
     }
@@@ -613,7 -641,7 +642,7 @@@ void pkgAcqMetaIndex::QueueIndexes(boo
     }
  }
  
 -bool pkgAcqMetaIndex::VerifyVendor()
 +bool pkgAcqMetaIndex::VerifyVendor(string Message)
  {
  //    // Maybe this should be made available from above so we don't have
  //    // to read and parse it every time?
  //          break;
  //       }
  //    }
 +   string::size_type pos;
 +
 +   // check for missing sigs (that where not fatal because otherwise we had
 +   // bombed earlier)
 +   string missingkeys;
 +   string msg = _("There are no public key available for the "
 +                "following key IDs:\n");
 +   pos = Message.find("NO_PUBKEY ");
 +   if (pos != std::string::npos)
 +   {
 +      string::size_type start = pos+strlen("NO_PUBKEY ");
 +      string Fingerprint = Message.substr(start, Message.find("\n")-start);
 +      missingkeys += (Fingerprint);
 +   }
 +   if(!missingkeys.empty())
 +      _error->Warning("%s", string(msg+missingkeys).c_str());
  
     string Transformed = MetaIndexParser->GetExpectedDist();
  
        Transformed = "experimental";
     }
  
 -   string::size_type pos = Transformed.rfind('/');
 +   pos = Transformed.rfind('/');
     if (pos != string::npos)
     {
        Transformed = Transformed.substr(0, pos);
@@@ -708,30 -720,10 +737,30 @@@ void pkgAcqMetaIndex::Failed(string Mes
  {
     if (AuthPass == true)
     {
 -      // gpgv method failed
 +      // if we fail the authentication but got the file via a IMS-Hit 
 +      // this means that the file wasn't downloaded and that it might be
 +      // just stale (server problem, proxy etc). we delete what we have
 +      // queue it again without i-m-s 
 +      // alternatively we could just unlink the file and let the user try again
 +      if (IMSHit)
 +      {
 +       Complete = false;
 +       Local = false;
 +       AuthPass = false;
 +       unlink(DestFile.c_str());
 +
 +       DestFile = _config->FindDir("Dir::State::lists") + "partial/";
 +       DestFile += URItoFileName(RealURI);
 +       Desc.URI = RealURI;
 +       QueueURI(Desc);
 +       return;
 +      }
 +
 +      // gpgv method failed 
        _error->Warning("GPG error: %s: %s",
                        Desc.Description.c_str(),
                        LookupTag(Message,"Message").c_str());
 +
     }
  
     // No Release file was present, or verification failed, so fall
@@@ -807,12 -799,6 +836,12 @@@ pkgAcqArchive::pkgAcqArchive(pkgAcquir
        }
     }
  
 +   // "allow-unauthenticated" restores apts old fetching behaviour
 +   // that means that e.g. unauthenticated file:// uris are higher
 +   // priority than authenticated http:// uris
 +   if (_config->FindB("APT::Get::AllowUnauthenticated",false) == true)
 +      Trusted = false;
 +
     // Select a source
     if (QueueNext() == false && _error->PendingError() == false)
        _error->Error(_("I wasn't able to locate file for the %s package. "
@@@ -1045,19 -1031,13 +1074,19 @@@ void pkgAcqArchive::Finished(
  // ---------------------------------------------------------------------
  /* The file is added to the queue */
  pkgAcqFile::pkgAcqFile(pkgAcquire *Owner,string URI,string MD5,
 -                     unsigned long Size,string Dsc,string ShortDesc) :
 +                     unsigned long Size,string Dsc,string ShortDesc,
 +                     const string &DestDir, const string &DestFilename) :
                         Item(Owner), Md5Hash(MD5)
  {
     Retries = _config->FindI("Acquire::Retries",0);
     
 -   DestFile = flNotDir(URI);
 -   
 +   if(!DestFilename.empty())
 +      DestFile = DestFilename;
 +   else if(!DestDir.empty())
 +      DestFile = DestDir + "/" + flNotDir(URI);
 +   else
 +      DestFile = flNotDir(URI);
 +
     // Create the item
     Desc.URI = URI;
     Desc.Description = Dsc;
        else
         PartialSize = Buf.st_size;
     }
 -   
 +
     QueueURI(Desc);
  }
                                                                        /*}}}*/
diff --combined apt-pkg/acquire-item.h
index 1c83f8d2e8b8fd1ca50832b3bc1b5cef921dde81,ae2fba4d589009dd5eac12f173ee902b4b2b6911..3a0a690e1e86fe3c255619b82094b5230b08ebed
@@@ -9,8 -9,8 +9,8 @@@
     the Owner Acquire class. Derived classes will then call QueueURI to 
     register all the URI's they wish to fetch at the initial moment.   
     
-    Two item classes are provided to provide functionality for downloading
-    of Index files and downloading of Packages.
+    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
     checking and source location as well as a retry algorithm.
@@@ -48,8 -48,7 +48,8 @@@ class pkgAcquire::Ite
     public:
  
     // State of the item
 -   enum {StatIdle, StatFetching, StatDone, StatError, StatAuthError} Status;
 +   enum {StatIdle, StatFetching, StatDone, StatError, 
 +       StatAuthError, StatTransientNetworkError} Status;
     string ErrorText;
     unsigned long FileSize;
     unsigned long PartialSize;   
@@@ -108,6 -107,16 +108,16 @@@ class pkgAcqIndex : public pkgAcquire::
               string ShortDesct, string ExpectedMD5, string compressExt="");
  };
  
+ // Item class for translated package index files
+ class pkgAcqIndexTrans : public pkgAcqIndex
+ {
+    public:
+   
+    virtual void Failed(string Message,pkgAcquire::MethodConfig *Cnf);
+    pkgAcqIndexTrans(pkgAcquire *Owner,string URI,string URIDesc,
+                   string ShortDesct);
+ };
  struct IndexTarget
  {
     string URI;
@@@ -152,10 -161,8 +162,10 @@@ class pkgAcqMetaIndex : public pkgAcqui
     const vector<struct IndexTarget*>* IndexTargets;
     indexRecords* MetaIndexParser;
     bool AuthPass;
 +   // required to deal gracefully with problems caused by incorrect ims hits
 +   bool IMSHit; 
  
 -   bool VerifyVendor();
 +   bool VerifyVendor(string Message);
     void RetrievalDone(string Message);
     void AuthDone(string Message);
     void QueueIndexes(bool verify);
@@@ -227,14 -234,9 +237,14 @@@ class pkgAcqFile : public pkgAcquire::I
                     pkgAcquire::MethodConfig *Cnf);
     virtual string MD5Sum() {return Md5Hash;};
     virtual string DescURI() {return Desc.URI;};
 -   
 -   pkgAcqFile(pkgAcquire *Owner,string URI,string MD5,unsigned long Size,
 -                string Desc,string ShortDesc);
 +
 +   // If DestFilename is empty, download to DestDir/<basename> if
 +   // DestDir is non-empty, $CWD/<basename> otherwise.  If
 +   // DestFilename is NOT empty, DestDir is ignored and DestFilename
 +   // is the absolute name to which the file should be downloaded.
 +   pkgAcqFile(pkgAcquire *Owner, string URI, string MD5, unsigned long Size,
 +            string Desc, string ShortDesc,
 +            const string &DestDir="", const string &DestFilename="");
  };
  
  #endif
diff --combined apt-pkg/cacheiterators.h
index 2b326bd65884d995133b2158f04848061ab839c0,64fa4636ea27fedf612e5f1acba3f1a1eb1d43c8..d5a9c7b0db89712e79255783d808a92f9e00aade
@@@ -99,7 -99,7 +99,7 @@@ class pkgCache::VerIterato
  {
     Version *Ver;
     pkgCache *Owner;
-    
     void _dummy();
     
     public:
     // Iteration
     void operator ++(int) {if (Ver != Owner->VerP) Ver = Owner->VerP + Ver->NextVer;};
     inline void operator ++() {operator ++(0);};
 -   inline bool end() const {return Ver == Owner->VerP?true:false;};
 +   inline bool end() const {return Owner == NULL || (Ver == Owner->VerP?true:false);};
     inline void operator =(const VerIterator &B) {Ver = B.Ver; Owner = B.Owner;};
     
     // Comparison
     inline const char *Section() const {return Ver->Section == 0?0:Owner->StrP + Ver->Section;};
     inline const char *Arch() const {return Ver->Arch == 0?0:Owner->StrP + Ver->Arch;};
     inline PkgIterator ParentPkg() const {return PkgIterator(*Owner,Owner->PkgP + Ver->ParentPkg);};
+    inline DescIterator DescriptionList() const;
+    DescIterator TranslatedDescription() const;
     inline DepIterator DependsList() const;
     inline PrvIterator ProvidesList() const;
     inline VerFileIterator FileList() const;
     };
  };
  
+ // Description Iterator
+ class pkgCache::DescIterator
+ {
+    Description *Desc;
+    pkgCache *Owner;
+    
+    void _dummy();
+    
+    public:
+    // Iteration
+    void operator ++(int) {if (Desc != Owner->DescP) Desc = Owner->DescP + Desc->NextDesc;};
+    inline void operator ++() {operator ++(0);};
+    inline bool end() const {return Desc == Owner->DescP?true:false;};
+    inline void operator =(const DescIterator &B) {Desc = B.Desc; Owner = B.Owner;};
+    
+    // Comparison
+    inline bool operator ==(const DescIterator &B) const {return Desc == B.Desc;};
+    inline bool operator !=(const DescIterator &B) const {return Desc != B.Desc;};
+    int CompareDesc(const DescIterator &B) const;
+    
+    // Accessors
+    inline Description *operator ->() {return Desc;};
+    inline Description const *operator ->() const {return Desc;};
+    inline Description &operator *() {return *Desc;};
+    inline Description const &operator *() const {return *Desc;};
+    inline operator Description *() {return Desc == Owner->DescP?0:Desc;};
+    inline operator Description const *() const {return Desc == Owner->DescP?0:Desc;};
+    inline pkgCache *Cache() {return Owner;};
+       
+    inline const char *LanguageCode() const {return Owner->StrP + Desc->language_code;};
+    inline const char *md5() const {return Owner->StrP + Desc->md5sum;};
+    inline DescFileIterator FileList() const;
+    inline unsigned long Index() const {return Desc - Owner->DescP;};
+    inline DescIterator() : Desc(0), Owner(0) {};   
+    inline DescIterator(pkgCache &Owner,Description *Trg = 0) : Desc(Trg), 
+               Owner(&Owner) 
+    { 
+       if (Desc == 0)
+        Desc = Owner.DescP;
+    };
+ };
  // Dependency iterator
  class pkgCache::DepIterator
  {
@@@ -338,6 -384,38 +384,38 @@@ class pkgCache::VerFileIterato
     inline VerFileIterator(pkgCache &Owner,VerFile *Trg) : Owner(&Owner), FileP(Trg) {};
  };
  
+ // Description File 
+ class pkgCache::DescFileIterator
+ {
+    pkgCache *Owner;
+    DescFile *FileP;
+    public:
+    // Iteration
+    void operator ++(int) {if (FileP != Owner->DescFileP) FileP = Owner->DescFileP + FileP->NextFile;};
+    inline void operator ++() {operator ++(0);};
+    inline bool end() const {return FileP == Owner->DescFileP?true:false;};
+    // Comparison
+    inline bool operator ==(const DescFileIterator &B) const {return FileP == B.FileP;};
+    inline bool operator !=(const DescFileIterator &B) const {return FileP != B.FileP;};
+                          
+    // Accessors
+    inline DescFile *operator ->() {return FileP;};
+    inline DescFile const *operator ->() const {return FileP;};
+    inline DescFile const &operator *() const {return *FileP;};
+    inline operator DescFile *() {return FileP == Owner->DescFileP?0:FileP;};
+    inline operator DescFile const *() const {return FileP == Owner->DescFileP?0:FileP;};
+    inline pkgCache *Cache() {return Owner;};
+   
+    inline PkgFileIterator File() const {return PkgFileIterator(*Owner,FileP->File + Owner->PkgFileP);};
+    inline unsigned long Index() const {return FileP - Owner->DescFileP;};
+       
+    inline DescFileIterator() : Owner(0), FileP(0) {};
+    inline DescFileIterator(pkgCache &Owner,DescFile *Trg) : Owner(&Owner), FileP(Trg) {};
+ };
  // Inlined Begin functions cant be in the class because of order problems
  inline pkgCache::VerIterator pkgCache::PkgIterator::VersionList() const
         {return VerIterator(*Owner,Owner->VerP + Pkg->VersionList);};
@@@ -347,11 -425,15 +425,15 @@@ inline pkgCache::DepIterator pkgCache::
         {return DepIterator(*Owner,Owner->DepP + Pkg->RevDepends,Pkg);};
  inline pkgCache::PrvIterator pkgCache::PkgIterator::ProvidesList() const
         {return PrvIterator(*Owner,Owner->ProvideP + Pkg->ProvidesList,Pkg);};
+ inline pkgCache::DescIterator pkgCache::VerIterator::DescriptionList() const
+        {return DescIterator(*Owner,Owner->DescP + Ver->DescriptionList);};
  inline pkgCache::PrvIterator pkgCache::VerIterator::ProvidesList() const
         {return PrvIterator(*Owner,Owner->ProvideP + Ver->ProvidesList,Ver);};
  inline pkgCache::DepIterator pkgCache::VerIterator::DependsList() const
         {return DepIterator(*Owner,Owner->DepP + Ver->DependsList,Ver);};
  inline pkgCache::VerFileIterator pkgCache::VerIterator::FileList() const
         {return VerFileIterator(*Owner,Owner->VerFileP + Ver->FileList);};
+ inline pkgCache::DescFileIterator pkgCache::DescIterator::FileList() const
+        {return DescFileIterator(*Owner,Owner->DescFileP + Desc->FileList);};
  
  #endif
index d96155917df06f6f4ded17e9c1195bc7427f0145,303cb27dbce986be7f972f8ada6c992db0ffc090..37d263794b42b9c2049096068e2b3b99124371bd
  #include <regex.h>
  #include <errno.h>
  #include <stdarg.h>
+ #include <iconv.h>
  
  #include "config.h"
  
  using namespace std;
                                                                        /*}}}*/
  
+ // UTF8ToCodeset - Convert some UTF-8 string for some codeset         /*{{{*/
+ // ---------------------------------------------------------------------
+ /* This is handy to use before display some information for enduser  */
+ bool UTF8ToCodeset(const char *codeset, const string &orig, string *dest)
+ {
+   iconv_t cd;
+   const char *inbuf;
+   char *inptr, *outbuf, *outptr;
+   size_t insize, outsize;
+   
+   cd = iconv_open(codeset, "UTF-8");
+   if (cd == (iconv_t)(-1)) {
+      // Something went wrong
+      if (errno == EINVAL)
+       _error->Error("conversion from 'UTF-8' to '%s' not available",
+                codeset);
+      else
+       perror("iconv_open");
+      
+      // Clean the destination string
+      *dest = "";
+      
+      return false;
+   }
+   insize = outsize = orig.size();
+   inbuf = orig.data();
+   inptr = (char *)inbuf;
+   outbuf = new char[insize+1];
+   outptr = outbuf;
+   iconv(cd, &inptr, &insize, &outptr, &outsize);
+   *outptr = '\0';
+   *dest = outbuf;
+   delete[] outbuf;
+   
+   iconv_close(cd);
+   return true;
+ }
+                                                                       /*}}}*/
  // strstrip - Remove white space from the front and back of a string  /*{{{*/
  // ---------------------------------------------------------------------
  /* This is handy to use when parsing a file. It also removes \n's left 
@@@ -199,10 -242,10 +242,10 @@@ bool ParseCWord(const char *&String,str
  // QuoteString - Convert a string into quoted from                    /*{{{*/
  // ---------------------------------------------------------------------
  /* */
 -string QuoteString(string Str,const char *Bad)
 +string QuoteString(const string &Str, const char *Bad)
  {
     string Res;
 -   for (string::iterator I = Str.begin(); I != Str.end(); I++)
 +   for (string::const_iterator I = Str.begin(); I != Str.end(); I++)
     {
        if (strchr(Bad,*I) != 0 || isprint(*I) == 0 || 
          *I <= 0x20 || *I >= 0x7F)
  // DeQuoteString - Convert a string from quoted from                    /*{{{*/
  // ---------------------------------------------------------------------
  /* This undoes QuoteString */
 -string DeQuoteString(string Str)
 +string DeQuoteString(const string &Str)
  {
     string Res;
     for (string::const_iterator I = Str.begin(); I != Str.end(); I++)
@@@ -317,7 -360,7 +360,7 @@@ string TimeToStr(unsigned long Sec
  // SubstVar - Substitute a string for another string                  /*{{{*/
  // ---------------------------------------------------------------------
  /* This replaces all occurances of Subst with Contents in Str. */
 -string SubstVar(string Str,string Subst,string Contents)
 +string SubstVar(const string &Str,const string &Subst,const string &Contents)
  {
     string::size_type Pos = 0;
     string::size_type OldPos = 0;
@@@ -348,18 -391,21 +391,18 @@@ string SubstVar(string Str,const struc
  /* This converts a URI into a safe filename. It quotes all unsafe characters
     and converts / to _ and removes the scheme identifier. The resulting
     file name should be unique and never occur again for a different file */
 -string URItoFileName(string URI)
 +string URItoFileName(const string &URI)
  {
     // Nuke 'sensitive' items
     ::URI U(URI);
 -   U.User = string();
 -   U.Password = string();
 -   U.Access = "";
 +   U.User.clear();
 +   U.Password.clear();
 +   U.Access.clear();
     
     // "\x00-\x20{}|\\\\^\\[\\]<>\"\x7F-\xFF";
 -   URI = QuoteString(U,"\\|{}[]<>\"^~=!@#$%^&*");
 -   string::iterator J = URI.begin();
 -   for (; J != URI.end(); J++)
 -      if (*J == '/') 
 -       *J = '_';
 -   return URI;
 +   string NewURI = QuoteString(U,"\\|{}[]<>\"^~_=!@#$%^&*");
 +   replace(NewURI.begin(),NewURI.end(),'/','_');
 +   return NewURI;
  }
                                                                        /*}}}*/
  // Base64Encode - Base64 Encoding routine for short strings           /*{{{*/
     from wget and then patched and bug fixed.
   
     This spec can be found in rfc2045 */
 -string Base64Encode(string S)
 +string Base64Encode(const string &S)
  {
     // Conversion table.
     static char tbl[64] = {'A','B','C','D','E','F','G','H',
@@@ -537,17 -583,17 +580,17 @@@ int stringcasecmp(string::const_iterato
  // ---------------------------------------------------------------------
  /* The format is like those used in package files and the method 
     communication system */
 -string LookupTag(string Message,const char *Tag,const char *Default)
 +string LookupTag(const string &Message,const char *Tag,const char *Default)
  {
     // Look for a matching tag.
     int Length = strlen(Tag);
 -   for (string::iterator I = Message.begin(); I + Length < Message.end(); I++)
 +   for (string::const_iterator I = Message.begin(); I + Length < Message.end(); I++)
     {
        // Found the tag
        if (I[Length] == ':' && stringcasecmp(I,I+Length,Tag) == 0)
        {
         // Find the end of line and strip the leading/trailing spaces
 -       string::iterator J;
 +       string::const_iterator J;
         I += Length + 1;
         for (; isspace(*I) != 0 && I < Message.end(); I++);
         for (J = I; *J != '\n' && J < Message.end(); J++);
  // ---------------------------------------------------------------------
  /* This inspects the string to see if it is true or if it is false and
     then returns the result. Several varients on true/false are checked. */
 -int StringToBool(string Text,int Default)
 +int StringToBool(const string &Text,int Default)
  {
     char *End;
     int Res = strtol(Text.c_str(),&End,0);   
@@@ -735,7 -781,7 +778,7 @@@ static time_t timegm(struct tm *t
     'timegm' to convert a struct tm in UTC to a time_t. For some bizzar
     reason the C library does not provide any such function :< This also
     handles the weird, but unambiguous FTP time format*/
 -bool StrToTime(string Val,time_t &Result)
 +bool StrToTime(const string &Val,time_t &Result)
  {
     struct tm Tm;
     char Month[10];
@@@ -822,7 -868,7 +865,7 @@@ static int HexDigit(int c
  // Hex2Num - Convert a long hex number into a buffer                  /*{{{*/
  // ---------------------------------------------------------------------
  /* The length of the buffer must be exactly 1/2 the length of the string. */
 -bool Hex2Num(string Str,unsigned char *Num,unsigned int Length)
 +bool Hex2Num(const string &Str,unsigned char *Num,unsigned int Length)
  {
     if (Str.length() != Length*2)
        return false;
@@@ -983,7 -1029,7 +1026,7 @@@ char *safe_snprintf(char *Buffer,char *
  // ---------------------------------------------------------------------
  /* The domain list is a comma seperate list of domains that are suffix
     matched against the argument */
 -bool CheckDomainList(string Host,string List)
 +bool CheckDomainList(const string &Host,const string &List)
  {
     string::const_iterator Start = List.begin();
     for (string::const_iterator Cur = List.begin(); Cur <= List.end(); Cur++)
  // URI::CopyFrom - Copy from an object                                        /*{{{*/
  // ---------------------------------------------------------------------
  /* This parses the URI into all of its components */
 -void URI::CopyFrom(string U)
 +void URI::CopyFrom(const string &U)
  {
     string::const_iterator I = U.begin();
  
        SingleSlash = U.end();
  
     // We can now write the access and path specifiers
 -   Access = string(U,0,FirstColon - U.begin());
 +   Access.assign(U.begin(),FirstColon);
     if (SingleSlash != U.end())
 -      Path = string(U,SingleSlash - U.begin());
 +      Path.assign(SingleSlash,U.end());
     if (Path.empty() == true)
        Path = "/";
  
     if (At == SingleSlash)
     {
        if (FirstColon < SingleSlash)
 -       Host = string(U,FirstColon - U.begin(),SingleSlash - FirstColon);
 +       Host.assign(FirstColon,SingleSlash);
     }
     else
     {
 -      Host = string(U,At - U.begin() + 1,SingleSlash - At - 1);
 -      User = string(U,FirstColon - U.begin(),SecondColon - FirstColon);
 +      Host.assign(At+1,SingleSlash);
 +      User.assign(FirstColon,SecondColon);
        if (SecondColon < At)
 -       Password = string(U,SecondColon - U.begin() + 1,At - SecondColon - 1);
 +       Password.assign(SecondColon+1,At);
     }   
     
     // Now we parse the RFC 2732 [] hostnames.
     // Tsk, weird.
     if (InBracket == true)
     {
 -      Host = string();
 +      Host.clear();
        return;
     }
     
        return;
     
     Port = atoi(string(Host,Pos+1).c_str());
 -   Host = string(Host,0,Pos);
 +   Host.assign(Host,0,Pos);
  }
                                                                        /*}}}*/
  // URI::operator string - Convert the URI to a string                 /*{{{*/
@@@ -1168,12 -1214,12 +1211,12 @@@ URI::operator string(
  // URI::SiteOnly - Return the schema and site for the URI             /*{{{*/
  // ---------------------------------------------------------------------
  /* */
 -string URI::SiteOnly(string URI)
 +string URI::SiteOnly(const string &URI)
  {
     ::URI U(URI);
 -   U.User = string();
 -   U.Password = string();
 -   U.Path = string();
 +   U.User.clear();
 +   U.Password.clear();
 +   U.Path.clear();
     U.Port = 0;
     return U;
  }
diff --combined apt-pkg/contrib/strutl.h
index 6ec2b78119ece7a31a8085f25cfafc7a11eae845,72fc34d6d8613704f43f7ebca1b9f95c8e3c981a..254087267d74476de6b19d9f8696ae8f250d1eea
@@@ -38,29 -38,30 +38,30 @@@ using std::ostream
  #define APT_FORMAT2
  #define APT_FORMAT3
  #endif    
-     
+ bool UTF8ToCodeset(const char *codeset, const string &orig, string *dest);
  char *_strstrip(char *String);
  char *_strtabexpand(char *String,size_t Len);
  bool ParseQuoteWord(const char *&String,string &Res);
  bool ParseCWord(const char *&String,string &Res);
 -string QuoteString(string Str,const char *Bad);
 -string DeQuoteString(string Str);
 +string QuoteString(const string &Str,const char *Bad);
 +string DeQuoteString(const string &Str);
  string SizeToStr(double Bytes);
  string TimeToStr(unsigned long Sec);
 -string Base64Encode(string Str);
 -string URItoFileName(string URI);
 +string Base64Encode(const string &Str);
 +string URItoFileName(const string &URI);
  string TimeRFC1123(time_t Date);
 -bool StrToTime(string Val,time_t &Result);
 -string LookupTag(string Message,const char *Tag,const char *Default = 0);
 -int StringToBool(string Text,int Default = -1);
 +bool StrToTime(const string &Val,time_t &Result);
 +string LookupTag(const string &Message,const char *Tag,const char *Default = 0);
 +int StringToBool(const string &Text,int Default = -1);
  bool ReadMessages(int Fd, vector<string> &List);
  bool StrToNum(const char *Str,unsigned long &Res,unsigned Len,unsigned Base = 0);
 -bool Hex2Num(string Str,unsigned char *Num,unsigned int Length);
 +bool Hex2Num(const string &Str,unsigned char *Num,unsigned int Length);
  bool TokSplitString(char Tok,char *Input,char **List,
                    unsigned long ListMax);
  void ioprintf(ostream &out,const char *format,...) APT_FORMAT2;
  char *safe_snprintf(char *Buffer,char *End,const char *Format,...) APT_FORMAT3;
 -bool CheckDomainList(string Host,string List);
 +bool CheckDomainList(const string &Host, const string &List);
  
  #define APT_MKSTRCMP(name,func) \
  inline int name(const char *A,const char *AEnd,const char *B) {return func(A,AEnd,B,B+strlen(B));}; \
@@@ -101,7 -102,7 +102,7 @@@ inline const char *DeNull(const char *s
  
  class URI
  {
 -   void CopyFrom(string From);
 +   void CopyFrom(const string &From);
                 
     public:
     
     unsigned int Port;
     
     operator string();
 -   inline void operator =(string From) {CopyFrom(From);};
 +   inline void operator =(const string &From) {CopyFrom(From);};
     inline bool empty() {return Access.empty();};
 -   static string SiteOnly(string URI);
 +   static string SiteOnly(const string &URI);
     
     URI(string Path) {CopyFrom(Path);};
     URI() : Port(0) {};
@@@ -127,7 -128,7 +128,7 @@@ struct SubstVa
     const string *Contents;
  };
  string SubstVar(string Str,const struct SubstVar *Vars);
 -string SubstVar(string Str,string Subst,string Contents);
 +string SubstVar(const string &Str,const string &Subst,const string &Contents);
  
  struct RxChoiceList
  {
index d0dc7a26038df7f222b94361458b3a6ef5a2cb54,97553ab825d2dd6c0982cfd436b020c98aee4658..c2b26b5eb5322a8f4543a89bea742bf65004ef6c
@@@ -15,6 -15,7 +15,7 @@@
  #include <apt-pkg/configuration.h>
  #include <apt-pkg/strutl.h>
  #include <apt-pkg/crc-16.h>
+ #include <apt-pkg/md5.h>
  
  #include <ctype.h>
  
@@@ -117,6 -118,48 +118,48 @@@ bool debListParser::NewVersion(pkgCache
     return true;
  }
                                                                        /*}}}*/
+ // ListParser::Description - Return the description string            /*{{{*/
+ // ---------------------------------------------------------------------
+ /* This is to return the string describing the package in debian
+    form. If this returns the blank string then the entry is assumed to
+    only describe package properties */
+ string debListParser::Description()
+ {
+    if (DescriptionLanguage().empty())
+       return Section.FindS("Description");
+    else
+       return Section.FindS(("Description-" + pkgIndexFile::LanguageCode()).c_str());
+ }
+                                                                         /*}}}*/
+ // ListParser::DescriptionLanguage - Return the description lang string       /*{{{*/
+ // ---------------------------------------------------------------------
+ /* This is to return the string describing the language of
+    description. If this returns the blank string then the entry is
+    assumed to describe original description. */
+ string debListParser::DescriptionLanguage()
+ {
+    return Section.FindS("Description").empty() ? pkgIndexFile::LanguageCode() : "";
+ }
+                                                                         /*}}}*/
+ // ListParser::Description - Return the description_md5 MD5SumValue   /*{{{*/
+ // ---------------------------------------------------------------------
+ /* 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()) 
+    {
+       MD5Summation md5;
+       md5.Add((Description() + "\n").c_str());
+       return md5.Result();
+    } else
+       return MD5SumValue(value);
+ }
+                                                                         /*}}}*/
  // ListParser::UsePackage - Update a package structure                        /*{{{*/
  // ---------------------------------------------------------------------
  /* This is called to update the package with any new information 
@@@ -377,12 -420,12 +420,12 @@@ const char *debListParser::ParseDepends
        const char *End = I;
        for (; End > Start && isspace(End[-1]); End--);
        
 -      Ver = string(Start,End-Start);
 +      Ver.assign(Start,End-Start);
        I++;
     }
     else
     {
 -      Ver = string();
 +      Ver.clear();
        Op = pkgCache::Dep::NoOp;
     }
     
@@@ -504,12 -547,11 +547,12 @@@ bool debListParser::ParseProvides(pkgCa
        Start = ParseDepends(Start,Stop,Package,Version,Op);
        if (Start == 0)
         return _error->Error("Problem parsing Provides line");
 -      if (Op != pkgCache::Dep::NoOp)
 -       return _error->Error("Malformed provides line");
 -
 -      if (NewProvides(Ver,Package,Version) == false)
 -       return false;
 +      if (Op != pkgCache::Dep::NoOp) {
 +       _error->Warning("Ignoring Provides line with DepCompareOp for package %s", Package.c_str());
 +      } else {
 +       if (NewProvides(Ver,Package,Version) == false)
 +          return false;
 +      }
  
        if (Start == Stop)
         break;
index 85e5b16b328ba352315522e48313d212fb104dd0,a3fc3930255395acd3fc9de10396a71f2f93646e..8cf31b3260446d385c44ef35ecfd66da08b6e186
@@@ -157,6 -157,16 +157,16 @@@ bool debReleaseIndex::GetIndexes(pkgAcq
                     ComputeIndexTargets(),
                     new indexRecords (Dist));
  
+    // Queue the translations
+    for (vector<const debSectionEntry *>::const_iterator I = SectionEntries.begin(); 
+       I != SectionEntries.end(); I++) {
+       if((*I)->IsSrc)
+        continue;
+       debTranslationsIndex i = debTranslationsIndex(URI,Dist,(*I)->Section);
+       i.GetIndexes(Owner);
+    }
     return true;
  }
  
@@@ -165,7 -175,7 +175,7 @@@ bool debReleaseIndex::IsTrusted() cons
     string VerifiedSigFile = _config->FindDir("Dir::State::lists") +
        URItoFileName(MetaIndexURI("Release")) + ".gpg";
     
 -   if(_config->FindB("APT::Authentication::Trust-CDROM", false))
 +   if(_config->FindB("APT::Authentication::TrustCDROM", false))
        if(URI.substr(0,strlen("cdrom:")) == "cdrom:")
         return true;
     
@@@ -181,11 -191,16 +191,16 @@@ vector <pkgIndexFile *> *debReleaseInde
  
     Indexes = new vector <pkgIndexFile*>;
     for (vector<const debSectionEntry *>::const_iterator I = SectionEntries.begin(); 
-       I != SectionEntries.end(); I++)
+       I != SectionEntries.end(); I++) {
        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));
+       }
+    }
     return Indexes;
  }
  
diff --combined apt-pkg/init.cc
index a26f1d01cb8cb67e8fb66dafeb97f8cb34f8ef6c,6118845e835197cb4ee223a1acd0aec209bf087c..579a19ab9ee1c5184a608685ba57d3db2671df27
@@@ -1,6 -1,6 +1,6 @@@
  // -*- mode: cpp; mode: fold -*-
  // Description                                                                /*{{{*/
 -// $Id: init.cc,v 1.21 2004/02/27 00:46:44 mdz Exp $
 +// $Id: init.cc,v 1.20 2003/02/09 20:31:05 doogie Exp $
  /* ######################################################################
  
     Init - Initialize the package library
@@@ -40,8 -40,6 +40,8 @@@ bool pkgInitConfig(Configuration &Cnf
     else
        Cnf.Set("APT::Architecture",COMMON_OS "-" COMMON_CPU);
     Cnf.Set("APT::Build-Essential::", "build-essential");
 +   Cnf.Set("APT::Install-Recommends", false);
 +   Cnf.Set("APT::Install-Suggests", false);
     Cnf.Set("Dir","/");
     
     // State   
     // Configuration
     Cnf.Set("Dir::Etc","etc/apt/");
     Cnf.Set("Dir::Etc::sourcelist","sources.list");
 +   Cnf.Set("Dir::Etc::sourceparts","sources.list.d");
     Cnf.Set("Dir::Etc::vendorlist","vendors.list");
     Cnf.Set("Dir::Etc::vendorparts","vendors.list.d");
     Cnf.Set("Dir::Etc::main","apt.conf");
     Cnf.Set("Dir::Etc::parts","apt.conf.d");
     Cnf.Set("Dir::Etc::preferences","preferences");
     Cnf.Set("Dir::Bin::methods","/usr/lib/apt/methods");
 -            
 +   
     bool Res = true;
     
     // Read an alternate config file
        bindtextdomain(textdomain(0),Cnf.FindDir("Dir::Locale").c_str());
     }
  #endif
+    // Translation
+    Cnf.Set("APT::Acquire::Translation", "environment");
     
     return true;
  }
diff --combined apt-pkg/pkgcache.cc
index 9926befe93f56c61974442ce5e7386aef44fcaa3,4452079a2ee62cd4f067180010bee3a7a8287f4e..162ab4f279f4e3e90d7f700389eb98befeb64ec7
@@@ -26,6 -26,7 +26,7 @@@
  #endif 
  
  #include <apt-pkg/pkgcache.h>
+ #include <apt-pkg/indexfile.h>
  #include <apt-pkg/version.h>
  #include <apt-pkg/error.h>
  #include <apt-pkg/strutl.h>
@@@ -43,6 -44,7 +44,7 @@@
  
  using std::string;
  
  // Cache::Header::Header - Constructor                                        /*{{{*/
  // ---------------------------------------------------------------------
  /* Simply initialize the header */
@@@ -52,7 -54,7 +54,7 @@@ pkgCache::Header::Header(
     
     /* Whenever the structures change the major version should be bumped,
        whenever the generator changes the minor version should be bumped. */
-    MajorVersion = 4;
+    MajorVersion = 5;
     MinorVersion = 0;
     Dirty = false;
     
     PackageSz = sizeof(pkgCache::Package);
     PackageFileSz = sizeof(pkgCache::PackageFile);
     VersionSz = sizeof(pkgCache::Version);
+    DescriptionSz = sizeof(pkgCache::Description);
     DependencySz = sizeof(pkgCache::Dependency);
     ProvidesSz = sizeof(pkgCache::Provides);
     VerFileSz = sizeof(pkgCache::VerFile);
+    DescFileSz = sizeof(pkgCache::DescFile);
     
     PackageCount = 0;
     VersionCount = 0;
+    DescriptionCount = 0;
     DependsCount = 0;
     PackageFileCount = 0;
     VerFileCount = 0;
+    DescFileCount = 0;
     ProvidesCount = 0;
     MaxVerFileSize = 0;
+    MaxDescFileSize = 0;
     
     FileList = 0;
     StringList = 0;
@@@ -89,8 -96,10 +96,10 @@@ bool pkgCache::Header::CheckSizes(Heade
         PackageSz == Against.PackageSz &&
         PackageFileSz == Against.PackageFileSz &&
         VersionSz == Against.VersionSz &&
+        DescriptionSz == Against.DescriptionSz &&
         DependencySz == Against.DependencySz &&
         VerFileSz == Against.VerFileSz &&
+        DescFileSz == Against.DescFileSz &&
         ProvidesSz == Against.ProvidesSz)
        return true;
     return false;
@@@ -115,8 -124,10 +124,10 @@@ bool pkgCache::ReMap(
     HeaderP = (Header *)Map.Data();
     PkgP = (Package *)Map.Data();
     VerFileP = (VerFile *)Map.Data();
+    DescFileP = (DescFile *)Map.Data();
     PkgFileP = (PackageFile *)Map.Data();
     VerP = (Version *)Map.Data();
+    DescP = (Description *)Map.Data();
     ProvideP = (Provides *)Map.Data();
     DepP = (Dependency *)Map.Data();
     StringItemP = (StringItem *)Map.Data();
  /* This is used to generate the hash entries for the HashTable. With my
     package list from bo this function gets 94% table usage on a 512 item
     table (480 used items) */
 -unsigned long pkgCache::sHash(string Str) const
 +unsigned long pkgCache::sHash(const string &Str) const
  {
     unsigned long Hash = 0;
     for (string::const_iterator I = Str.begin(); I != Str.end(); I++)
@@@ -173,7 -184,7 +184,7 @@@ unsigned long pkgCache::sHash(const cha
  // Cache::FindPkg - Locate a package by name                          /*{{{*/
  // ---------------------------------------------------------------------
  /* Returns 0 on error, pointer to the package otherwise */
 -pkgCache::PkgIterator pkgCache::FindPkg(string Name)
 +pkgCache::PkgIterator pkgCache::FindPkg(const string &Name)
  {
     // Look at the hash bucket
     Package *Pkg = PkgP + HeaderP->HashTable[Hash(Name)];
@@@ -235,11 -246,11 +246,11 @@@ const char *pkgCache::Priority(unsigne
     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                            /*{{{*/
  // ---------------------------------------------------------------------
@@@ -599,3 -610,20 +610,20 @@@ string pkgCache::PkgFileIterator::RelSt
     return Res;
  }
                                                                        /*}}}*/
+ // VerIterator::TranslatedDescription - Return the a DescIter for locale/*{{{*/
+ // ---------------------------------------------------------------------
+ /* return a DescIter for the current locale or the default if none is 
+  * found
+  */
+ pkgCache::DescIterator pkgCache::VerIterator::TranslatedDescription() const
+ {
+    pkgCache::DescIterator DescDefault = DescriptionList();
+    pkgCache::DescIterator Desc = DescDefault;
+    for (; Desc.end() == false; Desc++)
+       if (pkgIndexFile::LanguageCode() == Desc.LanguageCode())
+        break;
+    if (Desc.end() == true) Desc = DescDefault;
+    return Desc;
+ };
+                                                                       /*}}}*/
diff --combined apt-pkg/pkgcache.h
index 587d97534436b6a30fc84bcb665d7e625a25bdf8,6a54ad5ba66afee6cf3baf609dc6b19c5592bb07..c7a3172cc0986d04f8476787332115072c4f0ac7
@@@ -38,24 -38,30 +38,30 @@@ class pkgCach
     struct Package;
     struct PackageFile;
     struct Version;
+    struct Description;
     struct Provides;
     struct Dependency;
     struct StringItem;
     struct VerFile;
+    struct DescFile;
     
     // Iterators
     class PkgIterator;
     class VerIterator;
+    class DescIterator;
     class DepIterator;
     class PrvIterator;
     class PkgFileIterator;
     class VerFileIterator;
+    class DescFileIterator;
     friend class PkgIterator;
     friend class VerIterator;
+    friend class DescInterator;
     friend class DepIterator;
     friend class PrvIterator;
     friend class PkgFileIterator;
     friend class VerFileIterator;
+    friend class DescFileIterator;
     
     class Namespace;
     
@@@ -89,7 -95,7 +95,7 @@@
     string CacheFile;
     MMap &Map;
  
 -   unsigned long sHash(string S) const;
 +   unsigned long sHash(const string &S) const;
     unsigned long sHash(const char *S) const;
     
     public:
     Header *HeaderP;
     Package *PkgP;
     VerFile *VerFileP;
+    DescFile *DescFileP;
     PackageFile *PkgFileP;
     Version *VerP;
+    Description *DescP;
     Provides *ProvideP;
     Dependency *DepP;
     StringItem *StringItemP;
     inline void *DataEnd() {return ((unsigned char *)Map.Data()) + Map.Size();};
        
     // String hashing function (512 range)
 -   inline unsigned long Hash(string S) const {return sHash(S);};
 +   inline unsigned long Hash(const string &S) const {return sHash(S);};
     inline unsigned long Hash(const char *S) const {return sHash(S);};
  
     // Usefull transformation things
     const char *Priority(unsigned char Priority);
     
     // Accessors
 -   PkgIterator FindPkg(string Name);
 +   PkgIterator FindPkg(const string &Name);
     Header &Head() {return *HeaderP;};
     inline PkgIterator PkgBegin();
     inline PkgIterator PkgEnd();
@@@ -151,16 -159,20 +159,20 @@@ struct pkgCache::Heade
     unsigned short PackageSz;
     unsigned short PackageFileSz;
     unsigned short VersionSz;
+    unsigned short DescriptionSz;
     unsigned short DependencySz;
     unsigned short ProvidesSz;
     unsigned short VerFileSz;
+    unsigned short DescFileSz;
     
     // Structure counts
     unsigned long PackageCount;
     unsigned long VersionCount;
+    unsigned long DescriptionCount;
     unsigned long DependsCount;
     unsigned long PackageFileCount;
     unsigned long VerFileCount;
+    unsigned long DescFileCount;
     unsigned long ProvidesCount;
     
     // Offsets
     map_ptrloc VerSysName;            // StringTable
     map_ptrloc Architecture;          // StringTable
     unsigned long MaxVerFileSize;
+    unsigned long MaxDescFileSize;
  
     /* Allocation pools, there should be one of these for each structure
        excluding the header */
-    DynamicMMap::Pool Pools[7];
+    DynamicMMap::Pool Pools[8];
     
     // Rapid package name lookup
     map_ptrloc HashTable[2*1048];
@@@ -193,7 -206,7 +206,7 @@@ struct pkgCache::Packag
     map_ptrloc NextPackage;       // Package
     map_ptrloc RevDepends;        // Dependency
     map_ptrloc ProvidesList;      // Provides
-    
     // Install/Remove/Purge etc
     unsigned char SelectedState;     // What
     unsigned char InstState;         // Flags
@@@ -232,6 -245,14 +245,14 @@@ struct pkgCache::VerFil
     unsigned short Size;
  };
  
+ struct pkgCache::DescFile
+ {
+    map_ptrloc File;           // PackageFile
+    map_ptrloc NextFile;       // PkgVerFile
+    map_ptrloc Offset;         // File offset
+    unsigned short Size;
+ };
  struct pkgCache::Version
  {
     map_ptrloc VerStr;            // Stringtable
     // Lists
     map_ptrloc FileList;          // VerFile
     map_ptrloc NextVer;           // Version
+    map_ptrloc DescriptionList;   // Description
     map_ptrloc DependsList;       // Dependency
     map_ptrloc ParentPkg;         // Package
     map_ptrloc ProvidesList;      // Provides
     unsigned char Priority;
  };
  
+ struct pkgCache::Description
+ {
+    // Language Code store the description translation language code. If
+    // the value has a 0 lenght then this is readed using the Package
+    // file else the Translation-CODE are used.
+    map_ptrloc language_code;     // StringTable
+    map_ptrloc md5sum;            // StringTable
+    // Linked list 
+    map_ptrloc FileList;          // DescFile
+    map_ptrloc NextDesc;          // Description
+    map_ptrloc ParentPkg;         // Package
+    unsigned short ID;
+ };
  struct pkgCache::Dependency
  {
     map_ptrloc Version;         // Stringtable
@@@ -299,11 -337,13 +337,13 @@@ class pkgCache::Namespac
  
     typedef pkgCache::PkgIterator PkgIterator;
     typedef pkgCache::VerIterator VerIterator;
+    typedef pkgCache::DescIterator DescIterator;
     typedef pkgCache::DepIterator DepIterator;
     typedef pkgCache::PrvIterator PrvIterator;
     typedef pkgCache::PkgFileIterator PkgFileIterator;
     typedef pkgCache::VerFileIterator VerFileIterator;   
     typedef pkgCache::Version Version;
+    typedef pkgCache::Description Description;
     typedef pkgCache::Package Package;
     typedef pkgCache::Header Header;
     typedef pkgCache::Dep Dep;
diff --combined apt-pkg/pkgcachegen.cc
index 4ac4d1d1c6a53a8cc9e2ac43a7e9043c757db227,1ba791b45774e583823ce9c7836a6940f3705e00..b2725a99df890d1b33793fb3234e91f98a44f1fc
@@@ -26,8 -26,6 +26,8 @@@
  #include <apt-pkg/sptr.h>
  #include <apt-pkg/pkgsystem.h>
  
 +#include <apt-pkg/tagfile.h>
 +
  #include <apti18n.h>
  
  #include <vector>
@@@ -127,16 -125,46 +127,46 @@@ bool pkgCacheGenerator::MergeList(ListP
        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) 
+                {
+                 // 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;
+              }
+           }
+        }
         continue;
        }
  
        pkgCache::VerIterator Ver = Pkg.VersionList();
-       map_ptrloc *Last = &Pkg->VersionList;
+       map_ptrloc *LastVer = &Pkg->VersionList;
        int Res = 1;
-       for (; Ver.end() == false; Last = &Ver->NextVer, Ver++)
+       for (; Ver.end() == false; LastVer = &Ver->NextVer, Ver++)
        {
         Res = Cache.VS->CmpVersion(Version,Ver.VerStr());
         if (Res >= 0)
        // Skip to the end of the same version set.
        if (Res == 0)
        {
-        for (; Ver.end() == false; Last = &Ver->NextVer, Ver++)
+        for (; Ver.end() == false; LastVer = &Ver->NextVer, Ver++)
         {
            Res = Cache.VS->CmpVersion(Version,Ver.VerStr());
            if (Res != 0)
        }
  
        // Add a new version
-       *Last = NewVersion(Ver,Version,*Last);
+       *LastVer = NewVersion(Ver,Version,*LastVer);
        Ver->ParentPkg = Pkg.Index();
        Ver->Hash = Hash;
        if (List.NewVersion(Ver) == false)
         return _error->Error(_("Error occurred while processing %s (NewVersion1)"),
                              PackageName.c_str());
         FoundFileDeps |= List.HasFileDeps();
         return true;
        }      
+       /* Record the Description data. Description data always exist in
+        Packages and Translation-* files. */
+       pkgCache::DescIterator Desc = Ver.DescriptionList();
+       map_ptrloc *LastDesc = &Ver->DescriptionList;
+       
+       // Skip to the end of description set
+       for (; Desc.end() == false; LastDesc = &Desc->NextDesc, Desc++);
+       // Add new description
+       *LastDesc = NewDescription(Desc, List.DescriptionLanguage(), List.Description_md5(), *LastDesc);
+       Desc->ParentPkg = Pkg.Index();
+       if (NewFileDesc(Desc,List) == false)
+        return _error->Error(_("Error occured while processing %s (NewFileDesc2)"),PackageName.c_str());
     }
  
     FoundFileDeps |= List.HasFileDeps();
     if (Cache.HeaderP->VersionCount >= (1ULL<<(sizeof(Cache.VerP->ID)*8))-1)
        return _error->Error(_("Wow, you exceeded the number of versions "
                             "this APT is capable of."));
+    if (Cache.HeaderP->DescriptionCount >= (1ULL<<(sizeof(Cache.DescP->ID)*8))-1)
+       return _error->Error(_("Wow, you exceeded the number of descriptions "
+                            "this APT is capable of."));
     if (Cache.HeaderP->DependsCount >= (1ULL<<(sizeof(Cache.DepP->ID)*8))-1ULL)
        return _error->Error(_("Wow, you exceeded the number of dependencies "
                             "this APT is capable of."));
@@@ -268,12 -315,12 +317,12 @@@ bool pkgCacheGenerator::MergeFileProvid
  // CacheGenerator::NewPackage - Add a new package                     /*{{{*/
  // ---------------------------------------------------------------------
  /* This creates a new package structure and adds it to the hash table */
 -bool pkgCacheGenerator::NewPackage(pkgCache::PkgIterator &Pkg,string Name)
 +bool pkgCacheGenerator::NewPackage(pkgCache::PkgIterator &Pkg,const string &Name)
  {
     Pkg = Cache.FindPkg(Name);
     if (Pkg.end() == false)
        return true;
-        
     // Get a structure
     unsigned long Package = Map.Allocate(sizeof(pkgCache::Package));
     if (Package == 0)
@@@ -332,7 -379,7 +381,7 @@@ bool pkgCacheGenerator::NewFileVer(pkgC
  // ---------------------------------------------------------------------
  /* This puts a version structure in the linked list */
  unsigned long pkgCacheGenerator::NewVersion(pkgCache::VerIterator &Ver,
 -                                          string VerStr,
 +                                          const string &VerStr,
                                            unsigned long Next)
  {
     // Get a structure
     return Version;
  }
                                                                        /*}}}*/
+ // CacheGenerator::NewFileDesc - Create a new File<->Desc association /*{{{*/
+ // ---------------------------------------------------------------------
+ /* */
+ bool pkgCacheGenerator::NewFileDesc(pkgCache::DescIterator &Desc,
+                                  ListParser &List)
+ {
+    if (CurrentFile == 0)
+       return true;
+    
+    // Get a structure
+    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();
+    
+    DF->Offset = List.Offset();
+    DF->Size = List.Size();
+    if (Cache.HeaderP->MaxDescFileSize < DF->Size)
+       Cache.HeaderP->MaxDescFileSize = DF->Size;
+    Cache.HeaderP->DescFileCount++;
+    
+    return true;
+ }
+                                                                       /*}}}*/
+ // CacheGenerator::NewDescription - Create a new Description          /*{{{*/
+ // ---------------------------------------------------------------------
+ /* This puts a description structure in the linked list */
+ map_ptrloc pkgCacheGenerator::NewDescription(pkgCache::DescIterator &Desc,
+                                           const string &Lang, const MD5SumValue &md5sum,
+                                           map_ptrloc Next)
+ {
+    // Get a structure
+    map_ptrloc Description = Map.Allocate(sizeof(pkgCache::Description));
+    if (Description == 0)
+       return 0;
+    // Fill it in
+    Desc = pkgCache::DescIterator(Cache,Cache.DescP + Description);
+    Desc->NextDesc = Next;
+    Desc->ID = Cache.HeaderP->DescriptionCount++;
+    Desc->language_code = Map.WriteString(Lang);
+    Desc->md5sum = Map.WriteString(md5sum.Value());
+    return Description;
+ }
+                                                                       /*}}}*/
  // ListParser::NewDepends - Create a dependency element                       /*{{{*/
  // ---------------------------------------------------------------------
  /* This creates a dependency element in the tree. It is linked to the
     version and to the package that it is pointing to. */
  bool pkgCacheGenerator::ListParser::NewDepends(pkgCache::VerIterator Ver,
 -                                             string PackageName,
 -                                             string Version,
 +                                             const string &PackageName,
 +                                             const string &Version,
                                               unsigned int Op,
                                               unsigned int Type)
  {
  // ---------------------------------------------------------------------
  /* */
  bool pkgCacheGenerator::ListParser::NewProvides(pkgCache::VerIterator Ver,
 -                                              string PackageName,
 -                                              string Version)
 +                                              const string &PackageName,
 +                                              const string &Version)
  {
     pkgCache &Cache = Owner->Cache;
  
  // ---------------------------------------------------------------------
  /* This is used to select which file is to be associated with all newly
     added versions. The caller is responsible for setting the IMS fields. */
 -bool pkgCacheGenerator::SelectFile(string File,string Site,
 +bool pkgCacheGenerator::SelectFile(const string &File,const string &Site,
                                   const pkgIndexFile &Index,
                                   unsigned long Flags)
  {
@@@ -545,7 -648,7 +650,7 @@@ unsigned long pkgCacheGenerator::WriteU
  /* This just verifies that each file in the list of index files exists,
     has matching attributes with the cache and the cache does not have
     any extra files. */
 -static bool CheckValidity(string CacheFile, FileIterator Start, 
 +static bool CheckValidity(const string &CacheFile, FileIterator Start, 
                            FileIterator End,MMap **OutMap = 0)
  {
     // No file, certainly invalid
      
        if ((*Start)->Exists() == false)
        {
 +#if 0 // mvo: we no longer give a message here (Default Sources spec)
         _error->WarningE("stat",_("Couldn't stat source package list %s"),
                          (*Start)->Describe().c_str());
 +#endif
         continue;
        }
  
        pkgCache::PkgFileIterator File = (*Start)->FindInCache(Cache);
        if (File.end() == true)
         return false;
-       
        Visited[File->ID] = true;
     }
     
diff --combined apt-pkg/pkgcachegen.h
index 9a729eea4f9b0689611b8cb14b541e22d8382788,6ab8594d932ef63cc9e78765f0a053a33f6dbb2a..fae1a60a6d0ab153c3e946e8a269bf5bdad33c97
@@@ -24,6 -24,7 +24,7 @@@
  #endif 
  
  #include <apt-pkg/pkgcache.h>
+ #include <apt-pkg/md5.h>
  
  class pkgSourceList;
  class OpProgress;
@@@ -53,17 -54,19 +54,19 @@@ class pkgCacheGenerato
     // Flag file dependencies
     bool FoundFileDeps;
     
 -   bool NewPackage(pkgCache::PkgIterator &Pkg,string Pkg);
 +   bool NewPackage(pkgCache::PkgIterator &Pkg,const string &Pkg);
     bool NewFileVer(pkgCache::VerIterator &Ver,ListParser &List);
 -   unsigned long NewVersion(pkgCache::VerIterator &Ver,string VerStr,unsigned long Next);
+    bool NewFileDesc(pkgCache::DescIterator &Desc,ListParser &List);
 +   unsigned long NewVersion(pkgCache::VerIterator &Ver,const string &VerStr,unsigned long Next);
+    map_ptrloc NewDescription(pkgCache::DescIterator &Desc,const string &Lang,const MD5SumValue &md5sum,map_ptrloc Next);
  
     public:
  
     unsigned long WriteUniqString(const char *S,unsigned int Size);
 -   inline unsigned long WriteUniqString(string S) {return WriteUniqString(S.c_str(),S.length());};
 +   inline unsigned long WriteUniqString(const string &S) {return WriteUniqString(S.c_str(),S.length());};
  
     void DropProgress() {Progress = 0;};
 -   bool SelectFile(string File,string Site,pkgIndexFile const &Index,
 +   bool SelectFile(const string &File,const string &Site,pkgIndexFile const &Index,
                   unsigned long Flags = 0);
     bool MergeList(ListParser &List,pkgCache::VerIterator *Ver = 0);
     inline pkgCache &GetCache() {return Cache;};
@@@ -94,13 -97,12 +97,13 @@@ class pkgCacheGenerator::ListParse
  
     inline unsigned long WriteUniqString(string S) {return Owner->WriteUniqString(S);};
     inline unsigned long WriteUniqString(const char *S,unsigned int Size) {return Owner->WriteUniqString(S,Size);};
 -   inline unsigned long WriteString(string S) {return Owner->Map.WriteString(S);};
 +   inline unsigned long WriteString(const string &S) {return Owner->Map.WriteString(S);};
     inline unsigned long WriteString(const char *S,unsigned int Size) {return Owner->Map.WriteString(S,Size);};
 -   bool NewDepends(pkgCache::VerIterator Ver,string Package,
 -                 string Version,unsigned int Op,
 +   bool NewDepends(pkgCache::VerIterator Ver,const string &Package,
 +                 const string &Version,unsigned int Op,
                   unsigned int Type);
 -   bool NewProvides(pkgCache::VerIterator Ver,string Package,string Version);
 +   bool NewProvides(pkgCache::VerIterator Ver,const string &Package,
 +                  const string &Version);
     
     public:
     
     virtual string Package() = 0;
     virtual string Version() = 0;
     virtual bool NewVersion(pkgCache::VerIterator Ver) = 0;
+    virtual string Description() = 0;
+    virtual string DescriptionLanguage() = 0;
+    virtual MD5SumValue Description_md5() = 0;
     virtual unsigned short VersionHash() = 0;
     virtual bool UsePackage(pkgCache::PkgIterator Pkg,
                           pkgCache::VerIterator Ver) = 0;
diff --combined apt-pkg/pkgrecords.cc
index 9c2655d6a774a3b452707f2f5958ec972fc3d7ed,f62f945b5b03cb8c14e9072bb6901498ca37ef91..b22f3e73fc80ccf6ffe2943529f17aaa30561102
@@@ -42,6 -42,9 +42,6 @@@ pkgRecords::pkgRecords(pkgCache &Cache
        if (Files[I->ID] == 0)
         return;
     }   
 -   // We store that to make sure that the destructor won't segfault,
 -   // even if the Cache object was destructed before this instance.
 -   PackageFileCount = Cache.HeaderP->PackageFileCount;
  }
                                                                        /*}}}*/
  // Records::~pkgRecords - Destructor                                  /*{{{*/
@@@ -49,7 -52,7 +49,7 @@@
  /* */
  pkgRecords::~pkgRecords()
  {
 -   for (unsigned I = 0; I != PackageFileCount; I++)
 +   for (unsigned I = 0; I != Cache.HeaderP->PackageFileCount; I++)
        delete Files[I];
     delete [] Files;
  }
@@@ -63,3 -66,12 +63,12 @@@ pkgRecords::Parser &pkgRecords::Lookup(
     return *Files[Ver.File()->ID];
  }
                                                                        /*}}}*/
+ // Records::Lookup - Get a parser for the package description file    /*{{{*/
+ // ---------------------------------------------------------------------
+ /* */
+ pkgRecords::Parser &pkgRecords::Lookup(pkgCache::DescFileIterator const &Desc)
+ {
+    Files[Desc.File()->ID]->Jump(Desc);
+    return *Files[Desc.File()->ID];
+ }
+                                                                       /*}}}*/
diff --combined apt-pkg/pkgrecords.h
index 08f00441463e428da12e6268c9123a5116742f55,ece91680e518e3daf3b86cd912ded17c35bc7128..31c444dbf9c82becf1cdde4fbf94be5eea74d890
@@@ -33,11 -33,13 +33,12 @@@ class pkgRecord
     
     pkgCache &Cache;
     Parser **Files;
 -   int PackageFileCount;
        
     public:
  
     // Lookup function
     Parser &Lookup(pkgCache::VerFileIterator const &Ver);
+    Parser &Lookup(pkgCache::DescFileIterator const &Desc);
  
     // Construct destruct
     pkgRecords(pkgCache &Cache);
@@@ -49,6 -51,7 +50,7 @@@ class pkgRecords::Parse
     protected:
     
     virtual bool Jump(pkgCache::VerFileIterator const &Ver) = 0;
+    virtual bool Jump(pkgCache::DescFileIterator const &Desc) = 0;
     
     public:
     friend class pkgRecords;
diff --combined cmdline/apt-cache.cc
index aea9ebeba178f18946f656a0f2166610be076664,cb1aeb514f4184ffb55479765bc89e62da27c8c9..74fa71cbad37bfa9cec587dd3db18ee438adb29b
@@@ -71,6 -71,12 +71,12 @@@ void LocalitySort(pkgCache::VerFile **b
  {   
     qsort(begin,Count,Size,LocalityCompare);
  }
+ void LocalitySort(pkgCache::DescFile **begin,
+                 unsigned long Count,size_t Size)
+ {   
+    qsort(begin,Count,Size,LocalityCompare);
+ }
                                                                        /*}}}*/
  // UnMet - Show unmet dependencies                                    /*{{{*/
  // ---------------------------------------------------------------------
@@@ -182,7 -188,14 +188,14 @@@ bool DumpPackage(CommandLine &CmdL
        {
         cout << Cur.VerStr();
         for (pkgCache::VerFileIterator Vf = Cur.FileList(); Vf.end() == false; Vf++)
-           cout << "(" << Vf.File().FileName() << ")";
+           cout << " (" << Vf.File().FileName() << ")";
+        cout << endl;
+        for (pkgCache::DescIterator D = Cur.DescriptionList(); D.end() == false; D++)
+        {
+           cout << " Description Language: " << D.LanguageCode() << endl
+                << "                 File: " << D.FileList().File().FileName() << endl
+                << "                  MD5: " << D.md5() << endl;
+        }
         cout << endl;
        }
        
@@@ -277,11 -290,15 +290,15 @@@ bool Stats(CommandLine &Cmd
     
     cout << _("Total distinct versions: ") << Cache.Head().VersionCount << " (" <<
        SizeToStr(Cache.Head().VersionCount*Cache.Head().VersionSz) << ')' << endl;
+    cout << _("Total Distinct Descriptions: ") << Cache.Head().DescriptionCount << " (" <<
+       SizeToStr(Cache.Head().DescriptionCount*Cache.Head().DescriptionSz) << ')' << endl;
     cout << _("Total dependencies: ") << Cache.Head().DependsCount << " (" << 
        SizeToStr(Cache.Head().DependsCount*Cache.Head().DependencySz) << ')' << endl;
     
     cout << _("Total ver/file relations: ") << Cache.Head().VerFileCount << " (" <<
        SizeToStr(Cache.Head().VerFileCount*Cache.Head().VerFileSz) << ')' << endl;
+    cout << _("Total Desc/File relations: ") << Cache.Head().DescFileCount << " (" <<
+       SizeToStr(Cache.Head().DescFileCount*Cache.Head().DescFileSz) << ')' << endl;
     cout << _("Total Provides mappings: ") << Cache.Head().ProvidesCount << " (" <<
        SizeToStr(Cache.Head().ProvidesCount*Cache.Head().ProvidesSz) << ')' << endl;
     
@@@ -344,6 -361,12 +361,12 @@@ bool Dump(CommandLine &Cmd
         for (pkgCache::DepIterator D = V.DependsList(); D.end() == false; D++)
            cout << "  Depends: " << D.TargetPkg().Name() << ' ' << 
                             DeNull(D.TargetVer()) << endl;
+        for (pkgCache::DescIterator D = V.DescriptionList(); D.end() == false; D++)
+        {
+           cout << " Description Language: " << D.LanguageCode() << endl
+                << "                 File: " << D.FileList().File().FileName() << endl
+                << "                  MD5: " << D.md5() << endl;
+        } 
        }      
     }
  
@@@ -1192,17 -1215,50 +1215,50 @@@ bool DisplayRecord(pkgCache::VerIterato
     if (_error->PendingError() == true)
        return false;
     
-    // Read the record and then write it out again.
+    // Read the record
     unsigned char *Buffer = new unsigned char[GCache->HeaderP->MaxVerFileSize+1];
     Buffer[V.FileList()->Size] = '\n';
     if (PkgF.Seek(V.FileList()->Offset) == false ||
-        PkgF.Read(Buffer,V.FileList()->Size) == false ||
-        fwrite(Buffer,1,V.FileList()->Size+1,stdout) < (size_t)(V.FileList()->Size+1))
+        PkgF.Read(Buffer,V.FileList()->Size) == false)
     {
        delete [] Buffer;
        return false;
     }
-    
+    // Get a pointer to start of Description field
+    const unsigned char *DescP = (unsigned char*)strstr((char*)Buffer, "Description:");
+    // Write all but Description
+    if (fwrite(Buffer,1,DescP - Buffer,stdout) < (size_t)(DescP - Buffer))
+    {
+       delete [] Buffer;
+       return false;
+    }
+    // Show the right description
+    pkgRecords Recs(*GCache);
+    pkgCache::DescIterator Desc = V.TranslatedDescription();
+    pkgRecords::Parser &P = Recs.Lookup(Desc.FileList());
+    cout << "Description" << ( (strcmp(Desc.LanguageCode(),"") != 0) ? "-" : "" ) << Desc.LanguageCode() << ": " << P.LongDesc();
+    // Find the first field after the description (if there is any)
+    for(DescP++;DescP != &Buffer[V.FileList()->Size];DescP++) 
+    {
+       if(*DescP == '\n' && *(DescP+1) != ' ') 
+       {
+        // write the rest of the buffer
+        const unsigned char *end=&Buffer[V.FileList()->Size];
+        if (fwrite(DescP,1,end-DescP,stdout) < (size_t)(end-DescP)) 
+        {
+           delete [] Buffer;
+           return false;
+        }
+        break;
+       }
+    }
+    // write a final newline (after the description)
+    cout<<endl;
     delete [] Buffer;
  
     return true;
  // Search - Perform a search                                          /*{{{*/
  // ---------------------------------------------------------------------
  /* This searches the package names and pacakge descriptions for a pattern */
- struct ExVerFile
+ struct ExDescFile
  {
-    pkgCache::VerFile *Vf;
+    pkgCache::DescFile *Df;
     bool NameMatch;
  };
  
@@@ -1253,35 -1309,35 +1309,35 @@@ bool Search(CommandLine &CmdL
        return false;
     }
     
-    ExVerFile *VFList = new ExVerFile[Cache.HeaderP->PackageCount+1];
-    memset(VFList,0,sizeof(*VFList)*Cache.HeaderP->PackageCount+1);
+    ExDescFile *DFList = new ExDescFile[Cache.HeaderP->PackageCount+1];
+    memset(DFList,0,sizeof(*DFList)*Cache.HeaderP->PackageCount+1);
  
     // Map versions that we want to write out onto the VerList array.
     for (pkgCache::PkgIterator P = Cache.PkgBegin(); P.end() == false; P++)
     {
-       VFList[P->ID].NameMatch = NumPatterns != 0;
+       DFList[P->ID].NameMatch = NumPatterns != 0;
        for (unsigned I = 0; I != NumPatterns; I++)
        {
         if (regexec(&Patterns[I],P.Name(),0,0,0) == 0)
-           VFList[P->ID].NameMatch &= true;
+           DFList[P->ID].NameMatch &= true;
         else
-           VFList[P->ID].NameMatch = false;
+           DFList[P->ID].NameMatch = false;
        }
          
        // Doing names only, drop any that dont match..
-       if (NamesOnly == true && VFList[P->ID].NameMatch == false)
+       if (NamesOnly == true && DFList[P->ID].NameMatch == false)
         continue;
         
        // Find the proper version to use. 
        pkgCache::VerIterator V = Plcy.GetCandidateVer(P);
        if (V.end() == false)
-        VFList[P->ID].Vf = V.FileList();
+        DFList[P->ID].Df = V.DescriptionList().FileList();
     }
        
     // Include all the packages that provide matching names too
     for (pkgCache::PkgIterator P = Cache.PkgBegin(); P.end() == false; P++)
     {
-       if (VFList[P->ID].NameMatch == false)
+       if (DFList[P->ID].NameMatch == false)
         continue;
  
        for (pkgCache::PrvIterator Prv = P.ProvidesList() ; Prv.end() == false; Prv++)
         pkgCache::VerIterator V = Plcy.GetCandidateVer(Prv.OwnerPkg());
         if (V.end() == false)
         {
-           VFList[Prv.OwnerPkg()->ID].Vf = V.FileList();
-           VFList[Prv.OwnerPkg()->ID].NameMatch = true;
+           DFList[Prv.OwnerPkg()->ID].Df = V.DescriptionList().FileList();
+           DFList[Prv.OwnerPkg()->ID].NameMatch = true;
         }
        }
     }
-    LocalitySort(&VFList->Vf,Cache.HeaderP->PackageCount,sizeof(*VFList));
+    
+    LocalitySort(&DFList->Df,Cache.HeaderP->PackageCount,sizeof(*DFList));
  
     // Iterate over all the version records and check them
-    for (ExVerFile *J = VFList; J->Vf != 0; J++)
+    for (ExDescFile *J = DFList; J->Df != 0; J++)
     {
-       pkgRecords::Parser &P = Recs.Lookup(pkgCache::VerFileIterator(Cache,J->Vf));
+       pkgRecords::Parser &P = Recs.Lookup(pkgCache::DescFileIterator(Cache,J->Df));
  
        bool Match = true;
        if (J->NameMatch == false)
        }
     }
     
-    delete [] VFList;
+    delete [] DFList;
     for (unsigned I = 0; I != NumPatterns; I++)
        regfree(&Patterns[I]);
     if (ferror(stdout))
@@@ -1574,11 -1630,10 +1630,11 @@@ bool Madison(CommandLine &CmdL
  
     pkgCache &Cache = *GCache;
  
 -   // Create the text record parsers
 +   // Create the src text record parsers and ignore errors about missing
 +   // deb-src lines that are generated from pkgSrcRecords::pkgSrcRecords
     pkgSrcRecords SrcRecs(*SrcList);
     if (_error->PendingError() == true)
 -      return false;
 +      _error->Discard();
  
     for (const char **I = CmdL.FileList + 1; *I != 0; I++)
     {
diff --combined configure.in
index aa9abc1e6c2ccbb94c97f8b0bfc2a8d7b5a4253a,87dac8e47e7c4741a8f02815b351885513f60232..d9134f4b1b1b9577885e544c95e041db74de8058
@@@ -18,7 -18,7 +18,7 @@@ AC_CONFIG_AUX_DIR(buildlib
  AC_CONFIG_HEADER(include/config.h:buildlib/config.h.in include/apti18n.h:buildlib/apti18n.h.in)
  
  dnl -- SET THIS TO THE RELEASE VERSION --
- AC_DEFINE_UNQUOTED(VERSION,"0.6.45ubuntu2")
 -AC_DEFINE_UNQUOTED(VERSION,"0.6.41.1")
++AC_DEFINE_UNQUOTED(VERSION,"0.6.45ubuntu3")
  PACKAGE="apt"
  AC_DEFINE_UNQUOTED(PACKAGE,"$PACKAGE")
  AC_SUBST(PACKAGE)
@@@ -192,7 -192,7 +192,7 @@@ ah_GCC3DE
  dnl It used to be that the user could select translations and that could get
  dnl passed to the makefiles, but now that can only work if you use special
  dnl gettext approved makefiles, so this feature is unsupported by this.
 -ALL_LINGUAS="da de en_GB es fr hu it nl no_NO pl pt_BR ru sv zh_TW"
 +ALL_LINGUAS="bg bs ca cs cy da de dz el en_GB es eu fi fr gl hu it ja ko nb nl nn pl pt_BR pt ro ru sk sl sv tl vi zn_CN zh_TW"
  AM_GNU_GETTEXT(external)
  if test x"$USE_NLS" = "xyes"; then
     AC_DEFINE(USE_NLS)
diff --combined debian/changelog
index 9469719066f792cdbe01fdbcb4963d63d58871ec,0e85b511793c5e3815388673fe1440ad71606052..16678d805ebdf4d5ba2e17fae60e9c60890c63e2
-  --
 +apt (0.6.45ubuntu3) edgy; urgency=low
 +
 +  * ABI break
 +  * merged latest apt--install-recommends
 +  * added "--fix-policy" option to can be used as "--fix-broken" and
 +    will install missing weak depends (recommends, and/or suggests 
 +    depending on the settings)
++  * merged the apt--ddtp branch
 +
++ -- Michael Vogt <michael.vogt@ubuntu.com>  Fri, 11 Aug 2006 12:53:23 +0200
 +
 +apt (0.6.45ubuntu2) edgy; urgency=low
 +
 +  * debian/control:
 +    - switched to libdb4.4 for building (closes: #381019)
 +  * cmdline/apt-get.cc:
 +    - show only the recommends/suggests for the candidate-version, not for all
 +      versions of the package (closes: #257054)
 +    - properly handle recommends/suggests or-groups when printing the list of
 +      suggested/recommends packages (closes: #311619)
 +  * merged "apt--install-recommends" branch:
 +    - added "{no-}install-recommends" commandline option
 +    - added APT::Install-{Recommends,Suggests} option
 +    - currently Install-Recommends defaults to "False" 
 +
 + -- Michael Vogt <michael.vogt@ubuntu.com>  Wed,  9 Aug 2006 23:38:46 +0200
 +
 +apt (0.6.45ubuntu1) edgy; urgency=low
 +
 +  * merged with debian/unstable
 +
 + -- Michael Vogt <michael.vogt@ubuntu.com>  Tue,  1 Aug 2006 15:43:22 +0200
 +
 +apt (0.6.45) unstable; urgency=low
 +
 +  * apt-pkg/contrib/sha256.cc:
 +    - fixed the sha256 generation (closes: #378183)
 +  * ftparchive/cachedb.cc:
 +    - applied patch from Anthony Towns to fix Clean() function
 +      (closes: #379576)
 +  * doc/apt-get.8.xml:
 +    - fix path to the apt user build (Closes: #375640)
 +  * doc/apt-cache.8.xml:
 +    - typo (Closes: #376408)
 +  * apt-pkg/deb/dpkgpm.cc:
 +    - make progress reporting more robust against multiline error
 +      messages (first half of a fix for #374195)
 +  * doc/examples/configure-index:
 +    - document Debug::pkgAcquire::Auth     
 +  * methods/gpgv.cc:
 +    - deal with gpg error "NODATA". Closes: #296103, Thanks to 
 +      Luis Rodrigo Gallardo Cruz for the patch
 +  * apt-inst/contrib/extracttar.cc:
 +    - fix for string mangling, closes: #373864
 +  * apt-pkg/acquire-item.cc:
 +    - check for bzip2 in /bin (closes: #377391)
 +  * apt-pkg/tagfile.cc:
 +    - make it work on non-mapable files again, thanks 
 +      to James Troup for confirming the fix (closes: #376777)
 +  * Merged from Christian Perrier bzr branch:
 +    * ko.po: Updated to 512t. Closes: #378901
 +    * hu.po: Updated to 512t. Closes: #376330
 +    * km.po: New Khmer translation: 506t6f. Closes: #375068
 +    * ne.po: New Nepali translation: 512t. Closes: #373729
 +    * vi.po: Updated to 512t. Closes: #368038
 +    * zh_TW.po: Remove an extra %s in one string. Closes: #370551
 +    * dz.po: New Dzongkha translation: 512t
 +    * ro.po: Updated to 512t
 +    * eu.po: Updated
 +
 + -- Michael Vogt <mvo@debian.org>  Thu, 27 Jul 2006 00:52:05 +0200
 +
 +apt (0.6.44.2ubuntu4) edgy; urgency=low
 +
 +  * Make apt-get dselect-upgrade happy again
 +
 + -- Michael Vogt <michael.vogt@ubuntu.com>  Fri, 21 Jul 2006 11:03:02 +0200
 +
 +apt (0.6.44.2ubuntu3) edgy; urgency=low
 +
 +  * Close extended_states file after writing it.
 +
 + -- Colin Watson <cjwatson@ubuntu.com>  Tue, 18 Jul 2006 00:12:13 +0100
 +
 +apt (0.6.44.2ubuntu2) edgy; urgency=low
 +
 +  * create a empty extended_states file if none exists already
 +
 + -- Michael Vogt <michael.vogt@ubuntu.com>  Tue,  4 Jul 2006 09:23:03 +0200
 +
 +apt (0.6.44.2ubuntu1) edgy; urgency=low
 +
 +  * merged with debian/unstable
 +  * merged the "auto-mark" branch to support aptitude like
 +    marking of automatically installed dependencies and added
 +    "apt-get remove --auto-remove" to remove unused auto-installed
 +    packages again
 +  * changed library version from 3.11 to 3.50 to make it clearly 
 +    different from the debian version (we are ABI incompatible because
 +    of the auto-mark patch)
 +
 + -- Michael Vogt <michael.vogt@ubuntu.com>  Mon,  3 Jul 2006 18:30:46 +0200
 +
 +apt  (0.6.44.2) unstable; urgency=low
 +  
 +   * apt-pkg/depcache.cc:
 +     - added Debug::pkgDepCache::AutoInstall (thanks to infinity)
 +   * apt-pkg/acquire-item.cc:
 +     - fix missing chmod() in the new aquire code
 +       (thanks to Bastian Blank, Closes: #367425)
 +   * merged from
 +     http://www.perrier.eu.org/debian/packages/d-i/level4/apt-main:
 +     * sk.po: Completed to 512t
 +     * eu.po: Completed to 512t
 +     * fr.po: Completed to 512t
 +     * sv.po: Completed to 512t
 +     * Update all PO and the POT. Gives 506t6f for formerly
 +       complete translations
 +
 + -- Michael Vogt <mvo@debian.org>  Wed, 14 Jun 2006 12:00:57 +0200 
 +
 +apt (0.6.44.1-0.1) unstable; urgency=low
 +
 +  * Non-maintainer upload.
 +  * Don't give an error when parsing empty Packages/Sources files.
 +    (Closes: #366931, #367086, #370160)
 +
 + -- Steinar H. Gunderson <sesse@debian.org>  Fri,  9 Jun 2006 00:52:21 +0200
 +
 +apt (0.6.44.1) unstable; urgency=low
 +
 +  * merged from 
 +    http://www.perrier.eu.org/debian/packages/d-i/level4/apt-main:
 +    - po/LINGUAS: added "bg" Closes: #360262
 +    - po/gl.po: Galician translation update. Closes: #366849
 +    - po/hu.po: Hungarian translation update. Closes: #365448
 +    - po/cs.po: Czech translation updated. Closes: #367244
 +
 + -- Michael Vogt <mvo@debian.org>  Tue, 16 May 2006 21:51:16 +0200
 +
 +apt (0.6.44) unstable; urgency=low
 +
 +  * apt-pkg/acquire.cc: don't show ETA if it is 0 or absurdely large
 +  * apt-pkg/deb/dpkgpm.cc: 
 +    - wording fixes (thanks to Matt Zimmerman)
 +    - fix error in dpkg interaction (closes: #364513, 
 +      thanks to Martin Dickopp)
 +  * apt-pkg/tagfile.{cc,h}:
 +    - use MMap to read the entries (thanks to Zephaniah E. Hull for the
 +      patch) Closes: #350025
 +  * Merge from http://www.perrier.eu.org/debian/packages/d-i/level4/apt-main:
 +      * bg.po: Added, complete to 512t. Closes: #360262
 +  * doc/apt-ftparchive.1.xml:
 +    - fix documentation for "SrcPackages" -> "Sources" 
 +      (thanks to Bart Martens for the patch, closes: #307756)
 +  * debian/libapt-pkg-doc.doc-base.cache:
 +    - remove broken charackter from description (closes: #361129)
 +  * apt-inst/deb/dpkgdb.cc, methods/gpgv.cc: 
 +    - i18n fixes (closes: #349298)
 +  * debian/postinst: dont fail on not available
 +    /usr/share/doc/apt/examples/sources.list (closes: #361130)
 +  * methods/ftp.cc:
 +    - unlink empty file in partial if the download failed because
 +      the file is missing on the server (closes: #316337)
 +  * apt-pkg/deb/debversion.cc:
 +    - treats a version string with explicit zero epoch equal
 +      than the same without epoch (Policy 5.6.12, closes: #363358)
 +      Thanks to Lionel Elie Mamane for the patch
 +  
 + -- Michael Vogt <mvo@debian.org>  Mon,  8 May 2006 22:28:53 +0200
 +
 +apt (0.6.43.3ubuntu3) dapper; urgency=low
 +
 +  * methods/http.cc:
 +    - fix the user-agent string
 +
 + -- Michael Vogt <michael.vogt@ubuntu.com>  Fri, 26 May 2006 18:09:32 +0200
 +
 +apt (0.6.43.3ubuntu2) dapper; urgency=low
 +
 +  * apt-pkg/deb/dpkgpm.cc: wording fixes (thanks to Matt Zimmerman)
 +
 + -- Michael Vogt <michael.vogt@ubuntu.com>  Tue, 18 Apr 2006 13:24:40 +0200
 +
 +apt (0.6.43.3ubuntu1) dapper; urgency=low
 +
 +  * apt-pkg/acquire.cc: don't show ETA if it is 0 or absurdely large in 
 +    the status-fd (ubuntu #28954)
 +
 + -- Michael Vogt <michael.vogt@ubuntu.com>  Tue, 28 Mar 2006 20:34:46 +0200
 +
 +apt (0.6.43.3) unstable; urgency=low
 +
 +  * Merge bubulle@debian.org--2005/apt--main--0 up to patch-186:
 +    * ca.po: Completed to 512t. Closes: #351592
 +    * eu.po: Completed to 512t. Closes: #350483
 +    * ja.po: Completed to 512t. Closes: #349806
 +    * pl.po: Completed to 512t. Closes: #349514
 +    * sk.po: Completed to 512t. Closes: #349474
 +    * gl.po: Completed to 512 strings Closes: #349407
 +    * vi.po: Completed to 512 strings
 +    * sv.po: Completed to 512 strings Closes: #349210
 +    * ru.po: Completed to 512 strings Closes: #349154
 +    * da.po: Completed to 512 strings Closes: #349084
 +    * fr.po: Completed to 512 strings
 +    * LINGUAS: Add Welsh
 +    * *.po: Updated from sources (512 strings)
 +    * vi.po: Completed to 511 strings  Closes: #348968
 +  * apt-pkg/deb/deblistparser.cc:
 +    - don't explode on a DepCompareOp in a Provides line, but warn about
 +      it and ignore it otherwise (thanks to James Troup for reporting it)
 +  * cmdline/apt-get.cc:
 +    - don't lock the lists directory in DoInstall, breaks --print-uri 
 +      (thanks to James Troup for reporting it)
 +  * debian/apt.dirs: create /etc/apt/sources.list.d 
 +  * make apt-cache madison work without deb-src entries (#352583)
 +  * cmdline/apt-get.cc: only run the list-cleaner if a update was 
 +    successfull
 +  * apt-get update errors are only warnings nowdays
 +  * be more careful with the signature file on network failures
 +
 + --  Michael Vogt <mvo@debian.org>  Wed, 22 Feb 2006 10:13:04 +0100
 +
 +apt (0.6.43.2ubuntu1) dapper; urgency=low
 +
 +  * Merge bubulle@debian.org--2005/apt--main--0 up to patch-182:
 +  * ca.po: Completed to 512t. Closes: #351592
 +    * eu.po: Completed to 512t. Closes: #350483
 +    * ja.po: Completed to 512t. Closes: #349806
 +    * pl.po: Completed to 512t. Closes: #349514
 +    * sk.po: Completed to 512t. Closes: #349474
 +    * gl.po: Completed to 512 strings Closes: #349407
 +    * vi.po: Completed to 512 strings
 +    * sv.po: Completed to 512 strings Closes: #349210
 +    * ru.po: Completed to 512 strings Closes: #349154
 +    * da.po: Completed to 512 strings Closes: #349084
 +    * fr.po: Completed to 512 strings
 +    * LINGUAS: Add Welsh
 +    * *.po: Updated from sources (512 strings)
 +    * vi.po: Completed to 511 strings  Closes: #348968
 +  * apt-pkg/deb/deblistparser.cc:
 +    - don't explode on a DepCompareOp in a Provides line, but warn about
 +      it and ignore it otherwise (thanks to James Troup for reporting it)
 +  * cmdline/apt-get.cc:
 +    - don't lock the lists directory in DoInstall, breaks --print-uri 
 +      (thanks to James Troup for reporting it)
 +  * debian/apt.dirs: create /etc/apt/sources.list.d 
 +  * make apt-cache madison work without deb-src entries (#352583)
 +  * cmdline/apt-get.cc: only run the list-cleaner if a update was 
 +    successfull
 +  * apt-get update errors are only warnings nowdays
 +  * be more careful with the signature file on network failures
 +
 + -- Michael Vogt <michael.vogt@ubuntu.com>  Mon, 20 Feb 2006 22:27:48 +0100
 +
 +apt (0.6.43.2) unstable; urgency=low
 +
 +  * Merge bubulle@debian.org--2005/apt--main--0 up to patch-166:
 +    - en_GB.po, de.po: fix spaces errors in "Ign " translations Closes: #347258
 +    - makefile: make update-po a pre-requisite of clean target so
 +              that POT and PO files are always up-to-date
 +    - sv.po: Completed to 511t. Closes: #346450
 +    - sk.po: Completed to 511t. Closes: #346369
 +    - fr.po: Completed to 511t
 +    - *.po: Updated from sources (511 strings)
 +    - el.po: Completed to 511 strings Closes: #344642
 +    - da.po: Completed to 511 strings Closes: #348574
 +    - es.po: Updated to 510t1f Closes: #348158
 +    - gl.po: Completed to 511 strings Closes: #347729
 +    - it.po: Yet another update Closes: #347435
 +  * added debian-archive-keyring to the Recommends (closes: #347970)
 +  * fixed message in apt-key to install debian-archive-keyring 
 +  * typos fixed in apt-cache.8 (closes: #348348, #347349)
 +  * add patch to fix http download corruption problem (thanks to
 +    Petr Vandrovec, closes: #280844, #290694)
 +
 + -- Michael Vogt <mvo@debian.org>  Thu, 19 Jan 2006 00:06:33 +0100
 +
 +apt (0.6.43.1ubuntu1) dapper; urgency=low
 +
 +  * Merge bubulle@debian.org--2005/apt--main--0 up to patch-159:
 +    - en_GB.po, de.po: fix spaces errors in "Ign " translations
 +      Closes: #347258
 +    - makefile: make update-po a pre-requisite of clean target so
 +              that POT and PO files are always up-to-date
 +    - sv.po: Completed to 511t. Closes: #346450
 +    - sk.po: Completed to 511t. Closes: #346369
 +    - fr.po: Completed to 511t
 +    - *.po: Updated from sources (511 strings)
 +  * add patch to fix http download corruption problem (thanks to
 +    Petr Vandrovec, closes: #280844, #290694)
 +  * added APT::Periodic::Unattended-Upgrade (requires the package
 +    "unattended-upgrade")
 +
 + -- Michael Vogt <michael.vogt@ubuntu.com>  Tue, 10 Jan 2006 17:09:31 +0100
 +
 +apt (0.6.43.1) unstable; urgency=low
 +  
 +  * Merge bubulle@debian.org--2005/apt--main--0 up to patch-148:
 +    * fr.po: Completed to 510 strings
 +    * it.po: Completed to 510t
 +    * en_GB.po: Completed to 510t
 +    * cs.po: Completed to 510t
 +    * zh_CN.po: Completed to 510t
 +    * el.po: Updated to 510t
 +    * vi.po: Updated to 383t93f34u
 +    * tl.po: Completed to 510 strings (Closes: #344306)
 +    * sv.po: Completed to 510 strings (Closes: #344056)
 +    * LINGUAS: disabled Hebrew translation. (Closes: #313283)
 +    * eu.po: Completed to 510 strings (Closes: #342091)
 +  * apt-get source won't download already downloaded files again
 +    (closes: #79277)
 +  * share/debian-archive.gpg: new 2006 ftp-archive signing key added
 +    (#345891)
 +  * redownload the Release file if IMS-Hit and gpg failure
 +  * deal with multiple signatures on a Release file
 +
 + -- Michael Vogt <mvo@debian.org>  Fri,  6 Jan 2006 01:17:08 +0100
 +
 +apt (0.6.43ubuntu2) dapper; urgency=low
 +
 +  * merged some missing bits that wheren't merged by baz in the previous
 +    upload (*grumble*)
 +
 + -- Michael Vogt <michael.vogt@ubuntu.com>  Thu,  8 Dec 2005 18:35:58 +0100
 +
 +apt (0.6.43ubuntu1) dapper; urgency=low
 +
 +  * merged with debian
 +
 + -- Michael Vogt <michael.vogt@ubuntu.com>  Fri, 25 Nov 2005 11:36:29 +0100
 +
 +apt (0.6.43) unstable; urgency=medium
 +
 +  * Merge bubulle@debian.org--2005/apt--main--0 up to patch-132:  
 +    * zh_CN.po: Completed to 510 strings(Closes: #338267)
 +    * gl.po: Completed to 510 strings (Closes: #338356)
 +  * added support for "/etc/apt/sources.list.d" directory 
 +    (closes: #66325)
 +  * make pkgDirStream (a bit) more complete
 +  * fix bug in pkgCache::VerIterator::end() (thanks to Daniel Burrows)
 +    (closes: #339533)
 +  * pkgAcqFile is more flexible now (closes: #57091)
 +  * support a download rate limit for http (closes: #146877)
 +  * included lots of the speedup changes from #319377
 +  * add stdint.h to contrib/md5.h (closes: #340448)
 +  * ABI change, library name changed (closes: #339147)
 +  * Fix GNU/kFreeBSD crash on non-existing server file (closes: #317718)
 +  * switch to libdb4.3 in build-depends
 +  
 + -- Michael Vogt <mvo@debian.org>  Tue, 29 Nov 2005 00:17:07 +0100
 +
 +apt (0.6.42.3ubuntu2) dapper; urgency=low
 +
 +  * Merge bubulle@debian.org--2005/apt--main--0 up to patch-131:  
 +    * zh_CN.po: Completed to 507 strings(Closes: #338267)
 +    * gl.po: Completed to 510 strings (Closes: #338356)
 +  * added support for "/etc/apt/sources.list.d" directory 
 +    (closes: #66325)
 +  
 + -- Michael Vogt <michael.vogt@ubuntu.com>  Mon, 14 Nov 2005 15:30:12 +0100
 +
 +apt (0.6.42.3ubuntu1) dapper; urgency=low
 +
 +  * synced with debian
 +
 + -- Michael Vogt <michael.vogt@ubuntu.com>  Thu, 10 Nov 2005 05:05:56 +0100
 +
 +apt (0.6.42.3) unstable; urgency=low
 +
 +  * Merge bubulle@debian.org--2005/apt--main--0 up to patch-129:
 +    - patch-118: Russian translation update by Yuri Kozlov (closes: #335164)
 +    - patch-119: add update-po as a pre-req for binary (closes: #329910)
 +    - patch-121: Complete French translation
 +    - patch-125: Fixed localization of y/n questions in German translation 
 +                 (closes: #337078)
 +    - patch-126: Swedish translation update (closes: #337163)
 +    - patch-127: Complete Tagalog translation (closes: #337306)
 +    - patch-128: Danish translation update (closes: #337949)
 +    - patch-129: Basque translation update (closes: #338101)
 +  * cmdline/apt-get.cc:
 +    - bufix in FindSrc  (closes: #335213, #337910)
 +  * added armeb to archtable (closes: #333599)
 +  * with --allow-unauthenticated use the old fallback behaviour for
 +    sources (closes: #335112)
 +   
 + -- Michael Vogt <mvo@debian.org>  Wed,  9 Nov 2005 07:22:31 +0100
 +
 +apt (0.6.42.2) unstable; urgency=high
 +
 +  * NMU (approved by maintainer)
 +  * Add AMD64 archive signing key to debian-archive.gpg (closes: #336500).
 +  * Add big-endian arm (armeb) support (closes: #333599).
 +  * Priority high to get the AMD key into testing ASAP.
 +
 + -- Frans Pop <fjp@debian.org>  Sun, 30 Oct 2005 21:29:11 +0100
 + 
 +apt (0.6.42.1) unstable; urgency=low
 +
 +  * fix a incorrect example in the apt_prefrences man page
 +    (thanks to Filipus Klutiero, closes: #282918)
 +  * apt-pkg/pkgrecords.cc:
 +    - revert patch from last version, it causes trouble on alpha 
 +      and ia64 (closes: #335102, #335103)
 +  * cmdline/apt-get.cc:
 +    - be extra carefull in FindSrc (closes: #335213)
 +
 + -- Michael Vogt <mvo@debian.org>  Sat, 22 Oct 2005 23:44:35 +0200
 +
  apt (0.6.42) unstable; urgency=low
  
    * apt-pkg/cdrom.cc:
      - unmount the cdrom when apt failed to locate any package files
    * allow cdrom failures and fallback to other sources in that case
      (closes: #44135)
 -  * better error text when dpkg-source fails 
 +  * better error text when dpkg-source fails
    * Merge bubulle@debian.org--2005/apt--main--0 up to patch-115:
      - patch-99: Added Galician translation
      - patch-100: Completed Danish translation (Closes: #325686)
      - patch-104: French translation completed
      - patch-109: Italian translation completed
 -    - patch-112: Swedish translation update 
 +    - patch-112: Swedish translation update
      - patch-115: Basque translation completed (Closes: #333299)
    * applied french man-page update (thanks to Philippe Batailler)
      (closes: #316638, #327456)
    * fix leak in the mmap code, thanks to Daniel Burrows for the
      patch (closes: #250583)
    * support for apt-get [build-dep|source] -t (closes: #152129)
 -  * added "APT::Authentication::Trust-CDROM" option to make the life
 +  * added "APT::Authentication::TrustCDROM" option to make the life
      for the installer people easier (closes: #334656)
    * fix crash in apt-ftparchive (thanks to Bastian Blank for the patch)
      (closes: #334671)
    * apt-pkg/contrib/md5.cc:
      - fix a alignment problem on sparc64 that gives random bus errors
        (thanks to Fabbione for providing a test-case)
 -  * init the default ScreenWidth to 79 columns by default 
 +  * init the default ScreenWidth to 79 columns by default
      (Closes: #324921)
 -  * cmdline/apt-cdrom.cc: 
 +  * cmdline/apt-cdrom.cc:
      - fix some missing gettext() calls (closes: #334539)
    * doc/apt-cache.8.xml: fix typo (closes: #334714)
 -  
 +
   -- Michael Vogt <mvo@debian.org>  Wed, 19 Oct 2005 22:02:09 +0200
  
  apt (0.6.41) unstable; urgency=low
    * improved the support for "error" and "conffile" reporting from
      dpkg, added the format to README.progress-reporting
    * added README.progress-reporting to the apt-doc package
 -  * improved the network timeout handling, if a index file from a 
 -    sources.list times out or EAI_AGAIN is returned from getaddrinfo, 
 +  * improved the network timeout handling, if a index file from a
 +    sources.list times out or EAI_AGAIN is returned from getaddrinfo,
      don't try to get the other files from that entry
    * Support architecture-specific extra overrides
      (closes: #225947). Thanks to  Anthony Towns for idea and
    * Javier Fernandez-Sanguino Pen~a:
      - Added a first version of an apt-secure.8 manpage, and modified
        apt-key and apt.end accordingly. Also added the 'update'
 -      argument to apt-key which was previously not documented 
 +      argument to apt-key which was previously not documented
        (Closes: #322120)
    * Andreas Pakulat:
 -    - added example apt-ftparchive.conf file to doc/examples 
 +    - added example apt-ftparchive.conf file to doc/examples
        (closes: #322483)
    * Fix a incorrect example in the man-page (closes: #282918)
    * Fix a bug for very long lines in the apt-cdrom code (closes: #280356)
    * Change pkgPolicy::Pin from private to protected to let subclasses
      access it too (closes: #321799)
    * add default constructor for PrvIterator (closes: #322267)
 -  * Reread status configuration on debSystem::Initialize() 
 +  * Reread status configuration on debSystem::Initialize()
      (needed for apt-proxy, thanks to Otavio for this patch)
 -  
 +
   -- Michael Vogt <mvo@debian.org>  Mon,  5 Sep 2005 22:59:03 +0200
 +  
 +apt (0.6.40.1ubuntu8) breezy; urgency=low
 +
 +  * Cherry picked michael.vogt@ubuntu.com--2005/apt--mvo--0--patch-62:
 +    - fix for a bad memory/file leak in the mmap code (ubuntu #15603)
 +  * po/de.po, po/fr.po: 
 +    - updated the translations
 +  * po/makefile:
 +    - create a single pot file in each domain dir to make rosetta happy
 +
 + -- Michael Vogt <michael.vogt@ubuntu.com>  Wed, 28 Sep 2005 10:16:06 +0200
 +
 +apt (0.6.40.1ubuntu7) breezy; urgency=low
 +
 +  * updated the pot/po files , no code changes
 +
 + -- Michael Vogt <michael.vogt@ubuntu.com>  Tue, 27 Sep 2005 18:38:16 +0200
 +
 +apt (0.6.40.1ubuntu6) breezy; urgency=low
 +
 +  * Cherry picked michael.vogt@ubuntu.com--2005/apt--mvo--0--patch-56:
 +    - make it possible for apt to handle a failed MediaChange event and
 +      fall back to other sources (ubuntu #13713)
 +
 + -- Michael Vogt <michael.vogt@ubuntu.com>  Tue, 13 Sep 2005 22:09:50 +0200
 +
 +apt (0.6.40.1ubuntu5) breezy; urgency=low
 +
 +  * Cherry picked michael.vogt@ubuntu.com--2005/apt--mvo--0--patch-{50,51}.
 +    This adds media-change reporting to the apt status-fd (ubuntu #15213)
 +  * Cherry picked michael.vogt@ubuntu.com--2005/apt--mvo--0--patch-55:
 +    apt-pkg/cdrom.cc:
 +    - unmount the cdrom when apt failed to locate any package files
 +
 + -- Michael Vogt <michael.vogt@ubuntu.com>  Mon, 12 Sep 2005 15:44:26 +0200
 +
 +apt (0.6.40.1ubuntu4) breezy; urgency=low
 +
 +  * debian/apt.cron.daily:
 +    - fix a embarrassing typo
 +  
 + -- Michael Vogt <michael.vogt@ubuntu.com>  Wed,  7 Sep 2005 10:10:37 +0200
 +
 +apt (0.6.40.1ubuntu3) breezy; urgency=low
 +
 +  * debian/apt.cron.daily:
 +    - use the ctime as well when figuring what packages need to
 +      be removed. This fixes the problem that packages copied with    
 +      "cp -a" (e.g. from the installer) have old mtimes (ubuntu #14504)
 +
 + -- Michael Vogt <michael.vogt@ubuntu.com>  Tue,  6 Sep 2005 18:30:46 +0200
 +
 +apt (0.6.40.1ubuntu2) breezy; urgency=low
 +
 +  * improved the support for "error" and "conffile" reporting from
 +    dpkg, added the format to README.progress-reporting
 +  * added README.progress-reporting to the apt-doc package
 +  * Do md5sum checking for file and cdrom method (closes: #319142)
 +  * Change pkgPolicy::Pin from private to protected to let subclasses
 +    access it too (closes: #321799)
 +  * methods/connect.cc:
 +    - send failure reason for EAI_AGAIN (TmpResolveFailure) to acuire-item
 +  * apt-pkg/acquire-item.cc:
 +    - fail early if a FailReason is TmpResolveFailure (avoids hangs during
 +      the install when no network is available)
 +  * merged michael.vogt@ubuntu.com--2005/apt--trust-cdrom--0
 +
 + -- Michael Vogt <michael.vogt@ubuntu.com>  Tue, 23 Aug 2005 19:44:55 +0200
 +
 +apt (0.6.40.1ubuntu1) breezy; urgency=low
 +
 +  * Synchronize with Debian
 +
 + -- Michael Vogt <michael.vogt@ubuntu.com>  Fri,  5 Aug 2005 14:20:56 +0200
  
  apt (0.6.40.1) unstable; urgency=low
  
  
   -- Michael Vogt <mvo@debian.org>  Fri,  5 Aug 2005 13:24:58 +0200
  
 +apt (0.6.40ubuntu1) breezy; urgency=low
 +
 +  * Synchronize with Debian
 +
 + -- Matt Zimmerman <mdz@ubuntu.com>  Thu,  4 Aug 2005 15:53:22 -0700
 +
  apt (0.6.40) unstable; urgency=low
  
    * Patch from Jordi Mallach to mark some additional strings for translation
  
   -- Matt Zimmerman <mdz@debian.org>  Thu, 28 Jul 2005 11:57:32 -0700
  
 +apt (0.6.39ubuntu4) breezy; urgency=low
 +
 +  * Fix keyring paths in apt-key, apt.postinst (I swear I remember doing this
 +    before...)
 +
 + -- Matt Zimmerman <mdz@ubuntu.com>  Wed, 29 Jun 2005 08:39:17 -0700
 +
 +apt (0.6.39ubuntu3) breezy; urgency=low
 +
 +  * Fix keyring locations for Ubuntu in apt-key too.
 +
 + -- Colin Watson <cjwatson@ubuntu.com>  Wed, 29 Jun 2005 14:45:36 +0100
 +
 +apt (0.6.39ubuntu2) breezy; urgency=low
 +
 +  * Install ubuntu-archive.gpg rather than debian-archive.gpg as
 +    /etc/apt/trusted.gpg.
 +
 + -- Colin Watson <cjwatson@ubuntu.com>  Wed, 29 Jun 2005 11:53:34 +0100
 +
 +apt (0.6.39ubuntu1) breezy; urgency=low
 +
 +  * Michael Vogt
 +    - Change debian/bugscript to use #!/bin/bash (Closes: #313402)
 +    - Fix a incorrect example in the man-page (closes: #282918)
 +    - Support architecture-specific extra overrides
 +      (closes: #225947). Thanks to  Anthony Towns for idea and
 +      the patch, thanks to Colin Watson for testing it.
 +    - better report network timeouts from the methods to the acuire code,
 +      only timeout once per sources.list line
 +
 + -- Matt Zimmerman <mdz@ubuntu.com>  Tue, 28 Jun 2005 11:52:24 -0700
 +
  apt (0.6.39) unstable; urgency=low
  
    * Welsh translation update: daf@muse.19inch.net--2005/apt--main--0--patch-6
    * Update priority of apt-utils to important, to match the override file
    * Install only one keyring on each branch (Closes: #316119)
  
 - -- Matt Zimmerman <mdz@debian.org>  Tue, 28 Jun 2005 11:51:09 -0700
 + -- Matt Zimmerman <mdz@debian.org>  Tue, 28 Jun 2005 11:35:21 -0700
 +
 +apt (0.6.38ubuntu1) breezy; urgency=low
 +
 +  * First release from Ubuntu branch
 +  * Merge with --main--0, switch back to Ubuntu keyring
 +
 + -- Matt Zimmerman <mdz@ubuntu.com>  Sat, 25 Jun 2005 16:52:41 -0700
  
  apt (0.6.38) unstable; urgency=low
  
    
   -- Matt Zimmerman <mdz@debian.org>  Sat, 25 Jun 2005 09:51:00 -0700
  
 ->>>>>>> MERGE-SOURCE
  apt (0.6.37) breezy; urgency=low
  
    * Merge bubulle@debian.org--2005/apt--main--0 up to patch-81
    * Add Welsh translation from Dafydd Harries
      (daf@muse.19inch.net--2005/apt--main--0--patch-1)
    * Change debian/bugscript to use #!/bin/bash (Closes: #313402)
 +  * Fix a incorrect example in the man-page (closes: #282918)
  
   -- Matt Zimmerman <mdz@ubuntu.com>  Tue, 24 May 2005 14:38:25 -0700
  
diff --combined po/apt-all.pot
index 8567df7cacb932072ae358f24206c3052ee4c504,1caf832f0b9c3c349c8d63b841f53ff5ec59bd53..586f9e5451c4906092cbe9fe70b0fe6279b18dd3
@@@ -7,7 -7,7 +7,7 @@@ msgid "
  msgstr ""
  "Project-Id-Version: PACKAGE VERSION\n"
  "Report-Msgid-Bugs-To: \n"
 -"POT-Creation-Date: 2005-09-22 23:07+0200\n"
 +"POT-Creation-Date: 2006-08-09 23:46+0200\n"
  "PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n"
  "Last-Translator: FULL NAME <EMAIL@ADDRESS>\n"
  "Language-Team: LANGUAGE <LL@li.org>\n"
@@@ -146,14 -146,14 +146,14 @@@ msgstr "
  msgid "       %4i %s\n"
  msgstr ""
  
 -#: cmdline/apt-cache.cc:1651 cmdline/apt-cdrom.cc:138 cmdline/apt-config.cc:70
 +#: cmdline/apt-cache.cc:1652 cmdline/apt-cdrom.cc:138 cmdline/apt-config.cc:70
  #: cmdline/apt-extracttemplates.cc:225 ftparchive/apt-ftparchive.cc:550
 -#: cmdline/apt-get.cc:2325 cmdline/apt-sortpkgs.cc:144
 +#: cmdline/apt-get.cc:2462 cmdline/apt-sortpkgs.cc:144
  #, c-format
  msgid "%s %s for %s %s compiled on %s %s\n"
  msgstr ""
  
 -#: cmdline/apt-cache.cc:1658
 +#: cmdline/apt-cache.cc:1659
  msgid ""
  "Usage: apt-cache [options] command\n"
  "       apt-cache [options] add file1 [file2 ...]\n"
  "See the apt-cache(8) and apt.conf(5) manual pages for more information.\n"
  msgstr ""
  
 +#: cmdline/apt-cdrom.cc:78
 +msgid "Please provide a name for this Disc, such as 'Debian 2.1r1 Disk 1'"
 +msgstr ""
 +
 +#: cmdline/apt-cdrom.cc:93
 +msgid "Please insert a Disc in the drive and press enter"
 +msgstr ""
 +
 +#: cmdline/apt-cdrom.cc:117
 +msgid "Repeat this process for the rest of the CDs in your set."
 +msgstr ""
 +
  #: cmdline/apt-config.cc:41
  msgid "Arguments not in pairs"
  msgstr ""
@@@ -243,7 -231,7 +243,8 @@@ msgid "
  "  -o=? Set an arbitrary configuration option, eg -o dir::cache=/tmp\n"
  msgstr ""
  
 -#: cmdline/apt-extracttemplates.cc:267 apt-pkg/pkgcachegen.cc:710
 +#: cmdline/apt-extracttemplates.cc:267 apt-pkg/pkgcachegen.cc:714
++#: apt-pkg/pkgcachegen.cc:819
  #, c-format
  msgid "Unable to write to %s"
  msgstr ""
@@@ -327,126 -315,115 +328,126 @@@ msgstr "
  msgid "Some files are missing in the package file group `%s'"
  msgstr ""
  
 -#: ftparchive/cachedb.cc:45
 +#: ftparchive/cachedb.cc:47
  #, c-format
  msgid "DB was corrupted, file renamed to %s.old"
  msgstr ""
  
 -#: ftparchive/cachedb.cc:63
 +#: ftparchive/cachedb.cc:65
  #, c-format
  msgid "DB is old, attempting to upgrade %s"
  msgstr ""
  
 -#: ftparchive/cachedb.cc:73
 +#: ftparchive/cachedb.cc:76
 +msgid ""
 +"DB format is invalid. If you upgraded from a older version of apt, please "
 +"remove and re-create the database."
 +msgstr ""
 +
 +#: ftparchive/cachedb.cc:81
  #, c-format
  msgid "Unable to open DB file %s: %s"
  msgstr ""
  
 -#: ftparchive/cachedb.cc:114
 +#: ftparchive/cachedb.cc:127 apt-inst/extract.cc:181 apt-inst/extract.cc:193
 +#: apt-inst/extract.cc:210 apt-inst/deb/dpkgdb.cc:121 methods/gpgv.cc:272
  #, c-format
 -msgid "File date has changed %s"
 +msgid "Failed to stat %s"
  msgstr ""
  
 -#: ftparchive/cachedb.cc:155
 +#: ftparchive/cachedb.cc:242
  msgid "Archive has no control record"
  msgstr ""
  
 -#: ftparchive/cachedb.cc:267
 +#: ftparchive/cachedb.cc:448
  msgid "Unable to get a cursor"
  msgstr ""
  
 -#: ftparchive/writer.cc:78
 +#: ftparchive/writer.cc:79
  #, c-format
  msgid "W: Unable to read directory %s\n"
  msgstr ""
  
 -#: ftparchive/writer.cc:83
 +#: ftparchive/writer.cc:84
  #, c-format
  msgid "W: Unable to stat %s\n"
  msgstr ""
  
 -#: ftparchive/writer.cc:125
 +#: ftparchive/writer.cc:135
  msgid "E: "
  msgstr ""
  
 -#: ftparchive/writer.cc:127
 +#: ftparchive/writer.cc:137
  msgid "W: "
  msgstr ""
  
 -#: ftparchive/writer.cc:134
 +#: ftparchive/writer.cc:144
  msgid "E: Errors apply to file "
  msgstr ""
  
 -#: ftparchive/writer.cc:151 ftparchive/writer.cc:181
 +#: ftparchive/writer.cc:161 ftparchive/writer.cc:191
  #, c-format
  msgid "Failed to resolve %s"
  msgstr ""
  
 -#: ftparchive/writer.cc:163
 +#: ftparchive/writer.cc:173
  msgid "Tree walking failed"
  msgstr ""
  
 -#: ftparchive/writer.cc:188
 +#: ftparchive/writer.cc:198
  #, c-format
  msgid "Failed to open %s"
  msgstr ""
  
 -#: ftparchive/writer.cc:245
 +#: ftparchive/writer.cc:257
  #, c-format
  msgid " DeLink %s [%s]\n"
  msgstr ""
  
 -#: ftparchive/writer.cc:253
 +#: ftparchive/writer.cc:265
  #, c-format
  msgid "Failed to readlink %s"
  msgstr ""
  
 -#: ftparchive/writer.cc:257
 +#: ftparchive/writer.cc:269
  #, c-format
  msgid "Failed to unlink %s"
  msgstr ""
  
 -#: ftparchive/writer.cc:264
 +#: ftparchive/writer.cc:276
  #, c-format
  msgid "*** Failed to link %s to %s"
  msgstr ""
  
 -#: ftparchive/writer.cc:274
 +#: ftparchive/writer.cc:286
  #, c-format
  msgid " DeLink limit of %sB hit.\n"
  msgstr ""
  
 -#: ftparchive/writer.cc:358 apt-inst/extract.cc:181 apt-inst/extract.cc:193
 -#: apt-inst/extract.cc:210 apt-inst/deb/dpkgdb.cc:121 methods/gpgv.cc:256
 -#, c-format
 -msgid "Failed to stat %s"
 -msgstr ""
 -
 -#: ftparchive/writer.cc:386
 +#: ftparchive/writer.cc:390
  msgid "Archive had no package field"
  msgstr ""
  
 -#: ftparchive/writer.cc:394 ftparchive/writer.cc:602
 +#: ftparchive/writer.cc:398 ftparchive/writer.cc:613
  #, c-format
  msgid "  %s has no override entry\n"
  msgstr ""
  
 -#: ftparchive/writer.cc:437 ftparchive/writer.cc:688
 +#: ftparchive/writer.cc:443 ftparchive/writer.cc:701
  #, c-format
  msgid "  %s maintainer is %s not %s\n"
  msgstr ""
  
 +#: ftparchive/writer.cc:623
 +#, c-format
 +msgid "  %s has no source override entry\n"
 +msgstr ""
 +
 +#: ftparchive/writer.cc:627
 +#, c-format
 +msgid "  %s has no binary override entry either\n"
 +msgstr ""
 +
  #: ftparchive/contents.cc:317
  #, c-format
  msgid "Internal error, could not locate member %s"
@@@ -542,221 -519,221 +543,221 @@@ msgstr "
  msgid "Failed to rename %s to %s"
  msgstr ""
  
 -#: cmdline/apt-get.cc:118
 +#: cmdline/apt-get.cc:121
  msgid "Y"
  msgstr ""
  
 -#: cmdline/apt-get.cc:140 cmdline/apt-get.cc:1486
 +#: cmdline/apt-get.cc:143 cmdline/apt-get.cc:1574
  #, c-format
  msgid "Regex compilation error - %s"
  msgstr ""
  
 -#: cmdline/apt-get.cc:235
 +#: cmdline/apt-get.cc:238
  msgid "The following packages have unmet dependencies:"
  msgstr ""
  
 -#: cmdline/apt-get.cc:325
 +#: cmdline/apt-get.cc:328
  #, c-format
  msgid "but %s is installed"
  msgstr ""
  
 -#: cmdline/apt-get.cc:327
 +#: cmdline/apt-get.cc:330
  #, c-format
  msgid "but %s is to be installed"
  msgstr ""
  
 -#: cmdline/apt-get.cc:334
 +#: cmdline/apt-get.cc:337
  msgid "but it is not installable"
  msgstr ""
  
 -#: cmdline/apt-get.cc:336
 +#: cmdline/apt-get.cc:339
  msgid "but it is a virtual package"
  msgstr ""
  
 -#: cmdline/apt-get.cc:339
 +#: cmdline/apt-get.cc:342
  msgid "but it is not installed"
  msgstr ""
  
 -#: cmdline/apt-get.cc:339
 +#: cmdline/apt-get.cc:342
  msgid "but it is not going to be installed"
  msgstr ""
  
 -#: cmdline/apt-get.cc:344
 +#: cmdline/apt-get.cc:347
  msgid " or"
  msgstr ""
  
 -#: cmdline/apt-get.cc:373
 +#: cmdline/apt-get.cc:376
  msgid "The following NEW packages will be installed:"
  msgstr ""
  
 -#: cmdline/apt-get.cc:399
 +#: cmdline/apt-get.cc:402
  msgid "The following packages will be REMOVED:"
  msgstr ""
  
 -#: cmdline/apt-get.cc:421
 +#: cmdline/apt-get.cc:424
  msgid "The following packages have been kept back:"
  msgstr ""
  
 -#: cmdline/apt-get.cc:442
 +#: cmdline/apt-get.cc:445
  msgid "The following packages will be upgraded:"
  msgstr ""
  
 -#: cmdline/apt-get.cc:463
 +#: cmdline/apt-get.cc:466
  msgid "The following packages will be DOWNGRADED:"
  msgstr ""
  
 -#: cmdline/apt-get.cc:483
 +#: cmdline/apt-get.cc:486
  msgid "The following held packages will be changed:"
  msgstr ""
  
 -#: cmdline/apt-get.cc:536
 +#: cmdline/apt-get.cc:539
  #, c-format
  msgid "%s (due to %s) "
  msgstr ""
  
 -#: cmdline/apt-get.cc:544
 +#: cmdline/apt-get.cc:547
  msgid ""
  "WARNING: The following essential packages will be removed.\n"
  "This should NOT be done unless you know exactly what you are doing!"
  msgstr ""
  
 -#: cmdline/apt-get.cc:575
 +#: cmdline/apt-get.cc:578
  #, c-format
  msgid "%lu upgraded, %lu newly installed, "
  msgstr ""
  
 -#: cmdline/apt-get.cc:579
 +#: cmdline/apt-get.cc:582
  #, c-format
  msgid "%lu reinstalled, "
  msgstr ""
  
 -#: cmdline/apt-get.cc:581
 +#: cmdline/apt-get.cc:584
  #, c-format
  msgid "%lu downgraded, "
  msgstr ""
  
 -#: cmdline/apt-get.cc:583
 +#: cmdline/apt-get.cc:586
  #, c-format
  msgid "%lu to remove and %lu not upgraded.\n"
  msgstr ""
  
 -#: cmdline/apt-get.cc:587
 +#: cmdline/apt-get.cc:590
  #, c-format
  msgid "%lu not fully installed or removed.\n"
  msgstr ""
  
 -#: cmdline/apt-get.cc:647
 +#: cmdline/apt-get.cc:650
  msgid "Correcting dependencies..."
  msgstr ""
  
 -#: cmdline/apt-get.cc:650
 +#: cmdline/apt-get.cc:653
  msgid " failed."
  msgstr ""
  
 -#: cmdline/apt-get.cc:653
 +#: cmdline/apt-get.cc:656
  msgid "Unable to correct dependencies"
  msgstr ""
  
 -#: cmdline/apt-get.cc:656
 +#: cmdline/apt-get.cc:659
  msgid "Unable to minimize the upgrade set"
  msgstr ""
  
 -#: cmdline/apt-get.cc:658
 +#: cmdline/apt-get.cc:661
  msgid " Done"
  msgstr ""
  
 -#: cmdline/apt-get.cc:662
 +#: cmdline/apt-get.cc:665
  msgid "You might want to run `apt-get -f install' to correct these."
  msgstr ""
  
 -#: cmdline/apt-get.cc:665
 +#: cmdline/apt-get.cc:668
  msgid "Unmet dependencies. Try using -f."
  msgstr ""
  
 -#: cmdline/apt-get.cc:687
 +#: cmdline/apt-get.cc:690
  msgid "WARNING: The following packages cannot be authenticated!"
  msgstr ""
  
 -#: cmdline/apt-get.cc:691
 +#: cmdline/apt-get.cc:694
  msgid "Authentication warning overridden.\n"
  msgstr ""
  
 -#: cmdline/apt-get.cc:698
 +#: cmdline/apt-get.cc:701
  msgid "Install these packages without verification [y/N]? "
  msgstr ""
  
 -#: cmdline/apt-get.cc:700
 +#: cmdline/apt-get.cc:703
  msgid "Some packages could not be authenticated"
  msgstr ""
  
 -#: cmdline/apt-get.cc:709 cmdline/apt-get.cc:856
 +#: cmdline/apt-get.cc:712 cmdline/apt-get.cc:859
  msgid "There are problems and -y was used without --force-yes"
  msgstr ""
  
 -#: cmdline/apt-get.cc:753
 +#: cmdline/apt-get.cc:756
  msgid "Internal error, InstallPackages was called with broken packages!"
  msgstr ""
  
 -#: cmdline/apt-get.cc:762
 +#: cmdline/apt-get.cc:765
  msgid "Packages need to be removed but remove is disabled."
  msgstr ""
  
 -#: cmdline/apt-get.cc:773
 +#: cmdline/apt-get.cc:776
  msgid "Internal error, Ordering didn't finish"
  msgstr ""
  
 -#: cmdline/apt-get.cc:789 cmdline/apt-get.cc:1780 cmdline/apt-get.cc:1813
 +#: cmdline/apt-get.cc:792 cmdline/apt-get.cc:1893 cmdline/apt-get.cc:1926
  msgid "Unable to lock the download directory"
  msgstr ""
  
 -#: cmdline/apt-get.cc:799 cmdline/apt-get.cc:1861 cmdline/apt-get.cc:2073
 +#: cmdline/apt-get.cc:802 cmdline/apt-get.cc:1974 cmdline/apt-get.cc:2210
  #: apt-pkg/cachefile.cc:67
  msgid "The list of sources could not be read."
  msgstr ""
  
 -#: cmdline/apt-get.cc:814
 +#: cmdline/apt-get.cc:817
  msgid "How odd.. The sizes didn't match, email apt@packages.debian.org"
  msgstr ""
  
 -#: cmdline/apt-get.cc:819
 +#: cmdline/apt-get.cc:822
  #, c-format
  msgid "Need to get %sB/%sB of archives.\n"
  msgstr ""
  
 -#: cmdline/apt-get.cc:822
 +#: cmdline/apt-get.cc:825
  #, c-format
  msgid "Need to get %sB of archives.\n"
  msgstr ""
  
 -#: cmdline/apt-get.cc:827
 +#: cmdline/apt-get.cc:830
  #, c-format
  msgid "After unpacking %sB of additional disk space will be used.\n"
  msgstr ""
  
 -#: cmdline/apt-get.cc:830
 +#: cmdline/apt-get.cc:833
  #, c-format
  msgid "After unpacking %sB disk space will be freed.\n"
  msgstr ""
  
 -#: cmdline/apt-get.cc:844 cmdline/apt-get.cc:1927
 +#: cmdline/apt-get.cc:847 cmdline/apt-get.cc:2064
  #, c-format
  msgid "Couldn't determine free space in %s"
  msgstr ""
  
 -#: cmdline/apt-get.cc:847
 +#: cmdline/apt-get.cc:850
  #, c-format
  msgid "You don't have enough free space in %s."
  msgstr ""
  
 -#: cmdline/apt-get.cc:862 cmdline/apt-get.cc:882
 +#: cmdline/apt-get.cc:865 cmdline/apt-get.cc:885
  msgid "Trivial Only specified but this is not a trivial operation."
  msgstr ""
  
 -#: cmdline/apt-get.cc:864
 +#: cmdline/apt-get.cc:867
  msgid "Yes, do as I say!"
  msgstr ""
  
 -#: cmdline/apt-get.cc:866
 +#: cmdline/apt-get.cc:869
  #, c-format
  msgid ""
  "You are about to do something potentially harmful.\n"
  " ?] "
  msgstr ""
  
 -#: cmdline/apt-get.cc:872 cmdline/apt-get.cc:891
 +#: cmdline/apt-get.cc:875 cmdline/apt-get.cc:894
  msgid "Abort."
  msgstr ""
  
 -#: cmdline/apt-get.cc:887
 +#: cmdline/apt-get.cc:890
  msgid "Do you want to continue [Y/n]? "
  msgstr ""
  
 -#: cmdline/apt-get.cc:959 cmdline/apt-get.cc:1336 cmdline/apt-get.cc:1970
 +#: cmdline/apt-get.cc:962 cmdline/apt-get.cc:1369 cmdline/apt-get.cc:2107
  #, c-format
  msgid "Failed to fetch %s  %s\n"
  msgstr ""
  
 -#: cmdline/apt-get.cc:977
 +#: cmdline/apt-get.cc:980
  msgid "Some files failed to download"
  msgstr ""
  
 -#: cmdline/apt-get.cc:978 cmdline/apt-get.cc:1979
 +#: cmdline/apt-get.cc:981 cmdline/apt-get.cc:2116
  msgid "Download complete and in download only mode"
  msgstr ""
  
 -#: cmdline/apt-get.cc:984
 +#: cmdline/apt-get.cc:987
  msgid ""
  "Unable to fetch some archives, maybe run apt-get update or try with --fix-"
  "missing?"
  msgstr ""
  
 -#: cmdline/apt-get.cc:988
 +#: cmdline/apt-get.cc:991
  msgid "--fix-missing and media swapping is not currently supported"
  msgstr ""
  
 -#: cmdline/apt-get.cc:993
 +#: cmdline/apt-get.cc:996
  msgid "Unable to correct missing packages."
  msgstr ""
  
 -#: cmdline/apt-get.cc:994
 +#: cmdline/apt-get.cc:997
  msgid "Aborting install."
  msgstr ""
  
 -#: cmdline/apt-get.cc:1028
 +#: cmdline/apt-get.cc:1031
  #, c-format
  msgid "Note, selecting %s instead of %s\n"
  msgstr ""
  
 -#: cmdline/apt-get.cc:1038
 +#: cmdline/apt-get.cc:1041
  #, c-format
  msgid "Skipping %s, it is already installed and upgrade is not set.\n"
  msgstr ""
  
 -#: cmdline/apt-get.cc:1056
 +#: cmdline/apt-get.cc:1059
  #, c-format
  msgid "Package %s is not installed, so not removed\n"
  msgstr ""
  
 -#: cmdline/apt-get.cc:1067
 +#: cmdline/apt-get.cc:1070
  #, c-format
  msgid "Package %s is a virtual package provided by:\n"
  msgstr ""
  
 -#: cmdline/apt-get.cc:1079
 +#: cmdline/apt-get.cc:1082
  msgid " [Installed]"
  msgstr ""
  
 -#: cmdline/apt-get.cc:1084
 +#: cmdline/apt-get.cc:1087
  msgid "You should explicitly select one to install."
  msgstr ""
  
 -#: cmdline/apt-get.cc:1089
 +#: cmdline/apt-get.cc:1092
  #, c-format
  msgid ""
  "Package %s is not available, but is referred to by another package.\n"
  "is only available from another source\n"
  msgstr ""
  
 -#: cmdline/apt-get.cc:1108
 +#: cmdline/apt-get.cc:1111
  msgid "However the following packages replace it:"
  msgstr ""
  
 -#: cmdline/apt-get.cc:1111
 +#: cmdline/apt-get.cc:1114
  #, c-format
  msgid "Package %s has no installation candidate"
  msgstr ""
  
 -#: cmdline/apt-get.cc:1131
 +#: cmdline/apt-get.cc:1134
  #, c-format
  msgid "Reinstallation of %s is not possible, it cannot be downloaded.\n"
  msgstr ""
  
 -#: cmdline/apt-get.cc:1139
 +#: cmdline/apt-get.cc:1142
  #, c-format
  msgid "%s is already the newest version.\n"
  msgstr ""
  
 -#: cmdline/apt-get.cc:1166
 +#: cmdline/apt-get.cc:1171
  #, c-format
  msgid "Release '%s' for '%s' was not found"
  msgstr ""
  
 -#: cmdline/apt-get.cc:1168
 +#: cmdline/apt-get.cc:1173
  #, c-format
  msgid "Version '%s' for '%s' was not found"
  msgstr ""
  
 -#: cmdline/apt-get.cc:1174
 +#: cmdline/apt-get.cc:1179
  #, c-format
  msgid "Selected version %s (%s) for %s\n"
  msgstr ""
  
 -#: cmdline/apt-get.cc:1284
 +#: cmdline/apt-get.cc:1316
  msgid "The update command takes no arguments"
  msgstr ""
  
 -#: cmdline/apt-get.cc:1297 cmdline/apt-get.cc:1391
 +#: cmdline/apt-get.cc:1329
  msgid "Unable to lock the list directory"
  msgstr ""
  
 -#: cmdline/apt-get.cc:1355
 +#: cmdline/apt-get.cc:1396 cmdline/apt-get.cc:1398
  msgid ""
  "Some index files failed to download, they have been ignored, or old ones "
  "used instead."
  msgstr ""
  
 -#: cmdline/apt-get.cc:1374
 +#: cmdline/apt-get.cc:1412
 +msgid "We are not supposed to delete stuff, can't start AutoRemover"
 +msgstr ""
 +
 +#: cmdline/apt-get.cc:1437
 +msgid ""
 +"Hmm, seems like the AutoRemover destroyed something which really\n"
 +"shouldn't happen. Please file a bug report against apt."
 +msgstr ""
 +
 +#: cmdline/apt-get.cc:1440 cmdline/apt-get.cc:1642
 +msgid "The following information may help to resolve the situation:"
 +msgstr ""
 +
 +#: cmdline/apt-get.cc:1444
 +msgid "Internal Error, AutoRemover broke stuff"
 +msgstr ""
 +
 +#: cmdline/apt-get.cc:1463
  msgid "Internal error, AllUpgrade broke stuff"
  msgstr ""
  
 -#: cmdline/apt-get.cc:1473 cmdline/apt-get.cc:1509
 +#: cmdline/apt-get.cc:1561 cmdline/apt-get.cc:1597
  #, c-format
  msgid "Couldn't find package %s"
  msgstr ""
  
 -#: cmdline/apt-get.cc:1496
 +#: cmdline/apt-get.cc:1584
  #, c-format
  msgid "Note, selecting %s for regex '%s'\n"
  msgstr ""
  
 -#: cmdline/apt-get.cc:1526
 +#: cmdline/apt-get.cc:1614
  msgid "You might want to run `apt-get -f install' to correct these:"
  msgstr ""
  
 -#: cmdline/apt-get.cc:1529
 +#: cmdline/apt-get.cc:1617
  msgid ""
  "Unmet dependencies. Try 'apt-get -f install' with no packages (or specify a "
  "solution)."
  msgstr ""
  
 -#: cmdline/apt-get.cc:1541
 +#: cmdline/apt-get.cc:1629
  msgid ""
  "Some packages could not be installed. This may mean that you have\n"
  "requested an impossible situation or if you are using the unstable\n"
  "or been moved out of Incoming."
  msgstr ""
  
 -#: cmdline/apt-get.cc:1549
 +#: cmdline/apt-get.cc:1637
  msgid ""
  "Since you only requested a single operation it is extremely likely that\n"
  "the package is simply not installable and a bug report against\n"
  "that package should be filed."
  msgstr ""
  
 -#: cmdline/apt-get.cc:1554
 -msgid "The following information may help to resolve the situation:"
 -msgstr ""
 -
 -#: cmdline/apt-get.cc:1557
 +#: cmdline/apt-get.cc:1645
  msgid "Broken packages"
  msgstr ""
  
 -#: cmdline/apt-get.cc:1583
 +#: cmdline/apt-get.cc:1676
  msgid "The following extra packages will be installed:"
  msgstr ""
  
 -#: cmdline/apt-get.cc:1654
 +#: cmdline/apt-get.cc:1765
  msgid "Suggested packages:"
  msgstr ""
  
 -#: cmdline/apt-get.cc:1655
 +#: cmdline/apt-get.cc:1766
  msgid "Recommended packages:"
  msgstr ""
  
 -#: cmdline/apt-get.cc:1675
 +#: cmdline/apt-get.cc:1786
  msgid "Calculating upgrade... "
  msgstr ""
  
 -#: cmdline/apt-get.cc:1678 methods/ftp.cc:702 methods/connect.cc:101
 +#: cmdline/apt-get.cc:1789 methods/ftp.cc:702 methods/connect.cc:101
  msgid "Failed"
  msgstr ""
  
 -#: cmdline/apt-get.cc:1683
 +#: cmdline/apt-get.cc:1794
  msgid "Done"
  msgstr ""
  
 -#: cmdline/apt-get.cc:1748 cmdline/apt-get.cc:1756
 +#: cmdline/apt-get.cc:1861 cmdline/apt-get.cc:1869
  msgid "Internal error, problem resolver broke stuff"
  msgstr ""
  
 -#: cmdline/apt-get.cc:1856
 +#: cmdline/apt-get.cc:1969
  msgid "Must specify at least one package to fetch source for"
  msgstr ""
  
 -#: cmdline/apt-get.cc:1883 cmdline/apt-get.cc:2091
 +#: cmdline/apt-get.cc:1999 cmdline/apt-get.cc:2228
  #, c-format
  msgid "Unable to find a source package for %s"
  msgstr ""
  
 -#: cmdline/apt-get.cc:1930
 +#: cmdline/apt-get.cc:2043
 +#, c-format
 +msgid "Skipping already downloaded file '%s'\n"
 +msgstr ""
 +
 +#: cmdline/apt-get.cc:2067
  #, c-format
  msgid "You don't have enough free space in %s"
  msgstr ""
  
 -#: cmdline/apt-get.cc:1935
 +#: cmdline/apt-get.cc:2072
  #, c-format
  msgid "Need to get %sB/%sB of source archives.\n"
  msgstr ""
  
 -#: cmdline/apt-get.cc:1938
 +#: cmdline/apt-get.cc:2075
  #, c-format
  msgid "Need to get %sB of source archives.\n"
  msgstr ""
  
 -#: cmdline/apt-get.cc:1944
 +#: cmdline/apt-get.cc:2081
  #, c-format
  msgid "Fetch source %s\n"
  msgstr ""
  
 -#: cmdline/apt-get.cc:1975
 +#: cmdline/apt-get.cc:2112
  msgid "Failed to fetch some archives."
  msgstr ""
  
 -#: cmdline/apt-get.cc:2003
 +#: cmdline/apt-get.cc:2140
  #, c-format
  msgid "Skipping unpack of already unpacked source in %s\n"
  msgstr ""
  
 -#: cmdline/apt-get.cc:2015
 +#: cmdline/apt-get.cc:2152
  #, c-format
  msgid "Unpack command '%s' failed.\n"
  msgstr ""
  
 -#: cmdline/apt-get.cc:2016
 +#: cmdline/apt-get.cc:2153
  #, c-format
  msgid "Check if the 'dpkg-dev' package is installed.\n"
  msgstr ""
  
 -#: cmdline/apt-get.cc:2033
 +#: cmdline/apt-get.cc:2170
  #, c-format
  msgid "Build command '%s' failed.\n"
  msgstr ""
  
 -#: cmdline/apt-get.cc:2052
 +#: cmdline/apt-get.cc:2189
  msgid "Child process failed"
  msgstr ""
  
 -#: cmdline/apt-get.cc:2068
 +#: cmdline/apt-get.cc:2205
  msgid "Must specify at least one package to check builddeps for"
  msgstr ""
  
 -#: cmdline/apt-get.cc:2096
 +#: cmdline/apt-get.cc:2233
  #, c-format
  msgid "Unable to get build-dependency information for %s"
  msgstr ""
  
 -#: cmdline/apt-get.cc:2116
 +#: cmdline/apt-get.cc:2253
  #, c-format
  msgid "%s has no build depends.\n"
  msgstr ""
  
 -#: cmdline/apt-get.cc:2168
 +#: cmdline/apt-get.cc:2305
  #, c-format
  msgid ""
  "%s dependency for %s cannot be satisfied because the package %s cannot be "
  "found"
  msgstr ""
  
 -#: cmdline/apt-get.cc:2220
 +#: cmdline/apt-get.cc:2357
  #, c-format
  msgid ""
  "%s dependency for %s cannot be satisfied because no available versions of "
  "package %s can satisfy version requirements"
  msgstr ""
  
 -#: cmdline/apt-get.cc:2255
 +#: cmdline/apt-get.cc:2392
  #, c-format
  msgid "Failed to satisfy %s dependency for %s: Installed package %s is too new"
  msgstr ""
  
 -#: cmdline/apt-get.cc:2280
 +#: cmdline/apt-get.cc:2417
  #, c-format
  msgid "Failed to satisfy %s dependency for %s: %s"
  msgstr ""
  
 -#: cmdline/apt-get.cc:2294
 +#: cmdline/apt-get.cc:2431
  #, c-format
  msgid "Build-dependencies for %s could not be satisfied."
  msgstr ""
  
 -#: cmdline/apt-get.cc:2298
 +#: cmdline/apt-get.cc:2435
  msgid "Failed to process build dependencies"
  msgstr ""
  
 -#: cmdline/apt-get.cc:2330
 +#: cmdline/apt-get.cc:2467
  msgid "Supported modules:"
  msgstr ""
  
 -#: cmdline/apt-get.cc:2371
 +#: cmdline/apt-get.cc:2508
  msgid ""
  "Usage: apt-get [options] command\n"
  "       apt-get [options] install|remove pkg1 [pkg2 ...]\n"
@@@ -1217,19 -1175,19 +1218,19 @@@ msgstr "
  msgid "Failed to create pipes"
  msgstr ""
  
 -#: apt-inst/contrib/extracttar.cc:143
 +#: apt-inst/contrib/extracttar.cc:144
  msgid "Failed to exec gzip "
  msgstr ""
  
 -#: apt-inst/contrib/extracttar.cc:180 apt-inst/contrib/extracttar.cc:206
 +#: apt-inst/contrib/extracttar.cc:181 apt-inst/contrib/extracttar.cc:207
  msgid "Corrupted archive"
  msgstr ""
  
 -#: apt-inst/contrib/extracttar.cc:195
 +#: apt-inst/contrib/extracttar.cc:196
  msgid "Tar checksum failed, archive corrupted"
  msgstr ""
  
 -#: apt-inst/contrib/extracttar.cc:298
 +#: apt-inst/contrib/extracttar.cc:299
  #, c-format
  msgid "Unknown TAR header type %u, member %s"
  msgstr ""
@@@ -1290,7 -1248,7 +1291,7 @@@ msgstr "
  msgid "Failed to write file %s"
  msgstr ""
  
 -#: apt-inst/dirstream.cc:80 apt-inst/dirstream.cc:88
 +#: apt-inst/dirstream.cc:96 apt-inst/dirstream.cc:104
  #, c-format
  msgid "Failed to close file %s"
  msgstr ""
@@@ -1343,8 -1301,7 +1344,8 @@@ msgid "File %s/%s overwrites the one i
  msgstr ""
  
  #: apt-inst/extract.cc:467 apt-pkg/contrib/configuration.cc:750
 -#: apt-pkg/contrib/cdromutl.cc:153 apt-pkg/acquire.cc:417 apt-pkg/clean.cc:38
 +#: apt-pkg/contrib/cdromutl.cc:153 apt-pkg/sourcelist.cc:324
 +#: apt-pkg/acquire.cc:421 apt-pkg/clean.cc:38
  #, c-format
  msgid "Unable to read %s"
  msgstr ""
@@@ -1374,9 -1331,9 +1375,11 @@@ msgid "The info and temp directories ne
  msgstr ""
  
  #. Build the status cache
 -#: apt-inst/deb/dpkgdb.cc:139 apt-pkg/pkgcachegen.cc:643
 -#: apt-pkg/pkgcachegen.cc:712 apt-pkg/pkgcachegen.cc:717
 -#: apt-pkg/pkgcachegen.cc:840
 +#: apt-inst/deb/dpkgdb.cc:139 apt-pkg/pkgcachegen.cc:647
 +#: apt-pkg/pkgcachegen.cc:716 apt-pkg/pkgcachegen.cc:721
- #: apt-pkg/pkgcachegen.cc:844
++#: apt-pkg/pkgcachegen.cc:844 apt-pkg/pkgcachegen.cc:752
++#: apt-pkg/pkgcachegen.cc:821 apt-pkg/pkgcachegen.cc:826
++#: apt-pkg/pkgcachegen.cc:949
  msgid "Reading package lists"
  msgstr ""
  
@@@ -1390,7 -1347,7 +1393,7 @@@ msgstr "
  msgid "Internal error getting a package name"
  msgstr ""
  
 -#: apt-inst/deb/dpkgdb.cc:205
 +#: apt-inst/deb/dpkgdb.cc:205 apt-inst/deb/dpkgdb.cc:386
  msgid "Reading file listing"
  msgstr ""
  
@@@ -1434,6 -1391,10 +1437,6 @@@ msgstr "
  msgid "The pkg cache must be initialized first"
  msgstr ""
  
 -#: apt-inst/deb/dpkgdb.cc:386
 -msgid "Reading file list"
 -msgstr ""
 -
  #: apt-inst/deb/dpkgdb.cc:443
  #, c-format
  msgid "Failed to find a Package: header, offset %lu"
@@@ -1504,12 -1465,12 +1507,12 @@@ msgstr "
  msgid "File not found"
  msgstr ""
  
 -#: methods/copy.cc:42 methods/gpgv.cc:265 methods/gzip.cc:133
 +#: methods/copy.cc:42 methods/gpgv.cc:281 methods/gzip.cc:133
  #: methods/gzip.cc:142
  msgid "Failed to stat"
  msgstr ""
  
 -#: methods/copy.cc:79 methods/gpgv.cc:262 methods/gzip.cc:139
 +#: methods/copy.cc:79 methods/gpgv.cc:278 methods/gzip.cc:139
  msgid "Failed to set modification time"
  msgstr ""
  
@@@ -1635,7 -1596,7 +1638,7 @@@ msgstr "
  msgid "Unable to accept connection"
  msgstr ""
  
 -#: methods/ftp.cc:864 methods/http.cc:920 methods/rsh.cc:303
 +#: methods/ftp.cc:864 methods/http.cc:958 methods/rsh.cc:303
  msgid "Problem hashing file"
  msgstr ""
  
@@@ -1658,7 -1619,7 +1661,7 @@@ msgstr "
  msgid "Query"
  msgstr ""
  
 -#: methods/ftp.cc:1106
 +#: methods/ftp.cc:1109
  msgid "Unable to invoke "
  msgstr ""
  
@@@ -1687,70 -1648,69 +1690,70 @@@ msgstr "
  msgid "Could not connect to %s:%s (%s), connection timed out"
  msgstr ""
  
 -#: methods/connect.cc:106
 +#: methods/connect.cc:108
  #, c-format
  msgid "Could not connect to %s:%s (%s)."
  msgstr ""
  
  #. We say this mainly because the pause here is for the
  #. ssh connection that is still going
 -#: methods/connect.cc:134 methods/rsh.cc:425
 +#: methods/connect.cc:136 methods/rsh.cc:425
  #, c-format
  msgid "Connecting to %s"
  msgstr ""
  
 -#: methods/connect.cc:165
 +#: methods/connect.cc:167
  #, c-format
  msgid "Could not resolve '%s'"
  msgstr ""
  
 -#: methods/connect.cc:171
 +#: methods/connect.cc:173
  #, c-format
  msgid "Temporary failure resolving '%s'"
  msgstr ""
  
 -#: methods/connect.cc:174
 +#: methods/connect.cc:176
  #, c-format
  msgid "Something wicked happened resolving '%s:%s' (%i)"
  msgstr ""
  
 -#: methods/connect.cc:221
 +#: methods/connect.cc:223
  #, c-format
  msgid "Unable to connect to %s %s:"
  msgstr ""
  
 -#: methods/gpgv.cc:92
 +#: methods/gpgv.cc:65
 +#, c-format
 +msgid "Couldn't access keyring: '%s'"
 +msgstr ""
 +
 +#: methods/gpgv.cc:100
  msgid "E: Argument list from Acquire::gpgv::Options too long. Exiting."
  msgstr ""
  
 -#: methods/gpgv.cc:191
 +#: methods/gpgv.cc:204
  msgid ""
  "Internal error: Good signature, but could not determine key fingerprint?!"
  msgstr ""
  
 -#: methods/gpgv.cc:196
 +#: methods/gpgv.cc:209
  msgid "At least one invalid signature was encountered."
  msgstr ""
  
 -#. FIXME String concatenation considered harmful.
 -#: methods/gpgv.cc:201
 -msgid "Could not execute "
 -msgstr ""
 -
 -#: methods/gpgv.cc:202
 -msgid " to verify signature (is gnupg installed?)"
 +#: methods/gpgv.cc:213
 +#, c-format
 +msgid "Could not execute '%s' to verify signature (is gnupg installed?)"
  msgstr ""
  
 -#: methods/gpgv.cc:206
 +#: methods/gpgv.cc:218
  msgid "Unknown error executing gpgv"
  msgstr ""
  
 -#: methods/gpgv.cc:237
 +#: methods/gpgv.cc:249
  msgid "The following signatures were invalid:\n"
  msgstr ""
  
 -#: methods/gpgv.cc:244
 +#: methods/gpgv.cc:256
  msgid ""
  "The following signatures couldn't be verified because the public key is not "
  "available:\n"
@@@ -1766,76 -1726,76 +1769,76 @@@ msgstr "
  msgid "Read error from %s process"
  msgstr ""
  
 -#: methods/http.cc:344
 +#: methods/http.cc:376
  msgid "Waiting for headers"
  msgstr ""
  
 -#: methods/http.cc:490
 +#: methods/http.cc:522
  #, c-format
  msgid "Got a single header line over %u chars"
  msgstr ""
  
 -#: methods/http.cc:498
 +#: methods/http.cc:530
  msgid "Bad header line"
  msgstr ""
  
 -#: methods/http.cc:517 methods/http.cc:524
 +#: methods/http.cc:549 methods/http.cc:556
  msgid "The HTTP server sent an invalid reply header"
  msgstr ""
  
 -#: methods/http.cc:553
 +#: methods/http.cc:585
  msgid "The HTTP server sent an invalid Content-Length header"
  msgstr ""
  
 -#: methods/http.cc:568
 +#: methods/http.cc:600
  msgid "The HTTP server sent an invalid Content-Range header"
  msgstr ""
  
 -#: methods/http.cc:570
 +#: methods/http.cc:602
  msgid "This HTTP server has broken range support"
  msgstr ""
  
 -#: methods/http.cc:594
 +#: methods/http.cc:626
  msgid "Unknown date format"
  msgstr ""
  
 -#: methods/http.cc:741
 +#: methods/http.cc:773
  msgid "Select failed"
  msgstr ""
  
 -#: methods/http.cc:746
 +#: methods/http.cc:778
  msgid "Connection timed out"
  msgstr ""
  
 -#: methods/http.cc:769
 +#: methods/http.cc:801
  msgid "Error writing to output file"
  msgstr ""
  
 -#: methods/http.cc:797
 +#: methods/http.cc:832
  msgid "Error writing to file"
  msgstr ""
  
 -#: methods/http.cc:822
 +#: methods/http.cc:860
  msgid "Error writing to the file"
  msgstr ""
  
 -#: methods/http.cc:836
 +#: methods/http.cc:874
  msgid "Error reading from server. Remote end closed connection"
  msgstr ""
  
 -#: methods/http.cc:838
 +#: methods/http.cc:876
  msgid "Error reading from server"
  msgstr ""
  
 -#: methods/http.cc:1069
 +#: methods/http.cc:1107
  msgid "Bad header data"
  msgstr ""
  
 -#: methods/http.cc:1086
 +#: methods/http.cc:1124
  msgid "Connection failed"
  msgstr ""
  
 -#: methods/http.cc:1177
 +#: methods/http.cc:1215
  msgid "Internal error"
  msgstr ""
  
@@@ -1848,7 -1808,7 +1851,7 @@@ msgstr "
  msgid "Couldn't make mmap of %lu bytes"
  msgstr ""
  
- #: apt-pkg/contrib/strutl.cc:938
 -#: apt-pkg/contrib/strutl.cc:941
++#: apt-pkg/contrib/strutl.cc:938 apt-pkg/contrib/strutl.cc:981
  #, c-format
  msgid "Selection %s not found"
  msgstr ""
@@@ -1969,7 -1929,7 +1972,7 @@@ msgstr "
  msgid "Unable to stat the mount point %s"
  msgstr ""
  
 -#: apt-pkg/contrib/cdromutl.cc:149 apt-pkg/acquire.cc:423 apt-pkg/clean.cc:44
 +#: apt-pkg/contrib/cdromutl.cc:149 apt-pkg/acquire.cc:427 apt-pkg/clean.cc:44
  #, c-format
  msgid "Unable to change to %s"
  msgstr ""
@@@ -2045,157 -2005,143 +2048,157 @@@ msgstr "
  msgid "Problem syncing the file"
  msgstr ""
  
--#: apt-pkg/pkgcache.cc:126
++#: apt-pkg/pkgcache.cc:126 apt-pkg/pkgcache.cc:137
  msgid "Empty package cache"
  msgstr ""
  
--#: apt-pkg/pkgcache.cc:132
++#: apt-pkg/pkgcache.cc:132 apt-pkg/pkgcache.cc:143
  msgid "The package cache file is corrupted"
  msgstr ""
  
--#: apt-pkg/pkgcache.cc:137
++#: apt-pkg/pkgcache.cc:137 apt-pkg/pkgcache.cc:148
  msgid "The package cache file is an incompatible version"
  msgstr ""
  
--#: apt-pkg/pkgcache.cc:142
++#: apt-pkg/pkgcache.cc:142 apt-pkg/pkgcache.cc:153
  #, c-format
  msgid "This APT does not support the versioning system '%s'"
  msgstr ""
  
--#: apt-pkg/pkgcache.cc:147
++#: apt-pkg/pkgcache.cc:147 apt-pkg/pkgcache.cc:158
  msgid "The package cache was built for a different architecture"
  msgstr ""
  
--#: apt-pkg/pkgcache.cc:218
++#: apt-pkg/pkgcache.cc:218 apt-pkg/pkgcache.cc:229
  msgid "Depends"
  msgstr ""
  
--#: apt-pkg/pkgcache.cc:218
++#: apt-pkg/pkgcache.cc:218 apt-pkg/pkgcache.cc:229
  msgid "PreDepends"
  msgstr ""
  
--#: apt-pkg/pkgcache.cc:218
++#: apt-pkg/pkgcache.cc:218 apt-pkg/pkgcache.cc:229
  msgid "Suggests"
  msgstr ""
  
--#: apt-pkg/pkgcache.cc:219
++#: apt-pkg/pkgcache.cc:219 apt-pkg/pkgcache.cc:230
  msgid "Recommends"
  msgstr ""
  
--#: apt-pkg/pkgcache.cc:219
++#: apt-pkg/pkgcache.cc:219 apt-pkg/pkgcache.cc:230
  msgid "Conflicts"
  msgstr ""
  
--#: apt-pkg/pkgcache.cc:219
++#: apt-pkg/pkgcache.cc:219 apt-pkg/pkgcache.cc:230
  msgid "Replaces"
  msgstr ""
  
--#: apt-pkg/pkgcache.cc:220
++#: apt-pkg/pkgcache.cc:220 apt-pkg/pkgcache.cc:231
  msgid "Obsoletes"
  msgstr ""
  
--#: apt-pkg/pkgcache.cc:231
++#: apt-pkg/pkgcache.cc:231 apt-pkg/pkgcache.cc:242
  msgid "important"
  msgstr ""
  
--#: apt-pkg/pkgcache.cc:231
++#: apt-pkg/pkgcache.cc:231 apt-pkg/pkgcache.cc:242
  msgid "required"
  msgstr ""
  
--#: apt-pkg/pkgcache.cc:231
++#: apt-pkg/pkgcache.cc:231 apt-pkg/pkgcache.cc:242
  msgid "standard"
  msgstr ""
  
--#: apt-pkg/pkgcache.cc:232
++#: apt-pkg/pkgcache.cc:232 apt-pkg/pkgcache.cc:243
  msgid "optional"
  msgstr ""
  
--#: apt-pkg/pkgcache.cc:232
++#: apt-pkg/pkgcache.cc:232 apt-pkg/pkgcache.cc:243
  msgid "extra"
  msgstr ""
  
 -#: apt-pkg/depcache.cc:60 apt-pkg/depcache.cc:89
 +#: apt-pkg/depcache.cc:101 apt-pkg/depcache.cc:130
  msgid "Building dependency tree"
  msgstr ""
  
 -#: apt-pkg/depcache.cc:61
 +#: apt-pkg/depcache.cc:102
  msgid "Candidate versions"
  msgstr ""
  
 -#: apt-pkg/depcache.cc:90
 +#: apt-pkg/depcache.cc:131
  msgid "Dependency generation"
  msgstr ""
  
 -#: apt-pkg/tagfile.cc:73
 +#: apt-pkg/depcache.cc:152 apt-pkg/depcache.cc:171 apt-pkg/depcache.cc:175
 +msgid "Reading state information"
 +msgstr ""
 +
 +#: apt-pkg/depcache.cc:199
 +#, c-format
 +msgid "Failed to open StateFile %s"
 +msgstr ""
 +
 +#: apt-pkg/depcache.cc:205
 +#, c-format
 +msgid "Failed to write temporary StateFile %s"
 +msgstr ""
 +
 +#: apt-pkg/tagfile.cc:85 apt-pkg/tagfile.cc:92
  #, c-format
  msgid "Unable to parse package file %s (1)"
  msgstr ""
  
 -#: apt-pkg/tagfile.cc:160
 +#: apt-pkg/tagfile.cc:186
  #, c-format
  msgid "Unable to parse package file %s (2)"
  msgstr ""
  
 -#: apt-pkg/sourcelist.cc:87
 +#: apt-pkg/sourcelist.cc:94
  #, c-format
  msgid "Malformed line %lu in source list %s (URI)"
  msgstr ""
  
 -#: apt-pkg/sourcelist.cc:89
 +#: apt-pkg/sourcelist.cc:96
  #, c-format
  msgid "Malformed line %lu in source list %s (dist)"
  msgstr ""
  
 -#: apt-pkg/sourcelist.cc:92
 +#: apt-pkg/sourcelist.cc:99
  #, c-format
  msgid "Malformed line %lu in source list %s (URI parse)"
  msgstr ""
  
 -#: apt-pkg/sourcelist.cc:98
 +#: apt-pkg/sourcelist.cc:105
  #, c-format
  msgid "Malformed line %lu in source list %s (absolute dist)"
  msgstr ""
  
 -#: apt-pkg/sourcelist.cc:105
 +#: apt-pkg/sourcelist.cc:112
  #, c-format
  msgid "Malformed line %lu in source list %s (dist parse)"
  msgstr ""
  
 -#: apt-pkg/sourcelist.cc:156
 +#: apt-pkg/sourcelist.cc:203
  #, c-format
  msgid "Opening %s"
  msgstr ""
  
- #: apt-pkg/sourcelist.cc:220 apt-pkg/cdrom.cc:426
 -#: apt-pkg/sourcelist.cc:170 apt-pkg/cdrom.cc:426
++#: apt-pkg/sourcelist.cc:220 apt-pkg/cdrom.cc:426 apt-pkg/cdrom.cc:450
  #, c-format
  msgid "Line %u too long in source list %s."
  msgstr ""
  
 -#: apt-pkg/sourcelist.cc:187
 +#: apt-pkg/sourcelist.cc:240
  #, c-format
  msgid "Malformed line %u in source list %s (type)"
  msgstr ""
  
 -#: apt-pkg/sourcelist.cc:191
 +#: apt-pkg/sourcelist.cc:244
  #, c-format
  msgid "Type '%s' is not known on line %u in source list %s"
  msgstr ""
  
 -#: apt-pkg/sourcelist.cc:199 apt-pkg/sourcelist.cc:202
 +#: apt-pkg/sourcelist.cc:252 apt-pkg/sourcelist.cc:255
  #, c-format
  msgid "Malformed line %u in source list %s (vendor id)"
  msgstr ""
@@@ -2213,19 -2159,19 +2216,19 @@@ msgstr "
  msgid "Index file type '%s' is not supported"
  msgstr ""
  
 -#: apt-pkg/algorithms.cc:241
 +#: apt-pkg/algorithms.cc:245
  #, c-format
  msgid ""
  "The package %s needs to be reinstalled, but I can't find an archive for it."
  msgstr ""
  
 -#: apt-pkg/algorithms.cc:1059
 +#: apt-pkg/algorithms.cc:1075
  msgid ""
  "Error, pkgProblemResolver::Resolve generated breaks, this may be caused by "
  "held packages."
  msgstr ""
  
 -#: apt-pkg/algorithms.cc:1061
 +#: apt-pkg/algorithms.cc:1077
  msgid "Unable to correct problems, you have held broken packages."
  msgstr ""
  
@@@ -2239,16 -2185,9 +2242,16 @@@ msgstr "
  msgid "Archive directory %spartial is missing."
  msgstr ""
  
 -#: apt-pkg/acquire.cc:817
 +#. only show the ETA if it makes sense
 +#. two days
 +#: apt-pkg/acquire.cc:823
  #, c-format
 -msgid "Downloading file %li of %li (%s remaining)"
 +msgid "Retrieving file %li of %li (%s remaining)"
 +msgstr ""
 +
 +#: apt-pkg/acquire.cc:825
 +#, c-format
 +msgid "Retrieving file %li of %li"
  msgstr ""
  
  #: apt-pkg/acquire-worker.cc:113
@@@ -2261,17 -2200,17 +2264,17 @@@ msgstr "
  msgid "Method %s did not start correctly"
  msgstr ""
  
 -#: apt-pkg/acquire-worker.cc:377
 +#: apt-pkg/acquire-worker.cc:384
  #, c-format
  msgid "Please insert the disc labeled: '%s' in the drive '%s' and press enter."
  msgstr ""
  
- #: apt-pkg/init.cc:122
 -#: apt-pkg/init.cc:119
++#: apt-pkg/init.cc:122 apt-pkg/init.cc:125
  #, c-format
  msgid "Packaging system '%s' is not supported"
  msgstr ""
  
- #: apt-pkg/init.cc:138
 -#: apt-pkg/init.cc:135
++#: apt-pkg/init.cc:138 apt-pkg/init.cc:141
  msgid "Unable to determine a suitable packaging system type"
  msgstr ""
  
@@@ -2305,82 -2244,82 +2308,83 @@@ msgstr "
  msgid "No priority (or zero) specified for pin"
  msgstr ""
  
 -#: apt-pkg/pkgcachegen.cc:74
 +#: apt-pkg/pkgcachegen.cc:76
  msgid "Cache has an incompatible versioning system"
  msgstr ""
  
 -#: apt-pkg/pkgcachegen.cc:117
 +#: apt-pkg/pkgcachegen.cc:119
  #, c-format
  msgid "Error occurred while processing %s (NewPackage)"
  msgstr ""
  
- #: apt-pkg/pkgcachegen.cc:131
 -#: apt-pkg/pkgcachegen.cc:129
++#: apt-pkg/pkgcachegen.cc:131 apt-pkg/pkgcachegen.cc:134
  #, c-format
  msgid "Error occurred while processing %s (UsePackage1)"
  msgstr ""
  
- #: apt-pkg/pkgcachegen.cc:152
 -#: apt-pkg/pkgcachegen.cc:150
++#: apt-pkg/pkgcachegen.cc:152 apt-pkg/pkgcachegen.cc:182
  #, c-format
  msgid "Error occurred while processing %s (UsePackage2)"
  msgstr ""
  
- #: apt-pkg/pkgcachegen.cc:156
 -#: apt-pkg/pkgcachegen.cc:154
++#: apt-pkg/pkgcachegen.cc:156 apt-pkg/pkgcachegen.cc:186
  #, c-format
  msgid "Error occurred while processing %s (NewFileVer1)"
  msgstr ""
  
- #: apt-pkg/pkgcachegen.cc:186
 -#: apt-pkg/pkgcachegen.cc:184
++#: apt-pkg/pkgcachegen.cc:186 apt-pkg/pkgcachegen.cc:217
  #, c-format
  msgid "Error occurred while processing %s (NewVersion1)"
  msgstr ""
  
- #: apt-pkg/pkgcachegen.cc:190
 -#: apt-pkg/pkgcachegen.cc:188
++#: apt-pkg/pkgcachegen.cc:190 apt-pkg/pkgcachegen.cc:221
  #, c-format
  msgid "Error occurred while processing %s (UsePackage3)"
  msgstr ""
  
- #: apt-pkg/pkgcachegen.cc:194
 -#: apt-pkg/pkgcachegen.cc:192
++#: apt-pkg/pkgcachegen.cc:194 apt-pkg/pkgcachegen.cc:225
  #, c-format
  msgid "Error occurred while processing %s (NewVersion2)"
  msgstr ""
  
- #: apt-pkg/pkgcachegen.cc:209
 -#: apt-pkg/pkgcachegen.cc:207
++#: apt-pkg/pkgcachegen.cc:209 apt-pkg/pkgcachegen.cc:255
  msgid "Wow, you exceeded the number of package names this APT is capable of."
  msgstr ""
  
- #: apt-pkg/pkgcachegen.cc:212
 -#: apt-pkg/pkgcachegen.cc:210
++#: apt-pkg/pkgcachegen.cc:212 apt-pkg/pkgcachegen.cc:258
  msgid "Wow, you exceeded the number of versions this APT is capable of."
  msgstr ""
  
- #: apt-pkg/pkgcachegen.cc:215
 -#: apt-pkg/pkgcachegen.cc:213
++#: apt-pkg/pkgcachegen.cc:215 apt-pkg/pkgcachegen.cc:264
  msgid "Wow, you exceeded the number of dependencies this APT is capable of."
  msgstr ""
  
- #: apt-pkg/pkgcachegen.cc:243
 -#: apt-pkg/pkgcachegen.cc:241
++#: apt-pkg/pkgcachegen.cc:243 apt-pkg/pkgcachegen.cc:292
  #, c-format
  msgid "Error occurred while processing %s (FindPkg)"
  msgstr ""
  
- #: apt-pkg/pkgcachegen.cc:256
 -#: apt-pkg/pkgcachegen.cc:254
++#: apt-pkg/pkgcachegen.cc:256 apt-pkg/pkgcachegen.cc:305
  #, c-format
  msgid "Error occurred while processing %s (CollectFileProvides)"
  msgstr ""
  
- #: apt-pkg/pkgcachegen.cc:262
 -#: apt-pkg/pkgcachegen.cc:260
++#: apt-pkg/pkgcachegen.cc:262 apt-pkg/pkgcachegen.cc:311
  #, c-format
  msgid "Package %s %s was not found while processing file dependencies"
  msgstr ""
  
- #: apt-pkg/pkgcachegen.cc:577
 -#: apt-pkg/pkgcachegen.cc:574
++#: apt-pkg/pkgcachegen.cc:577 apt-pkg/pkgcachegen.cc:682
  #, c-format
  msgid "Couldn't stat source package list %s"
  msgstr ""
  
- #: apt-pkg/pkgcachegen.cc:662
 -#: apt-pkg/pkgcachegen.cc:658
++#: apt-pkg/pkgcachegen.cc:662 apt-pkg/pkgcachegen.cc:767
  msgid "Collecting File Provides"
  msgstr ""
  
 -#: apt-pkg/pkgcachegen.cc:785 apt-pkg/pkgcachegen.cc:792
 +#: apt-pkg/pkgcachegen.cc:789 apt-pkg/pkgcachegen.cc:796
++#: apt-pkg/pkgcachegen.cc:894 apt-pkg/pkgcachegen.cc:901
  msgid "IO Error saving source cache"
  msgstr ""
  
  msgid "rename failed, %s (%s -> %s)."
  msgstr ""
  
 -#: apt-pkg/acquire-item.cc:236 apt-pkg/acquire-item.cc:908
 +#: apt-pkg/acquire-item.cc:236 apt-pkg/acquire-item.cc:951
++#: apt-pkg/acquire-item.cc:980
  msgid "MD5Sum mismatch"
  msgstr ""
  
- #: apt-pkg/acquire-item.cc:646
 -#: apt-pkg/acquire-item.cc:722
++#: apt-pkg/acquire-item.cc:646 apt-pkg/acquire-item.cc:675
 +msgid "There are no public key available for the following key IDs:\n"
 +msgstr ""
 +
- #: apt-pkg/acquire-item.cc:759
++#: apt-pkg/acquire-item.cc:759 apt-pkg/acquire-item.cc:788
  #, c-format
  msgid ""
  "I wasn't able to locate a file for the %s package. This might mean you need "
  "to manually fix this package. (due to missing arch)"
  msgstr ""
  
- #: apt-pkg/acquire-item.cc:818
 -#: apt-pkg/acquire-item.cc:775
++#: apt-pkg/acquire-item.cc:818 apt-pkg/acquire-item.cc:847
  #, c-format
  msgid ""
  "I wasn't able to locate file for the %s package. This might mean you need to "
  "manually fix this package."
  msgstr ""
  
- #: apt-pkg/acquire-item.cc:854
 -#: apt-pkg/acquire-item.cc:811
++#: apt-pkg/acquire-item.cc:854 apt-pkg/acquire-item.cc:883
  #, c-format
  msgid ""
  "The package index files are corrupted. No Filename: field for package %s."
  msgstr ""
  
- #: apt-pkg/acquire-item.cc:941
 -#: apt-pkg/acquire-item.cc:898
++#: apt-pkg/acquire-item.cc:941 apt-pkg/acquire-item.cc:970
  msgid "Size mismatch"
  msgstr ""
  
  msgid "Vendor block %s contains no fingerprint"
  msgstr ""
  
--#: apt-pkg/cdrom.cc:507
++#: apt-pkg/cdrom.cc:507 apt-pkg/cdrom.cc:531
  #, c-format
  msgid ""
  "Using CD-ROM mount point %s\n"
  "Mounting CD-ROM\n"
  msgstr ""
  
--#: apt-pkg/cdrom.cc:516 apt-pkg/cdrom.cc:598
++#: apt-pkg/cdrom.cc:516 apt-pkg/cdrom.cc:598 apt-pkg/cdrom.cc:540
++#: apt-pkg/cdrom.cc:622
  msgid "Identifying.. "
  msgstr ""
  
--#: apt-pkg/cdrom.cc:541
++#: apt-pkg/cdrom.cc:541 apt-pkg/cdrom.cc:565
  #, c-format
  msgid "Stored label: %s \n"
  msgstr ""
  
--#: apt-pkg/cdrom.cc:561
++#: apt-pkg/cdrom.cc:561 apt-pkg/cdrom.cc:585
  #, c-format
  msgid "Using CD-ROM mount point %s\n"
  msgstr ""
  
--#: apt-pkg/cdrom.cc:579
++#: apt-pkg/cdrom.cc:579 apt-pkg/cdrom.cc:603
  msgid "Unmounting CD-ROM\n"
  msgstr ""
  
--#: apt-pkg/cdrom.cc:583
++#: apt-pkg/cdrom.cc:583 apt-pkg/cdrom.cc:607
  msgid "Waiting for disc...\n"
  msgstr ""
  
  #. Mount the new CDROM
--#: apt-pkg/cdrom.cc:591
++#: apt-pkg/cdrom.cc:591 apt-pkg/cdrom.cc:615
  msgid "Mounting CD-ROM...\n"
  msgstr ""
  
--#: apt-pkg/cdrom.cc:609
++#: apt-pkg/cdrom.cc:609 apt-pkg/cdrom.cc:633
  msgid "Scanning disc for index files..\n"
  msgstr ""
  
  msgid "Found %i package indexes, %i source indexes and %i signatures\n"
  msgstr ""
  
--#: apt-pkg/cdrom.cc:710
++#: apt-pkg/cdrom.cc:710 apt-pkg/cdrom.cc:737
  msgid "That is not a valid name, try again.\n"
  msgstr ""
  
--#: apt-pkg/cdrom.cc:726
++#: apt-pkg/cdrom.cc:726 apt-pkg/cdrom.cc:753
  #, c-format
  msgid ""
  "This disc is called: \n"
  "'%s'\n"
  msgstr ""
  
--#: apt-pkg/cdrom.cc:730
++#: apt-pkg/cdrom.cc:730 apt-pkg/cdrom.cc:757
  msgid "Copying package lists..."
  msgstr ""
  
--#: apt-pkg/cdrom.cc:754
++#: apt-pkg/cdrom.cc:754 apt-pkg/cdrom.cc:783
  msgid "Writing new source list\n"
  msgstr ""
  
--#: apt-pkg/cdrom.cc:763
++#: apt-pkg/cdrom.cc:763 apt-pkg/cdrom.cc:792
  msgid "Source list entries for this disc are:\n"
  msgstr ""
  
--#: apt-pkg/cdrom.cc:803
++#: apt-pkg/cdrom.cc:803 apt-pkg/cdrom.cc:832
  msgid "Unmounting CD-ROM..."
  msgstr ""
  
--#: apt-pkg/indexcopy.cc:261
++#: apt-pkg/indexcopy.cc:261 apt-pkg/indexcopy.cc:263 apt-pkg/indexcopy.cc:830
  #, c-format
  msgid "Wrote %i records.\n"
  msgstr ""
  
--#: apt-pkg/indexcopy.cc:263
++#: apt-pkg/indexcopy.cc:263 apt-pkg/indexcopy.cc:265 apt-pkg/indexcopy.cc:832
  #, c-format
  msgid "Wrote %i records with %i missing files.\n"
  msgstr ""
  
--#: apt-pkg/indexcopy.cc:266
++#: apt-pkg/indexcopy.cc:266 apt-pkg/indexcopy.cc:268 apt-pkg/indexcopy.cc:835
  #, c-format
  msgid "Wrote %i records with %i mismatched files\n"
  msgstr ""
  
--#: apt-pkg/indexcopy.cc:269
++#: apt-pkg/indexcopy.cc:269 apt-pkg/indexcopy.cc:271 apt-pkg/indexcopy.cc:838
  #, c-format
  msgid "Wrote %i records with %i missing files and %i mismatched files\n"
  msgstr ""
@@@ -2558,14 -2493,14 +2564,35 @@@ msgstr "
  
  #: apt-pkg/deb/dpkgpm.cc:378
  #, c-format
 -msgid "Preparing for remove with config %s"
 +msgid "Preparing to completely remove %s"
  msgstr ""
  
  #: apt-pkg/deb/dpkgpm.cc:379
  #, c-format
 -msgid "Removed with config %s"
 +msgid "Completely removed %s"
  msgstr ""
  
  #: methods/rsh.cc:330
  msgid "Connection closed prematurely"
  msgstr ""
++
++#: apt-pkg/pkgcachegen.cc:157
++#, c-format
++msgid "Error occured while processing %s (NewFileDesc1)"
++msgstr ""
++
++#: apt-pkg/pkgcachegen.cc:249
++#, c-format
++msgid "Error occured while processing %s (NewFileDesc2)"
++msgstr ""
++
++#: apt-pkg/pkgcachegen.cc:261
++msgid "Wow, you exceeded the number of descriptions this APT is capable of."
++msgstr ""
++
++#: apt-pkg/cdrom.cc:673
++#, c-format
++msgid ""
++"Found %i package indexes, %i source indexes, %i translation indexes and %i "
++"signatures\n"
++msgstr ""