]> git.saurik.com Git - apt.git/commitdiff
merged from debian
authorMichael Vogt <michael.vogt@ubuntu.com>
Thu, 30 Jul 2009 15:34:48 +0000 (17:34 +0200)
committerMichael Vogt <michael.vogt@ubuntu.com>
Thu, 30 Jul 2009 15:34:48 +0000 (17:34 +0200)
17 files changed:
1  2 
apt-pkg/acquire-item.cc
apt-pkg/acquire-item.h
apt-pkg/acquire-method.cc
apt-pkg/algorithms.cc
apt-pkg/deb/dpkgpm.cc
apt-pkg/deb/dpkgpm.h
apt-pkg/init.cc
apt-pkg/tagfile.cc
cmdline/apt-cache.cc
cmdline/apt-get.cc
debian/apt.cron.daily
debian/apt.dirs
debian/changelog
debian/control
doc/examples/configure-index
methods/http.cc
methods/makefile

diff --combined apt-pkg/acquire-item.cc
index 91f3d060543c0990b5d98b482d7e13e2575b9bd5,39ae327cbb64853d8cb869f3e6de049c44053fac..a65630afd08ec43dd94ce4533abc0cf8501e0c45
@@@ -63,7 -63,6 +63,7 @@@ void pkgAcquire::Item::Failed(string Me
  {
     Status = StatIdle;
     ErrorText = LookupTag(Message,"Message");
 +   UsedMirror =  LookupTag(Message,"UsedMirror");
     if (QueueCounter <= 1)
     {
        /* This indicates that the file is not available right now but might
         Dequeue();
         return;
        }
 -      
 +
        Status = StatError;
        Dequeue();
     }   
 +   
 +   // report mirror failure back to LP if we actually use a mirror
 +   string FailReason = LookupTag(Message, "FailReason");
 +   if(FailReason.size() != 0)
 +      ReportMirrorFailure(FailReason);
 +   else
 +      ReportMirrorFailure(ErrorText);
  }
                                                                        /*}}}*/
  // Acquire::Item::Start - Item has begun to download                  /*{{{*/
@@@ -108,7 -100,7 +108,7 @@@ void pkgAcquire::Item::Done(string Mess
  {
     // We just downloaded something..
     string FileName = LookupTag(Message,"Filename");
 -   // we only inform the Log class if it was actually not a local thing
 +   UsedMirror =  LookupTag(Message,"UsedMirror");
     if (Complete == false && !Local && FileName == DestFile)
     {
        if (Owner->Log != 0)
  
     if (FileSize == 0)
        FileSize= Size;
 -   
     Status = StatDone;
     ErrorText = string();
     Owner->Dequeue(this);
@@@ -138,52 -131,7 +138,50 @@@ void pkgAcquire::Item::Rename(string Fr
     }   
  }
                                                                        /*}}}*/
- // AcqDiffIndex::AcqDiffIndex - Constructor                   
 +
 +void pkgAcquire::Item::ReportMirrorFailure(string FailCode)
 +{
 +   // we only act if a mirror was used at all
 +   if(UsedMirror.empty())
 +      return;
 +#if 0
 +   std::cerr << "\nReportMirrorFailure: " 
 +           << UsedMirror
 +           << " Uri: " << DescURI()
 +           << " FailCode: " 
 +           << FailCode << std::endl;
 +#endif
 +   const char *Args[40];
 +   unsigned int i = 0;
 +   string report = _config->Find("Methods::Mirror::ProblemReporting", 
 +                               "/usr/lib/apt/apt-report-mirror-failure");
 +   if(!FileExists(report))
 +      return;
 +   Args[i++] = report.c_str();
 +   Args[i++] = UsedMirror.c_str();
 +   Args[i++] = DescURI().c_str();
 +   Args[i++] = FailCode.c_str();
 +   Args[i++] = NULL;
 +   pid_t pid = ExecFork();
 +   if(pid < 0) 
 +   {
 +      _error->Error("ReportMirrorFailure Fork failed");
 +      return;
 +   }
 +   else if(pid == 0) 
 +   {
 +      execvp(Args[0], (char**)Args);
 +      std::cerr << "Could not exec " << Args[0] << std::endl;
 +      _exit(100);
 +   }
 +   if(!ExecWait(pid, "report-mirror-failure")) 
 +   {
 +      _error->Warning("Couldn't report problem to '%s'",
 +                    _config->Find("Methods::Mirror::ProblemReporting").c_str());
 +   }
 +}
 +
+ // AcqDiffIndex::AcqDiffIndex - Constructor                           /*{{{*/
  // ---------------------------------------------------------------------
  /* Get the DiffIndex file first and see if there are patches availabe 
   * If so, create a pkgAcqIndexDiffs fetcher that will get and apply the
@@@ -234,7 -182,7 +232,7 @@@ pkgAcqDiffIndex::pkgAcqDiffIndex(pkgAcq
     QueueURI(Desc);
  
  }
+                                                                       /*}}}*/
  // AcqIndex::Custom600Headers - Insert custom request headers         /*{{{*/
  // ---------------------------------------------------------------------
  /* The only header we use is the last-modified header. */
@@@ -252,9 -200,8 +250,8 @@@ string pkgAcqDiffIndex::Custom600Header
     
     return "\nIndex-File: true\nLast-Modified: " + TimeRFC1123(Buf.st_mtime);
  }
- bool pkgAcqDiffIndex::ParseDiffIndex(string IndexDiffFile)
+                                                                       /*}}}*/
+ bool pkgAcqDiffIndex::ParseDiffIndex(string IndexDiffFile)            /*{{{*/
  {
     if(Debug)
        std::clog << "pkgAcqIndexDiffs::ParseIndexDiff() " << IndexDiffFile 
        std::clog << "Can't find a patch in the index file" << std::endl;
     return false;
  }
- void pkgAcqDiffIndex::Failed(string Message,pkgAcquire::MethodConfig *Cnf)
+                                                                       /*}}}*/
+ void pkgAcqDiffIndex::Failed(string Message,pkgAcquire::MethodConfig *Cnf)    /*{{{*/
  {
     if(Debug)
        std::clog << "pkgAcqDiffIndex failed: " << Desc.URI << std::endl
     Status = StatDone;
     Dequeue();
  }
- void pkgAcqDiffIndex::Done(string Message,unsigned long Size,string Md5Hash,
+                                                                       /*}}}*/
+ void pkgAcqDiffIndex::Done(string Message,unsigned long Size,string Md5Hash,  /*{{{*/
                           pkgAcquire::MethodConfig *Cnf)
  {
     if(Debug)
     Dequeue();
     return;
  }
- // AcqIndexDiffs::AcqIndexDiffs - Constructor                 
+                                                                       /*}}}*/
+ // AcqIndexDiffs::AcqIndexDiffs - Constructor                         /*{{{*/
  // ---------------------------------------------------------------------
  /* The package diff is added to the queue. one object is constructed
   * for each diff and the index
@@@ -422,9 -367,8 +417,8 @@@ pkgAcqIndexDiffs::pkgAcqIndexDiffs(pkgA
        QueueNextDiff();
     }
  }
- void pkgAcqIndexDiffs::Failed(string Message,pkgAcquire::MethodConfig *Cnf)
+                                                                       /*}}}*/
+ void pkgAcqIndexDiffs::Failed(string Message,pkgAcquire::MethodConfig *Cnf)   /*{{{*/
  {
     if(Debug)
        std::clog << "pkgAcqIndexDiffs failed: " << Desc.URI << std::endl
                   ExpectedHash);
     Finish();
  }
- // helper that cleans the item out of the fetcher queue
+                                                                       /*}}}*/
+ // Finish - helper that cleans the item out of the fetcher queue      /*{{{*/
  void pkgAcqIndexDiffs::Finish(bool allDone)
  {
     // we restore the original name, this is required, otherwise
     Dequeue();
     return;
  }
- bool pkgAcqIndexDiffs::QueueNextDiff()
+                                                                       /*}}}*/
+ bool pkgAcqIndexDiffs::QueueNextDiff()                                        /*{{{*/
  {
  
     // calc sha1 of the just patched file
  
     return true;
  }
- void pkgAcqIndexDiffs::Done(string Message,unsigned long Size,string Md5Hash,
+                                                                       /*}}}*/
+ void pkgAcqIndexDiffs::Done(string Message,unsigned long Size,string Md5Hash, /*{{{*/
                            pkgAcquire::MethodConfig *Cnf)
  {
     if(Debug)
         return Finish(true);
     }
  }
+                                                                       /*}}}*/
  // AcqIndex::AcqIndex - Constructor                                   /*{{{*/
  // ---------------------------------------------------------------------
  /* The package file is added to the queue and a second class is 
@@@ -640,11 -578,11 +628,10 @@@ string pkgAcqIndex::Custom600Headers(
     struct stat Buf;
     if (stat(Final.c_str(),&Buf) != 0)
        return "\nIndex-File: true";
 -   
     return "\nIndex-File: true\nLast-Modified: " + TimeRFC1123(Buf.st_mtime);
  }
                                                                        /*}}}*/
- void pkgAcqIndex::Failed(string Message,pkgAcquire::MethodConfig *Cnf)
+ void pkgAcqIndex::Failed(string Message,pkgAcquire::MethodConfig *Cnf)        /*{{{*/
  {
     bool descChanged = false;
     // no .bz2 found, retry with .gz
  
     Item::Failed(Message,Cnf);
  }
+                                                                       /*}}}*/
  // AcqIndex::Done - Finished a fetch                                  /*{{{*/
  // ---------------------------------------------------------------------
  /* This goes through a number of states.. On the initial fetch the
@@@ -706,7 -643,6 +692,7 @@@ void pkgAcqIndex::Done(string Message,u
           Status = StatAuthError;
           ErrorText = _("Hash Sum mismatch");
           Rename(DestFile,DestFile + ".FAILED");
 +       ReportMirrorFailure("HashChecksumFailure");
           return;
        }
        // Done, move it into position
     QueueURI(Desc);
     Mode = decompProg;
  }
+                                                                       /*}}}*/
  // AcqIndexTrans::pkgAcqIndexTrans - Constructor                      /*{{{*/
  // ---------------------------------------------------------------------
  /* The Translation file is added to the queue */
@@@ -794,7 -730,6 +780,6 @@@ pkgAcqIndexTrans::pkgAcqIndexTrans(pkgA
    : pkgAcqIndex(Owner, URI, URIDesc, ShortDesc, HashString(), "")
  {
  }
                                                                        /*}}}*/
  // AcqIndexTrans::Failed - Silence failure messages for missing files /*{{{*/
  // ---------------------------------------------------------------------
@@@ -814,8 -749,7 +799,7 @@@ void pkgAcqIndexTrans::Failed(string Me
     Item::Failed(Message,Cnf);
  }
                                                                        /*}}}*/
- pkgAcqMetaSig::pkgAcqMetaSig(pkgAcquire *Owner,
+ pkgAcqMetaSig::pkgAcqMetaSig(pkgAcquire *Owner,                               /*{{{*/
                             string URI,string URIDesc,string ShortDesc,
                             string MetaIndexURI, string MetaIndexURIDesc,
                             string MetaIndexShortDesc,
@@@ -899,13 -833,12 +883,13 @@@ void pkgAcqMetaSig::Done(string Message
        Rename(LastGoodSig, DestFile);
  
     // queue a pkgAcqMetaIndex to be verified against the sig we just retrieved
 -   new pkgAcqMetaIndex(Owner, MetaIndexURI, MetaIndexURIDesc, MetaIndexShortDesc,
 -                     DestFile, IndexTargets, MetaIndexParser);
 +   new pkgAcqMetaIndex(Owner, MetaIndexURI, MetaIndexURIDesc, 
 +                     MetaIndexShortDesc,  DestFile, IndexTargets, 
 +                     MetaIndexParser);
  
  }
                                                                        /*}}}*/
- void pkgAcqMetaSig::Failed(string Message,pkgAcquire::MethodConfig *Cnf)
+ void pkgAcqMetaSig::Failed(string Message,pkgAcquire::MethodConfig *Cnf)/*{{{*/
  {
     string Final = _config->FindDir("Dir::State::lists") + URItoFileName(RealURI);
  
     {
        Item::Failed(Message,Cnf);
        // move the sigfile back on transient network failures 
 -      if(FileExists(DestFile))
 +      if(FileExists(LastGoodSig))
         Rename(LastGoodSig,Final);
  
        // set the status back to , Item::Failed likes to reset it
     
     Item::Failed(Message,Cnf);
  }
- pkgAcqMetaIndex::pkgAcqMetaIndex(pkgAcquire *Owner,
+                                                                       /*}}}*/
+ pkgAcqMetaIndex::pkgAcqMetaIndex(pkgAcquire *Owner,                   /*{{{*/
                                 string URI,string URIDesc,string ShortDesc,
                                 string SigFile,
                                 const vector<struct IndexTarget*>* IndexTargets,
  
     QueueURI(Desc);
  }
                                                                        /*}}}*/
  // pkgAcqMetaIndex::Custom600Headers - Insert custom request headers  /*{{{*/
  // ---------------------------------------------------------------------
@@@ -977,8 -909,8 +960,8 @@@ string pkgAcqMetaIndex::Custom600Header
     
     return "\nIndex-File: true\nLast-Modified: " + TimeRFC1123(Buf.st_mtime);
  }
- void pkgAcqMetaIndex::Done(string Message,unsigned long Size,string Hash,
+                                                                       /*}}}*/
+ void pkgAcqMetaIndex::Done(string Message,unsigned long Size,string Hash,     /*{{{*/
                           pkgAcquire::MethodConfig *Cfg)
  {
     Item::Done(Message,Size,Hash,Cfg);
     if (AuthPass == true)
     {
        AuthDone(Message);
 +
 +      // all cool, move Release file into place
 +      Complete = true;
 +
 +      string FinalFile = _config->FindDir("Dir::State::lists");
 +      FinalFile += URItoFileName(RealURI);
 +      Rename(DestFile,FinalFile);
 +      chmod(FinalFile.c_str(),0644);
 +      DestFile = FinalFile;
     }
     else
     {
        }
     }
  }
- void pkgAcqMetaIndex::RetrievalDone(string Message)
+                                                                       /*}}}*/
+ void pkgAcqMetaIndex::RetrievalDone(string Message)                   /*{{{*/
  {
     // We have just finished downloading a Release file (it is not
     // verified yet)
        return;
     }
  
 -   // see if the download was a IMSHit
 +   // make sure to verify against the right file on I-M-S hit
     IMSHit = StringToBool(LookupTag(Message,"IMS-Hit"),false);
 +   if(IMSHit)
 +   {
 +      string FinalFile = _config->FindDir("Dir::State::lists");
 +      FinalFile += URItoFileName(RealURI);
 +      DestFile = FinalFile;
 +   }
     Complete = true;
 -
 -   string FinalFile = _config->FindDir("Dir::State::lists");
 -   FinalFile += URItoFileName(RealURI);
 -
 -   // If we get a IMS hit we can remove the empty file in partial
 -   // othersie we move the file in place
 -   if (IMSHit)
 -      unlink(DestFile.c_str());
 -   else
 -      Rename(DestFile,FinalFile);
 -
 -   chmod(FinalFile.c_str(),0644);
 -   DestFile = FinalFile;
  }
- void pkgAcqMetaIndex::AuthDone(string Message)
+                                                                       /*}}}*/
+ void pkgAcqMetaIndex::AuthDone(string Message)                                /*{{{*/
  {
     // At this point, the gpgv method has succeeded, so there is a
     // valid signature from a key in the trusted keyring.  We
     QueueIndexes(true);
  
     // Done, move signature file into position
 -
     string VerifiedSigFile = _config->FindDir("Dir::State::lists") +
        URItoFileName(RealURI) + ".gpg";
     Rename(SigFile,VerifiedSigFile);
     chmod(VerifiedSigFile.c_str(),0644);
  }
- void pkgAcqMetaIndex::QueueIndexes(bool verify)
+                                                                       /*}}}*/
+ void pkgAcqMetaIndex::QueueIndexes(bool verify)                               /*{{{*/
  {
     for (vector <struct IndexTarget*>::const_iterator Target = IndexTargets->begin();
          Target != IndexTargets->end();
        
        // Queue Packages file (either diff or full packages files, depending
        // on the users option)
 -      if(_config->FindB("Acquire::PDiffs",true) == true) 
 +      if(_config->FindB("Acquire::PDiffs",false) == true) 
         new pkgAcqDiffIndex(Owner, (*Target)->URI, (*Target)->Description,
                             (*Target)->ShortDesc, ExpectedIndexHash);
        else 
                            (*Target)->ShortDesc, ExpectedIndexHash);
     }
  }
- bool pkgAcqMetaIndex::VerifyVendor(string Message)
+                                                                       /*}}}*/
+ bool pkgAcqMetaIndex::VerifyVendor(string Message)                    /*{{{*/
  {
  //    // Maybe this should be made available from above so we don't have
  //    // to read and parse it every time?
  
     return true;
  }
-                                                                       /*}}}*/
- // pkgAcqMetaIndex::Failed - no Release file present or no signature
- //      file present                                          /*{{{*/
+                                                                       /*}}}*/
+ // pkgAcqMetaIndex::Failed - no Release file present or no signature file present     /*{{{*/
  // ---------------------------------------------------------------------
  /* */
  void pkgAcqMetaIndex::Failed(string Message,pkgAcquire::MethodConfig *Cnf)
  {
     if (AuthPass == true)
     {
 -      // if we fail the authentication but got the file via a IMS-Hit 
 -      // this means that the file wasn't downloaded and that it might be
 -      // just stale (server problem, proxy etc). we delete what we have
 -      // queue it again without i-m-s 
 -      // alternatively we could just unlink the file and let the user try again
 -      if (IMSHit)
 +      // gpgv method failed, if we have a good signature 
 +      string LastGoodSigFile = _config->FindDir("Dir::State::lists") +
 +       "partial/" + URItoFileName(RealURI) + ".gpg.reverify";
 +      if(FileExists(LastGoodSigFile))
        {
 -       Complete = false;
 -       Local = false;
 -       AuthPass = false;
 -       unlink(DestFile.c_str());
 -
 -       DestFile = _config->FindDir("Dir::State::lists") + "partial/";
 -       DestFile += URItoFileName(RealURI);
 -       Desc.URI = RealURI;
 -       QueueURI(Desc);
 +       string VerifiedSigFile = _config->FindDir("Dir::State::lists") +
 +          URItoFileName(RealURI) + ".gpg";
 +       Rename(LastGoodSigFile,VerifiedSigFile);
 +       Status = StatTransientNetworkError;
 +       _error->Warning(_("A error occurred during the signature "
 +                         "verification. The repository is not updated "
 +                         "and the previous index files will be used."
 +                         "GPG error: %s: %s\n"),
 +                       Desc.Description.c_str(),
 +                       LookupTag(Message,"Message").c_str());
 +       RunScripts("APT::Update::Auth-Failure");
         return;
 +      } else {
 +       _error->Warning(_("GPG error: %s: %s"),
 +                       Desc.Description.c_str(),
 +                       LookupTag(Message,"Message").c_str());
        }
 -
        // gpgv method failed 
 -      _error->Warning("GPG error: %s: %s",
 -                      Desc.Description.c_str(),
 -                      LookupTag(Message,"Message").c_str());
 -
 +      ReportMirrorFailure("GPGFailure");
     }
  
     // No Release file was present, or verification failed, so fall
     // back to queueing Packages files without verification
     QueueIndexes(false);
  }
                                                                        /*}}}*/
  // AcqArchive::AcqArchive - Constructor                                       /*{{{*/
  // ---------------------------------------------------------------------
  /* This just sets up the initial fetch environment and queues the first
@@@ -1547,14 -1475,13 +1527,13 @@@ void pkgAcqArchive::Failed(string Messa
     }
  }
                                                                        /*}}}*/
- // AcqArchive::IsTrusted - Determine whether this archive comes from a
- // trusted source                                                     /*{{{*/
+ // AcqArchive::IsTrusted - Determine whether this archive comes from a trusted source /*{{{*/
  // ---------------------------------------------------------------------
  bool pkgAcqArchive::IsTrusted()
  {
     return Trusted;
  }
+                                                                       /*}}}*/
  // AcqArchive::Finished - Fetching has finished, tidy up              /*{{{*/
  // ---------------------------------------------------------------------
  /* */
@@@ -1566,7 -1493,6 +1545,6 @@@ void pkgAcqArchive::Finished(
     StoreFilename = string();
  }
                                                                        /*}}}*/
  // AcqFile::pkgAcqFile - Constructor                                  /*{{{*/
  // ---------------------------------------------------------------------
  /* The file is added to the queue */
diff --combined apt-pkg/acquire-item.h
index af0b2d888391a02933783698b49cfcdfce1b9289,36a926a0faae7e5de2bac67b6846aea6fc226928..de657ecc4c7b6c1b70caff57a016a4f95f91d178
@@@ -34,7 -34,7 +34,7 @@@
   *  \file acquire-item.h
   */
  
- /** \brief Represents the process by which a pkgAcquire object should
+ /** \brief Represents the process by which a pkgAcquire object should {{{
   *  retrieve a file or a collection of files.
   *
   *  By convention, Item subclasses should insert themselves into the
@@@ -142,7 -142,6 +142,7 @@@ class pkgAcquire::Ite
      *  download progress indicator's overall statistics.
      */
     bool Local;
 +   string UsedMirror;
  
     /** \brief The number of fetch queues into which this item has been
      *  inserted.
  
     /** \return \b true if this object is being fetched from a trusted source. */
     virtual bool IsTrusted() {return false;};
 +   
 +   // report mirror problems
 +   /** \brief Report mirror problem
 +    * 
 +    *  This allows reporting mirror failures back to a centralized
 +    *  server. The apt-report-mirror-failure script is called for this
 +    * 
 +    *  \param FailCode A short failure string that is send
 +    */
 +   void ReportMirrorFailure(string FailCode);
 +
  
     /** \brief Initialize an item.
      *
      */
     virtual ~Item();
  };
- /** \brief Information about an index patch (aka diff). */
+                                                                       /*}}}*/
+ /** \brief Information about an index patch (aka diff). */            /*{{{*/
  struct DiffInfo {
     /** The filename of the diff. */
     string file;
     /** The size of the diff. */
     unsigned long size;
  };
- /** \brief An item that is responsible for fetching an index file of
+                                                                       /*}}}*/
+ /** \brief An item that is responsible for fetching an index file of  {{{
   *  package list diffs and starting the package list's download.
   *
   *  This item downloads the Index file and parses it, then enqueues
@@@ -360,8 -348,8 +360,8 @@@ class pkgAcqDiffIndex : public pkgAcqui
     pkgAcqDiffIndex(pkgAcquire *Owner,string URI,string URIDesc,
                   string ShortDesc, HashString ExpectedHash);
  };
- /** \brief An item that is responsible for fetching all the patches
+                                                                       /*}}}*/
+ /** \brief An item that is responsible for fetching all the patches   {{{
   *  that need to be applied to a given package index file.
   *
   *  After downloading and applying a single patch, this item will
@@@ -489,8 -477,8 +489,8 @@@ class pkgAcqIndexDiffs : public pkgAcqu
                    string ShortDesc, HashString ExpectedHash,
                    vector<DiffInfo> diffs=vector<DiffInfo>());
  };
- /** \brief An acquire item that is responsible for fetching an index
+                                                                       /*}}}*/
+ /** \brief An acquire item that is responsible for fetching an index  {{{
   *  file (e.g., Packages or Sources).
   *
   *  \sa pkgAcqDiffIndex, pkgAcqIndexDiffs, pkgAcqIndexTrans
@@@ -555,11 -543,10 +555,11 @@@ class pkgAcqIndex : public pkgAcquire::
      *  (".bz2" is used if bzip2 is installed, ".gz" otherwise).
      */
     pkgAcqIndex(pkgAcquire *Owner,string URI,string URIDesc,
 -             string ShortDesc, HashString ExpectedHash, string compressExt="");
 +             string ShortDesc, HashString ExpectedHash, 
 +             string compressExt="");
  };
- /** \brief An acquire item that is responsible for fetching a
+                                                                       /*}}}*/
+ /** \brief An acquire item that is responsible for fetching a         {{{
   *  translated index file.
   *
   *  The only difference from pkgAcqIndex is that transient failures
@@@ -592,8 -579,8 +592,8 @@@ class pkgAcqIndexTrans : public pkgAcqI
     pkgAcqIndexTrans(pkgAcquire *Owner,string URI,string URIDesc,
                    string ShortDesc);
  };
- /** \brief Information about an index file. */
+                                                                       /*}}}*/
+ /** \brief Information about an index file. */                                /*{{{*/
  struct IndexTarget
  {
     /** \brief A URI from which the index file can be downloaded. */
      */
     string MetaKey;
  };
- /** \brief An acquire item that downloads the detached signature
+                                                                       /*}}}*/
+ /** \brief An acquire item that downloads the detached signature      {{{
   *  of a meta-index (Release) file, then queues up the release
   *  file itself.
   *
@@@ -625,6 -612,7 +625,6 @@@ class pkgAcqMetaSig : public pkgAcquire
     /** \brief The last good signature file */
     string LastGoodSig;
  
 -
     /** \brief The fetch request that is currently being processed. */
     pkgAcquire::ItemDesc Desc;
  
                 const vector<struct IndexTarget*>* IndexTargets,
                 indexRecords* MetaIndexParser);
  };
- /** \brief An item that is responsible for downloading the meta-index
+                                                                       /*}}}*/
+ /** \brief An item that is responsible for downloading the meta-index {{{
   *  file (i.e., Release) itself and verifying its signature.
   *
   *  Once the download and verification are complete, the downloads of
@@@ -768,8 -756,8 +768,8 @@@ class pkgAcqMetaIndex : public pkgAcqui
                   const vector<struct IndexTarget*>* IndexTargets,
                   indexRecords* MetaIndexParser);
  };
- /** \brief An item that is responsible for fetching a package file.
+                                                                       /*}}}*/
+ /** \brief An item that is responsible for fetching a package file.   {{{
   *
   *  If the package file already exists in the cache, nothing will be
   *  done.
@@@ -852,8 -840,8 +852,8 @@@ class pkgAcqArchive : public pkgAcquire
                 pkgRecords *Recs,pkgCache::VerIterator const &Version,
                 string &StoreFilename);
  };
- /** \brief Retrieve an arbitrary file to the current directory.
+                                                                       /*}}}*/
+ /** \brief Retrieve an arbitrary file to the current directory.               {{{
   *
   *  The file is retrieved even if it is accessed via a URL type that
   *  normally is a NOP, such as "file".  If the download fails, the
@@@ -914,7 -902,7 +914,7 @@@ class pkgAcqFile : public pkgAcquire::I
              string Desc, string ShortDesc,
              const string &DestDir="", const string &DestFilename="");
  };
+                                                                       /*}}}*/
  /** @} */
  
  #endif
index 150fbb77b8a5663f6b4da0e658c4300678d7c322,fe066741c4456fc7dd0f35bdd59705d125919d80..3008c8d1a2a18a776f7d9561ca5c02b4ea902873
@@@ -96,11 -96,12 +96,11 @@@ void pkgAcqMethod::Fail(string Err,boo
     }
     
     char S[1024];
 +   char *End = S;
     if (Queue != 0)
     {
 -      snprintf(S,sizeof(S)-50,"400 URI Failure\nURI: %s\n"
 -             "Message: %s %s\n",Queue->Uri.c_str(),Err.c_str(),
 -             FailExtra.c_str());
 -
 +      End += snprintf(S,sizeof(S)-50,"400 URI Failure\nURI: %s\n"
 +                    "Message: %s %s\n",Queue->Uri.c_str(), Err.c_str(), IP.c_str());
        // Dequeue
        FetchItem *Tmp = Queue;
        Queue = Queue->Next;
         QueueBack = Queue;
     }
     else
 -      snprintf(S,sizeof(S)-50,"400 URI Failure\nURI: <UNKNOWN>\n"
 -             "Message: %s %s\n",Err.c_str(),
 -             FailExtra.c_str());
 -      
 +   {
 +      End += snprintf(S,sizeof(S)-50,"400 URI Failure\nURI: <UNKNOWN>\n"
 +                    "Message: %s\n",Err.c_str());
 +   }
 +   if(FailReason.empty() == false)
 +      End += snprintf(End,sizeof(S)-50 - (End - S),"FailReason: %s\n",FailReason.c_str());
 +   if (UsedMirror.empty() == false)
 +      End += snprintf(End,sizeof(S)-50 - (End - S),"UsedMirror: %s\n",UsedMirror.c_str());
     // Set the transient flag 
     if (Transient == true)
        strcat(S,"Transient-Failure: true\n\n");
@@@ -187,8 -184,6 +187,8 @@@ void pkgAcqMethod::URIDone(FetchResult 
        End += snprintf(End,sizeof(S)-50 - (End - S),"SHA1-Hash: %s\n",Res.SHA1Sum.c_str());
     if (Res.SHA256Sum.empty() == false)
        End += snprintf(End,sizeof(S)-50 - (End - S),"SHA256-Hash: %s\n",Res.SHA256Sum.c_str());
 +   if (UsedMirror.empty() == false)
 +      End += snprintf(End,sizeof(S)-50 - (End - S),"UsedMirror: %s\n",UsedMirror.c_str());
     if (Res.GPGVOutput.size() > 0)
        End += snprintf(End,sizeof(S)-50 - (End - S),"GPGVOutput:\n");     
     for (vector<string>::iterator I = Res.GPGVOutput.begin();
@@@ -451,7 -446,6 +451,6 @@@ void pkgAcqMethod::Status(const char *F
        exit(100);
  }
                                                                        /*}}}*/
  // AcqMethod::Redirect - Send a redirect message                       /*{{{*/
  // ---------------------------------------------------------------------
  /* This method sends the redirect message and also manipulates the queue
@@@ -483,7 -477,6 +482,6 @@@ void pkgAcqMethod::Redirect(const strin
        QueueBack = I->Next;
  }
                                                                          /*}}}*/
  // AcqMethod::FetchResult::FetchResult - Constructor                  /*{{{*/
  // ---------------------------------------------------------------------
  /* */
diff --combined apt-pkg/algorithms.cc
index 8bd98a6204341487e4a0c3689155e5c3e3fdc74c,34da745dea5ac67a2b25c1e83d7478e96f0a7a27..a3963d546d17dd7baa41709819e6ef227ccb9872
@@@ -442,7 -442,6 +442,6 @@@ bool pkgMinimizeUpgrade(pkgDepCache &Ca
     return true;
  }
                                                                        /*}}}*/
  // ProblemResolver::pkgProblemResolver - Constructor                  /*{{{*/
  // ---------------------------------------------------------------------
  /* */
@@@ -489,6 -488,36 +488,36 @@@ void pkgProblemResolver::MakeScores(
     unsigned long Size = Cache.Head().PackageCount;
     memset(Scores,0,sizeof(*Scores)*Size);
  
+    // Important Required Standard Optional Extra
+    signed short PrioMap[] = {
+       0,
+       _config->FindI("pkgProblemResolver::Scores::Important",3),
+       _config->FindI("pkgProblemResolver::Scores::Required",2),
+       _config->FindI("pkgProblemResolver::Scores::Standard",1),
+       _config->FindI("pkgProblemResolver::Scores::Optional",-1),
+       _config->FindI("pkgProblemResolver::Scores::Extra",-2)
+    };
+    signed short PrioEssentials = _config->FindI("pkgProblemResolver::Scores::Essentials",100);
+    signed short PrioInstalledAndNotObsolete = _config->FindI("pkgProblemResolver::Scores::NotObsolete",1);
+    signed short PrioDepends = _config->FindI("pkgProblemResolver::Scores::Depends",1);
+    signed short PrioRecommends = _config->FindI("pkgProblemResolver::Scores::Recommends",1);
+    signed short AddProtected = _config->FindI("pkgProblemResolver::Scores::AddProtected",10000);
+    signed short AddEssential = _config->FindI("pkgProblemResolver::Scores::AddEssential",5000);
+    if (_config->FindB("Debug::pkgProblemResolver::ShowScores",false) == true)
+       clog << "Settings used to calculate pkgProblemResolver::Scores::" << endl
+          << "  Important => " << PrioMap[1] << endl
+          << "  Required => " << PrioMap[2] << endl
+          << "  Standard => " << PrioMap[3] << endl
+          << "  Optional => " << PrioMap[4] << endl
+          << "  Extra => " << PrioMap[5] << endl
+          << "  Essentials => " << PrioEssentials << endl
+          << "  InstalledAndNotObsolete => " << PrioInstalledAndNotObsolete << endl
+          << "  Depends => " << PrioDepends << endl
+          << "  Recommends => " << PrioRecommends << endl
+          << "  AddProtected => " << AddProtected << endl
+          << "  AddEssential => " << AddEssential << endl;
     // Generate the base scores for a package based on its properties
     for (pkgCache::PkgIterator I = Cache.PkgBegin(); I.end() == false; I++)
     {
         to allow an obsolete essential packages to be removed by
         a conflicts on a powerfull normal package (ie libc6) */
        if ((I->Flags & pkgCache::Flag::Essential) == pkgCache::Flag::Essential)
-        Score += 100;
+        Score += PrioEssentials;
  
        // We transform the priority
-       // Important Required Standard Optional Extra
-       signed short PrioMap[] = {0,3,2,1,-1,-2};
        if (Cache[I].InstVerIter(Cache)->Priority <= 5)
         Score += PrioMap[Cache[I].InstVerIter(Cache)->Priority];
        
         if those are not obsolete
        */
        if (I->CurrentVer != 0 && Cache[I].CandidateVer != 0 && Cache[I].CandidateVerIter(Cache).Downloadable())
-        Score += 1;
+        Score += PrioInstalledAndNotObsolete;
     }
  
     // Now that we have the base scores we go and propogate dependencies
        
        for (pkgCache::DepIterator D = Cache[I].InstVerIter(Cache).DependsList(); D.end() == false; D++)
        {
-        if (D->Type == pkgCache::Dep::Depends || D->Type == pkgCache::Dep::PreDepends)
-           Scores[D.TargetPkg()->ID]++;
+        if (D->Type == pkgCache::Dep::Depends || 
+            D->Type == pkgCache::Dep::PreDepends)
+           Scores[D.TargetPkg()->ID] += PrioDepends;
+        else if (D->Type == pkgCache::Dep::Recommends)
+           Scores[D.TargetPkg()->ID] += PrioRecommends;
        }
     }   
     
        {
         // Only do it for the install version
         if ((pkgCache::Version *)D.ParentVer() != Cache[D.ParentPkg()].InstallVer ||
-            (D->Type != pkgCache::Dep::Depends && D->Type != pkgCache::Dep::PreDepends))
+            (D->Type != pkgCache::Dep::Depends && 
+             D->Type != pkgCache::Dep::PreDepends &&
+             D->Type != pkgCache::Dep::Recommends))
            continue;    
         
         Scores[I->ID] += abs(OldScores[D.ParentPkg()->ID]);
     for (pkgCache::PkgIterator I = Cache.PkgBegin(); I.end() == false; I++)
     {
        if ((Flags[I->ID] & Protected) != 0)
-        Scores[I->ID] += 10000;
+        Scores[I->ID] += AddProtected;
        if ((I->Flags & pkgCache::Flag::Essential) == pkgCache::Flag::Essential)
-        Scores[I->ID] += 5000;
-    }   
+        Scores[I->ID] += AddEssential;
+    }
  }
                                                                        /*}}}*/
  // ProblemResolver::DoUpgrade - Attempt to upgrade this package               /*{{{*/
@@@ -751,19 -783,21 +783,21 @@@ bool pkgProblemResolver::Resolve(bool B
        *PEnd++ = I;
     This = this;
     qsort(PList,PEnd - PList,sizeof(*PList),&ScoreSort);
-    
- /* for (pkgCache::Package **K = PList; K != PEnd; K++)
-       if (Scores[(*K)->ID] != 0)
-       {
-        pkgCache::PkgIterator Pkg(Cache,*K);
-        clog << Scores[(*K)->ID] << ' ' << Pkg.Name() <<
-           ' ' << (pkgCache::Version *)Pkg.CurrentVer() << ' ' << 
-           Cache[Pkg].InstallVer << ' ' << Cache[Pkg].CandidateVer << endl;
-       } */
+    if (_config->FindB("Debug::pkgProblemResolver::ShowScores",false) == true)
+    {
+       clog << "Show Scores" << endl;
+       for (pkgCache::Package **K = PList; K != PEnd; K++)
+          if (Scores[(*K)->ID] != 0)
+          {
+            pkgCache::PkgIterator Pkg(Cache,*K);
+            clog << Scores[(*K)->ID] << ' ' << Pkg << std::endl;
+          }
+    }
  
     if (Debug == true)
        clog << "Starting 2" << endl;
-    
     /* Now consider all broken packages. For each broken package we either
        remove the package or fix it's problem. We do this once, it should
        not be possible for a loop to form (that is a < b < c and fixing b by
            }
            
            if (Debug == true)
-              clog << "Package " << I.Name() << " has broken dep on " << Start.TargetPkg().Name() << endl;
+              clog << "Package " << I.Name() << " has broken " << Start.DepType() << " on " << Start.TargetPkg().Name() << endl;
  
            /* Look across the version list. If there are no possible
               targets then we keep the package and bail. This is necessary
                           if (Debug == true)
                              clog << "  Removing " << I.Name() << " rather than change " << Start.TargetPkg().Name() << endl;
                           Cache.MarkDelete(I);
-                          if (Counter > 1)
-                          {
-                             if (Scores[Pkg->ID] > Scores[I->ID])
-                                Scores[I->ID] = Scores[Pkg->ID];
-                          }                       
-                       }                       
+                          if (Counter > 1 && Scores[Pkg->ID] > Scores[I->ID])
+                             Scores[I->ID] = Scores[Pkg->ID];
+                       }
                     }
                  }
                                  
        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 
 +   // set the auto-flags (mvo: I'm not sure if we _really_ need this)
     pkgCache::PkgIterator I = Cache.PkgBegin();
     for (;I.end() != true; I++) {
        if (Cache[I].NewInstall() && !(Flags[I->ID] & PreInstalled)) {
@@@ -1136,9 -1168,6 +1167,6 @@@ bool pkgProblemResolver::ResolveByKeep(
  
     unsigned long Size = Cache.Head().PackageCount;
  
-    if (Debug == true)      
-       clog << "Entering ResolveByKeep" << endl;
-    
     MakeScores();
     
     /* We have to order the packages so that the broken fixing pass 
        *PEnd++ = I;
     This = this;
     qsort(PList,PEnd - PList,sizeof(*PList),&ScoreSort);
-    
+    if (_config->FindB("Debug::pkgProblemResolver::ShowScores",false) == true)
+    {
+       clog << "Show Scores" << endl;
+       for (pkgCache::Package **K = PList; K != PEnd; K++)
+          if (Scores[(*K)->ID] != 0)
+          {
+            pkgCache::PkgIterator Pkg(Cache,*K);
+            clog << Scores[(*K)->ID] << ' ' << Pkg << std::endl;
+          }
+    }
+    if (Debug == true)
+       clog << "Entering ResolveByKeep" << endl;
     // Consider each broken package 
     pkgCache::Package **LastStop = 0;
     for (pkgCache::Package **K = PList; K != PEnd; K++)
         while (true)
         {
            if (Debug == true)
-              clog << "Package " << I.Name() << " has broken dep on " << Start.TargetPkg().Name() << endl;
-           
+              clog << "Package " << I.Name() << " has broken " << Start.DepType() << " on " << Start.TargetPkg().Name() << endl;
            // Look at all the possible provides on this package
            SPtrArray<pkgCache::Version *> VList = Start.AllTargets();
            for (pkgCache::Version **V = VList; *V != 0; V++)
               if ((Flags[I->ID] & Protected) == 0)
               {
                  if (Debug == true)
-                    clog << "  Keeping Package " << Pkg.Name() << " due to dep" << endl;
+                    clog << "  Keeping Package " << Pkg.Name() << " due to " << Start.DepType() << endl;
                  Cache.MarkKeep(Pkg, false, false);
               }
               
@@@ -1271,7 -1314,6 +1313,6 @@@ void pkgProblemResolver::InstallProtect
     }   
  }
                                                                        /*}}}*/
  // PrioSortList - Sort a list of versions by priority                 /*{{{*/
  // ---------------------------------------------------------------------
  /* This is ment to be used in conjunction with AllTargets to get a list 
@@@ -1302,7 -1344,6 +1343,6 @@@ void pkgPrioSortList(pkgCache &Cache,pk
     qsort(List,Count,sizeof(*List),PrioComp);
  }
                                                                        /*}}}*/
  // CacheFile::ListUpdate - update the cache files                     /*{{{*/
  // ---------------------------------------------------------------------
  /* This is a simple wrapper to update the cache. it will fetch stuff
diff --combined apt-pkg/deb/dpkgpm.cc
index b41b38bd54ed7b9fca9b5df222347c5a89f1e8d5,f787f365e6ddb97a24fe99f1d8b83ae8d6f8dda6..4403eaefec0493b106f6b0a08cacc2a35fcc3e45
@@@ -12,7 -12,6 +12,7 @@@
  #include <apt-pkg/error.h>
  #include <apt-pkg/configuration.h>
  #include <apt-pkg/depcache.h>
 +#include <apt-pkg/pkgrecords.h>
  #include <apt-pkg/strutl.h>
  #include <apti18n.h>
  #include <apt-pkg/fileutl.h>
@@@ -25,7 -24,6 +25,7 @@@
  #include <sys/wait.h>
  #include <signal.h>
  #include <errno.h>
 +#include <string.h>
  #include <stdio.h>
  #include <string.h>
  #include <algorithm>
@@@ -76,12 -74,37 +76,37 @@@ namespac
    };
  }
  
+ /* helper function to ionice the given PID 
+  there is no C header for ionice yet - just the syscall interface
+  so we use the binary from util-linux
+ */
+ static bool
+ ionice(int PID)
+ {
+    if (!FileExists("/usr/bin/ionice"))
+       return false;
+    pid_t Process = ExecFork();      
+    if (Process == 0)
+    {
+       char buf[32];
+       snprintf(buf, sizeof(buf), "-p%d", PID);
+       const char *Args[4];
+       Args[0] = "/usr/bin/ionice";
+       Args[1] = "-c3";
+       Args[2] = buf;
+       Args[3] = 0;
+       execv(Args[0], (char **)Args);
+    }
+    return ExecWait(Process, "ionice");
+ }
  // DPkgPM::pkgDPkgPM - Constructor                                    /*{{{*/
  // ---------------------------------------------------------------------
  /* */
  pkgDPkgPM::pkgDPkgPM(pkgDepCache *Cache) 
     : pkgPackageManager(Cache), dpkgbuf_pos(0),
 -     term_out(NULL), PackagesDone(0), PackagesTotal(0)
 +     term_out(NULL), PackagesDone(0), PackagesTotal(0), pkgFailures(0)
  {
  }
                                                                        /*}}}*/
@@@ -308,6 -331,7 +333,6 @@@ bool pkgDPkgPM::RunScriptsWithPkgs(cons
  
     return true;
  }
 -
                                                                        /*}}}*/
  // DPkgPM::DoStdin - Read stdin and pass to slave pty                 /*{{{*/
  // ---------------------------------------------------------------------
@@@ -375,7 -399,7 +400,7 @@@ void pkgDPkgPM::ProcessDpkgStatusLine(i
        'processing: trigproc: trigger'
            
     */
 -   char* list[5];
 +   char* list[6];
     //        dpkg sends multiline error messages sometimes (see
     //        #374195 for a example. we should support this by
     //        either patching dpkg to not send multiline over the
  
     if(strncmp(action,"error",strlen("error")) == 0)
     {
 +      // urgs, sometime has ":" in its error string so that we
 +      // end up with the error message split between list[3]
 +      // and list[4], e.g. the message: 
 +      // "failed in buffer_write(fd) (10, ret=-1): backend dpkg-deb ..."
 +      // concat them again
 +      if( list[4] != NULL )
 +       list[3][strlen(list[3])] = ':';
 +
        status << "pmerror:" << list[1]
             << ":"  << (PackagesDone/float(PackagesTotal)*100.0) 
             << ":" << list[3]
         write(OutStatusFd, status.str().c_str(), status.str().size());
        if (_config->FindB("Debug::pkgDPkgProgressReporting",false) == true)
         std::clog << "send: '" << status.str() << "'" << endl;
 +      pkgFailures++;
 +      WriteApportReport(list[1], list[3]);
        return;
     }
     if(strncmp(action,"conffile",strlen("conffile")) == 0)
@@@ -626,20 -640,12 +651,12 @@@ bool pkgDPkgPM::Go(int OutStatusFd
        { 
         {"unpacked",N_("Preparing to configure %s") },
         {"half-configured", N_("Configuring %s") },
- #if 0
-        {"triggers-awaited", N_("Processing triggers for %s") },
-        {"triggers-pending", N_("Processing triggers for %s") },
- #endif
         { "installed", N_("Installed %s")},
         {NULL, NULL}
        },
        // Remove operation
        { 
         {"half-configured", N_("Preparing for removal of %s")},
- #if 0
-        {"triggers-awaited", N_("Preparing for removal of %s")},
-        {"triggers-pending", N_("Preparing for removal of %s")},
- #endif
         {"half-installed", N_("Removing %s")},
         {"config-files",  N_("Removed %s")},
         {NULL, NULL}
     for (vector<Item>::iterator I = List.begin(); I != List.end();)
     {
        vector<Item>::iterator J = I;
-       for (; J != List.end() && J->Op == I->Op; J++);
+       for (; J != List.end() && J->Op == I->Op; J++)
+        /* nothing */;
  
        // Generate the argument list
        const char *Args[MaxArgs + 50];
+       
+       // Now check if we are within the MaxArgs limit
+       //
+       // this code below is problematic, because it may happen that
+       // the argument list is split in a way that A depends on B
+       // and they are in the same "--configure A B" run
+       // - with the split they may now be configured in different
+       //   runs 
        if (J - I > (signed)MaxArgs)
         J = I + MaxArgs;
        
         // Fork dpkg
        pid_t Child;
        _config->Set("APT::Keep-Fds::",fd[1]);
+       // send status information that we are about to fork dpkg
+       if(OutStatusFd > 0) {
+        ostringstream status;
+        status << "pmstatus:dpkg-exec:" 
+               << (PackagesDone/float(PackagesTotal)*100.0) 
+               << ":" << _("Running dpkg")
+               << endl;
+        write(OutStatusFd, status.str().c_str(), status.str().size());
+       }
        Child = ExecFork();
              
        // This is the child
         }
         close(fd[0]); // close the read end of the pipe
  
+        if (_config->FindDir("DPkg::Chroot-Directory","/") != "/") 
+        {
+           std::cerr << "Chrooting into " 
+                     << _config->FindDir("DPkg::Chroot-Directory") 
+                     << std::endl;
+           if (chroot(_config->FindDir("DPkg::Chroot-Directory","/").c_str()) != 0)
+              _exit(100);
+        }
         if (chdir(_config->FindDir("DPkg::Run-Directory","/").c_str()) != 0)
            _exit(100);
         
               _exit(100);
         }
  
         /* No Job Control Stop Env is a magic dpkg var that prevents it
            from using sigstop */
         putenv((char *)"DPKG_NO_TSTP=yes");
         _exit(100);
        }      
  
+       // apply ionice
+       if (_config->FindB("DPkg::UseIoNice", false) == true)
+        ionice(Child);
        // clear the Keep-Fd again
        _config->Clear("APT::Keep-Fds",fd[1]);
  
            signal(SIGHUP,old_SIGHUP);
            return _error->Errno("waitpid","Couldn't wait for subprocess");
         }
 -
         // wait for input or output here
         FD_ZERO(&rfds);
         if (!stdin_is_dev_null)
@@@ -990,162 -1027,3 +1037,162 @@@ void pkgDPkgPM::Reset(
     List.erase(List.begin(),List.end());
  }
                                                                        /*}}}*/
 +// pkgDpkgPM::WriteApportReport - write out error report pkg failure  /*{{{*/
 +// ---------------------------------------------------------------------
 +/* */
 +void pkgDPkgPM::WriteApportReport(const char *pkgpath, const char *errormsg) 
 +{
 +   string pkgname, reportfile, srcpkgname, pkgver, arch;
 +   string::size_type pos;
 +   FILE *report;
 +
 +   if (_config->FindB("Dpkg::ApportFailureReport",true) == false)
 +   {
 +      std::clog << "configured to not write apport reports" << std::endl;
 +      return;
 +   }
 +
 +   // only report the first errors
 +   if(pkgFailures > _config->FindI("APT::Apport::MaxReports", 3))
 +   {
 +      std::clog << _("No apport report written because MaxReports is reached already") << std::endl;
 +      return;
 +   }
 +
 +   // check if its not a follow up error 
 +   const char *needle = dgettext("dpkg", "dependency problems - leaving unconfigured");
 +   if(strstr(errormsg, needle) != NULL) {
 +      std::clog << _("No apport report written because the error message indicates its a followup error from a previous failure.") << std::endl;
 +      return;
 +   }
 +
 +   // do not report disk-full failures 
 +   if(strstr(errormsg, strerror(ENOSPC)) != NULL) {
 +      std::clog << _("No apport report written because the error message indicates a disk full error") << std::endl;
 +      return;
 +   }
 +
 +   // do not report out-of-memory failures 
 +   if(strstr(errormsg, strerror(ENOMEM)) != NULL) {
 +      std::clog << _("No apport report written because the error message indicates a out of memory error") << std::endl;
 +      return;
 +   }
 +
 +   // get the pkgname and reportfile
 +   pkgname = flNotDir(pkgpath);
 +   pos = pkgname.find('_');
 +   if(pos != string::npos)
 +      pkgname = pkgname.substr(0, pos);
 +
 +   // find the package versin and source package name
 +   pkgCache::PkgIterator Pkg = Cache.FindPkg(pkgname);
 +   if (Pkg.end() == true)
 +      return;
 +   pkgCache::VerIterator Ver = Cache.GetCandidateVer(Pkg);
 +   if (Ver.end() == true)
 +      return;
 +   pkgver = Ver.VerStr() == NULL ? "unknown" : Ver.VerStr();
 +   pkgRecords Recs(Cache);
 +   pkgRecords::Parser &Parse = Recs.Lookup(Ver.FileList());
 +   srcpkgname = Parse.SourcePkg();
 +   if(srcpkgname.empty())
 +      srcpkgname = pkgname;
 +
 +   // if the file exists already, we check:
 +   // - if it was reported already (touched by apport). 
 +   //   If not, we do nothing, otherwise
 +   //    we overwrite it. This is the same behaviour as apport
 +   // - if we have a report with the same pkgversion already
 +   //   then we skip it
 +   reportfile = flCombine("/var/crash",pkgname+".0.crash");
 +   if(FileExists(reportfile))
 +   {
 +      struct stat buf;
 +      char strbuf[255];
 +
 +      // check atime/mtime
 +      stat(reportfile.c_str(), &buf);
 +      if(buf.st_mtime > buf.st_atime)
 +       return;
 +
 +      // check if the existing report is the same version
 +      report = fopen(reportfile.c_str(),"r");
 +      while(fgets(strbuf, sizeof(strbuf), report) != NULL)
 +      {
 +       if(strstr(strbuf,"Package:") == strbuf)
 +       {
 +          char pkgname[255], version[255];
 +          if(sscanf(strbuf, "Package: %s %s", pkgname, version) == 2)
 +             if(strcmp(pkgver.c_str(), version) == 0)
 +             {
 +                fclose(report);
 +                return;
 +             }
 +       }
 +      }
 +      fclose(report);
 +   }
 +
 +   // now write the report
 +   arch = _config->Find("APT::Architecture");
 +   report = fopen(reportfile.c_str(),"w");
 +   if(report == NULL)
 +      return;
 +   if(_config->FindB("DPkgPM::InitialReportOnly",false) == true)
 +      chmod(reportfile.c_str(), 0);
 +   else
 +      chmod(reportfile.c_str(), 0600);
 +   fprintf(report, "ProblemType: Package\n");
 +   fprintf(report, "Architecture: %s\n", arch.c_str());
 +   time_t now = time(NULL);
 +   fprintf(report, "Date: %s" , ctime(&now));
 +   fprintf(report, "Package: %s %s\n", pkgname.c_str(), pkgver.c_str());
 +   fprintf(report, "SourcePackage: %s\n", srcpkgname.c_str());
 +   fprintf(report, "ErrorMessage:\n %s\n", errormsg);
 +
 +   // ensure that the log is flushed
 +   if(term_out)
 +      fflush(term_out);
 +
 +   // attach terminal log it if we have it
 +   string logfile_name = _config->FindFile("Dir::Log::Terminal");
 +   if (!logfile_name.empty())
 +   {
 +      FILE *log = NULL;
 +      char buf[1024];
 +
 +      fprintf(report, "DpkgTerminalLog:\n");
 +      log = fopen(logfile_name.c_str(),"r");
 +      if(log != NULL)
 +      {
 +       while( fgets(buf, sizeof(buf), log) != NULL)
 +          fprintf(report, " %s", buf);
 +       fclose(log);
 +      }
 +   }
 +
 +   // log the ordering 
 +   const char *ops_str[] = {"Install", "Configure","Remove","Purge"};
 +   fprintf(report, "AptOrdering:\n");
 +   for (vector<Item>::iterator I = List.begin(); I != List.end(); I++)
 +      fprintf(report, " %s: %s\n", (*I).Pkg.Name(), ops_str[(*I).Op]);
 +
 +   // attach dmesg log (to learn about segfaults)
 +   if (FileExists("/bin/dmesg"))
 +   {
 +      FILE *log = NULL;
 +      char buf[1024];
 +
 +      fprintf(report, "Dmesg:\n");
 +      log = popen("/bin/dmesg","r");
 +      if(log != NULL)
 +      {
 +       while( fgets(buf, sizeof(buf), log) != NULL)
 +          fprintf(report, " %s", buf);
 +       fclose(log);
 +      }
 +   }
 +   fclose(report);
 +
 +}
 +                                                                      /*}}}*/
diff --combined apt-pkg/deb/dpkgpm.h
index 62d3d893d8e0660e343412b081c6b11c5b5a2e3e,ebc7e32bf9fc3c3ddf204b66708363fc152a308b..1675e9e7406928a80c6c0b8003d98cbe06c746d4
@@@ -31,7 -31,6 +31,7 @@@ class pkgDPkgPM : public pkgPackageMana
     FILE *term_out;
     
     protected:
 +   int pkgFailures;
  
     // progress reporting
     struct DpkgState 
     // the int is the state that is already done (e.g. a package that is
     // going to be install is already in state "half-installed")
     map<string,unsigned int> PackageOpsDone;
- #if 1 // FIXME: BINARY COMPATIBILITY ONLY, remove on next ABI break
-    map<string,string> PackageProcessingOps;
- #endif
 +
     // progress reporting
     unsigned int PackagesDone;
     unsigned int PackagesTotal;
@@@ -74,9 -67,6 +69,9 @@@
     bool RunScriptsWithPkgs(const char *Cnf);
     bool SendV2Pkgs(FILE *F);
  
 +   // apport integration
 +   void WriteApportReport(const char *pkgpath, const char *errormsg);
 +
     // dpkg log
     bool OpenLog();
     bool CloseLog();
diff --combined apt-pkg/init.cc
index c0384cd45ca82707fe8f4efa702c0938470ff38a,63caade36a599b818b93ce0e466aa72aef12569b..4e7c2cf8743ede405d3cf1b593bd3902b93e07f8
@@@ -51,7 -51,6 +51,7 @@@ bool pkgInitConfig(Configuration &Cnf
         
     Cnf.Set("Dir::State::lists","lists/");
     Cnf.Set("Dir::State::cdroms","cdroms.list");
 +   Cnf.Set("Dir::State::mirrors","mirrors/");
     
     // Cache
     Cnf.Set("Dir::Cache","var/cache/apt/");
     Cnf.Set("Dir::Etc::main","apt.conf");
     Cnf.Set("Dir::Etc::parts","apt.conf.d");
     Cnf.Set("Dir::Etc::preferences","preferences");
+    Cnf.Set("Dir::Etc::preferencesparts","preferences.d");
     Cnf.Set("Dir::Bin::methods","/usr/lib/apt/methods");
  
     // State   
     Cnf.Set("Dir::Log","var/log/apt");
     Cnf.Set("Dir::Log::Terminal","term.log");
 -
 +   
     // Translation
     Cnf.Set("APT::Acquire::Translation", "environment");
  
     
     // Read an alternate config file
     const char *Cfg = getenv("APT_CONFIG");
-    if (Cfg != 0 && FileExists(Cfg) == true)
-       Res &= ReadConfigFile(Cnf,Cfg);
-    
+    if (Cfg != 0)
+    {
+       if (FileExists(Cfg) == true)
+        Res &= ReadConfigFile(Cnf,Cfg);
+       else
+        _error->WarningE("FileExists",_("Unable to read %s"),Cfg);
+    }
     // Read the configuration parts dir
     string Parts = Cnf.FindDir("Dir::Etc::parts");
     if (FileExists(Parts) == true)
        Res &= ReadConfigDir(Cnf,Parts);
-       
+    else
+       _error->WarningE("FileExists",_("Unable to read %s"),Parts.c_str());
     // Read the main config file
     string FName = Cnf.FindFile("Dir::Etc::main");
     if (FileExists(FName) == true)
        Res &= ReadConfigFile(Cnf,FName);
-    
     if (Res == false)
        return false;
     
diff --combined apt-pkg/tagfile.cc
index 0ae6950f3e2dd350a89bbae1432e273f2b71f84b,7c5d15a58b0df992ab95e659d1ba555f9c838649..1c41f1265c206c0a9c77605ead7f94bfb3325298
@@@ -81,7 -81,7 +81,7 @@@ bool pkgTagFile::Resize(
     End = Start + EndSize;
     return true;
  }
+                                                                       /*}}}*/
  // TagFile::Step - Advance to the next section                                /*{{{*/
  // ---------------------------------------------------------------------
  /* If the Section Scanner fails we refill the buffer and try again. 
@@@ -212,10 -212,12 +212,12 @@@ bool pkgTagSection::Scan(const char *St
  
     if (Stop == 0)
        return false;
-    
     TagCount = 0;
     while (TagCount+1 < sizeof(Indexes)/sizeof(Indexes[0]) && Stop < End)
     {
+        TrimRecord(true,End);
        // Start a new index and add it to the hash
        if (isspace(Stop[0]) == 0)
        {
        
        if (Stop == 0)
         return false;
-       
        for (; Stop+1 < End && Stop[1] == '\r'; Stop++);
  
        // Double newline marks the end of the record
        if (Stop+1 < End && Stop[1] == '\n')
        {
         Indexes[TagCount] = Stop - Section;
-        for (; Stop < End && (Stop[0] == '\n' || Stop[0] == '\r'); Stop++);
+        TrimRecord(false,End);
         return true;
        }
        
     return false;
  }
                                                                        /*}}}*/
+ // TagSection::TrimRecord - Trim off any garbage before/after a record        /*{{{*/
+ // ---------------------------------------------------------------------
+ /* There should be exactly 2 newline at the end of the record, no more. */
+ void pkgTagSection::TrimRecord(bool BeforeRecord, const char*& End)
+ {
+    if (BeforeRecord == true)
+       return;
+    for (; Stop < End && (Stop[0] == '\n' || Stop[0] == '\r'); Stop++);
+ }
+                                                                       /*}}}*/
  // TagSection::Trim - Trim off any trailing garbage                   /*{{{*/
  // ---------------------------------------------------------------------
  /* There should be exactly 1 newline at the end of the buffer, no more. */
@@@ -390,7 -402,6 +402,6 @@@ bool pkgTagSection::FindFlag(const cha
     return true;
  }
                                                                        /*}}}*/
  // TFRewrite - Rewrite a control record                                       /*{{{*/
  // ---------------------------------------------------------------------
  /* This writes the control record to stdout rewriting it as necessary. The
@@@ -407,7 -418,6 +418,7 @@@ static const char *iTFRewritePackageOrd
                            "Section",
                            "Installed-Size",
                            "Maintainer",
 +                          "Original-Maintainer",
                            "Architecture",
                            "Source",
                            "Version",
@@@ -437,7 -447,6 +448,7 @@@ static const char *iTFRewriteSourceOrde
                                        "Priority",
                                        "Section",
                                        "Maintainer",
 +                                    "Original-Maintainer",
                                        "Build-Depends",
                                        "Build-Depends-Indep",
                                        "Build-Conflicts",
diff --combined cmdline/apt-cache.cc
index 425df6994938890926ff8d42337a4eaa2e49ed0b,0e950310be80214cc0b5f40392e2884604b4d149..fcfc67ea1569f4e239d856594d3c3c264002c196
@@@ -399,7 -399,7 +399,7 @@@ bool DumpAvail(CommandLine &Cmd
     pkgCache &Cache = *GCache;
  
     pkgPolicy Plcy(&Cache);
-    if (ReadPinFile(Plcy) == false)
+    if (ReadPinFile(Plcy) == false || ReadPinDir(Plcy) == false)
        return false;
     
     unsigned long Count = Cache.HeaderP->PackageCount+1;
@@@ -626,7 -626,7 +626,7 @@@ bool Depends(CommandLine &CmdL
     
     return true;
  }
+                                                                       /*}}}*/
  // RDepends - Print out a reverse dependency tree - mbc                       /*{{{*/
  // ---------------------------------------------------------------------
  /* */
@@@ -714,10 -714,7 +714,7 @@@ bool RDepends(CommandLine &CmdL
     
     return true;
  }
                                                                        /*}}}*/
  // xvcg - Generate a graph for xvcg                                   /*{{{*/
  // ---------------------------------------------------------------------
  // Code contributed from Junichi Uekawa <dancer@debian.org> on 20 June 2002.
@@@ -937,8 -934,6 +934,6 @@@ bool XVcg(CommandLine &CmdL
     return true;
  }
                                                                        /*}}}*/
  // Dotty - Generate a graph for Dotty                                 /*{{{*/
  // ---------------------------------------------------------------------
  /* Dotty is the graphvis program for generating graphs. It is a fairly
@@@ -1274,15 -1269,16 +1269,18 @@@ bool DisplayRecord(pkgCache::VerIterato
     return true;
  }
                                                                        /*}}}*/
 -
 +// Search - Perform a search                                          /*{{{*/
 +// ---------------------------------------------------------------------
 +/* This searches the package names and package descriptions for a pattern */
  struct ExDescFile
  {
     pkgCache::DescFile *Df;
     bool NameMatch;
  };
  
+ // Search - Perform a search                                          /*{{{*/
+ // ---------------------------------------------------------------------
+ /* This searches the package names and package descriptions for a pattern */
  bool Search(CommandLine &CmdL)
  {
     pkgCache &Cache = *GCache;
@@@ -1519,7 -1515,7 +1517,7 @@@ bool Policy(CommandLine &CmdL
     
     pkgCache &Cache = *GCache;
     pkgPolicy Plcy(&Cache);
-    if (ReadPinFile(Plcy) == false)
+    if (ReadPinFile(Plcy) == false || ReadPinDir(Plcy) == false)
        return false;
     
     // Print out all of the package files
@@@ -1696,7 -1692,6 +1694,6 @@@ bool Madison(CommandLine &CmdL
  
     return true;
  }
                                                                        /*}}}*/
  // GenCaches - Call the main cache generator                          /*{{{*/
  // ---------------------------------------------------------------------
@@@ -1770,8 -1765,7 +1767,7 @@@ void CacheInitialize(
     _config->Set("help",false);
  }
                                                                        /*}}}*/
- int main(int argc,const char *argv[])
+ int main(int argc,const char *argv[])                                 /*{{{*/
  {
     CommandLine::Args Args[] = {
        {'h',"help","help",0},
            
     return 0;
  }
+                                                                       /*}}}*/
diff --combined cmdline/apt-get.cc
index adb1c92146fed37c3861aac4a90229d759bc30c0,2ca0855b62a1063e69243a6190b29d4f413251f2..04f3944a9a7235940231f1f6f0ad9ae48d755b51
@@@ -111,6 -111,9 +111,9 @@@ class CacheFile : public pkgCacheFil
         return Open(true);
     }
     CacheFile() : List(0) {};
+    ~CacheFile() {
+       delete[] List;
+    }
  };
                                                                        /*}}}*/
  
@@@ -594,7 -597,6 +597,6 @@@ void Stats(ostream &out,pkgDepCache &De
               Dep.BadCount());
  }
                                                                        /*}}}*/
  // CacheFile::NameComp - QSort compare by name                                /*{{{*/
  // ---------------------------------------------------------------------
  /* */
@@@ -687,7 -689,10 +689,10 @@@ bool CacheFile::CheckDeps(bool AllowBro
        
     return true;
  }
+                                                                       /*}}}*/
+ // CheckAuth - check if each download comes form a trusted source     /*{{{*/
+ // ---------------------------------------------------------------------
+ /* */
  static bool CheckAuth(pkgAcquire& Fetcher)
  {
     string UntrustedList;
  
     return _error->Error(_("There are problems and -y was used without --force-yes"));
  }
                                                                        /*}}}*/
  // InstallPackages - Actually download and install the packages               /*{{{*/
  // ---------------------------------------------------------------------
  /* This displays the informative messages describing what is going to 
@@@ -1301,6 -1303,7 +1303,7 @@@ pkgSrcRecords::Parser *FindSrc(const ch
     while ((Parse = SrcRecs.Find(Src.c_str(), MatchSrcOnly)) != 0)
     {
        string Ver = Parse->Version();
        // show name mismatches
        if (IsMatch == true && Parse->Package() != Src)       
         ioprintf(c1out,  _("No source package '%s' picking '%s' instead\n"), Parse->Package().c_str(), Src.c_str());
     return Last;
  }
                                                                        /*}}}*/
  // DoUpdate - Update the package lists                                        /*{{{*/
  // ---------------------------------------------------------------------
  /* */
@@@ -1456,7 -1458,7 +1458,7 @@@ bool DoAutomaticRemove(CacheFile &Cache
     }
     return true;
  }
+                                                                       /*}}}*/
  // DoUpgrade - Upgrade all packages                                   /*{{{*/
  // ---------------------------------------------------------------------
  /* Upgrade all packages without installing new packages or erasing old
@@@ -1531,7 -1533,7 +1533,7 @@@ bool TryInstallTask(pkgDepCache &Cache
     regfree(&Pattern);
     return res;
  }
+                                                                       /*}}}*/
  // DoInstall - Install packages from the command line                 /*{{{*/
  // ---------------------------------------------------------------------
  /* Install named packages */
@@@ -1869,7 -1871,8 +1871,8 @@@ bool DoInstall(CommandLine &CmdL
     // cache.commit()
     if (AutoMarkChanged > 0 &&
         Cache->DelCount() == 0 && Cache->InstCount() == 0 &&
-        Cache->BadCount() == 0)
+        Cache->BadCount() == 0 &&
+        _config->FindB("APT::Get::Simulate",false) == false)
        Cache->writeStateFile(NULL);
  
     // See if we need to prompt
@@@ -2103,33 -2106,6 +2106,33 @@@ bool DoSource(CommandLine &CmdL
        if (Last == 0)
         return _error->Error(_("Unable to find a source package for %s"),Src.c_str());
        
 +      string srec = Last->AsStr();
 +      string::size_type pos = srec.find("\nVcs-");
 +      while (pos != string::npos)
 +      {
 +       pos += strlen("\nVcs-");
 +       string vcs = srec.substr(pos,srec.find(":",pos)-pos);
 +       if(vcs == "Browser") 
 +       {
 +          pos = srec.find("\nVcs-", pos);
 +          continue;
 +       }
 +       pos += vcs.length()+2;
 +       string::size_type epos = srec.find("\n", pos);
 +       string uri = srec.substr(pos,epos-pos).c_str();
 +       ioprintf(c1out, _("NOTICE: '%s' packaging is maintained in "
 +                         "the '%s' version control system at:\n"
 +                         "%s\n"),
 +                Src.c_str(), vcs.c_str(), uri.c_str());
 +       if(vcs == "Bzr") 
 +          ioprintf(c1out,_("Please use:\n"
 +                           "bzr get %s\n"
 +                           "to retrieve the latest (possible unreleased) "
 +                           "updates to the package.\n"),
 +                   uri.c_str());
 +       break;
 +      }
 +
        // Back track
        vector<pkgSrcRecords::File> Lst;
        if (Last->Files(Lst) == false)
@@@ -2724,8 -2700,7 +2727,7 @@@ void SigWinch(int
  #endif
  }
                                                                        /*}}}*/
- int main(int argc,const char *argv[])
+ int main(int argc,const char *argv[])                                 /*{{{*/
  {
     CommandLine::Args Args[] = {
        {'h',"help","help",0},
                                     {"remove",&DoInstall},
                                     {"purge",&DoInstall},
                                   {"autoremove",&DoInstall},
 -                                 {"purge",&DoInstall},
                                     {"dist-upgrade",&DoDistUpgrade},
                                     {"dselect-upgrade",&DoDSelectUpgrade},
                                   {"build-dep",&DoBuildDep},
        ShowHelp(CmdL);
        return 0;
     }
-    
+    // simulate user-friendly if apt-get has no root privileges
+    if (getuid() != 0 && _config->FindB("APT::Get::Simulate") == true)
+    {
+       if (_config->FindB("APT::Get::Show-User-Simulation-Note",true) == true)
+        cout << _("NOTE: This is only a simulation!\n"
+           "      apt-get needs root privileges for real execution.\n"
+           "      Keep also in mind that locking is deactivated,\n"
+           "      so don't depend on the relevance to the real current situation!"
+        ) << std::endl;
+       _config->Set("Debug::NoLocking",true);
+    }
     // Deal with stdout not being a tty
     if (!isatty(STDOUT_FILENO) && _config->FindI("quiet",0) < 1)
        _config->Set("quiet","1");
     
     return 0;   
  }
+                                                                       /*}}}*/
diff --combined debian/apt.cron.daily
index 3c440307c0b822ea864112bd1dfe397531e1595c,4f47ccfab76e955346180eebb7088bd6a84ed0c9..980bfbb9da6eed4cbef1788d1e893483d709f0ad
@@@ -1,40 -1,67 +1,40 @@@
  #!/bin/sh
 +#
 +
  #set -e
  #
  # This file understands the following apt configuration variables:
 -# Values here are the default.
 -# Create /etc/apt/apt.conf.d/02periodic file to set your preference.
 -#
 -#  Dir "/";
 -#  - RootDir for all configuration files
 -#
 -#  Dir::Cache "var/apt/cache/";
 -#  - Set apt package cache directory
 -#
 -#  Dir::Cache::Archive "archives/";
 -#  - Set package archive directory
 -#
 -#  APT::Periodic::BackupArchiveInterval "0";
 -#  - Backup after n-days if archive contents changed.(0=disable)
 -#
 -#  APT::Periodic::BackupLevel "3";
 -#  - Backup level.(0=disable), 1 is invalid.
 -#
 -#  Dir::Cache::Backup "backup/";
 -#  - Set periodic package backup directory
 -#
 -#  APT::Archives::MaxAge "0"; (old, deprecated)
 -#  APT::Periodic::MaxAge "0"; (new)
 -#  - Set maximum allowed age of a cache package file. If a cache 
 -#    package file is older it is deleted (0=disable)
 -#
 -#  APT::Archives::MinAge "2"; (old, deprecated)
 -#  APT::Periodic::MinAge "2"; (new)
 -#  - Set minimum age of a package file. If a file is younger it
 -#    will not be deleted (0=disable). Usefull to prevent races 
 -#    and to keep backups of the packages for emergency.
 -#
 -#  APT::Archives::MaxSize "0"; (old, deprecated)
 -#  APT::Periodic::MaxSize "0"; (new)
 -#  - Set maximum size of the cache in MB (0=disable). If the cache
 -#    is bigger, cached package files are deleted until the size
 -#    requirement is met (the biggest packages will be deleted 
 -#    first).
  #
 -#  APT::Periodic::Update-Package-Lists "0";
 +#  "APT::Periodic::Update-Package-Lists=1"
  #  - Do "apt-get update" automatically every n-days (0=disable)
  #    
 -#  APT::Periodic::Download-Upgradeable-Packages "0";
 +#  "APT::Periodic::Download-Upgradeable-Packages=0",
  #  - Do "apt-get upgrade --download-only" every n-days (0=disable)
  # 
 -#  APT::Periodic::Unattended-Upgrade "0";
 +#  "APT::Periodic::AutocleanInterval"
 +#  - Do "apt-get autoclean" every n-days (0=disable)
 +#
 +#  "APT::Periodic::Unattended-Upgrade"
  #  - Run the "unattended-upgrade" security upgrade script 
  #    every n-days (0=disabled)
  #    Requires the package "unattended-upgrades" and will write
  #    a log in /var/log/unattended-upgrades
  # 
 -#  APT::Periodic::AutocleanInterval "0";
 -#  - Do "apt-get autoclean" every n-days (0=disable)
 +#  "APT::Archives::MaxAge",
 +#  - Set maximum allowed age of a cache package file. If a cache 
 +#    package file is older it is deleted (0=disable)
  #
 -#  APT::Periodic::Verbose "0";
 -#  - Send report mail to root
 -#      0:  no report             (or null string)
 -#      1:  progress report       (actually any string)
 -#      2:  + command outputs     (remove -qq, remove 2>/dev/null, add -d)
 -#      3:  + trace on            
 +#  "APT::Archives::MaxSize",
 +#  - Set maximum size of the cache in MB (0=disable). If the cache
 +#    is bigger, cached package files are deleted until the size
 +#    requirement is met (the biggest packages will be deleted 
 +#    first).
 +#
 +#  "APT::Archives::MinAge"
 +#  - Set minimum age of a package file. If a file is younger it
 +#    will not be deleted (0=disable). Usefull to prevent races 
 +#    and to keep backups of the packages for emergency.
 +# 
  
  check_stamp()
  {
      interval="$2"
  
      if [ $interval -eq 0 ]; then
+       debug_echo "check_stamp: interval=0"
+       # treat as no time has passed
          return 1
      fi
  
      if [ ! -f $stamp ]; then
+       debug_echo "check_stamp: missing time stamp file: $stamp."
+       # treat as enough time has passed
          return 0
      fi
  
  
      delta=$(($now-$stamp))
  
 -    # intervall is in days, convert to sec.
 +    # intervall is in days,
      interval=$(($interval*60*60*24))
 -    debug_echo "check_stamp: interval=$interval, now=$now, stamp=$stamp, delta=$delta (sec)"
 +    #echo "stampfile: $1"
 +    #echo "interval=$interval, now=$now, stamp=$stamp, delta=$delta"
 +
 +    # remove timestamps a day (or more) in the future and force re-check
 +    if [ $stamp -gt $(($now+86400)) ]; then
 +         echo "WARNING: file $stamp_file has a timestamp in the future: $stamp"
 +         rm -f "$stamp_file"
 +         return 0
 +    fi
  
+     # remove timestamps a day (or more) in the future and force re-check
+     if [ $stamp -gt $(($now+86400)) ]; then
+          echo "WARNING: file $stamp_file has a timestamp in the future: $stamp"
+          rm -f "$stamp_file"
+          return 0
+     fi
      if [ $delta -ge $interval ]; then
          return 0
      fi
  update_stamp()
  {
      stamp="$1"
 +
      touch $stamp
  }
  
  # we check here if autoclean was enough sizewise
  check_size_constraints()
  {
-     # min-age in days
      MaxAge=0
-     MinAge=2
-     MaxSize=0
-     CacheDir="var/cache/apt"
-     CacheArchive="archives/"
      eval $(apt-config shell MaxAge APT::Archives::MaxAge)
+     eval $(apt-config shell MaxAge APT::Periodic::MaxAge)
+     MinAge=2
      eval $(apt-config shell MinAge APT::Archives::MinAge)
+     eval $(apt-config shell MinAge APT::Periodic::MinAge)
+     MaxSize=0
      eval $(apt-config shell MaxSize APT::Archives::MaxSize)
-     eval $(apt-config shell Dir Dir)
+     eval $(apt-config shell MaxSize APT::Periodic::MaxSize)
+     CacheDir="var/cache/apt/"
      eval $(apt-config shell CacheDir Dir::Cache)
+     CacheDir=${CacheDir%/}
+     CacheArchive="archives/"
      eval $(apt-config shell CacheArchive Dir::Cache::archives)
+     CacheArchive=${CacheArchive%/}
  
      # sanity check
      if [ -z "$CacheDir" -o -z "$CacheArchive" ]; then
  
      # check age
      if [ ! $MaxAge -eq 0 ] && [ ! $MinAge -eq 0 ]; then
+       debug_echo "aged: ctime <$MaxAge and mtime <$MaxAge and ctime>$MinAge and mtime>$MinAge"
        find $Cache -name "*.deb"  \( -mtime +$MaxAge -and -ctime +$MaxAge \) -and -not \( -mtime -$MinAge -or -ctime -$MinAge \) -print0 | xargs -r -0 rm -f
      elif [ ! $MaxAge -eq 0 ]; then
+       debug_echo "aged: ctime <$MaxAge and mtime <$MaxAge only"
        find $Cache -name "*.deb"  -ctime +$MaxAge -and -mtime +$MaxAge -print0 | xargs -r -0 rm -f
+     else
+       debug_echo "skip aging since MaxAge is 0"
      fi
      
      # check size
            size=${du%%/*}
            # check if the cache is small enough
            if [ $size -lt $MaxSize ]; then
+               debug_echo "end remove by archive size:  size=$size < $MaxSize"
                break
            fi
  
            # check for MinAge of the file
-           if [ ! $MinAge -eq 0 ]; then 
+           if [ $MinAge -ne 0 ]; then 
                # check both ctime and mtime 
                mtime=$(stat -c %Y $file)
                ctime=$(stat -c %Z $file)
                else
                    delta=$(($now-$ctime))
                fi
-               #echo "$file ($delta), $MinAge"
                if [ $delta -le $MinAge ]; then
-                   #echo "Skiping $file (delta=$delta)"
+                   debug_echo "skip remove by archive size:  $file, delta=$delta < $MinAgeSec"
                    break
+               else
+                   # delete oldest file
+                   debug_echo "remove by archive size: $file, delta=$delta >= $MinAgeSec (sec), size=$size >= $MaxSize"
+                   rm -f $file
                fi
            fi
-           # delete oldest file
-           rm -f $file
        done
      fi
  }
  
+ # deal with the Apt::Periodic::BackupArchiveInterval
+ do_cache_backup()
+ {
+     BackupArchiveInterval="$1"
+     if [ $BackupArchiveInterval -eq 0 ]; then
+       return
+     fi
+     # Set default values and normalize
+     Dir="/"
+     eval $(apt-config shell Dir Dir)
+     Dir=${Dir%/}
+     CacheDir="var/cache/apt/"
+     eval $(apt-config shell CacheDir Dir::Cache)
+     CacheDir=${CacheDir%/}
+     if [ -z "$CacheDir" ]; then
+       debug_echo "practically empty Dir::Cache, exiting"
+       return 0
+     fi
+     CacheArchive="archives/"
+     eval $(apt-config shell CacheArchive Dir::Cache::Archives)
+     CacheArchive=${CacheArchive%/}
+     if [ -z "$CacheArchive" ]; then
+       debug_echo "practically empty Dir::Cache::archives, exiting"
+       return 0
+     fi
+     BackupLevel=3
+     eval $(apt-config shell BackupLevel APT::Periodic::BackupLevel)
+     if [ $BackupLevel -le 1 ]; then 
+       BackupLevel=2 ; 
+     fi
+     
+     CacheBackup="backup/"
+     eval $(apt-config shell CacheBackup Dir::Cache::Backup)
+     CacheBackup=${CacheBackup%/}
+     if [ -z "$CacheBackup" ]; then
+       echo "practically empty Dir::Cache::Backup, exiting" 1>&2
+       return
+     fi
+     Cache="${Dir}/${CacheDir}/${CacheArchive}/"
+     Back="${Dir}/${CacheDir}/${CacheBackup}/"
+     BackX="${Back}${CacheArchive}/"
+     for x in $(seq 0 1 $((${BackupLevel}-1))); do 
+       eval "Back${x}=${Back}${x}/"
+     done
+     
+     # backup after n-days if archive contents changed.
+     # (This uses hardlink to save disk space)
+     BACKUP_ARCHIVE_STAMP=/var/lib/apt/periodic/backup-archive-stamp
+     if check_stamp $BACKUP_ARCHIVE_STAMP $BackupArchiveInterval; then
+       if [ $({(cd $Cache 2>/dev/null; find . -name "*.deb"); (cd $Back0 2>/dev/null;find . -name "*.deb") ;}| sort|uniq -u|wc -l) -ne 0 ]; then
+           mkdir -p $Back
+           rm -rf $Back$((${BackupLevel}-1))
+           for y in $(seq $((${BackupLevel}-1)) -1 1); do 
+               eval BackY=${Back}$y
+               eval BackZ=${Back}$(($y-1))
+               if [ -e $BackZ ]; then 
+                   mv -f $BackZ $BackY ; 
+               fi
+           done
+           cp -la $Cache $Back ; mv -f $BackX $Back0
+           update_stamp $BACKUP_ARCHIVE_STAMP
+           debug_echo "backup with hardlinks. (success)"
+       else
+           debug_echo "skip backup since same content."
+       fi
+     else
+       debug_echo "skip backup since too new."
+     fi
+ }
  # sleep for a random interval of time (default 30min)
  # (some code taken from cron-apt, thanks)
  random_sleep()
        RANDOM=$(dd if=/dev/urandom count=1 2> /dev/null | cksum | cut -c"1-5")
      fi
      TIME=$(($RANDOM % $RandomSleep))
+     debug_echo "sleeping for $TIME seconds"
      sleep $TIME
  }
  
- # main
  
- if ! which apt-config >/dev/null; then
+ debug_echo()
+ {
+     # Display message if $VERBOSE >= 1
+     if [ "$VERBOSE" -ge 1 ]; then
+       echo $1 1>&2
+     fi
+ }
+ # ------------------------ main ----------------------------
+ # check apt-config exstance
+ if ! which apt-config >/dev/null ; then
+       exit 0
+ fi
+ # Set VERBOSE mode from  apt-config (or inherit from environment)
+ eval $(apt-config shell VERBOSE APT::Periodic::Verbose)
+ debug_echo "verbose level $VERBOSE"
+ if [ -z "$VERBOSE" ]; then
+     VERBOSE="0"
+ fi
+ if [ "$VERBOSE" -le 2 ]; then
+     # quiet for 0,1,2
+     XSTDOUT=">/dev/null"
+     XSTDERR="2>/dev/null"
+     XAPTOPT="-qq"
+     XUUPOPT=""
+ else
+     XSTDOUT=""
+     XSTDERR=""
+     XAPTOPT=""
+     XUUPOPT="-d"
+ fi
+ if [ "$VERBOSE" -ge 3 ]; then
+     # trace output
+     set -x
+ fi
+ # laptop check, on_ac_power returns:
+ #       0 (true)    System is on main power
+ #       1 (false)   System is not on main power
+ #       255 (false) Power status could not be determined
+ # Desktop systems always return 255 it seems
+ if which on_ac_power >/dev/null; then
+     on_ac_power
+     POWER=$?
+     if [ $POWER -eq 1 ]; then
+       debug_echo "exit: system NOT on main power"
        exit 0
+     elif [ $POWER -ne 0 ]; then
+       debug_echo "power status ($POWER) undetermined, continuing"
+     fi
+     debug_echo "system is on main power."
+ fi
+ # check if we can lock the cache and if the cache is clean
+ if which apt-get >/dev/null && ! eval apt-get check -f $XAPTOPT $XSTDERR ; then
+     debug_echo "error encountered in cron job with \"apt-get check\"."
+     exit 0
  fi
  
+ # Global current time in seconds since 1970-01-01 00:00:00 UTC
+ now=$(date +%s)
+ # Support old Archive for compatibility.
+ # Document only Periodic for all controling parameters of this script.
  UpdateInterval=0
 -eval $(apt-config shell UpdateInterval APT::Periodic::Update-Package-Lists)
 -
  DownloadUpgradeableInterval=0
 -eval $(apt-config shell DownloadUpgradeableInterval APT::Periodic::Download-Upgradeable-Packages)
 -
 +eval $(apt-config shell UpdateInterval APT::Periodic::Update-Package-Lists DownloadUpgradeableInterval APT::Periodic::Download-Upgradeable-Packages)
 +AutocleanInterval=$DownloadUpgradeableInterval
 +eval $(apt-config shell AutocleanInterval APT::Periodic::AutocleanInterval)
  UnattendedUpgradeInterval=0
  eval $(apt-config shell UnattendedUpgradeInterval APT::Periodic::Unattended-Upgrade)
  
+ AutocleanInterval=0
+ eval $(apt-config shell AutocleanInterval APT::Periodic::AutocleanInterval)
+ BackupArchiveInterval=0
+ eval $(apt-config shell BackupArchiveInterval APT::Periodic::BackupArchiveInterval)
  # check if we actually have to do anything
  if [ $UpdateInterval -eq 0 ] &&
     [ $DownloadUpgradeableInterval -eq 0 ] &&
     [ $UnattendedUpgradeInterval -eq 0 ] &&
 -   [ $BackupArchiveInterval -eq 0 ] &&
     [ $AutocleanInterval -eq 0 ]; then
      exit 0
  fi
  
- # laptop check, on_ac_power returns:
- #       0 (true)    System is on mains power
- #       1 (false)   System is not on mains power
- #       255 (false) Power status could not be determined
- # Desktop systems always return 255 it seems
- if which on_ac_power >/dev/null; then
-     on_ac_power
-     if [ $? -eq 1 ]; then
-       exit 0
-     fi
++# set the proxy based on the admin users gconf settings
++admin_user=$(getent group admin|cut -d: -f4|cut -d, -f1)
++if [ -n "$admin_user" ] && [ -x /usr/bin/sudo ] && [ -z "$http_proxy" ] && [ -x /usr/bin/gconftool ]; then
++       use=$(sudo -u "$admin_user" gconftool --get /system/http_proxy/use_http_proxy 2>/dev/null)
++       host=$(sudo -u "$admin_user" gconftool --get /system/http_proxy/host 2>/dev/null)
++       port=$(sudo -u "$admin_user" gconftool --get /system/http_proxy/port 2>/dev/null)
++       if [ "$use" = "true" ] && [ -n "$host" ] && [ -n "$port" ]; then
++               export http_proxy="http://$host:$port/"
++       fi
 +fi
 +
++
+ # deal with BackupArchiveInterval
+ do_cache_backup $BackupArchiveInterval
  # sleep random amount of time to avoid hitting the 
  # mirrors at the same time
  random_sleep
  
- # check if we can access the cache
- if ! apt-get check -q -q 2>/dev/null; then
-     # wait random amount of time before retrying
-     random_sleep
-     # check again
-     if ! apt-get check -q -q 2>/dev/null; then
-        echo "$0: could not lock the APT cache while performing daily cron job. "
-        echo "Is another package manager working?"
-        exit 1
-     fi
- fi
- # set the proxy based on the admin users gconf settings
- admin_user=$(getent group admin|cut -d: -f4|cut -d, -f1)
- if [ -n "$admin_user" ] && [ -x /usr/bin/sudo ] && [ -z "$http_proxy" ] && [ -x /usr/bin/gconftool ]; then
-       use=$(sudo -u "$admin_user" gconftool --get /system/http_proxy/use_http_proxy 2>/dev/null)
-       host=$(sudo -u "$admin_user" gconftool --get /system/http_proxy/host 2>/dev/null)
-       port=$(sudo -u "$admin_user" gconftool --get /system/http_proxy/port 2>/dev/null)
-       if [ "$use" = "true" ] && [ -n "$host" ] && [ -n "$port" ]; then
-               export http_proxy="http://$host:$port/"
-       fi
- fi
+ # update package lists
+ UPDATED=0
  UPDATE_STAMP=/var/lib/apt/periodic/update-stamp
  if check_stamp $UPDATE_STAMP $UpdateInterval; then
 -    if eval apt-get $XAPTOPT -y update $XSTDERR; then
 +    # check for a new archive signing key (against the master keyring)
-     apt-key net-update
-     # now run the update
-     if apt-get -qq update -o APT::Update::Auth-Failure::="cp /usr/share/apt/apt-auth-failure.note /var/lib/update-notifier/user.d/" 2>/dev/null; then 
-       # Could possible test access to '/var/run/dbus/system_bus_socket' has well,
-       # but I'm not sure how stable the internal pipe location is defined as
-       # being;  so for the moment just 2>/dev/null . --sladen 2007-09-27
-       if which dbus-send >/dev/null; then
-           dbus-send --system / app.apt.dbus.updated boolean:true 2>/dev/null || true
++    if eval apt-key net-update $XSTDERR; then
++      debug_echo "apt-key net-update (success)"
++    else
++      debug_echo "apt-key net-update (failure)"
++    fi
++    if eval apt-get $XAPTOPT -y update -o APT::Update::Auth-Failure::="cp /usr/share/apt/apt-auth-failure.note /var/lib/update-notifier/user.d/" $XSTDERR; then
+       debug_echo "download updated metadata (success)."
+       if which dbus-send >/dev/null && pidof dbus-daemon >/dev/null; then
+           if dbus-send --system / app.apt.dbus.updated boolean:true ; then
+               debug_echo "send dbus signal (success)"
+           else
+               debug_echo "send dbus signal (error)"
+           fi
+       else
+           debug_echo "dbus signal not send (command not available)"
        fi
-         update_stamp $UPDATE_STAMP
+       update_stamp $UPDATE_STAMP
+       UPDATED=1
 +      # now run apt-xapian-index if it is installed to ensure the index
 +      # is up-to-date
 +      if [ -x /usr/sbin/update-apt-xapian-index ]; then
 +          ionice -c3 update-apt-xapian-index -q
 +      fi
+     else
+       debug_echo "download updated metadata (error)"
      fi
+ else
+     debug_echo "download updated metadata (not run)."
  fi
+       
+ # download all upgradeable packages (if it is requested)
  DOWNLOAD_UPGRADEABLE_STAMP=/var/lib/apt/periodic/download-upgradeable-stamp
- if check_stamp $DOWNLOAD_UPGRADEABLE_STAMP $DownloadUpgradeableInterval; then
-     apt-get -qq -d dist-upgrade 2>/dev/null
-     update_stamp $DOWNLOAD_UPGRADEABLE_STAMP
+ if [ $UPDATED -eq 1 ] && check_stamp $DOWNLOAD_UPGRADEABLE_STAMP $DownloadUpgradeableInterval; then
+     if  eval apt-get $XAPTOPT -y -d dist-upgrade $XSTDERR; then
+       update_stamp $DOWNLOAD_UPGRADEABLE_STAMP
+       debug_echo "download upgradable (success)"
+     else
+       debug_echo "download upgradable (error)"
+     fi
+ else
+     debug_echo "download upgradable (not run)"
  fi
  
+ # auto upgrade all upgradeable packages
  UPGRADE_STAMP=/var/lib/apt/periodic/upgrade-stamp
- if check_stamp $UPGRADE_STAMP $UnattendedUpgradeInterval; then
-     unattended-upgrade
-     update_stamp $UPGRADE_STAMP
+ if [ $UPDATED -eq 1 ] && which unattended-upgrade >/dev/null && check_stamp $UPGRADE_STAMP $UnattendedUpgradeInterval; then
+     if unattended-upgrade $XUUPOPT; then
+       update_stamp $UPGRADE_STAMP
+       debug_echo "unattended-upgrade (success)"
+     else
+       debug_echo "unattended-upgrade (error)"
+     fi
+ else
+     debug_echo "unattended-upgrade (not run)"
  fi
  
+ # autoclean package archive
  AUTOCLEAN_STAMP=/var/lib/apt/periodic/autoclean-stamp
  if check_stamp $AUTOCLEAN_STAMP $AutocleanInterval; then
-     apt-get -qq autoclean
-     update_stamp $AUTOCLEAN_STAMP
+     if  eval apt-get $XAPTOPT -y autoclean $XSTDERR; then
+       debug_echo "autoclean (success)."
+       update_stamp $AUTOCLEAN_STAMP
+     else
+       debug_echo "autoclean (error)"
+     fi
+ else
+     debug_echo "autoclean (not run)"
  fi
  
  # check cache size 
  check_size_constraints
+ #
+ #     vim: set sts=4 ai :
+ #
diff --combined debian/apt.dirs
index 747a8e3fd3adb6e838094008729f3c4d37d56d26,fb6716c35bc89bd3bb9a8db813c79b7dba9888f7..d11ee0f2f67953a6517e443e8659e003bf321abc
@@@ -3,11 -3,11 +3,12 @@@ usr/lib/apt/method
  usr/lib/dpkg/methods/apt
  etc/apt
  etc/apt/apt.conf.d
+ etc/apt/preferences.d
  etc/apt/sources.list.d
  etc/logrotate.d
  var/cache/apt/archives/partial
  var/lib/apt/lists/partial
 +var/lib/apt/mirrors/partial
  var/lib/apt/periodic
  var/log/apt
  usr/share/bug/apt
diff --combined debian/changelog
index 498c6710c7ee9b9ee3222ba1244266a0b471bbaf,3d5db5f48c7c06846f57d06805a76ca71b89aae8..f6c282f42d1b035f6cbdc67321f00dde838dded5
@@@ -1,5 -1,64 +1,76 @@@
- apt (0.7.21ubuntu2~ppa1) karmic; urgency=low
++apt (0.7.23ubuntu1) karmic; urgency=low
 +
++  * merged from the debian-sid bzr branch
++
++  * cmdline/apt-get.cc:
++    - honor APT::Get::Only-Source properly in FindSrc() (thanks to
++      Martin Pitt for reporting the problem)
++
++ -- Michael Vogt <michael.vogt@ubuntu.com>  Thu, 30 Jul 2009 15:27:30 +0200
++
+ apt (0.7.22) unstable; urgency=low
++
+   [ Christian Perrier ]
+   * Documentation translations:
+     - Fix a typo in apt-get(8) French translation. Closes: #525043
+       Thanks to Guillaume Delacour for spotting it.
+     - Updated apt.conf(5) manpgae French translation.
+       Thanks to Aurélien Couderc.
+   * Translations:
+     - fr.po
 -    - sk.po. Closes: #525857 
++    - sk.po. Closes: #525857
+     - ru.po. Closes: #526816
+     - eu.po. Closes: #528985
+     - zh_CN.po. Closes: #531390
+     - fr.po
+     - it.po. Closes: #531758
+     - ca.po. Closes: #531921
+     - de.po. Closes: #536430
+   * Added translations
+     - ast.po (Asturian by Marcos Alvareez Costales).
+       Closes: #529007, #529730, #535328
+   
+   [ David Kalnischkies ]
+   * [ABI break] support '#' in apt.conf and /etc/apt/preferences
+     (closes: #189866)
+   * [ABI break] Allow pinning by codename (closes: #97564)
+   * support running "--simulate" as user
+   * add depth information to the debug output and show what depends
+     type triggers a autoinst (closes: #458389)
+   * add Debug::pkgDepCache::Marker with more detailed debug output 
+     (closes: #87520)
+   * add Debug::pkgProblemResolver::ShowScores and make the scores
+     adjustable
+   * do not write state file in simulate mode (closes: #433007)
+   * add hook for MarkInstall and MarkDelete (closes: #470035)
+   * fix typo in apt-pkg/acquire.cc which prevents Dl-Limit to work
+     correctly when downloading from multiple sites (Closes: #534752)
+   * add the various foldmarkers in apt-pkg & cmdline (no code change)
+   * versions with a pin of -1 shouldn't be a candidate (Closes: #355237)
+   * prefer mmap as memory allocator in MMap instead of a static char
+     array which can (at least in theory) grow dynamic
+   * eliminate (hopefully all) segfaults in pkgcachegen.cc and mmap.cc
+     which can arise if cache doesn't fit into the mmap (Closes: #535218)
+   * display warnings instead of errors if the parts dirs doesn't exist
++
+   [ Michael Vogt ]
+   * honor the dpkg hold state in new Marker hooks (closes: #64141)
+   * debian/apt.cron.daily:
+     - if the timestamp is too far in the future, delete it
+   * apt-pkg/acquire.cc:
+     - make the max pipeline depth of the acquire queue configurable
+       via Acquire::Max-Pipeline-Depth
+   * apt-pkg/deb/dpkgpm.cc:
+     - add Dpkg::UseIoNice boolean option to run dpkg with ionice -c3
+       (off by default)
+     - send "dpkg-exec" message on the status fd when dpkg is run
+     - provide DPkg::Chroot-Directory config option (useful for testing)
+     - fix potential hang when in a backgroud process group
+   * apt-pkg/algorithms.cc:
+     - consider recommends when making the scores for the problem 
+       resolver
    * apt-pkg/acquire-worker.cc:
      - show error details of failed methods
    * apt-pkg/contrib/fileutl.cc:
    * methods/http.cc:
      - ignore SIGPIPE, we deal with EPIPE from write in 
        HttpMethod::ServerDie() (LP: #385144)
-   * debian/apt.cron.daily:
-     - if the timestamp is too far in the future, delete it 
-       (LP: #135262)
+   * Only run Download-Upgradable and Unattended-Upgrades if the initial
+     update was successful Closes: #341970
+   * apt-pkg/indexcopy.cc:
+     - support having CDs with no Packages file (just a Packages.gz)
+       by not forcing a verification on non-existing files
+      (LP: #255545)
+     - remove the gettext from a string that consists entirely 
+       of variables (LP: #56792)
+   * apt-pkg/cacheiterators.h:
+     - add missing checks for Owner == 0 in end()
+   * apt-pkg/indexrecords.cc:
+     - fix some i18n issues
+   * apt-pkg/contrib/strutl.h:
+     - add new strprintf() function to make i18n strings easier
+     - fix compiler warning
+   * apt-pkg/deb/debsystem.cc:
+     - make strings i18n able 
+   * fix problematic use of tolower() when calculating the version 
+     hash by using locale independant tolower_ascii() function. 
+     Thanks to M. Vefa Bicakci (LP: #80248)
+   * build fixes for g++-4.4
+   * cmdline/apt-mark:
+     - add "showauto" option to show automatically installed packages
+   * document --install-recommends and --no-install-recommends
+     (thanks to Dereck Wonnacott, LP: #126180)
+   * doc/apt.conf.5.xml:
+     - merged patch from Aurélien Couderc to improve the text
+       (thanks!)
+   * [ABI] merged the libudev-dlopen branch, this allows to pass
+     "apt-udev-auto" to Acquire::Cdrom::mount and the cdrom method will  
+     dynamically find/mount the cdrom device (if libhal is available)
+   [ Julian Andres Klode ]
+   * apt-pkg/contrib/configuration.cc: Fix a small memory leak in
+     ReadConfigFile.
+   * Introduce support for the Enhances field. (Closes: #137583) 
+   * Support /etc/apt/preferences.d, by adding ReadPinDir() (Closes: #535512)
+   * configure-index: document Dir::Etc::SourceParts and some other options
+     (Closes: #459605)
+   * Remove Eugene V. Lyubimkin from uploaders as requested.
+   * apt-pkg/contrib/hashes.cc, apt-pkg/contrib/md5.cc:
+     - Support reading until EOF if Size=0 to match behaviour of
+       SHA1Summation and SHA256Summation
+   [ Osamu Aoki ]
+   * Updated cron script to support backups by hardlinks and 
+     verbose levels.  All features turned off by default. 
+   * Added more error handlings.  Closes: #438803, #462734, #454989, 
+   * Documented all cron script related configuration items in 
+     configure-index.
+   [ Dereck Wonnacott ]
+   * apt-ftparchive might write corrupt Release files (LP: #46439)
+   * Apply --important option to apt-cache depends (LP: #16947) 
  
+   [ Otavio Salvador ]
+   * Apply patch from Sami Liedes <sliedes@cc.hut.fi> to reduce the
+     number of times we call progress bar updating and debugging
+     configuration settings.
+   * Apply patch from Sami Liedes <sliedes@cc.hut.fi> to avoid unecessary
+     temporary allocations.
  
-  -- Michael Vogt <michael.vogt@ubuntu.com>  Thu, 02 Jul 2009 14:11:35 +0200
+  -- Michael Vogt <mvo@debian.org>  Wed, 29 Jul 2009 19:16:22 +0200
  
 +apt (0.7.21ubuntu1) karmic; urgency=low
 +
 +  * merged from the debian-sid bzr branch
 +  
 +  [ Christian Perrier ]
 +  * Documentation translations:
 +    - Fix a typo in apt-get(8) French translation. Closes: #525043
 +      Thanks to Guillaume Delacour for spotting it.
 +  * Translations:
 +    - fr.po
 +    - sk.po. Closes: #525857
 +    - ru.po. Closes: #526816
 +    - eu.po. Closes: #528985
 +    - zh_CN.po. Closes: #531390
 +    - fr.po
 +    - it.po. Closes: #531758
 +    - ca.po. Closes: #531921
 +  * Added translations
 +    - ast.po (Asturian by Marcos Alvareez Costales).
 +      Closes: #529007, #529730
 +
 +  [ Michael Vogt ]
 +  * apt-pkg/acquire.cc:
 +    - make the (internal) max pipeline depth of the acquire queue
 +      configurable via Acquire::Max-Pipeline-Depth
 +
 + -- Michael Vogt <michael.vogt@ubuntu.com>  Tue, 09 Jun 2009 15:49:07 +0200
 +
  apt (0.7.21) unstable; urgency=low
  
    [ Christian Perrier ]
      - sk.po. Closes: #520403
      - it.po. Closes: #522222
      - sk.po. Closes: #520403
 -  
 +
    [ Jamie Strandboge ]
    * apt.cron.daily: catch invalid dates due to DST time changes
      in the stamp files
    * Clarify the --help for 'purge' (LP: #243948)
    * cmdline/apt-get.cc
      - fix "apt-get source pkg" if there is a binary package and
 -      a source package of the same name but from different 
 +      a source package of the same name but from different
        packages (LP: #330103)
  
    [ Colin Watson ]
  
   -- Michael Vogt <mvo@debian.org>  Tue, 14 Apr 2009 14:12:51 +0200
  
 +apt (0.7.20.2ubuntu7) karmic; urgency=low
 +
 +  * fix problematic use of tolower() when calculating the version 
 +    hash by using locale independant tolower_ascii() function. 
 +    Thanks to M. Vefa Bicakci (LP: #80248)
 +  * build fixes for g++-4.4
 +  * include dmesg output in apport package failures
 +  * include apt ordering into apport package failures
 +
 + -- Michael Vogt <michael.vogt@ubuntu.com>  Fri, 24 Apr 2009 10:14:01 +0200
 +
 +apt (0.7.20.2ubuntu6) jaunty; urgency=low
 +
 +  [ Jamie Strandboge ]
 +  * apt.cron.daily: catch invalid dates due to DST time changes
 +    in the stamp files (LP: #354793)
 +
 +  [ Michael Vogt ]
 +  * methods/gpgv.cc:
 +    - properly check for expired and revoked keys (closes: #433091)
 +      LP: #356012
 +
 + -- Michael Vogt <michael.vogt@ubuntu.com>  Wed, 08 Apr 2009 22:39:50 +0200
 +
 +apt (0.7.20.2ubuntu5) jaunty; urgency=low
 +
 +  [ Colin Watson ]
 +  * cmdline/acqprogress.cc:
 +    - Call pkgAcquireStatus::Pulse even if quiet, so that we still get
 +      dlstatus messages on the status-fd (LP: #290234).
 +  
 +  [ Michael Vogt ]
 +  * debian/apt.cron.daily:
 +    - do not clutter cron mail with bogus gconftool messages 
 +      (LP: #223502)
 +    - merge fix for cache locking from debian (closes: #459344)
 +    - run update-apt-xapian-index (with ionice) to ensure that
 +      the index is up-to-date when synaptic is run (LP: #288797)
 +
 + -- Michael Vogt <michael.vogt@ubuntu.com>  Mon, 30 Mar 2009 13:22:28 +0200
 +
 +apt (0.7.20.2ubuntu4) jaunty; urgency=low
 +
 +  * ftparchive/cachedb.cc:
 +    - when apt-ftparchive clean is used, compact the database
 +      at the end (thanks to cprov)
 +
 + -- Michael Vogt <michael.vogt@ubuntu.com>  Thu, 26 Mar 2009 13:43:59 +0100
 +
 +apt (0.7.20.2ubuntu3) jaunty; urgency=low
 +
 +  * methods/mirror.cc:
 +    - when download the mirror file and the server is down,
 +      return a propper error message (LP: #278635)
 +
 + -- Michael Vogt <michael.vogt@ubuntu.com>  Thu, 19 Mar 2009 15:42:15 +0100
 +
 +apt (0.7.20.2ubuntu2) jaunty; urgency=low
 +
 +  * apt-pkg/deb/dpkgpm.cc:
 +    - revert termios patch (LP: #338514)
 +  * cmdline/apt-get.cc
 +    - fix "apt-get source pkg" if there is a binary package and
 +      a source package of the same name but from different 
 +      packages (LP: #330103)
 +
 + -- Michael Vogt <michael.vogt@ubuntu.com>  Mon, 09 Mar 2009 16:33:28 +0100
 +
 +apt (0.7.20.2ubuntu1) jaunty; urgency=low
 +
 +  [ Christian Perrier ]
 +  * Translations:
 +    - bg.po. Closes: #513211
 +    - zh_TW.po. Closes: #513311
 +    - nb.po. Closes: #513843
 +  
 +  [ Michael Vogt ]
 +  * merged from the debian-sid branch
 +  * [ABI break] merge support for http redirects, thanks to
 +    Jeff Licquia and Anthony Towns
 +  * [ABI break] use int for the package IDs (thanks to Steve Cotton)
 +  * apt-pkg/contrib/strutl.cc:
 +    - fix TimeToStr i18n (LP: #289807)
 +  * debian/apt.conf.autoremove:
 +    - readd "linux-image" (and friends) to the auto-remove
 +     blacklist
 +  * fix some i18n issues (thanks to  Gabor Kelemen)
 +    LP: #263089
 +  * apt-pkg/deb/dpkgpm.cc:
 +    - filter "ENOMEM" errors when creating apport reports 
 +  * cmdline/apt-get.cc:
 +    - fix "apt-get source pkg=ver" if binary name != source name
 +      (LP: #202219)
 +  * apt-pkg/indexrecords.cc:
 +    - fix some i18n issues
 +  * apt-pkg/contrib/strutl.h:
 +    - add new strprintf() function to make i18n strings easier
 +  * apt-pkg/dev/debsystem.cc:
 +    - add missing apti18n.h header
 +  * cmdline/apt-get.cc:
 +    - default to "false" for the "APT::Get::Build-Dep-Automatic"
 +      option (follow debian here)
 +  * apt-pkg/pkgcache.cc:
 +    - do not run "dpkg --configure pkg" if pkg is in trigger-awaited
 +      state (LP: #322955)
 +  * methods/https.cc:
 +    - add Acquire::https::AllowRedirect support
 +    - do not unlink files in partial/ (thanks to robbiew)
 +
 +  [ Dereck Wonnacott ]
 +  * Clarify the --help for 'purge' (LP: #243948)
 +
 +  [ Ian Weisser ]
 +  * /apt-pkg/deb/debsystem.cc:
 +    - add 'sudo' to the error message to "run 'dpkg --configure -a'"
 +      (LP: #52697)
 +
 + -- Michael Vogt <michael.vogt@ubuntu.com>  Mon, 09 Feb 2009 14:21:05 +0100
 +
  apt (0.7.20.2) unstable; urgency=medium
  
    [ Eugene V. Lyubimkin ]
@@@ -252,10 -221,10 +380,10 @@@ apt (0.7.20) unstable; urgency=lo
        (Closes: #440049, #509337)
  
    [ Michael Vogt ]
 -  * add option to "apt-get build-dep" to mark the needed 
 -    build-dep packages as automatic installed. 
 +  * add option to "apt-get build-dep" to mark the needed
 +    build-dep packages as automatic installed.
      This is controlled via the value of
 -    APT::Get::Build-Dep-Automatic and is set "false" by default.  
 +    APT::Get::Build-Dep-Automatic and is set "false" by default.
      Thanks to Aaron Haviland, closes: #448743
    * apt-inst/contrib/arfile.cc:
      - support members ending with '/' as well (thanks to Michal Cihr,
  
    [ Christian Perrier ]
    * Translations:
 -    - Finnish updated. Closes: #508449 
 +    - Finnish updated. Closes: #508449
      - Galician updated. Closes: #509151
      - Catalan updated. Closes: #509375
      - Vietnamese updated. Closes: #509422
      - Traditional Chinese added. Closes: #510664
 -    - French corrected (remove awful use of first person) 
 +    - French corrected (remove awful use of first person)
  
   -- Michael Vogt <mvo@debian.org>  Mon, 05 Jan 2009 08:59:20 +0100
  
 +apt (0.7.19ubuntu1) jaunty; urgency=low
 +
 +  * merge from debian
 +
 + -- Michael Vogt <michael.vogt@ubuntu.com>  Mon, 24 Nov 2008 10:52:20 +0100
 +
  apt (0.7.19) unstable; urgency=low
  
    [ Eugene V. Lyubimkin ]
        (Closes: #419521)
  
    [ Michael Vogt ]
 +  * doc/makefile:
 +    - add examples/apt-https-method-example.conf
      - fix SIGHUP handling (closes: #463030)
  
    [ Christian Perrier ]
@@@ -578,103 -539,6 +706,103 @@@ apt (0.7.15~exp1) experimental; urgency
    
   -- Michael Vogt <mvo@debian.org>  Tue, 16 Sep 2008 21:27:03 +0200
  
 +apt (0.7.14ubuntu7) jaunty; urgency=low
 +
 +  * cmdline/apt-cache.cc:
 +    - remove the gettext from a string that consists entirely 
 +      of variables (LP: #56792)
 +  * apt-pkg/deb/dpkgpm.cc:
 +    - fix potential hang when in a backgroud process group
 +
 + -- Michael Vogt <michael.vogt@ubuntu.com>  Tue, 28 Oct 2008 21:09:12 +0100
 +
 +apt (0.7.14ubuntu6) intrepid; urgency=low
 +
 +  * debian/apt.conf.autoremove:
 +    - remove "linux-image" (and friends) from the auto-remove
 +      blacklist. we have the kernel fallback infrastructure now
 +      in intrepid (thanks to BenC)
 +  * apt-pkg/indexcopy.cc:
 +    - support having CDs with no Packages file (just a Packages.gz)
 +      by not forcing a verification on non-existing files
 +     (LP: #255545)
 +  * apt-pkg/deb/dpkgpm.cc:
 +    - improve the filtering for duplicated apport reports (thanks
 +      to seb128 for pointing that problem out)
 +    - do not report disk full errors from dpkg via apport
 +
 + -- Michael Vogt <michael.vogt@ubuntu.com>  Thu, 07 Aug 2008 16:28:05 +0200
 +
 +apt (0.7.14ubuntu5) intrepid; urgency=low
 +
 +  * fix various -Wall warnings
 +  * make "apt-get build-dep" installed packages marked automatic
 +    by default. This can be changed by setting the value of
 +    APT::Get::Build-Dep-Automatic to false (thanks to Aaron 
 +    Haviland, closes: #44874, LP: #248268)
 +
 + -- Michael Vogt <michael.vogt@ubuntu.com>  Wed, 06 Aug 2008 14:00:51 +0200
 +
 +apt (0.7.14ubuntu4) intrepid; urgency=low
 +
 +  [ Michael Vogt ]
 +  * apt-pkg/deb/dpkgpm.cc:
 +    - fix uninitialized variable that caused no apport reports
 +      to be written sometimes (thanks to Matt Zimmerman)
 +  * merge patch that enforces stricter https server certificate
 +    checking (thanks to Arnaud Ebalard, closes: #485960)
 +  * allow per-mirror specific https settings
 +    (thanks to Arnaud Ebalard, closes: #485965)
 +  * add doc/examples/apt-https-method-example.cof
 +    (thanks to Arnaud Ebalard, closes: #485964)
 +  * add DPkg::NoTriggers option so that applications that call
 +    apt/aptitude (like the installer) defer trigger processing
 +    (thanks to Joey Hess) 
 +  * document --install-recommends and --no-install-recommends
 +    (thanks to Dereck Wonnacott, LP: #126180)
 +  
 +  [ Dereck Wonnacott ]
 +  * apt-ftparchive might write corrupt Release files (LP: #46439)
 +  * Apply --important option to apt-cache depends (LP: #16947) 
 +
 + -- Michael Vogt <michael.vogt@ubuntu.com>  Tue, 05 Aug 2008 10:10:49 +0200
 +
 +apt (0.7.14ubuntu3) intrepid; urgency=low
 +
 +  [ Otavio Salvador ]
 +  * Apply patch to avoid truncating of arbitrary files. Thanks to Bryan
 +    Donlan <bdonlan@fushizen.net> for the patch. Closes: #482476
 +  * Avoid using dbus if dbus-daemon isn't running. Closes: #438803
 +
 +  [ Michael Vogt ]
 +  * apt-pkg/deb/dpkgpm.cc:
 +    - improve apt progress reporting, display trigger actions
 +  * apt-pkg/depcache.cc:
 +    - when checking for new important deps, skip critical ones
 +      (LP: #236360)
 +  
 + -- Michael Vogt <michael.vogt@ubuntu.com>  Tue, 03 Jun 2008 17:27:07 +0200
 +
 +apt (0.7.14ubuntu2) intrepid; urgency=low
 +
 +  * debian/control:
 +    - fix FTBFS by adding missing intltool dependency 
 +
 + -- Michael Vogt <michael.vogt@ubuntu.com>  Fri, 09 May 2008 13:50:22 +0200
 +
 +apt (0.7.14ubuntu1) intrepid; urgency=low
 +
 +  [ Michael Vogt ]
 +  * enable installation of recommends by default
 +  * debian/apt.conf.ubuntu:
 +    - remove APT::Install-Recommends-Sections (no longer needed)
 +  * merged from debian/sid, remaining changes:
 +    - authentication-reliable branch (to be merged into debian soon)
 +    - mirror:// uri branch (breaks ABI in debian, not merged yet)
 +    - apport failure reporting
 +    - show warning on apt-get source with 'Vcs-' header
 +    - proxy detection from gconf in apt.cron
 +  
  apt (0.7.14) unstable; urgency=low
  
    [ Christian Perrier ]
@@@ -744,7 -608,7 +872,7 @@@ apt (0.7.12) unstable; urgency=lo
    * apt-pkg/deb/dpkgpm.cc:
      - merged patch from Kees Cook to fix anoying upper-case display
        on amd64 in sbuild
 -  * apt-pkg/algorithms.cc: 
 +  * apt-pkg/algorithms.cc:
      - add APT::Update::Post-Invoke-Success script slot
      - Make the breaks handling use the kill list. This means, that a
        Breaks: Pkg (<< version) may put Pkg onto the remove list.
      - French updated.
      - Bulgarian updated. Closes: #448492
      - Galician updated. Closes: #476839
 -  
 +
    [ Daniel Burrows ]
    * apt-pkg/depcache.cc:
      - Patch MarkInstall to follow currently satisfied Recommends even
      - Add missing Build-Depends-Indep on xsltproc, docbook-xsl, and xmlto.
  
   -- Daniel Burrows <dburrows@debian.org>  Sat, 26 Apr 2008 12:24:35 -0700
 -
 +  
  apt (0.7.11) unstable; urgency=critical
    
    [ Raise urgency to critical since it fixes a critical but for Debian
@@@ -860,6 -724,7 +988,6 @@@ apt (0.7.10) unstable; urgency=lo
      - Simplified Chinese updated. Closes: #458039
      - French updated.
      - Norwegian BokmÃ¥l updated. Closes: #457917
 -
    [ Michael Vogt ]
    * debian/rules
      - fix https install location
      - make the authentication download code more robust against
        servers/proxies with broken If-Range implementations
    * apt-pkg/packagemanager.{cc,h}:
 -    - propergate the Immediate flag to make hitting the 
 +    - propergate the Immediate flag to make hitting the
        "E: Internal Error, Could not perform immediate configuration (2)"
        harder
    * debian/control:
      - support lzma data members
    * ftparchive/multicompress.cc:
      - support lzma output
 -  
 +
    [ Daniel Burrows ]
    * apt-pkg/contrib/configuration.cc:
      - if RootDir is set, then FindFile and FindDir will return paths
    [ Christian Perrier ]
    * Fix wording for "After unpacking...". Thanks to Michael Gilbert
      for the patch. Closes: #260825
 +  
 + -- Michael Vogt <michael.vogt@ubuntu.com>  Thu, 03 Jan 2008 11:31:45 +0100
  
 - -- Michael Vogt <mvo@debian.org>  Mon, 07 Jan 2008 21:40:47 +0100
 +apt (0.7.9ubuntu17) hardy-proposed; urgency=low
  
 -apt (0.7.9) unstable; urgency=low
 +  * apt-pkg/acquire-item.cc:
 +    - fix signaure removal on transient network failures LP: #220627
 +      (thanks to Scott James Remnant)
  
 -  [ Christian Perrier ]
 -  * Add several languages to LINGUAS and, therefore, really ship the relevant
 -    translation:
 -    Arabic, Dzongkha, Khmer, Marathi, Nepali, Thai
 -    Thanks to Theppitak Karoonboonyanan for checking this out. Closes: #448321
 + -- Michael Vogt <michael.vogt@ubuntu.com>  Tue, 22 Apr 2008 16:32:49 +0200
  
 -  [ Program translations ]
 -    - Korean updated. Closes: #448430
 -    - Galician updated. Closes: #448497
 -    - Swedish updated.
 +apt (0.7.9ubuntu16) hardy; urgency=low
  
 -  [ Otavio Salvador ]
 -  * Fix configure script to check for CURL library and headers presense.
 -  * Applied patch from Brian M. Carlson <sandals@crustytoothpaste.ath.cx>
 -    to add backward support for arches that lacks pselect support,
 -    closes: #448406.
 -  * Umount CD-ROM when calling apt-cdrom ident, except when called with
 -    -m, closes: #448521.
 +  * cmdline/apt-key:
 +    - only check against master-keys in net-update to not break
 +      custom CDs (thanks to Colin Watson)
  
 - -- Otavio Salvador <otavio@debian.org>  Wed, 31 Oct 2007 13:37:26 -0200
 + -- Michael Vogt <michael.vogt@ubuntu.com>  Tue, 08 Apr 2008 14:17:14 +0200
  
 -apt (0.7.8) unstable; urgency=low
 +apt (0.7.9ubuntu15) hardy; urgency=low
  
 -  * Applied patch from Daniel Leidert <daniel.leidert@wgdd.de> to fix
 -    APT::Acquire::Translation "none" support, closes: #437523.
 -  * Applied patch from Daniel Burrows <dburrows@debian.org> to add support
 -    for the Homepage field (ABI break), closes: #447970.
 -  * Applied patch from Frans Pop <elendil@planet.nl> to fix a trailing
 -    space after cd label, closes: #448187.
 +  * cmdline/apt-get.cc:
 +    - do two passes when installing tasks, first ignoring dependencies,
 +      then resolving them and run the problemResolver at the end
 +      so that it can correct any missing dependencies. This should
 +      fix livecd building for kubuntu (thanks to Jonathan Riddell 
 +      for reporting the problem)
  
 - -- Otavio Salvador <otavio@debian.org>  Fri, 26 Oct 2007 18:20:13 -0200
 + -- Michael Vogt <michael.vogt@ubuntu.com>  Thu, 13 Mar 2008 23:25:45 +0100
  
 -apt (0.7.7) unstable; urgency=low
 +apt (0.7.9ubuntu14) hardy; urgency=low
 +
 +  * cmdline/apt-get.cc:
 +    - fix incorrect help output for -f (LP: #57487)
 +    - run the problemResolver after a task was installed
 +      so that it can correct any missing dependencies
 +  * typo fixes (LP: #107960)
 +
 + -- Michael Vogt <michael.vogt@ubuntu.com>  Tue, 11 Mar 2008 21:46:07 +0100
 +
 +apt (0.7.9ubuntu13) hardy; urgency=low
 +
 +  [ Lionel Porcheron ]
 +  * debian/apt.cron.daily:
 +    - only call gconftool if gcontool is installed (LP: #194281)
  
    [ Michael Vogt ]
 -  * apt-inst/contrib/extracttar.cc:
 -    - fix fd leak for zero size files (thanks to Bill Broadley for
 -      reporting this bug)
 -  * apt-pkg/acquire-item.cc:
 -    - remove zero size files on I-M-S hit
 -  * methods/https.cc:
 -    - only send LastModified if we actually have a file
 -    - send range request with if-range 
 -    - delete failed downloads
 -    - delete zero size I-M-S hits
 -  * apt-pkg/deb/dpkgpm.{cc,h}:
 -    - merged dpkg-log branch, this lets you specify a 
 -      Dir::Log::Terminal file to log dpkg output to
 -      (ABI break)
 -    - fix parse error when dpkg sends unexpected data
 -  * merged apt--sha256 branch to fully support the new
 -    sha256 checksums in the Packages and Release files
 -    (ABI break)
 -  * apt-pkg/pkgcachegen.cc:
 -    - increase default mmap size
 -  * tests/local-repo:
 -    - added local repository testcase
 -  * apt-pkg/acquire.cc:
 -    - increase MaxPipeDepth for the internal worker<->method
 -      communication to 1000 for the debtorrent backend
 -  * make apt build with g++ 4.3
 -  * fix missing SetExecClose() call when the status-fd is used
 +  * doc/apt_preferences.5.xml:
 +    - fix typo (LP: #150900)
 +  * doc/example/sources.list:
 +    - updated for hardy (LP: #195879)
    * debian/apt.cron.daily:
 -    - move unattended-upgrade before apt-get autoclean
 -  * fix "purge" commandline argument, closes: #133421
 -    (thanks to Julien Danjou for the patch)
 +    - sleep random amount of time (default within 0-30min) before
 +      starting the upate to hit the mirrors less hard
 +
 + -- Michael Vogt <michael.vogt@ubuntu.com>  Tue, 04 Mar 2008 15:35:09 +0100
 +
 +apt (0.7.9ubuntu12) hardy; urgency=low
 +
 +  * debian/apt.cron.daily:
 +    - use admin user proxy settings
    * cmdline/apt-get.cc:
 -    - do not change the auto-installed information if a package
 -      is reinstalled
 +    - fix task installation (thanks to Colin Watson)
 +
 + -- Michael Vogt <michael.vogt@ubuntu.com>  Thu, 21 Feb 2008 15:07:44 +0100
 +
 +apt (0.7.9ubuntu11) hardy; urgency=low
 +
 +  * apt-pkg/algorithms.cc: 
 +    - add APT::Update::Post-Invoke-Success script slot
 +      (LP: #188127)
 +
 + -- Michael Vogt <michael.vogt@ubuntu.com>  Thu, 10 Jan 2008 12:06:12 +0100
 +
 +apt (0.7.9ubuntu10) hardy; urgency=low
 +
 +  * cmdline/apt-key:
 +    - add "net-update" command that fetches the 
 +      ubuntu-archive-keyring.gpg and add keys from it that are 
 +      signed by the ubuntu-master-keyring.gpg 
 +      (apt-archive-key-signatures spec)
 +  * debian/apt.cron.daily:
 +    - add apt-key net-update to the nightly cron job
 +
 + -- Michael Vogt <michael.vogt@ubuntu.com>  Wed, 13 Feb 2008 15:50:28 +0100
 +
 +apt (0.7.9ubuntu9) hardy; urgency=low
 +
 +  * fix FTBFS due to incorrect intltool build-depends
 +
 + -- Michael Vogt <michael.vogt@ubuntu.com>  Mon, 11 Feb 2008 16:04:37 +0100
 +
 +apt (0.7.9ubuntu8) hardy; urgency=low
 +
 +  * share/apt-auth-failure.note:
 +    - show update-notifier note if the nightly update fails with a
 +      authentication failure (apt-authentication-reliability spec)
 +
 + -- Michael Vogt <michael.vogt@ubuntu.com>  Mon, 11 Feb 2008 14:04:56 +0100
 +
 +apt (0.7.9ubuntu7) hardy; urgency=low
 +
 +  * methods/connect.cc:
 +    - remember hosts with Resolve failures or connect Timeouts
 +      see https://wiki.ubuntu.com/NetworklessInstallationFixes
 +  * cmdlines/apt-key:
 +    - fix bug in the new apt-key update code that imports only
 +      keys signed with the master key (thanks to cjwatson)
 +
 + -- Michael Vogt <michael.vogt@ubuntu.com>  Fri, 08 Feb 2008 11:38:35 +0100
 +
 +apt (0.7.9ubuntu6) hardy; urgency=low
 +
 +  * cmdline/apt-key:
 +    - add support for a master-keyring that contains signing keys
 +      that can be used to sign the archive signing keys. This should
 +      make key-rollover easier.
 +  * apt-pkg/deb/dpkgpm.cc:
 +    - merged patch from Kees Cook to fix anoying upper-case display
 +      on amd64 in sbuild
 +  * apt-pkg/algorithms.cc: 
 +    - add APT::Update::Post-Invoke-Success script slot
 +    - Make the breaks handling use the kill list. This means, that a
 +      Breaks: Pkg (<< version) may put Pkg onto the remove list.
 +  * apt-pkg/deb/dpkgpm.cc:
 +    - add APT::Apport::MaxReports to limit the maximum number
 +      of reports generated in a single run (default to 3)
 +  * apt-pkg/deb/debmetaindex.cc:
 +    - add missing "Release" file uri when apt-get update --print-uris
 +      is run
 +
 + -- Michael Vogt <michael.vogt@ubuntu.com>  Mon, 04 Feb 2008 14:28:02 +0100
 +
 +apt (0.7.9ubuntu5) hardy; urgency=low
 +
 +  * Merged apt-authentication-reliabilty branch. This means
 +    that apt will refuse to update and use the old lists if
 +    the authentication of a repository that used to be 
 +    authenticated fails. See
 +    https://wiki.ubuntu.com/AptAuthenticationReliability
 +    for more details.
 +
 + -- Michael Vogt <michael.vogt@ubuntu.com>  Wed, 16 Jan 2008 10:36:10 +0100
 +
 +apt (0.7.9ubuntu4) hardy; urgency=low
 +
 +  * apt-pkg/algorithms.cc:
 +    - Since APT::Get::List-Cleanup and APT::List-Cleanup both default to
 +      true, the effect of the compatibility code was to require both of them
 +      to be set to false in order to disable list cleanup; this broke the
 +      installer. Instead, disable list cleanup if either of them is set to
 +      false.
 +
 + -- Colin Watson <cjwatson@ubuntu.com>  Wed, 09 Jan 2008 22:34:37 +0000
 +
 +apt (0.7.9ubuntu3) hardy; urgency=low
 +
 +  * merged the apt--DoListUpdate branch, this provides a common interface
 +    for "apt-get update" like operations for the frontends and also provides
 +    hooks to run stuff in APT::Update::{Pre,Post}-Invoke
 +
 + -- Michael Vogt <michael.vogt@ubuntu.com>  Mon, 07 Jan 2008 19:02:11 +0100
 +
 +apt (0.7.9ubuntu2) hardy; urgency=low
 +
 +  [ Otavio Salvador ]
 +  * Applied patch from Aurelien Jarno <aurel32@debian.org> to fix building
 +    with newest dpkg-shlibdeps changing the packaging building order and a
 +    patch from Robert Millan <rmh@aybabtu.com> to fix parallel building,
 +    closes: #452862.
 +  * Applied patch from Alexander Winston <alexander.winston@comcast.net>
 +    to use 'min' as symbol for minute, closes: #219034.
 +  * Applied patch from Amos Waterland <apw@us.ibm.com> to allow apt to
 +    work properly in initramfs, closes: #448316.
 +  * Applied patch from Robert Millan <rmh@aybabtu.com> to make apt-key and
 +    apt-get to ignore time conflicts, closes: #451328.
 +  * Applied patch from Peter Eisentraut <peter_e@gmx.net> to fix a
 +    grammatical error ("manual installed" -> "manually installed"),
 +    closes: #438136.
 +  * Fix cron.daily job to not call fail if apt isn't installed, closes:
 +    #443286.
 +  
 +  [ Daniel Burrows ]
 +  * apt-pkg/contrib/configuration.cc:
 +    - if RootDir is set, then FindFile and FindDir will return paths
 +      relative to the directory stored in RootDir, closes: #456457.
 +
 +  [ Christian Perrier ]
 +  * Fix wording for "After unpacking...". Thans to Michael Gilbert
 +    for the patch. Closes: #260825
 +
 +  [ Program translations ]
 +    - Vietnamese updated. Closes: #453774
 +    - Japanese updated. Closes: #456909
 +    - French updated.
 +
 +  [ Michael Vogt ]
 +  * apt-pkg/packagemanager.{cc,h}:
 +    - propergate the Immediate flag to make hitting the 
 +      "E: Internal Error, Could not perform immediate configuration (2)"
 +      harder. (LP: #179247)
 +  * debian/apt.conf.daily:
 +    - print warning if the cache can not be locked (closes: #454561),
 +      thanks to Bastian Kleineidam
 +  * debian/control:
 +    - build against libdb-dev (instead of libdb4.4-dev)
 +
 + -- Michael Vogt <michael.vogt@ubuntu.com>  Thu, 03 Jan 2008 11:31:45 +0100
 +
 +apt (0.7.9ubuntu1) hardy; urgency=low
 +
 +  * merged from http://bzr.debian.org/apt/apt/debian-sid/, remaining
 +    changes:
 +    - mirror download method (pending merge with debian)
 +    - no pdiff download by default (unsuitable for ubuntu)
 +    - no recommends-by-default yet
 +    - add "Original-Maintainer" field to tagfile
 +    - show warning on apt-get source if the package is maintained
 +      in a VCS (pedinging merge with debian)
 +    - use ubuntu-archive keyring instead of debians one
 +    - support metapackages section for autoremoval
 +    - debian maintainer field change
 +    - send ubuntu string in user-agent
 +  
 +  * Changes from the debian-sid bzr branch (but not uploaded to debian
 +    yet):
 +  
 +  [ Otavio Salvador ]
 +  * Applied patch from Mike O'Connor <stew@vireo.org> to add a manpage to
 +    apt-mark, closes: #430207.
 +  * Applied patch from Andrei Popescu <andreimpopescu@gmail.com> to add a
 +    note about some frontends in apt.8 manpage, closes: #438545.
 +  * Applied patch from Aurelien Jarno <aurel32@debian.org> to avoid CPU
 +    getting crazy when /dev/null is redirected to stdin (which breaks
 +    buildds), closes: #452858.
 +
 +  [ Program translations ]
 +    - Basque updated. Closes: #453088
 +
 +  [ Michael Vogt ]
 +  * debian/rules
 +    - fix https install location
 +  * methods/gpgv.cc:
 +    - remove cruft code that caused timestamp/I-M-S issues
 +  * ftparchive/contents.cc:
 +    - fix error output
 +  * methods/mirror.{cc,h}:
 +    - only update mirror list on IndexFile updates 
 +  * apt-pkg/acquire-item.{cc,h}:
 +    - make the authentication download code more robust against
 +      servers/proxies with broken If-Range implementations
 +  * debian/control:
 +    - build against libdb-dev (instead of libdb4.4-dev)
 +  * merged the apt--DoListUpdate branch, this provides a common interface
 +    for "apt-get update" like operations for the frontends and also provides
 +    hooks to run stuff in APT::Update::{Pre,Post}-Invoke
 +
 +  [ Chris Cheney ]
 +  * ftparchive/contents.cc:
 +    - support lzma data members
 +  * ftparchive/multicompress.cc:
 +    - support lzma output
 +
 + -- Michael Vogt <michael.vogt@ubuntu.com>  Thu, 13 Dec 2007 14:46:27 +0100
 +
 +apt (0.7.9) unstable; urgency=low
 +
 +  [ Christian Perrier ]
 +  * Add several languages to LINGUAS and, therefore, really ship the relevant
 +    translation:
 +    Arabic, Dzongkha, Khmer, Marathi, Nepali, Thai
 +    Thanks to Theppitak Karoonboonyanan for checking this out. Closes: #448321
 +
 +  [ Program translations ]
 +    - Korean updated. Closes: #448430
 +    - Galician updated. Closes: #448497
 +    - Swedish updated.
 +
 +  [ Otavio Salvador ]
 +  * Fix configure script to check for CURL library and headers presense.
 +  * Applied patch from Brian M. Carlson <sandals@crustytoothpaste.ath.cx>
 +    to add backward support for arches that lacks pselect support,
 +    closes: #448406.
 +  * Umount CD-ROM when calling apt-cdrom ident, except when called with
 +    -m, closes: #448521.
 +
 + -- Otavio Salvador <otavio@debian.org>  Wed, 31 Oct 2007 13:37:26 -0200
 +
 +apt (0.7.8) unstable; urgency=low
 +
 +  * Applied patch from Daniel Leidert <daniel.leidert@wgdd.de> to fix
 +    APT::Acquire::Translation "none" support, closes: #437523.
 +  * Applied patch from Daniel Burrows <dburrows@debian.org> to add support
 +    for the Homepage field (ABI break), closes: #447970.
 +  * Applied patch from Frans Pop <elendil@planet.nl> to fix a trailing
 +    space after cd label, closes: #448187.
 +
 + -- Otavio Salvador <otavio@debian.org>  Fri, 26 Oct 2007 18:20:13 -0200
 +
 +apt (0.7.7) unstable; urgency=low
 +
 +  [ Michael Vogt ]
 +  * apt-inst/contrib/extracttar.cc:
 +    - fix fd leak for zero size files (thanks to Bill Broadley for
 +      reporting this bug)
 +  * apt-pkg/acquire-item.cc:
 +    - remove zero size files on I-M-S hit
 +  * methods/https.cc:
 +    - only send LastModified if we actually have a file
 +    - send range request with if-range 
 +    - delete failed downloads
 +    - delete zero size I-M-S hits
 +  * apt-pkg/deb/dpkgpm.{cc,h}:
 +    - merged dpkg-log branch, this lets you specify a 
 +      Dir::Log::Terminal file to log dpkg output to
 +      (ABI break)
 +    - fix parse error when dpkg sends unexpected data
 +  * merged apt--sha256 branch to fully support the new
 +    sha256 checksums in the Packages and Release files
 +    (ABI break)
 +  * apt-pkg/pkgcachegen.cc:
 +    - increase default mmap size
 +  * tests/local-repo:
 +    - added local repository testcase
 +  * apt-pkg/acquire.cc:
 +    - increase MaxPipeDepth for the internal worker<->method
 +      communication to 1000 for the debtorrent backend
 +  * make apt build with g++ 4.3
 +  * fix missing SetExecClose() call when the status-fd is used
 +  * debian/apt.cron.daily:
 +    - move unattended-upgrade before apt-get autoclean
 +  * fix "purge" commandline argument, closes: #133421
 +    (thanks to Julien Danjou for the patch)
 +  * cmdline/apt-get.cc:
 +    - do not change the auto-installed information if a package
 +      is reinstalled
    * apt-pkg/acquire-item.cc:
      - fix crash in diff acquire code
    * cmdline/apt-mark:
   
   -- Michael Vogt <mvo@debian.org>  Tue, 23 Oct 2007 14:58:03 +0200
  
 -apt (0.7.6) unstable; urgency=low
 +apt (0.7.6ubuntu14.1) gutsy-proposed; urgency=low
  
 -  * Applied patch from Aurelien Jarno <aurel32@debian.org> to fix wrong
 -    directory downloading on non-linux architectures (closes: #435597)
 +  [ Michael Vogt ]
 +  * apt-pkg/deb/dpkgpm.{cc,h}:
 +    - give up timeslice on EIO error in read from master terminal
 +  * debian/apt.cron.daily:
 +    - only run the cron job if apt-get check succeeds (LP: #131719)
  
 - -- Otavio Salvador <otavio@debian.org>  Wed, 01 Aug 2007 19:49:51 -0300
 +  [ Martin Emrich ]  
 +  * apt-pkg/deb/dpkgpm.{cc,h}:
 +    - rewrite dpkgpm.cc to use pselect() instead of select()
 +      to block signals during select() (LP: #134858)
 + 
 + -- Michael Vogt <michael.vogt@ubuntu.com>  Sat, 20 Oct 2007 07:51:12 +0200
 +
 +apt (0.7.6ubuntu14) gutsy; urgency=low
 +
 +  * apt-pkg/deb/dpkgpm.cc:
 +    - fix resource leak (LP: #148806) 
 +
 + -- Michael Vogt <michael.vogt@ubuntu.com>  Mon, 15 Oct 2007 20:57:44 +0200
 +
 +apt (0.7.6ubuntu13) gutsy; urgency=low
 +
 +  * apt-pkg/deb/dpkgpm.cc:
 +    - fix crash in WriteApportReport (LP: #144537)
 +  * apt-pkg/acquire-item.cc
 +    - fix disappearing local Packages.gz file (LP: #131166)
 +  * methods/https.cc:
 +    - fix off-by-one error I-M-S handling
 +    - cleanup after I-M-S hit
 +
 + -- Michael Vogt <michael.vogt@ubuntu.com>  Tue, 09 Oct 2007 01:48:26 +0200
 +
 +apt (0.7.6ubuntu12) gutsy; urgency=low
 +
 +  [ Michael Vogt ]
 +  * cmdline/apt-mark:
 +    - Fix chmoding after have renamed the extended-states file
 +      (thanks to Laurent Bigonville, LP: #140019)
 +  * apt-pkg/deb/debmetaindex.cc: comparison with string literal results
 +      in unspecified behaviour;
 +  * Reset curl options and timestamp between downloaded files. Thanks to
 +    Ryan Murray <rmurray@debian.org> for the patch
 +
 +  [Paul Sladen]
 +  * Have 'cron.daily/apt' send D-Bus doesn't exist error messages
 +    to the bit bucket.  Thanks to 'dasdda'.  (LP: #115397)
 +
 + -- Michael Vogt <michael.vogt@ubuntu.com>  Wed, 03 Oct 2007 02:17:45 +0200
 +
 +apt (0.7.6ubuntu11) gutsy; urgency=low
 +
 +  * apt-pkg/contrib/mmap.cc:
 +    - don't fail if msync() returns > 0 (LP: #144001)
 +
 + -- Colin Watson <cjwatson@ubuntu.com>  Sat, 22 Sep 2007 21:39:29 +0100
 +
 +apt (0.7.6ubuntu10) gutsy; urgency=low
 +
 +  * apt-pkg/deb/dpkgpm.cc:
 +    - fix parse error when dpkg sends unexpected data
 +
 + -- Michael Vogt <michael.vogt@ubuntu.com>  Tue, 18 Sep 2007 17:25:09 +0100
 +
 +apt (0.7.6ubuntu9) gutsy; urgency=low
 +
 +  * apt-pkg/deb/dpkgpm.cc:
 +    - fix progress reporting precent calculation (LP: #137798)
 +  * make apt build with g++ 4.3
 +  * fix missing SetExecClose() call when the status-fd is used
 +    (LP: #136767)
 +  * debian/apt.cron.daily:
 +    - move unattended-upgrade before apt-get autoclean
 +  * fix "purge" commandline argument, closes LP: #125733
 +    (thanks to Julien Danjou for the patch)
 +  * cmdline/apt-get.cc:
 +    - do not change the auto-installed information if a package
 +      is reinstalled (LP: #139448)
 +  
 + -- Michael Vogt <michael.vogt@ubuntu.com>  Tue, 11 Sep 2007 20:55:00 +0200
 +
 +apt (0.7.6ubuntu8) gutsy; urgency=low
 +
 +  * apt-pkg/deb/dpkgpm.{cc,h}:
 +    - fix bug in dpkg log writing when a signal is caught during
 +      select() (LP: #134858)
 +    - write end marker in the log as well
 +
 + -- Michael Vogt <michael.vogt@ubuntu.com>  Wed, 05 Sep 2007 15:03:46 +0200
 +
 +apt (0.7.6ubuntu7) gutsy; urgency=low
 +
 +  * reupload to fix FTBFS
 +
 + -- Michael Vogt <michael.vogt@ubuntu.com>  Thu, 16 Aug 2007 19:44:20 +0200
 +
 +apt (0.7.6ubuntu6) gutsy; urgency=low
 +
 +  * dpkg-triggers: Deal properly with new package states.
 +
 + -- Ian Jackson <iwj@ubuntu.com>  Wed, 15 Aug 2007 20:44:37 +0100
 +
 +apt (0.7.6ubuntu5) UNRELEASED; urgency=low
 +
 +  * apt-pkg/acquire-item.cc:
 +    - fix file removal on local repo i-m-s hit (LP: #131166)
 +  * tests/local-repo:
 +    - added regression test for this bug
 +
 + -- Michael Vogt <michael.vogt@ubuntu.com>  Thu, 09 Aug 2007 12:34:07 +0200
 +
 +apt (0.7.6ubuntu4) gutsy; urgency=low
 +
 +  * cmdline/apt-get.cc:
 +    - remove YnPrompt when a XS-Vcs- tag is found, improve the
 +      notice (LP: #129575)
 +  * methods/copy.cc:
 +    - take hashes here too
 +  * apt-pkg/acquire-worker.cc:
 +    - only pass on computed hash if we recived one from the method
 +
 + -- Michael Vogt <michael.vogt@ubuntu.com>  Wed, 08 Aug 2007 19:30:29 +0200
 +
 +apt (0.7.6ubuntu3) gutsy; urgency=low
 +
 +  * apt-pkg/deb/dpkgpm.cc:
 +    - fix packagename extraction when writting apport reports
 +  * apt-pkg/pkgcachegen.cc:
 +    - increase default mmap size (LP: #125640)
 +
 + -- Michael Vogt <michael.vogt@ubuntu.com>  Tue, 07 Aug 2007 09:52:00 +0200
 +
 +apt (0.7.6ubuntu2) gutsy; urgency=low
 +
 +  * doc/examples/sources.list:
 +    - change example source to gutsy
 +  * apt-pkg/deb/dpkgpm.cc:
 +    - do not break if no /dev/pts is available
 +
 + -- Michael Vogt <michael.vogt@ubuntu.com>  Mon, 06 Aug 2007 15:17:57 +0200
 +
 +apt (0.7.6ubuntu1) gutsy; urgency=low
 +
 +  [ Michael Vogt ]
 +  * apt-inst/contrib/extracttar.cc:
 +    - fix fd leak for zero size files (thanks to Bill Broadley for
 +      reporting this bug)
 +  * apt-pkg/acquire-item.cc:
 +    - remove zero size files on I-M-S hit
 +  * methods/https.cc:
 +    - only send LastModified if we actually have a file
 +    - send range request with if-range 
 +    - delete failed downloads
 +    (thanks to Thom May for his help here)
 +    - delete zero size I-M-S hits
 +  * apt-pkg/deb/dpkgpm.{cc,h}:
 +    - merged dpkg-log branch, this lets you specify a 
 +      Dir::Log::Terminal file to log dpkg output to
 +    (ABI break)
 +    - when writting apport reports, attach the dpkg
 +      terminal log too
 +  * merged apt--sha256 branch to fully support the new
 +    sha256 checksums in the Packages and Release files
 +    (ABI break)
 +  * apt-pkg/pkgcachegen.cc:
 +    - increase default mmap size
 +  * tests/local-repo:
 +    - added local repository testcase
 +  * make apt build with g++ 4.3
 +  * fix missing SetExecClose() call when the status-fd is used
 +  * debian/apt.cron.daily:
 +    - move unattended-upgrade before apt-get autoclean
 +  * fix "purge" commandline argument, closes: #133421
 +    (thanks to Julien Danjou for the patch)
 +  * cmdline/apt-get.cc:
 +    - do not change the auto-installed information if a package
 +      is reinstalled
 +  * cmdline/apt-mark:
 +    - Fix chmoding after have renamed the extended-states file (LP: #140019)
 +      (thanks to Laurent Bigonville)
 +
 +  [ Ian Jackson ]
 +  * dpkg-triggers: Deal properly with new package states.
 +
 + -- Michael Vogt <michael.vogt@ubuntu.com>  Thu, 02 Aug 2007 11:55:54 +0200
  
  apt (0.7.6) unstable; urgency=low
  
@@@ -1501,14 -924,6 +1629,14 @@@ apt (0.7.5) unstable; urgency=lo
  
   -- Otavio Salvador <otavio@ossystems.com.br>  Wed, 25 Jul 2007 20:16:46 -0300
  
 +apt (0.7.4ubuntu1) gutsy; urgency=low
 +
 +  * debian/apt.conf.ubuntu, apt.conf.autoremove:
 +    - Change metapackages to {restricted,universe,multiverse}/metapackages 
 +      in Install-Recommends-Sections and Never-MarkAuto-Sections
 +
 + -- Michael Vogt <michael.vogt@ubuntu.com>  Thu, 26 Jul 2007 10:42:29 +0200
 +
  apt (0.7.4) unstable; urgency=low
  
    [ Michael Vogt ]
@@@ -1568,90 -983,6 +1696,90 @@@ apt (0.7.3) unstable; urgency=lo
            which disappeared from the BZR repositories
  
   -- Michael Vogt <mvo@debian.org>  Sun, 01 Jul 2007 12:31:29 +0200
 +  
 +apt (0.7.2ubuntu7) gutsy; urgency=low
 +
 +  * fix build-dependencies 
 +  * fixes in the auto-mark code (thanks to Daniel
 +    Burrows)
 +
 + -- Michael Vogt <michael.vogt@ubuntu.com>  Mon,  9 Jul 2007 19:02:54 +0200
 +
 +apt (0.7.2ubuntu6) gutsy; urgency=low
 +
 +  [ Michael Vogt]
 +  * cmdline/apt-get.cc:
 +    - make the XS-Vcs-$foo warning more copy'n'paste
 +      friendly (thanks to Matt Zimmerman)
 +    - ignore the Vcs-Browser tag (Fixes LP: #121770)
 +  * debian/apt.conf.autoremove:
 +    - added "linux-ubuntu-modules" to APT::NeverAutoRemove
 +
 +  [ Sarah Hobbs ]
 +  * Change metapackages to *metapackages in Install-Recommends-Section
 +    and Never-MarkAuto-Section of debian/apt.conf.autoremove, so that
 +    the Recommends of metapackages in universe and multiverse will get
 +    installed.
 +  * Also make this change in doc/examples/configure-index.
 +  * Added a Build Dependancies of automake, docbook-xsl, xsltproc, xmlto,
 +    docbook to fix FTBFS.
 +  * Added in previous changelog entries, as those who uploaded did not
 +    actually commit to Bzr.
 +
 + -- Sarah Hobbs <hobbsee@ubuntu.com>  Mon, 09 Jul 2007 01:15:57 +1000
 +
 +apt (0.7.2ubuntu5) gutsy; urgency=low
 +
 +  * Rerun autoconf to fix the FTBFS.
 +
 + -- Michael Bienia <geser@ubuntu.com>  Fri, 06 Jul 2007 19:17:33 +0200
 +
 +apt (0.7.2ubuntu4) gutsy; urgency=low
 +
 +  * Rebuild for the libcurl4 -> libcurl3 transition mess.
 +
 + -- Steve Kowalik <stevenk@ubuntu.com>  Fri,  6 Jul 2007 12:44:05 +1000
 +
 +apt (0.7.2ubuntu3) gutsy; urgency=low
 +
 +  * cmdline/apt-get.cc:
 +    - fix InstallTask code when a pkgRecord ends 
 +      with a single '\n' (thanks to Soren Hansen for reporting)
 +
 + -- Michael Vogt <michael.vogt@ubuntu.com>  Wed, 27 Jun 2007 13:33:38 +0200
 +
 +apt (0.7.2ubuntu2) gutsy; urgency=low
 +
 +  * fixed compile errors with g++ 4.3 (thanks to 
 +    Daniel Burrows, closes: #429378)
 +  * fix FTFBFS by changing build-depends to
 +    libcurl4-gnutls-dev (closes: #428363)
 +
 + -- Michael Vogt <michael.vogt@ubuntu.com>  Tue, 19 Jun 2007 13:47:03 +0200
 +
 +apt (0.7.2ubuntu1) gutsy; urgency=low
 +
 +  * apt-pkg/deb/dpkgpm.cc:
 +    - apport integration added, this means that a apport
 +      report is written on dpkg failures
 +  * cmdline/apt-get.cc:
 +    - merged http://people.ubuntu.com/~mvo/bzr/apt/xs-vcs-bzr/
 +      this will warn when Vcs- headers are found on apt-get source
 +      (Fixes LP:#115959)
 +  * merged from debian/unstable, remaining changes:
 +    - maintainer field changed
 +    - merged the apt--mirror branch 
 +      http://people.ubuntu.com/~mvo/bzr/apt/apt--mirror/
 +    - apport reporting on package install/upgrade/remove failure
 +    - support for "Originial-Maintainer" field
 +    - merged apt--xs-vcs-bzr branch
 +      (http://people.ubuntu.com/~mvo/bzr/apt/xs-vcs-bzr/)
 +    - use ubuntu archive keyring by default
 +    - debian/apt.conf.autoremove
 +      + install recommands for section "metapackages"
 +      + do not mark direct dependencies of "metapackages" as autoremoved
 +
 + -- Michael Vogt <michael.vogt@ubuntu.com>  Thu, 14 Jun 2007 10:38:36 +0200
  
  apt (0.7.2-0.1) unstable; urgency=low
  
@@@ -1708,136 -1039,45 +1836,136 @@@ apt (0.7.1) experimental; urgency=lo
      - use clog for all debugging
      - only increase the score of installed applications if they 
        are not obsolete 
 -    - fix resolver bug on removal triggered by weak-dependencies 
 -      with or-groups
 -  * methods/http.cc:
 -    - send apt version in User-Agent
 -  * apt-pkg/deb/debrecords.cc:
 -    - fix SHA1Hash() return value
 -  * apt-pkg/cdrom.cc:
 -    - only unmount if APT::CDROM::NoMount is false
 -  * methods/cdrom.cc:  
 -    - only umount if it was mounted by the method before
 -  * po/gl.po:
 -    - fix error translation that causes trouble to lsb_release
 -  * apt-pkg/acquire-item.cc:
 -    - if decompression of a index fails, delete the index 
 -  * apt-pkg/acquire.{cc,h}:
 -    - deal better with duplicated sources.list entries (avoid
 -      double queuing of  URLs) - this fixes hangs in bzip/gzip
 -  * merged from Christian Perrier:
 -    * mr.po: New Marathi translation  Closes: #416806
 -    * zh_CN.po: Updated by Eric Pareja  Closes: #416822
 -    * tl.po: Updated by Eric Pareja   Closes: #416638
 -    * gl.po: Updated by Jacobo Tarrio
 -             Closes: #412828
 -    * da.po: Updated by Claus Hindsgaul
 -             Closes: #409483
 -    * fr.po: Remove a non-breakable space for usability
 -             issues. Closes: #408877
 -    * ru.po: Updated Russian translation. Closes: #405476
 -    * *.po: Unfuzzy after upstream typo corrections
 -    * vi.po: Updated to 515t. Closes: #426976
 -    * eu.po: Updated to 515t. Closes: #423766
 -    * pt.po: 515t. Closes: #423111
 -    * fr.po: Updated by Christian Perrier
 -    * Update all PO and the POT. Gives 513t2f for formerly
 -      complete translations
 -  * apt-pkg/policy.cc:
 -    - allow multiple packages (thanks to David Foerster)
 +    - fix resolver bug on removal triggered by weak-dependencies 
 +      with or-groups
 +  * methods/http.cc:
 +    - send apt version in User-Agent
 +  * apt-pkg/deb/debrecords.cc:
 +    - fix SHA1Hash() return value
 +  * apt-pkg/cdrom.cc:
 +    - only unmount if APT::CDROM::NoMount is false
 +  * methods/cdrom.cc:  
 +    - only umount if it was mounted by the method before
 +  * po/gl.po:
 +    - fix error in translation that causes trouble to lsb_release 
 +      (LP#79165)
 +  * apt-pkg/acquire-item.cc:
 +    - if decompression of a index fails, delete the index 
 +  * apt-pkg/acquire.{cc,h}:
 +    - deal better with duplicated sources.list entries (avoid
 +      double queuing of  URLs) - this fixes hangs in bzip/gzip
 +      (LP#102511)
 +  * Fix broken use of awk in apt-key that caused removal of the wrong keys
 +    from the keyring. Closes: #412572
 +  * merged from Christian Perrier:
 +    * mr.po: New Marathi translation  Closes: #416806
 +    * zh_CN.po: Updated by Eric Pareja  Closes: #416822
 +    * tl.po: Updated by Eric Pareja   Closes: #416638
 +    * gl.po: Updated by Jacobo Tarrio
 +             Closes: #412828
 +    * da.po: Updated by Claus Hindsgaul
 +             Closes: #409483
 +    * fr.po: Remove a non-breakable space for usability
 +             issues. Closes: #408877
 +    * ru.po: Updated Russian translation. Closes: #405476
 +    * *.po: Unfuzzy after upstream typo corrections
 +    * vi.po: Updated to 515t. Closes: #426976
 +    * eu.po: Updated to 515t. Closes: #423766
 +    * pt.po: 515t. Closes: #423111
 +    * fr.po: Updated by Christian Perrier
 +    * Update all PO and the POT. Gives 513t2f for formerly
 +      complete translations
 +  * apt-pkg/policy.cc:
 +    - allow multiple packages (thanks to David Foerster)
 +
 + -- Michael Vogt <mvo@debian.org>  Wed,  2 May 2007 13:43:44 +0200
 +
 +apt (0.6.46.4ubuntu10) feisty; urgency=low
 +
 +  * apt-pkg/depcache.cc:
 +    - added "APT::Never-MarkAuto-Section" and consider dependencies 
 +      of packages in this section manual (LP#59893)
 +    - ensure proper permissions in the extended_state file (LP#67037)
 +  * debian/apt.conf.ubuntu:
 +    - added APT::Never-MarkAuto-Section "metapackages" (LP#59893)
 +  * cmdline/apt-get.cc:
 +    - "apt-get install foo" on a already installed package foo will
 +      clean the automatic installed flag (LP#72007)
 +    - do not show packages already marked for removal as auto-installed
 +      (LP#64493)
 +    - applied patch to (optionally) hide the auto-remove information
 +      (thanks to Frode M. Døving) (LP#69148)
 +
 + -- Michael Vogt <michael.vogt@ubuntu.com>  Wed, 14 Mar 2007 13:32:32 +0100
 +
 +apt (0.6.46.4ubuntu9) feisty; urgency=low
 +
 +  * debian/control:
 +    - set XS-Vcs-Bzr header
 +    - Set Ubuntu maintainer address
 +  * apt-pkg/cdrom.cc:
 +    - only unmount if APT::CDROM::NoMount is false
 +    - only umount if it was mounted by the method before
 +  * cmdline/apt-get.cc:
 +    - fix version output in autoremove list (LP#68941)
 +  * apt-pkg/packagemanager.cc:
 +    - do not spin 100% cpu in FixMissing() (LP#84476)
 +  * apt-pkg/indexfile.cc:
 +    - fix problem overwriting APT::Acquire::Translation
 +  * doc/examples/configure-index:
 +    - document APT::Acquire::Translation
 +  
 + -- Michael Vogt <michael.vogt@ubuntu.com>  Tue, 13 Mar 2007 15:24:39 +0100
 +
 +apt (0.6.46.4ubuntu8) feisty; urgency=low
 +
 +  * fix segfault in the pkgRecords destructor
 +  * Bump ABI version
 +  * debian/control:
 +    - make the libcurl3-gnutls-dev versionized (LP#86614)
 +
 + -- Michael Vogt <michael.vogt@ubuntu.com>  Mon, 26 Feb 2007 14:26:33 +0100
 +
 +apt (0.6.46.4ubuntu7) feisty; urgency=low
 +
 +  * Merged the apt--mirror branch. This means that a new 'mirror' 
 +    method is available that will allow dynamic mirror updates.
 +    The sources.list entry looks something like this:
 +    "deb mirror://mirrors.lp.net/get_mirror feisty main restricted"
 +
 +    It also supports error reporting to a configurable url for mirror
 +    problems/failures.
 +  * Bump ABI version
 +
 + -- Michael Vogt <michael.vogt@ubuntu.com>  Tue,  6 Feb 2007 11:38:06 +0100
 +
 +apt (0.6.46.4ubuntu6) feisty; urgency=low
 +
 +  * methods/http.cc:
 +    - send apt version in User-Agent
 +  * apt-pkg/deb/debrecords.cc:
 +    - fix SHA1Hash() return value
 +  * apt-pkg/algorithms.cc:
 +    - fix resolver bug on removal triggered by weak-dependencies 
 +      with or-groups
 +    - fix segfault (lp: #76530)
 +
 + -- Michael Vogt <michael.vogt@ubuntu.com>  Wed, 20 Dec 2006 11:04:36 +0100
 +
 +apt (0.6.46.4ubuntu5) feisty; urgency=low
 +
 +  * added apt-transport-https package to provide a optional
 +    https transport (apt-https spec)
 +
 + -- Michael Vogt <michael.vogt@ubuntu.com>  Tue, 19 Dec 2006 16:23:43 +0100
 +
 +apt (0.6.46.4ubuntu4) feisty; urgency=low
 +  
 +  * apt-pkg/algorithms.cc:
 +    - only increase the score of installed applications if they 
 +      are not obsolete 
  
 - -- Michael Vogt <mvo@debian.org>  Wed,  2 May 2007 13:43:44 +0200
 + -- Michael Vogt <michael.vogt@ubuntu.com>  Mon, 18 Dec 2006 19:39:05 +0100
  
  apt (0.7.0) experimental; urgency=low
  
  
   -- Michael Vogt <mvo@debian.org>  Fri, 12 Jan 2007 20:48:07 +0100
  
 +apt (0.6.46.4ubuntu3) feisty; urgency=low
 +
 +  * apt-pkg/algorithm.cc:
 +    - use clog for all debugging
 +  * apt-pkg/depcache.cc:
 +    - never mark Required package for autoremoval (lp: #75882)
 +
 + -- Michael Vogt <michael.vogt@ubuntu.com>  Mon, 18 Dec 2006 11:56:05 +0100
 +
 +apt (0.6.46.4ubuntu2) feisty; urgency=low
 +
 +  * apt-pkg/algorithms.cc: add missing call to MarkKeep
 +    so that dist-upgrade isn't broken by unsatisfiable Breaks.
 +    (thanks to Ian Jackson)
 +
 + -- Michael Vogt <michael.vogt@ubuntu.com>  Thu,  7 Dec 2006 23:07:24 +0100
 +
 +apt (0.6.46.4ubuntu1) feisty; urgency=low
 +
 +  * merged with debian
 +
 + -- Michael Vogt <michael.vogt@ubuntu.com>  Thu,  7 Dec 2006 12:13:14 +0100
 +
  apt (0.6.46.4-0.1) unstable; urgency=emergency
    
    * NMU
@@@ -1935,26 -1152,6 +2063,26 @@@ apt (0.6.46.3-0.1) unstable; urgency=hi
    
   -- Andreas Barth <aba@not.so.argh.org>  Tue,  5 Dec 2006 10:34:56 +0000
  
 +apt (0.6.46.3ubuntu2) feisty; urgency=low
 +
 +  * apt-pkg/algorithms.cc: add missing call to MarkKeep
 +    so that dist-upgrade isn't broken by unsatisfiable Breaks.
 +
 + -- Ian Jackson <iwj@ubuntu.com>  Thu,  7 Dec 2006 15:46:52 +0000
 +
 +apt (0.6.46.3ubuntu1) feisty; urgency=low
 +
 +  * doc/apt-get.8.xml:
 +    - documented autoremove, thanks to Vladimír Lapá\e%GÄ\8d\e%@ek 
 +      (lp: #62919)
 +  * fix broken i18n in the dpkg progress reporting, thanks to 
 +    Frans Pop and Steinar Gunderson. (closes: #389261)
 +  * po/en_GB.po:
 +    - typo (lp: #61270)
 +  * add apt-secure.8 to "See also" section
 +
 + -- Michael Vogt <michael.vogt@ubuntu.com>  Thu, 23 Nov 2006 07:24:12 +0100
 +
  apt (0.6.46.3) unstable; urgency=low
  
    * apt-pkg/deb/dpkgpm.cc:
@@@ -2019,46 -1216,10 +2147,46 @@@ apt (0.6.46) unstable; urgency=lo
    * 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)
 +    - fix in the TryInstallTask() code to make sure that all package
 +      there are marked manual install (lp: #61684)
 +
 + -- Michael Vogt <michael.vogt@ubuntu.com>  Thu, 28 Sep 2006 00:34:20 +0200
 +
 +apt (0.6.45ubuntu14) edgy; urgency=low
 +
 +  * cmdline/apt-get.cc:
 +    - fix in the TryInstallTask() code to make sure that all package
 +      there are marked manual install (lp: #61684)
 +
 + -- Michael Vogt <michael.vogt@ubuntu.com>  Thu, 28 Sep 2006 00:34:20 +0200
 +
 +apt (0.6.45ubuntu13) edgy; urgency=low
 +
 +  * no-changes upload to make apt rebuild against latest g++ and
 +    fix synaptic FTBFS (see bug: #62461 for details)
 +
 + -- Michael Vogt <michael.vogt@ubuntu.com>  Tue, 26 Sep 2006 22:33:10 +0200
 +
 +apt (0.6.45ubuntu12) edgy; urgency=low
 +
 +  * apt-pkg/depcache.cc:
 +    - fix in the sweep() code, set garbage flag for packages scheduled 
 +      for removal too
 +    - do not change the autoFlag in MarkKeep(), this can lead to suprising
 +      side effects
 +
 + -- Michael Vogt <michael.vogt@ubuntu.com>  Thu, 21 Sep 2006 00:58:24 +0200
 +
 +apt (0.6.45ubuntu11) edgy; urgency=low
 +
 +  * removed "installtask" and change it so that tasknames can be given
 +    with "apt-get install taskname^"
 +  * improve the writeStateFile() code
 +
 + -- Michael Vogt <michael.vogt@ubuntu.com>  Wed, 20 Sep 2006 14:14:24 +0200
 +
 +apt (0.6.45ubuntu10) edgy; urgency=low
 +
    * methods/http.cc:
      - check more careful for incorrect proxy settings (closes: #378868)
    * methods/gzip.cc:
        caseinsensitive (closes: #384182)
      - reverted MMap use in the tagfile because it does not work 
        across pipes (closes: #383487) 
 +  * added "installtask" command
 +  * added new ubuntu specific rewrite rule for "Original-Maintainer"
    
 - -- Michael Vogt <mvo@debian.org>  Thu, 21 Sep 2006 10:25:03 +0200
 + -- 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
  
      * dz.po: New Dzongkha translation: 512t
      * ro.po: Updated to 512t
      * eu.po: Updated
 -    * eu.po: Updated
 -  * fix apt-get dist-upgrade
 -  * fix warning if no /var/lib/apt/extended_states is present
 -  * don't download Translations for deb-src sources.list lines
 -  * apt-pkg/tagfile.cc:
 -    - support not-mmapable files again
  
   -- Michael Vogt <mvo@debian.org>  Thu, 27 Jul 2006 00:52:05 +0200
  
 -apt (0.6.44.2exp1) experimental; urgency=low
 +apt (0.6.44.2ubuntu4) edgy; urgency=low
  
 -  * added support for i18n of the package descriptions
 -  * added support for aptitude like auto-install tracking (a HUGE
 -    HUGE thanks to Daniel Burrows who made this possible) 
 -  * synced with the http://people.debian.org/~mvo/bzr/apt/debian-sid branch
 -  * build from http://people.debian.org/~mvo/bzr/apt/debian-experimental
 +  * Make apt-get dselect-upgrade happy again
  
 - -- Michael Vogt <mvo@debian.org>  Mon,  3 Jul 2006 21:50:31 +0200
 + -- Michael Vogt <michael.vogt@ubuntu.com>  Fri, 21 Jul 2006 11:03:02 +0200
  
 -apt (0.6.44.2) unstable; urgency=low
 +apt (0.6.44.2ubuntu3) edgy; urgency=low
  
 -  * apt-pkg/depcache.cc:
 -    - added Debug::pkgDepCache::AutoInstall (thanks to infinity)
 -  * apt-pkg/acquire-item.cc:
 -    - fix missing chmod() in the new aquire code 
 -      (thanks to Bastian Blank, Closes: #367425)
 -  * merged from 
 -    http://www.perrier.eu.org/debian/packages/d-i/level4/apt-main:
 -    * sk.po: Completed to 512t
 -    * eu.po: Completed to 512t
 -    * fr.po: Completed to 512t
 -    * sv.po: Completed to 512t
 -    * Update all PO and the POT. Gives 506t6f for formerly
 -      complete translations
 +  * 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
  
 - -- Michael Vogt <mvo@debian.org>  Wed, 14 Jun 2006 12:00:57 +0200
 +apt (0.6.44.2) unstable; urgency=low
 +  
 +   * apt-pkg/depcache.cc:
 +     - added Debug::pkgDepCache::AutoInstall (thanks to infinity)
 +   * apt-pkg/acquire-item.cc:
 +     - fix missing chmod() in the new aquire code
 +       (thanks to Bastian Blank, Closes: #367425)
 +   * merged from
 +     http://www.perrier.eu.org/debian/packages/d-i/level4/apt-main:
 +     * sk.po: Completed to 512t
 +     * eu.po: Completed to 512t
 +     * fr.po: Completed to 512t
 +     * sv.po: Completed to 512t
 +     * Update all PO and the POT. Gives 506t6f for formerly
 +       complete translations
 +
 + -- Michael Vogt <mvo@debian.org>  Wed, 14 Jun 2006 12:00:57 +0200 
  
  apt (0.6.44.1-0.1) unstable; urgency=low
  
@@@ -2339,26 -1380,6 +2467,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:
@@@ -2583,13 -1525,13 +2711,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)
  
@@@ -2616,8 -1558,8 +2744,8 @@@ apt (0.6.41) unstable; urgency=lo
    * 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
  
diff --combined debian/control
index b740797356310e1a9a0d6006ec7d53c812084d11,84c411509a69513a6d3bed6304724384c424939c..03cc52d87d66bb80acc02de20e9464683ad5fc8a
@@@ -1,22 -1,20 +1,22 @@@
  Source: apt
  Section: admin
  Priority: important
 -Maintainer: APT Development Team <deity@lists.debian.org>
 +Maintainer: Ubuntu Core Developers <ubuntu-devel-discuss@lists.ubuntu.com>
 +XSBC-Original-Maintainer: APT Development Team <deity@lists.debian.org>
  Uploaders: Michael Vogt <mvo@debian.org>, Otavio Salvador <otavio@debian.org>,
   Christian Perrier <bubulle@debian.org>, Daniel Burrows <dburrows@debian.org>,
-  Luca Bruno <lethalman88@gmail.com>, Eugene V. Lyubimkin <jackyf.devel@gmail.com>
- Standards-Version: 3.8.0
+  Luca Bruno <lethalman88@gmail.com>
+ Standards-Version: 3.8.1.0
 -Build-Depends: debhelper (>= 5.0), libdb-dev, gettext (>= 0.12), libcurl4-gnutls-dev | libcurl3-gnutls-dev (>= 7.15.5), debiandoc-sgml, docbook-utils (>= 0.6.12), xsltproc, docbook-xsl, xmlto
 -Vcs-Bzr: http://bzr.debian.org/apt/debian-sid/
 +Build-Depends: debhelper (>= 5.0), libdb-dev, gettext (>= 0.12), libcurl4-gnutls-dev | libcurl3-gnutls-dev (>= 7.15.5), debiandoc-sgml, docbook-utils (>= 0.6.12), xsltproc, docbook-xsl, xmlto, intltool
 +Vcs-Bzr: http://code.launchpad.net/~ubuntu-core-dev/apt/ubuntu
  
  Package: apt
  Architecture: any
 -Depends: ${shlibs:Depends}, debian-archive-keyring
 +Depends: ${shlibs:Depends}
  Priority: important
  Replaces: libapt-pkg-doc (<< 0.3.7), libapt-pkg-dev (<< 0.3.7)
  Provides: ${libapt-pkg:provides}
 +Recommends: ubuntu-keyring
  Suggests: aptitude | synaptic | gnome-apt | wajig, dpkg-dev, apt-doc, bzip2, lzma, python-apt
  Section: admin
  Description: Advanced front-end for dpkg
index a3ccdded823252df6aba33ac558406dd9942148d,5dc7b5246f49927a2ac191660a0161e71e1703e8..175f0e4800b3adcef75f203de82384531f0b8ecd
@@@ -55,6 -55,7 +55,7 @@@ AP
       Diff-Only "false";
       Tar-Only "false";
       Build-Dep-Automatic "true";
+      Show-User-Simulation-Note "true";
    };
  
    Cache 
    Install-Recommends "true";
    Install-Suggests "false";
  
 +  // install recommends automatically for packages in this section
 +  Install-Recommends-Section { "metapackages"; "universe/metapackages"; };
 +  
    // consider dependencies of packages in this section manual
    Never-MarkAuto-Sections {"metapackages"; "universe/metapackages"; };
  
    // Keep the list of FDs open (normally apt closes all fds when it
    // does a ExecFork)
    Keep-Fds {};
+   // control parameters for cron jobs by /etc/cron.daily/apt
+   Periodic
+   {
+   BackupArchiveInterval "0";
+   // - Backup after n-days if archive contents changed.(0=disable)
+   BackupLevel "3";
+   // - Backup level.(0=disable), 1 is invalid.
+   // APT::Archives::MaxAge "0"; (old, deprecated)
+   MaxAge "0"; // (new)
+   // - Set maximum allowed age of a cache package file. If a cache 
+   //   package file is older it is deleted (0=disable)
+   // APT::Archives::MinAge "2"; (old, deprecated)
+   MinAge "2"; // (new)
+   // - Set minimum age of a package file. If a file is younger it
+   //   will not be deleted (0=disable). Usefull to prevent races 
+   //   and to keep backups of the packages for emergency.
+   // APT::Archives::MaxSize "0"; (old, deprecated)
+   MaxSize "0"; // (new)
+   // - Set maximum size of the cache in MB (0=disable). If the cache
+   //   is bigger, cached package files are deleted until the size
+   //   requirement is met (the biggest packages will be deleted 
+   //   first).
+   Update-Package-Lists "0";
+   // - Do "apt-get update" automatically every n-days (0=disable)
+   //   
+   Download-Upgradeable-Packages "0";
+   // - Do "apt-get upgrade --download-only" every n-days (0=disable)
+   //
+   Unattended-Upgrade "0";
+   // - Run the "unattended-upgrade" security upgrade script 
+   //   every n-days (0=disabled)
+   //   Requires the package "unattended-upgrades" and will write
+   //   a log in /var/log/unattended-upgrades
+   //
+   AutocleanInterval "0";
+   // - Do "apt-get autoclean" every n-days (0=disable)
+   Verbose "0";
+   // - Send report mail to root
+   //   0:  no report             (or null string)
+   //   1:  progress report       (actually any string)
+   //   2:  + command outputs     (remove -qq, remove 2>/dev/null, add -d)
+   //   3:  + trace on            
+   };
  };
  
  // Options for the downloading routines
@@@ -198,20 -246,6 +249,20 @@@ Acquir
    {
     Options {"--ignore-time-conflict";}        // not very useful on a normal system
    };
 +
 +  mirror
 +  {
 +   RefreshInterval "360"; // refresh interval in minutes
 +   MaxAge "90";           // max age for a mirror file in days before 
 +                          // it gets deleted
 +   // mirror failure reporting script
 +   ProblemReporting "/usr/lib/apt/apt-report-mirror-failure"; 
 +   // mirror failure reporting url
 +   ReportFailures "http://example.com/mirror-failure"; 
 +  };
 +
 +  // translations can be set here to "none", "environment" or "$locale"
 +  Translation "none";
  };
  
  // Directory layout
@@@ -225,22 -259,27 +276,28 @@@ Dir "/
       userstatus "status.user";
       status "/var/lib/dpkg/status";
       cdroms "cdroms.list";
 +     mirrors "mirrors/";
    };
    
    // Location of the cache dir
    Cache "var/cache/apt/" {
       Archives "archives/";
+      // backup directory created by /etc/cron.daily/apt
+      Backup "backup/"; 
       srcpkgcache "srcpkgcache.bin";
       pkgcache "pkgcache.bin";     
    };
    
    // Config files
    Etc "etc/apt/" {
-      SourceList "sources.list";
       Main "apt.conf";
-      Preferences "preferences";     
       Parts "apt.conf.d/";
+      Preferences "preferences";
+      PreferencesParts "preferences.d";
+      SourceList "sources.list";
+      SourceParts "sources.list.d";
+      VendorList "vendors.list";
+      VendorParts "vendors.list.d";
    };
    
    // Locations of binaries
@@@ -306,7 -345,9 +363,9 @@@ DPk
  Debug 
  {
    pkgProblemResolver "false";
+   pkgProblemResolver::ShowScores "false";
    pkgDepCache::AutoInstall "false"; // what packages apt install to satify dependencies
+   pkgDepCache::Marker "false"; 
    pkgAcquire "false";
    pkgAcquire::Worker "false";
    pkgAcquire::Auth "false";
    Acquire::Http "false";   // Show http command traffic
    Acquire::Https "false";   // Show https debug
    Acquire::gpgv "false";   // Show the gpgv traffic
 +  Acquire::Mirror "false"; // Show debugging of the mirror method
    aptcdrom "false";        // Show found package files
    IdentCdrom "false";
 -  
  }
  
  /* Whatever you do, do not use this configuration file!! Take out ONLY
diff --combined methods/http.cc
index 3f13be05064106dea0758b1427ca7bb9facca2af,006e89394a5282e7bc7c0125a638030fe41a5627..476fb751f0dfeedfb7a0cf16d18a50e59a52f4fc
@@@ -723,7 -723,7 +723,7 @@@ void HttpMethod::SendReq(FetchItem *Itm
        Req += string("Authorization: Basic ") + 
            Base64Encode(Uri.User + ":" + Uri.Password) + "\r\n";
     
 -   Req += "User-Agent: Debian APT-HTTP/1.3 ("VERSION")\r\n\r\n";
 +   Req += "User-Agent: Ubuntu APT-HTTP/1.3 ("VERSION")\r\n\r\n";
     
     if (Debug == true)
        cerr << Req << endl;
@@@ -947,9 -947,6 +947,9 @@@ int HttpMethod::DealWithHeaders(FetchRe
        failure */
     if (Srv->Result < 200 || Srv->Result >= 300)
     {
 +      char err[255];
 +      snprintf(err,sizeof(err)-1,"HttpError%i",Srv->Result);
 +      SetFailReason(err);
        _error->Error("%u %s",Srv->Result,Srv->Code);
        if (Srv->HaveContent == true)
         return 4;
@@@ -1026,7 -1023,7 +1026,7 @@@ void HttpMethod::SigTerm(int
     depth. */
  bool HttpMethod::Fetch(FetchItem *)
  {
 -   if (Server == 0)
 +   if (Server == 0) 
        return true;
  
     // Queue the requests
@@@ -1316,5 -1313,15 +1316,15 @@@ int HttpMethod::Loop(
  }
                                                                        /*}}}*/
  
+ int main()
+ {
+    setlocale(LC_ALL, "");
+    // ignore SIGPIPE, this can happen on write() if the socket
+    // closes the connection (this is dealt with via ServerDie())
+    signal(SIGPIPE, SIG_IGN);
+    HttpMethod Mth;
+    return Mth.Loop();
+ }
  
  
diff --combined methods/makefile
index 1d022be90bf8e609fe7e26cc162b04e57781c581,134166ba32f12a39c992d1a8d1fa730e378b2df1..f4d417cee722c765cb56d7e73d02ad64ce3a6559
@@@ -7,7 -7,7 +7,7 @@@ include ../buildlib/defaults.ma
  BIN := $(BIN)/methods
  
  # FIXME..
- LIB_APT_PKG_MAJOR = 4.7
+ LIB_APT_PKG_MAJOR = 4.8
  APT_DOMAIN := libapt-pkg$(LIB_APT_PKG_MAJOR)
  
  # The file method
@@@ -40,7 -40,7 +40,7 @@@ include $(PROGRAM_H
  
  # The cdrom method
  PROGRAM=cdrom
- SLIBS = -lapt-pkg $(INTLLIBS)
+ SLIBS = -lapt-pkg -ldl $(INTLLIBS)
  LIB_MAKES = apt-pkg/makefile
  SOURCE = cdrom.cc
  include $(PROGRAM_H)
@@@ -49,7 -49,7 +49,7 @@@
  PROGRAM=http
  SLIBS = -lapt-pkg $(SOCKETLIBS) $(INTLLIBS)
  LIB_MAKES = apt-pkg/makefile
 -SOURCE = http.cc rfc2553emu.cc connect.cc
 +SOURCE = http.cc http_main.cc rfc2553emu.cc connect.cc
  include $(PROGRAM_H)
  
  # The https method
@@@ -80,17 -80,9 +80,17 @@@ LIB_MAKES = apt-pkg/makefil
  SOURCE = rsh.cc
  include $(PROGRAM_H)
  
 +# The mirror method
 +PROGRAM=mirror
 +SLIBS = -lapt-pkg $(SOCKETLIBS)
 +LIB_MAKES = apt-pkg/makefile
 +SOURCE = mirror.cc http.cc rfc2553emu.cc connect.cc
 +include $(PROGRAM_H)
 +
  # SSH and bzip2 method symlink
  binary: $(BIN)/ssh $(BIN)/bzip2 $(BIN)/lzma
  veryclean: clean-$(BIN)/ssh clean-$(BIN)/bzip2 clean-$(BIN)/lzma
 +
  $(BIN)/ssh:
        echo "Installing ssh method link"
        ln -fs rsh $(BIN)/ssh