]> git.saurik.com Git - apt.git/commitdiff
* apt-pkg/acquire.cc:
authorMichael Vogt <michael.vogt@ubuntu.com>
Tue, 21 Jul 2009 14:05:52 +0000 (16:05 +0200)
committerMichael Vogt <michael.vogt@ubuntu.com>
Tue, 21 Jul 2009 14:05:52 +0000 (16:05 +0200)
  - make the max pipeline depth of the acquire queue configurable
    via Acquire::Max-Pipeline-Depth
* apt-pkg/deb/dpkgpm.cc:
  - add Dpkg::UseIoNice boolean option to run dpkg with ionice -c3
    (off by default)
  - send "dpkg-exec" message on the status fd when dpkg is run
  - provide DPkg::Chroot-Directory config option (useful for testing)
  - fix potential hang when in a backgroud process group
* apt-pkg/algorithms.cc:
  - consider recommends when making the scores for the problem
    resolver
* apt-pkg/acquire-worker.cc:
  - show error details of failed methods
* apt-pkg/contrib/fileutl.cc:
  - if a process aborts with signal, show signal number
* methods/http.cc:
  - ignore SIGPIPE, we deal with EPIPE from write in
    HttpMethod::ServerDie() (LP: #385144)
* apt-pkg/indexcopy.cc:
  - support having CDs with no Packages file (just a Packages.gz)
    by not forcing a verification on non-existing files
   (LP: #255545)
  - remove the gettext from a string that consists entirely
    of variables (LP: #56792)
* apt-pkg/cacheiterators.h:
  - add missing checks for Owner == 0 in end()
* apt-pkg/indexrecords.cc:
  - fix some i18n issues
* apt-pkg/contrib/strutl.h:
  - add new strprintf() function to make i18n strings easier
  - fix compiler warning
* apt-pkg/deb/debsystem.cc:
  - make strings i18n able
* fix problematic use of tolower() when calculating the version
  hash by using locale independant tolower_ascii() function.
  Thanks to M. Vefa Bicakci (LP: #80248)
* build fixes for g++-4.4
* cmdline/apt-mark:
  - add "showauto" option to show automatically installed packages
* document --install-recommends and --no-install-recommends
  (thanks to Dereck Wonnacott, LP: #126180)
* Updated cron script to support backups by hardlinks and
  verbose levels.  All features turned off by default.
* Added more error handlings.  Closes: #438803, #462734, #454989,
* Refactored condition structure to make download and upgrade performed
  if only previous steps succeeded. Closes: #341970
* Documented all cron script related configuration items in
  configure-index.
* apt-ftparchive might write corrupt Release files (LP: #46439)
* Apply --important option to apt-cache depends (LP: #16947)

14 files changed:
1  2 
apt-pkg/acquire.cc
apt-pkg/algorithms.cc
apt-pkg/cacheiterators.h
apt-pkg/contrib/strutl.cc
apt-pkg/contrib/strutl.h
apt-pkg/deb/deblistparser.cc
apt-pkg/deb/debsystem.cc
apt-pkg/pkgcache.cc
cmdline/apt-cache.cc
debian/apt.cron.daily
debian/changelog
doc/apt-get.8.xml
doc/examples/configure-index
po/apt-all.pot

diff --combined apt-pkg/acquire.cc
index daea234d3751486bdec7c0495be84c4821103a70,bafba337e6e551263adc5342331dc6eac2dd842a..c1f6581e2c4cb066572309e355797c8c4ad9d670
@@@ -24,7 -24,8 +24,8 @@@
  
  #include <iostream>
  #include <sstream>
-     
+ #include <stdio.h>
  #include <dirent.h>
  #include <sys/time.h>
  #include <errno.h>
@@@ -265,7 -266,7 +266,7 @@@ pkgAcquire::MethodConfig *pkgAcquire::G
        return 0;
  
     /* if a method uses DownloadLimit, we switch to SingleInstance mode */
 -   if(_config->FindI("Acquire::"+Access+"::DlLimit",0) > 0)
 +   if(_config->FindI("Acquire::"+Access+"::Dl-Limit",0) > 0)
        Conf->SingleInstance = true;
      
     return Conf;
@@@ -620,7 -621,7 +621,7 @@@ bool pkgAcquire::Queue::Startup(
           added other source retry to have cycle maintain a pipeline depth
           on its own. */
        if (Cnf->Pipeline == true)
-        MaxPipeDepth = 1000;
+        MaxPipeDepth = _config->FindI("Acquire::Max-Pipeline-Depth",10);
        else
         MaxPipeDepth = 1;
     }
diff --combined apt-pkg/algorithms.cc
index 2ad0643199fac6f034a3f554a9c97012a4d57791,b6f4705f33665e26ac367cb501c6af2ef03f8d24..1fd3d39a4dd9ad967decfaf2203fa2bf429bb878
@@@ -489,34 -489,6 +489,36 @@@ void pkgProblemResolver::MakeScores(
     unsigned long Size = Cache.Head().PackageCount;
     memset(Scores,0,sizeof(*Scores)*Size);
  
 +   // Important Required Standard Optional Extra
 +   signed short PrioMap[] = {
 +      0,
 +      _config->FindI("pkgProblemResolver::Scores::Important",3),
 +      _config->FindI("pkgProblemResolver::Scores::Required",2),
 +      _config->FindI("pkgProblemResolver::Scores::Standard",1),
 +      _config->FindI("pkgProblemResolver::Scores::Optional",-1),
 +      _config->FindI("pkgProblemResolver::Scores::Extra",-2)
 +   };
 +   signed short PrioEssentials = _config->FindI("pkgProblemResolver::Scores::Essentials",100);
 +   signed short PrioInstalledAndNotObsolete = _config->FindI("pkgProblemResolver::Scores::NotObsolete",1);
 +   signed short PrioDepends = _config->FindI("pkgProblemResolver::Scores::Depends",1);
++   signed short PrioRecommends = _config->FindI("pkgProblemResolver::Scores::Recommends",1);
 +   signed short AddProtected = _config->FindI("pkgProblemResolver::Scores::AddProtected",10000);
 +   signed short AddEssential = _config->FindI("pkgProblemResolver::Scores::AddEssential",5000);
 +
 +   if (_config->FindB("Debug::pkgProblemResolver::ShowScores",false) == true)
 +      clog << "Settings used to calculate pkgProblemResolver::Scores::" << endl
 +         << "  Important => " << PrioMap[1] << endl
 +         << "  Required => " << PrioMap[2] << endl
 +         << "  Standard => " << PrioMap[3] << endl
 +         << "  Optional => " << PrioMap[4] << endl
 +         << "  Extra => " << PrioMap[5] << endl
 +         << "  Essentials => " << PrioEssentials << endl
 +         << "  InstalledAndNotObsolete => " << PrioInstalledAndNotObsolete << endl
 +         << "  Depends => " << PrioDepends << endl
++         << "  Recommends => " << PrioRecommends << endl
 +         << "  AddProtected => " << AddProtected << endl
 +         << "  AddEssential => " << AddEssential << endl;
 +
     // Generate the base scores for a package based on its properties
     for (pkgCache::PkgIterator I = Cache.PkgBegin(); I.end() == false; I++)
     {
         to allow an obsolete essential packages to be removed by
         a conflicts on a powerfull normal package (ie libc6) */
        if ((I->Flags & pkgCache::Flag::Essential) == pkgCache::Flag::Essential)
 -       Score += 100;
 +       Score += PrioEssentials;
  
        // We transform the priority
 -      // Important Required Standard Optional Extra
 -      signed short PrioMap[] = {0,3,2,1,-1,-2};
        if (Cache[I].InstVerIter(Cache)->Priority <= 5)
         Score += PrioMap[Cache[I].InstVerIter(Cache)->Priority];
        
         if those are not obsolete
        */
        if (I->CurrentVer != 0 && Cache[I].CandidateVer != 0 && Cache[I].CandidateVerIter(Cache).Downloadable())
 -       Score += 1;
 +       Score += PrioInstalledAndNotObsolete;
     }
  
     // Now that we have the base scores we go and propogate dependencies
        
        for (pkgCache::DepIterator D = Cache[I].InstVerIter(Cache).DependsList(); D.end() == false; D++)
        {
-        if (D->Type == pkgCache::Dep::Depends || D->Type == pkgCache::Dep::PreDepends)
-           Scores[D.TargetPkg()->ID]+= PrioDepends;
+        if (D->Type == pkgCache::Dep::Depends || 
 -           D->Type == pkgCache::Dep::PreDepends || 
 -           D->Type == pkgCache::Dep::Recommends) 
 -          Scores[D.TargetPkg()->ID]++;
++           D->Type == pkgCache::Dep::PreDepends)
++          Scores[D.TargetPkg()->ID] += PrioDepends;
++       else if (D->Type == pkgCache::Dep::Recommends)
++          Scores[D.TargetPkg()->ID] += PrioRecommends;
        }
     }   
     
        {
         // Only do it for the install version
         if ((pkgCache::Version *)D.ParentVer() != Cache[D.ParentPkg()].InstallVer ||
-            (D->Type != pkgCache::Dep::Depends && D->Type != pkgCache::Dep::PreDepends))
+            (D->Type != pkgCache::Dep::Depends && 
+             D->Type != pkgCache::Dep::PreDepends &&
+             D->Type != pkgCache::Dep::Recommends))
            continue;    
         
         Scores[I->ID] += abs(OldScores[D.ParentPkg()->ID]);
     for (pkgCache::PkgIterator I = Cache.PkgBegin(); I.end() == false; I++)
     {
        if ((Flags[I->ID] & Protected) != 0)
 -       Scores[I->ID] += 10000;
 +       Scores[I->ID] += AddProtected;
        if ((I->Flags & pkgCache::Flag::Essential) == pkgCache::Flag::Essential)
 -       Scores[I->ID] += 5000;
 -   }   
 +       Scores[I->ID] += AddEssential;
 +   }
  }
                                                                        /*}}}*/
  // ProblemResolver::DoUpgrade - Attempt to upgrade this package               /*{{{*/
@@@ -777,21 -755,19 +784,21 @@@ bool pkgProblemResolver::Resolve(bool B
        *PEnd++ = I;
     This = this;
     qsort(PList,PEnd - PList,sizeof(*PList),&ScoreSort);
 -   
 -/* for (pkgCache::Package **K = PList; K != PEnd; K++)
 -      if (Scores[(*K)->ID] != 0)
 -      {
 -       pkgCache::PkgIterator Pkg(Cache,*K);
 -       clog << Scores[(*K)->ID] << ' ' << Pkg.Name() <<
 -          ' ' << (pkgCache::Version *)Pkg.CurrentVer() << ' ' << 
 -          Cache[Pkg].InstallVer << ' ' << Cache[Pkg].CandidateVer << endl;
 -      } */
 +
 +   if (_config->FindB("Debug::pkgProblemResolver::ShowScores",false) == true)
 +   {
 +      clog << "Show Scores" << endl;
 +      for (pkgCache::Package **K = PList; K != PEnd; K++)
 +         if (Scores[(*K)->ID] != 0)
 +         {
 +           pkgCache::PkgIterator Pkg(Cache,*K);
 +           clog << Scores[(*K)->ID] << ' ' << Pkg << std::endl;
 +         }
 +   }
  
     if (Debug == true)
        clog << "Starting 2" << endl;
 -   
 +
     /* Now consider all broken packages. For each broken package we either
        remove the package or fix it's problem. We do this once, it should
        not be possible for a loop to form (that is a < b < c and fixing b by
            }
            
            if (Debug == true)
 -             clog << "Package " << I.Name() << " has broken dep on " << Start.TargetPkg().Name() << endl;
 +             clog << "Package " << I.Name() << " has broken " << Start.DepType() << " on " << Start.TargetPkg().Name() << endl;
  
            /* Look across the version list. If there are no possible
               targets then we keep the package and bail. This is necessary
                        // Consider other options
                        if (InOr == false)
                        {
 -                         if (Debug == true)
 -                            clog << "  Removing " << I.Name() << " rather than change " << Start.TargetPkg().Name() << endl;
 -                         Cache.MarkDelete(I);
 -                         if (Counter > 1)
 +                         if (Cache.AutoInstOk(I, Cache[I].CandidateVerIter(Cache),Start) == true)
                           {
 -                            if (Scores[Pkg->ID] > Scores[I->ID])
 -                               Scores[I->ID] = Scores[Pkg->ID];
 -                         }                       
 -                      }                       
 +                            if (Debug == true)
 +                               clog << "  Removing " << I.Name() << " rather than change " << Start.TargetPkg().Name() << endl;
 +                            Cache.MarkDelete(I);
 +                            if (Counter > 1)
 +                            {
 +                               if (Scores[Pkg->ID] > Scores[I->ID])
 +                                  Scores[I->ID] = Scores[Pkg->ID];
 +                            }
 +                         } else {
 +                            /* The dependency of the TargetPkg would be satisfiable with I but it is
 +                               forbidden to install I automatical, so anything we can do is hold
 +                               back the TargetPkg.
 +                            */
 +                            if (Debug == true)
 +                               clog << "  Hold back " << Start.TargetPkg().Name() <<
 +                                      " rather than change denied AutoInstall " << I.Name() << endl;
 +                            Cache.MarkKeep(Start.TargetPkg());
 +                         }
 +                      }
                     }
                  }
                                  
@@@ -1177,6 -1141,9 +1184,6 @@@ bool pkgProblemResolver::ResolveByKeep(
  
     unsigned long Size = Cache.Head().PackageCount;
  
 -   if (Debug == true)      
 -      clog << "Entering ResolveByKeep" << endl;
 -   
     MakeScores();
     
     /* We have to order the packages so that the broken fixing pass 
        *PEnd++ = I;
     This = this;
     qsort(PList,PEnd - PList,sizeof(*PList),&ScoreSort);
 -   
 +
 +   if (_config->FindB("Debug::pkgProblemResolver::ShowScores",false) == true)
 +   {
 +      clog << "Show Scores" << endl;
 +      for (pkgCache::Package **K = PList; K != PEnd; K++)
 +         if (Scores[(*K)->ID] != 0)
 +         {
 +           pkgCache::PkgIterator Pkg(Cache,*K);
 +           clog << Scores[(*K)->ID] << ' ' << Pkg << std::endl;
 +         }
 +   }
 +
 +   if (Debug == true)
 +      clog << "Entering ResolveByKeep" << endl;
 +
     // Consider each broken package 
     pkgCache::Package **LastStop = 0;
     for (pkgCache::Package **K = PList; K != PEnd; K++)
         while (true)
         {
            if (Debug == true)
 -             clog << "Package " << I.Name() << " has broken dep on " << Start.TargetPkg().Name() << endl;
 -          
 +             clog << "Package " << I.Name() << " has broken " << Start.DepType() << " on " << Start.TargetPkg().Name() << endl;
 +
            // Look at all the possible provides on this package
            SPtrArray<pkgCache::Version *> VList = Start.AllTargets();
            for (pkgCache::Version **V = VList; *V != 0; V++)
               if ((Flags[I->ID] & Protected) == 0)
               {
                  if (Debug == true)
 -                   clog << "  Keeping Package " << Pkg.Name() << " due to dep" << endl;
 +                   clog << "  Keeping Package " << Pkg.Name() << " due to " << Start.DepType() << endl;
                  Cache.MarkKeep(Pkg, false, false);
               }
               
diff --combined apt-pkg/cacheiterators.h
index cf79b3a6b62fb7a646155bae92cf76046417c4a0,bbbcb7753d60e04d9fa56ea4f027486aa0c8eb37..af21681edf2f2dce79b455b3f0e09c8ce682dedb
@@@ -80,13 -80,7 +80,13 @@@ class pkgCache::PkgIterato
     inline PrvIterator ProvidesList() const;
     inline unsigned long Index() const {return Pkg - Owner->PkgP;};
     OkState State() const;
 -   
 +
 +   //Nice printable representation
 +   friend std::ostream& operator<<(std::ostream& out, pkgCache::PkgIterator Pkg);
 +
 +   const char *CandVersion() const;
 +   const char *CurVersion() const;
 +
     // Constructors
     inline PkgIterator(pkgCache &Owner,Package *Trg) : Pkg(Trg), Owner(&Owner),
            HashIndex(0) 
@@@ -110,17 -104,14 +110,17 @@@ class pkgCache::VerIterato
     // Iteration
     void operator ++(int) {if (Ver != Owner->VerP) Ver = Owner->VerP + Ver->NextVer;};
     inline void operator ++() {operator ++(0);};
-    inline bool end() const {return Owner == NULL || (Ver == Owner->VerP?true:false);};
+    inline bool end() const {return Owner == 0 || (Ver == Owner->VerP?true:false);};
     inline void operator =(const VerIterator &B) {Ver = B.Ver; Owner = B.Owner;};
     
     // Comparison
     inline bool operator ==(const VerIterator &B) const {return Ver == B.Ver;};
     inline bool operator !=(const VerIterator &B) const {return Ver != B.Ver;};
     int CompareVer(const VerIterator &B) const;
 -   
 +
 +   // Testing
 +   inline bool IsGood() const { return Ver && Owner && ! end();};
 +
     // Accessors
     inline Version *operator ->() {return Ver;};
     inline Version const *operator ->() const {return Ver;};
@@@ -169,7 -160,7 +169,7 @@@ class pkgCache::DescIterato
     // 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 bool end() const {return Owner == 0 || Desc == Owner->DescP?true:false;};
     inline void operator =(const DescIterator &B) {Desc = B.Desc; Owner = B.Owner;};
     
     // Comparison
@@@ -323,7 -314,7 +323,7 @@@ class pkgCache::PkgFileIterato
     // Iteration
     void operator ++(int) {if (File!= Owner->PkgFileP) File = Owner->PkgFileP + File->NextFile;};
     inline void operator ++() {operator ++(0);};
-    inline bool end() const {return File == Owner->PkgFileP?true:false;};
+    inline bool end() const {return Owner == 0 || File == Owner->PkgFileP?true:false;};
  
     // Comparison
     inline bool operator ==(const PkgFileIterator &B) const {return File == B.File;};
     inline const char *Component() const {return File->Component == 0?0:Owner->StrP + File->Component;};
     inline const char *Version() const {return File->Version == 0?0:Owner->StrP + File->Version;};
     inline const char *Origin() const {return File->Origin == 0?0:Owner->StrP + File->Origin;};
 +   inline const char *Codename() const {return File->Codename ==0?0:Owner->StrP + File->Codename;};
     inline const char *Label() const {return File->Label == 0?0:Owner->StrP + File->Label;};
     inline const char *Site() const {return File->Site == 0?0:Owner->StrP + File->Site;};
     inline const char *Architecture() const {return File->Architecture == 0?0:Owner->StrP + File->Architecture;};
@@@ -370,7 -360,7 +370,7 @@@ class pkgCache::VerFileIterato
     // Iteration
     void operator ++(int) {if (FileP != Owner->VerFileP) FileP = Owner->VerFileP + FileP->NextFile;};
     inline void operator ++() {operator ++(0);};
-    inline bool end() const {return FileP == Owner->VerFileP?true:false;};
+    inline bool end() const {return Owner == 0 || FileP == Owner->VerFileP?true:false;};
  
     // Comparison
     inline bool operator ==(const VerFileIterator &B) const {return FileP == B.FileP;};
@@@ -402,7 -392,7 +402,7 @@@ class pkgCache::DescFileIterato
     // 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;};
+    inline bool end() const {return Owner == 0 ||  FileP == Owner->DescFileP?true:false;};
  
     // Comparison
     inline bool operator ==(const DescFileIterator &B) const {return FileP == B.FileP;};
index 61c582b85f0cc17567960aa1a3d509576f725867,0b1bc3c98d6667fa54f437a85589bf31a3a9d918..a991b8988472a7c6c5afe370004b1fe8514e19f6
@@@ -387,17 -387,6 +387,17 @@@ string SubstVar(string Str,const struc
     return Str;
  }
                                                                        /*}}}*/
 +// OutputInDepth - return a string with separator multiplied with depth /*{{{*/
 +// ---------------------------------------------------------------------
 +/* Returns a string with the supplied separator depth + 1 times in it */
 +std::string OutputInDepth(const unsigned long Depth, const char* Separator)
 +{
 +   std::string output = "";
 +   for(unsigned long d=Depth+1; d > 0; d--)
 +      output.append(Separator);
 +   return output;
 +}
 +                                                                      /*}}}*/
  // URItoFileName - Convert the uri into a unique file name            /*{{{*/
  // ---------------------------------------------------------------------
  /* This converts a URI into a safe filename. It quotes all unsafe characters
@@@ -1042,11 -1031,26 +1042,26 @@@ void ioprintf(ostream &out,const char *
     va_start(args,format);
     
     // sprintf the description
-    char S[400];
+    char S[4096];
     vsnprintf(S,sizeof(S),format,args);
     out << S;
  }
                                                                        /*}}}*/
+ // strprintf - C format string outputter to C++ strings               /*{{{*/
+ // ---------------------------------------------------------------------
+ /* This is used to make the internationalization strings easier to translate
+    and to allow reordering of parameters */
+ void strprintf(string &out,const char *format,...) 
+ {
+    va_list args;
+    va_start(args,format);
+    
+    // sprintf the description
+    char S[4096];
+    vsnprintf(S,sizeof(S),format,args);
+    out = string(S);
+ }
+                                                                       /*}}}*/
  // safe_snprintf - Safer snprintf                                     /*{{{*/
  // ---------------------------------------------------------------------
  /* This is a snprintf that will never (ever) go past 'End' and returns a
@@@ -1070,6 -1074,17 +1085,17 @@@ char *safe_snprintf(char *Buffer,char *
  }
                                                                        /*}}}*/
  
+ // tolower_ascii - tolower() function that ignores the locale         /*{{{*/
+ // ---------------------------------------------------------------------
+ /* */
+ int tolower_ascii(int c)
+ {
+    if (c >= 'A' and c <= 'Z')
+       return c + 32;
+    return c;
+ }
+                                                                       /*}}}*/
  // CheckDomainList - See if Host is in a , seperate list              /*{{{*/
  // ---------------------------------------------------------------------
  /* The domain list is a comma seperate list of domains that are suffix
diff --combined apt-pkg/contrib/strutl.h
index 2450bd421b899214f6ffe47a3ac9548ff157240f,51416a24abc40c618b4fcca3420c74419e2adb4b..e1f9e3a1f3fc3269425ed899b290552dc4fd9269
@@@ -48,7 -48,6 +48,7 @@@ string DeQuoteString(const string &Str)
  string SizeToStr(double Bytes);
  string TimeToStr(unsigned long Sec);
  string Base64Encode(const string &Str);
 +string OutputInDepth(const unsigned long Depth, const char* Separator="  ");
  string URItoFileName(const string &URI);
  string TimeRFC1123(time_t Date);
  bool StrToTime(const string &Val,time_t &Result);
@@@ -60,8 -59,10 +60,10 @@@ bool Hex2Num(const string &Str,unsigne
  bool TokSplitString(char Tok,char *Input,char **List,
                    unsigned long ListMax);
  void ioprintf(ostream &out,const char *format,...) APT_FORMAT2;
+ void strprintf(string &out,const char *format,...) APT_FORMAT2;
  char *safe_snprintf(char *Buffer,char *End,const char *Format,...) APT_FORMAT3;
  bool CheckDomainList(const string &Host, const string &List);
+ int tolower_ascii(int c);
  
  #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));}; \
index b2b8b8fb664faf3847fe4cf8caafd68b18ff9f4a,55ba1f8c4baf9ad3a92aa74ab4fe078cd4575f98..517b771a5adb27db816073b07531834b33d429dd
@@@ -109,8 -109,6 +109,8 @@@ bool debListParser::NewVersion(pkgCache
        return false;
     if (ParseDepends(Ver,"Replaces",pkgCache::Dep::Replaces) == false)
        return false;
 +   if (ParseDepends(Ver,"Enhances",pkgCache::Dep::Enhances) == false)
 +      return false;
  
     // Obsolete.
     if (ParseDepends(Ver,"Optional",pkgCache::Dep::Suggests) == false)
@@@ -215,7 -213,7 +215,7 @@@ unsigned short debListParser::VersionHa
        for (; Start != End; Start++)
        {
         if (isspace(*Start) == 0)
-           *I++ = tolower(*Start);
+           *I++ = tolower_ascii(*Start);
         if (*Start == '<' && Start[1] != '<' && Start[1] != '=')
            *I++ = '=';
         if (*Start == '>' && Start[1] != '>' && Start[1] != '=')
@@@ -639,8 -637,6 +639,8 @@@ bool debListParser::LoadReleaseInfo(pkg
        FileI->Version = WriteUniqString(Start,Stop - Start);
     if (Section.Find("Origin",Start,Stop) == true)
        FileI->Origin = WriteUniqString(Start,Stop - Start);
 +   if (Section.Find("Codename",Start,Stop) == true)
 +      FileI->Codename = WriteUniqString(Start,Stop - Start);
     if (Section.Find("Label",Start,Stop) == true)
        FileI->Label = WriteUniqString(Start,Stop - Start);
     if (Section.Find("Architecture",Start,Stop) == true)
diff --combined apt-pkg/deb/debsystem.cc
index ccd45d51bd9638acf8024527b2ad5301ba2db440,82464d998e6e8395055f054433c0297fd85d9c9e..59f826d96ea2bdd722500798ee48d98d82f07bfa
@@@ -17,8 -17,8 +17,8 @@@
  #include <apt-pkg/configuration.h>
  #include <apt-pkg/error.h>
  #include <apt-pkg/fileutl.h>
 -#include <apti18n.h>    
 -
 +#include <apti18n.h>
 +    
  #include <sys/types.h>
  #include <unistd.h>
  #include <dirent.h>
@@@ -67,11 -67,11 +67,11 @@@ bool debSystem::Lock(
     if (LockFD == -1)
     {
        if (errno == EACCES || errno == EAGAIN)
-        return _error->Error("Unable to lock the administration directory (%s), "
-                             "is another process using it?",AdminDir.c_str());
+        return _error->Error(_("Unable to lock the administration directory (%s), "
+                               "is another process using it?"),AdminDir.c_str());
        else
-        return _error->Error("Unable to lock the administration directory (%s), "
-                             "are you root?",AdminDir.c_str());
+        return _error->Error(_("Unable to lock the administration directory (%s), "
+                               "are you root?"),AdminDir.c_str());
     }
     
     // See if we need to abort with a dirty journal
@@@ -79,8 -79,8 +79,8 @@@
     {
        close(LockFD);
        LockFD = -1;
-       return _error->Error("dpkg was interrupted, you must manually "
-                          "run 'dpkg --configure -a' to correct the problem. ");
+       return _error->Error(_("dpkg was interrupted, you must manually "
+                              "run 'dpkg --configure -a' to correct the problem. "));
     }
  
         LockCount++;
diff --combined apt-pkg/pkgcache.cc
index 4e10093a866ddb5c7e404d4d2753fe434c57f383,6687864ee888b4af5bd7f5195951b7b88e996f11..2a9756c453becc538fd89f444498873cf1cced2a
@@@ -21,7 -21,6 +21,7 @@@
                                                                        /*}}}*/
  // Include Files                                                      /*{{{*/
  #include <apt-pkg/pkgcache.h>
 +#include <apt-pkg/policy.h>
  #include <apt-pkg/indexfile.h>
  #include <apt-pkg/version.h>
  #include <apt-pkg/error.h>
@@@ -50,7 -49,7 +50,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 = 7;
 +   MajorVersion = 8;
     MinorVersion = 0;
     Dirty = false;
     
@@@ -164,7 -163,7 +164,7 @@@ unsigned long pkgCache::sHash(const str
  {
     unsigned long Hash = 0;
     for (string::const_iterator I = Str.begin(); I != Str.end(); I++)
-       Hash = 5*Hash + tolower(*I);
+       Hash = 5*Hash + tolower_ascii(*I);
     return Hash % _count(HeaderP->HashTable);
  }
  
@@@ -172,7 -171,7 +172,7 @@@ unsigned long pkgCache::sHash(const cha
  {
     unsigned long Hash = 0;
     for (const char *I = Str; *I != 0; I++)
-       Hash = 5*Hash + tolower(*I);
+       Hash = 5*Hash + tolower_ascii(*I);
     return Hash % _count(HeaderP->HashTable);
  }
  
@@@ -224,7 -223,7 +224,7 @@@ const char *pkgCache::DepType(unsigned 
  {
     const char *Types[] = {"",_("Depends"),_("PreDepends"),_("Suggests"),
                            _("Recommends"),_("Conflicts"),_("Replaces"),
 -                          _("Obsoletes"),_("Breaks")};
 +                          _("Obsoletes"),_("Breaks"), _("Enhances")};
     if (Type < sizeof(Types)/sizeof(*Types))
        return Types[Type];
     return "";
@@@ -291,56 -290,6 +291,56 @@@ pkgCache::PkgIterator::OkState pkgCache
     return NeedsNothing;
  }
                                                                        /*}}}*/
 +// PkgIterator::CandVersion - Returns the candidate version string    /*{{{*/
 +// ---------------------------------------------------------------------
 +/* Return string representing of the candidate version. */
 +const char *
 +pkgCache::PkgIterator::CandVersion() const 
 +{
 +  //TargetVer is empty, so don't use it.
 +  VerIterator version = pkgPolicy::pkgPolicy(Owner).GetCandidateVer(*this);
 +  if (version.IsGood())
 +    return version.VerStr();
 +  return 0;
 +};
 +                                                                      /*}}}*/
 +// PkgIterator::CurVersion - Returns the current version string               /*{{{*/
 +// ---------------------------------------------------------------------
 +/* Return string representing of the current version. */
 +const char *
 +pkgCache::PkgIterator::CurVersion() const 
 +{
 +  VerIterator version = CurrentVer();
 +  if (version.IsGood())
 +    return CurrentVer().VerStr();
 +  return 0;
 +};
 +                                                                      /*}}}*/
 +// ostream operator to handle string representation of a package      /*{{{*/
 +// ---------------------------------------------------------------------
 +/* Output name < cur.rent.version -> candid.ate.version | new.est.version > (section)
 +   Note that the characters <|>() are all literal above. Versions will be ommited
 +   if they provide no new information (e.g. there is no newer version than candidate)
 +   If no version and/or section can be found "none" is used. */
 +std::ostream& 
 +operator<<(ostream& out, pkgCache::PkgIterator Pkg) 
 +{
 +   if (Pkg.end() == true)
 +      return out << "invalid package";
 +
 +   string current = string(Pkg.CurVersion() == 0 ? "none" : Pkg.CurVersion());
 +   string candidate = string(Pkg.CandVersion() == 0 ? "none" : Pkg.CandVersion());
 +   string newest = string(Pkg.VersionList().end() ? "none" : Pkg.VersionList().VerStr());
 +
 +   out << Pkg.Name() << " < " << current;
 +   if (current != candidate)
 +      out << " -> " << candidate;
 +   if ( newest != "none" && candidate != newest)
 +      out << " | " << newest;
 +   out << " > ( " << string(Pkg.Section()==0?"none":Pkg.Section()) << " )";
 +   return out;
 +}
 +                                                                      /*}}}*/
  // DepIterator::IsCritical - Returns true if the dep is important     /*{{{*/
  // ---------------------------------------------------------------------
  /* Currently critical deps are defined as depends, predepends and
@@@ -658,8 -607,6 +658,8 @@@ string pkgCache::PkgFileIterator::RelSt
        Res = Res + (Res.empty() == true?"o=":",o=")  + Origin();
     if (Archive() != 0)
        Res = Res + (Res.empty() == true?"a=":",a=")  + Archive();
 +   if (Codename() != 0)
 +      Res = Res + (Res.empty() == true?"n=":",n=")  + Codename();
     if (Label() != 0)
        Res = Res + (Res.empty() == true?"l=":",l=")  + Label();
     if (Component() != 0)
diff --combined cmdline/apt-cache.cc
index acef8dc5e947eb3de24ca8ed1c498e32e75f9972,425df6994938890926ff8d42337a4eaa2e49ed0b..c30e22b7691242d697344a579577ec6e9a3f2b96
@@@ -102,15 -102,13 +102,13 @@@ bool UnMet(CommandLine &CmdL
            if (End->Type != pkgCache::Dep::PreDepends &&
                End->Type != pkgCache::Dep::Depends && 
                End->Type != pkgCache::Dep::Suggests &&
-               End->Type != pkgCache::Dep::Recommends &&
-               End->Type != pkgCache::Dep::DpkgBreaks)
+               End->Type != pkgCache::Dep::Recommends)
               continue;
  
            // Important deps only
            if (Important == true)
               if (End->Type != pkgCache::Dep::PreDepends &&
-                  End->Type != pkgCache::Dep::Depends &&
-                  End->Type != pkgCache::Dep::DpkgBreaks)
+                  End->Type != pkgCache::Dep::Depends)
                  continue;
            
            // Verify the or group
@@@ -401,7 -399,7 +399,7 @@@ bool DumpAvail(CommandLine &Cmd
     pkgCache &Cache = *GCache;
  
     pkgPolicy Plcy(&Cache);
 -   if (ReadPinFile(Plcy) == false)
 +   if (ReadPinFile(Plcy) == false || ReadPinDir(Plcy) == false)
        return false;
     
     unsigned long Count = Cache.HeaderP->PackageCount+1;
@@@ -557,6 -555,7 +555,7 @@@ bool Depends(CommandLine &CmdL
     
     bool Recurse = _config->FindB("APT::Cache::RecurseDepends",false);
     bool Installed = _config->FindB("APT::Cache::Installed",false);
+    bool Important = _config->FindB("APT::Cache::Important",false);
     bool DidSomething;
     do
     {
         
         for (pkgCache::DepIterator D = Ver.DependsList(); D.end() == false; D++)
         {
+           // Important deps only
+           if (Important == true)
+              if (D->Type != pkgCache::Dep::PreDepends &&
+                  D->Type != pkgCache::Dep::Depends)
+                 continue;
+                 
            pkgCache::PkgIterator Trg = D.TargetPkg();
  
            if((Installed && Trg->CurrentVer != 0) || !Installed)
@@@ -1515,7 -1519,7 +1519,7 @@@ bool Policy(CommandLine &CmdL
     
     pkgCache &Cache = *GCache;
     pkgPolicy Plcy(&Cache);
 -   if (ReadPinFile(Plcy) == false)
 +   if (ReadPinFile(Plcy) == false || ReadPinDir(Plcy) == false)
        return false;
     
     // Print out all of the package files
         if (SrcList->FindIndex(F,Indx) == false &&
             _system->FindIndex(F,Indx) == false)
            return _error->Error(_("Cache is out of sync, can't x-ref a package file"));
-        printf(_("%4i %s\n"),
+        
+        printf("%4i %s\n",
                Plcy.GetPriority(F),Indx->Describe(true).c_str());
         
         // Print the reference information for the package
diff --combined debian/apt.cron.daily
index b40bb2c30613bc08f97c84417cef1b8d9397ed93,cdec7eea00315e0d5c3896448498c740a37396a3..7e4214775c8235075e19c910f5156642f2e0eb4d
@@@ -1,40 -1,67 +1,67 @@@
  #!/bin/sh
- #
  #set -e
  #
  # This file understands the following apt configuration variables:
+ # Values here are the default.
+ # Create /etc/apt/apt.conf.d/02periodic file to set your preference.
  #
- #  "APT::Periodic::Update-Package-Lists=1"
- #  - Do "apt-get update" automatically every n-days (0=disable)
- #    
- #  "APT::Periodic::Download-Upgradeable-Packages=0",
- #  - Do "apt-get upgrade --download-only" every n-days (0=disable)
- # 
- #  "APT::Periodic::AutocleanInterval"
- #  - Do "apt-get autoclean" every n-days (0=disable)
+ #  Dir "/";
+ #  - RootDir for all configuration files
  #
- #  "APT::Periodic::Unattended-Upgrade"
- #  - Run the "unattended-upgrade" security upgrade script 
- #    every n-days (0=disabled)
- #    Requires the package "unattended-upgrades" and will write
- #    a log in /var/log/unattended-upgrades
- # 
- #  "APT::Archives::MaxAge",
+ #  Dir::Cache "var/apt/cache/";
+ #  - Set apt package cache directory
+ #
+ #  Dir::Cache::Archive "archives/";
+ #  - Set package archive directory
+ #
+ #  APT::Periodic::BackupArchiveInterval "0";
+ #  - Backup after n-days if archive contents changed.(0=disable)
+ #
+ #  APT::Periodic::BackupLevel "3";
+ #  - Backup level.(0=disable), 1 is invalid.
+ #
+ #  Dir::Cache::Backup "backup/";
+ #  - Set periodic package backup directory
+ #
+ #  APT::Archives::MaxAge "0"; (old, deprecated)
+ #  APT::Periodic::MaxAge "0"; (new)
  #  - Set maximum allowed age of a cache package file. If a cache 
  #    package file is older it is deleted (0=disable)
  #
- #  "APT::Archives::MaxSize",
+ #  APT::Archives::MinAge "2"; (old, deprecated)
+ #  APT::Periodic::MinAge "2"; (new)
+ #  - Set minimum age of a package file. If a file is younger it
+ #    will not be deleted (0=disable). Usefull to prevent races 
+ #    and to keep backups of the packages for emergency.
+ #
+ #  APT::Archives::MaxSize "0"; (old, deprecated)
+ #  APT::Periodic::MaxSize "0"; (new)
  #  - Set maximum size of the cache in MB (0=disable). If the cache
  #    is bigger, cached package files are deleted until the size
  #    requirement is met (the biggest packages will be deleted 
  #    first).
  #
- #  "APT::Archives::MinAge"
- #  - Set minimum age of a package file. If a file is younger it
- #    will not be deleted (0=disable). Usefull to prevent races 
- #    and to keep backups of the packages for emergency.
+ #  APT::Periodic::Update-Package-Lists "0";
+ #  - Do "apt-get update" automatically every n-days (0=disable)
+ #    
+ #  APT::Periodic::Download-Upgradeable-Packages "0";
+ #  - Do "apt-get upgrade --download-only" every n-days (0=disable)
  # 
+ #  APT::Periodic::Unattended-Upgrade "0";
+ #  - Run the "unattended-upgrade" security upgrade script 
+ #    every n-days (0=disabled)
+ #    Requires the package "unattended-upgrades" and will write
+ #    a log in /var/log/unattended-upgrades
+ # 
+ #  APT::Periodic::AutocleanInterval "0";
+ #  - Do "apt-get autoclean" every n-days (0=disable)
+ #
+ #  APT::Periodic::Verbose "0";
+ #  - Send report mail to root
+ #      0:  no report             (or null string)
+ #      1:  progress report       (actually any string)
+ #      2:  + command outputs     (remove -qq, remove 2>/dev/null, add -d)
+ #      3:  + trace on            
  
  check_stamp()
  {
      interval="$2"
  
      if [ $interval -eq 0 ]; then
 -      debug_echo "check_stamp: interval=0."
++      debug_echo "check_stamp: interval=0"
+       # treat as no time has passed
          return 1
      fi
  
      if [ ! -f $stamp ]; then
 -      debug_echo "check_stamp: missing time stamp file: $stamp."
+       update_stamp $stamp
++      debug_echo "check_stamp: missing time stamp file: $stamp"
+       # treat as enough time has passed
          return 0
      fi
  
      # compare midnight today to midnight the day the stamp was updated
 -    stamp=$(date -r $stamp '+%s')
 +    stamp_file="$stamp"
 +    stamp=$(date --date=$(date -r $stamp_file --iso-8601) +%s 2>/dev/null)
 +    if [ "$?" != "0" ]; then
 +        # Due to some timezones returning 'invalid date' for midnight on
 +        # certain dates (eg America/Sao_Paulo), if date returns with error
 +        # remove the stamp file and return 0. See coreutils bug:
 +        # http://lists.gnu.org/archive/html/bug-coreutils/2007-09/msg00176.html
 +        rm -f "$stamp_file"
 +        return 0
 +    fi
 +
 +    now=$(date --date=$(date --iso-8601) +%s 2>/dev/null)
 +    if [ "$?" != "0" ]; then
 +        # As above, due to some timezones returning 'invalid date' for midnight
 +        # on certain dates (eg America/Sao_Paulo), if date returns with error
 +        # return 0.
 +        return 0
 +    fi
 +
      delta=$(($now-$stamp))
  
-     # intervall is in days,
+     # intervall is in days, convert to sec.
      interval=$(($interval*60*60*24))
-     #echo "stampfile: $1"
-     #echo "interval=$interval, now=$now, stamp=$stamp, delta=$delta"
+     debug_echo "check_stamp: interval=$interval, now=$now, stamp=$stamp, delta=$delta (sec)"
  
 +    # remove timestamps a day (or more) in the future and force re-check
 +    if [ $stamp -gt $(($now+86400)) ]; then
 +         echo "WARNING: file $stamp_file has a timestamp in the future: $stamp"
 +         rm -f "$stamp_file"
 +         return 0
 +    fi
 +
      if [ $delta -ge $interval ]; then
          return 0
      fi
  update_stamp()
  {
      stamp="$1"
      touch $stamp
  }
  
  # we check here if autoclean was enough sizewise
  check_size_constraints()
  {
@@@ -188,83 -191,282 +216,287 @@@ random_sleep(
      sleep $TIME
  }
  
- # main
  
- if ! which apt-config >/dev/null; then
+ debug_echo()
+ {
+     # Display message if $VERBOSE >= 1
+     if [ "$VERBOSE" -ge 1 ]; then
+       echo $1 1>&2
+     fi
+ }
 -# main
++
++# ----------------- main ----------------
+ # check apt-config exstance
+ if ! which apt-config >/dev/null ; then
        exit 0
  fi
  
 -      debug_echo "exit: system on main power."
+ # Set VERBOSE mode from  apt-config (or inherit from environment)
+ eval $(apt-config shell VERBOSE APT::Periodic::Verbose)
+ if [ -z "$VERBOSE" ]; then
+     VERBOSE="0"
+ fi
+ if [ "$VERBOSE" -le 2 ]; then
+     # quiet for 0,1,2
+     XSTDOUT=">/dev/null"
+     XSTDERR="2>/dev/null"
+     XAPTOPT="-qq"
+     XUUPOPT=""
+ else
+     XSTDOUT=""
+     XSTDERR=""
+     XAPTOPT=""
+     XUUPOPT="-d"
+ fi
+ if [ "$VERBOSE" -ge 3 ]; then
+     # trace output
+     set -x
+ fi
+ # laptop check, on_ac_power returns:
+ #       0 (true)    System is on main power
+ #       1 (false)   System is not on main power
+ #       255 (false) Power status could not be determined
+ # Desktop systems always return 255 it seems
+ if which on_ac_power >/dev/null; then
+     on_ac_power
+     POWER=$?
+     if [ $POWER -eq 1 ]; then
 -      debug_echo "exit: power status ($POWER) undetermined."
 -      exit 0
++      debug_echo "exit: system NOT on main power."
+       exit 0
+     elif [ $POWER -ne 0 ]; then
 -if which apt-get >/dev/null && ! eval apt-get check $XAPTOPT $XSTDERR ; then
++      debug_echo "power status ($POWER) undetermined."
+     fi
+     debug_echo "system is on main power."
+ fi
+ # check if we can lock the cache and if the cache is clean
 -if [ $BackupLevel -le 1 ]; then BackupLevel=2 ; fi
++if which apt-get >/dev/null && ! apt-get check $XAPTOPT $XSTDERR ; then
+     debug_echo "error encountered in cron job with \"apt-get check\"."
+     exit 0
+ fi
+ # No need to check for apt-get below
+ # Global current time in seconds since 1970-01-01 00:00:00 UTC
+ now=$(date +%s)
+ # Set default values and normalize
+ Dir="/"
+ eval $(apt-config shell Dir Dir)
+ Dir=${Dir%/}
+ CacheDir="var/cache/apt/"
+ eval $(apt-config shell CacheDir Dir::Cache)
+ CacheDir=${CacheDir%/}
+ if [ -z "$CacheDir" ]; then
+     debug_echo "practically empty Dir::Cache, exiting"
+     exit 0
+ fi
+ CacheArchive="archives/"
+ eval $(apt-config shell CacheArchive Dir::Cache::Archives)
+ CacheArchive=${CacheArchive%/}
+ if [ -z "$CacheArchive" ]; then
+     debug_echo "practically empty Dir::Cache::archives, exiting"
+     exit 0
+ fi
+ BackupArchiveInterval=0
+ eval $(apt-config shell BackupArchiveInterval APT::Periodic::BackupArchiveInterval)
+ BackupLevel=3
+ eval $(apt-config shell BackupLevel APT::Periodic::BackupLevel)
 -    echo "practically empty Dir::Cache::Backup, exiting" 1>&2
 -    exit 0
++if [ $BackupLevel -le 1 ]; then 
++    BackupLevel=2 ; 
++fi
+ CacheBackup="backup/"
+ eval $(apt-config shell CacheBackup Dir::Cache::Backup)
+ CacheBackup=${CacheBackup%/}
+ if [ -z "$CacheBackup" ]; then
++    echo "empty Dir::Cache::Backup, using default" 1>&2
++    CacheBackup="backup/"
+ fi
+ # Support old Archive for compatibility.
+ # Document only Periodic for all controling parameters of this script.
+ MaxAge=0
+ eval $(apt-config shell MaxAge APT::Archives::MaxAge)
+ eval $(apt-config shell MaxAge APT::Periodic::MaxAge)
+ MinAge=2
+ eval $(apt-config shell MinAge APT::Archives::MinAge)
+ eval $(apt-config shell MinAge APT::Periodic::MinAge)
+ MaxSize=0
+ eval $(apt-config shell MaxSize APT::Archives::MaxSize)
+ eval $(apt-config shell MaxSize APT::Periodic::MaxSize)
  UpdateInterval=0
+ eval $(apt-config shell UpdateInterval APT::Periodic::Update-Package-Lists)
  DownloadUpgradeableInterval=0
- eval $(apt-config shell UpdateInterval APT::Periodic::Update-Package-Lists DownloadUpgradeableInterval APT::Periodic::Download-Upgradeable-Packages)
- AutocleanInterval=$DownloadUpgradeableInterval
- eval $(apt-config shell AutocleanInterval APT::Periodic::AutocleanInterval)
+ eval $(apt-config shell DownloadUpgradeableInterval APT::Periodic::Download-Upgradeable-Packages)
  UnattendedUpgradeInterval=0
  eval $(apt-config shell UnattendedUpgradeInterval APT::Periodic::Unattended-Upgrade)
  
+ AutocleanInterval=0
+ eval $(apt-config shell AutocleanInterval APT::Periodic::AutocleanInterval)
+ Cache="${Dir}/${CacheDir}/${CacheArchive}/"
+ Back="${Dir}/${CacheDir}/${CacheBackup}/"
+ BackX="${Back}${CacheArchive}/"
+ for x in $(seq 0 1 $((${BackupLevel}-1))); do 
+     eval "Back${x}=${Back}${x}/"
+ done
  # check if we actually have to do anything
  if [ $UpdateInterval -eq 0 ] &&
     [ $DownloadUpgradeableInterval -eq 0 ] &&
     [ $UnattendedUpgradeInterval -eq 0 ] &&
+    [ $BackupArchiveInterval -eq 0 ] &&
     [ $AutocleanInterval -eq 0 ]; then
      exit 0
  fi
  
- # laptop check, on_ac_power returns:
- #       0 (true)    System is on mains power
- #       1 (false)   System is not on mains power
- #       255 (false) Power status could not be determined
- # Desktop systems always return 255 it seems
- if which on_ac_power >/dev/null; then
-     on_ac_power
-     if [ $? -eq 1 ]; then
-       exit 0
-     fi
- fi
 +# sleep random amount of time to avoid hitting the 
 +# mirrors at the same time
 +random_sleep
  
- # check if we can access the cache
- if ! apt-get check -q -q 2>/dev/null; then
-     # wait random amount of time before retrying
-     random_sleep
-     # check again
-     if ! apt-get check -q -q 2>/dev/null; then
-       echo "$0: could not lock the APT cache while performing daily cron job. "
-       echo "Is another package manager working?"
-       exit 1
+ # backup after n-days if archive contents changed.
+ # (This uses hardlink to save disk space)
+ BACKUP_ARCHIVE_STAMP=/var/lib/apt/periodic/backup-archive-stamp
+ if check_stamp $BACKUP_ARCHIVE_STAMP $BackupArchiveInterval; then
+     if [ $({(cd $Cache 2>/dev/null; find . -name "*.deb"); (cd $Back0 2>/dev/null;find . -name "*.deb") ;}| sort|uniq -u|wc -l) -ne 0 ]; then
+       mkdir -p $Back
+       rm -rf $Back$((${BackupLevel}-1))
+       for y in $(seq $((${BackupLevel}-1)) -1 1); do 
+           eval BackY=${Back}$y
+           eval BackZ=${Back}$(($y-1))
+           if [ -e $BackZ ]; then mv -f $BackZ $BackY ; fi
+       done
+       cp -la $Cache $Back ; mv -f $BackX $Back0
+       update_stamp $BACKUP_ARCHIVE_STAMP
+       debug_echo "backup with hardlinks. (success)"
+     else
+       debug_echo "skip backup since same content."
      fi
+ else
+       debug_echo "skip backup since too new."
  fi
  
- UPDATE_STAMP=/var/lib/apt/periodic/update-stamp
- if check_stamp $UPDATE_STAMP $UpdateInterval; then
-     if apt-get -qq update 2>/dev/null; then
-         if which dbus-send >/dev/null && pidof dbus-daemon >/dev/null; then
-             dbus-send --system / app.apt.dbus.updated boolean:true
-         fi
-         update_stamp $UPDATE_STAMP
-     fi
+ # package archive contnts removal by package age
+ if [ $MaxAge -ne 0 ] && [ $MinAge -ne 0 ]; then
+     find $Cache -name "*.deb"  \( -mtime +$MaxAge -and -ctime +$MaxAge \) -and -not \( -mtime -$MinAge -or -ctime -$MinAge \) -print0 | xargs -r -0 rm -f
+     debug_echo "aged: ctime <$MaxAge and mtime <$MaxAge and ctime>$MinAge and mtime>$MinAge"
+ elif [ $MaxAge -ne 0 ]; then
+     find $Cache -name "*.deb"  -ctime +$MaxAge -and -mtime +$MaxAge -print0 | xargs -r -0 rm -f
+     debug_echo "aged: ctime <$MaxAge and mtime <$MaxAge only"
+ else
+     debug_echo "skip aging since MaxAge is 0"
  fi
+     
+ # package archive contnts removal down to $MaxSize
+ if [ $MaxSize -ne 0 ]; then
+     MinAgeSec=$(($MinAge*24*60*60))
+     # reverse-sort by mtime
+     for file in $(ls -rt $Cache/*.deb 2>/dev/null); do 
+       du=$(du -m -s $Cache)
+       size=${du%%/*}
+       # check if the cache is small enough
+       if [ $size -lt $MaxSize ]; then
+           debug_echo "end remove by archive size:  size=$size < $MaxSize"
+           break
+       fi
+       # check for MinAge in second of the file
+       if [ $MinAgeSec -ne 0 ]; then 
+           # check both ctime and mtime 
+           mtime=$(stat -c %Y $file)
+           ctime=$(stat -c %Z $file)
+           if [ $mtime -gt $ctime ]; then
+               delta=$(($now-$mtime))
+           else
+               delta=$(($now-$ctime))
+           fi
+           if [ $delta -le $MinAgeSec ]; then
+               debug_echo "skip remove by archive size:  $file, delta=$delta < $MinAgeSec"
+           else
+               # delete oldest file
+               debug_echo "remove by archive size: $file, delta=$delta >= $MinAgeSec (sec), size=$size >= $MaxSize"
+               rm -f $file
+           fi
+       fi
  
- DOWNLOAD_UPGRADEABLE_STAMP=/var/lib/apt/periodic/download-upgradeable-stamp
- if check_stamp $DOWNLOAD_UPGRADEABLE_STAMP $DownloadUpgradeableInterval; then
-     apt-get -qq -d dist-upgrade 2>/dev/null
-     update_stamp $DOWNLOAD_UPGRADEABLE_STAMP
+     done
  fi
  
- UPGRADE_STAMP=/var/lib/apt/periodic/upgrade-stamp
- if check_stamp $UPGRADE_STAMP $UnattendedUpgradeInterval; then
-     unattended-upgrade
-     update_stamp $UPGRADE_STAMP
+ # update package lists
+ UPDATE_STAMP=/var/lib/apt/periodic/update-stamp
+ if check_stamp $UPDATE_STAMP $UpdateInterval; then
+     if eval apt-get $XAPTOPT -y update $XSTDERR; then
+       debug_echo "download updated metadata (success)."
+       if which dbus-send >/dev/null && pidof dbus-daemon >/dev/null; then
+           if dbus-send --system / app.apt.dbus.updated boolean:true ; then
+               debug_echo "send dbus signal (success)"
+           else
+               debug_echo "send dbus signal (error)"
+           fi
+       else
+           debug_echo "dbus signal not send (command not available)"
+       fi
+       update_stamp $UPDATE_STAMP
+       # download all upgradeable packages if it is requested
+       DOWNLOAD_UPGRADEABLE_STAMP=/var/lib/apt/periodic/download-upgradeable-stamp
+       if check_stamp $DOWNLOAD_UPGRADEABLE_STAMP $DownloadUpgradeableInterval; then
+           if eval apt-get $XAPTOPT -y -d dist-upgrade $XSTDERR; then
+               update_stamp $DOWNLOAD_UPGRADEABLE_STAMP
+               debug_echo "download upgradable (success)."
+               # auto upgrade all upgradeable packages
+               UPGRADE_STAMP=/var/lib/apt/periodic/upgrade-stamp
+               if which unattended-upgrade >/dev/null && check_stamp $UPGRADE_STAMP $UnattendedUpgradeInterval; then
+                   if unattended-upgrade $XUUPOPT; then
+                       update_stamp $UPGRADE_STAMP
+                       debug_echo "unattended-upgrade (success)."
+                   else
+                       debug_echo "unattended-upgrade (error)."
+                   fi
+               else
+                   debug_echo "unattended-upgrade (not run)."
+               fi
+           else
+               debug_echo "download upgradable (error)."
+           fi
+       else
+           debug_echo "download upgradable (not run)."
+       fi
+     else
+       debug_echo "download updated metadata (error)."
+     fi
+ else
+     debug_echo "download updated metadata (not run)."
  fi
  
+ # autoclean package archive
  AUTOCLEAN_STAMP=/var/lib/apt/periodic/autoclean-stamp
  if check_stamp $AUTOCLEAN_STAMP $AutocleanInterval; then
-     apt-get -qq autoclean
-     update_stamp $AUTOCLEAN_STAMP
+     if apt-get $XAPTOPT -y autoclean $XSTDERR; then
+       debug_echo "autoclean (success)."
+       update_stamp $AUTOCLEAN_STAMP
+     else
+       debug_echo "autoclean (error)."
+     fi
+ else
+     debug_echo "autoclean (not run)."
  fi
  
- # check cache size 
- check_size_constraints
+ #
+ #     vim: set sts=4 ai :
+ #
diff --combined debian/changelog
index 6ce3b7c7d92269928456091eb1fc1b326c7ac4bf,cf92311053627a3b102d51721a190bd15b927fd7..6e03bbbd43f1f8f0ff503eb3069f4283d52ad805
 -apt (0.7.21) UNRELEASED; urgency=low
 +apt (0.7.22) UNRELEASED; urgency=low
  
 -  [ Osamu Aoki ]
 -  * Updated cron script to support backups by hardlinks and 
 -    verbose levels.  All features turned off by default. 
 -  * Added more error handlings.  Closes: #438803, #462734, #454989, 
 -  * Refactored condition structure to make download and upgrade performed 
 -    if only previous steps succeeded. Closes: #341970
 -  * Documented all cron script related configuration items in 
 -    configure-index.
 +  [ Christian Perrier ]
 +  * Documentation translations:
 +    - Fix a typo in apt-get(8) French translation. Closes: #525043
 +      Thanks to Guillaume Delacour for spotting it.
 +    - Updated apt.conf(5) manpgae French translation.
 +      Thanks to Aurélien Couderc.
 +  * Translations:
 +    - fr.po
 +    - sk.po. Closes: #525857 
 +    - ru.po. Closes: #526816
 +    - eu.po. Closes: #528985
 +    - zh_CN.po. Closes: #531390
 +    - fr.po
 +    - it.po. Closes: #531758
 +    - ca.po. Closes: #531921
 +    - de.po. Closes: #536430
 +  * Added translations
 +    - ast.po (Asturian by Marcos Alvareez Costales).
 +      Closes: #529007, #529730, #535328
 +  
 +  [ David Kalnischkies ]
 +  * [ABI break] support '#' in apt.conf and /etc/apt/preferences
 +    (closes: #189866)
 +  * [ABI break] Allow pinning by codename (closes: #97564)
 +  * support running "--simulate" as user
 +  * add depth information to the debug output and show what depends
 +    type triggers a autoinst (closes: #458389)
 +  * add Debug::pkgDepCache::Marker with more detailed debug output 
 +    (closes: #87520)
 +  * add Debug::pkgProblemResolver::ShowScores and make the scores
 +    adjustable
 +  * do not write state file in simulate mode (closes: #433007)
 +  * add hook for auto-install (closes: #470035)
 +  * support IsAutoInstallOk in the resolver too
 +  * fix typo in apt-pkg/acquire.cc which prevents Dl-Limit to work
 +    correctly when downloading from multiple sites (Closes: #534752)
  
    [ Michael Vogt ]
 -  * apt-pkg/deb/dpkgpm.cc:
 -    - provide DPkg::Chroot-Directory config option (useful for testing)
 -
 - -- Michael Vogt <michael.vogt@ubuntu.com>  Thu, 28 May 2009 17:51:42 +0200
 -
 -  [ Michael Vogt ]
 +  * honor the dpkg hold state in AutoInstOk (closes: #64141)
 +  * debian/apt.cron.daily:
 +    - if the timestamp is too far in the future, delete it
+   * apt-pkg/acquire.cc:
+     - make the max pipeline depth of the acquire queue configurable
+       via Acquire::Max-Pipeline-Depth
+   * apt-pkg/deb/dpkgpm.cc:
+     - add Dpkg::UseIoNice boolean option to run dpkg with ionice -c3
+       (off by default)
+     - send "dpkg-exec" message on the status fd when dpkg is run
++    - provide DPkg::Chroot-Directory config option (useful for testing)
++    - fix potential hang when in a backgroud process group
+   * apt-pkg/algorithms.cc:
+     - consider recommends when making the scores for the problem 
+       resolver
+   * apt-pkg/acquire-worker.cc:
+     - show error details of failed methods
+   * apt-pkg/contrib/fileutl.cc:
+     - if a process aborts with signal, show signal number
+   * methods/http.cc:
+     - ignore SIGPIPE, we deal with EPIPE from write in 
+       HttpMethod::ServerDie() (LP: #385144)
 -  * doc/makefile:
 -    - add examples/apt-https-method-example.conf
+   * apt-pkg/indexcopy.cc:
+     - support having CDs with no Packages file (just a Packages.gz)
+       by not forcing a verification on non-existing files
+      (LP: #255545)
+     - remove the gettext from a string that consists entirely 
+       of variables (LP: #56792)
 -  * apt-pkg/deb/dpkgpm.cc:
 -    - fix potential hang when in a backgroud process group
+   * apt-pkg/cacheiterators.h:
+     - add missing checks for Owner == 0 in end()
 -  * methods/gpgv.cc:
+   * apt-pkg/indexrecords.cc:
+     - fix some i18n issues
+   * apt-pkg/contrib/strutl.h:
+     - add new strprintf() function to make i18n strings easier
 -  * cmdline/apt-get.cc:
 -    - fix "apt-get source pkg=ver" if binary name != source name
 -      and show a message (LP: #202219)
 -    - fix "apt-get source pkg" if there is a binary package and
 -      a source package of the same name but from different 
 -      packages (LP: #330103)
+     - fix compiler warning
 -  * apt-pkg/contrib/strutl.cc:
 -    - fix TimeToStr i18n (LP: #289807)
 -  * [ABI break] merge support for http redirects, thanks to
 -    Jeff Licquia and Anthony Towns
 -  * [ABI break] use int for the package IDs (thanks to Steve Cotton)
 -  * apt-pkg/pkgcache.cc:
 -    - do not run "dpkg --configure pkg" if pkg is in trigger-awaited
 -      state (LP: #322955)
 -  * methods/https.cc:
 -    - add Acquire::https::AllowRedirect support
 -  * methods/gpgv.cc:
 -    - properly check for expired and revoked keys (closes: #433091)
+   * apt-pkg/deb/debsystem.cc:
+     - make strings i18n able 
 -  * Clarify the --help for 'purge' (LP: #243948)
+   * fix problematic use of tolower() when calculating the version 
+     hash by using locale independant tolower_ascii() function. 
+     Thanks to M. Vefa Bicakci (LP: #80248)
+   * build fixes for g++-4.4
+   * cmdline/apt-mark:
+     - add "showauto" option to show automatically installed packages
++  * document --install-recommends and --no-install-recommends
++    (thanks to Dereck Wonnacott, LP: #126180)
 +  
 +  [ Julian Andres Klode ]
 +  * apt-pkg/contrib/configuration.cc: Fix a small memory leak in
 +    ReadConfigFile.
 +  * Introduce support for the Enhances field. (Closes: #137583) 
 +  * Support /etc/apt/preferences.d, by adding ReadPinDir() (Closes: #535512)
 +  * configure-index: document Dir::Etc::SourceParts and some other options
 +    (Closes: #459605)
 +  * Remove Eugene V. Lyubimkin from uploaders as requested.
 +  * apt-pkg/contrib/hashes.cc, apt-pkg/contrib/md5.cc:
 +    - Support reading until EOF if Size=0 to match behaviour of
 +      SHA1Summation and SHA256Summation
 +
++  [ Osamu Aoki ]
++  * Updated cron script to support backups by hardlinks and 
++    verbose levels.  All features turned off by default. 
++  * Added more error handlings.  Closes: #438803, #462734, #454989, 
++  * Refactored condition structure to make download and upgrade performed 
++    if only previous steps succeeded. Closes: #341970
++  * Documented all cron script related configuration items in 
++    configure-index.
+   [ Dereck Wonnacott ]
+   * apt-ftparchive might write corrupt Release files (LP: #46439)
+   * Apply --important option to apt-cache depends (LP: #16947) 
++
 + -- Julian Andres Klode <jak@debian.org>  Fri, 03 Jul 2009 08:27:35 +0200
 +
 +apt (0.7.21) unstable; urgency=low
 +
 +  [ Christian Perrier ]
 +  * Translations:
 +    - bg.po. Closes: #513211
 +    - zh_TW.po. Closes: #513311
 +    - nb.po. Closes: #513843
 +    - fr.po. Closes: #520430
 +    - sv.po. Closes: #518070
 +    - sk.po. Closes: #520403
 +    - it.po. Closes: #522222
 +    - sk.po. Closes: #520403
 +  
 +  [ Jamie Strandboge ]
 +  * apt.cron.daily: catch invalid dates due to DST time changes
 +    in the stamp files
 +
 +  [ Michael Vogt ]
 +  * methods/gpgv.cc:
 +    - properly check for expired and revoked keys (closes: #433091)
 +  * apt-pkg/contrib/strutl.cc:
 +    - fix TimeToStr i18n (LP: #289807)
 +  * [ABI break] merge support for http redirects, thanks to
 +    Jeff Licquia and Anthony Towns
 +  * [ABI break] use int for the package IDs (thanks to Steve Cotton)
 +  * apt-pkg/pkgcache.cc:
 +    - do not run "dpkg --configure pkg" if pkg is in trigger-awaited
 +      state (LP: #322955)
 +  * methods/https.cc:
 +    - add Acquire::https::AllowRedirect support
 +  * Clarify the --help for 'purge' (LP: #243948)
 +  * cmdline/apt-get.cc
 +    - fix "apt-get source pkg" if there is a binary package and
 +      a source package of the same name but from different 
 +      packages (LP: #330103)
 +
    [ Colin Watson ]
    * cmdline/acqprogress.cc:
      - Call pkgAcquireStatus::Pulse even if quiet, so that we still get
        dlstatus messages on the status-fd (LP: #290234).
  
 - -- Michael Vogt <michael.vogt@ubuntu.com>  Fri, 12 Sep 2008 11:34:24 +0200
 + -- Michael Vogt <mvo@debian.org>  Tue, 14 Apr 2009 14:12:51 +0200
 +
 +apt (0.7.20.2) unstable; urgency=medium
 +
 +  [ Eugene V. Lyubimkin ]
 +  * Urgency set to medium due to RC bug fix.
 +  * doc/apt.ent, apt-get.8.xml:
 +    - Fix invalid XML entities. (Closes: #514402)
 +
 + -- Eugene V. Lyubimkin <jackyf.devel@gmail.com>  Sat, 07 Feb 2009 16:48:21 +0200
 +
 +apt (0.7.20.1) unstable; urgency=low
 +
 +  [ Michael Vogt ]
 +  * apt-pkg/pkgcachegen.cc:
 +    - fix apt-cache search for localized description 
 +      (closes: #512110)
 +  
 +  [ Christian Perrier ]
 +  * Translations:
 +    - fr.po: fix spelling error to "défectueux". Thanks to Thomas Péteul.
 +
 + -- Michael Vogt <mvo@debian.org>  Tue, 20 Jan 2009 09:35:05 +0100
  
  apt (0.7.20) unstable; urgency=low
  
        (Closes: #457265)
      - Mentioned 'APT::Periodic' and 'APT::Archives' groups of options.
        (Closes: #438559)
 -
 -  [ Michael Vogt ]
 -  * apt-pkg/depcache.cc:
 -    - when checking for new important deps, skip critical ones
 -      (LP: #236360)
 -  * document --install-recommends and --no-install-recommends
 -    (thanks to Dereck Wonnacott, LP: #126180)
 -  * make "apt-get build-dep" installed packages marked automatic
 -    by default. This can be changed by setting the value of
 -    APT::Get::Build-Dep-Automatic to false (thanks to Aaron 
 -    Haviland, closes: #44874, LP: #248268)
 -
 - -- Eugene V. Lyubimkin <jackyf.devel@gmail.com>  Sat, 06 Dec 2008 20:57:00 +0200
 -
 -apt (0.7.20~exp2) unstable; urgency=low
 -
 -  [ Eugene V. Lyubimkin ]
 +    - Mentioned '/* ... */' comments. (Closes: #507601)
    * doc/examples/sources.list:
      - Removed obsolete commented non-us deb-src entry, replaced it with
        'deb-src security.debian.org' one. (Closes: #411298)
    * apt-pkg/contrib/mmap.cc:
      - Added instruction how to work around MMap error in MMap error message.
        (Closes: #385674, 436028)
 +  * COPYING:
 +    - Actualized. Removed obsolete Qt section, added GPLv2 clause.
 +      (Closes: #440049, #509337)
 +
 +  [ Michael Vogt ]
 +  * add option to "apt-get build-dep" to mark the needed 
 +    build-dep packages as automatic installed. 
 +    This is controlled via the value of
 +    APT::Get::Build-Dep-Automatic and is set "false" by default.  
 +    Thanks to Aaron Haviland, closes: #448743
 +  * apt-inst/contrib/arfile.cc:
 +    - support members ending with '/' as well (thanks to Michal Cihr,
 +      closes: #500988)
  
    [ Christian Perrier ]
    * Translations:
 +    - Finnish updated. Closes: #508449 
 +    - Galician updated. Closes: #509151
 +    - Catalan updated. Closes: #509375
 +    - Vietnamese updated. Closes: #509422
 +    - Traditional Chinese added. Closes: #510664
      - French corrected (remove awful use of first person) 
  
 - -- Michael Vogt <mvo@debian.org>  Tue, 02 Dec 2008 20:30:14 +0100
 + -- Michael Vogt <mvo@debian.org>  Mon, 05 Jan 2009 08:59:20 +0100
  
  apt (0.7.19) unstable; urgency=low
  
        is a request to install only one package and it is not installable.
        (Closes: #419521)
  
 -
    [ Michael Vogt ]
      - fix SIGHUP handling (closes: #463030)
  
diff --combined doc/apt-get.8.xml
index e7f6d7094468c27095200436a56989943cb82e29,64c3a35e4557011f65c25e6fd50185600c5fba2d..609674d751af756306aa7925662a3bf9b588bb1d
@@@ -53,9 -53,6 +53,9 @@@
                          <arg choice='plain'>
                                  <replaceable>target_release_number_expression</replaceable>
                          </arg>
 +                        <arg choice='plain'>
 +                                <replaceable>target_release_codename</replaceable>
 +                        </arg>
                  </group>
        </arg>
  
@@@ -74,9 -71,6 +74,9 @@@
                                                <arg choice='plain'>
                                                        /<replaceable>target_release_name</replaceable>
                                                </arg>
 +                                              <arg choice='plain'>
 +                                                      /<replaceable>target_release_codename</replaceable>
 +                                              </arg>
                                        </group>
                                </arg>
                         </arg>
       actually change the system. 
       Configuration Item: <literal>APT::Get::Simulate</literal>.</para>
  
 +     <para>Simulation run as user will deactivate locking (<literal>Debug::NoLocking</literal>)
 +     automatical and display a notice indicating that this is only a simulation.
 +     Neigther NoLocking nor the notice will be triggered if run as root (root should know what
 +     he is doing without further warnings by <literal>apt-get</literal>).</para>
 +
       <para>Simulate prints out
       a series of lines each one representing a dpkg operation, Configure (Conf),
       Remove (Remv), Unpack (Inst). Square brackets indicate broken packages with
       Configuration Item: <literal>APT::Get::Compile</literal>.</para></listitem>
       </varlistentry>
  
+      <varlistentry><term><option>--install-recommends</option></term>
+      <listitem><para>Also install recommended packages.</para></listitem>
+      </varlistentry>
+      <varlistentry><term><option>--no-install-recommends</option></term>
+      <listitem><para>Do not install recommended packages.</para></listitem>
+      </varlistentry>
       <varlistentry><term><option>--ignore-hold</option></term>
       <listitem><para>Ignore package Holds; This causes <command>apt-get</command> to ignore a hold 
       placed on a package. This may be useful in conjunction with 
       of this option. In short, this option
       lets you have simple control over which distribution packages will be
       retrieved from. Some common examples might be 
 -     <option>-t '2.1*'</option> or <option>-t unstable</option>.
 +     <option>-t '2.1*'</option>, <option>-t unstable</option>
 +     or <option>-t sid</option>.
       Configuration Item: <literal>APT::Default-Release</literal>;
       see also the &apt-preferences; manual page.</para></listitem>
       </varlistentry>
         <title>CURRENT AUTHORS</title>
         <para>
                 &apt-author.team;
 -               &apt-qapage;
         </para>
 +               &apt-qapage;
   </refsect1>
   &manbugs;
  </refentry>
index c2b1bb27217505f2d4fb0d0deac40b5935c90f62,a4167085b7310d50d68fe6bdf2b33644c2bf4af4..ada6b12cec49ba3e5855f295fafbb177981514ce
@@@ -115,6 -115,56 +115,56 @@@ AP
    // Keep the list of FDs open (normally apt closes all fds when it
    // does a ExecFork)
    Keep-Fds {};
+   // control parameters for cron jobs by /etc/cron.daily/apt
+   Periodic
+   {
+   BackupArchiveInterval "0";
+   // - Backup after n-days if archive contents changed.(0=disable)
+   BackupLevel "3";
+   // - Backup level.(0=disable), 1 is invalid.
+   // APT::Archives::MaxAge "0"; (old, deprecated)
+   MaxAge "0"; // (new)
+   // - Set maximum allowed age of a cache package file. If a cache 
+   //   package file is older it is deleted (0=disable)
+   // APT::Archives::MinAge "2"; (old, deprecated)
+   MinAge "2"; // (new)
+   // - Set minimum age of a package file. If a file is younger it
+   //   will not be deleted (0=disable). Usefull to prevent races 
+   //   and to keep backups of the packages for emergency.
+   // APT::Archives::MaxSize "0"; (old, deprecated)
+   MaxSize "0"; // (new)
+   // - Set maximum size of the cache in MB (0=disable). If the cache
+   //   is bigger, cached package files are deleted until the size
+   //   requirement is met (the biggest packages will be deleted 
+   //   first).
+   Update-Package-Lists "0";
+   // - Do "apt-get update" automatically every n-days (0=disable)
+   //   
+   Download-Upgradeable-Packages "0";
+   // - Do "apt-get upgrade --download-only" every n-days (0=disable)
+   //
+   Unattended-Upgrade "0";
+   // - Run the "unattended-upgrade" security upgrade script 
+   //   every n-days (0=disabled)
+   //   Requires the package "unattended-upgrades" and will write
+   //   a log in /var/log/unattended-upgrades
+   //
+   AutocleanInterval "0";
+   // - Do "apt-get autoclean" every n-days (0=disable)
+   Verbose "0";
+   // - Send report mail to root
+   //   0:  no report             (or null string)
+   //   1:  progress report       (actually any string)
+   //   2:  + command outputs     (remove -qq, remove 2>/dev/null, add -d)
+   //   3:  + trace on            
+   };
  };
  
  // Options for the downloading routines
@@@ -213,20 -263,18 +263,22 @@@ Dir "/
    // Location of the cache dir
    Cache "var/cache/apt/" {
       Archives "archives/";
+      // backup directory created by /etc/cron.daily/apt
+      Backup "backup/"; 
       srcpkgcache "srcpkgcache.bin";
       pkgcache "pkgcache.bin";     
    };
    
    // Config files
    Etc "etc/apt/" {
 -     SourceList "sources.list";
       Main "apt.conf";
 -     Preferences "preferences";     
       Parts "apt.conf.d/";
 +     Preferences "preferences";
 +     PreferencesParts "preferences.d";
 +     SourceList "sources.list";
 +     SourceParts "sources.list.d";
 +     VendorList "vendors.list";
 +     VendorParts "vendors.list.d";
    };
    
    // Locations of binaries
@@@ -292,9 -340,7 +344,9 @@@ DPk
  Debug 
  {
    pkgProblemResolver "false";
 +  pkgProblemResolver::ShowScores "false";
    pkgDepCache::AutoInstall "false"; // what packages apt install to satify dependencies
 +  pkgDepCache::Marker "false"; 
    pkgAcquire "false";
    pkgAcquire::Worker "false";
    pkgAcquire::Auth "false";
diff --combined po/apt-all.pot
index d1b705837e24218aa78e4a46ecdecd55652712ff,ae7cb479566ed705a8159d2649d79489fee18857..b8305c25ce7b85f8f446c25a96b26d77c9a69a16
@@@ -7,7 -7,7 +7,7 @@@ msgid "
  msgstr ""
  "Project-Id-Version: PACKAGE VERSION\n"
  "Report-Msgid-Bugs-To: \n"
- "POT-Creation-Date: 2009-06-30 14:09+0200\n"
 -"POT-Creation-Date: 2008-05-22 16:56+0200\n"
++"POT-Creation-Date: 2009-07-21 15:49+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"
  "Content-Type: text/plain; charset=CHARSET\n"
  "Content-Transfer-Encoding: 8bit\n"
  
--#: cmdline/apt-cache.cc:143
++#: cmdline/apt-cache.cc:141
  #, c-format
  msgid "Package %s version %s has an unmet dep:\n"
  msgstr ""
  
--#: cmdline/apt-cache.cc:183 cmdline/apt-cache.cc:552 cmdline/apt-cache.cc:640
--#: cmdline/apt-cache.cc:796 cmdline/apt-cache.cc:1018
--#: cmdline/apt-cache.cc:1419 cmdline/apt-cache.cc:1570
++#: cmdline/apt-cache.cc:181 cmdline/apt-cache.cc:550 cmdline/apt-cache.cc:644
++#: cmdline/apt-cache.cc:800 cmdline/apt-cache.cc:1022
++#: cmdline/apt-cache.cc:1423 cmdline/apt-cache.cc:1575
  #, c-format
  msgid "Unable to locate package %s"
  msgstr ""
  
--#: cmdline/apt-cache.cc:247
++#: cmdline/apt-cache.cc:245
  msgid "Total package names: "
  msgstr ""
  
--#: cmdline/apt-cache.cc:287
++#: cmdline/apt-cache.cc:285
  msgid "  Normal packages: "
  msgstr ""
  
--#: cmdline/apt-cache.cc:288
++#: cmdline/apt-cache.cc:286
  msgid "  Pure virtual packages: "
  msgstr ""
  
--#: cmdline/apt-cache.cc:289
++#: cmdline/apt-cache.cc:287
  msgid "  Single virtual packages: "
  msgstr ""
  
--#: cmdline/apt-cache.cc:290
++#: cmdline/apt-cache.cc:288
  msgid "  Mixed virtual packages: "
  msgstr ""
  
--#: cmdline/apt-cache.cc:291
++#: cmdline/apt-cache.cc:289
  msgid "  Missing: "
  msgstr ""
  
--#: cmdline/apt-cache.cc:293
++#: cmdline/apt-cache.cc:291
  msgid "Total distinct versions: "
  msgstr ""
  
--#: cmdline/apt-cache.cc:295
++#: cmdline/apt-cache.cc:293
  msgid "Total distinct descriptions: "
  msgstr ""
  
--#: cmdline/apt-cache.cc:297
++#: cmdline/apt-cache.cc:295
  msgid "Total dependencies: "
  msgstr ""
  
--#: cmdline/apt-cache.cc:300
++#: cmdline/apt-cache.cc:298
  msgid "Total ver/file relations: "
  msgstr ""
  
--#: cmdline/apt-cache.cc:302
++#: cmdline/apt-cache.cc:300
  msgid "Total Desc/File relations: "
  msgstr ""
  
--#: cmdline/apt-cache.cc:304
++#: cmdline/apt-cache.cc:302
  msgid "Total Provides mappings: "
  msgstr ""
  
--#: cmdline/apt-cache.cc:316
++#: cmdline/apt-cache.cc:314
  msgid "Total globbed strings: "
  msgstr ""
  
--#: cmdline/apt-cache.cc:330
++#: cmdline/apt-cache.cc:328
  msgid "Total dependency version space: "
  msgstr ""
  
--#: cmdline/apt-cache.cc:335
++#: cmdline/apt-cache.cc:333
  msgid "Total slack space: "
  msgstr ""
  
--#: cmdline/apt-cache.cc:343
++#: cmdline/apt-cache.cc:341
  msgid "Total space accounted for: "
  msgstr ""
  
--#: cmdline/apt-cache.cc:471 cmdline/apt-cache.cc:1218
++#: cmdline/apt-cache.cc:469 cmdline/apt-cache.cc:1222
  #, c-format
  msgid "Package file %s is out of sync."
  msgstr ""
  
--#: cmdline/apt-cache.cc:1293
++#: cmdline/apt-cache.cc:1297
  msgid "You must give exactly one pattern"
  msgstr ""
  
--#: cmdline/apt-cache.cc:1447
++#: cmdline/apt-cache.cc:1451
  msgid "No packages found"
  msgstr ""
  
--#: cmdline/apt-cache.cc:1524
++#: cmdline/apt-cache.cc:1528
  msgid "Package files:"
  msgstr ""
  
--#: cmdline/apt-cache.cc:1531 cmdline/apt-cache.cc:1617
++#: cmdline/apt-cache.cc:1535 cmdline/apt-cache.cc:1622
  msgid "Cache is out of sync, can't x-ref a package file"
  msgstr ""
  
--#: cmdline/apt-cache.cc:1532
--#, c-format
--msgid "%4i %s\n"
--msgstr ""
--
  #. Show any packages have explicit pins
--#: cmdline/apt-cache.cc:1544
++#: cmdline/apt-cache.cc:1549
  msgid "Pinned packages:"
  msgstr ""
  
--#: cmdline/apt-cache.cc:1556 cmdline/apt-cache.cc:1597
++#: cmdline/apt-cache.cc:1561 cmdline/apt-cache.cc:1602
  msgid "(not found)"
  msgstr ""
  
  #. Installed version
--#: cmdline/apt-cache.cc:1577
++#: cmdline/apt-cache.cc:1582
  msgid "  Installed: "
  msgstr ""
  
--#: cmdline/apt-cache.cc:1579 cmdline/apt-cache.cc:1587
++#: cmdline/apt-cache.cc:1584 cmdline/apt-cache.cc:1592
  msgid "(none)"
  msgstr ""
  
  #. Candidate Version
--#: cmdline/apt-cache.cc:1584
++#: cmdline/apt-cache.cc:1589
  msgid "  Candidate: "
  msgstr ""
  
--#: cmdline/apt-cache.cc:1594
++#: cmdline/apt-cache.cc:1599
  msgid "  Package pin: "
  msgstr ""
  
  #. Show the priority tables
--#: cmdline/apt-cache.cc:1603
++#: cmdline/apt-cache.cc:1608
  msgid "  Version table:"
  msgstr ""
  
--#: cmdline/apt-cache.cc:1618
++#: cmdline/apt-cache.cc:1623
  #, c-format
  msgid "       %4i %s\n"
  msgstr ""
  
--#: cmdline/apt-cache.cc:1714 cmdline/apt-cdrom.cc:138 cmdline/apt-config.cc:70
++#: cmdline/apt-cache.cc:1719 cmdline/apt-cdrom.cc:138 cmdline/apt-config.cc:70
  #: cmdline/apt-extracttemplates.cc:225 ftparchive/apt-ftparchive.cc:547
 -#: cmdline/apt-get.cc:2571 cmdline/apt-sortpkgs.cc:144
 +#: cmdline/apt-get.cc:2586 cmdline/apt-sortpkgs.cc:144
  #, c-format
  msgid "%s %s for %s compiled on %s %s\n"
  msgstr ""
  
--#: cmdline/apt-cache.cc:1721
++#: cmdline/apt-cache.cc:1726
  msgid ""
  "Usage: apt-cache [options] command\n"
  "       apt-cache [options] add file1 [file2 ...]\n"
  "   show - Show a readable record for the package\n"
  "   depends - Show raw dependency information for a package\n"
  "   rdepends - Show reverse dependency information for a package\n"
 -"   pkgnames - List the names of all packages\n"
 -"   dotty - Generate package graphs for GraphVis\n"
 +"   pkgnames - List the names of all packages in the system\n"
 +"   dotty - Generate package graphs for GraphViz\n"
  "   xvcg - Generate package graphs for xvcg\n"
  "   policy - Show policy settings\n"
  "\n"
@@@ -251,7 -251,7 +246,7 @@@ msgid "
  "  -o=? Set an arbitrary configuration option, eg -o dir::cache=/tmp\n"
  msgstr ""
  
 -#: cmdline/apt-extracttemplates.cc:267 apt-pkg/pkgcachegen.cc:815
 +#: cmdline/apt-extracttemplates.cc:267 apt-pkg/pkgcachegen.cc:827
  #, c-format
  msgid "Unable to write to %s"
  msgstr ""
@@@ -550,221 -550,221 +545,221 @@@ msgstr "
  msgid "Failed to rename %s to %s"
  msgstr ""
  
 -#: cmdline/apt-get.cc:124
 +#: cmdline/apt-get.cc:127
  msgid "Y"
  msgstr ""
  
 -#: cmdline/apt-get.cc:146 cmdline/apt-get.cc:1651
 +#: cmdline/apt-get.cc:149 cmdline/apt-get.cc:1661
  #, c-format
  msgid "Regex compilation error - %s"
  msgstr ""
  
 -#: cmdline/apt-get.cc:241
 +#: cmdline/apt-get.cc:244
  msgid "The following packages have unmet dependencies:"
  msgstr ""
  
 -#: cmdline/apt-get.cc:331
 +#: cmdline/apt-get.cc:334
  #, c-format
  msgid "but %s is installed"
  msgstr ""
  
 -#: cmdline/apt-get.cc:333
 +#: cmdline/apt-get.cc:336
  #, c-format
  msgid "but %s is to be installed"
  msgstr ""
  
 -#: cmdline/apt-get.cc:340
 +#: cmdline/apt-get.cc:343
  msgid "but it is not installable"
  msgstr ""
  
 -#: cmdline/apt-get.cc:342
 +#: cmdline/apt-get.cc:345
  msgid "but it is a virtual package"
  msgstr ""
  
 -#: cmdline/apt-get.cc:345
 +#: cmdline/apt-get.cc:348
  msgid "but it is not installed"
  msgstr ""
  
 -#: cmdline/apt-get.cc:345
 +#: cmdline/apt-get.cc:348
  msgid "but it is not going to be installed"
  msgstr ""
  
 -#: cmdline/apt-get.cc:350
 +#: cmdline/apt-get.cc:353
  msgid " or"
  msgstr ""
  
 -#: cmdline/apt-get.cc:379
 +#: cmdline/apt-get.cc:382
  msgid "The following NEW packages will be installed:"
  msgstr ""
  
 -#: cmdline/apt-get.cc:405
 +#: cmdline/apt-get.cc:408
  msgid "The following packages will be REMOVED:"
  msgstr ""
  
 -#: cmdline/apt-get.cc:427
 +#: cmdline/apt-get.cc:430
  msgid "The following packages have been kept back:"
  msgstr ""
  
 -#: cmdline/apt-get.cc:448
 +#: cmdline/apt-get.cc:451
  msgid "The following packages will be upgraded:"
  msgstr ""
  
 -#: cmdline/apt-get.cc:469
 +#: cmdline/apt-get.cc:472
  msgid "The following packages will be DOWNGRADED:"
  msgstr ""
  
 -#: cmdline/apt-get.cc:489
 +#: cmdline/apt-get.cc:492
  msgid "The following held packages will be changed:"
  msgstr ""
  
 -#: cmdline/apt-get.cc:542
 +#: cmdline/apt-get.cc:545
  #, c-format
  msgid "%s (due to %s) "
  msgstr ""
  
 -#: cmdline/apt-get.cc:550
 +#: cmdline/apt-get.cc:553
  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:581
 +#: cmdline/apt-get.cc:584
  #, c-format
  msgid "%lu upgraded, %lu newly installed, "
  msgstr ""
  
 -#: cmdline/apt-get.cc:585
 +#: cmdline/apt-get.cc:588
  #, c-format
  msgid "%lu reinstalled, "
  msgstr ""
  
 -#: cmdline/apt-get.cc:587
 +#: cmdline/apt-get.cc:590
  #, c-format
  msgid "%lu downgraded, "
  msgstr ""
  
 -#: cmdline/apt-get.cc:589
 +#: cmdline/apt-get.cc:592
  #, c-format
  msgid "%lu to remove and %lu not upgraded.\n"
  msgstr ""
  
 -#: cmdline/apt-get.cc:593
 +#: cmdline/apt-get.cc:596
  #, c-format
  msgid "%lu not fully installed or removed.\n"
  msgstr ""
  
 -#: cmdline/apt-get.cc:667
 +#: cmdline/apt-get.cc:670
  msgid "Correcting dependencies..."
  msgstr ""
  
 -#: cmdline/apt-get.cc:670
 +#: cmdline/apt-get.cc:673
  msgid " failed."
  msgstr ""
  
 -#: cmdline/apt-get.cc:673
 +#: cmdline/apt-get.cc:676
  msgid "Unable to correct dependencies"
  msgstr ""
  
 -#: cmdline/apt-get.cc:676
 +#: cmdline/apt-get.cc:679
  msgid "Unable to minimize the upgrade set"
  msgstr ""
  
 -#: cmdline/apt-get.cc:678
 +#: cmdline/apt-get.cc:681
  msgid " Done"
  msgstr ""
  
 -#: cmdline/apt-get.cc:682
 +#: cmdline/apt-get.cc:685
  msgid "You might want to run `apt-get -f install' to correct these."
  msgstr ""
  
 -#: cmdline/apt-get.cc:685
 +#: cmdline/apt-get.cc:688
  msgid "Unmet dependencies. Try using -f."
  msgstr ""
  
 -#: cmdline/apt-get.cc:707
 +#: cmdline/apt-get.cc:710
  msgid "WARNING: The following packages cannot be authenticated!"
  msgstr ""
  
 -#: cmdline/apt-get.cc:711
 +#: cmdline/apt-get.cc:714
  msgid "Authentication warning overridden.\n"
  msgstr ""
  
 -#: cmdline/apt-get.cc:718
 +#: cmdline/apt-get.cc:721
  msgid "Install these packages without verification [y/N]? "
  msgstr ""
  
 -#: cmdline/apt-get.cc:720
 +#: cmdline/apt-get.cc:723
  msgid "Some packages could not be authenticated"
  msgstr ""
  
 -#: cmdline/apt-get.cc:729 cmdline/apt-get.cc:881
 +#: cmdline/apt-get.cc:732 cmdline/apt-get.cc:884
  msgid "There are problems and -y was used without --force-yes"
  msgstr ""
  
 -#: cmdline/apt-get.cc:773
 +#: cmdline/apt-get.cc:776
  msgid "Internal error, InstallPackages was called with broken packages!"
  msgstr ""
  
 -#: cmdline/apt-get.cc:782
 +#: cmdline/apt-get.cc:785
  msgid "Packages need to be removed but remove is disabled."
  msgstr ""
  
 -#: cmdline/apt-get.cc:793
 +#: cmdline/apt-get.cc:796
  msgid "Internal error, Ordering didn't finish"
  msgstr ""
  
 -#: cmdline/apt-get.cc:809 cmdline/apt-get.cc:1990 cmdline/apt-get.cc:2023
 +#: cmdline/apt-get.cc:812 cmdline/apt-get.cc:2003 cmdline/apt-get.cc:2036
  msgid "Unable to lock the download directory"
  msgstr ""
  
 -#: cmdline/apt-get.cc:819 cmdline/apt-get.cc:2071 cmdline/apt-get.cc:2317
 +#: cmdline/apt-get.cc:822 cmdline/apt-get.cc:2084 cmdline/apt-get.cc:2330
  #: apt-pkg/cachefile.cc:65
  msgid "The list of sources could not be read."
  msgstr ""
  
 -#: cmdline/apt-get.cc:834
 +#: cmdline/apt-get.cc:837
  msgid "How odd.. The sizes didn't match, email apt@packages.debian.org"
  msgstr ""
  
 -#: cmdline/apt-get.cc:839
 +#: cmdline/apt-get.cc:842
  #, c-format
  msgid "Need to get %sB/%sB of archives.\n"
  msgstr ""
  
 -#: cmdline/apt-get.cc:842
 +#: cmdline/apt-get.cc:845
  #, c-format
  msgid "Need to get %sB of archives.\n"
  msgstr ""
  
 -#: cmdline/apt-get.cc:847
 +#: cmdline/apt-get.cc:850
  #, c-format
  msgid "After this operation, %sB of additional disk space will be used.\n"
  msgstr ""
  
 -#: cmdline/apt-get.cc:850
 +#: cmdline/apt-get.cc:853
  #, c-format
  msgid "After this operation, %sB disk space will be freed.\n"
  msgstr ""
  
 -#: cmdline/apt-get.cc:864 cmdline/apt-get.cc:2166
 +#: cmdline/apt-get.cc:867 cmdline/apt-get.cc:2179
  #, c-format
  msgid "Couldn't determine free space in %s"
  msgstr ""
  
 -#: cmdline/apt-get.cc:871
 +#: cmdline/apt-get.cc:874
  #, c-format
  msgid "You don't have enough free space in %s."
  msgstr ""
  
 -#: cmdline/apt-get.cc:887 cmdline/apt-get.cc:907
 +#: cmdline/apt-get.cc:890 cmdline/apt-get.cc:910
  msgid "Trivial Only specified but this is not a trivial operation."
  msgstr ""
  
 -#: cmdline/apt-get.cc:889
 +#: cmdline/apt-get.cc:892
  msgid "Yes, do as I say!"
  msgstr ""
  
 -#: cmdline/apt-get.cc:891
 +#: cmdline/apt-get.cc:894
  #, c-format
  msgid ""
  "You are about to do something potentially harmful.\n"
  " ?] "
  msgstr ""
  
 -#: cmdline/apt-get.cc:897 cmdline/apt-get.cc:916
 +#: cmdline/apt-get.cc:900 cmdline/apt-get.cc:919
  msgid "Abort."
  msgstr ""
  
 -#: cmdline/apt-get.cc:912
 +#: cmdline/apt-get.cc:915
  msgid "Do you want to continue [Y/n]? "
  msgstr ""
  
- #: cmdline/apt-get.cc:987 cmdline/apt-get.cc:2227 apt-pkg/algorithms.cc:1400
 -#: cmdline/apt-get.cc:984 cmdline/apt-get.cc:2214 apt-pkg/algorithms.cc:1344
++#: cmdline/apt-get.cc:987 cmdline/apt-get.cc:2227 apt-pkg/algorithms.cc:1407
  #, c-format
  msgid "Failed to fetch %s  %s\n"
  msgstr ""
  
 -#: cmdline/apt-get.cc:1002
 +#: cmdline/apt-get.cc:1005
  msgid "Some files failed to download"
  msgstr ""
  
 -#: cmdline/apt-get.cc:1003 cmdline/apt-get.cc:2223
 +#: cmdline/apt-get.cc:1006 cmdline/apt-get.cc:2236
  msgid "Download complete and in download only mode"
  msgstr ""
  
 -#: cmdline/apt-get.cc:1009
 +#: cmdline/apt-get.cc:1012
  msgid ""
  "Unable to fetch some archives, maybe run apt-get update or try with --fix-"
  "missing?"
  msgstr ""
  
 -#: cmdline/apt-get.cc:1013
 +#: cmdline/apt-get.cc:1016
  msgid "--fix-missing and media swapping is not currently supported"
  msgstr ""
  
 -#: cmdline/apt-get.cc:1018
 +#: cmdline/apt-get.cc:1021
  msgid "Unable to correct missing packages."
  msgstr ""
  
 -#: cmdline/apt-get.cc:1019
 +#: cmdline/apt-get.cc:1022
  msgid "Aborting install."
  msgstr ""
  
 -#: cmdline/apt-get.cc:1053
 +#: cmdline/apt-get.cc:1056
  #, c-format
  msgid "Note, selecting %s instead of %s\n"
  msgstr ""
  
 -#: cmdline/apt-get.cc:1063
 +#: cmdline/apt-get.cc:1066
  #, c-format
  msgid "Skipping %s, it is already installed and upgrade is not set.\n"
  msgstr ""
  
 -#: cmdline/apt-get.cc:1081
 +#: cmdline/apt-get.cc:1084
  #, c-format
  msgid "Package %s is not installed, so not removed\n"
  msgstr ""
  
 -#: cmdline/apt-get.cc:1092
 +#: cmdline/apt-get.cc:1095
  #, c-format
  msgid "Package %s is a virtual package provided by:\n"
  msgstr ""
  
 -#: cmdline/apt-get.cc:1104
 +#: cmdline/apt-get.cc:1107
  msgid " [Installed]"
  msgstr ""
  
 -#: cmdline/apt-get.cc:1109
 +#: cmdline/apt-get.cc:1112
  msgid "You should explicitly select one to install."
  msgstr ""
  
 -#: cmdline/apt-get.cc:1114
 +#: cmdline/apt-get.cc:1117
  #, 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:1133
 +#: cmdline/apt-get.cc:1136
  msgid "However the following packages replace it:"
  msgstr ""
  
 -#: cmdline/apt-get.cc:1136
 +#: cmdline/apt-get.cc:1139
  #, c-format
  msgid "Package %s has no installation candidate"
  msgstr ""
  
 -#: cmdline/apt-get.cc:1156
 +#: cmdline/apt-get.cc:1159
  #, c-format
  msgid "Reinstallation of %s is not possible, it cannot be downloaded.\n"
  msgstr ""
  
 -#: cmdline/apt-get.cc:1164
 +#: cmdline/apt-get.cc:1167
  #, c-format
  msgid "%s is already the newest version.\n"
  msgstr ""
  
 -#: cmdline/apt-get.cc:1193
 +#: cmdline/apt-get.cc:1196
  #, c-format
  msgid "Release '%s' for '%s' was not found"
  msgstr ""
  
 -#: cmdline/apt-get.cc:1195
 +#: cmdline/apt-get.cc:1198
  #, c-format
  msgid "Version '%s' for '%s' was not found"
  msgstr ""
  
 -#: cmdline/apt-get.cc:1201
 +#: cmdline/apt-get.cc:1204
  #, c-format
  msgid "Selected version %s (%s) for %s\n"
  msgstr ""
  
 -#: cmdline/apt-get.cc:1338
 +#: cmdline/apt-get.cc:1310
 +#, c-format
 +msgid "No source package '%s' picking '%s' instead\n"
 +msgstr ""
 +
 +#: cmdline/apt-get.cc:1348
  msgid "The update command takes no arguments"
  msgstr ""
  
 -#: cmdline/apt-get.cc:1351
 +#: cmdline/apt-get.cc:1361
  msgid "Unable to lock the list directory"
  msgstr ""
  
 -#: cmdline/apt-get.cc:1403
 +#: cmdline/apt-get.cc:1413
  msgid "We are not supposed to delete stuff, can't start AutoRemover"
  msgstr ""
  
 -#: cmdline/apt-get.cc:1435
 +#: cmdline/apt-get.cc:1445
  msgid ""
  "The following packages were automatically installed and are no longer "
  "required:"
  msgstr ""
  
 -#: cmdline/apt-get.cc:1437
 +#: cmdline/apt-get.cc:1447
  msgid "Use 'apt-get autoremove' to remove them."
  msgstr ""
  
 -#: cmdline/apt-get.cc:1442
 +#: cmdline/apt-get.cc:1452
  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:1445 cmdline/apt-get.cc:1733
 +#.
 +#. if (Packages == 1)
 +#. {
 +#. c1out << endl;
 +#. c1out <<
 +#. _("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.") << endl;
 +#. }
 +#.
 +#: cmdline/apt-get.cc:1455 cmdline/apt-get.cc:1745
  msgid "The following information may help to resolve the situation:"
  msgstr ""
  
 -#: cmdline/apt-get.cc:1449
 +#: cmdline/apt-get.cc:1459
  msgid "Internal Error, AutoRemover broke stuff"
  msgstr ""
  
 -#: cmdline/apt-get.cc:1468
 +#: cmdline/apt-get.cc:1478
  msgid "Internal error, AllUpgrade broke stuff"
  msgstr ""
  
 -#: cmdline/apt-get.cc:1523
 +#: cmdline/apt-get.cc:1533
  #, c-format
  msgid "Couldn't find task %s"
  msgstr ""
  
 -#: cmdline/apt-get.cc:1638 cmdline/apt-get.cc:1674
 +#: cmdline/apt-get.cc:1648 cmdline/apt-get.cc:1684
  #, c-format
  msgid "Couldn't find package %s"
  msgstr ""
  
 -#: cmdline/apt-get.cc:1661
 +#: cmdline/apt-get.cc:1671
  #, c-format
  msgid "Note, selecting %s for regex '%s'\n"
  msgstr ""
  
 -#: cmdline/apt-get.cc:1692
 +#: cmdline/apt-get.cc:1702
  #, c-format
  msgid "%s set to manually installed.\n"
  msgstr ""
  
 -#: cmdline/apt-get.cc:1705
 +#: cmdline/apt-get.cc:1715
  msgid "You might want to run `apt-get -f install' to correct these:"
  msgstr ""
  
 -#: cmdline/apt-get.cc:1708
 +#: cmdline/apt-get.cc:1718
  msgid ""
  "Unmet dependencies. Try 'apt-get -f install' with no packages (or specify a "
  "solution)."
  msgstr ""
  
 -#: cmdline/apt-get.cc:1720
 +#: cmdline/apt-get.cc:1730
  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:1728
 -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:1736
 +#: cmdline/apt-get.cc:1748
  msgid "Broken packages"
  msgstr ""
  
 -#: cmdline/apt-get.cc:1765
 +#: cmdline/apt-get.cc:1777
  msgid "The following extra packages will be installed:"
  msgstr ""
  
 -#: cmdline/apt-get.cc:1854
 +#: cmdline/apt-get.cc:1866
  msgid "Suggested packages:"
  msgstr ""
  
 -#: cmdline/apt-get.cc:1855
 +#: cmdline/apt-get.cc:1867
  msgid "Recommended packages:"
  msgstr ""
  
 -#: cmdline/apt-get.cc:1883
 +#: cmdline/apt-get.cc:1896
  msgid "Calculating upgrade... "
  msgstr ""
  
 -#: cmdline/apt-get.cc:1886 methods/ftp.cc:702 methods/connect.cc:112
 +#: cmdline/apt-get.cc:1899 methods/ftp.cc:702 methods/connect.cc:112
  msgid "Failed"
  msgstr ""
  
 -#: cmdline/apt-get.cc:1891
 +#: cmdline/apt-get.cc:1904
  msgid "Done"
  msgstr ""
  
 -#: cmdline/apt-get.cc:1958 cmdline/apt-get.cc:1966
 +#: cmdline/apt-get.cc:1971 cmdline/apt-get.cc:1979
  msgid "Internal error, problem resolver broke stuff"
  msgstr ""
  
 -#: cmdline/apt-get.cc:2066
 +#: cmdline/apt-get.cc:2079
  msgid "Must specify at least one package to fetch source for"
  msgstr ""
  
 -#: cmdline/apt-get.cc:2096 cmdline/apt-get.cc:2335
 +#: cmdline/apt-get.cc:2109 cmdline/apt-get.cc:2348
  #, c-format
  msgid "Unable to find a source package for %s"
  msgstr ""
  
 -#: cmdline/apt-get.cc:2145
 +#: cmdline/apt-get.cc:2158
  #, c-format
  msgid "Skipping already downloaded file '%s'\n"
  msgstr ""
  
 -#: cmdline/apt-get.cc:2173
 +#: cmdline/apt-get.cc:2186
  #, c-format
  msgid "You don't have enough free space in %s"
  msgstr ""
  
 -#: cmdline/apt-get.cc:2179
 +#: cmdline/apt-get.cc:2192
  #, c-format
  msgid "Need to get %sB/%sB of source archives.\n"
  msgstr ""
  
 -#: cmdline/apt-get.cc:2182
 +#: cmdline/apt-get.cc:2195
  #, c-format
  msgid "Need to get %sB of source archives.\n"
  msgstr ""
  
 -#: cmdline/apt-get.cc:2188
 +#: cmdline/apt-get.cc:2201
  #, c-format
  msgid "Fetch source %s\n"
  msgstr ""
  
 -#: cmdline/apt-get.cc:2219
 +#: cmdline/apt-get.cc:2232
  msgid "Failed to fetch some archives."
  msgstr ""
  
 -#: cmdline/apt-get.cc:2247
 +#: cmdline/apt-get.cc:2260
  #, c-format
  msgid "Skipping unpack of already unpacked source in %s\n"
  msgstr ""
  
 -#: cmdline/apt-get.cc:2259
 +#: cmdline/apt-get.cc:2272
  #, c-format
  msgid "Unpack command '%s' failed.\n"
  msgstr ""
  
 -#: cmdline/apt-get.cc:2260
 +#: cmdline/apt-get.cc:2273
  #, c-format
  msgid "Check if the 'dpkg-dev' package is installed.\n"
  msgstr ""
  
 -#: cmdline/apt-get.cc:2277
 +#: cmdline/apt-get.cc:2290
  #, c-format
  msgid "Build command '%s' failed.\n"
  msgstr ""
  
 -#: cmdline/apt-get.cc:2296
 +#: cmdline/apt-get.cc:2309
  msgid "Child process failed"
  msgstr ""
  
 -#: cmdline/apt-get.cc:2312
 +#: cmdline/apt-get.cc:2325
  msgid "Must specify at least one package to check builddeps for"
  msgstr ""
  
 -#: cmdline/apt-get.cc:2340
 +#: cmdline/apt-get.cc:2353
  #, c-format
  msgid "Unable to get build-dependency information for %s"
  msgstr ""
  
 -#: cmdline/apt-get.cc:2360
 +#: cmdline/apt-get.cc:2373
  #, c-format
  msgid "%s has no build depends.\n"
  msgstr ""
  
 -#: cmdline/apt-get.cc:2412
 +#: cmdline/apt-get.cc:2425
  #, c-format
  msgid ""
  "%s dependency for %s cannot be satisfied because the package %s cannot be "
  "found"
  msgstr ""
  
 -#: cmdline/apt-get.cc:2465
 +#: cmdline/apt-get.cc:2478
  #, 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:2501
 +#: cmdline/apt-get.cc:2514
  #, c-format
  msgid "Failed to satisfy %s dependency for %s: Installed package %s is too new"
  msgstr ""
  
 -#: cmdline/apt-get.cc:2526
 +#: cmdline/apt-get.cc:2541
  #, c-format
  msgid "Failed to satisfy %s dependency for %s: %s"
  msgstr ""
  
 -#: cmdline/apt-get.cc:2540
 +#: cmdline/apt-get.cc:2555
  #, c-format
  msgid "Build-dependencies for %s could not be satisfied."
  msgstr ""
  
 -#: cmdline/apt-get.cc:2544
 +#: cmdline/apt-get.cc:2559
  msgid "Failed to process build dependencies"
  msgstr ""
  
 -#: cmdline/apt-get.cc:2576
 +#: cmdline/apt-get.cc:2591
  msgid "Supported modules:"
  msgstr ""
  
 -#: cmdline/apt-get.cc:2617
 +#: cmdline/apt-get.cc:2632
  msgid ""
  "Usage: apt-get [options] command\n"
  "       apt-get [options] install|remove pkg1 [pkg2 ...]\n"
  "   install - Install new packages (pkg is libc6 not libc6.deb)\n"
  "   remove - Remove packages\n"
  "   autoremove - Remove automatically all unused packages\n"
 -"   purge - Remove and purge packages\n"
 +"   purge - Remove packages and config files\n"
  "   source - Download source archives\n"
  "   build-dep - Configure build-dependencies for source packages\n"
  "   dist-upgrade - Distribution upgrade, see apt-get(8)\n"
  "                       This APT has Super Cow Powers.\n"
  msgstr ""
  
 +#: cmdline/apt-get.cc:2799
 +msgid ""
 +"NOTE: This is only a simulation!\n"
 +"      apt-get needs root privileges for real execution.\n"
 +"      Keep also in mind that locking is deactivated,\n"
 +"      so don't depend on the relevance to the real current situation!"
 +msgstr ""
 +
  #: cmdline/acqprogress.cc:55
  msgid "Hit "
  msgstr ""
@@@ -1386,9 -1370,9 +1381,9 @@@ msgstr "
  msgid "File %s/%s overwrites the one in the package %s"
  msgstr ""
  
 -#: apt-inst/extract.cc:464 apt-pkg/contrib/configuration.cc:821
 +#: apt-inst/extract.cc:464 apt-pkg/contrib/configuration.cc:822
  #: apt-pkg/contrib/cdromutl.cc:150 apt-pkg/sourcelist.cc:320
--#: apt-pkg/acquire.cc:418 apt-pkg/clean.cc:34
++#: apt-pkg/acquire.cc:419 apt-pkg/clean.cc:34 apt-pkg/policy.cc:268
  #, c-format
  msgid "Unable to read %s"
  msgstr ""
@@@ -1418,9 -1402,9 +1413,9 @@@ msgid "The info and temp directories ne
  msgstr ""
  
  #. Build the status cache
 -#: apt-inst/deb/dpkgdb.cc:135 apt-pkg/pkgcachegen.cc:748
 -#: apt-pkg/pkgcachegen.cc:817 apt-pkg/pkgcachegen.cc:822
 -#: apt-pkg/pkgcachegen.cc:945
 +#: apt-inst/deb/dpkgdb.cc:135 apt-pkg/pkgcachegen.cc:760
 +#: apt-pkg/pkgcachegen.cc:829 apt-pkg/pkgcachegen.cc:834
 +#: apt-pkg/pkgcachegen.cc:957
  msgid "Reading package lists"
  msgstr ""
  
@@@ -1613,7 -1597,7 +1608,7 @@@ msgstr "
  msgid "Server closed the connection"
  msgstr ""
  
- #: methods/ftp.cc:338 apt-pkg/contrib/fileutl.cc:538 methods/rsh.cc:190
 -#: methods/ftp.cc:338 apt-pkg/contrib/fileutl.cc:536 methods/rsh.cc:190
++#: methods/ftp.cc:338 apt-pkg/contrib/fileutl.cc:541 methods/rsh.cc:190
  msgid "Read error"
  msgstr ""
  
@@@ -1625,7 -1609,7 +1620,7 @@@ msgstr "
  msgid "Protocol corruption"
  msgstr ""
  
- #: methods/ftp.cc:446 apt-pkg/contrib/fileutl.cc:577 methods/rsh.cc:232
 -#: methods/ftp.cc:446 apt-pkg/contrib/fileutl.cc:575 methods/rsh.cc:232
++#: methods/ftp.cc:446 apt-pkg/contrib/fileutl.cc:580 methods/rsh.cc:232
  msgid "Write error"
  msgstr ""
  
@@@ -1679,7 -1663,7 +1674,7 @@@ msgstr "
  msgid "Unable to accept connection"
  msgstr ""
  
 -#: methods/ftp.cc:864 methods/http.cc:959 methods/rsh.cc:303
 +#: methods/ftp.cc:864 methods/http.cc:991 methods/rsh.cc:303
  msgid "Problem hashing file"
  msgstr ""
  
@@@ -1763,38 -1747,38 +1758,38 @@@ msgstr "
  msgid "Unable to connect to %s %s:"
  msgstr ""
  
 -#: methods/gpgv.cc:65
 +#: methods/gpgv.cc:71
  #, c-format
  msgid "Couldn't access keyring: '%s'"
  msgstr ""
  
 -#: methods/gpgv.cc:101
 +#: methods/gpgv.cc:107
  msgid "E: Argument list from Acquire::gpgv::Options too long. Exiting."
  msgstr ""
  
 -#: methods/gpgv.cc:205
 +#: methods/gpgv.cc:223
  msgid ""
  "Internal error: Good signature, but could not determine key fingerprint?!"
  msgstr ""
  
 -#: methods/gpgv.cc:210
 +#: methods/gpgv.cc:228
  msgid "At least one invalid signature was encountered."
  msgstr ""
  
 -#: methods/gpgv.cc:214
 +#: methods/gpgv.cc:232
  #, c-format
  msgid "Could not execute '%s' to verify signature (is gpgv installed?)"
  msgstr ""
  
 -#: methods/gpgv.cc:219
 +#: methods/gpgv.cc:237
  msgid "Unknown error executing gpgv"
  msgstr ""
  
 -#: methods/gpgv.cc:250
 +#: methods/gpgv.cc:271 methods/gpgv.cc:278
  msgid "The following signatures were invalid:\n"
  msgstr ""
  
 -#: methods/gpgv.cc:257
 +#: methods/gpgv.cc:285
  msgid ""
  "The following signatures couldn't be verified because the public key is not "
  "available:\n"
@@@ -1810,80 -1794,76 +1805,80 @@@ msgstr "
  msgid "Read error from %s process"
  msgstr ""
  
 -#: methods/http.cc:377
 +#: methods/http.cc:379
  msgid "Waiting for headers"
  msgstr ""
  
 -#: methods/http.cc:523
 +#: methods/http.cc:525
  #, c-format
  msgid "Got a single header line over %u chars"
  msgstr ""
  
 -#: methods/http.cc:531
 +#: methods/http.cc:533
  msgid "Bad header line"
  msgstr ""
  
 -#: methods/http.cc:550 methods/http.cc:557
 +#: methods/http.cc:552 methods/http.cc:559
  msgid "The HTTP server sent an invalid reply header"
  msgstr ""
  
 -#: methods/http.cc:586
 +#: methods/http.cc:588
  msgid "The HTTP server sent an invalid Content-Length header"
  msgstr ""
  
 -#: methods/http.cc:601
 +#: methods/http.cc:603
  msgid "The HTTP server sent an invalid Content-Range header"
  msgstr ""
  
 -#: methods/http.cc:603
 +#: methods/http.cc:605
  msgid "This HTTP server has broken range support"
  msgstr ""
  
 -#: methods/http.cc:627
 +#: methods/http.cc:629
  msgid "Unknown date format"
  msgstr ""
  
 -#: methods/http.cc:774
 +#: methods/http.cc:782
  msgid "Select failed"
  msgstr ""
  
 -#: methods/http.cc:779
 +#: methods/http.cc:787
  msgid "Connection timed out"
  msgstr ""
  
 -#: methods/http.cc:802
 +#: methods/http.cc:810
  msgid "Error writing to output file"
  msgstr ""
  
 -#: methods/http.cc:833
 +#: methods/http.cc:841
  msgid "Error writing to file"
  msgstr ""
  
 -#: methods/http.cc:861
 +#: methods/http.cc:869
  msgid "Error writing to the file"
  msgstr ""
  
 -#: methods/http.cc:875
 +#: methods/http.cc:883
  msgid "Error reading from server. Remote end closed connection"
  msgstr ""
  
 -#: methods/http.cc:877
 +#: methods/http.cc:885
  msgid "Error reading from server"
  msgstr ""
  
 -#: methods/http.cc:1104
 +#: methods/http.cc:976 apt-pkg/contrib/mmap.cc:196
 +msgid "Failed to truncate file"
 +msgstr ""
 +
 +#: methods/http.cc:1141
  msgid "Bad header data"
  msgstr ""
  
 -#: methods/http.cc:1121 methods/http.cc:1176
 +#: methods/http.cc:1158 methods/http.cc:1213
  msgid "Connection failed"
  msgstr ""
  
 -#: methods/http.cc:1228
 +#: methods/http.cc:1305
  msgid "Internal error"
  msgstr ""
  
@@@ -1896,38 -1876,7 +1891,38 @@@ msgstr "
  msgid "Couldn't make mmap of %lu bytes"
  msgstr ""
  
 -#: apt-pkg/contrib/strutl.cc:1014
 +#: apt-pkg/contrib/mmap.cc:213 apt-pkg/contrib/mmap.cc:276
 +#, c-format
 +msgid ""
 +"Dynamic MMap ran out of room. Please increase the size of APT::Cache-Limit. "
 +"Current value: %lu. (man 5 apt.conf)"
 +msgstr ""
 +
 +#. d means days, h means hours, min means minutes, s means seconds
 +#: apt-pkg/contrib/strutl.cc:335
 +#, c-format
 +msgid "%lid %lih %limin %lis"
 +msgstr ""
 +
 +#. h means hours, min means minutes, s means seconds
 +#: apt-pkg/contrib/strutl.cc:342
 +#, c-format
 +msgid "%lih %limin %lis"
 +msgstr ""
 +
 +#. min means minutes, s means seconds
 +#: apt-pkg/contrib/strutl.cc:349
 +#, c-format
 +msgid "%limin %lis"
 +msgstr ""
 +
 +#. s means seconds
 +#: apt-pkg/contrib/strutl.cc:354
 +#, c-format
 +msgid "%lis"
 +msgstr ""
 +
 +#: apt-pkg/contrib/strutl.cc:1029
  #, c-format
  msgid "Selection %s not found"
  msgstr ""
@@@ -1942,42 -1891,42 +1937,42 @@@ msgstr "
  msgid "Opening configuration file %s"
  msgstr ""
  
 -#: apt-pkg/contrib/configuration.cc:662
 +#: apt-pkg/contrib/configuration.cc:663
  #, c-format
  msgid "Syntax error %s:%u: Block starts with no name."
  msgstr ""
  
 -#: apt-pkg/contrib/configuration.cc:681
 +#: apt-pkg/contrib/configuration.cc:682
  #, c-format
  msgid "Syntax error %s:%u: Malformed tag"
  msgstr ""
  
 -#: apt-pkg/contrib/configuration.cc:698
 +#: apt-pkg/contrib/configuration.cc:699
  #, c-format
  msgid "Syntax error %s:%u: Extra junk after value"
  msgstr ""
  
 -#: apt-pkg/contrib/configuration.cc:738
 +#: apt-pkg/contrib/configuration.cc:739
  #, c-format
  msgid "Syntax error %s:%u: Directives can only be done at the top level"
  msgstr ""
  
 -#: apt-pkg/contrib/configuration.cc:745
 +#: apt-pkg/contrib/configuration.cc:746
  #, c-format
  msgid "Syntax error %s:%u: Too many nested includes"
  msgstr ""
  
 -#: apt-pkg/contrib/configuration.cc:749 apt-pkg/contrib/configuration.cc:754
 +#: apt-pkg/contrib/configuration.cc:750 apt-pkg/contrib/configuration.cc:755
  #, c-format
  msgid "Syntax error %s:%u: Included from here"
  msgstr ""
  
 -#: apt-pkg/contrib/configuration.cc:758
 +#: apt-pkg/contrib/configuration.cc:759
  #, c-format
  msgid "Syntax error %s:%u: Unsupported directive '%s'"
  msgstr ""
  
 -#: apt-pkg/contrib/configuration.cc:809
 +#: apt-pkg/contrib/configuration.cc:810
  #, c-format
  msgid "Syntax error %s:%u: Extra junk at end of file"
  msgstr ""
@@@ -2043,182 -1992,177 +2038,187 @@@ msgstr "
  msgid "Unable to stat the mount point %s"
  msgstr ""
  
 -#: apt-pkg/contrib/cdromutl.cc:146 apt-pkg/acquire.cc:424 apt-pkg/clean.cc:40
 +#: apt-pkg/contrib/cdromutl.cc:146 apt-pkg/contrib/cdromutl.cc:180
- #: apt-pkg/acquire.cc:424 apt-pkg/acquire.cc:449 apt-pkg/clean.cc:40
++#: apt-pkg/acquire.cc:425 apt-pkg/acquire.cc:450 apt-pkg/clean.cc:40
  #, c-format
  msgid "Unable to change to %s"
  msgstr ""
  
 -#: apt-pkg/contrib/cdromutl.cc:187
 +#: apt-pkg/contrib/cdromutl.cc:188
  msgid "Failed to stat the cdrom"
  msgstr ""
  
 -#: apt-pkg/contrib/fileutl.cc:147
 +#: apt-pkg/contrib/fileutl.cc:149
  #, c-format
  msgid "Not using locking for read only lock file %s"
  msgstr ""
  
 -#: apt-pkg/contrib/fileutl.cc:152
 +#: apt-pkg/contrib/fileutl.cc:154
  #, c-format
  msgid "Could not open lock file %s"
  msgstr ""
  
 -#: apt-pkg/contrib/fileutl.cc:170
 +#: apt-pkg/contrib/fileutl.cc:172
  #, c-format
  msgid "Not using locking for nfs mounted lock file %s"
  msgstr ""
  
 -#: apt-pkg/contrib/fileutl.cc:174
 +#: apt-pkg/contrib/fileutl.cc:176
  #, c-format
  msgid "Could not get lock %s"
  msgstr ""
  
 -#: apt-pkg/contrib/fileutl.cc:442
 +#: apt-pkg/contrib/fileutl.cc:444
  #, c-format
  msgid "Waited for %s but it wasn't there"
  msgstr ""
  
- #: apt-pkg/contrib/fileutl.cc:454
 -#: apt-pkg/contrib/fileutl.cc:452
++#: apt-pkg/contrib/fileutl.cc:455
  #, c-format
  msgid "Sub-process %s received a segmentation fault."
  msgstr ""
  
 -#: apt-pkg/contrib/fileutl.cc:455
 +#: apt-pkg/contrib/fileutl.cc:457
 +#, c-format
++msgid "Sub-process %s received signal %u."
++msgstr ""
++
++#: apt-pkg/contrib/fileutl.cc:460
+ #, c-format
  msgid "Sub-process %s returned an error code (%u)"
  msgstr ""
  
- #: apt-pkg/contrib/fileutl.cc:459
 -#: apt-pkg/contrib/fileutl.cc:457
++#: apt-pkg/contrib/fileutl.cc:462
  #, c-format
  msgid "Sub-process %s exited unexpectedly"
  msgstr ""
  
- #: apt-pkg/contrib/fileutl.cc:503
 -#: apt-pkg/contrib/fileutl.cc:501
++#: apt-pkg/contrib/fileutl.cc:506
  #, c-format
  msgid "Could not open file %s"
  msgstr ""
  
- #: apt-pkg/contrib/fileutl.cc:559
 -#: apt-pkg/contrib/fileutl.cc:557
++#: apt-pkg/contrib/fileutl.cc:562
  #, c-format
  msgid "read, still have %lu to read but none left"
  msgstr ""
  
- #: apt-pkg/contrib/fileutl.cc:589
 -#: apt-pkg/contrib/fileutl.cc:587
++#: apt-pkg/contrib/fileutl.cc:592
  #, c-format
  msgid "write, still have %lu to write but couldn't"
  msgstr ""
  
- #: apt-pkg/contrib/fileutl.cc:664
 -#: apt-pkg/contrib/fileutl.cc:662
++#: apt-pkg/contrib/fileutl.cc:667
  msgid "Problem closing the file"
  msgstr ""
  
- #: apt-pkg/contrib/fileutl.cc:670
 -#: apt-pkg/contrib/fileutl.cc:668
++#: apt-pkg/contrib/fileutl.cc:673
  msgid "Problem unlinking the file"
  msgstr ""
  
- #: apt-pkg/contrib/fileutl.cc:681
 -#: apt-pkg/contrib/fileutl.cc:679
++#: apt-pkg/contrib/fileutl.cc:684
  msgid "Problem syncing the file"
  msgstr ""
  
 -#: apt-pkg/pkgcache.cc:132
 +#: apt-pkg/pkgcache.cc:133
  msgid "Empty package cache"
  msgstr ""
  
 -#: apt-pkg/pkgcache.cc:138
 +#: apt-pkg/pkgcache.cc:139
  msgid "The package cache file is corrupted"
  msgstr ""
  
 -#: apt-pkg/pkgcache.cc:143
 +#: apt-pkg/pkgcache.cc:144
  msgid "The package cache file is an incompatible version"
  msgstr ""
  
 -#: apt-pkg/pkgcache.cc:148
 +#: apt-pkg/pkgcache.cc:149
  #, c-format
  msgid "This APT does not support the versioning system '%s'"
  msgstr ""
  
 -#: apt-pkg/pkgcache.cc:153
 +#: apt-pkg/pkgcache.cc:154
  msgid "The package cache was built for a different architecture"
  msgstr ""
  
 -#: apt-pkg/pkgcache.cc:224
 +#: apt-pkg/pkgcache.cc:225
  msgid "Depends"
  msgstr ""
  
 -#: apt-pkg/pkgcache.cc:224
 +#: apt-pkg/pkgcache.cc:225
  msgid "PreDepends"
  msgstr ""
  
 -#: apt-pkg/pkgcache.cc:224
 +#: apt-pkg/pkgcache.cc:225
  msgid "Suggests"
  msgstr ""
  
 -#: apt-pkg/pkgcache.cc:225
 +#: apt-pkg/pkgcache.cc:226
  msgid "Recommends"
  msgstr ""
  
 -#: apt-pkg/pkgcache.cc:225
 +#: apt-pkg/pkgcache.cc:226
  msgid "Conflicts"
  msgstr ""
  
 -#: apt-pkg/pkgcache.cc:225
 +#: apt-pkg/pkgcache.cc:226
  msgid "Replaces"
  msgstr ""
  
 -#: apt-pkg/pkgcache.cc:226
 +#: apt-pkg/pkgcache.cc:227
  msgid "Obsoletes"
  msgstr ""
  
 -#: apt-pkg/pkgcache.cc:226
 +#: apt-pkg/pkgcache.cc:227
  msgid "Breaks"
  msgstr ""
  
 -#: apt-pkg/pkgcache.cc:237
 +#: apt-pkg/pkgcache.cc:227
 +msgid "Enhances"
 +msgstr ""
 +
 +#: apt-pkg/pkgcache.cc:238
  msgid "important"
  msgstr ""
  
 -#: apt-pkg/pkgcache.cc:237
 +#: apt-pkg/pkgcache.cc:238
  msgid "required"
  msgstr ""
  
 -#: apt-pkg/pkgcache.cc:237
 +#: apt-pkg/pkgcache.cc:238
  msgid "standard"
  msgstr ""
  
 -#: apt-pkg/pkgcache.cc:238
 +#: apt-pkg/pkgcache.cc:239
  msgid "optional"
  msgstr ""
  
 -#: apt-pkg/pkgcache.cc:238
 +#: apt-pkg/pkgcache.cc:239
  msgid "extra"
  msgstr ""
  
 -#: apt-pkg/depcache.cc:121 apt-pkg/depcache.cc:150
 +#: apt-pkg/depcache.cc:123 apt-pkg/depcache.cc:152
  msgid "Building dependency tree"
  msgstr ""
  
 -#: apt-pkg/depcache.cc:122
 +#: apt-pkg/depcache.cc:124
  msgid "Candidate versions"
  msgstr ""
  
 -#: apt-pkg/depcache.cc:151
 +#: apt-pkg/depcache.cc:153
  msgid "Dependency generation"
  msgstr ""
  
 -#: apt-pkg/depcache.cc:172 apt-pkg/depcache.cc:191 apt-pkg/depcache.cc:195
 +#: apt-pkg/depcache.cc:174 apt-pkg/depcache.cc:193 apt-pkg/depcache.cc:197
  msgid "Reading state information"
  msgstr ""
  
 -#: apt-pkg/depcache.cc:219
 +#: apt-pkg/depcache.cc:221
  #, c-format
  msgid "Failed to open StateFile %s"
  msgstr ""
  
 -#: apt-pkg/depcache.cc:225
 +#: apt-pkg/depcache.cc:227
  #, c-format
  msgid "Failed to write temporary StateFile %s"
  msgstr ""
@@@ -2296,46 -2240,46 +2296,46 @@@ msgstr "
  msgid "Index file type '%s' is not supported"
  msgstr ""
  
 -#: apt-pkg/algorithms.cc:247
 +#: apt-pkg/algorithms.cc:248
  #, c-format
  msgid ""
  "The package %s needs to be reinstalled, but I can't find an archive for it."
  msgstr ""
  
- #: apt-pkg/algorithms.cc:1147
 -#: apt-pkg/algorithms.cc:1106
++#: apt-pkg/algorithms.cc:1154
  msgid ""
  "Error, pkgProblemResolver::Resolve generated breaks, this may be caused by "
  "held packages."
  msgstr ""
  
- #: apt-pkg/algorithms.cc:1149
 -#: apt-pkg/algorithms.cc:1108
++#: apt-pkg/algorithms.cc:1156
  msgid "Unable to correct problems, you have held broken packages."
  msgstr ""
  
- #: apt-pkg/algorithms.cc:1426 apt-pkg/algorithms.cc:1428
 -#: apt-pkg/algorithms.cc:1370 apt-pkg/algorithms.cc:1372
++#: apt-pkg/algorithms.cc:1433 apt-pkg/algorithms.cc:1435
  msgid ""
  "Some index files failed to download, they have been ignored, or old ones "
  "used instead."
  msgstr ""
  
--#: apt-pkg/acquire.cc:59
++#: apt-pkg/acquire.cc:60
  #, c-format
  msgid "Lists directory %spartial is missing."
  msgstr ""
  
--#: apt-pkg/acquire.cc:63
++#: apt-pkg/acquire.cc:64
  #, c-format
  msgid "Archive directory %spartial is missing."
  msgstr ""
  
  #. only show the ETA if it makes sense
  #. two days
- #: apt-pkg/acquire.cc:828
 -#: apt-pkg/acquire.cc:827
++#: apt-pkg/acquire.cc:829
  #, c-format
  msgid "Retrieving file %li of %li (%s remaining)"
  msgstr ""
  
- #: apt-pkg/acquire.cc:830
 -#: apt-pkg/acquire.cc:829
++#: apt-pkg/acquire.cc:831
  #, c-format
  msgid "Retrieving file %li of %li"
  msgstr ""
@@@ -2350,17 -2294,17 +2350,17 @@@ msgstr "
  msgid "Method %s did not start correctly"
  msgstr ""
  
 -#: apt-pkg/acquire-worker.cc:399
 +#: apt-pkg/acquire-worker.cc:413
  #, c-format
  msgid "Please insert the disc labeled: '%s' in the drive '%s' and press enter."
  msgstr ""
  
--#: apt-pkg/init.cc:124
++#: apt-pkg/init.cc:125
  #, c-format
  msgid "Packaging system '%s' is not supported"
  msgstr ""
  
--#: apt-pkg/init.cc:140
++#: apt-pkg/init.cc:141
  msgid "Unable to determine a suitable packaging system type"
  msgstr ""
  
@@@ -2381,16 -2325,16 +2381,17 @@@ msgstr "
  msgid "You may want to run apt-get update to correct these problems"
  msgstr ""
  
- #: apt-pkg/policy.cc:281
 -#: apt-pkg/policy.cc:267
--msgid "Invalid record in the preferences file, no Package header"
++#: apt-pkg/policy.cc:329
++#, c-format
++msgid "Invalid record in the preferences file %s, no Package header"
  msgstr ""
  
- #: apt-pkg/policy.cc:303
 -#: apt-pkg/policy.cc:289
++#: apt-pkg/policy.cc:351
  #, c-format
  msgid "Did not understand pin type %s"
  msgstr ""
  
- #: apt-pkg/policy.cc:311
 -#: apt-pkg/policy.cc:297
++#: apt-pkg/policy.cc:359
  msgid "No priority (or zero) specified for pin"
  msgstr ""
  
@@@ -2408,82 -2352,82 +2409,82 @@@ msgstr "
  msgid "Error occurred while processing %s (UsePackage1)"
  msgstr ""
  
 -#: apt-pkg/pkgcachegen.cc:153
 +#: apt-pkg/pkgcachegen.cc:164
  #, c-format
  msgid "Error occurred while processing %s (NewFileDesc1)"
  msgstr ""
  
 -#: apt-pkg/pkgcachegen.cc:178
 +#: apt-pkg/pkgcachegen.cc:189
  #, c-format
  msgid "Error occurred while processing %s (UsePackage2)"
  msgstr ""
  
 -#: apt-pkg/pkgcachegen.cc:182
 +#: apt-pkg/pkgcachegen.cc:193
  #, c-format
  msgid "Error occurred while processing %s (NewFileVer1)"
  msgstr ""
  
 -#: apt-pkg/pkgcachegen.cc:213
 +#: apt-pkg/pkgcachegen.cc:224
  #, c-format
  msgid "Error occurred while processing %s (NewVersion1)"
  msgstr ""
  
 -#: apt-pkg/pkgcachegen.cc:217
 +#: apt-pkg/pkgcachegen.cc:228
  #, c-format
  msgid "Error occurred while processing %s (UsePackage3)"
  msgstr ""
  
 -#: apt-pkg/pkgcachegen.cc:221
 +#: apt-pkg/pkgcachegen.cc:232
  #, c-format
  msgid "Error occurred while processing %s (NewVersion2)"
  msgstr ""
  
 -#: apt-pkg/pkgcachegen.cc:245
 +#: apt-pkg/pkgcachegen.cc:256
  #, c-format
  msgid "Error occurred while processing %s (NewFileDesc2)"
  msgstr ""
  
 -#: apt-pkg/pkgcachegen.cc:251
 +#: apt-pkg/pkgcachegen.cc:262
  msgid "Wow, you exceeded the number of package names this APT is capable of."
  msgstr ""
  
 -#: apt-pkg/pkgcachegen.cc:254
 +#: apt-pkg/pkgcachegen.cc:265
  msgid "Wow, you exceeded the number of versions this APT is capable of."
  msgstr ""
  
 -#: apt-pkg/pkgcachegen.cc:257
 +#: apt-pkg/pkgcachegen.cc:268
  msgid "Wow, you exceeded the number of descriptions this APT is capable of."
  msgstr ""
  
 -#: apt-pkg/pkgcachegen.cc:260
 +#: apt-pkg/pkgcachegen.cc:271
  msgid "Wow, you exceeded the number of dependencies this APT is capable of."
  msgstr ""
  
 -#: apt-pkg/pkgcachegen.cc:288
 +#: apt-pkg/pkgcachegen.cc:299
  #, c-format
  msgid "Error occurred while processing %s (FindPkg)"
  msgstr ""
  
 -#: apt-pkg/pkgcachegen.cc:301
 +#: apt-pkg/pkgcachegen.cc:312
  #, c-format
  msgid "Error occurred while processing %s (CollectFileProvides)"
  msgstr ""
  
 -#: apt-pkg/pkgcachegen.cc:307
 +#: apt-pkg/pkgcachegen.cc:318
  #, c-format
  msgid "Package %s %s was not found while processing file dependencies"
  msgstr ""
  
 -#: apt-pkg/pkgcachegen.cc:678
 +#: apt-pkg/pkgcachegen.cc:690
  #, c-format
  msgid "Couldn't stat source package list %s"
  msgstr ""
  
 -#: apt-pkg/pkgcachegen.cc:763
 +#: apt-pkg/pkgcachegen.cc:775
  msgid "Collecting File Provides"
  msgstr ""
  
 -#: apt-pkg/pkgcachegen.cc:890 apt-pkg/pkgcachegen.cc:897
 +#: apt-pkg/pkgcachegen.cc:902 apt-pkg/pkgcachegen.cc:909
  msgid "IO Error saving source cache"
  msgstr ""
  
@@@ -2496,38 -2440,38 +2497,53 @@@ msgstr "
  msgid "MD5Sum mismatch"
  msgstr ""
  
 -#: apt-pkg/acquire-item.cc:647 apt-pkg/acquire-item.cc:1408
 +#: apt-pkg/acquire-item.cc:658 apt-pkg/acquire-item.cc:1426
  msgid "Hash Sum mismatch"
  msgstr ""
  
 -#: apt-pkg/acquire-item.cc:1100
 +#: apt-pkg/acquire-item.cc:1118
  msgid "There is no public key available for the following key IDs:\n"
  msgstr ""
  
 -#: apt-pkg/acquire-item.cc:1213
 +#: apt-pkg/acquire-item.cc:1231
  #, 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:1272
 +#: apt-pkg/acquire-item.cc:1290
  #, 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:1313
 +#: apt-pkg/acquire-item.cc:1331
  #, c-format
  msgid ""
  "The package index files are corrupted. No Filename: field for package %s."
  msgstr ""
  
 -#: apt-pkg/acquire-item.cc:1400
 +#: apt-pkg/acquire-item.cc:1418
  msgid "Size mismatch"
  msgstr ""
  
++#: apt-pkg/indexrecords.cc:40
++#, c-format
++msgid "Unable to parse Release file %s"
++msgstr ""
++
++#: apt-pkg/indexrecords.cc:47
++#, c-format
++msgid "No sections in Release file %s"
++msgstr ""
++
++#: apt-pkg/indexrecords.cc:81
++#, c-format
++msgid "No Hash entry in Release file %s"
++msgstr ""
++
  #: apt-pkg/vendorlist.cc:66
  #, c-format
  msgid "Vendor block %s contains no fingerprint"
@@@ -2582,6 -2526,6 +2598,12 @@@ msgid "
  "zu signatures\n"
  msgstr ""
  
++#: apt-pkg/cdrom.cc:689
++msgid ""
++"Unable to locate any package files, perhaps this is not a Debian Disc or the "
++"wrong architecture?"
++msgstr ""
++
  #: apt-pkg/cdrom.cc:715
  #, c-format
  msgid "Found label '%s'\n"
@@@ -2610,103 -2554,100 +2632,119 @@@ msgstr "
  msgid "Source list entries for this disc are:\n"
  msgstr ""
  
--#: apt-pkg/indexcopy.cc:263 apt-pkg/indexcopy.cc:823
++#: apt-pkg/indexcopy.cc:263 apt-pkg/indexcopy.cc:833
  #, c-format
  msgid "Wrote %i records.\n"
  msgstr ""
  
--#: apt-pkg/indexcopy.cc:265 apt-pkg/indexcopy.cc:825
++#: apt-pkg/indexcopy.cc:265 apt-pkg/indexcopy.cc:835
  #, c-format
  msgid "Wrote %i records with %i missing files.\n"
  msgstr ""
  
--#: apt-pkg/indexcopy.cc:268 apt-pkg/indexcopy.cc:828
++#: apt-pkg/indexcopy.cc:268 apt-pkg/indexcopy.cc:838
  #, c-format
  msgid "Wrote %i records with %i mismatched files\n"
  msgstr ""
  
--#: apt-pkg/indexcopy.cc:271 apt-pkg/indexcopy.cc:831
++#: apt-pkg/indexcopy.cc:271 apt-pkg/indexcopy.cc:841
  #, c-format
  msgid "Wrote %i records with %i missing files and %i mismatched files\n"
  msgstr ""
  
 -#: apt-pkg/deb/dpkgpm.cc:486
 +#: apt-pkg/deb/dpkgpm.cc:49
  #, c-format
 -msgid "Directory '%s' missing"
 +msgid "Installing %s"
  msgstr ""
  
- #: apt-pkg/deb/dpkgpm.cc:50 apt-pkg/deb/dpkgpm.cc:612
 -#: apt-pkg/deb/dpkgpm.cc:569
++#: apt-pkg/deb/dpkgpm.cc:50 apt-pkg/deb/dpkgpm.cc:642
  #, c-format
 -msgid "Preparing %s"
 +msgid "Configuring %s"
  msgstr ""
  
- #: apt-pkg/deb/dpkgpm.cc:51 apt-pkg/deb/dpkgpm.cc:627
 -#: apt-pkg/deb/dpkgpm.cc:570
++#: apt-pkg/deb/dpkgpm.cc:51 apt-pkg/deb/dpkgpm.cc:649
  #, c-format
 -msgid "Unpacking %s"
 +msgid "Removing %s"
  msgstr ""
  
 -#: apt-pkg/deb/dpkgpm.cc:575
 +#: apt-pkg/deb/dpkgpm.cc:52
  #, c-format
 -msgid "Preparing to configure %s"
 +msgid "Running post-installation trigger %s"
  msgstr ""
  
- #: apt-pkg/deb/dpkgpm.cc:521
 -#: apt-pkg/deb/dpkgpm.cc:576 apt-pkg/deb/dpkgpm.cc:605
++#: apt-pkg/deb/dpkgpm.cc:546
  #, c-format
 -msgid "Configuring %s"
 +msgid "Directory '%s' missing"
  msgstr ""
  
- #: apt-pkg/deb/dpkgpm.cc:605
 -#: apt-pkg/deb/dpkgpm.cc:578 apt-pkg/deb/dpkgpm.cc:579
++#: apt-pkg/deb/dpkgpm.cc:635
  #, c-format
 -msgid "Processing triggers for %s"
 +msgid "Preparing %s"
  msgstr ""
  
- #: apt-pkg/deb/dpkgpm.cc:606
 -#: apt-pkg/deb/dpkgpm.cc:581
++#: apt-pkg/deb/dpkgpm.cc:636
  #, c-format
 -msgid "Installed %s"
 +msgid "Unpacking %s"
  msgstr ""
  
- #: apt-pkg/deb/dpkgpm.cc:611
 -#: apt-pkg/deb/dpkgpm.cc:586 apt-pkg/deb/dpkgpm.cc:588
 -#: apt-pkg/deb/dpkgpm.cc:589
++#: apt-pkg/deb/dpkgpm.cc:641
  #, c-format
 -msgid "Preparing for removal of %s"
 +msgid "Preparing to configure %s"
  msgstr ""
  
- #: apt-pkg/deb/dpkgpm.cc:614 apt-pkg/deb/dpkgpm.cc:615
- #, c-format
- msgid "Processing triggers for %s"
- msgstr ""
- #: apt-pkg/deb/dpkgpm.cc:617
 -#: apt-pkg/deb/dpkgpm.cc:591 apt-pkg/deb/dpkgpm.cc:606
++#: apt-pkg/deb/dpkgpm.cc:643
  #, c-format
 -msgid "Removing %s"
 +msgid "Installed %s"
  msgstr ""
  
- #: apt-pkg/deb/dpkgpm.cc:622 apt-pkg/deb/dpkgpm.cc:624
- #: apt-pkg/deb/dpkgpm.cc:625
 -#: apt-pkg/deb/dpkgpm.cc:592
++#: apt-pkg/deb/dpkgpm.cc:648
 +#, c-format
 +msgid "Preparing for removal of %s"
 +msgstr ""
 +
- #: apt-pkg/deb/dpkgpm.cc:628
++#: apt-pkg/deb/dpkgpm.cc:650
  #, c-format
  msgid "Removed %s"
  msgstr ""
  
- #: apt-pkg/deb/dpkgpm.cc:633
 -#: apt-pkg/deb/dpkgpm.cc:597
++#: apt-pkg/deb/dpkgpm.cc:655
  #, c-format
  msgid "Preparing to completely remove %s"
  msgstr ""
  
- #: apt-pkg/deb/dpkgpm.cc:634
 -#: apt-pkg/deb/dpkgpm.cc:598
++#: apt-pkg/deb/dpkgpm.cc:656
  #, c-format
  msgid "Completely removed %s"
  msgstr ""
  
- #: apt-pkg/deb/dpkgpm.cc:789
 -#. populate the "processing" map
 -#: apt-pkg/deb/dpkgpm.cc:604
++#: apt-pkg/deb/dpkgpm.cc:820
 +msgid "Can not write log, openpty() failed (/dev/pts not mounted?)\n"
 +msgstr ""
 +
++#: apt-pkg/deb/dpkgpm.cc:848
++msgid "Running dpkg"
++msgstr ""
++
++#: apt-pkg/deb/debsystem.cc:70
+ #, c-format
 -msgid "Installing %s"
++msgid ""
++"Unable to lock the administration directory (%s), is another process using "
++"it?"
+ msgstr ""
 -#: apt-pkg/deb/dpkgpm.cc:607
++#: apt-pkg/deb/debsystem.cc:73
+ #, c-format
 -msgid "Triggering %s"
++msgid "Unable to lock the administration directory (%s), are you root?"
+ msgstr ""
 -#: apt-pkg/deb/dpkgpm.cc:756
 -msgid "Can not write log, openpty() failed (/dev/pts not mounted?)\n"
++#: apt-pkg/deb/debsystem.cc:82
++msgid ""
++"dpkg was interrupted, you must manually run 'dpkg --configure -a' to correct "
++"the problem. "
++msgstr ""
++
 +#: apt-pkg/deb/debsystem.cc:100
 +msgid "Not locked"
  msgstr ""
  
  #: methods/rred.cc:219