]> git.saurik.com Git - apt.git/commitdiff
* merged with apt--ubuntu--0
authorMichael Vogt <michael.vogt@ubuntu.com>
Tue, 28 Jun 2005 12:31:17 +0000 (12:31 +0000)
committerMichael Vogt <michael.vogt@ubuntu.com>
Tue, 28 Jun 2005 12:31:17 +0000 (12:31 +0000)
Patches applied:

 * apt@packages.debian.org/apt--ubuntu--0--base-0
   tag of apt@packages.debian.org/apt--main--0--patch-88

 * apt@packages.debian.org/apt--ubuntu--0--patch-1
   Merge from Debian branch

 * apt@packages.debian.org/apt--ubuntu--0--patch-2
   0.6.38ubuntu1

 * apt@packages.debian.org/apt--ubuntu--0--patch-3
   Merge with mainline

 * apt@packages.debian.org/apt--ubuntu--0--patch-4
   Improved arch-build rule

 * apt@packages.debian.org/apt--ubuntu--0--patch-5
   Merge with mainline

 * apt@packages.debian.org/apt--ubuntu--0--patch-6
   Merge with mvo

 * michael.vogt@ubuntu.com--2005/apt--bts225947--0--base-0
   tag of apt@packages.debian.org/apt--main--0--patch-79

 * michael.vogt@ubuntu.com--2005/apt--bts225947--0--patch-1
   * merged with mainline and apt--fixes--0

 * michael.vogt@ubuntu.com--2005/apt--bts225947--0--patch-2
   * patch from aj (slighly modified to use auto_ptr<>) applied

 * michael.vogt@ubuntu.com--2005/apt--bts225947--0--patch-3
   * changelog updated

 * michael.vogt@ubuntu.com--2005/apt--bts225947--0--patch-4
   * work for arch=all packages too now

 * michael.vogt@ubuntu.com--2005/apt--sane-handle-timeout--0--base-0
   tag of apt@packages.debian.org/apt--main--0--patch-87

 * michael.vogt@ubuntu.com--2005/apt--sane-handle-timeout--0--patch-1
   * report timeouts (from Connect) and fail if they happen in pkgAcqMetaSig

 * michael.vogt@ubuntu.com--2005/apt--sane-handle-timeout--0--patch-2
   * merged with the fixes branch to make it build again

 * michael.vogt@ubuntu.com--2005/apt--ubuntu--0--patch-1
   tag of apt@packages.debian.org/apt--main--0--patch-88

 * michael.vogt@ubuntu.com--2005/apt--ubuntu--0--patch-2
   * merged apt--mvo (to make pining on components work again)

 * michael.vogt@ubuntu.com--2005/apt--ubuntu--0--patch-3
   * merged with apt--fixes--0 (to make the building of the french manpages work and to fix a incorrect man-page example

 * michael.vogt@ubuntu.com--2005/apt--ubuntu--0--patch-4
   * merged with the bts225947 code

 * michael.vogt@ubuntu.com--2005/apt--ubuntu--0--patch-5
   * merged the imporoved timoeut handling patch

 * michael.vogt@ubuntu.com--2005/apt--ubuntu--0--patch-6
   * merged with matt

 * michael.vogt@ubuntu.com--2005/apt--ubuntu--0--patch-7
   * removed another conflict with apt--main

16 files changed:
apt-pkg/algorithms.cc
apt-pkg/algorithms.h
apt-pkg/deb/dpkgpm.h
apt-pkg/depcache.cc
apt-pkg/depcache.h
apt-pkg/makefile
apt-pkg/packagemanager.cc
apt-pkg/packagemanager.h
apt-pkg/pkgcache.h
apt-pkg/pkgcachegen.cc
cmdline/apt-get.cc
configure.in
debian/changelog
doc/examples/configure-index
methods/makefile
po/apt-all.pot

index 479927d65519372d30a413c84ee55c059d39d9da..5167d11eb06ab560dac546ebd12607795d174211 100644 (file)
@@ -1061,6 +1061,20 @@ bool pkgProblemResolver::Resolve(bool BrokenFix)
       return _error->Error(_("Unable to correct problems, you have held broken packages."));
    }
    
+   // set the auto-flags (mvo: I'm not sure if we _really_ need this, but
+   // I didn't managed 
+   pkgCache::PkgIterator I = Cache.PkgBegin();
+   for (;I.end() != true; I++) {
+      if (Cache[I].NewInstall() && !(Flags[I->ID] & PreInstalled)) {
+        if(_config->FindI("Debug::pkgAutoRemove",false)) {
+           std::clog << "Resolve installed new pkg: " << I.Name() 
+                     << " (now marking it as auto)" << std::endl;
+        }
+        Cache[I].Flags |= pkgCache::Flag::Auto;
+      }
+   }
+
+
    return true;
 }
                                                                        /*}}}*/
@@ -1232,3 +1246,108 @@ void pkgPrioSortList(pkgCache &Cache,pkgCache::Version **List)
    qsort(List,Count,sizeof(*List),PrioComp);
 }
                                                                        /*}}}*/
+
+
+// pkgMarkPkgUsed - Mark used packages as dirty                                /*{{{*/
+// ---------------------------------------------------------------------
+/* Mark all reachable packages as dirty. */
+void pkgMarkPkgUsed(pkgDepCache &Cache, pkgCache::PkgIterator Pkg, 
+                  pkgCache::State::PkgRemoveState DirtLevel)
+{
+   // If it is not installed, and we are in manual mode, ignore it
+   if ((Pkg->CurrentVer == 0 && Cache[Pkg].Install() == false || Cache[Pkg].Delete() == true) &&
+       DirtLevel == pkgCache::State::RemoveManual) 
+   {
+//      fprintf(stdout,"This one is not installed/virtual %s %d %d\n", Pkg.Name(), Pkg->AutomaticRemove, DirtLevel);
+      return;
+   }
+
+   // If it is not installed, and it is not virtual, ignore it
+   if ((Pkg->CurrentVer == 0 && Cache[Pkg].Install() == false || Cache[Pkg].Delete() == true) &&
+       Pkg->VersionList != 0)
+   {
+//      fprintf(stdout,"This one is not installed %s %d %d\n", Pkg.Name(), Pkg->AutomaticRemove, DirtLevel);
+      return;
+   }
+
+   // If it is similar or more dirty than we are ;-), because we've been here already, don't mark it
+   // This is necessary because virtual packages just relay the current level,
+   // so it may be possible e.g. that this was already seen with ::RemoveSuggested, but
+   // we are ::RemoveRequired
+   if (Cache[Pkg].Dirty() >= DirtLevel) 
+   {
+      //fprintf(stdout,"Seen already %s %d %d\n", Pkg.Name(), Pkg->AutomaticRemove, DirtLevel);
+      return;
+   }
+   
+   // If it is less important than the current DirtLevel, don't mark it
+   if (Cache[Pkg].AutomaticRemove != pkgCache::State::RemoveManual && 
+      Cache[Pkg].AutomaticRemove > DirtLevel) 
+   {
+//       fprintf(stdout,"We don't need %s %d %d %d\n", Pkg.Name(), Pkg->AutomaticRemove, DirtLevel, Cache[Pkg].Dirty());
+       return;
+   }
+
+   // Mark it as used
+   Cache.SetDirty(Pkg, DirtLevel);
+       
+   //fprintf(stdout,"We keep %s %d %d\n", Pkg.Name(), Pkg->AutomaticRemove, DirtLevel);
+
+   // We are a virtual package
+   if (Pkg->VersionList == 0)
+   {
+//      fprintf(stdout,"We are virtual %s %d %d\n", Pkg.Name(), Pkg->AutomaticRemove, DirtLevel);
+      for (pkgCache::PrvIterator Prv = Pkg.ProvidesList(); ! Prv.end(); ++Prv)
+        pkgMarkPkgUsed (Cache, Prv.OwnerPkg(), DirtLevel);
+      return;
+   }
+
+   // Depending on the type of dependency, follow it
+   for (pkgCache::DepIterator D = Cache[Pkg].InstVerIter(Cache).DependsList(); ! D.end(); ++D) 
+   {
+//      fprintf(stdout,"We depend on %s %s\n", D.TargetPkg().Name(), D.DepType());
+
+      switch(D->Type) 
+      {
+        case pkgCache::Dep::Depends:
+        case pkgCache::Dep::PreDepends:
+           pkgMarkPkgUsed (Cache, D.TargetPkg(), pkgCache::State::RemoveRequired);
+           break;
+        case pkgCache::Dep::Recommends:
+            pkgMarkPkgUsed (Cache, D.TargetPkg(), pkgCache::State::RemoveRecommended);
+           break;
+         case pkgCache::Dep::Suggests:
+            pkgMarkPkgUsed (Cache, D.TargetPkg(), pkgCache::State::RemoveSuggested);
+           break;
+        case pkgCache::Dep::Conflicts:
+        case pkgCache::Dep::Replaces:
+        case pkgCache::Dep::Obsoletes:
+           // We don't handle these here
+           break;
+      }
+   }
+//   fprintf(stdout,"We keep %s %d %d <END>\n", Pkg.Name(), Pkg->AutomaticRemove, DirtLevel);
+}
+                                                                       /*}}}*/
+
+bool pkgMarkUsed(pkgDepCache &Cache)
+{
+   // debug only
+   if(_config->FindI("Debug::pkgAutoRemove",false) == true)
+     for (pkgCache::PkgIterator Pkg = Cache.PkgBegin(); ! Pkg.end(); ++Pkg)
+        if(!Cache[Pkg].Dirty() && Cache[Pkg].AutomaticRemove > 0)
+          std::clog << "has auto-remove information: " << Pkg.Name() 
+                    << " " << (int)Cache[Pkg].AutomaticRemove 
+                    << std::endl;
+
+   // init with defaults
+   for (pkgCache::PkgIterator Pkg = Cache.PkgBegin(); ! Pkg.end(); ++Pkg)
+      Cache.SetDirty(Pkg, pkgCache::State::RemoveUnknown);
+
+   // go recursive over the cache
+   for (pkgCache::PkgIterator Pkg = Cache.PkgBegin(); ! Pkg.end(); ++Pkg) 
+      pkgMarkPkgUsed (Cache, Pkg, pkgCache::State::RemoveManual);
+
+   
+   return true;
+}
index 174a7f58d18aea15aa0c36bf2fde93c243a3de8a..210127ab9125e321f5138242898baed9ce29d78d 100644 (file)
@@ -132,5 +132,9 @@ bool pkgAllUpgrade(pkgDepCache &Cache);
 bool pkgMinimizeUpgrade(pkgDepCache &Cache);
 
 void pkgPrioSortList(pkgCache &Cache,pkgCache::Version **List);
+
+// mark all reachable packages, everything that is not reach can 
+// be removed
+bool pkgMarkUsed(pkgDepCache &Cache);
                     
 #endif
index b59b9dc939b8a3b19109752e71e9bc630283950b..8bfdff5eb6f44d08a643b4b892dd010e461eb517 100644 (file)
@@ -40,7 +40,7 @@ class pkgDPkgPM : public pkgPackageManager
    bool RunScripts(const char *Cnf);
    bool RunScriptsWithPkgs(const char *Cnf);
    bool SendV2Pkgs(FILE *F);
-   
+
    // The Actuall installation implementation
    virtual bool Install(PkgIterator Pkg,string File);
    virtual bool Configure(PkgIterator Pkg);
index dd1c794c9912726d9b38d5f6e7e1b644c94aeacb..e30baa4b282c2bc2366cfbcbefdba4a9e3d0f92f 100644 (file)
 #include <apt-pkg/error.h>
 #include <apt-pkg/sptr.h>
 #include <apt-pkg/algorithms.h>
-    
+
+#include <apt-pkg/fileutl.h>
+#include <apt-pkg/configuration.h>
+#include <apt-pkg/tagfile.h>
+
+#include <iostream>
+#include <sstream>    
 #include <apti18n.h>    
                                                                        /*}}}*/
 
@@ -72,7 +78,10 @@ bool pkgDepCache::Init(OpProgress *Prog)
       // Find the proper cache slot
       StateCache &State = PkgState[I->ID];
       State.iFlags = 0;
-      
+      State.DirtyState = pkgCache::State::RemoveUnknown;
+      //State.AutomaticRemove = I->AutomaticRemove;
+      State.AutomaticRemove = pkgCache::State::RemoveUnknown;
+
       // Figure out the install version
       State.CandidateVer = GetCandidateVer(I);
       State.InstallVer = I.CurrentVer();
@@ -99,6 +108,78 @@ bool pkgDepCache::Init(OpProgress *Prog)
 } 
                                                                        /*}}}*/
 
+bool pkgDepCache::readStateFile(OpProgress *Prog)
+{
+   FileFd state_file;
+   string state = _config->FindDir("Dir::State") + "pkgstates";
+   if(FileExists(state)) {
+      state_file.Open(state, FileFd::ReadOnly);
+      int file_size = state_file.Size();
+      Prog->OverallProgress(0, file_size, 1, 
+                           _("Reading extended state information"));
+
+      pkgTagFile tagfile(&state_file);
+      pkgTagSection section;
+      int amt=0;
+      while(tagfile.Step(section)) {
+        string pkgname = section.FindS("Package");
+        pkgCache::PkgIterator pkg=Cache->FindPkg(pkgname);
+        // Silently ignore unknown packages and packages with no actual
+        // version.
+        if(!pkg.end() && !pkg.VersionList().end()) {
+           short reason = section.FindI("Remove-Reason", 
+                                        pkgCache::State::RemoveManual);
+           PkgState[pkg->ID].AutomaticRemove = reason;
+           //std::cout << "Set: " << pkgname << " to " << reason << std::endl;
+           amt+=section.size();
+           Prog->OverallProgress(amt, file_size, 1, 
+                                 _("Reading extended state information"));
+        }
+        Prog->OverallProgress(file_size, file_size, 1, 
+                              _("Reading extended state information"));
+      }
+   }
+
+   return true;
+}
+
+bool pkgDepCache::writeStateFile(OpProgress *prog)
+{
+   // FIXME: this function needs to be called inside the commit()
+   // of the package manager. so after 
+
+   FileFd StateFile;
+   string state = _config->FindDir("Dir::State") + "pkgstates";
+
+   if(!StateFile.Open(state, FileFd::WriteEmpty))
+      return _error->Error(_("Failed to write StateFile %s"),
+                          state.c_str());
+
+   std::ostringstream ostr;
+   for(pkgCache::PkgIterator pkg=Cache->PkgBegin(); !pkg.end();pkg++) {
+
+      // clear out no longer installed pkg
+      if(PkgState[pkg->ID].Delete() || pkg.CurrentVer() == NULL) 
+        PkgState[pkg->ID].AutomaticRemove = pkgCache::State::RemoveUnknown;
+
+      // check if we have new information
+      if(PkgState[pkg->ID].Flags & pkgCache::Flag::Auto) {
+        if(_config->FindI("Debug::pkgAutoRemove",false))
+           std::clog << "pkg: " << pkg.Name() << " is auto-dep" << std::endl;
+        PkgState[pkg->ID].AutomaticRemove = pkgCache::State::RemoveRequired;
+      }
+
+      if(PkgState[pkg->ID].AutomaticRemove != pkgCache::State::RemoveUnknown) {
+        ostr.str(string(""));
+        ostr << "Package: " << pkg.Name()
+             << "\nRemove-Reason: "
+             << (int)(PkgState[pkg->ID].AutomaticRemove) << "\n\n";
+        StateFile.Write(ostr.str().c_str(), ostr.str().size());
+      }
+   }
+   return true;
+}
+
 // DepCache::CheckDep - Checks a single dependency                     /*{{{*/
 // ---------------------------------------------------------------------
 /* This first checks the dependency against the main target package and
@@ -450,6 +531,8 @@ void pkgDepCache::Update(OpProgress *Prog)
       AddStates(I);
    }
 
+   readStateFile(Prog);
+
    if (Prog != 0)      
       Prog->Progress(Done);
 }
@@ -585,7 +668,8 @@ void pkgDepCache::MarkDelete(PkgIterator const &Pkg, bool rPurge)
    else
       P.Mode = ModeDelete;
    P.InstallVer = 0;
-   P.Flags &= Flag::Auto;
+   // This was not inverted before, but I think it should be
+   P.Flags &= ~Flag::Auto;
 
    AddStates(Pkg);   
    Update(Pkg);
@@ -757,6 +841,15 @@ void pkgDepCache::SetReInstall(PkgIterator const &Pkg,bool To)
    AddSizes(Pkg);
 }
                                                                        /*}}}*/
+// DepCache::SetDirty - Switch the package between dirty states                /*{{{*/
+// ---------------------------------------------------------------------
+/* */
+void pkgDepCache::SetDirty(PkgIterator const &Pkg, pkgCache::State::PkgRemoveState To)
+{
+   StateCache &P = PkgState[Pkg->ID];
+   P.DirtyState = To;
+}
+                                                                       /*}}}*/
 // DepCache::SetCandidateVersion - Change the candidate version                /*{{{*/
 // ---------------------------------------------------------------------
 /* */
index 6d51920e936d6fc0b2001bcafd09bca7e9c1e108..e02ed72f04885421f6c1fbbc2c80000f63f0ca42 100644 (file)
@@ -79,6 +79,10 @@ class pkgDepCache : protected pkgCache::Namespace
       unsigned short Flags;
       unsigned short iFlags;           // Internal flags
 
+      // Traversal status and state for automatic removal
+      unsigned char DirtyState;
+      unsigned char AutomaticRemove;
+
       // Various tree indicators
       signed char Status;              // -1,0,1,2
       unsigned char Mode;              // ModeList
@@ -99,6 +103,7 @@ class pkgDepCache : protected pkgCache::Namespace
       inline bool NowBroken() const {return (DepState & DepNowMin) != DepNowMin;};
       inline bool InstBroken() const {return (DepState & DepInstMin) != DepInstMin;};
       inline bool Install() const {return Mode == ModeInstall;};
+      inline unsigned char Dirty() const {return DirtyState;};
       inline VerIterator InstVerIter(pkgCache &Cache)
                 {return VerIterator(Cache,InstallVer);};
       inline VerIterator CandidateVerIter(pkgCache &Cache)
@@ -189,9 +194,14 @@ class pkgDepCache : protected pkgCache::Namespace
                    unsigned long Depth = 0);
    void SetReInstall(PkgIterator const &Pkg,bool To);
    void SetCandidateVersion(VerIterator TargetVer);
+   void SetDirty(PkgIterator const &Pkg, pkgCache::State::PkgRemoveState To);
    
    // This is for debuging
    void Update(OpProgress *Prog = 0);
+
+   // read persistent states
+   bool readStateFile(OpProgress *prog);
+   bool writeStateFile(OpProgress *prog);
    
    // Size queries
    inline double UsrSize() {return iUsrSize;};
index 5f48f0f529bf2aaf202c1aa6aaf94a0a82ff1727..8de7d945e2e388efdfbe144c0a00b16a6a9e11b2 100644 (file)
@@ -13,7 +13,7 @@ include ../buildlib/defaults.mak
 # methods/makefile - FIXME
 LIBRARY=apt-pkg
 LIBEXT=$(GLIBC_VER)$(LIBSTDCPP_VER)
-MAJOR=3.9
+MAJOR=3.10
 MINOR=0
 SLIBS=$(PTHREADLIB) $(INTLLIBS)
 APT_DOMAIN:=libapt-pkg$(MAJOR)
index a08ccd6027c293f7bc91cfe761e679c648195db3..71a0dd034cc649bbdf8ecf2b745a948c43bcf236 100644 (file)
@@ -627,16 +627,3 @@ pkgPackageManager::OrderResult pkgPackageManager::OrderInstall()
    return Completed;
 }
                                                                        /*}}}*/
-// PM::DoInstall - Does the installation                               /*{{{*/
-// ---------------------------------------------------------------------
-/* This uses the filenames in FileNames and the information in the
-   DepCache to perform the installation of packages.*/
-pkgPackageManager::OrderResult pkgPackageManager::DoInstall()
-{
-   OrderResult Res = OrderInstall();
-   if (Res != Failed)
-      if (Go() == false)
-        return Failed;
-   return Res;
-}
-                                                                       /*}}}*/
index 43f2c4acea2429b8cf45cba0f7681eb0c31421a6..da1f21e6ce90d6db3bb86b1a7d5fbd7b710c1db4 100644 (file)
@@ -29,6 +29,7 @@
 
 #include <string>
 #include <apt-pkg/pkgcache.h>
+#include <apt-pkg/depcache.h>
 
 using std::string;
 
@@ -70,13 +71,44 @@ class pkgPackageManager : protected pkgCache::Namespace
    virtual bool Remove(PkgIterator /*Pkg*/,bool /*Purge*/=false) {return false;};
    virtual bool Go(int statusFd=-1) {return true;};
    virtual void Reset() {};
-   
+
+   // the result of the operation
+   OrderResult Res;
+
    public:
       
    // Main action members
    bool GetArchives(pkgAcquire *Owner,pkgSourceList *Sources,
                    pkgRecords *Recs);
-   OrderResult DoInstall();
+
+   // Do the installation 
+   OrderResult DoInstall() {
+      if(DoInstallPreFork() == Failed)
+        return Failed;
+
+      return DoInstallPostFork();
+   }
+
+   // stuff that needs to be done before the fork() of a library that
+   // uses apt
+   OrderResult DoInstallPreFork() {
+      Res = OrderInstall();
+      return Res;
+   };
+
+   // stuff that needs to be done after the fork
+   OrderResult DoInstallPostFork(int statusFd=-1) {
+      bool goResult = Go(statusFd);
+      if(goResult == false) 
+        return Failed;
+      
+      // if all was fine update the state file
+      if(Res == Completed)
+        Cache.writeStateFile(NULL);
+
+      return Res;
+   };
+
    bool FixMissing();
    
    pkgPackageManager(pkgDepCache *Cache);
index b07951dfb8fbf26710c8790cd73af87e30c38f3d..083f20ac2ac2926d54e15d03e88482b653b7c027 100644 (file)
@@ -75,6 +75,7 @@ class pkgCache
       enum PkgInstState {Ok=0,ReInstReq=1,HoldInst=2,HoldReInstReq=3};
       enum PkgCurrentState {NotInstalled=0,UnPacked=1,HalfConfigured=2,
           HalfInstalled=4,ConfigFiles=5,Installed=6};
+      enum PkgRemoveState {RemoveUnknown=0, RemoveManual=1,RemoveSuggested=2,RemoveRecommended=3,RemoveRequired=4};
    };
    
    struct Flag
index 2340f97fd7e6cd90ff5d83551d6d662c8e734d52..04904057fb14a1d97475fbc29e952eaa41ab77e6 100644 (file)
@@ -26,6 +26,8 @@
 #include <apt-pkg/sptr.h>
 #include <apt-pkg/pkgsystem.h>
 
+#include <apt-pkg/tagfile.h>
+
 #include <apti18n.h>
 
 #include <vector>
index 316bb7af98eb112c0c8bff0c5c93c4bc7920544f..0236d7e77af5f17dbfa203def5e2b4ff3c97e305 100644 (file)
@@ -58,6 +58,7 @@
 #include <errno.h>
 #include <regex.h>
 #include <sys/wait.h>
+#include <sstream>
                                                                        /*}}}*/
 
 using namespace std;
@@ -992,7 +993,7 @@ bool InstallPackages(CacheFile &Cache,bool ShwKept,bool Ask = true,
         cerr << _("Unable to correct missing packages.") << endl;
         return _error->Error(_("Aborting install."));
       }
-                
+
       _system->UnLock();
       pkgPackageManager::OrderResult Res = PM->DoInstall();
       if (Res == pkgPackageManager::Failed || _error->PendingError() == true)
@@ -1355,6 +1356,48 @@ bool DoUpdate(CommandLine &CmdL)
    return true;
 }
                                                                        /*}}}*/
+// DoAutomaticRemove - Remove all automatic unused packages            /*{{{*/
+// ---------------------------------------------------------------------
+/* Remove unused automatic packages */
+bool DoAutomaticRemove(CacheFile &Cache)
+{
+   if(_config->FindI("Debug::pkgAutoRemove",false))
+      std::cout << "DoAutomaticRemove()" << std::endl;
+
+   if (_config->FindB("APT::Get::Remove",true) == false)
+      return _error->Error(_("We are not supposed to delete stuff, can't "
+                            "start AutoRemover"));
+
+   // do the actual work
+   pkgMarkUsed(Cache);
+
+   // look over the cache to see what can be removed
+   for (pkgCache::PkgIterator Pkg = Cache->PkgBegin(); ! Pkg.end(); ++Pkg)
+   {
+      if (! Cache[Pkg].Dirty() &&
+          (Pkg->CurrentVer != 0 && Cache[Pkg].Install() == false && 
+          Cache[Pkg].Delete() == false))
+      {
+         fprintf(stdout,"We could delete %s %d\n", 
+                Pkg.Name(), Cache[Pkg].AutomaticRemove);
+         Cache->MarkDelete(Pkg,_config->FindB("APT::Get::Purge",false));
+      }
+   }
+
+   // Now see if we destroyed anything
+   if (Cache->BrokenCount() != 0)
+   {
+      c1out << _("Hmm, seems like the AutoRemover destroyed something which really\n"
+                "shouldn't happen. Please file a bug report against apt.") << endl;
+      c1out << endl;
+      c1out << _("The following information may help to resolve the situation:") << endl;
+      c1out << endl;
+      ShowBroken(c1out,Cache,false);
+
+      return _error->Error(_("Internal Error, AutoRemover broke stuff"));
+   }
+   return true;
+}
 // DoUpgrade - Upgrade all packages                                    /*{{{*/
 // ---------------------------------------------------------------------
 /* Upgrade all packages without installing new packages or erasing old
@@ -1555,6 +1598,11 @@ bool DoInstall(CommandLine &CmdL)
       return _error->Error(_("Broken packages"));
    }   
    
+   if (_config->FindB("APT::Get::AutomaticRemove")) {
+      if (!DoAutomaticRemove(Cache)) 
+        return false;
+   }
+
    /* Print out a list of packages that are going to be installed extra
       to what the user asked */
    if (Cache->InstCount() != ExpectedInst)
@@ -1574,8 +1622,8 @@ bool DoInstall(CommandLine &CmdL)
         
         if (*J == 0) {
            List += string(I.Name()) + " ";
-        VersionsList += string(Cache[I].CandVersion) + "\n";
-     }
+           VersionsList += string(Cache[I].CandVersion) + "\n";
+        }
       }
       
       ShowList(c1out,_("The following extra packages will be installed:"),List,VersionsList);
@@ -2419,6 +2467,7 @@ void GetInitialize()
    _config->Set("APT::Get::Fix-Broken",false);
    _config->Set("APT::Get::Force-Yes",false);
    _config->Set("APT::Get::List-Cleanup",true);
+   _config->Set("APT::Get::AutomaticRemove",false);
 }
                                                                        /*}}}*/
 // SigWinch - Window size change signal handler                                /*{{{*/
@@ -2474,6 +2523,7 @@ int main(int argc,const char *argv[])
       {0,"remove","APT::Get::Remove",0},
       {0,"only-source","APT::Get::Only-Source",0},
       {0,"arch-only","APT::Get::Arch-Only",0},
+      {0,"automatic-remove","APT::Get::AutomaticRemove",0},
       {0,"allow-unauthenticated","APT::Get::AllowUnauthenticated",0},
       {'c',"config-file",0,CommandLine::ConfigFile},
       {'o',"option",0,CommandLine::ArbItem},
index 2f7fd611a346b0256999131664cb79ff17496dbf..f78ce1d1e42a46603b13a6f6e81f5bbfa8ee5422 100644 (file)
@@ -18,7 +18,7 @@ AC_CONFIG_AUX_DIR(buildlib)
 AC_CONFIG_HEADER(include/config.h:buildlib/config.h.in include/apti18n.h:buildlib/apti18n.h.in)
 
 dnl -- SET THIS TO THE RELEASE VERSION --
-AC_DEFINE_UNQUOTED(VERSION,"0.6.38ubuntu1")
+AC_DEFINE_UNQUOTED(VERSION,"0.6.38ubuntu1mvo1")
 PACKAGE="apt"
 AC_DEFINE_UNQUOTED(PACKAGE,"$PACKAGE")
 AC_SUBST(PACKAGE)
@@ -181,9 +181,6 @@ AC_PATH_PROG(DOCBOOK2MAN,docbook2man)
 dnl Check for the XML tools needed to build man pages
 AC_PATH_PROG(XMLTO,xmlto)
 
-dnl Check for the XML tools needed to build man pages
-AC_PATH_PROG(XMLTO,xmlto)
-
 dnl Check for YODL
 dnl AC_CHECK_PROG(YODL_MAN,yodl2man,"yes","")
 
index fd59594231e1bcb944916cd7497431b07f47e325..78559fd56aab5979c0bae899b093fc7e5aa5f67a 100644 (file)
@@ -1,4 +1,4 @@
-apt (0.6.39) unstable; urgency=low
+apt (0.6.38ubuntu1mvo1) unstable; urgency=low
 
   * Welsh translation update: daf@muse.19inch.net--2005/apt--main--0--patch-6
   * Merge mvo's changes from 0.6.36ubuntu1:
@@ -15,7 +15,7 @@ apt (0.6.39) unstable; urgency=low
     - better report network timeouts from the methods to the acuire code, 
       only timeout once per sources.list line 
 
- -- 
+ -- Michael Vogt <michael.vogt@ubuntu.com>  Tue, 28 Jun 2005 11:18:24 +0200
 
 apt (0.6.38ubuntu1) breezy; urgency=low
 
@@ -70,6 +70,7 @@ apt (0.6.37) breezy; urgency=low
   * Add Welsh translation from Dafydd Harries
     (daf@muse.19inch.net--2005/apt--main--0--patch-1)
   * Change debian/bugscript to use #!/bin/bash (Closes: #313402)
+  * Fix a incorrect example in the man-page (closes: #282918)
 
  -- Matt Zimmerman <mdz@ubuntu.com>  Tue, 24 May 2005 14:38:25 -0700
 
index a09ea0c37f093f433203a6c942a12b9167e3e511..31bc13430bbf555d7c98904da55bf68b5ef1edb5 100644 (file)
@@ -29,6 +29,7 @@ APT
   Get 
   {
      Arch-Only "false";
+     AutomaticRemove "false";       
      Download-Only "false";
      Simulate "false";
      Assume-Yes "false";
@@ -235,7 +236,8 @@ Debug
   pkgAcquire::Worker "false";
   pkgDPkgPM "false";
   pkgOrderList "false";
-  
+  pkgAutoRemove "false";   // show information about automatic removes
+
   pkgInitialize "false";   // This one will dump the configuration space
   NoLocking "false";
   Acquire::Ftp "false";    // Show ftp command traffic
index 0893005701cbaeace474266c6a9953f3eaa6058f..06fd2a6fc0c9117eef29e55bf89ecb74deb85c65 100644 (file)
@@ -7,7 +7,7 @@ include ../buildlib/defaults.mak
 BIN := $(BIN)/methods
 
 # FIXME..
-LIB_APT_PKG_MAJOR = 3.5
+LIB_APT_PKG_MAJOR = 3.10
 APT_DOMAIN := libapt-pkg$(LIB_APT_PKG_MAJOR)
 
 # The file method
index 3936f3f162ec28a8ccf7e04f5d6b0eb55a509213..d043210fea991234647fb5f3e241ee33dad37f02 100644 (file)
@@ -7,7 +7,7 @@ msgid ""
 msgstr ""
 "Project-Id-Version: PACKAGE VERSION\n"
 "Report-Msgid-Bugs-To: \n"
-"POT-Creation-Date: 2005-05-23 11:34+0200\n"
+"POT-Creation-Date: 2005-06-24 21:41+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"
@@ -148,7 +148,7 @@ msgstr ""
 
 #: cmdline/apt-cache.cc:1651 cmdline/apt-cdrom.cc:138 cmdline/apt-config.cc:70
 #: cmdline/apt-extracttemplates.cc:225 ftparchive/apt-ftparchive.cc:545
-#: cmdline/apt-get.cc:2322 cmdline/apt-sortpkgs.cc:144
+#: cmdline/apt-get.cc:2369 cmdline/apt-sortpkgs.cc:144
 #, c-format
 msgid "%s %s for %s %s compiled on %s %s\n"
 msgstr ""
@@ -231,7 +231,7 @@ msgid ""
 "  -o=? Set an arbitrary configuration option, eg -o dir::cache=/tmp\n"
 msgstr ""
 
-#: cmdline/apt-extracttemplates.cc:267 apt-pkg/pkgcachegen.cc:710
+#: cmdline/apt-extracttemplates.cc:267 apt-pkg/pkgcachegen.cc:712
 #, c-format
 msgid "Unable to write to %s"
 msgstr ""
@@ -519,275 +519,275 @@ msgstr ""
 msgid "Failed to rename %s to %s"
 msgstr ""
 
-#: cmdline/apt-get.cc:118
+#: cmdline/apt-get.cc:119
 msgid "Y"
 msgstr ""
 
-#: cmdline/apt-get.cc:140 cmdline/apt-get.cc:1484
+#: cmdline/apt-get.cc:141 cmdline/apt-get.cc:1526
 #, c-format
 msgid "Regex compilation error - %s"
 msgstr ""
 
-#: cmdline/apt-get.cc:235
+#: cmdline/apt-get.cc:236
 msgid "The following packages have unmet dependencies:"
 msgstr ""
 
-#: cmdline/apt-get.cc:325
+#: cmdline/apt-get.cc:326
 #, c-format
 msgid "but %s is installed"
 msgstr ""
 
-#: cmdline/apt-get.cc:327
+#: cmdline/apt-get.cc:328
 #, c-format
 msgid "but %s is to be installed"
 msgstr ""
 
-#: cmdline/apt-get.cc:334
+#: cmdline/apt-get.cc:335
 msgid "but it is not installable"
 msgstr ""
 
-#: cmdline/apt-get.cc:336
+#: cmdline/apt-get.cc:337
 msgid "but it is a virtual package"
 msgstr ""
 
-#: cmdline/apt-get.cc:339
+#: cmdline/apt-get.cc:340
 msgid "but it is not installed"
 msgstr ""
 
-#: cmdline/apt-get.cc:339
+#: cmdline/apt-get.cc:340
 msgid "but it is not going to be installed"
 msgstr ""
 
-#: cmdline/apt-get.cc:344
+#: cmdline/apt-get.cc:345
 msgid " or"
 msgstr ""
 
-#: cmdline/apt-get.cc:373
+#: cmdline/apt-get.cc:374
 msgid "The following NEW packages will be installed:"
 msgstr ""
 
-#: cmdline/apt-get.cc:399
+#: cmdline/apt-get.cc:400
 msgid "The following packages will be REMOVED:"
 msgstr ""
 
-#: cmdline/apt-get.cc:421
+#: cmdline/apt-get.cc:422
 msgid "The following packages have been kept back:"
 msgstr ""
 
-#: cmdline/apt-get.cc:442
+#: cmdline/apt-get.cc:443
 msgid "The following packages will be upgraded:"
 msgstr ""
 
-#: cmdline/apt-get.cc:463
+#: cmdline/apt-get.cc:464
 msgid "The following packages will be DOWNGRADED:"
 msgstr ""
 
-#: cmdline/apt-get.cc:483
+#: cmdline/apt-get.cc:484
 msgid "The following held packages will be changed:"
 msgstr ""
 
-#: cmdline/apt-get.cc:536
+#: cmdline/apt-get.cc:537
 #, c-format
 msgid "%s (due to %s) "
 msgstr ""
 
-#: cmdline/apt-get.cc:544
+#: cmdline/apt-get.cc:545
 msgid ""
-"WARNING: The following essential packages will be removed\n"
+"WARNING: The following essential packages will be removed.\n"
 "This should NOT be done unless you know exactly what you are doing!"
 msgstr ""
 
-#: cmdline/apt-get.cc:575
+#: cmdline/apt-get.cc:576
 #, c-format
 msgid "%lu upgraded, %lu newly installed, "
 msgstr ""
 
-#: cmdline/apt-get.cc:579
+#: cmdline/apt-get.cc:580
 #, c-format
 msgid "%lu reinstalled, "
 msgstr ""
 
-#: cmdline/apt-get.cc:581
+#: cmdline/apt-get.cc:582
 #, c-format
 msgid "%lu downgraded, "
 msgstr ""
 
-#: cmdline/apt-get.cc:583
+#: cmdline/apt-get.cc:584
 #, c-format
 msgid "%lu to remove and %lu not upgraded.\n"
 msgstr ""
 
-#: cmdline/apt-get.cc:587
+#: cmdline/apt-get.cc:588
 #, c-format
 msgid "%lu not fully installed or removed.\n"
 msgstr ""
 
-#: cmdline/apt-get.cc:647
+#: cmdline/apt-get.cc:648
 msgid "Correcting dependencies..."
 msgstr ""
 
-#: cmdline/apt-get.cc:650
+#: cmdline/apt-get.cc:651
 msgid " failed."
 msgstr ""
 
-#: cmdline/apt-get.cc:653
+#: cmdline/apt-get.cc:654
 msgid "Unable to correct dependencies"
 msgstr ""
 
-#: cmdline/apt-get.cc:656
+#: cmdline/apt-get.cc:657
 msgid "Unable to minimize the upgrade set"
 msgstr ""
 
-#: cmdline/apt-get.cc:658
+#: cmdline/apt-get.cc:659
 msgid " Done"
 msgstr ""
 
-#: cmdline/apt-get.cc:662
+#: cmdline/apt-get.cc:663
 msgid "You might want to run `apt-get -f install' to correct these."
 msgstr ""
 
-#: cmdline/apt-get.cc:665
+#: cmdline/apt-get.cc:666
 msgid "Unmet dependencies. Try using -f."
 msgstr ""
 
-#: cmdline/apt-get.cc:687
+#: cmdline/apt-get.cc:688
 msgid "WARNING: The following packages cannot be authenticated!"
 msgstr ""
 
-#: cmdline/apt-get.cc:698
+#: cmdline/apt-get.cc:699
 msgid "Install these packages without verification [y/N]? "
 msgstr ""
 
-#: cmdline/apt-get.cc:700
+#: cmdline/apt-get.cc:701
 msgid "Some packages could not be authenticated"
 msgstr ""
 
-#: cmdline/apt-get.cc:709 cmdline/apt-get.cc:855
+#: cmdline/apt-get.cc:710 cmdline/apt-get.cc:856
 msgid "There are problems and -y was used without --force-yes"
 msgstr ""
 
-#: cmdline/apt-get.cc:762
+#: cmdline/apt-get.cc:763
 msgid "Packages need to be removed but remove is disabled."
 msgstr ""
 
-#: cmdline/apt-get.cc:788 cmdline/apt-get.cc:1778 cmdline/apt-get.cc:1811
+#: cmdline/apt-get.cc:789 cmdline/apt-get.cc:1825 cmdline/apt-get.cc:1858
 msgid "Unable to lock the download directory"
 msgstr ""
 
-#: cmdline/apt-get.cc:798 cmdline/apt-get.cc:1859 cmdline/apt-get.cc:2070
+#: cmdline/apt-get.cc:799 cmdline/apt-get.cc:1906 cmdline/apt-get.cc:2117
 #: apt-pkg/cachefile.cc:67
 msgid "The list of sources could not be read."
 msgstr ""
 
-#: cmdline/apt-get.cc:818
+#: cmdline/apt-get.cc:819
 #, c-format
 msgid "Need to get %sB/%sB of archives.\n"
 msgstr ""
 
-#: cmdline/apt-get.cc:821
+#: cmdline/apt-get.cc:822
 #, c-format
 msgid "Need to get %sB of archives.\n"
 msgstr ""
 
-#: cmdline/apt-get.cc:826
+#: cmdline/apt-get.cc:827
 #, c-format
 msgid "After unpacking %sB of additional disk space will be used.\n"
 msgstr ""
 
-#: cmdline/apt-get.cc:829
+#: cmdline/apt-get.cc:830
 #, c-format
 msgid "After unpacking %sB disk space will be freed.\n"
 msgstr ""
 
-#: cmdline/apt-get.cc:846
+#: cmdline/apt-get.cc:847
 #, c-format
 msgid "You don't have enough free space in %s."
 msgstr ""
 
-#: cmdline/apt-get.cc:861 cmdline/apt-get.cc:881
+#: cmdline/apt-get.cc:862 cmdline/apt-get.cc:882
 msgid "Trivial Only specified but this is not a trivial operation."
 msgstr ""
 
-#: cmdline/apt-get.cc:863
+#: cmdline/apt-get.cc:864
 msgid "Yes, do as I say!"
 msgstr ""
 
-#: cmdline/apt-get.cc:865
+#: cmdline/apt-get.cc:866
 #, c-format
 msgid ""
-"You are about to do something potentially harmful\n"
+"You are about to do something potentially harmful.\n"
 "To continue type in the phrase '%s'\n"
 " ?] "
 msgstr ""
 
-#: cmdline/apt-get.cc:871 cmdline/apt-get.cc:890
+#: cmdline/apt-get.cc:872 cmdline/apt-get.cc:891
 msgid "Abort."
 msgstr ""
 
-#: cmdline/apt-get.cc:886
+#: cmdline/apt-get.cc:887
 msgid "Do you want to continue [Y/n]? "
 msgstr ""
 
-#: cmdline/apt-get.cc:958 cmdline/apt-get.cc:1334 cmdline/apt-get.cc:1968
+#: cmdline/apt-get.cc:959 cmdline/apt-get.cc:1335 cmdline/apt-get.cc:2015
 #, c-format
 msgid "Failed to fetch %s  %s\n"
 msgstr ""
 
-#: cmdline/apt-get.cc:976
+#: cmdline/apt-get.cc:977
 msgid "Some files failed to download"
 msgstr ""
 
-#: cmdline/apt-get.cc:977 cmdline/apt-get.cc:1977
+#: cmdline/apt-get.cc:978 cmdline/apt-get.cc:2024
 msgid "Download complete and in download only mode"
 msgstr ""
 
-#: cmdline/apt-get.cc:983
+#: cmdline/apt-get.cc:984
 msgid ""
 "Unable to fetch some archives, maybe run apt-get update or try with --fix-"
 "missing?"
 msgstr ""
 
-#: cmdline/apt-get.cc:987
+#: cmdline/apt-get.cc:988
 msgid "--fix-missing and media swapping is not currently supported"
 msgstr ""
 
-#: cmdline/apt-get.cc:992
+#: cmdline/apt-get.cc:993
 msgid "Unable to correct missing packages."
 msgstr ""
 
-#: cmdline/apt-get.cc:993
+#: cmdline/apt-get.cc:994
 msgid "Aborting install."
 msgstr ""
 
-#: cmdline/apt-get.cc:1026
+#: cmdline/apt-get.cc:1027
 #, c-format
 msgid "Note, selecting %s instead of %s\n"
 msgstr ""
 
-#: cmdline/apt-get.cc:1036
+#: cmdline/apt-get.cc:1037
 #, c-format
 msgid "Skipping %s, it is already installed and upgrade is not set.\n"
 msgstr ""
 
-#: cmdline/apt-get.cc:1054
+#: cmdline/apt-get.cc:1055
 #, c-format
 msgid "Package %s is not installed, so not removed\n"
 msgstr ""
 
-#: cmdline/apt-get.cc:1065
+#: cmdline/apt-get.cc:1066
 #, c-format
 msgid "Package %s is a virtual package provided by:\n"
 msgstr ""
 
-#: cmdline/apt-get.cc:1077
+#: cmdline/apt-get.cc:1078
 msgid " [Installed]"
 msgstr ""
 
-#: cmdline/apt-get.cc:1082
+#: cmdline/apt-get.cc:1083
 msgid "You should explicitly select one to install."
 msgstr ""
 
-#: cmdline/apt-get.cc:1087
+#: cmdline/apt-get.cc:1088
 #, c-format
 msgid ""
 "Package %s is not available, but is referred to by another package.\n"
@@ -795,79 +795,97 @@ msgid ""
 "is only available from another source\n"
 msgstr ""
 
-#: cmdline/apt-get.cc:1106
+#: cmdline/apt-get.cc:1107
 msgid "However the following packages replace it:"
 msgstr ""
 
-#: cmdline/apt-get.cc:1109
+#: cmdline/apt-get.cc:1110
 #, c-format
 msgid "Package %s has no installation candidate"
 msgstr ""
 
-#: cmdline/apt-get.cc:1129
+#: cmdline/apt-get.cc:1130
 #, c-format
 msgid "Reinstallation of %s is not possible, it cannot be downloaded.\n"
 msgstr ""
 
-#: cmdline/apt-get.cc:1137
+#: cmdline/apt-get.cc:1138
 #, c-format
 msgid "%s is already the newest version.\n"
 msgstr ""
 
-#: cmdline/apt-get.cc:1164
+#: cmdline/apt-get.cc:1165
 #, c-format
 msgid "Release '%s' for '%s' was not found"
 msgstr ""
 
-#: cmdline/apt-get.cc:1166
+#: cmdline/apt-get.cc:1167
 #, c-format
 msgid "Version '%s' for '%s' was not found"
 msgstr ""
 
-#: cmdline/apt-get.cc:1172
+#: cmdline/apt-get.cc:1173
 #, c-format
 msgid "Selected version %s (%s) for %s\n"
 msgstr ""
 
-#: cmdline/apt-get.cc:1282
+#: cmdline/apt-get.cc:1283
 msgid "The update command takes no arguments"
 msgstr ""
 
-#: cmdline/apt-get.cc:1295 cmdline/apt-get.cc:1389
+#: cmdline/apt-get.cc:1296 cmdline/apt-get.cc:1431
 msgid "Unable to lock the list directory"
 msgstr ""
 
-#: cmdline/apt-get.cc:1353
+#: cmdline/apt-get.cc:1354
 msgid ""
 "Some index files failed to download, they have been ignored, or old ones "
 "used instead."
 msgstr ""
 
-#: cmdline/apt-get.cc:1372
+#: cmdline/apt-get.cc:1367
+msgid "We are not supposed to delete stuff, can't start AutoRemover"
+msgstr ""
+
+#: cmdline/apt-get.cc:1389
+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:1392 cmdline/apt-get.cc:1594
+msgid "The following information may help to resolve the situation:"
+msgstr ""
+
+#: cmdline/apt-get.cc:1396
+msgid "Internal Error, AutoRemover broke stuff"
+msgstr ""
+
+#: cmdline/apt-get.cc:1414
 msgid "Internal error, AllUpgrade broke stuff"
 msgstr ""
 
-#: cmdline/apt-get.cc:1471 cmdline/apt-get.cc:1507
+#: cmdline/apt-get.cc:1513 cmdline/apt-get.cc:1549
 #, c-format
 msgid "Couldn't find package %s"
 msgstr ""
 
-#: cmdline/apt-get.cc:1494
+#: cmdline/apt-get.cc:1536
 #, c-format
 msgid "Note, selecting %s for regex '%s'\n"
 msgstr ""
 
-#: cmdline/apt-get.cc:1524
+#: cmdline/apt-get.cc:1566
 msgid "You might want to run `apt-get -f install' to correct these:"
 msgstr ""
 
-#: cmdline/apt-get.cc:1527
+#: cmdline/apt-get.cc:1569
 msgid ""
 "Unmet dependencies. Try 'apt-get -f install' with no packages (or specify a "
 "solution)."
 msgstr ""
 
-#: cmdline/apt-get.cc:1539
+#: cmdline/apt-get.cc:1581
 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"
@@ -875,149 +893,145 @@ msgid ""
 "or been moved out of Incoming."
 msgstr ""
 
-#: cmdline/apt-get.cc:1547
+#: cmdline/apt-get.cc:1589
 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:1552
-msgid "The following information may help to resolve the situation:"
-msgstr ""
-
-#: cmdline/apt-get.cc:1555
+#: cmdline/apt-get.cc:1597
 msgid "Broken packages"
 msgstr ""
 
-#: cmdline/apt-get.cc:1581
+#: cmdline/apt-get.cc:1628
 msgid "The following extra packages will be installed:"
 msgstr ""
 
-#: cmdline/apt-get.cc:1652
+#: cmdline/apt-get.cc:1699
 msgid "Suggested packages:"
 msgstr ""
 
-#: cmdline/apt-get.cc:1653
+#: cmdline/apt-get.cc:1700
 msgid "Recommended packages:"
 msgstr ""
 
-#: cmdline/apt-get.cc:1673
+#: cmdline/apt-get.cc:1720
 msgid "Calculating upgrade... "
 msgstr ""
 
-#: cmdline/apt-get.cc:1676 methods/ftp.cc:702 methods/connect.cc:99
+#: cmdline/apt-get.cc:1723 methods/ftp.cc:702 methods/connect.cc:99
 msgid "Failed"
 msgstr ""
 
-#: cmdline/apt-get.cc:1681
+#: cmdline/apt-get.cc:1728
 msgid "Done"
 msgstr ""
 
-#: cmdline/apt-get.cc:1854
+#: cmdline/apt-get.cc:1901
 msgid "Must specify at least one package to fetch source for"
 msgstr ""
 
-#: cmdline/apt-get.cc:1881 cmdline/apt-get.cc:2088
+#: cmdline/apt-get.cc:1928 cmdline/apt-get.cc:2135
 #, c-format
 msgid "Unable to find a source package for %s"
 msgstr ""
 
-#: cmdline/apt-get.cc:1928
+#: cmdline/apt-get.cc:1975
 #, c-format
 msgid "You don't have enough free space in %s"
 msgstr ""
 
-#: cmdline/apt-get.cc:1933
+#: cmdline/apt-get.cc:1980
 #, c-format
 msgid "Need to get %sB/%sB of source archives.\n"
 msgstr ""
 
-#: cmdline/apt-get.cc:1936
+#: cmdline/apt-get.cc:1983
 #, c-format
 msgid "Need to get %sB of source archives.\n"
 msgstr ""
 
-#: cmdline/apt-get.cc:1942
+#: cmdline/apt-get.cc:1989
 #, c-format
 msgid "Fetch source %s\n"
 msgstr ""
 
-#: cmdline/apt-get.cc:1973
+#: cmdline/apt-get.cc:2020
 msgid "Failed to fetch some archives."
 msgstr ""
 
-#: cmdline/apt-get.cc:2001
+#: cmdline/apt-get.cc:2048
 #, c-format
 msgid "Skipping unpack of already unpacked source in %s\n"
 msgstr ""
 
-#: cmdline/apt-get.cc:2013
+#: cmdline/apt-get.cc:2060
 #, c-format
 msgid "Unpack command '%s' failed.\n"
 msgstr ""
 
-#: cmdline/apt-get.cc:2030
+#: cmdline/apt-get.cc:2077
 #, c-format
 msgid "Build command '%s' failed.\n"
 msgstr ""
 
-#: cmdline/apt-get.cc:2049
+#: cmdline/apt-get.cc:2096
 msgid "Child process failed"
 msgstr ""
 
-#: cmdline/apt-get.cc:2065
+#: cmdline/apt-get.cc:2112
 msgid "Must specify at least one package to check builddeps for"
 msgstr ""
 
-#: cmdline/apt-get.cc:2093
+#: cmdline/apt-get.cc:2140
 #, c-format
 msgid "Unable to get build-dependency information for %s"
 msgstr ""
 
-#: cmdline/apt-get.cc:2113
+#: cmdline/apt-get.cc:2160
 #, c-format
 msgid "%s has no build depends.\n"
 msgstr ""
 
-#: cmdline/apt-get.cc:2165
+#: cmdline/apt-get.cc:2212
 #, c-format
 msgid ""
 "%s dependency for %s cannot be satisfied because the package %s cannot be "
 "found"
 msgstr ""
 
-#: cmdline/apt-get.cc:2217
+#: cmdline/apt-get.cc:2264
 #, 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:2252
+#: cmdline/apt-get.cc:2299
 #, c-format
 msgid "Failed to satisfy %s dependency for %s: Installed package %s is too new"
 msgstr ""
 
-#: cmdline/apt-get.cc:2277
+#: cmdline/apt-get.cc:2324
 #, c-format
 msgid "Failed to satisfy %s dependency for %s: %s"
 msgstr ""
 
-#: cmdline/apt-get.cc:2291
+#: cmdline/apt-get.cc:2338
 #, c-format
 msgid "Build-dependencies for %s could not be satisfied."
 msgstr ""
 
-#: cmdline/apt-get.cc:2295
+#: cmdline/apt-get.cc:2342
 msgid "Failed to process build dependencies"
 msgstr ""
 
-#: cmdline/apt-get.cc:2327
+#: cmdline/apt-get.cc:2374
 msgid "Supported modules:"
 msgstr ""
 
-#: cmdline/apt-get.cc:2368
+#: cmdline/apt-get.cc:2415
 msgid ""
 "Usage: apt-get [options] command\n"
 "       apt-get [options] install|remove pkg1 [pkg2 ...]\n"
@@ -1215,7 +1229,7 @@ msgstr ""
 
 #: apt-inst/dirstream.cc:45 apt-inst/dirstream.cc:50 apt-inst/dirstream.cc:53
 #, c-format
-msgid "Failed write file %s"
+msgid "Failed to write file %s"
 msgstr ""
 
 #: apt-inst/dirstream.cc:80 apt-inst/dirstream.cc:88
@@ -1301,9 +1315,9 @@ msgid "The info and temp directories need to be on the same filesystem"
 msgstr ""
 
 #. Build the status cache
-#: apt-inst/deb/dpkgdb.cc:139 apt-pkg/pkgcachegen.cc:643
-#: apt-pkg/pkgcachegen.cc:712 apt-pkg/pkgcachegen.cc:717
-#: apt-pkg/pkgcachegen.cc:840
+#: apt-inst/deb/dpkgdb.cc:139 apt-pkg/pkgcachegen.cc:645
+#: apt-pkg/pkgcachegen.cc:714 apt-pkg/pkgcachegen.cc:719
+#: apt-pkg/pkgcachegen.cc:842
 msgid "Reading package lists"
 msgstr ""
 
@@ -1358,7 +1372,7 @@ msgid "Internal error adding a diversion"
 msgstr ""
 
 #: apt-inst/deb/dpkgdb.cc:383
-msgid "The pkg cache must be initialize first"
+msgid "The pkg cache must be initialized first"
 msgstr ""
 
 #: apt-inst/deb/dpkgdb.cc:386
@@ -2007,18 +2021,27 @@ msgstr ""
 msgid "extra"
 msgstr ""
 
-#: apt-pkg/depcache.cc:60 apt-pkg/depcache.cc:89
+#: apt-pkg/depcache.cc:64 apt-pkg/depcache.cc:96
 msgid "Building dependency tree"
 msgstr ""
 
-#: apt-pkg/depcache.cc:61
+#: apt-pkg/depcache.cc:65
 msgid "Candidate versions"
 msgstr ""
 
-#: apt-pkg/depcache.cc:90
+#: apt-pkg/depcache.cc:97
 msgid "Dependency generation"
 msgstr ""
 
+#: apt-pkg/depcache.cc:114 apt-pkg/depcache.cc:131 apt-pkg/depcache.cc:134
+msgid "Reading extended state information"
+msgstr ""
+
+#: apt-pkg/depcache.cc:150
+#, c-format
+msgid "Failed to write StateFile %s"
+msgstr ""
+
 #: apt-pkg/tagfile.cc:73
 #, c-format
 msgid "Unable to parse package file %s (1)"
@@ -2167,82 +2190,82 @@ msgstr ""
 msgid "No priority (or zero) specified for pin"
 msgstr ""
 
-#: apt-pkg/pkgcachegen.cc:74
+#: apt-pkg/pkgcachegen.cc:76
 msgid "Cache has an incompatible versioning system"
 msgstr ""
 
-#: apt-pkg/pkgcachegen.cc:117
+#: apt-pkg/pkgcachegen.cc:119
 #, c-format
-msgid "Error occured while processing %s (NewPackage)"
+msgid "Error occurred while processing %s (NewPackage)"
 msgstr ""
 
-#: apt-pkg/pkgcachegen.cc:129
+#: apt-pkg/pkgcachegen.cc:131
 #, c-format
-msgid "Error occured while processing %s (UsePackage1)"
+msgid "Error occurred while processing %s (UsePackage1)"
 msgstr ""
 
-#: apt-pkg/pkgcachegen.cc:150
+#: apt-pkg/pkgcachegen.cc:152
 #, c-format
-msgid "Error occured while processing %s (UsePackage2)"
+msgid "Error occurred while processing %s (UsePackage2)"
 msgstr ""
 
-#: apt-pkg/pkgcachegen.cc:154
+#: apt-pkg/pkgcachegen.cc:156
 #, c-format
-msgid "Error occured while processing %s (NewFileVer1)"
+msgid "Error occurred while processing %s (NewFileVer1)"
 msgstr ""
 
-#: apt-pkg/pkgcachegen.cc:184
+#: apt-pkg/pkgcachegen.cc:186
 #, c-format
-msgid "Error occured while processing %s (NewVersion1)"
+msgid "Error occurred while processing %s (NewVersion1)"
 msgstr ""
 
-#: apt-pkg/pkgcachegen.cc:188
+#: apt-pkg/pkgcachegen.cc:190
 #, c-format
-msgid "Error occured while processing %s (UsePackage3)"
+msgid "Error occurred while processing %s (UsePackage3)"
 msgstr ""
 
-#: apt-pkg/pkgcachegen.cc:192
+#: apt-pkg/pkgcachegen.cc:194
 #, c-format
-msgid "Error occured while processing %s (NewVersion2)"
+msgid "Error occurred while processing %s (NewVersion2)"
 msgstr ""
 
-#: apt-pkg/pkgcachegen.cc:207
+#: apt-pkg/pkgcachegen.cc:209
 msgid "Wow, you exceeded the number of package names this APT is capable of."
 msgstr ""
 
-#: apt-pkg/pkgcachegen.cc:210
+#: apt-pkg/pkgcachegen.cc:212
 msgid "Wow, you exceeded the number of versions this APT is capable of."
 msgstr ""
 
-#: apt-pkg/pkgcachegen.cc:213
+#: apt-pkg/pkgcachegen.cc:215
 msgid "Wow, you exceeded the number of dependencies this APT is capable of."
 msgstr ""
 
-#: apt-pkg/pkgcachegen.cc:241
+#: apt-pkg/pkgcachegen.cc:243
 #, c-format
-msgid "Error occured while processing %s (FindPkg)"
+msgid "Error occurred while processing %s (FindPkg)"
 msgstr ""
 
-#: apt-pkg/pkgcachegen.cc:254
+#: apt-pkg/pkgcachegen.cc:256
 #, c-format
-msgid "Error occured while processing %s (CollectFileProvides)"
+msgid "Error occurred while processing %s (CollectFileProvides)"
 msgstr ""
 
-#: apt-pkg/pkgcachegen.cc:260
+#: apt-pkg/pkgcachegen.cc:262
 #, c-format
 msgid "Package %s %s was not found while processing file dependencies"
 msgstr ""
 
-#: apt-pkg/pkgcachegen.cc:574
+#: apt-pkg/pkgcachegen.cc:576
 #, c-format
 msgid "Couldn't stat source package list %s"
 msgstr ""
 
-#: apt-pkg/pkgcachegen.cc:658
+#: apt-pkg/pkgcachegen.cc:660
 msgid "Collecting File Provides"
 msgstr ""
 
-#: apt-pkg/pkgcachegen.cc:785 apt-pkg/pkgcachegen.cc:792
+#: apt-pkg/pkgcachegen.cc:787 apt-pkg/pkgcachegen.cc:794
 msgid "IO Error saving source cache"
 msgstr ""