]> git.saurik.com Git - apt.git/commitdiff
* merged apt--tasks, this brings in the latest changes from apt--mvo as well
authorMichael Vogt <michael.vogt@ubuntu.com>
Tue, 19 Sep 2006 14:05:44 +0000 (16:05 +0200)
committerMichael Vogt <michael.vogt@ubuntu.com>
Tue, 19 Sep 2006 14:05:44 +0000 (16:05 +0200)
1  2 
apt-pkg/tagfile.cc
cmdline/apt-get.cc
configure.in
debian/changelog

diff --combined apt-pkg/tagfile.cc
index 14682956654273124b333b9d9fea203c8324dc57,040562fffbb0d5f7ba062edbb068953a58bfe5ea..72cd08596089c30eb453a43fd891a80ea8802827
@@@ -33,33 -33,22 +33,22 @@@ using std::string
  /* */
  pkgTagFile::pkgTagFile(FileFd *pFd,unsigned long Size) :
       Fd(*pFd),
-      Size(Size),
-      Map(NULL),
-      Buffer(0)
+      Size(Size)
  {
     if (Fd.IsOpen() == false)
     {
+       Buffer = 0;
        Start = End = Buffer = 0;
        Done = true;
        iOffset = 0;
-       Map = NULL;
        return;
     }
     
-    // check if we can MMap it
-    if(Fd.Size() == 0)
-    {
-       Buffer = new char[Size];
-       Start = End = Buffer;
-       Done = false;
-       Fill();
-    } else {
-       Map = new MMap (Fd, MMap::Public | MMap::ReadOnly);
-       Buffer = (char *) Map->Data ();
-       Start = Buffer;
-       End = Buffer + Map->Size ();
-    }
+    Buffer = new char[Size];
+    Start = End = Buffer;
+    Done = false;
     iOffset = 0;
+    Fill();
  }
                                                                        /*}}}*/
  // TagFile::~pkgTagFile - Destructor                                  /*{{{*/
@@@ -67,8 -56,7 +56,7 @@@
  /* */
  pkgTagFile::~pkgTagFile()
  {
-    if(!Map) delete [] Buffer;
-    delete Map;
+    delete [] Buffer;
  }
                                                                        /*}}}*/
  // TagFile::Step - Advance to the next section                                /*{{{*/
  /* If the Section Scanner fails we refill the buffer and try again. */
  bool pkgTagFile::Step(pkgTagSection &Tag)
  {
-    if ((Map != NULL) && (Start == End))
-       return false;
     if (Tag.Scan(Start,End - Start) == false)
     {
-       if (Map != NULL)
-        return _error->Error(_("Unable to parse package file %s (1)"),
-                             Fd.Name().c_str());
        if (Fill() == false)
         return false;
        
@@@ -158,30 -139,23 +139,23 @@@ bool pkgTagFile::Jump(pkgTagSection &Ta
        return Step(Tag);
     }
  
+    // Reposition and reload..
     iOffset = Offset;
-    if (Map != NULL)
-    {
-       Start = Buffer + iOffset;
-    } 
-    else 
-    {
-       // Reposition and reload..
-       Done = false;
-       if (Fd.Seek(Offset) == false)
-        return false;
-       End = Start = Buffer;
+    Done = false;
+    if (Fd.Seek(Offset) == false)
+       return false;
+    End = Start = Buffer;
     
-       if (Fill() == false)
-        return false;
+    if (Fill() == false)
+       return false;
  
-       if (Tag.Scan(Start,End - Start) == true)
-        return true;
+    if (Tag.Scan(Start,End - Start) == true)
+       return true;
+    
+    // This appends a double new line (for the real eof handling)
+    if (Fill() == false)
+       return false;
     
-       // This appends a double new line (for the real eof handling)
-       if (Fill() == false)
-        return false;
-    }
     if (Tag.Scan(Start,End - Start) == false)
        return _error->Error(_("Unable to parse package file %s (2)"),Fd.Name().c_str());
     
  // ---------------------------------------------------------------------
  /* This looks for the first double new line in the data stream. It also
     indexes the tags in the section. This very simple hash function for the
-    first 3 letters gives very good performance on the debian package files */
+    last 8 letters gives very good performance on the debian package files */
  inline static unsigned long AlphaHash(const char *Text, const char *End = 0)
  {
     unsigned long Res = 0;
     for (; Text != End && *Text != ':' && *Text != 0; Text++)
-       Res = (unsigned long)(*Text) ^ (Res << 2);
+       Res = ((unsigned long)(*Text) & 0xDF) ^ (Res << 1);
     return Res & 0xFF;
  }
  
@@@ -207,7 -181,7 +181,7 @@@ bool pkgTagSection::Scan(const char *St
     Stop = Section = Start;
     memset(AlphaIndexes,0,sizeof(AlphaIndexes));
  
-    if (Stop == 0 || MaxLength == 0)
+    if (Stop == 0)
        return false;
     
     TagCount = 0;
        Stop++;
     }
  
-    if ((Stop+1 >= End) && (End[-1] == '\n' || End[-1] == '\r'))
-    {
-       Indexes[TagCount] = (End - 1) - Section;
-       return true;
-    }
     return false;
  }
                                                                        /*}}}*/
@@@ -422,7 -390,6 +390,7 @@@ static const char *iTFRewritePackageOrd
                            "Recommends",
                            "Suggests",
                            "Conflicts",
 +                          "Breaks",
                            "Conffiles",
                            "Filename",
                            "Size",
diff --combined cmdline/apt-get.cc
index 089b6470133618d517c1186d29f55077bf57843f,9705f84dc6f047f429066bec9297392d66a0f317..cd43e17c7f118574335de37aff18fce85989afc4
@@@ -60,7 -60,6 +60,7 @@@
  #include <errno.h>
  #include <regex.h>
  #include <sys/wait.h>
 +#include <sstream>
                                                                        /*}}}*/
  
  using namespace std;
@@@ -629,8 -628,6 +629,8 @@@ void CacheFile::Sort(
     and verifies that the system is OK. */
  bool CacheFile::CheckDeps(bool AllowBroken)
  {
 +   bool FixBroken = _config->FindB("APT::Get::Fix-Broken",false);
 +
     if (_error->PendingError() == true)
        return false;
  
     if (pkgApplyStatus(*DCache) == false)
        return false;
     
 +   if (_config->FindB("APT::Get::Fix-Policy-Broken",false) == true)
 +   {
 +      FixBroken = true;
 +      if ((DCache->PolicyBrokenCount() > 0))
 +      {
 +       // upgrade all policy-broken packages with ForceImportantDeps=True
 +       for (pkgCache::PkgIterator I = Cache->PkgBegin(); !I.end(); I++)
 +          if ((*DCache)[I].NowPolicyBroken() == true) 
 +             DCache->MarkInstall(I,true,0,false, true);
 +      }
 +   }
 +
     // Nothing is broken
     if (DCache->BrokenCount() == 0 || AllowBroken == true)
        return true;
  
     // Attempt to fix broken things
 -   if (_config->FindB("APT::Get::Fix-Broken",false) == true)
 +   if (FixBroken == true)
     {
        c1out << _("Correcting dependencies...") << flush;
        if (pkgFixBroken(*DCache) == false || DCache->BrokenCount() != 0)
@@@ -1010,7 -995,7 +1010,7 @@@ bool InstallPackages(CacheFile &Cache,b
         cerr << _("Unable to correct missing packages.") << endl;
         return _error->Error(_("Aborting install."));
        }
 -               
 +
        _system->UnLock();
        int status_fd = _config->FindI("APT::Status-Fd",-1);
        pkgPackageManager::OrderResult Res = PM->DoInstall(status_fd);
@@@ -1160,11 -1145,9 +1160,11 @@@ bool TryToInstall(pkgCache::PkgIterato
     else
        ExpectedInst++;
     
 -   // Install it with autoinstalling enabled.
 -   if (State.InstBroken() == true && BrokenFix == false)
 +   // Install it with autoinstalling enabled (if we not respect the minial
 +   // required deps or the policy)
 +   if ((State.InstBroken() == true || State.InstPolicyBroken() == true) && BrokenFix == false)
        Cache.MarkInstall(Pkg,true);
 +
     return true;
  }
                                                                        /*}}}*/
@@@ -1372,29 -1355,20 +1372,29 @@@ bool DoUpdate(CommandLine &CmdL
        return false;
  
     bool Failed = false;
 +   bool TransientNetworkFailure = false;
     for (pkgAcquire::ItemIterator I = Fetcher.ItemsBegin(); I != Fetcher.ItemsEnd(); I++)
     {
        if ((*I)->Status == pkgAcquire::Item::StatDone)
         continue;
  
        (*I)->Finished();
 -      
 +
        fprintf(stderr,_("Failed to fetch %s  %s\n"),(*I)->DescURI().c_str(),
              (*I)->ErrorText.c_str());
 +
 +      if ((*I)->Status == pkgAcquire::Item::StatTransientNetworkError) 
 +      {
 +       TransientNetworkFailure = true;
 +       continue;
 +      }
 +
        Failed = true;
     }
     
     // Clean out any old list files
 -   if (!Failed && _config->FindB("APT::Get::List-Cleanup",true) == true)
 +   if (!TransientNetworkFailure &&
 +       _config->FindB("APT::Get::List-Cleanup",true) == true)
     {
        if (Fetcher.Clean(_config->FindDir("Dir::State::lists")) == false ||
          Fetcher.Clean(_config->FindDir("Dir::State::lists") + "partial/") == false)
     if (Cache.BuildCaches() == false)
        return false;
     
 -   if (Failed == true)
 +   if (TransientNetworkFailure == true)
 +      _error->Warning(_("Some index files failed to download, they have been ignored, or old ones used instead."));
 +   else if (Failed == true)
        return _error->Error(_("Some index files failed to download, they have been ignored, or old ones used instead."));
 -   
 +
     return true;
  }
                                                                        /*}}}*/
 +// DoAutomaticRemove - Remove all automatic unused packages           /*{{{*/
 +// ---------------------------------------------------------------------
 +/* Remove unused automatic packages */
 +bool DoAutomaticRemove(CacheFile &Cache)
 +{
 +   bool Debug = _config->FindI("Debug::pkgAutoRemove",false);
 +   bool doAutoRemove = _config->FindB("APT::Get::AutomaticRemove");
 +   pkgDepCache::ActionGroup group(*Cache);
 +   
 +
 +   if(Debug)
 +      std::cout << "DoAutomaticRemove()" << std::endl;
 +
 +   if (_config->FindB("APT::Get::Remove",true) == false &&
 +       doAutoRemove == true)
 +   {
 +      c1out << _("We are not supposed to delete stuff, can't start "
 +               "AutoRemover") << std::endl;
 +      doAutoRemove = false;
 +   }
 +
 +   string autoremovelist, autoremoveversions;
 +   // look over the cache to see what can be removed
 +   for (pkgCache::PkgIterator Pkg = Cache->PkgBegin(); ! Pkg.end(); ++Pkg)
 +   {
 +      if (Cache[Pkg].Garbage)
 +      {
 +       if(Pkg.CurrentVer() != 0 || Cache[Pkg].Install())
 +          if(Debug)
 +             std::cout << "We could delete %s" <<  Pkg.Name() << std::endl;
 +         
 +       autoremovelist += string(Pkg.Name()) + " ";
 +       autoremoveversions += string(Cache[Pkg].CandVersion) + " ";
 +       if (doAutoRemove)
 +       {
 +          if(Pkg.CurrentVer() != 0 && 
 +             Pkg->CurrentState != pkgCache::State::ConfigFiles)
 +             Cache->MarkDelete(Pkg, _config->FindB("APT::Get::Purge", false));
 +          else
 +             Cache->MarkKeep(Pkg, false, false);
 +       }
 +      }
 +   }
 +   ShowList(c1out, _("The following packages were automatically installed and are no longer required:"), autoremovelist, autoremoveversions);
 +   if (!doAutoRemove && autoremovelist.size() > 0)
 +      c1out << _("Use 'apt-get autoremove' to remove them.") << std::endl;
 +
 +   // 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
@@@ -1496,6 -1406,61 +1496,61 @@@ bool DoUpgrade(CommandLine &CmdL
     return InstallPackages(Cache,true);
  }
                                                                        /*}}}*/
+ // DoInstallTask - Install task from the command line                 /*{{{*/
+ // ---------------------------------------------------------------------
+ /* Install named task */
+ bool DoInstallTask(CommandLine &CmdL)
+ {
+    const char *start, *end;
+    pkgCache::PkgIterator Pkg;
+    CacheFile Cache;
+    if (Cache.OpenForInstall() == false || 
+        Cache.CheckDeps(CmdL.FileSize() != 1) == false)
+       return false;
+    // create the records parser
+    pkgRecords Recs(Cache);
+    
+    unsigned int ExpectedInst = 0;
+    unsigned int Packages = 0;
+    pkgProblemResolver Fix(Cache);
+    char buf[64*1024];
+    for (const char **I = CmdL.FileList + 1; *I != 0; I++)
+    {
+       regex_t Pattern;
+       int Res;
+       // build regexp for the task
+       char S[300];
+       snprintf(S, sizeof(S), "^Task:.*%s.*\n", *I);
+       regcomp(&Pattern,S, REG_EXTENDED | REG_NOSUB | REG_NEWLINE);
+       for (Pkg = Cache->PkgBegin(); Pkg.end() == false; Pkg++)
+       {
+        pkgCache::VerIterator ver = (*Cache)[Pkg].CandidateVerIter(*Cache);
+        if(ver.end())
+           continue;
+        pkgRecords::Parser &parser = Recs.Lookup(ver.FileList());
+        parser.GetRec(start,end);
+        strncpy(buf, start, end-start);
+        buf[end-start] = 0x0;
+        if (regexec(&Pattern,buf,0,0,0) != 0)
+           continue;
+        TryToInstall(Pkg,Cache,Fix,false,false,ExpectedInst);
+       }
+    }
+    // Call the scored problem resolver
+    Fix.InstallProtect();
+    if (Fix.Resolve(true) == false)
+       _error->Discard();
+    
+    // prompt for install
+    return InstallPackages(Cache,false,true);
+ }
  // DoInstall - Install packages from the command line                 /*{{{*/
  // ---------------------------------------------------------------------
  /* Install named packages */
@@@ -1518,166 -1483,155 +1573,166 @@@ bool DoInstall(CommandLine &CmdL
     bool DefRemove = false;
     if (strcasecmp(CmdL.FileList[0],"remove") == 0)
        DefRemove = true;
 +   else if (strcasecmp(CmdL.FileList[0], "autoremove") == 0)
 +   {
 +      _config->Set("APT::Get::AutomaticRemove", "true");
 +      DefRemove = true;
 +   }
  
 -   for (const char **I = CmdL.FileList + 1; *I != 0; I++)
 +   // new scope for the ActionGroup
     {
 -      // Duplicate the string
 -      unsigned int Length = strlen(*I);
 -      char S[300];
 -      if (Length >= sizeof(S))
 -       continue;
 -      strcpy(S,*I);
 -      
 -      // See if we are removing and special indicators..
 -      bool Remove = DefRemove;
 -      char *VerTag = 0;
 -      bool VerIsRel = false;
 -      while (Cache->FindPkg(S).end() == true)
 +      pkgDepCache::ActionGroup group(Cache);
 +      for (const char **I = CmdL.FileList + 1; *I != 0; I++)
        {
 -       // Handle an optional end tag indicating what to do
 -       if (Length >= 1 && S[Length - 1] == '-')
 -       {
 -          Remove = true;
 -          S[--Length] = 0;
 +       // Duplicate the string
 +       unsigned int Length = strlen(*I);
 +       char S[300];
 +       if (Length >= sizeof(S))
            continue;
 -       }
 -       
 -       if (Length >= 1 && S[Length - 1] == '+')
 +       strcpy(S,*I);
 +      
 +       // See if we are removing and special indicators..
 +       bool Remove = DefRemove;
 +       char *VerTag = 0;
 +       bool VerIsRel = false;
 +       while (Cache->FindPkg(S).end() == true)
         {
 -          Remove = false;
 -          S[--Length] = 0;
 -          continue;
 -       }
 +          // Handle an optional end tag indicating what to do
 +          if (Length >= 1 && S[Length - 1] == '-')
 +          {
 +             Remove = true;
 +             S[--Length] = 0;
 +             continue;
 +          }
         
 -       char *Slash = strchr(S,'=');
 -       if (Slash != 0)
 -       {
 -          VerIsRel = false;
 -          *Slash = 0;
 -          VerTag = Slash + 1;
 -       }
 +          if (Length >= 1 && S[Length - 1] == '+')
 +          {
 +             Remove = false;
 +             S[--Length] = 0;
 +             continue;
 +          }
         
 -       Slash = strchr(S,'/');
 -       if (Slash != 0)
 -       {
 -          VerIsRel = true;
 -          *Slash = 0;
 -          VerTag = Slash + 1;
 -       }
 +          char *Slash = strchr(S,'=');
 +          if (Slash != 0)
 +          {
 +             VerIsRel = false;
 +             *Slash = 0;
 +             VerTag = Slash + 1;
 +          }
         
 -       break;
 -      }
 +          Slash = strchr(S,'/');
 +          if (Slash != 0)
 +          {
 +             VerIsRel = true;
 +             *Slash = 0;
 +             VerTag = Slash + 1;
 +          }
 +       
 +          break;
 +       }
        
 -      // Locate the package
 -      pkgCache::PkgIterator Pkg = Cache->FindPkg(S);
 -      Packages++;
 -      if (Pkg.end() == true)
 -      {
 -       // Check if the name is a regex
 -       const char *I;
 -       for (I = S; *I != 0; I++)
 -          if (*I == '?' || *I == '*' || *I == '|' ||
 -              *I == '[' || *I == '^' || *I == '$')
 -             break;
 -       if (*I == 0)
 -          return _error->Error(_("Couldn't find package %s"),S);
 +       // Locate the package
 +       pkgCache::PkgIterator Pkg = Cache->FindPkg(S);
 +       Packages++;
 +       if (Pkg.end() == true)
 +       {
 +          // Check if the name is a regex
 +          const char *I;
 +          for (I = S; *I != 0; I++)
 +             if (*I == '?' || *I == '*' || *I == '|' ||
 +                 *I == '[' || *I == '^' || *I == '$')
 +                break;
 +          if (*I == 0)
 +             return _error->Error(_("Couldn't find package %s"),S);
  
 -       // Regexs must always be confirmed
 -       ExpectedInst += 1000;
 +          // Regexs must always be confirmed
 +          ExpectedInst += 1000;
         
 -       // Compile the regex pattern
 -       regex_t Pattern;
 -       int Res;
 -       if ((Res = regcomp(&Pattern,S,REG_EXTENDED | REG_ICASE |
 -                   REG_NOSUB)) != 0)
 -       {
 -          char Error[300];        
 -          regerror(Res,&Pattern,Error,sizeof(Error));
 -          return _error->Error(_("Regex compilation error - %s"),Error);
 -       }
 +          // Compile the regex pattern
 +          regex_t Pattern;
 +          int Res;
 +          if ((Res = regcomp(&Pattern,S,REG_EXTENDED | REG_ICASE |
 +                             REG_NOSUB)) != 0)
 +          {
 +             char Error[300];     
 +             regerror(Res,&Pattern,Error,sizeof(Error));
 +             return _error->Error(_("Regex compilation error - %s"),Error);
 +          }
         
 -       // Run over the matches
 -       bool Hit = false;
 -       for (Pkg = Cache->PkgBegin(); Pkg.end() == false; Pkg++)
 -       {
 -          if (regexec(&Pattern,Pkg.Name(),0,0,0) != 0)
 -             continue;
 +          // Run over the matches
 +          bool Hit = false;
 +          for (Pkg = Cache->PkgBegin(); Pkg.end() == false; Pkg++)
 +          {
 +             if (regexec(&Pattern,Pkg.Name(),0,0,0) != 0)
 +                continue;
 +          
 +             ioprintf(c1out,_("Note, selecting %s for regex '%s'\n"),
 +                      Pkg.Name(),S);
            
 -          ioprintf(c1out,_("Note, selecting %s for regex '%s'\n"),
 -                   Pkg.Name(),S);
 +             if (VerTag != 0)
 +                if (TryToChangeVer(Pkg,Cache,VerTag,VerIsRel) == false)
 +                   return false;
            
 +             Hit |= TryToInstall(Pkg,Cache,Fix,Remove,BrokenFix,
 +                                 ExpectedInst,false);
 +          }
 +          regfree(&Pattern);
 +       
 +          if (Hit == false)
 +             return _error->Error(_("Couldn't find package %s"),S);
 +       }
 +       else
 +       {
            if (VerTag != 0)
               if (TryToChangeVer(Pkg,Cache,VerTag,VerIsRel) == false)
                  return false;
 -          
 -          Hit |= TryToInstall(Pkg,Cache,Fix,Remove,BrokenFix,
 -                              ExpectedInst,false);
 -       }
 -       regfree(&Pattern);
 -       
 -       if (Hit == false)
 -          return _error->Error(_("Couldn't find package %s"),S);
 -      }
 -      else
 -      {
 -       if (VerTag != 0)
 -          if (TryToChangeVer(Pkg,Cache,VerTag,VerIsRel) == false)
 +          if (TryToInstall(Pkg,Cache,Fix,Remove,BrokenFix,ExpectedInst) == false)
               return false;
 -       if (TryToInstall(Pkg,Cache,Fix,Remove,BrokenFix,ExpectedInst) == false)
 -          return false;
 -      }      
 -   }
 +       }      
 +      }
  
 -   /* If we are in the Broken fixing mode we do not attempt to fix the
 -      problems. This is if the user invoked install without -f and gave
 -      packages */
 -   if (BrokenFix == true && Cache->BrokenCount() != 0)
 -   {
 -      c1out << _("You might want to run `apt-get -f install' to correct these:") << endl;
 -      ShowBroken(c1out,Cache,false);
 +      /* If we are in the Broken fixing mode we do not attempt to fix the
 +       problems. This is if the user invoked install without -f and gave
 +       packages */
 +      if (BrokenFix == true && Cache->BrokenCount() != 0)
 +      {
 +       c1out << _("You might want to run `apt-get -f install' to correct these:") << endl;
 +       ShowBroken(c1out,Cache,false);
  
 -      return _error->Error(_("Unmet dependencies. Try 'apt-get -f install' with no packages (or specify a solution)."));
 -   }
 +       return _error->Error(_("Unmet dependencies. Try 'apt-get -f install' with no packages (or specify a solution)."));
 +      }
     
 -   // Call the scored problem resolver
 -   Fix.InstallProtect();
 -   if (Fix.Resolve(true) == false)
 -      _error->Discard();
 +      // Call the scored problem resolver
 +      Fix.InstallProtect();
 +      if (Fix.Resolve(true) == false)
 +       _error->Discard();
  
 -   // Now we check the state of the packages,
 -   if (Cache->BrokenCount() != 0)
 -   {
 -      c1out << 
 -       _("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" 
 -       "distribution that some required packages have not yet been created\n"
 -       "or been moved out of Incoming.") << endl;
 -      if (Packages == 1)
 +      // Now we check the state of the packages,
 +      if (Cache->BrokenCount() != 0)
        {
 -       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;
 -      }
 +          _("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" 
 +            "distribution that some required packages have not yet been created\n"
 +            "or been moved out of Incoming.") << endl;
 +       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;
 +       }
 +
 +       c1out << _("The following information may help to resolve the situation:") << endl;
 +       c1out << endl;
 +       ShowBroken(c1out,Cache,false);
 +       return _error->Error(_("Broken packages"));
 +      }   
 +   }
 +   if (!DoAutomaticRemove(Cache)) 
 +       return false;
  
 -      c1out << _("The following information may help to resolve the situation:") << endl;
 -      c1out << endl;
 -      ShowBroken(c1out,Cache,false);
 -      return _error->Error(_("Broken packages"));
 -   }   
 -   
     /* Print out a list of packages that are going to be installed extra
        to what the user asked */
     if (Cache->InstCount() != ExpectedInst)
         
         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);
@@@ -1833,8 -1787,6 +1888,8 @@@ bool DoDSelectUpgrade(CommandLine &CmdL
     if (Cache.OpenForInstall() == false || Cache.CheckDeps() == false)
        return false;
     
 +   pkgDepCache::ActionGroup group(Cache);
 +
     // Install everything with the install flag set
     pkgCache::PkgIterator I = Cache->PkgBegin();
     for (;I.end() != true; I++)
@@@ -2587,7 -2539,6 +2642,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                               /*{{{*/
@@@ -2643,18 -2594,15 +2698,19 @@@ 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,"auto-remove","APT::Get::AutomaticRemove",0},
        {0,"allow-unauthenticated","APT::Get::AllowUnauthenticated",0},
 +      {0,"install-recommends","APT::Install-Recommends",CommandLine::Boolean},
 +      {0,"fix-policy","APT::Get::Fix-Policy-Broken",0},
        {'c',"config-file",0,CommandLine::ConfigFile},
        {'o',"option",0,CommandLine::ArbItem},
        {0,0,0,0}};
     CommandLine::Dispatch Cmds[] = {{"update",&DoUpdate},
                                     {"upgrade",&DoUpgrade},
                                     {"install",&DoInstall},
+                                    {"installtask",&DoInstallTask},
                                     {"remove",&DoInstall},
 +                                 {"autoremove",&DoInstall},
                                     {"dist-upgrade",&DoDistUpgrade},
                                     {"dselect-upgrade",&DoDSelectUpgrade},
                                   {"build-dep",&DoBuildDep},
diff --combined configure.in
index 6ca79fe859cfc06af5ed3309e719918444600780,f0b0d6703af0f057455389e7258eefc6230852fd..4647f4ffb0ad51614ee1f5fcad3ccdd02841769e
@@@ -18,7 -18,7 +18,7 @@@ AC_CONFIG_AUX_DIR(buildlib
  AC_CONFIG_HEADER(include/config.h:buildlib/config.h.in include/apti18n.h:buildlib/apti18n.h.in)
  
  dnl -- SET THIS TO THE RELEASE VERSION --
- AC_DEFINE_UNQUOTED(VERSION,"0.6.45ubuntu9")
 -AC_DEFINE_UNQUOTED(VERSION,"0.6.45.1")
++AC_DEFINE_UNQUOTED(VERSION,"0.6.45ubuntu10")
  PACKAGE="apt"
  AC_DEFINE_UNQUOTED(PACKAGE,"$PACKAGE")
  AC_SUBST(PACKAGE)
diff --combined debian/changelog
index 5ec586f8588402f6711a78ce5678b29a12d9952a,4c5841057ef254ee048af1fe08ca0ef1ab48a94f..4aba0caf9a4be9c0b890123138d8b35c65e0d7a7
 -apt (0.6.45.1) unstable; urgency=low
++apt (0.6.45ubuntu10) edgy; urgency=low
 -  * debian/control:
 -    - switched to libdb4.4 for building (closes: #381019)
 -  * cmdline/apt-get.cc:
 -    - show only the recommends/suggests for the candidate-version, not for all
 -      versions of the package (closes: #257054)
 -    - properly handle recommends/suggests or-groups when printing the list of
 -      suggested/recommends packages (closes: #311619)
+   * methods/http.cc:
+     - check more careful for incorrect proxy settings (closes: #378868)
+   * methods/gzip.cc:
+     - don't hang when /var is full (closes: #341537), thanks to
+       Luis Rodrigo Gallardo Cruz for the patch
+   * doc/examples/sources.list:
+     - removed non-us.debian.org from the example (closes: #380030,#316196)
+   * Merged from Christian Perrier bzr branch:
+     * sk.po: Updated to 514t. Closes: #386851
+     * ja.po: Updated to 514t. Closes: #386537
+     * gl.po: Updated to 514t. Closes: #386397
+     * fr.po: Updated to 516t.
+     * fi.po: Updated to 512t. Closes: #382702
+   * share/archive-archive.gpg:
+     - removed the outdated amd64 and debian-2004 keys
+   * apt-pkg/tagfile.cc:
+     - applied patch from Jeroen van Wolffelaar to make the tags
+       caseinsensitive (closes: #384182)
+     - reverted MMap use in the tagfile because it does not work 
+       across pipes (closes: #383487) 
++  * added "installtask" command
+   
 - --
++ -- Michael Vogt <michael.vogt@ubuntu.com>  Tue, 19 Sep 2006 15:07:51 +0200
++
 +apt (0.6.45ubuntu9) edgy; urgency=low
 +
 +  * cmdline/apt-get.cc:
 +    - if --no-remove is given, do not run the AutoRemove code 
 +
 + -- Michael Vogt <michael.vogt@ubuntu.com>  Wed, 13 Sep 2006 11:54:20 +0200
 +
 +apt (0.6.45ubuntu8) edgy; urgency=low
 +
 +  * apt-pkg/algorithm.cc:
 +    - fix pkgProblemResolver.InstallProtect() to preserve the auto-install
 +      information (lp: #59457)
 +  * cmdline/apt-get.cc:
 +    - fix typo in autoremove information (lp: #59420)
 +  * install apt-mark to modify the automatically install information for
 +    packages
 +
 + -- Michael Vogt <michael.vogt@ubuntu.com>  Fri,  8 Sep 2006 20:07:22 +0200
 +
 +apt (0.6.45ubuntu7) edgy; urgency=low
 +
 +  * apt-pkg/depcache.cc:
 +    - fix a bug in the install-recommends-section code
 +
 + -- Michael Vogt <michael.vogt@ubuntu.com>  Thu,  7 Sep 2006 18:22:38 +0200
 +
 +apt (0.6.45ubuntu6) edgy; urgency=low
 +
 +  [Michael Vogt]
 +  * cmdline/apt-get.cc:
 +    - always show auto-removable packages and give a hint how to remove 
 +      them
 +  * debian/apt.conf.ubuntu:
 +    - exlucde linux-image and linux-restricted-modules from ever being 
 +      auto-removed
 +    - added "metapackages" as the section we want to install recommends
 +      by default
 +  * apt-pkg/depcache.cc:
 +    - added support to turn install-recommends selectively on/off by
 +      section
 +  [Ian Jackson]
 +  * Tests pass without code changes!  Except that we need this:
 +  * Bump cache file major version to force rebuild so that Breaks
 +    dependencies are included.
 +  * Don't depend on or suggest any particular dpkg or dpkg-dev versions;
 +    --auto-deconfigure is very very old and dpkg-dev's Breaks support
 +    is more or less orthogonal.
 +  * Initial draft of `Breaks' implementation.  Appears to compile,
 +    but as yet *completely untested*.
 +
 + -- Michael Vogt <michael.vogt@ubuntu.com>  Thu,  7 Sep 2006 11:50:52 +0200
 +
 +apt (0.6.45ubuntu5) edgy; urgency=low
 +
 +  * apt-pkg/pkgcachegen.cc:
 +    - increase the APT::Cache-Limit to deal with the increased demand due
 +      to the translated descriptions
 +  * apt-pkg/deb/dpkgpm.cc:
 +    - pass "--auto-deconfigure" to dpkg on install to support the
 +      new "breaks" in dpkg
 +
 + -- Michael Vogt <michael.vogt@ubuntu.com>  Tue, 15 Aug 2006 12:06:26 +0200
 +
 +apt (0.6.45ubuntu4) edgy; urgency=low
 +
 +  * cmdline/apt-get.cc:
 +    - fix in the new --fix-polciy code
 +
 + -- Michael Vogt <michael.vogt@ubuntu.com>  Mon, 14 Aug 2006 21:08:11 +0200
 +
 +apt (0.6.45ubuntu3) edgy; urgency=low
 +
 +  * ABI break
 +  * merged latest apt--install-recommends (closes: #559000)
 +  * added "--fix-policy" option to can be used as "--fix-broken" and
 +    will install missing weak depends (recommends, and/or suggests 
 +    depending on the settings)
 +  * merged the apt--ddtp branch
 +
 + -- Michael Vogt <michael.vogt@ubuntu.com>  Fri, 11 Aug 2006 12:53:23 +0200
 +
 +apt (0.6.45ubuntu2) edgy; urgency=low
 +
 +  * debian/control:
 +    - switched to libdb4.4 for building (closes: #381019)
 +  * cmdline/apt-get.cc:
 +    - show only the recommends/suggests for the candidate-version, not for all
 +      versions of the package (closes: #257054)
 +    - properly handle recommends/suggests or-groups when printing the list of
 +      suggested/recommends packages (closes: #311619)
 +  * merged "apt--install-recommends" branch:
 +    - added "{no-}install-recommends" commandline option
 +    - added APT::Install-{Recommends,Suggests} option
 +    - currently Install-Recommends defaults to "False" 
 +
 + -- Michael Vogt <michael.vogt@ubuntu.com>  Wed,  9 Aug 2006 23:38:46 +0200
 +
 +apt (0.6.45ubuntu1) edgy; urgency=low
 +
 +  * merged with debian/unstable
 +
 + -- Michael Vogt <michael.vogt@ubuntu.com>  Tue,  1 Aug 2006 15:43:22 +0200
  
  apt (0.6.45) unstable; urgency=low
  
  
   -- Michael Vogt <mvo@debian.org>  Thu, 27 Jul 2006 00:52:05 +0200
  
 -apt  (0.6.44.2) unstable; urgency=low 
 +apt (0.6.44.2ubuntu4) edgy; urgency=low
 +
 +  * Make apt-get dselect-upgrade happy again
 +
 + -- Michael Vogt <michael.vogt@ubuntu.com>  Fri, 21 Jul 2006 11:03:02 +0200
 +
 +apt (0.6.44.2ubuntu3) edgy; urgency=low
 +
 +  * Close extended_states file after writing it.
 +
 + -- Colin Watson <cjwatson@ubuntu.com>  Tue, 18 Jul 2006 00:12:13 +0100
 +
 +apt (0.6.44.2ubuntu2) edgy; urgency=low
 +
 +  * create a empty extended_states file if none exists already
 +
 + -- Michael Vogt <michael.vogt@ubuntu.com>  Tue,  4 Jul 2006 09:23:03 +0200
 +
 +apt (0.6.44.2ubuntu1) edgy; urgency=low
 +
 +  * merged with debian/unstable
 +  * merged the "auto-mark" branch to support aptitude like
 +    marking of automatically installed dependencies and added
 +    "apt-get remove --auto-remove" to remove unused auto-installed
 +    packages again
 +  * changed library version from 3.11 to 3.50 to make it clearly 
 +    different from the debian version (we are ABI incompatible because
 +    of the auto-mark patch)
 +
 + -- Michael Vogt <michael.vogt@ubuntu.com>  Mon,  3 Jul 2006 18:30:46 +0200
 +
 +apt  (0.6.44.2) unstable; urgency=low
    
     * apt-pkg/depcache.cc:
       - added Debug::pkgDepCache::AutoInstall (thanks to infinity)
@@@ -239,26 -137,6 +265,26 @@@ apt (0.6.44) unstable; urgency=lo
    
   -- Michael Vogt <mvo@debian.org>  Mon,  8 May 2006 22:28:53 +0200
  
 +apt (0.6.43.3ubuntu3) dapper; urgency=low
 +
 +  * methods/http.cc:
 +    - fix the user-agent string
 +
 + -- Michael Vogt <michael.vogt@ubuntu.com>  Fri, 26 May 2006 18:09:32 +0200
 +
 +apt (0.6.43.3ubuntu2) dapper; urgency=low
 +
 +  * apt-pkg/deb/dpkgpm.cc: wording fixes (thanks to Matt Zimmerman)
 +
 + -- Michael Vogt <michael.vogt@ubuntu.com>  Tue, 18 Apr 2006 13:24:40 +0200
 +
 +apt (0.6.43.3ubuntu1) dapper; urgency=low
 +
 +  * apt-pkg/acquire.cc: don't show ETA if it is 0 or absurdely large in 
 +    the status-fd (ubuntu #28954)
 +
 + -- Michael Vogt <michael.vogt@ubuntu.com>  Tue, 28 Mar 2006 20:34:46 +0200
 +
  apt (0.6.43.3) unstable; urgency=low
  
    * Merge bubulle@debian.org--2005/apt--main--0 up to patch-186:
      * pl.po: Completed to 512t. Closes: #349514
      * sk.po: Completed to 512t. Closes: #349474
      * gl.po: Completed to 512 strings Closes: #349407
 +    * vi.po: Completed to 512 strings
      * sv.po: Completed to 512 strings Closes: #349210
      * ru.po: Completed to 512 strings Closes: #349154
      * da.po: Completed to 512 strings Closes: #349084
      * fr.po: Completed to 512 strings
 +    * LINGUAS: Add Welsh
 +    * *.po: Updated from sources (512 strings)
      * vi.po: Completed to 511 strings  Closes: #348968
 -    * zh_CN.po: Completed to 512t. Closes: #353936
 -    * it.po: Completed to 512t. Closes: #352803
 -    * pt_BR.po: Completed to 512t. Closes: #352419
 +  * apt-pkg/deb/deblistparser.cc:
 +    - don't explode on a DepCompareOp in a Provides line, but warn about
 +      it and ignore it otherwise (thanks to James Troup for reporting it)
 +  * cmdline/apt-get.cc:
 +    - don't lock the lists directory in DoInstall, breaks --print-uri 
 +      (thanks to James Troup for reporting it)
 +  * debian/apt.dirs: create /etc/apt/sources.list.d 
 +  * make apt-cache madison work without deb-src entries (#352583)
 +  * cmdline/apt-get.cc: only run the list-cleaner if a update was 
 +    successfull
 +  * apt-get update errors are only warnings nowdays
 +  * be more careful with the signature file on network failures
 +
 + --  Michael Vogt <mvo@debian.org>  Wed, 22 Feb 2006 10:13:04 +0100
 +
 +apt (0.6.43.2ubuntu1) dapper; urgency=low
 +
 +  * Merge bubulle@debian.org--2005/apt--main--0 up to patch-182:
 +  * ca.po: Completed to 512t. Closes: #351592
 +    * eu.po: Completed to 512t. Closes: #350483
 +    * ja.po: Completed to 512t. Closes: #349806
 +    * pl.po: Completed to 512t. Closes: #349514
 +    * sk.po: Completed to 512t. Closes: #349474
 +    * gl.po: Completed to 512 strings Closes: #349407
 +    * vi.po: Completed to 512 strings
 +    * sv.po: Completed to 512 strings Closes: #349210
 +    * ru.po: Completed to 512 strings Closes: #349154
 +    * da.po: Completed to 512 strings Closes: #349084
 +    * fr.po: Completed to 512 strings
      * LINGUAS: Add Welsh
      * *.po: Updated from sources (512 strings)
 +    * vi.po: Completed to 511 strings  Closes: #348968
    * apt-pkg/deb/deblistparser.cc:
      - don't explode on a DepCompareOp in a Provides line, but warn about
        it and ignore it otherwise (thanks to James Troup for reporting it)
    * make apt-cache madison work without deb-src entries (#352583)
    * cmdline/apt-get.cc: only run the list-cleaner if a update was 
      successfull
 +  * apt-get update errors are only warnings nowdays
 +  * be more careful with the signature file on network failures
  
 - -- Michael Vogt <mvo@debian.org>  Wed, 22 Feb 2006 10:13:04 +0100
 + -- Michael Vogt <michael.vogt@ubuntu.com>  Mon, 20 Feb 2006 22:27:48 +0100
  
  apt (0.6.43.2) unstable; urgency=low
  
  
   -- Michael Vogt <mvo@debian.org>  Thu, 19 Jan 2006 00:06:33 +0100
  
 -apt (0.6.43.1) unstable; urgency=low
 +apt (0.6.43.1ubuntu1) dapper; urgency=low
 +
 +  * Merge bubulle@debian.org--2005/apt--main--0 up to patch-159:
 +    - en_GB.po, de.po: fix spaces errors in "Ign " translations
 +      Closes: #347258
 +    - makefile: make update-po a pre-requisite of clean target so
 +              that POT and PO files are always up-to-date
 +    - sv.po: Completed to 511t. Closes: #346450
 +    - sk.po: Completed to 511t. Closes: #346369
 +    - fr.po: Completed to 511t
 +    - *.po: Updated from sources (511 strings)
 +  * add patch to fix http download corruption problem (thanks to
 +    Petr Vandrovec, closes: #280844, #290694)
 +  * added APT::Periodic::Unattended-Upgrade (requires the package
 +    "unattended-upgrade")
 +
 + -- Michael Vogt <michael.vogt@ubuntu.com>  Tue, 10 Jan 2006 17:09:31 +0100
  
 +apt (0.6.43.1) unstable; urgency=low
 +  
    * Merge bubulle@debian.org--2005/apt--main--0 up to patch-148:
      * fr.po: Completed to 510 strings
      * it.po: Completed to 510t
  
   -- Michael Vogt <mvo@debian.org>  Fri,  6 Jan 2006 01:17:08 +0100
  
 +apt (0.6.43ubuntu2) dapper; urgency=low
 +
 +  * merged some missing bits that wheren't merged by baz in the previous
 +    upload (*grumble*)
 +
 + -- Michael Vogt <michael.vogt@ubuntu.com>  Thu,  8 Dec 2005 18:35:58 +0100
 +
 +apt (0.6.43ubuntu1) dapper; urgency=low
 +
 +  * merged with debian
 +
 + -- Michael Vogt <michael.vogt@ubuntu.com>  Fri, 25 Nov 2005 11:36:29 +0100
 +
  apt (0.6.43) unstable; urgency=medium
  
    * Merge bubulle@debian.org--2005/apt--main--0 up to patch-132:  
    
   -- Michael Vogt <mvo@debian.org>  Tue, 29 Nov 2005 00:17:07 +0100
  
 +apt (0.6.42.3ubuntu2) dapper; urgency=low
 +
 +  * Merge bubulle@debian.org--2005/apt--main--0 up to patch-131:  
 +    * zh_CN.po: Completed to 507 strings(Closes: #338267)
 +    * gl.po: Completed to 510 strings (Closes: #338356)
 +  * added support for "/etc/apt/sources.list.d" directory 
 +    (closes: #66325)
 +  
 + -- Michael Vogt <michael.vogt@ubuntu.com>  Mon, 14 Nov 2005 15:30:12 +0100
 +
 +apt (0.6.42.3ubuntu1) dapper; urgency=low
 +
 +  * synced with debian
 +
 + -- Michael Vogt <michael.vogt@ubuntu.com>  Thu, 10 Nov 2005 05:05:56 +0100
 +
  apt (0.6.42.3) unstable; urgency=low
  
    * Merge bubulle@debian.org--2005/apt--main--0 up to patch-129:
@@@ -483,13 -282,13 +509,13 @@@ apt (0.6.42) unstable; urgency=lo
      - unmount the cdrom when apt failed to locate any package files
    * allow cdrom failures and fallback to other sources in that case
      (closes: #44135)
 -  * better error text when dpkg-source fails 
 +  * better error text when dpkg-source fails
    * Merge bubulle@debian.org--2005/apt--main--0 up to patch-115:
      - patch-99: Added Galician translation
      - patch-100: Completed Danish translation (Closes: #325686)
      - patch-104: French translation completed
      - patch-109: Italian translation completed
 -    - patch-112: Swedish translation update 
 +    - patch-112: Swedish translation update
      - patch-115: Basque translation completed (Closes: #333299)
    * applied french man-page update (thanks to Philippe Batailler)
      (closes: #316638, #327456)
    * apt-pkg/contrib/md5.cc:
      - fix a alignment problem on sparc64 that gives random bus errors
        (thanks to Fabbione for providing a test-case)
 -  * init the default ScreenWidth to 79 columns by default 
 +  * init the default ScreenWidth to 79 columns by default
      (Closes: #324921)
 -  * cmdline/apt-cdrom.cc: 
 +  * cmdline/apt-cdrom.cc:
      - fix some missing gettext() calls (closes: #334539)
    * doc/apt-cache.8.xml: fix typo (closes: #334714)
 -  
 +
   -- Michael Vogt <mvo@debian.org>  Wed, 19 Oct 2005 22:02:09 +0200
  
  apt (0.6.41) unstable; urgency=low
    * improved the support for "error" and "conffile" reporting from
      dpkg, added the format to README.progress-reporting
    * added README.progress-reporting to the apt-doc package
 -  * improved the network timeout handling, if a index file from a 
 -    sources.list times out or EAI_AGAIN is returned from getaddrinfo, 
 +  * improved the network timeout handling, if a index file from a
 +    sources.list times out or EAI_AGAIN is returned from getaddrinfo,
      don't try to get the other files from that entry
    * Support architecture-specific extra overrides
      (closes: #225947). Thanks to  Anthony Towns for idea and
    * Javier Fernandez-Sanguino Pen~a:
      - Added a first version of an apt-secure.8 manpage, and modified
        apt-key and apt.end accordingly. Also added the 'update'
 -      argument to apt-key which was previously not documented 
 +      argument to apt-key which was previously not documented
        (Closes: #322120)
    * Andreas Pakulat:
 -    - added example apt-ftparchive.conf file to doc/examples 
 +    - added example apt-ftparchive.conf file to doc/examples
        (closes: #322483)
    * Fix a incorrect example in the man-page (closes: #282918)
    * Fix a bug for very long lines in the apt-cdrom code (closes: #280356)
    * Change pkgPolicy::Pin from private to protected to let subclasses
      access it too (closes: #321799)
    * add default constructor for PrvIterator (closes: #322267)
 -  * Reread status configuration on debSystem::Initialize() 
 +  * Reread status configuration on debSystem::Initialize()
      (needed for apt-proxy, thanks to Otavio for this patch)
 -  
 +
   -- Michael Vogt <mvo@debian.org>  Mon,  5 Sep 2005 22:59:03 +0200
 +  
 +apt (0.6.40.1ubuntu8) breezy; urgency=low
 +
 +  * Cherry picked michael.vogt@ubuntu.com--2005/apt--mvo--0--patch-62:
 +    - fix for a bad memory/file leak in the mmap code (ubuntu #15603)
 +  * po/de.po, po/fr.po: 
 +    - updated the translations
 +  * po/makefile:
 +    - create a single pot file in each domain dir to make rosetta happy
 +
 + -- Michael Vogt <michael.vogt@ubuntu.com>  Wed, 28 Sep 2005 10:16:06 +0200
 +
 +apt (0.6.40.1ubuntu7) breezy; urgency=low
 +
 +  * updated the pot/po files , no code changes
 +
 + -- Michael Vogt <michael.vogt@ubuntu.com>  Tue, 27 Sep 2005 18:38:16 +0200
 +
 +apt (0.6.40.1ubuntu6) breezy; urgency=low
 +
 +  * Cherry picked michael.vogt@ubuntu.com--2005/apt--mvo--0--patch-56:
 +    - make it possible for apt to handle a failed MediaChange event and
 +      fall back to other sources (ubuntu #13713)
 +
 + -- Michael Vogt <michael.vogt@ubuntu.com>  Tue, 13 Sep 2005 22:09:50 +0200
 +
 +apt (0.6.40.1ubuntu5) breezy; urgency=low
 +
 +  * Cherry picked michael.vogt@ubuntu.com--2005/apt--mvo--0--patch-{50,51}.
 +    This adds media-change reporting to the apt status-fd (ubuntu #15213)
 +  * Cherry picked michael.vogt@ubuntu.com--2005/apt--mvo--0--patch-55:
 +    apt-pkg/cdrom.cc:
 +    - unmount the cdrom when apt failed to locate any package files
 +
 + -- Michael Vogt <michael.vogt@ubuntu.com>  Mon, 12 Sep 2005 15:44:26 +0200
 +
 +apt (0.6.40.1ubuntu4) breezy; urgency=low
 +
 +  * debian/apt.cron.daily:
 +    - fix a embarrassing typo
 +  
 + -- Michael Vogt <michael.vogt@ubuntu.com>  Wed,  7 Sep 2005 10:10:37 +0200
 +
 +apt (0.6.40.1ubuntu3) breezy; urgency=low
 +
 +  * debian/apt.cron.daily:
 +    - use the ctime as well when figuring what packages need to
 +      be removed. This fixes the problem that packages copied with    
 +      "cp -a" (e.g. from the installer) have old mtimes (ubuntu #14504)
 +
 + -- Michael Vogt <michael.vogt@ubuntu.com>  Tue,  6 Sep 2005 18:30:46 +0200
 +
 +apt (0.6.40.1ubuntu2) breezy; urgency=low
 +
 +  * improved the support for "error" and "conffile" reporting from
 +    dpkg, added the format to README.progress-reporting
 +  * added README.progress-reporting to the apt-doc package
 +  * Do md5sum checking for file and cdrom method (closes: #319142)
 +  * Change pkgPolicy::Pin from private to protected to let subclasses
 +    access it too (closes: #321799)
 +  * methods/connect.cc:
 +    - send failure reason for EAI_AGAIN (TmpResolveFailure) to acuire-item
 +  * apt-pkg/acquire-item.cc:
 +    - fail early if a FailReason is TmpResolveFailure (avoids hangs during
 +      the install when no network is available)
 +  * merged michael.vogt@ubuntu.com--2005/apt--trust-cdrom--0
 +
 + -- Michael Vogt <michael.vogt@ubuntu.com>  Tue, 23 Aug 2005 19:44:55 +0200
 +
 +apt (0.6.40.1ubuntu1) breezy; urgency=low
 +
 +  * Synchronize with Debian
 +
 + -- Michael Vogt <michael.vogt@ubuntu.com>  Fri,  5 Aug 2005 14:20:56 +0200
  
  apt (0.6.40.1) unstable; urgency=low
  
  
   -- Michael Vogt <mvo@debian.org>  Fri,  5 Aug 2005 13:24:58 +0200
  
 +apt (0.6.40ubuntu1) breezy; urgency=low
 +
 +  * Synchronize with Debian
 +
 + -- Matt Zimmerman <mdz@ubuntu.com>  Thu,  4 Aug 2005 15:53:22 -0700
 +
  apt (0.6.40) unstable; urgency=low
  
    * Patch from Jordi Mallach to mark some additional strings for translation
  
   -- Matt Zimmerman <mdz@debian.org>  Thu, 28 Jul 2005 11:57:32 -0700
  
 +apt (0.6.39ubuntu4) breezy; urgency=low
 +
 +  * Fix keyring paths in apt-key, apt.postinst (I swear I remember doing this
 +    before...)
 +
 + -- Matt Zimmerman <mdz@ubuntu.com>  Wed, 29 Jun 2005 08:39:17 -0700
 +
 +apt (0.6.39ubuntu3) breezy; urgency=low
 +
 +  * Fix keyring locations for Ubuntu in apt-key too.
 +
 + -- Colin Watson <cjwatson@ubuntu.com>  Wed, 29 Jun 2005 14:45:36 +0100
 +
 +apt (0.6.39ubuntu2) breezy; urgency=low
 +
 +  * Install ubuntu-archive.gpg rather than debian-archive.gpg as
 +    /etc/apt/trusted.gpg.
 +
 + -- Colin Watson <cjwatson@ubuntu.com>  Wed, 29 Jun 2005 11:53:34 +0100
 +
 +apt (0.6.39ubuntu1) breezy; urgency=low
 +
 +  * Michael Vogt
 +    - Change debian/bugscript to use #!/bin/bash (Closes: #313402)
 +    - Fix a incorrect example in the man-page (closes: #282918)
 +    - Support architecture-specific extra overrides
 +      (closes: #225947). Thanks to  Anthony Towns for idea and
 +      the patch, thanks to Colin Watson for testing it.
 +    - better report network timeouts from the methods to the acuire code,
 +      only timeout once per sources.list line
 +
 + -- Matt Zimmerman <mdz@ubuntu.com>  Tue, 28 Jun 2005 11:52:24 -0700
 +
  apt (0.6.39) unstable; urgency=low
  
    * Welsh translation update: daf@muse.19inch.net--2005/apt--main--0--patch-6
    * Update priority of apt-utils to important, to match the override file
    * Install only one keyring on each branch (Closes: #316119)
  
 - -- Matt Zimmerman <mdz@debian.org>  Tue, 28 Jun 2005 11:51:09 -0700
 + -- Matt Zimmerman <mdz@debian.org>  Tue, 28 Jun 2005 11:35:21 -0700
 +
 +apt (0.6.38ubuntu1) breezy; urgency=low
 +
 +  * First release from Ubuntu branch
 +  * Merge with --main--0, switch back to Ubuntu keyring
 +
 + -- Matt Zimmerman <mdz@ubuntu.com>  Sat, 25 Jun 2005 16:52:41 -0700
  
  apt (0.6.38) unstable; urgency=low
  
@@@ -728,7 -407,6 +754,7 @@@ apt (0.6.37) breezy; urgency=lo
    * 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