]> git.saurik.com Git - apt.git/commitdiff
* merged with michael.vogt@ubuntu.com--2005/apt--mvo--0 to be in sync with debian
authorMichael Vogt <michael.vogt@ubuntu.com>
Tue, 6 Sep 2005 09:51:40 +0000 (09:51 +0000)
committerMichael Vogt <michael.vogt@ubuntu.com>
Tue, 6 Sep 2005 09:51:40 +0000 (09:51 +0000)
Patches applied:

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

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

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

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

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

 * michael.vogt@ubuntu.com--2005/apt--bts225947--0--patch-5
   * merged with apt--main--0

 * michael.vogt@ubuntu.com--2005/apt--bts225947--0--patch-6
   * fixed a incorrect po/he.po merge

 * michael.vogt@ubuntu.com--2005/apt--fixes--0--patch-7
   * fixed incorrect man-page example

 * michael.vogt@ubuntu.com--2005/apt--fixes--0--patch-8
   * changelog udpate

 * michael.vogt@ubuntu.com--2005/apt--fixes--0--patch-9
   * we only need to check once for xmlto

 * michael.vogt@ubuntu.com--2005/apt--fixes--0--patch-10
   * fix a bug in a man-page, fix a problem with overly long lines in apt-cdrom

 * michael.vogt@ubuntu.com--2005/apt--fixes--0--patch-11
   * merged with apt--main--0

 * michael.vogt@ubuntu.com--2005/apt--fixes--0--patch-12
   * fix a incorrect error message (it always added .gz regardless what was downloaded)

 * michael.vogt@ubuntu.com--2005/apt--fixes--0--patch-13
   * merged with main

 * michael.vogt@ubuntu.com--2005/apt--fixes--0--patch-14
   * added Hashsum support for file and cdrom

 * michael.vogt@ubuntu.com--2005/apt--fixes--0--patch-15
   * added README.arch

 * michael.vogt@ubuntu.com--2005/apt--fixes--0--patch-16
   * merged with main

 * michael.vogt@ubuntu.com--2005/apt--fixes--0--patch-17
   * move the changelog to the right place

 * michael.vogt@ubuntu.com--2005/apt--fixes--0--patch-18
   * Change pkgPolicy::Pin from private to protected

 * michael.vogt@ubuntu.com--2005/apt--fixes--0--patch-19
   * added a default constructor for PrvIterator

 * michael.vogt@ubuntu.com--2005/apt--fixes--0--patch-20
   * applied otavios patch to reread the statusFile on debSystem::Initialize

 * michael.vogt@ubuntu.com--2005/apt--mvo--0--patch-33
   * merged with matt's tree

 * michael.vogt@ubuntu.com--2005/apt--mvo--0--patch-34
   * merged with matts tree

 * michael.vogt@ubuntu.com--2005/apt--mvo--0--patch-35
   * build debian and ubuntu package from the same source

 * michael.vogt@ubuntu.com--2005/apt--mvo--0--patch-36
   * added debian/patches dir

 * michael.vogt@ubuntu.com--2005/apt--mvo--0--patch-37
   * fix the breakage from my last commit (note to self: always, _always_ run baz diff before a commit)

 * michael.vogt@ubuntu.com--2005/apt--mvo--0--patch-38
   * removed the lsb_release build patch (nobody except me seems to like it)

 * michael.vogt@ubuntu.com--2005/apt--mvo--0--patch-39
   * merged from main

 * michael.vogt@ubuntu.com--2005/apt--mvo--0--patch-40
   * merged the apt--sane-handle-timeout--0 branch

 * michael.vogt@ubuntu.com--2005/apt--mvo--0--patch-41
   * merged apt--bts225947--0

 * michael.vogt@ubuntu.com--2005/apt--mvo--0--patch-42
   * merged with apt--main

 * michael.vogt@ubuntu.com--2005/apt--mvo--0--patch-43
   * added patch that adds a apt-secure man-page (thanks to jfs@computer.org)

 * michael.vogt@ubuntu.com--2005/apt--mvo--0--patch-44
   * added author credits

 * michael.vogt@ubuntu.com--2005/apt--mvo--0--patch-45
   * added apt-ftparchive.conf example

 * michael.vogt@ubuntu.com--2005/apt--mvo--0--patch-46
   * corrected the utf8 of javier fernandes pena

 * michael.vogt@ubuntu.com--2005/apt--mvo--0--patch-47
   * improve the timeout handling (again)

 * michael.vogt@ubuntu.com--2005/apt--mvo--0--patch-48
   * merged with apt--fixes--0

 * michael.vogt@ubuntu.com--2005/apt--mvo--0--patch-49
   * README.arch updates, comment in apt-pkg/algorithm.h added, apt-pkg/cacheiterators.h order in initlist changed to remove warning

 * michael.vogt@ubuntu.com--2005/apt--mvo--0--patch-50
   * meda-change message is send over status-fd now

 * michael.vogt@ubuntu.com--2005/apt--mvo--0--patch-51
   * include a human readable string for the MediaChange status-fd message as well

 * michael.vogt@ubuntu.com--2005/apt--mvo--0--patch-52
   * finalizing changelog

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

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

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

 * michael.vogt@ubuntu.com--2005/apt--sane-handle-timeout--0--patch-3
   * merged with main

 * otavio@debian.org--2005/apt--fixes--0--patch-28
   Reread status configuration, needed for clients using independent apt ...

12 files changed:
apt-pkg/acquire-item.cc
apt-pkg/acquire-item.h
apt-pkg/acquire.cc
apt-pkg/deb/debindexfile.cc
apt-pkg/deb/debindexfile.h
apt-pkg/init.h
debian/rules
methods/http.cc
methods/http.h
methods/makefile
methods/rred.cc [new file with mode: 0644]
po/apt-all.pot

index dea68f3eef8259034f58e2ae222595529f1bdf0b..c4c0b73a98e2d468d4e406eaa0bb736cad770289 100644 (file)
@@ -24,6 +24,8 @@
 #include <apt-pkg/strutl.h>
 #include <apt-pkg/fileutl.h>
 #include <apt-pkg/md5.h>
+#include <apt-pkg/sha1.h>
+#include <apt-pkg/tagfile.h>
 
 #include <apti18n.h>
     
@@ -31,6 +33,7 @@
 #include <unistd.h>
 #include <errno.h>
 #include <string>
+#include <sstream>
 #include <stdio.h>
                                                                        /*}}}*/
 
@@ -131,14 +134,393 @@ void pkgAcquire::Item::Rename(string From,string To)
 }
                                                                        /*}}}*/
 
+
+// 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
+ * patches. If anything goes wrong in that process, it will fall back to
+ * the original packages file
+ */
+pkgAcqDiffIndex::pkgAcqDiffIndex(pkgAcquire *Owner,
+                                string URI,string URIDesc,string ShortDesc,
+                                string ExpectedMD5)
+   : Item(Owner), RealURI(URI), ExpectedMD5(ExpectedMD5), Description(URIDesc)
+{
+   
+   Debug = _config->FindB("Debug::pkgAcquire::Diffs",false);
+
+   Desc.Description = URIDesc + "/DiffIndex";
+   Desc.Owner = this;
+   Desc.ShortDesc = ShortDesc;
+   Desc.URI = URI + ".diff/Index";
+
+   DestFile = _config->FindDir("Dir::State::lists") + "partial/";
+   DestFile += URItoFileName(URI) + string(".DiffIndex");
+
+   if(Debug)
+      std::clog << "pkgAcqDiffIndex: " << Desc.URI << std::endl;
+
+   // look for the current package file
+   CurrentPackagesFile = _config->FindDir("Dir::State::lists");
+   CurrentPackagesFile += URItoFileName(RealURI);
+
+   if(!FileExists(CurrentPackagesFile) || 
+      !_config->FindB("Acquire::Diffs",true)) {
+      // we don't have a pkg file or we don't want to queue
+      if(Debug)
+        std::clog << "No index file or canceld by user" << std::endl;
+      Failed("", NULL);
+      return;
+   }
+
+   if(Debug) {
+      std::clog << "pkgAcqIndexDiffs::pkgAcqIndexDiffs(): " 
+               << CurrentPackagesFile << std::endl;
+   }
+
+   QueueURI(Desc);
+
+}
+
+// AcqIndex::Custom600Headers - Insert custom request headers          /*{{{*/
+// ---------------------------------------------------------------------
+/* The only header we use is the last-modified header. */
+string pkgAcqDiffIndex::Custom600Headers()
+{
+   string Final = _config->FindDir("Dir::State::lists");
+   Final += URItoFileName(RealURI) + string(".IndexDiff");
+   
+   if(Debug)
+      std::clog << "Custom600Header-IMS: " << Final << std::endl;
+
+   struct stat Buf;
+   if (stat(Final.c_str(),&Buf) != 0)
+      return "\nIndex-File: true";
+   
+   return "\nIndex-File: true\nLast-Modified: " + TimeRFC1123(Buf.st_mtime);
+}
+
+
+bool pkgAcqDiffIndex::ParseDiffIndex(string IndexDiffFile)
+{
+   if(Debug)
+      std::clog << "pkgAcqIndexDiffs::ParseIndexDiff() " << IndexDiffFile 
+               << std::endl;
+
+   pkgTagSection Tags;
+   string ServerSha1;
+   vector<DiffInfo> available_patches;
+   
+   FileFd Fd(IndexDiffFile,FileFd::ReadOnly);
+   pkgTagFile TF(&Fd);
+   if (_error->PendingError() == true)
+      return false;
+
+   if(TF.Step(Tags) == true)
+   {
+      string local_sha1;
+      bool found = false;
+      DiffInfo d;
+      string size;
+
+      string tmp = Tags.FindS("SHA1-Current");
+      std::stringstream ss(tmp);
+      ss >> ServerSha1;
+
+      FileFd fd(CurrentPackagesFile, FileFd::ReadOnly);
+      SHA1Summation SHA1;
+      SHA1.AddFD(fd.Fd(), fd.Size());
+      local_sha1 = string(SHA1.Result());
+
+      if(local_sha1 == ServerSha1) {
+        if(Debug)
+           std::clog << "Package file is up-to-date" << std::endl;
+        // set found to true, this will queue a pkgAcqIndexDiffs with
+        // a empty availabe_patches
+        found = true;
+      } else {
+        if(Debug)
+           std::clog << "SHA1-Current: " << ServerSha1 << std::endl;
+
+        // check the historie and see what patches we need
+        string history = Tags.FindS("SHA1-History");     
+        std::stringstream hist(history);
+        while(hist >> d.sha1 >> size >> d.file) {
+           d.size = atoi(size.c_str());
+           // read until the first match is found
+           if(d.sha1 == local_sha1) 
+              found=true;
+           // from that point on, we probably need all diffs
+           if(found) {
+              if(Debug)
+                 std::clog << "Need to get diff: " << d.file << std::endl;
+              available_patches.push_back(d);
+           }
+        }
+      }
+
+      // no information how to get the patches, bail out
+      if(!found) {
+        if(Debug)
+           std::clog << "Can't find a patch in the index file" << std::endl;
+        // Failed will queue a big package file
+        Failed("", NULL);
+      } else {
+        // queue the diffs
+        new pkgAcqIndexDiffs(Owner, RealURI, Description, Desc.ShortDesc,
+                             ExpectedMD5, available_patches);
+        Complete = false;
+        Status = StatDone;
+        Dequeue();
+        return true;
+      }
+   }
+
+   return false;
+}
+
+void pkgAcqDiffIndex::Failed(string Message,pkgAcquire::MethodConfig *Cnf)
+{
+   if(Debug)
+      std::clog << "pkgAcqDiffIndex failed: " << Desc.URI << std::endl
+               << "Falling back to normal index file aquire" << std::endl;
+
+   new pkgAcqIndex(Owner, RealURI, Description, Desc.ShortDesc, 
+                  ExpectedMD5);
+
+   Complete = false;
+   Status = StatDone;
+   Dequeue();
+}
+
+void pkgAcqDiffIndex::Done(string Message,unsigned long Size,string Md5Hash,
+                          pkgAcquire::MethodConfig *Cnf)
+{
+   if(Debug)
+      std::clog << "pkgAcqDiffIndex::Done(): " << Desc.URI << std::endl;
+
+   Item::Done(Message,Size,Md5Hash,Cnf);
+
+   string FinalFile;
+   FinalFile = _config->FindDir("Dir::State::lists")+URItoFileName(RealURI);
+
+   // sucess in downloading the index
+   // rename the index
+   FinalFile += string(".IndexDiff");
+   if(Debug)
+      std::clog << "Renaming: " << DestFile << " -> " << FinalFile 
+               << std::endl;
+   Rename(DestFile,FinalFile);
+   chmod(FinalFile.c_str(),0644);
+   DestFile = FinalFile;
+
+   if(!ParseDiffIndex(DestFile))
+      return Failed("", NULL);
+
+   Complete = true;
+   Status = StatDone;
+   Dequeue();
+   return;
+}
+
+
+
+// AcqIndexDiffs::AcqIndexDiffs - Constructor                  
+// ---------------------------------------------------------------------
+/* The package diff is added to the queue. one object is constructed
+ * for each diff and the index
+ */
+pkgAcqIndexDiffs::pkgAcqIndexDiffs(pkgAcquire *Owner,
+                                  string URI,string URIDesc,string ShortDesc,
+                                  string ExpectedMD5, vector<DiffInfo> diffs)
+   : Item(Owner), RealURI(URI), ExpectedMD5(ExpectedMD5), 
+     available_patches(diffs)
+{
+   
+   DestFile = _config->FindDir("Dir::State::lists") + "partial/";
+   DestFile += URItoFileName(URI);
+
+   Debug = _config->FindB("Debug::pkgAcquire::Diffs",false);
+
+   Desc.Description = URIDesc;
+   Desc.Owner = this;
+   Desc.ShortDesc = ShortDesc;
+
+   if(available_patches.size() == 0) {
+      // we are done (yeah!)
+      Finish(true);
+   } else {
+      // get the next diff
+      State = StateFetchDiff;
+      QueueNextDiff();
+   }
+}
+
+
+void pkgAcqIndexDiffs::Failed(string Message,pkgAcquire::MethodConfig *Cnf)
+{
+   if(Debug)
+      std::clog << "pkgAcqIndexDiffs failed: " << Desc.URI << std::endl
+               << "Falling back to normal index file aquire" << std::endl;
+   new pkgAcqIndex(Owner, RealURI, Description,Desc.ShortDesc, 
+                  ExpectedMD5);
+   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
+   // the file will be cleaned
+   if(allDone) {
+      // this is for the "real" finish
+      DestFile = _config->FindDir("Dir::State::lists");
+      DestFile += URItoFileName(RealURI);
+      Complete = true;
+      Status = StatDone;
+      Dequeue();
+      if(Debug)
+        std::clog << "\n\nallDone: " << DestFile << "\n" << std::endl;
+      return;
+   }
+
+   if(Debug)
+      std::clog << "Finishing: " << Desc.URI << std::endl;
+   Complete = false;
+   Status = StatDone;
+   Dequeue();
+   return;
+}
+
+
+
+bool pkgAcqIndexDiffs::QueueNextDiff()
+{
+
+   // calc sha1 of the just patched file
+   string FinalFile = _config->FindDir("Dir::State::lists");
+   FinalFile += URItoFileName(RealURI);
+
+   FileFd fd(FinalFile, FileFd::ReadOnly);
+   SHA1Summation SHA1;
+   SHA1.AddFD(fd.Fd(), fd.Size());
+   string local_sha1 = string(SHA1.Result());
+   if(Debug)
+      std::clog << "QueueNextDiff: " 
+               << FinalFile << " (" << local_sha1 << ")"<<std::endl;
+
+   // remove all patches until the next matching patch is found
+   // this requires the Index file to be ordered
+   for(vector<DiffInfo>::iterator I=available_patches.begin();
+       available_patches.size() > 0 && I != available_patches.end() 
+         && (*I).sha1 != local_sha1; 
+       I++) {
+      available_patches.erase(I);
+   }
+
+   // error checking and falling back if no patch was found
+   if(available_patches.size() == 0) { 
+      Failed("", NULL);
+      return false;
+   }
+
+   // queue the right diff
+   Desc.URI = string(RealURI) + ".diff/" + available_patches[0].file + ".gz";
+   Desc.Description = available_patches[0].file + string(".pdiff");
+
+   DestFile = _config->FindDir("Dir::State::lists") + "partial/";
+   DestFile += URItoFileName(RealURI + ".diff/" + available_patches[0].file);
+
+   if(Debug)
+      std::clog << "pkgAcqIndexDiffs::QueueNextDiff(): " << Desc.URI << std::endl;
+   
+   QueueURI(Desc);
+
+   return true;
+}
+
+
+
+void pkgAcqIndexDiffs::Done(string Message,unsigned long Size,string Md5Hash,
+                           pkgAcquire::MethodConfig *Cnf)
+{
+   if(Debug)
+      std::clog << "pkgAcqIndexDiffs::Done(): " << Desc.URI << std::endl;
+
+   Item::Done(Message,Size,Md5Hash,Cnf);
+
+   string FinalFile;
+   FinalFile = _config->FindDir("Dir::State::lists")+URItoFileName(RealURI);
+
+   // sucess in downloading a diff, enter ApplyDiff state
+   if(State == StateFetchDiff) 
+   {
+
+      if(Debug)
+        std::clog << "Sending to gzip method: " << FinalFile << std::endl;
+
+      string FileName = LookupTag(Message,"Filename");
+      State = StateUnzipDiff;
+      Desc.URI = "gzip:" + FileName;
+      DestFile += ".decomp";
+      QueueURI(Desc);
+      Mode = "gzip";
+      return;
+   } 
+
+   // sucess in downloading a diff, enter ApplyDiff state
+   if(State == StateUnzipDiff) 
+   {
+
+      // rred excepts the patch as $FinalFile.ed
+      Rename(DestFile,FinalFile+".ed");
+
+      if(Debug)
+        std::clog << "Sending to rred method: " << FinalFile << std::endl;
+
+      State = StateApplyDiff;
+      Desc.URI = "rred:" + FinalFile;
+      QueueURI(Desc);
+      Mode = "rred";
+      return;
+   } 
+
+
+   // success in download/apply a diff, queue next (if needed)
+   if(State == StateApplyDiff)
+   {
+      // remove the just applied patch
+      available_patches.erase(available_patches.begin());
+
+      // move into place
+      if(Debug) 
+      {
+        std::clog << "Moving patched file in place: " << std::endl
+                  << DestFile << " -> " << FinalFile << std::endl;
+      }
+      Rename(DestFile,FinalFile);
+
+      // see if there is more to download
+      if(available_patches.size() > 0) {
+        new pkgAcqIndexDiffs(Owner, RealURI, Description, Desc.ShortDesc,
+                             ExpectedMD5, available_patches);
+        return Finish();
+      } else 
+        return Finish(true);
+   }
+}
+
+
 // AcqIndex::AcqIndex - Constructor                                    /*{{{*/
 // ---------------------------------------------------------------------
 /* The package file is added to the queue and a second class is 
    instantiated to fetch the revision file */   
 pkgAcqIndex::pkgAcqIndex(pkgAcquire *Owner,
                         string URI,string URIDesc,string ShortDesc,
-                        string ExpectedMD5, string comprExt) :
-   Item(Owner), RealURI(URI), ExpectedMD5(ExpectedMD5)
+                        string ExpectedMD5, string comprExt)
+   Item(Owner), RealURI(URI), ExpectedMD5(ExpectedMD5)
 {
    Decompression = false;
    Erase = false;
@@ -607,8 +989,8 @@ void pkgAcqMetaIndex::QueueIndexes(bool verify)
       }
       
       // Queue Packages file
-      new pkgAcqIndex(Owner, (*Target)->URI, (*Target)->Description,
-                      (*Target)->ShortDesc, ExpectedIndexMD5);
+      new pkgAcqDiffIndex(Owner, (*Target)->URI, (*Target)->Description,
+                         (*Target)->ShortDesc, ExpectedIndexMD5);
    }
 }
 
index 90f80368b9c6f29d5db712972df23af639bae4a5..3a6e93b1afd5a4da570795d7b4a6ddba126774f6 100644 (file)
@@ -82,6 +82,70 @@ class pkgAcquire::Item
    virtual ~Item();
 };
 
+// item for index diffs
+
+struct DiffInfo {
+   string file;
+   string sha1;
+   unsigned long size;
+};
+
+class pkgAcqDiffIndex : public pkgAcquire::Item
+{
+ protected:
+   bool Debug;
+   pkgAcquire::ItemDesc Desc;
+   string RealURI;
+   string ExpectedMD5;
+   string CurrentPackagesFile;
+   string Description;
+
+ public:
+   // Specialized action members
+   virtual void Failed(string Message,pkgAcquire::MethodConfig *Cnf);
+   virtual void Done(string Message,unsigned long Size,string Md5Hash,
+                    pkgAcquire::MethodConfig *Cnf);
+   virtual string DescURI() {return RealURI + "Index";};
+   virtual string Custom600Headers();
+
+   // helpers
+   bool ParseDiffIndex(string IndexDiffFile);
+   
+   pkgAcqDiffIndex(pkgAcquire *Owner,string URI,string URIDesc,
+                  string ShortDesct, string ExpectedMD5);
+};
+
+class pkgAcqIndexDiffs : public pkgAcquire::Item
+{
+   protected:
+   bool Debug;
+   pkgAcquire::ItemDesc Desc;
+   string RealURI;
+   string ExpectedMD5;
+
+   // this is the SHA-1 sum we expect after the patching
+   string Description;
+   vector<DiffInfo> available_patches;
+   enum {StateFetchIndex,StateFetchDiff,StateUnzipDiff,StateApplyDiff} State;
+
+   public:
+   
+   // Specialized action members
+   virtual void Failed(string Message,pkgAcquire::MethodConfig *Cnf);
+   virtual void Done(string Message,unsigned long Size,string Md5Hash,
+                    pkgAcquire::MethodConfig *Cnf);
+   virtual string DescURI() {return RealURI + "Index";};
+
+   // various helpers
+   bool QueueNextDiff();
+   bool ApplyDiff(string PatchFile);
+   void Finish(bool allDone=false);
+
+   pkgAcqIndexDiffs(pkgAcquire *Owner,string URI,string URIDesc,
+                   string ShortDesct, string ExpectedMD5,
+                   vector<DiffInfo> diffs=vector<DiffInfo>());
+};
+
 // Item class for index files
 class pkgAcqIndex : public pkgAcquire::Item
 {
index 62209e65b2140907cc3af428b7482037a62b44e3..47655af80f80229bdcd565d26ac73fb87b2cd62a 100644 (file)
@@ -267,6 +267,10 @@ pkgAcquire::MethodConfig *pkgAcquire::GetConfig(string Access)
    if (Work.Start() == false)
       return 0;
    
+   /* if a method uses DownloadLimit, we switch to SingleInstance mode */
+   if(_config->FindI("Acquire::"+Access+"::DlLimit",0) > 0)
+      Conf->SingleInstance = true;
+   
    return Conf;
 }
                                                                        /*}}}*/
index ff8bce85d1f036c260c53af050f061df22bb3188..b3b77dad71e1021e62e5774191984e9ea5f203a5 100644 (file)
@@ -158,6 +158,17 @@ debPackagesIndex::debPackagesIndex(string URI,string Dist,string Section,bool Tr
 {
 }
                                                                        /*}}}*/
+
+string debPackagesIndex::ArchiveURI(string File) const
+{
+   // FIXME: EVIL! Remove as soon as pdiff support is offical
+   string remap = _config->Find("APT::URL-Remap::"+URI,"");
+   if(!remap.empty())
+      return remap+File;
+
+   return URI + File;
+}
+
 // PackagesIndex::ArchiveInfo - Short version of the archive url       /*{{{*/
 // ---------------------------------------------------------------------
 /* This is a shorter version that is designed to be < 60 chars or so */
index a1b9583a44bb19070da01ef9cd3ed7a3475c2262..48a345adfb175487441caf077dda4317f36244f9 100644 (file)
@@ -59,7 +59,7 @@ class debPackagesIndex : public pkgIndexFile
 
    // Stuff for accessing files on remote items
    virtual string ArchiveInfo(pkgCache::VerIterator Ver) const;
-   virtual string ArchiveURI(string File) const {return URI + File;};
+   virtual string ArchiveURI(string File) const;
    
    // Interface for acquire
    virtual string Describe(bool Short) const;   
index e213517971b85551642c0063df1ffc84acc48ad5..8255b406a6bd65d694ef7cdd68d2adda2ad6b54b 100644 (file)
@@ -18,7 +18,7 @@
 
 // See the makefile
 #define APT_PKG_MAJOR 3
-#define APT_PKG_MINOR 10
+#define APT_PKG_MINOR 11
 #define APT_PKG_RELEASE 0
     
 extern const char *pkgVersion;
index cd026b4a4ad34e439930a5b157b45537d5c86beb..40f5add37fc76fece1c17a555a9e39afbecb0fc6 100755 (executable)
@@ -36,7 +36,7 @@ endif
 # Default rule
 build:
 
-DEB_BUILD_PROG:=debuild --preserve-envvar PATH --preserve-envvar CCACHE_DIR -us -uc $(DEB_BUILD_PROG_OPTS)
+DEB_BUILD_PROG:=debuild --preserve-envvar PATH --preserve-envvar CCACHE_DIR -us -uc $(DEBUILD_DPKG_BUILDPACKAGE_OPTS)
 APT_DEBVER=$(shell dpkg-parsechangelog |sed -n -e '/^Version:/s/^Version: //p')
 APT_CONFVER=$(shell sed -n -e 's/^AC_DEFINE_UNQUOTED(VERSION,"\(.*\)")/\1/p' configure.in)
 APT_CVSTAG=$(shell echo "$(APT_DEBVER)" | sed -e 's/^/v/' -e 's/\./_/g')
index ba86aa6b654904a4579e397be946d509cb4c7e3a..2ec1fe63164a84e75f64d36c7e1f748d531f272c 100644 (file)
@@ -58,6 +58,12 @@ unsigned long PipelineDepth = 10;
 unsigned long TimeOut = 120;
 bool Debug = false;
 
+
+unsigned long CircleBuf::BwReadLimit=0;
+unsigned long CircleBuf::BwTickReadData=0;
+struct timeval CircleBuf::BwReadTick={0,0};
+const unsigned int CircleBuf::BW_HZ=10;
+  
 // CircleBuf::CircleBuf - Circular input buffer                                /*{{{*/
 // ---------------------------------------------------------------------
 /* */
@@ -65,6 +71,8 @@ CircleBuf::CircleBuf(unsigned long Size) : Size(Size), Hash(0)
 {
    Buf = new unsigned char[Size];
    Reset();
+
+   CircleBuf::BwReadLimit = _config->FindI("Acquire::http::DlLimit",0)*1024;
 }
                                                                        /*}}}*/
 // CircleBuf::Reset - Reset to the default state                       /*{{{*/
@@ -90,16 +98,45 @@ void CircleBuf::Reset()
    is non-blocking.. */
 bool CircleBuf::Read(int Fd)
 {
+   unsigned long BwReadMax;
+
    while (1)
    {
       // Woops, buffer is full
       if (InP - OutP == Size)
         return true;
-      
+
+      // what's left to read in this tick
+      BwReadMax = CircleBuf::BwReadLimit/BW_HZ;
+
+      if(CircleBuf::BwReadLimit) {
+        struct timeval now;
+        gettimeofday(&now,0);
+
+        unsigned long d = (now.tv_sec-CircleBuf::BwReadTick.tv_sec)*1000000 +
+           now.tv_usec-CircleBuf::BwReadTick.tv_usec;
+        if(d > 1000000/BW_HZ) {
+           CircleBuf::BwReadTick = now;
+           CircleBuf::BwTickReadData = 0;
+        } 
+        
+        if(CircleBuf::BwTickReadData >= BwReadMax) {
+           usleep(1000000/BW_HZ);
+           return true;
+        }
+      }
+
       // Write the buffer segment
       int Res;
-      Res = read(Fd,Buf + (InP%Size),LeftRead());
+      if(CircleBuf::BwReadLimit) {
+        Res = read(Fd,Buf + (InP%Size), 
+                   BwReadMax > LeftRead() ? LeftRead() : BwReadMax);
+      } else
+        Res = read(Fd,Buf + (InP%Size),LeftRead());
       
+      if(Res > 0 && BwReadLimit > 0) 
+        CircleBuf::BwTickReadData += Res;
+    
       if (Res == 0)
         return false;
       if (Res < 0)
index c5a4d0e86a1f9967ed2f573eb9bb508b95646dd4..541e2952cb5fdf540f31129e99ad7e499fc074ef 100644 (file)
@@ -31,6 +31,11 @@ class CircleBuf
    unsigned long MaxGet;
    struct timeval Start;
    
+   static unsigned long BwReadLimit;
+   static unsigned long BwTickReadData;
+   static struct timeval BwReadTick;
+   static const unsigned int BW_HZ;
+
    unsigned long LeftRead()
    {
       unsigned long Sz = Size - (InP - OutP);
index 06fd2a6fc0c9117eef29e55bf89ecb74deb85c65..d0b5a28c0210cadb478b2cb78a315b11943c2891 100644 (file)
@@ -7,7 +7,7 @@ include ../buildlib/defaults.mak
 BIN := $(BIN)/methods
 
 # FIXME..
-LIB_APT_PKG_MAJOR = 3.10
+LIB_APT_PKG_MAJOR = 3.11
 APT_DOMAIN := libapt-pkg$(LIB_APT_PKG_MAJOR)
 
 # The file method
@@ -59,6 +59,13 @@ LIB_MAKES = apt-pkg/makefile
 SOURCE = ftp.cc rfc2553emu.cc connect.cc
 include $(PROGRAM_H)
 
+# The rred method
+PROGRAM=rred
+SLIBS = -lapt-pkg $(SOCKETLIBS)
+LIB_MAKES = apt-pkg/makefile
+SOURCE = rred.cc
+include $(PROGRAM_H)
+
 # The rsh method
 PROGRAM=rsh
 SLIBS = -lapt-pkg
diff --git a/methods/rred.cc b/methods/rred.cc
new file mode 100644 (file)
index 0000000..6fa57f3
--- /dev/null
@@ -0,0 +1,262 @@
+#include <apt-pkg/fileutl.h>
+#include <apt-pkg/error.h>
+#include <apt-pkg/acquire-method.h>
+#include <apt-pkg/strutl.h>
+#include <apt-pkg/hashes.h>
+
+#include <sys/stat.h>
+#include <unistd.h>
+#include <utime.h>
+#include <stdio.h>
+#include <errno.h>
+#include <apti18n.h>
+
+/* this method implements a patch functionality similar to "patch --ed" that is
+ * used by the "tiffany" incremental packages download stuff. it differs from 
+ * "ed" insofar that it is way more restricted (and therefore secure). in the
+ * moment only the "c", "a" and "d" commands of ed are implemented (diff 
+ * doesn't output any other). additionally the records must be reverse sorted 
+ * by line number and may not overlap (diff *seems* to produce this kind of 
+ * output). 
+ * */
+
+const char *Prog;
+
+class RredMethod : public pkgAcqMethod
+{
+   bool Debug;
+   // the size of this doesn't really matter (except for performance)    
+   const static int BUF_SIZE = 1024;
+   // the ed commands
+   enum Mode {MODE_CHANGED, MODE_DELETED, MODE_ADDED};
+   // return values
+   enum State {ED_OK, ED_ORDERING, ED_PARSER, ED_FAILURE};
+   // this applies a single hunk, it uses a tail recursion to 
+   // reverse the hunks in the file
+   int ed_rec(FILE *ed_cmds, FILE *in_file, FILE *out_file, int line, 
+      char *buffer, unsigned int bufsize, Hashes *hash);
+   // apply a patch file
+   int ed_file(FILE *ed_cmds, FILE *in_file, FILE *out_file, Hashes *hash);
+   // the methods main method
+   virtual bool Fetch(FetchItem *Itm);
+   
+   public:
+   
+   RredMethod() : pkgAcqMethod("1.1",SingleInstance | SendConfig) {};
+};
+
+int RredMethod::ed_rec(FILE *ed_cmds, FILE *in_file, FILE *out_file, int line, 
+      char *buffer, unsigned int bufsize, Hashes *hash) {
+   int pos;
+   int startline;
+   int stopline;
+   int mode;
+   int written;
+   char *idx;
+
+   /* get the current command and parse it*/
+   if (fgets(buffer, bufsize, ed_cmds) == NULL) {
+      return line;
+   }
+   startline = strtol(buffer, &idx, 10);
+   if (startline < line) {
+      return ED_ORDERING;
+   }
+   if (*idx == ',') {
+      idx++;
+      stopline = strtol(idx, &idx, 10);
+   }
+   else {
+      stopline = startline;
+   }
+   if (*idx == 'c') {
+      mode = MODE_CHANGED;
+          if (Debug == true) {
+                  std::clog << "changing from line " << startline 
+                            << " to " << stopline << std::endl;
+          }
+   }
+   else if (*idx == 'a') {
+      mode = MODE_ADDED;
+          if (Debug == true) {
+                  std::clog << "adding after line " << startline << std::endl;
+          }
+   }
+   else if (*idx == 'd') {
+      mode = MODE_DELETED;
+          if (Debug == true) {
+                  std::clog << "deleting from line " << startline 
+                            <<  " to " << stopline << std::endl;
+          }
+   }
+   else {
+      return ED_PARSER;
+   }
+   /* get the current position */
+   pos = ftell(ed_cmds);
+   /* if this is add or change then go to the next full stop */
+   if ((mode == MODE_CHANGED) || (mode == MODE_ADDED)) {
+      do {
+         fgets(buffer, bufsize, ed_cmds);
+         while ((strlen(buffer) == (bufsize - 1)) 
+               && (buffer[bufsize - 2] != '\n')) {
+            fgets(buffer, bufsize, ed_cmds);
+            buffer[0] = ' ';
+         }
+      } while (strncmp(buffer, ".", 1) != 0);
+   }
+   /* do the recursive call */
+   line = ed_rec(ed_cmds, in_file, out_file, line, buffer, bufsize, 
+         hash);
+   /* pass on errors */
+   if (line < 0) {
+      return line;
+   }
+   /* apply our hunk */
+   fseek(ed_cmds, pos, SEEK_SET); 
+   /* first wind to the current position */
+   if (mode != MODE_ADDED) {
+      startline -= 1;
+   }
+   while (line < startline) {
+      fgets(buffer, bufsize, in_file);
+      written = fwrite(buffer, 1, strlen(buffer), out_file);
+      hash->Add((unsigned char*)buffer, written);
+      while ((strlen(buffer) == (bufsize - 1)) 
+            && (buffer[bufsize - 2] != '\n')) {
+         fgets(buffer, bufsize, in_file);
+         written = fwrite(buffer, 1, strlen(buffer), out_file);
+         hash->Add((unsigned char*)buffer, written);
+      }
+      line++;
+   }
+   /* include from ed script */
+   if ((mode == MODE_ADDED) || (mode == MODE_CHANGED)) {
+      do {
+         fgets(buffer, bufsize, ed_cmds);
+         if (strncmp(buffer, ".", 1) != 0) {
+            written = fwrite(buffer, 1, strlen(buffer), out_file);
+            hash->Add((unsigned char*)buffer, written);
+            while ((strlen(buffer) == (bufsize - 1)) 
+                  && (buffer[bufsize - 2] != '\n')) {
+               fgets(buffer, bufsize, ed_cmds);
+               written = fwrite(buffer, 1, strlen(buffer), out_file);
+               hash->Add((unsigned char*)buffer, written);
+            }
+         }
+         else {
+            break;
+         }
+      } while (1);
+   }
+   /* ignore the corresponding number of lines from input */
+   if ((mode == MODE_DELETED) || (mode == MODE_CHANGED)) {
+      while (line < stopline) {
+         fgets(buffer, bufsize, in_file);
+         while ((strlen(buffer) == (bufsize - 1)) 
+               && (buffer[bufsize - 2] != '\n')) {
+            fgets(buffer, bufsize, in_file);
+         }
+         line++;
+      }
+   }
+   return line;
+}
+
+int RredMethod::ed_file(FILE *ed_cmds, FILE *in_file, FILE *out_file, 
+      Hashes *hash) {
+   char buffer[BUF_SIZE];
+   int result;
+   int written;
+   
+   /* we do a tail recursion to read the commands in the right order */
+   result = ed_rec(ed_cmds, in_file, out_file, 0, buffer, BUF_SIZE, 
+         hash);
+   
+   /* read the rest from infile */
+   if (result > 0) {
+      while (fgets(buffer, BUF_SIZE, in_file) != NULL) {
+         written = fwrite(buffer, 1, strlen(buffer), out_file);
+         hash->Add((unsigned char*)buffer, written);
+      }
+   }
+   else {
+      return ED_FAILURE;
+   }
+   return ED_OK;
+}
+
+
+bool RredMethod::Fetch(FetchItem *Itm)
+{
+   Debug = _config->FindB("Debug::pkgAcquire::RRed",false);
+   URI Get = Itm->Uri;
+   string Path = Get.Host + Get.Path; // To account for relative paths
+   // Path contains the filename to patch
+   FetchResult Res;
+   Res.Filename = Itm->DestFile;
+   URIStart(Res);
+   // Res.Filename the destination filename
+
+   if (Debug == true) 
+      std::clog << "Patching " << Path << " with " << Path 
+         << ".ed and putting result into " << Itm->DestFile << std::endl;
+   // Open the source and destination files (the d'tor of FileFd will do 
+   // the cleanup/closing of the fds)
+   FileFd From(Path,FileFd::ReadOnly);
+   FileFd Patch(Path+".ed",FileFd::ReadOnly);
+   FileFd To(Itm->DestFile,FileFd::WriteEmpty);   
+   To.EraseOnFailure();
+   if (_error->PendingError() == true)
+      return false;
+   
+   Hashes Hash;
+   FILE* fFrom = fdopen(From.Fd(), "r");
+   FILE* fPatch = fdopen(Patch.Fd(), "r");
+   FILE* fTo = fdopen(To.Fd(), "w");
+   // now do the actual patching
+   if (ed_file(fPatch, fFrom, fTo, &Hash) != ED_OK) {
+     _error->Errno("rred", _("Could not patch file"));  
+      return false;
+   }
+
+   // write out the result
+   fflush(fFrom);
+   fflush(fPatch);
+   fflush(fTo);
+   From.Close();
+   Patch.Close();
+   To.Close();
+
+   // Transfer the modification times
+   struct stat Buf;
+   if (stat(Path.c_str(),&Buf) != 0)
+      return _error->Errno("stat",_("Failed to stat"));
+
+   struct utimbuf TimeBuf;
+   TimeBuf.actime = Buf.st_atime;
+   TimeBuf.modtime = Buf.st_mtime;
+   if (utime(Itm->DestFile.c_str(),&TimeBuf) != 0)
+      return _error->Errno("utime",_("Failed to set modification time"));
+
+   if (stat(Itm->DestFile.c_str(),&Buf) != 0)
+      return _error->Errno("stat",_("Failed to stat"));
+
+   // return done
+   Res.LastModified = Buf.st_mtime;
+   Res.Size = Buf.st_size;
+   Res.TakeHashes(Hash);
+   URIDone(Res);
+
+   return true;
+}
+
+int main(int argc, char *argv[])
+{
+   RredMethod Mth;
+
+   Prog = strrchr(argv[0],'/');
+   Prog++;
+   
+   return Mth.Run();
+}
index c34299d261ba644a9187f9e0daaca82f18f46a88..46672e159ca2a0fe3609f1e41c6b30562317f693 100644 (file)
@@ -7,7 +7,7 @@ msgid ""
 msgstr ""
 "Project-Id-Version: PACKAGE VERSION\n"
 "Report-Msgid-Bugs-To: \n"
-"POT-Creation-Date: 2005-08-23 09:45+0200\n"
+"POT-Creation-Date: 2005-08-19 11:53+0200\n"
 "PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n"
 "Last-Translator: FULL NAME <EMAIL@ADDRESS>\n"
 "Language-Team: LANGUAGE <LL@li.org>\n"
@@ -147,8 +147,8 @@ msgid "       %4i %s\n"
 msgstr ""
 
 #: cmdline/apt-cache.cc:1651 cmdline/apt-cdrom.cc:138 cmdline/apt-config.cc:70
-#: cmdline/apt-extracttemplates.cc:225 ftparchive/apt-ftparchive.cc:550
-#: cmdline/apt-get.cc:2324 cmdline/apt-sortpkgs.cc:144
+#: cmdline/apt-extracttemplates.cc:225 ftparchive/apt-ftparchive.cc:545
+#: cmdline/apt-get.cc:2322 cmdline/apt-sortpkgs.cc:144
 #, c-format
 msgid "%s %s for %s %s compiled on %s %s\n"
 msgstr ""
@@ -240,31 +240,31 @@ msgstr ""
 msgid "Cannot get debconf version. Is debconf installed?"
 msgstr ""
 
-#: ftparchive/apt-ftparchive.cc:167 ftparchive/apt-ftparchive.cc:341
+#: ftparchive/apt-ftparchive.cc:163 ftparchive/apt-ftparchive.cc:337
 msgid "Package extension list is too long"
 msgstr ""
 
-#: ftparchive/apt-ftparchive.cc:169 ftparchive/apt-ftparchive.cc:183
-#: ftparchive/apt-ftparchive.cc:206 ftparchive/apt-ftparchive.cc:256
-#: ftparchive/apt-ftparchive.cc:270 ftparchive/apt-ftparchive.cc:292
+#: ftparchive/apt-ftparchive.cc:165 ftparchive/apt-ftparchive.cc:179
+#: ftparchive/apt-ftparchive.cc:202 ftparchive/apt-ftparchive.cc:252
+#: ftparchive/apt-ftparchive.cc:266 ftparchive/apt-ftparchive.cc:288
 #, c-format
 msgid "Error processing directory %s"
 msgstr ""
 
-#: ftparchive/apt-ftparchive.cc:254
+#: ftparchive/apt-ftparchive.cc:250
 msgid "Source extension list is too long"
 msgstr ""
 
-#: ftparchive/apt-ftparchive.cc:371
+#: ftparchive/apt-ftparchive.cc:367
 msgid "Error writing header to contents file"
 msgstr ""
 
-#: ftparchive/apt-ftparchive.cc:401
+#: ftparchive/apt-ftparchive.cc:397
 #, c-format
 msgid "Error processing contents %s"
 msgstr ""
 
-#: ftparchive/apt-ftparchive.cc:556
+#: ftparchive/apt-ftparchive.cc:551
 msgid ""
 "Usage: apt-ftparchive [options] command\n"
 "Commands: packages binarypath [overridefile [pathprefix]]\n"
@@ -306,11 +306,11 @@ msgid ""
 "  -o=?  Set an arbitrary configuration option"
 msgstr ""
 
-#: ftparchive/apt-ftparchive.cc:762
+#: ftparchive/apt-ftparchive.cc:757
 msgid "No selections matched"
 msgstr ""
 
-#: ftparchive/apt-ftparchive.cc:835
+#: ftparchive/apt-ftparchive.cc:830
 #, c-format
 msgid "Some files are missing in the package file group `%s'"
 msgstr ""
@@ -343,63 +343,63 @@ msgstr ""
 msgid "Unable to get a cursor"
 msgstr ""
 
-#: ftparchive/writer.cc:78
+#: ftparchive/writer.cc:79
 #, c-format
 msgid "W: Unable to read directory %s\n"
 msgstr ""
 
-#: ftparchive/writer.cc:83
+#: ftparchive/writer.cc:84
 #, c-format
 msgid "W: Unable to stat %s\n"
 msgstr ""
 
-#: ftparchive/writer.cc:125
+#: ftparchive/writer.cc:126
 msgid "E: "
 msgstr ""
 
-#: ftparchive/writer.cc:127
+#: ftparchive/writer.cc:128
 msgid "W: "
 msgstr ""
 
-#: ftparchive/writer.cc:134
+#: ftparchive/writer.cc:135
 msgid "E: Errors apply to file "
 msgstr ""
 
-#: ftparchive/writer.cc:151 ftparchive/writer.cc:181
+#: ftparchive/writer.cc:152 ftparchive/writer.cc:182
 #, c-format
 msgid "Failed to resolve %s"
 msgstr ""
 
-#: ftparchive/writer.cc:163
+#: ftparchive/writer.cc:164
 msgid "Tree walking failed"
 msgstr ""
 
-#: ftparchive/writer.cc:188
+#: ftparchive/writer.cc:189
 #, c-format
 msgid "Failed to open %s"
 msgstr ""
 
-#: ftparchive/writer.cc:245
+#: ftparchive/writer.cc:246
 #, c-format
 msgid " DeLink %s [%s]\n"
 msgstr ""
 
-#: ftparchive/writer.cc:253
+#: ftparchive/writer.cc:254
 #, c-format
 msgid "Failed to readlink %s"
 msgstr ""
 
-#: ftparchive/writer.cc:257
+#: ftparchive/writer.cc:258
 #, c-format
 msgid "Failed to unlink %s"
 msgstr ""
 
-#: ftparchive/writer.cc:264
+#: ftparchive/writer.cc:265
 #, c-format
 msgid "*** Failed to link %s to %s"
 msgstr ""
 
-#: ftparchive/writer.cc:274
+#: ftparchive/writer.cc:275
 #, c-format
 msgid " DeLink limit of %sB hit.\n"
 msgstr ""
@@ -410,16 +410,16 @@ msgstr ""
 msgid "Failed to stat %s"
 msgstr ""
 
-#: ftparchive/writer.cc:386
+#: ftparchive/writer.cc:378
 msgid "Archive had no package field"
 msgstr ""
 
-#: ftparchive/writer.cc:394 ftparchive/writer.cc:602
+#: ftparchive/writer.cc:386 ftparchive/writer.cc:595
 #, c-format
 msgid "  %s has no override entry\n"
 msgstr ""
 
-#: ftparchive/writer.cc:437 ftparchive/writer.cc:688
+#: ftparchive/writer.cc:429 ftparchive/writer.cc:677
 #, c-format
 msgid "  %s maintainer is %s not %s\n"
 msgstr ""
@@ -523,7 +523,7 @@ msgstr ""
 msgid "Y"
 msgstr ""
 
-#: cmdline/apt-get.cc:140 cmdline/apt-get.cc:1486
+#: cmdline/apt-get.cc:140 cmdline/apt-get.cc:1484
 #, c-format
 msgid "Regex compilation error - %s"
 msgstr ""
@@ -654,10 +654,6 @@ msgstr ""
 msgid "WARNING: The following packages cannot be authenticated!"
 msgstr ""
 
-#: cmdline/apt-get.cc:691
-msgid "Authentication warning overridden.\n"
-msgstr ""
-
 #: cmdline/apt-get.cc:698
 msgid "Install these packages without verification [y/N]? "
 msgstr ""
@@ -666,74 +662,57 @@ msgstr ""
 msgid "Some packages could not be authenticated"
 msgstr ""
 
-#: cmdline/apt-get.cc:709 cmdline/apt-get.cc:856
+#: cmdline/apt-get.cc:709 cmdline/apt-get.cc:855
 msgid "There are problems and -y was used without --force-yes"
 msgstr ""
 
-#: cmdline/apt-get.cc:753
-msgid "Internal error, InstallPackages was called with broken packages!"
-msgstr ""
-
 #: cmdline/apt-get.cc:762
 msgid "Packages need to be removed but remove is disabled."
 msgstr ""
 
-#: cmdline/apt-get.cc:773
-msgid "Internal error, Ordering didn't finish"
-msgstr ""
-
-#: cmdline/apt-get.cc:789 cmdline/apt-get.cc:1780 cmdline/apt-get.cc:1813
+#: cmdline/apt-get.cc:788 cmdline/apt-get.cc:1778 cmdline/apt-get.cc:1811
 msgid "Unable to lock the download directory"
 msgstr ""
 
-#: cmdline/apt-get.cc:799 cmdline/apt-get.cc:1861 cmdline/apt-get.cc:2072
+#: cmdline/apt-get.cc:798 cmdline/apt-get.cc:1859 cmdline/apt-get.cc:2070
 #: apt-pkg/cachefile.cc:67
 msgid "The list of sources could not be read."
 msgstr ""
 
-#: cmdline/apt-get.cc:814
-msgid "How odd.. The sizes didn't match, email apt@packages.debian.org"
-msgstr ""
-
-#: cmdline/apt-get.cc:819
+#: cmdline/apt-get.cc:818
 #, c-format
 msgid "Need to get %sB/%sB of archives.\n"
 msgstr ""
 
-#: cmdline/apt-get.cc:822
+#: cmdline/apt-get.cc:821
 #, c-format
 msgid "Need to get %sB of archives.\n"
 msgstr ""
 
-#: cmdline/apt-get.cc:827
+#: cmdline/apt-get.cc:826
 #, c-format
 msgid "After unpacking %sB of additional disk space will be used.\n"
 msgstr ""
 
-#: cmdline/apt-get.cc:830
+#: cmdline/apt-get.cc:829
 #, c-format
 msgid "After unpacking %sB disk space will be freed.\n"
 msgstr ""
 
-#: cmdline/apt-get.cc:844 cmdline/apt-get.cc:1927
-#, c-format
-msgid "Couldn't determine free space in %s"
-msgstr ""
-
-#: cmdline/apt-get.cc:847
+#: cmdline/apt-get.cc:846
 #, c-format
 msgid "You don't have enough free space in %s."
 msgstr ""
 
-#: cmdline/apt-get.cc:862 cmdline/apt-get.cc:882
+#: cmdline/apt-get.cc:861 cmdline/apt-get.cc:881
 msgid "Trivial Only specified but this is not a trivial operation."
 msgstr ""
 
-#: cmdline/apt-get.cc:864
+#: cmdline/apt-get.cc:863
 msgid "Yes, do as I say!"
 msgstr ""
 
-#: cmdline/apt-get.cc:866
+#: cmdline/apt-get.cc:865
 #, c-format
 msgid ""
 "You are about to do something potentially harmful.\n"
@@ -741,74 +720,74 @@ msgid ""
 " ?] "
 msgstr ""
 
-#: cmdline/apt-get.cc:872 cmdline/apt-get.cc:891
+#: cmdline/apt-get.cc:871 cmdline/apt-get.cc:890
 msgid "Abort."
 msgstr ""
 
-#: cmdline/apt-get.cc:887
+#: cmdline/apt-get.cc:886
 msgid "Do you want to continue [Y/n]? "
 msgstr ""
 
-#: cmdline/apt-get.cc:959 cmdline/apt-get.cc:1336 cmdline/apt-get.cc:1970
+#: cmdline/apt-get.cc:958 cmdline/apt-get.cc:1334 cmdline/apt-get.cc:1968
 #, c-format
 msgid "Failed to fetch %s  %s\n"
 msgstr ""
 
-#: cmdline/apt-get.cc:977
+#: cmdline/apt-get.cc:976
 msgid "Some files failed to download"
 msgstr ""
 
-#: cmdline/apt-get.cc:978 cmdline/apt-get.cc:1979
+#: cmdline/apt-get.cc:977 cmdline/apt-get.cc:1977
 msgid "Download complete and in download only mode"
 msgstr ""
 
-#: cmdline/apt-get.cc:984
+#: cmdline/apt-get.cc:983
 msgid ""
 "Unable to fetch some archives, maybe run apt-get update or try with --fix-"
 "missing?"
 msgstr ""
 
-#: cmdline/apt-get.cc:988
+#: cmdline/apt-get.cc:987
 msgid "--fix-missing and media swapping is not currently supported"
 msgstr ""
 
-#: cmdline/apt-get.cc:993
+#: cmdline/apt-get.cc:992
 msgid "Unable to correct missing packages."
 msgstr ""
 
-#: cmdline/apt-get.cc:994
+#: cmdline/apt-get.cc:993
 msgid "Aborting install."
 msgstr ""
 
-#: cmdline/apt-get.cc:1028
+#: cmdline/apt-get.cc:1026
 #, c-format
 msgid "Note, selecting %s instead of %s\n"
 msgstr ""
 
-#: cmdline/apt-get.cc:1038
+#: cmdline/apt-get.cc:1036
 #, c-format
 msgid "Skipping %s, it is already installed and upgrade is not set.\n"
 msgstr ""
 
-#: cmdline/apt-get.cc:1056
+#: cmdline/apt-get.cc:1054
 #, c-format
 msgid "Package %s is not installed, so not removed\n"
 msgstr ""
 
-#: cmdline/apt-get.cc:1067
+#: cmdline/apt-get.cc:1065
 #, c-format
 msgid "Package %s is a virtual package provided by:\n"
 msgstr ""
 
-#: cmdline/apt-get.cc:1079
+#: cmdline/apt-get.cc:1077
 msgid " [Installed]"
 msgstr ""
 
-#: cmdline/apt-get.cc:1084
+#: cmdline/apt-get.cc:1082
 msgid "You should explicitly select one to install."
 msgstr ""
 
-#: cmdline/apt-get.cc:1089
+#: cmdline/apt-get.cc:1087
 #, c-format
 msgid ""
 "Package %s is not available, but is referred to by another package.\n"
@@ -816,79 +795,79 @@ msgid ""
 "is only available from another source\n"
 msgstr ""
 
-#: cmdline/apt-get.cc:1108
+#: cmdline/apt-get.cc:1106
 msgid "However the following packages replace it:"
 msgstr ""
 
-#: cmdline/apt-get.cc:1111
+#: cmdline/apt-get.cc:1109
 #, c-format
 msgid "Package %s has no installation candidate"
 msgstr ""
 
-#: cmdline/apt-get.cc:1131
+#: cmdline/apt-get.cc:1129
 #, c-format
 msgid "Reinstallation of %s is not possible, it cannot be downloaded.\n"
 msgstr ""
 
-#: cmdline/apt-get.cc:1139
+#: cmdline/apt-get.cc:1137
 #, c-format
 msgid "%s is already the newest version.\n"
 msgstr ""
 
-#: cmdline/apt-get.cc:1166
+#: cmdline/apt-get.cc:1164
 #, c-format
 msgid "Release '%s' for '%s' was not found"
 msgstr ""
 
-#: cmdline/apt-get.cc:1168
+#: cmdline/apt-get.cc:1166
 #, c-format
 msgid "Version '%s' for '%s' was not found"
 msgstr ""
 
-#: cmdline/apt-get.cc:1174
+#: cmdline/apt-get.cc:1172
 #, c-format
 msgid "Selected version %s (%s) for %s\n"
 msgstr ""
 
-#: cmdline/apt-get.cc:1284
+#: cmdline/apt-get.cc:1282
 msgid "The update command takes no arguments"
 msgstr ""
 
-#: cmdline/apt-get.cc:1297 cmdline/apt-get.cc:1391
+#: cmdline/apt-get.cc:1295 cmdline/apt-get.cc:1389
 msgid "Unable to lock the list directory"
 msgstr ""
 
-#: cmdline/apt-get.cc:1355
+#: cmdline/apt-get.cc:1353
 msgid ""
 "Some index files failed to download, they have been ignored, or old ones "
 "used instead."
 msgstr ""
 
-#: cmdline/apt-get.cc:1374
+#: cmdline/apt-get.cc:1372
 msgid "Internal error, AllUpgrade broke stuff"
 msgstr ""
 
-#: cmdline/apt-get.cc:1473 cmdline/apt-get.cc:1509
+#: cmdline/apt-get.cc:1471 cmdline/apt-get.cc:1507
 #, c-format
 msgid "Couldn't find package %s"
 msgstr ""
 
-#: cmdline/apt-get.cc:1496
+#: cmdline/apt-get.cc:1494
 #, c-format
 msgid "Note, selecting %s for regex '%s'\n"
 msgstr ""
 
-#: cmdline/apt-get.cc:1526
+#: cmdline/apt-get.cc:1524
 msgid "You might want to run `apt-get -f install' to correct these:"
 msgstr ""
 
-#: cmdline/apt-get.cc:1529
+#: cmdline/apt-get.cc:1527
 msgid ""
 "Unmet dependencies. Try 'apt-get -f install' with no packages (or specify a "
 "solution)."
 msgstr ""
 
-#: cmdline/apt-get.cc:1541
+#: cmdline/apt-get.cc:1539
 msgid ""
 "Some packages could not be installed. This may mean that you have\n"
 "requested an impossible situation or if you are using the unstable\n"
@@ -896,153 +875,149 @@ msgid ""
 "or been moved out of Incoming."
 msgstr ""
 
-#: cmdline/apt-get.cc:1549
+#: cmdline/apt-get.cc:1547
 msgid ""
 "Since you only requested a single operation it is extremely likely that\n"
 "the package is simply not installable and a bug report against\n"
 "that package should be filed."
 msgstr ""
 
-#: cmdline/apt-get.cc:1554
+#: cmdline/apt-get.cc:1552
 msgid "The following information may help to resolve the situation:"
 msgstr ""
 
-#: cmdline/apt-get.cc:1557
+#: cmdline/apt-get.cc:1555
 msgid "Broken packages"
 msgstr ""
 
-#: cmdline/apt-get.cc:1583
+#: cmdline/apt-get.cc:1581
 msgid "The following extra packages will be installed:"
 msgstr ""
 
-#: cmdline/apt-get.cc:1654
+#: cmdline/apt-get.cc:1652
 msgid "Suggested packages:"
 msgstr ""
 
-#: cmdline/apt-get.cc:1655
+#: cmdline/apt-get.cc:1653
 msgid "Recommended packages:"
 msgstr ""
 
-#: cmdline/apt-get.cc:1675
+#: cmdline/apt-get.cc:1673
 msgid "Calculating upgrade... "
 msgstr ""
 
-#: cmdline/apt-get.cc:1678 methods/ftp.cc:702 methods/connect.cc:101
+#: cmdline/apt-get.cc:1676 methods/ftp.cc:702 methods/connect.cc:99
 msgid "Failed"
 msgstr ""
 
-#: cmdline/apt-get.cc:1683
+#: cmdline/apt-get.cc:1681
 msgid "Done"
 msgstr ""
 
-#: cmdline/apt-get.cc:1748 cmdline/apt-get.cc:1756
-msgid "Internal error, problem resolver broke stuff"
-msgstr ""
-
-#: cmdline/apt-get.cc:1856
+#: cmdline/apt-get.cc:1854
 msgid "Must specify at least one package to fetch source for"
 msgstr ""
 
-#: cmdline/apt-get.cc:1883 cmdline/apt-get.cc:2090
+#: cmdline/apt-get.cc:1881 cmdline/apt-get.cc:2088
 #, c-format
 msgid "Unable to find a source package for %s"
 msgstr ""
 
-#: cmdline/apt-get.cc:1930
+#: cmdline/apt-get.cc:1928
 #, c-format
 msgid "You don't have enough free space in %s"
 msgstr ""
 
-#: cmdline/apt-get.cc:1935
+#: cmdline/apt-get.cc:1933
 #, c-format
 msgid "Need to get %sB/%sB of source archives.\n"
 msgstr ""
 
-#: cmdline/apt-get.cc:1938
+#: cmdline/apt-get.cc:1936
 #, c-format
 msgid "Need to get %sB of source archives.\n"
 msgstr ""
 
-#: cmdline/apt-get.cc:1944
+#: cmdline/apt-get.cc:1942
 #, c-format
 msgid "Fetch source %s\n"
 msgstr ""
 
-#: cmdline/apt-get.cc:1975
+#: cmdline/apt-get.cc:1973
 msgid "Failed to fetch some archives."
 msgstr ""
 
-#: cmdline/apt-get.cc:2003
+#: cmdline/apt-get.cc:2001
 #, c-format
 msgid "Skipping unpack of already unpacked source in %s\n"
 msgstr ""
 
-#: cmdline/apt-get.cc:2015
+#: cmdline/apt-get.cc:2013
 #, c-format
 msgid "Unpack command '%s' failed.\n"
 msgstr ""
 
-#: cmdline/apt-get.cc:2032
+#: cmdline/apt-get.cc:2030
 #, c-format
 msgid "Build command '%s' failed.\n"
 msgstr ""
 
-#: cmdline/apt-get.cc:2051
+#: cmdline/apt-get.cc:2049
 msgid "Child process failed"
 msgstr ""
 
-#: cmdline/apt-get.cc:2067
+#: cmdline/apt-get.cc:2065
 msgid "Must specify at least one package to check builddeps for"
 msgstr ""
 
-#: cmdline/apt-get.cc:2095
+#: cmdline/apt-get.cc:2093
 #, c-format
 msgid "Unable to get build-dependency information for %s"
 msgstr ""
 
-#: cmdline/apt-get.cc:2115
+#: cmdline/apt-get.cc:2113
 #, c-format
 msgid "%s has no build depends.\n"
 msgstr ""
 
-#: cmdline/apt-get.cc:2167
+#: cmdline/apt-get.cc:2165
 #, c-format
 msgid ""
 "%s dependency for %s cannot be satisfied because the package %s cannot be "
 "found"
 msgstr ""
 
-#: cmdline/apt-get.cc:2219
+#: cmdline/apt-get.cc:2217
 #, c-format
 msgid ""
 "%s dependency for %s cannot be satisfied because no available versions of "
 "package %s can satisfy version requirements"
 msgstr ""
 
-#: cmdline/apt-get.cc:2254
+#: cmdline/apt-get.cc:2252
 #, c-format
 msgid "Failed to satisfy %s dependency for %s: Installed package %s is too new"
 msgstr ""
 
-#: cmdline/apt-get.cc:2279
+#: cmdline/apt-get.cc:2277
 #, c-format
 msgid "Failed to satisfy %s dependency for %s: %s"
 msgstr ""
 
-#: cmdline/apt-get.cc:2293
+#: cmdline/apt-get.cc:2291
 #, c-format
 msgid "Build-dependencies for %s could not be satisfied."
 msgstr ""
 
-#: cmdline/apt-get.cc:2297
+#: cmdline/apt-get.cc:2295
 msgid "Failed to process build dependencies"
 msgstr ""
 
-#: cmdline/apt-get.cc:2329
+#: cmdline/apt-get.cc:2327
 msgid "Supported modules:"
 msgstr ""
 
-#: cmdline/apt-get.cc:2370
+#: cmdline/apt-get.cc:2368
 msgid ""
 "Usage: apt-get [options] command\n"
 "       apt-get [options] install|remove pkg1 [pkg2 ...]\n"
@@ -1296,7 +1271,7 @@ msgid "File %s/%s overwrites the one in the package %s"
 msgstr ""
 
 #: apt-inst/extract.cc:467 apt-pkg/contrib/configuration.cc:750
-#: apt-pkg/contrib/cdromutl.cc:153 apt-pkg/acquire.cc:417 apt-pkg/clean.cc:38
+#: apt-pkg/contrib/cdromutl.cc:153 apt-pkg/acquire.cc:421 apt-pkg/clean.cc:38
 #, c-format
 msgid "Unable to read %s"
 msgstr ""
@@ -1432,1059 +1407,1066 @@ msgstr ""
 msgid "Unparsable control file"
 msgstr ""
 
-#: methods/cdrom.cc:114
-#, c-format
-msgid "Unable to read the cdrom database %s"
+#: apt-pkg/contrib/mmap.cc:82
+msgid "Can't mmap an empty file"
 msgstr ""
 
-#: methods/cdrom.cc:123
-msgid ""
-"Please use apt-cdrom to make this CD-ROM recognized by APT. apt-get update "
-"cannot be used to add new CD-ROMs"
+#: apt-pkg/contrib/mmap.cc:87
+#, c-format
+msgid "Couldn't make mmap of %lu bytes"
 msgstr ""
 
-#: methods/cdrom.cc:131 methods/cdrom.cc:169
-msgid "Wrong CD-ROM"
+#: apt-pkg/contrib/strutl.cc:941
+#, c-format
+msgid "Selection %s not found"
 msgstr ""
 
-#: methods/cdrom.cc:164
+#: apt-pkg/contrib/configuration.cc:436
 #, c-format
-msgid "Unable to unmount the CD-ROM in %s, it may still be in use."
+msgid "Unrecognized type abbreviation: '%c'"
 msgstr ""
 
-#: methods/cdrom.cc:178 methods/file.cc:79 methods/rsh.cc:264
-msgid "File not found"
+#: apt-pkg/contrib/configuration.cc:494
+#, c-format
+msgid "Opening configuration file %s"
 msgstr ""
 
-#: methods/copy.cc:42 methods/gpgv.cc:265 methods/gzip.cc:133
-#: methods/gzip.cc:142
-msgid "Failed to stat"
+#: apt-pkg/contrib/configuration.cc:512
+#, c-format
+msgid "Line %d too long (max %d)"
 msgstr ""
 
-#: methods/copy.cc:79 methods/gpgv.cc:262 methods/gzip.cc:139
-msgid "Failed to set modification time"
+#: apt-pkg/contrib/configuration.cc:608
+#, c-format
+msgid "Syntax error %s:%u: Block starts with no name."
 msgstr ""
 
-#: methods/file.cc:44
-msgid "Invalid URI, local URIS must not start with //"
+#: apt-pkg/contrib/configuration.cc:627
+#, c-format
+msgid "Syntax error %s:%u: Malformed tag"
 msgstr ""
 
-#. Login must be before getpeername otherwise dante won't work.
-#: methods/ftp.cc:162
-msgid "Logging in"
+#: apt-pkg/contrib/configuration.cc:644
+#, c-format
+msgid "Syntax error %s:%u: Extra junk after value"
 msgstr ""
 
-#: methods/ftp.cc:168
-msgid "Unable to determine the peer name"
+#: apt-pkg/contrib/configuration.cc:684
+#, c-format
+msgid "Syntax error %s:%u: Directives can only be done at the top level"
 msgstr ""
 
-#: methods/ftp.cc:173
-msgid "Unable to determine the local name"
+#: apt-pkg/contrib/configuration.cc:691
+#, c-format
+msgid "Syntax error %s:%u: Too many nested includes"
 msgstr ""
 
-#: methods/ftp.cc:204 methods/ftp.cc:232
+#: apt-pkg/contrib/configuration.cc:695 apt-pkg/contrib/configuration.cc:700
 #, c-format
-msgid "The server refused the connection and said: %s"
+msgid "Syntax error %s:%u: Included from here"
 msgstr ""
 
-#: methods/ftp.cc:210
+#: apt-pkg/contrib/configuration.cc:704
 #, c-format
-msgid "USER failed, server said: %s"
+msgid "Syntax error %s:%u: Unsupported directive '%s'"
 msgstr ""
 
-#: methods/ftp.cc:217
+#: apt-pkg/contrib/configuration.cc:738
 #, c-format
-msgid "PASS failed, server said: %s"
+msgid "Syntax error %s:%u: Extra junk at end of file"
 msgstr ""
 
-#: methods/ftp.cc:237
-msgid ""
-"A proxy server was specified but no login script, Acquire::ftp::ProxyLogin "
-"is empty."
+#: apt-pkg/contrib/progress.cc:154
+#, c-format
+msgid "%c%s... Error!"
 msgstr ""
 
-#: methods/ftp.cc:265
+#: apt-pkg/contrib/progress.cc:156
 #, c-format
-msgid "Login script command '%s' failed, server said: %s"
+msgid "%c%s... Done"
 msgstr ""
 
-#: methods/ftp.cc:291
+#: apt-pkg/contrib/cmndline.cc:80
 #, c-format
-msgid "TYPE failed, server said: %s"
+msgid "Command line option '%c' [from %s] is not known."
 msgstr ""
 
-#: methods/ftp.cc:329 methods/ftp.cc:440 methods/rsh.cc:183 methods/rsh.cc:226
-msgid "Connection timeout"
+#: apt-pkg/contrib/cmndline.cc:106 apt-pkg/contrib/cmndline.cc:114
+#: apt-pkg/contrib/cmndline.cc:122
+#, c-format
+msgid "Command line option %s is not understood"
 msgstr ""
 
-#: methods/ftp.cc:335
-msgid "Server closed the connection"
+#: apt-pkg/contrib/cmndline.cc:127
+#, c-format
+msgid "Command line option %s is not boolean"
 msgstr ""
 
-#: methods/ftp.cc:338 apt-pkg/contrib/fileutl.cc:471 methods/rsh.cc:190
-msgid "Read error"
+#: apt-pkg/contrib/cmndline.cc:166 apt-pkg/contrib/cmndline.cc:187
+#, c-format
+msgid "Option %s requires an argument."
 msgstr ""
 
-#: methods/ftp.cc:345 methods/rsh.cc:197
-msgid "A response overflowed the buffer."
+#: apt-pkg/contrib/cmndline.cc:201 apt-pkg/contrib/cmndline.cc:207
+#, c-format
+msgid "Option %s: Configuration item specification must have an =<val>."
 msgstr ""
 
-#: methods/ftp.cc:362 methods/ftp.cc:374
-msgid "Protocol corruption"
+#: apt-pkg/contrib/cmndline.cc:237
+#, c-format
+msgid "Option %s requires an integer argument, not '%s'"
 msgstr ""
 
-#: methods/ftp.cc:446 apt-pkg/contrib/fileutl.cc:510 methods/rsh.cc:232
-msgid "Write error"
+#: apt-pkg/contrib/cmndline.cc:268
+#, c-format
+msgid "Option '%s' is too long"
 msgstr ""
 
-#: methods/ftp.cc:687 methods/ftp.cc:693 methods/ftp.cc:729
-msgid "Could not create a socket"
+#: apt-pkg/contrib/cmndline.cc:301
+#, c-format
+msgid "Sense %s is not understood, try true or false."
 msgstr ""
 
-#: methods/ftp.cc:698
-msgid "Could not connect data socket, connection timed out"
+#: apt-pkg/contrib/cmndline.cc:351
+#, c-format
+msgid "Invalid operation %s"
 msgstr ""
 
-#: methods/ftp.cc:704
-msgid "Could not connect passive socket."
+#: apt-pkg/contrib/cdromutl.cc:55
+#, c-format
+msgid "Unable to stat the mount point %s"
 msgstr ""
 
-#: methods/ftp.cc:722
-msgid "getaddrinfo was unable to get a listening socket"
+#: apt-pkg/contrib/cdromutl.cc:149 apt-pkg/acquire.cc:427 apt-pkg/clean.cc:44
+#, c-format
+msgid "Unable to change to %s"
 msgstr ""
 
-#: methods/ftp.cc:736
-msgid "Could not bind a socket"
+#: apt-pkg/contrib/cdromutl.cc:190
+msgid "Failed to stat the cdrom"
 msgstr ""
 
-#: methods/ftp.cc:740
-msgid "Could not listen on the socket"
+#: apt-pkg/contrib/fileutl.cc:82
+#, c-format
+msgid "Not using locking for read only lock file %s"
 msgstr ""
 
-#: methods/ftp.cc:747
-msgid "Could not determine the socket's name"
+#: apt-pkg/contrib/fileutl.cc:87
+#, c-format
+msgid "Could not open lock file %s"
 msgstr ""
 
-#: methods/ftp.cc:779
-msgid "Unable to send PORT command"
+#: apt-pkg/contrib/fileutl.cc:105
+#, c-format
+msgid "Not using locking for nfs mounted lock file %s"
 msgstr ""
 
-#: methods/ftp.cc:789
+#: apt-pkg/contrib/fileutl.cc:109
 #, c-format
-msgid "Unknown address family %u (AF_*)"
+msgid "Could not get lock %s"
 msgstr ""
 
-#: methods/ftp.cc:798
+#: apt-pkg/contrib/fileutl.cc:377
 #, c-format
-msgid "EPRT failed, server said: %s"
+msgid "Waited for %s but it wasn't there"
 msgstr ""
 
-#: methods/ftp.cc:818
-msgid "Data socket connect timed out"
+#: apt-pkg/contrib/fileutl.cc:387
+#, c-format
+msgid "Sub-process %s received a segmentation fault."
 msgstr ""
 
-#: methods/ftp.cc:825
-msgid "Unable to accept connection"
+#: apt-pkg/contrib/fileutl.cc:390
+#, c-format
+msgid "Sub-process %s returned an error code (%u)"
 msgstr ""
 
-#: methods/ftp.cc:864 methods/http.cc:920 methods/rsh.cc:303
-msgid "Problem hashing file"
+#: apt-pkg/contrib/fileutl.cc:392
+#, c-format
+msgid "Sub-process %s exited unexpectedly"
 msgstr ""
 
-#: methods/ftp.cc:877
+#: apt-pkg/contrib/fileutl.cc:436
 #, c-format
-msgid "Unable to fetch file, server said '%s'"
+msgid "Could not open file %s"
 msgstr ""
 
-#: methods/ftp.cc:892 methods/rsh.cc:322
-msgid "Data socket timed out"
+#: apt-pkg/contrib/fileutl.cc:471 methods/ftp.cc:338 methods/rsh.cc:190
+msgid "Read error"
 msgstr ""
 
-#: methods/ftp.cc:922
+#: apt-pkg/contrib/fileutl.cc:492
 #, c-format
-msgid "Data transfer failed, server said '%s'"
-msgstr ""
-
-#. Get the files information
-#: methods/ftp.cc:997
-msgid "Query"
+msgid "read, still have %lu to read but none left"
 msgstr ""
 
-#: methods/ftp.cc:1106
-msgid "Unable to invoke "
+#: apt-pkg/contrib/fileutl.cc:510 methods/ftp.cc:446 methods/rsh.cc:232
+msgid "Write error"
 msgstr ""
 
-#: methods/connect.cc:64
+#: apt-pkg/contrib/fileutl.cc:522
 #, c-format
-msgid "Connecting to %s (%s)"
+msgid "write, still have %lu to write but couldn't"
 msgstr ""
 
-#: methods/connect.cc:71
-#, c-format
-msgid "[IP: %s %s]"
+#: apt-pkg/contrib/fileutl.cc:597
+msgid "Problem closing the file"
 msgstr ""
 
-#: methods/connect.cc:80
-#, c-format
-msgid "Could not create a socket for %s (f=%u t=%u p=%u)"
+#: apt-pkg/contrib/fileutl.cc:603
+msgid "Problem unlinking the file"
 msgstr ""
 
-#: methods/connect.cc:86
-#, c-format
-msgid "Cannot initiate the connection to %s:%s (%s)."
+#: apt-pkg/contrib/fileutl.cc:614
+msgid "Problem syncing the file"
 msgstr ""
 
-#: methods/connect.cc:93
-#, c-format
-msgid "Could not connect to %s:%s (%s), connection timed out"
+#: apt-pkg/pkgcache.cc:126
+msgid "Empty package cache"
 msgstr ""
 
-#: methods/connect.cc:106
-#, c-format
-msgid "Could not connect to %s:%s (%s)."
+#: apt-pkg/pkgcache.cc:132
+msgid "The package cache file is corrupted"
 msgstr ""
 
-#. We say this mainly because the pause here is for the
-#. ssh connection that is still going
-#: methods/connect.cc:134 methods/rsh.cc:425
-#, c-format
-msgid "Connecting to %s"
+#: apt-pkg/pkgcache.cc:137
+msgid "The package cache file is an incompatible version"
 msgstr ""
 
-#: methods/connect.cc:165
+#: apt-pkg/pkgcache.cc:142
 #, c-format
-msgid "Could not resolve '%s'"
+msgid "This APT does not support the versioning system '%s'"
 msgstr ""
 
-#: methods/connect.cc:171
-#, c-format
-msgid "Temporary failure resolving '%s'"
+#: apt-pkg/pkgcache.cc:147
+msgid "The package cache was built for a different architecture"
 msgstr ""
 
-#: methods/connect.cc:174
-#, c-format
-msgid "Something wicked happened resolving '%s:%s' (%i)"
+#: apt-pkg/pkgcache.cc:218
+msgid "Depends"
 msgstr ""
 
-#: methods/connect.cc:221
-#, c-format
-msgid "Unable to connect to %s %s:"
+#: apt-pkg/pkgcache.cc:218
+msgid "PreDepends"
 msgstr ""
 
-#: methods/gpgv.cc:92
-msgid "E: Argument list from Acquire::gpgv::Options too long. Exiting."
+#: apt-pkg/pkgcache.cc:218
+msgid "Suggests"
 msgstr ""
 
-#: methods/gpgv.cc:191
-msgid ""
-"Internal error: Good signature, but could not determine key fingerprint?!"
+#: apt-pkg/pkgcache.cc:219
+msgid "Recommends"
 msgstr ""
 
-#: methods/gpgv.cc:196
-msgid "At least one invalid signature was encountered."
+#: apt-pkg/pkgcache.cc:219
+msgid "Conflicts"
 msgstr ""
 
-#. FIXME String concatenation considered harmful.
-#: methods/gpgv.cc:201
-msgid "Could not execute "
+#: apt-pkg/pkgcache.cc:219
+msgid "Replaces"
 msgstr ""
 
-#: methods/gpgv.cc:202
-msgid " to verify signature (is gnupg installed?)"
+#: apt-pkg/pkgcache.cc:220
+msgid "Obsoletes"
 msgstr ""
 
-#: methods/gpgv.cc:206
-msgid "Unknown error executing gpgv"
+#: apt-pkg/pkgcache.cc:231
+msgid "important"
 msgstr ""
 
-#: methods/gpgv.cc:237
-msgid "The following signatures were invalid:\n"
+#: apt-pkg/pkgcache.cc:231
+msgid "required"
 msgstr ""
 
-#: methods/gpgv.cc:244
-msgid ""
-"The following signatures couldn't be verified because the public key is not "
-"available:\n"
+#: apt-pkg/pkgcache.cc:231
+msgid "standard"
 msgstr ""
 
-#: methods/gzip.cc:57
-#, c-format
-msgid "Couldn't open pipe for %s"
+#: apt-pkg/pkgcache.cc:232
+msgid "optional"
 msgstr ""
 
-#: methods/gzip.cc:102
-#, c-format
-msgid "Read error from %s process"
+#: apt-pkg/pkgcache.cc:232
+msgid "extra"
 msgstr ""
 
-#: methods/http.cc:344
-msgid "Waiting for headers"
+#: apt-pkg/depcache.cc:60 apt-pkg/depcache.cc:89
+msgid "Building dependency tree"
 msgstr ""
 
-#: methods/http.cc:490
-#, c-format
-msgid "Got a single header line over %u chars"
+#: apt-pkg/depcache.cc:61
+msgid "Candidate versions"
 msgstr ""
 
-#: methods/http.cc:498
-msgid "Bad header line"
+#: apt-pkg/depcache.cc:90
+msgid "Dependency generation"
 msgstr ""
 
-#: methods/http.cc:517 methods/http.cc:524
-msgid "The HTTP server sent an invalid reply header"
+#: apt-pkg/tagfile.cc:73
+#, c-format
+msgid "Unable to parse package file %s (1)"
 msgstr ""
 
-#: methods/http.cc:553
-msgid "The HTTP server sent an invalid Content-Length header"
+#: apt-pkg/tagfile.cc:160
+#, c-format
+msgid "Unable to parse package file %s (2)"
 msgstr ""
 
-#: methods/http.cc:568
-msgid "The HTTP server sent an invalid Content-Range header"
+#: apt-pkg/sourcelist.cc:87
+#, c-format
+msgid "Malformed line %lu in source list %s (URI)"
 msgstr ""
 
-#: methods/http.cc:570
-msgid "This HTTP server has broken range support"
+#: apt-pkg/sourcelist.cc:89
+#, c-format
+msgid "Malformed line %lu in source list %s (dist)"
 msgstr ""
 
-#: methods/http.cc:594
-msgid "Unknown date format"
+#: apt-pkg/sourcelist.cc:92
+#, c-format
+msgid "Malformed line %lu in source list %s (URI parse)"
 msgstr ""
 
-#: methods/http.cc:741
-msgid "Select failed"
+#: apt-pkg/sourcelist.cc:98
+#, c-format
+msgid "Malformed line %lu in source list %s (absolute dist)"
 msgstr ""
 
-#: methods/http.cc:746
-msgid "Connection timed out"
+#: apt-pkg/sourcelist.cc:105
+#, c-format
+msgid "Malformed line %lu in source list %s (dist parse)"
 msgstr ""
 
-#: methods/http.cc:769
-msgid "Error writing to output file"
+#: apt-pkg/sourcelist.cc:156
+#, c-format
+msgid "Opening %s"
 msgstr ""
 
-#: methods/http.cc:797
-msgid "Error writing to file"
+#: apt-pkg/sourcelist.cc:170 apt-pkg/cdrom.cc:426
+#, c-format
+msgid "Line %u too long in source list %s."
 msgstr ""
 
-#: methods/http.cc:822
-msgid "Error writing to the file"
+#: apt-pkg/sourcelist.cc:187
+#, c-format
+msgid "Malformed line %u in source list %s (type)"
 msgstr ""
 
-#: methods/http.cc:836
-msgid "Error reading from server. Remote end closed connection"
+#: apt-pkg/sourcelist.cc:191
+#, c-format
+msgid "Type '%s' is not known on line %u in source list %s"
 msgstr ""
 
-#: methods/http.cc:838
-msgid "Error reading from server"
+#: apt-pkg/sourcelist.cc:199 apt-pkg/sourcelist.cc:202
+#, c-format
+msgid "Malformed line %u in source list %s (vendor id)"
 msgstr ""
 
-#: methods/http.cc:1069
-msgid "Bad header data"
+#: apt-pkg/packagemanager.cc:402
+#, c-format
+msgid ""
+"This installation run will require temporarily removing the essential "
+"package %s due to a Conflicts/Pre-Depends loop. This is often bad, but if "
+"you really want to do it, activate the APT::Force-LoopBreak option."
 msgstr ""
 
-#: methods/http.cc:1086
-msgid "Connection failed"
+#: apt-pkg/pkgrecords.cc:37
+#, c-format
+msgid "Index file type '%s' is not supported"
 msgstr ""
 
-#: methods/http.cc:1177
-msgid "Internal error"
+#: apt-pkg/algorithms.cc:241
+#, c-format
+msgid ""
+"The package %s needs to be reinstalled, but I can't find an archive for it."
 msgstr ""
 
-#: apt-pkg/contrib/mmap.cc:82
-msgid "Can't mmap an empty file"
+#: apt-pkg/algorithms.cc:1059
+msgid ""
+"Error, pkgProblemResolver::Resolve generated breaks, this may be caused by "
+"held packages."
 msgstr ""
 
-#: apt-pkg/contrib/mmap.cc:87
-#, c-format
-msgid "Couldn't make mmap of %lu bytes"
+#: apt-pkg/algorithms.cc:1061
+msgid "Unable to correct problems, you have held broken packages."
 msgstr ""
 
-#: apt-pkg/contrib/strutl.cc:941
+#: apt-pkg/acquire.cc:62
 #, c-format
-msgid "Selection %s not found"
+msgid "Lists directory %spartial is missing."
 msgstr ""
 
-#: apt-pkg/contrib/configuration.cc:436
+#: apt-pkg/acquire.cc:66
 #, c-format
-msgid "Unrecognized type abbreviation: '%c'"
+msgid "Archive directory %spartial is missing."
 msgstr ""
 
-#: apt-pkg/contrib/configuration.cc:494
+#: apt-pkg/acquire.cc:821
 #, c-format
-msgid "Opening configuration file %s"
+msgid "Downloading file %li of %li (%s remaining)"
 msgstr ""
 
-#: apt-pkg/contrib/configuration.cc:512
+#: apt-pkg/acquire-worker.cc:113 apt-pkg/acquire-worker.cc:112
 #, c-format
-msgid "Line %d too long (max %d)"
+msgid "The method driver %s could not be found."
 msgstr ""
 
-#: apt-pkg/contrib/configuration.cc:608
+#: apt-pkg/acquire-worker.cc:162 apt-pkg/acquire-worker.cc:161
 #, c-format
-msgid "Syntax error %s:%u: Block starts with no name."
+msgid "Method %s did not start correctly"
 msgstr ""
 
-#: apt-pkg/contrib/configuration.cc:627
+#: apt-pkg/acquire-worker.cc:377
 #, c-format
-msgid "Syntax error %s:%u: Malformed tag"
+msgid "Please insert the disc labeled: '%s' in the drive '%s' and press enter."
 msgstr ""
 
-#: apt-pkg/contrib/configuration.cc:644
+#: apt-pkg/init.cc:119
 #, c-format
-msgid "Syntax error %s:%u: Extra junk after value"
+msgid "Packaging system '%s' is not supported"
 msgstr ""
 
-#: apt-pkg/contrib/configuration.cc:684
-#, c-format
-msgid "Syntax error %s:%u: Directives can only be done at the top level"
+#: apt-pkg/init.cc:135
+msgid "Unable to determine a suitable packaging system type"
 msgstr ""
 
-#: apt-pkg/contrib/configuration.cc:691
+#: apt-pkg/clean.cc:61
 #, c-format
-msgid "Syntax error %s:%u: Too many nested includes"
+msgid "Unable to stat %s."
 msgstr ""
 
-#: apt-pkg/contrib/configuration.cc:695 apt-pkg/contrib/configuration.cc:700
-#, c-format
-msgid "Syntax error %s:%u: Included from here"
+#: apt-pkg/srcrecords.cc:48
+msgid "You must put some 'source' URIs in your sources.list"
 msgstr ""
 
-#: apt-pkg/contrib/configuration.cc:704
-#, c-format
-msgid "Syntax error %s:%u: Unsupported directive '%s'"
+#: apt-pkg/cachefile.cc:73
+msgid "The package lists or status file could not be parsed or opened."
 msgstr ""
 
-#: apt-pkg/contrib/configuration.cc:738
-#, c-format
-msgid "Syntax error %s:%u: Extra junk at end of file"
+#: apt-pkg/cachefile.cc:77
+msgid "You may want to run apt-get update to correct these problems"
 msgstr ""
 
-#: apt-pkg/contrib/progress.cc:154
-#, c-format
-msgid "%c%s... Error!"
+#: apt-pkg/policy.cc:269
+msgid "Invalid record in the preferences file, no Package header"
 msgstr ""
 
-#: apt-pkg/contrib/progress.cc:156
+#: apt-pkg/policy.cc:291
 #, c-format
-msgid "%c%s... Done"
+msgid "Did not understand pin type %s"
 msgstr ""
 
-#: apt-pkg/contrib/cmndline.cc:80
-#, c-format
-msgid "Command line option '%c' [from %s] is not known."
+#: apt-pkg/policy.cc:299
+msgid "No priority (or zero) specified for pin"
 msgstr ""
 
-#: apt-pkg/contrib/cmndline.cc:106 apt-pkg/contrib/cmndline.cc:114
-#: apt-pkg/contrib/cmndline.cc:122
-#, c-format
-msgid "Command line option %s is not understood"
+#: apt-pkg/pkgcachegen.cc:74
+msgid "Cache has an incompatible versioning system"
 msgstr ""
 
-#: apt-pkg/contrib/cmndline.cc:127
+#: apt-pkg/pkgcachegen.cc:117
 #, c-format
-msgid "Command line option %s is not boolean"
+msgid "Error occurred while processing %s (NewPackage)"
 msgstr ""
 
-#: apt-pkg/contrib/cmndline.cc:166 apt-pkg/contrib/cmndline.cc:187
+#: apt-pkg/pkgcachegen.cc:129
 #, c-format
-msgid "Option %s requires an argument."
+msgid "Error occurred while processing %s (UsePackage1)"
 msgstr ""
 
-#: apt-pkg/contrib/cmndline.cc:201 apt-pkg/contrib/cmndline.cc:207
+#: apt-pkg/pkgcachegen.cc:150
 #, c-format
-msgid "Option %s: Configuration item specification must have an =<val>."
+msgid "Error occurred while processing %s (UsePackage2)"
 msgstr ""
 
-#: apt-pkg/contrib/cmndline.cc:237
+#: apt-pkg/pkgcachegen.cc:154
 #, c-format
-msgid "Option %s requires an integer argument, not '%s'"
+msgid "Error occurred while processing %s (NewFileVer1)"
 msgstr ""
 
-#: apt-pkg/contrib/cmndline.cc:268
+#: apt-pkg/pkgcachegen.cc:184
 #, c-format
-msgid "Option '%s' is too long"
+msgid "Error occurred while processing %s (NewVersion1)"
 msgstr ""
 
-#: apt-pkg/contrib/cmndline.cc:301
+#: apt-pkg/pkgcachegen.cc:188
 #, c-format
-msgid "Sense %s is not understood, try true or false."
+msgid "Error occurred while processing %s (UsePackage3)"
 msgstr ""
 
-#: apt-pkg/contrib/cmndline.cc:351
+#: apt-pkg/pkgcachegen.cc:192
 #, c-format
-msgid "Invalid operation %s"
+msgid "Error occurred while processing %s (NewVersion2)"
 msgstr ""
 
-#: apt-pkg/contrib/cdromutl.cc:55
-#, c-format
-msgid "Unable to stat the mount point %s"
+#: apt-pkg/pkgcachegen.cc:207
+msgid "Wow, you exceeded the number of package names this APT is capable of."
 msgstr ""
 
-#: apt-pkg/contrib/cdromutl.cc:149 apt-pkg/acquire.cc:423 apt-pkg/clean.cc:44
-#, c-format
-msgid "Unable to change to %s"
+#: apt-pkg/pkgcachegen.cc:210
+msgid "Wow, you exceeded the number of versions this APT is capable of."
 msgstr ""
 
-#: apt-pkg/contrib/cdromutl.cc:190
-msgid "Failed to stat the cdrom"
+#: apt-pkg/pkgcachegen.cc:213
+msgid "Wow, you exceeded the number of dependencies this APT is capable of."
 msgstr ""
 
-#: apt-pkg/contrib/fileutl.cc:82
+#: apt-pkg/pkgcachegen.cc:241
 #, c-format
-msgid "Not using locking for read only lock file %s"
+msgid "Error occurred while processing %s (FindPkg)"
 msgstr ""
 
-#: apt-pkg/contrib/fileutl.cc:87
+#: apt-pkg/pkgcachegen.cc:254
 #, c-format
-msgid "Could not open lock file %s"
+msgid "Error occurred while processing %s (CollectFileProvides)"
 msgstr ""
 
-#: apt-pkg/contrib/fileutl.cc:105
+#: apt-pkg/pkgcachegen.cc:260
 #, c-format
-msgid "Not using locking for nfs mounted lock file %s"
+msgid "Package %s %s was not found while processing file dependencies"
 msgstr ""
 
-#: apt-pkg/contrib/fileutl.cc:109
+#: apt-pkg/pkgcachegen.cc:574
 #, c-format
-msgid "Could not get lock %s"
+msgid "Couldn't stat source package list %s"
 msgstr ""
 
-#: apt-pkg/contrib/fileutl.cc:377
-#, c-format
-msgid "Waited for %s but it wasn't there"
+#: apt-pkg/pkgcachegen.cc:658
+msgid "Collecting File Provides"
 msgstr ""
 
-#: apt-pkg/contrib/fileutl.cc:387
-#, c-format
-msgid "Sub-process %s received a segmentation fault."
+#: apt-pkg/pkgcachegen.cc:785 apt-pkg/pkgcachegen.cc:792
+msgid "IO Error saving source cache"
 msgstr ""
 
-#: apt-pkg/contrib/fileutl.cc:390
+#: apt-pkg/acquire-item.cc:129
 #, c-format
-msgid "Sub-process %s returned an error code (%u)"
+msgid "rename failed, %s (%s -> %s)."
 msgstr ""
 
-#: apt-pkg/contrib/fileutl.cc:392
-#, c-format
-msgid "Sub-process %s exited unexpectedly"
+#: apt-pkg/acquire-item.cc:618 apt-pkg/acquire-item.cc:1290
+#: apt-pkg/acquire-item.cc:553 apt-pkg/acquire-item.cc:1218
+msgid "MD5Sum mismatch"
 msgstr ""
 
-#: apt-pkg/contrib/fileutl.cc:436
+#: apt-pkg/acquire-item.cc:1104 apt-pkg/acquire-item.cc:1032
 #, c-format
-msgid "Could not open file %s"
+msgid ""
+"I wasn't able to locate a file for the %s package. This might mean you need "
+"to manually fix this package. (due to missing arch)"
 msgstr ""
 
-#: apt-pkg/contrib/fileutl.cc:492
+#: apt-pkg/acquire-item.cc:1157 apt-pkg/acquire-item.cc:1085
 #, c-format
-msgid "read, still have %lu to read but none left"
+msgid ""
+"I wasn't able to locate file for the %s package. This might mean you need to "
+"manually fix this package."
 msgstr ""
 
-#: apt-pkg/contrib/fileutl.cc:522
+#: apt-pkg/acquire-item.cc:1193 apt-pkg/acquire-item.cc:1121
 #, c-format
-msgid "write, still have %lu to write but couldn't"
-msgstr ""
-
-#: apt-pkg/contrib/fileutl.cc:597
-msgid "Problem closing the file"
+msgid ""
+"The package index files are corrupted. No Filename: field for package %s."
 msgstr ""
 
-#: apt-pkg/contrib/fileutl.cc:603
-msgid "Problem unlinking the file"
+#: apt-pkg/acquire-item.cc:1280 apt-pkg/acquire-item.cc:1208
+msgid "Size mismatch"
 msgstr ""
 
-#: apt-pkg/contrib/fileutl.cc:614
-msgid "Problem syncing the file"
+#: apt-pkg/vendorlist.cc:66
+#, c-format
+msgid "Vendor block %s contains no fingerprint"
 msgstr ""
 
-#: apt-pkg/pkgcache.cc:126
-msgid "Empty package cache"
+#: apt-pkg/cdrom.cc:507 apt-pkg/cdrom.cc:504
+#, c-format
+msgid ""
+"Using CD-ROM mount point %s\n"
+"Mounting CD-ROM\n"
 msgstr ""
 
-#: apt-pkg/pkgcache.cc:132
-msgid "The package cache file is corrupted"
+#: apt-pkg/cdrom.cc:516 apt-pkg/cdrom.cc:598 apt-pkg/cdrom.cc:513
+#: apt-pkg/cdrom.cc:595
+msgid "Identifying.. "
 msgstr ""
 
-#: apt-pkg/pkgcache.cc:137
-msgid "The package cache file is an incompatible version"
+#: apt-pkg/cdrom.cc:541 apt-pkg/cdrom.cc:538
+#, c-format
+msgid "Stored label: %s \n"
 msgstr ""
 
-#: apt-pkg/pkgcache.cc:142
+#: apt-pkg/cdrom.cc:561 apt-pkg/cdrom.cc:558
 #, c-format
-msgid "This APT does not support the versioning system '%s'"
+msgid "Using CD-ROM mount point %s\n"
 msgstr ""
 
-#: apt-pkg/pkgcache.cc:147
-msgid "The package cache was built for a different architecture"
+#: apt-pkg/cdrom.cc:579 apt-pkg/cdrom.cc:576
+msgid "Unmounting CD-ROM\n"
 msgstr ""
 
-#: apt-pkg/pkgcache.cc:218
-msgid "Depends"
+#: apt-pkg/cdrom.cc:583 apt-pkg/cdrom.cc:580
+msgid "Waiting for disc...\n"
 msgstr ""
 
-#: apt-pkg/pkgcache.cc:218
-msgid "PreDepends"
+#. Mount the new CDROM
+#: apt-pkg/cdrom.cc:591 apt-pkg/cdrom.cc:588
+msgid "Mounting CD-ROM...\n"
 msgstr ""
 
-#: apt-pkg/pkgcache.cc:218
-msgid "Suggests"
+#: apt-pkg/cdrom.cc:609 apt-pkg/cdrom.cc:606
+msgid "Scanning disc for index files..\n"
 msgstr ""
 
-#: apt-pkg/pkgcache.cc:219
-msgid "Recommends"
+#: apt-pkg/cdrom.cc:647 apt-pkg/cdrom.cc:644
+#, c-format
+msgid "Found %i package indexes, %i source indexes and %i signatures\n"
 msgstr ""
 
-#: apt-pkg/pkgcache.cc:219
-msgid "Conflicts"
+#: apt-pkg/cdrom.cc:704 apt-pkg/cdrom.cc:701
+msgid "That is not a valid name, try again.\n"
 msgstr ""
 
-#: apt-pkg/pkgcache.cc:219
-msgid "Replaces"
+#: apt-pkg/cdrom.cc:720 apt-pkg/cdrom.cc:717
+#, c-format
+msgid ""
+"This disc is called: \n"
+"'%s'\n"
 msgstr ""
 
-#: apt-pkg/pkgcache.cc:220
-msgid "Obsoletes"
+#: apt-pkg/cdrom.cc:724 apt-pkg/cdrom.cc:721
+msgid "Copying package lists..."
 msgstr ""
 
-#: apt-pkg/pkgcache.cc:231
-msgid "important"
+#: apt-pkg/cdrom.cc:748 apt-pkg/cdrom.cc:745
+msgid "Writing new source list\n"
 msgstr ""
 
-#: apt-pkg/pkgcache.cc:231
-msgid "required"
+#: apt-pkg/cdrom.cc:757 apt-pkg/cdrom.cc:754
+msgid "Source list entries for this disc are:\n"
 msgstr ""
 
-#: apt-pkg/pkgcache.cc:231
-msgid "standard"
+#: apt-pkg/cdrom.cc:791 apt-pkg/cdrom.cc:788
+msgid "Unmounting CD-ROM..."
 msgstr ""
 
-#: apt-pkg/pkgcache.cc:232
-msgid "optional"
+#: apt-pkg/indexcopy.cc:261
+#, c-format
+msgid "Wrote %i records.\n"
 msgstr ""
 
-#: apt-pkg/pkgcache.cc:232
-msgid "extra"
+#: apt-pkg/indexcopy.cc:263
+#, c-format
+msgid "Wrote %i records with %i missing files.\n"
 msgstr ""
 
-#: apt-pkg/depcache.cc:60 apt-pkg/depcache.cc:89
-msgid "Building dependency tree"
+#: apt-pkg/indexcopy.cc:266
+#, c-format
+msgid "Wrote %i records with %i mismatched files\n"
 msgstr ""
 
-#: apt-pkg/depcache.cc:61
-msgid "Candidate versions"
+#: apt-pkg/indexcopy.cc:269
+#, c-format
+msgid "Wrote %i records with %i missing files and %i mismatched files\n"
 msgstr ""
 
-#: apt-pkg/depcache.cc:90
-msgid "Dependency generation"
+#: apt-pkg/deb/dpkgpm.cc:358
+#, c-format
+msgid "Preparing %s"
 msgstr ""
 
-#: apt-pkg/tagfile.cc:73
+#: apt-pkg/deb/dpkgpm.cc:359
 #, c-format
-msgid "Unable to parse package file %s (1)"
+msgid "Unpacking %s"
 msgstr ""
 
-#: apt-pkg/tagfile.cc:160
+#: apt-pkg/deb/dpkgpm.cc:364
 #, c-format
-msgid "Unable to parse package file %s (2)"
+msgid "Preparing to configure %s"
 msgstr ""
 
-#: apt-pkg/sourcelist.cc:87
+#: apt-pkg/deb/dpkgpm.cc:365
 #, c-format
-msgid "Malformed line %lu in source list %s (URI)"
+msgid "Configuring %s"
 msgstr ""
 
-#: apt-pkg/sourcelist.cc:89
+#: apt-pkg/deb/dpkgpm.cc:366
 #, c-format
-msgid "Malformed line %lu in source list %s (dist)"
+msgid "Installed %s"
 msgstr ""
 
-#: apt-pkg/sourcelist.cc:92
+#: apt-pkg/deb/dpkgpm.cc:371
 #, c-format
-msgid "Malformed line %lu in source list %s (URI parse)"
+msgid "Preparing for removal of %s"
 msgstr ""
 
-#: apt-pkg/sourcelist.cc:98
+#: apt-pkg/deb/dpkgpm.cc:372
 #, c-format
-msgid "Malformed line %lu in source list %s (absolute dist)"
+msgid "Removing %s"
 msgstr ""
 
-#: apt-pkg/sourcelist.cc:105
+#: apt-pkg/deb/dpkgpm.cc:373
 #, c-format
-msgid "Malformed line %lu in source list %s (dist parse)"
+msgid "Removed %s"
 msgstr ""
 
-#: apt-pkg/sourcelist.cc:156
+#: apt-pkg/deb/dpkgpm.cc:378
 #, c-format
-msgid "Opening %s"
+msgid "Preparing for remove with config %s"
 msgstr ""
 
-#: apt-pkg/sourcelist.cc:170 apt-pkg/cdrom.cc:426
+#: apt-pkg/deb/dpkgpm.cc:379
 #, c-format
-msgid "Line %u too long in source list %s."
+msgid "Removed with config %s"
 msgstr ""
 
-#: apt-pkg/sourcelist.cc:187
+#: methods/cdrom.cc:113
 #, c-format
-msgid "Malformed line %u in source list %s (type)"
+msgid "Unable to read the cdrom database %s"
 msgstr ""
 
-#: apt-pkg/sourcelist.cc:191
-#, c-format
-msgid "Type '%s' is not known on line %u in source list %s"
+#: methods/cdrom.cc:122
+msgid ""
+"Please use apt-cdrom to make this CD-ROM recognized by APT. apt-get update "
+"cannot be used to add new CD-ROMs"
 msgstr ""
 
-#: apt-pkg/sourcelist.cc:199 apt-pkg/sourcelist.cc:202
-#, c-format
-msgid "Malformed line %u in source list %s (vendor id)"
+#: methods/cdrom.cc:130 methods/cdrom.cc:168
+msgid "Wrong CD-ROM"
 msgstr ""
 
-#: apt-pkg/packagemanager.cc:402
+#: methods/cdrom.cc:163
 #, c-format
-msgid ""
-"This installation run will require temporarily removing the essential "
-"package %s due to a Conflicts/Pre-Depends loop. This is often bad, but if "
-"you really want to do it, activate the APT::Force-LoopBreak option."
+msgid "Unable to unmount the CD-ROM in %s, it may still be in use."
 msgstr ""
 
-#: apt-pkg/pkgrecords.cc:37
-#, c-format
-msgid "Index file type '%s' is not supported"
+#: methods/cdrom.cc:177 methods/file.cc:77 methods/rsh.cc:264
+msgid "File not found"
 msgstr ""
 
-#: apt-pkg/algorithms.cc:241
-#, c-format
-msgid ""
-"The package %s needs to be reinstalled, but I can't find an archive for it."
+#: methods/copy.cc:42 methods/gpgv.cc:265 methods/gzip.cc:133
+#: methods/gzip.cc:142
+msgid "Failed to stat"
 msgstr ""
 
-#: apt-pkg/algorithms.cc:1059
-msgid ""
-"Error, pkgProblemResolver::Resolve generated breaks, this may be caused by "
-"held packages."
+#: methods/copy.cc:79 methods/gpgv.cc:262 methods/gzip.cc:139
+msgid "Failed to set modification time"
 msgstr ""
 
-#: apt-pkg/algorithms.cc:1061
-msgid "Unable to correct problems, you have held broken packages."
+#: methods/file.cc:42
+msgid "Invalid URI, local URIS must not start with //"
 msgstr ""
 
-#: apt-pkg/acquire.cc:62
-#, c-format
-msgid "Lists directory %spartial is missing."
+#. Login must be before getpeername otherwise dante won't work.
+#: methods/ftp.cc:162
+msgid "Logging in"
 msgstr ""
 
-#: apt-pkg/acquire.cc:66
-#, c-format
-msgid "Archive directory %spartial is missing."
+#: methods/ftp.cc:168
+msgid "Unable to determine the peer name"
 msgstr ""
 
-#: apt-pkg/acquire.cc:817
-#, c-format
-msgid "Downloading file %li of %li (%s remaining)"
+#: methods/ftp.cc:173
+msgid "Unable to determine the local name"
 msgstr ""
 
-#: apt-pkg/acquire-worker.cc:112
+#: methods/ftp.cc:204 methods/ftp.cc:232
 #, c-format
-msgid "The method driver %s could not be found."
+msgid "The server refused the connection and said: %s"
 msgstr ""
 
-#: apt-pkg/acquire-worker.cc:161
+#: methods/ftp.cc:210
 #, c-format
-msgid "Method %s did not start correctly"
+msgid "USER failed, server said: %s"
 msgstr ""
 
-#: apt-pkg/init.cc:119
+#: methods/ftp.cc:217
 #, c-format
-msgid "Packaging system '%s' is not supported"
+msgid "PASS failed, server said: %s"
 msgstr ""
 
-#: apt-pkg/init.cc:135
-msgid "Unable to determine a suitable packaging system type"
+#: methods/ftp.cc:237
+msgid ""
+"A proxy server was specified but no login script, Acquire::ftp::ProxyLogin "
+"is empty."
 msgstr ""
 
-#: apt-pkg/clean.cc:61
+#: methods/ftp.cc:265
 #, c-format
-msgid "Unable to stat %s."
+msgid "Login script command '%s' failed, server said: %s"
 msgstr ""
 
-#: apt-pkg/srcrecords.cc:48
-msgid "You must put some 'source' URIs in your sources.list"
+#: methods/ftp.cc:291
+#, c-format
+msgid "TYPE failed, server said: %s"
 msgstr ""
 
-#: apt-pkg/cachefile.cc:73
-msgid "The package lists or status file could not be parsed or opened."
+#: methods/ftp.cc:329 methods/ftp.cc:440 methods/rsh.cc:183 methods/rsh.cc:226
+msgid "Connection timeout"
 msgstr ""
 
-#: apt-pkg/cachefile.cc:77
-msgid "You may want to run apt-get update to correct these problems"
+#: methods/ftp.cc:335
+msgid "Server closed the connection"
 msgstr ""
 
-#: apt-pkg/policy.cc:269
-msgid "Invalid record in the preferences file, no Package header"
+#: methods/ftp.cc:345 methods/rsh.cc:197
+msgid "A response overflowed the buffer."
 msgstr ""
 
-#: apt-pkg/policy.cc:291
-#, c-format
-msgid "Did not understand pin type %s"
+#: methods/ftp.cc:362 methods/ftp.cc:374
+msgid "Protocol corruption"
 msgstr ""
 
-#: apt-pkg/policy.cc:299
-msgid "No priority (or zero) specified for pin"
+#: methods/ftp.cc:687 methods/ftp.cc:693 methods/ftp.cc:729
+msgid "Could not create a socket"
 msgstr ""
 
-#: apt-pkg/pkgcachegen.cc:74
-msgid "Cache has an incompatible versioning system"
+#: methods/ftp.cc:698
+msgid "Could not connect data socket, connection timed out"
 msgstr ""
 
-#: apt-pkg/pkgcachegen.cc:117
-#, c-format
-msgid "Error occurred while processing %s (NewPackage)"
+#: methods/ftp.cc:704
+msgid "Could not connect passive socket."
 msgstr ""
 
-#: apt-pkg/pkgcachegen.cc:129
-#, c-format
-msgid "Error occurred while processing %s (UsePackage1)"
+#: methods/ftp.cc:722
+msgid "getaddrinfo was unable to get a listening socket"
 msgstr ""
 
-#: apt-pkg/pkgcachegen.cc:150
-#, c-format
-msgid "Error occurred while processing %s (UsePackage2)"
+#: methods/ftp.cc:736
+msgid "Could not bind a socket"
 msgstr ""
 
-#: apt-pkg/pkgcachegen.cc:154
-#, c-format
-msgid "Error occurred while processing %s (NewFileVer1)"
+#: methods/ftp.cc:740
+msgid "Could not listen on the socket"
 msgstr ""
 
-#: apt-pkg/pkgcachegen.cc:184
-#, c-format
-msgid "Error occurred while processing %s (NewVersion1)"
+#: methods/ftp.cc:747
+msgid "Could not determine the socket's name"
 msgstr ""
 
-#: apt-pkg/pkgcachegen.cc:188
-#, c-format
-msgid "Error occurred while processing %s (UsePackage3)"
+#: methods/ftp.cc:779
+msgid "Unable to send PORT command"
 msgstr ""
 
-#: apt-pkg/pkgcachegen.cc:192
+#: methods/ftp.cc:789
 #, c-format
-msgid "Error occurred while processing %s (NewVersion2)"
+msgid "Unknown address family %u (AF_*)"
 msgstr ""
 
-#: apt-pkg/pkgcachegen.cc:207
-msgid "Wow, you exceeded the number of package names this APT is capable of."
+#: methods/ftp.cc:798
+#, c-format
+msgid "EPRT failed, server said: %s"
 msgstr ""
 
-#: apt-pkg/pkgcachegen.cc:210
-msgid "Wow, you exceeded the number of versions this APT is capable of."
+#: methods/ftp.cc:818
+msgid "Data socket connect timed out"
 msgstr ""
 
-#: apt-pkg/pkgcachegen.cc:213
-msgid "Wow, you exceeded the number of dependencies this APT is capable of."
+#: methods/ftp.cc:825
+msgid "Unable to accept connection"
 msgstr ""
 
-#: apt-pkg/pkgcachegen.cc:241
-#, c-format
-msgid "Error occurred while processing %s (FindPkg)"
+#: methods/ftp.cc:864 methods/http.cc:957 methods/rsh.cc:303
+msgid "Problem hashing file"
 msgstr ""
 
-#: apt-pkg/pkgcachegen.cc:254
+#: methods/ftp.cc:877
 #, c-format
-msgid "Error occurred while processing %s (CollectFileProvides)"
+msgid "Unable to fetch file, server said '%s'"
 msgstr ""
 
-#: apt-pkg/pkgcachegen.cc:260
-#, c-format
-msgid "Package %s %s was not found while processing file dependencies"
+#: methods/ftp.cc:892 methods/rsh.cc:322
+msgid "Data socket timed out"
 msgstr ""
 
-#: apt-pkg/pkgcachegen.cc:574
+#: methods/ftp.cc:922
 #, c-format
-msgid "Couldn't stat source package list %s"
+msgid "Data transfer failed, server said '%s'"
 msgstr ""
 
-#: apt-pkg/pkgcachegen.cc:658
-msgid "Collecting File Provides"
+#. Get the files information
+#: methods/ftp.cc:997
+msgid "Query"
 msgstr ""
 
-#: apt-pkg/pkgcachegen.cc:785 apt-pkg/pkgcachegen.cc:792
-msgid "IO Error saving source cache"
+#: methods/ftp.cc:1106
+msgid "Unable to invoke "
 msgstr ""
 
-#: apt-pkg/acquire-item.cc:126
+#: methods/connect.cc:64
 #, c-format
-msgid "rename failed, %s (%s -> %s)."
+msgid "Connecting to %s (%s)"
 msgstr ""
 
-#: apt-pkg/acquire-item.cc:236 apt-pkg/acquire-item.cc:908
-msgid "MD5Sum mismatch"
+#: methods/connect.cc:71
+#, c-format
+msgid "[IP: %s %s]"
 msgstr ""
 
-#: apt-pkg/acquire-item.cc:722
+#: methods/connect.cc:80
 #, c-format
-msgid ""
-"I wasn't able to locate a file for the %s package. This might mean you need "
-"to manually fix this package. (due to missing arch)"
+msgid "Could not create a socket for %s (f=%u t=%u p=%u)"
 msgstr ""
 
-#: apt-pkg/acquire-item.cc:775
+#: methods/connect.cc:86
 #, c-format
-msgid ""
-"I wasn't able to locate file for the %s package. This might mean you need to "
-"manually fix this package."
+msgid "Cannot initiate the connection to %s:%s (%s)."
 msgstr ""
 
-#: apt-pkg/acquire-item.cc:811
+#: methods/connect.cc:92
 #, c-format
-msgid ""
-"The package index files are corrupted. No Filename: field for package %s."
+msgid "Could not connect to %s:%s (%s), connection timed out"
 msgstr ""
 
-#: apt-pkg/acquire-item.cc:898
-msgid "Size mismatch"
+#: methods/connect.cc:104
+#, c-format
+msgid "Could not connect to %s:%s (%s)."
 msgstr ""
 
-#: apt-pkg/vendorlist.cc:66
+#. We say this mainly because the pause here is for the
+#. ssh connection that is still going
+#: methods/connect.cc:132 methods/rsh.cc:425
 #, c-format
-msgid "Vendor block %s contains no fingerprint"
+msgid "Connecting to %s"
 msgstr ""
 
-#: apt-pkg/cdrom.cc:507
+#: methods/connect.cc:163
 #, c-format
-msgid ""
-"Using CD-ROM mount point %s\n"
-"Mounting CD-ROM\n"
+msgid "Could not resolve '%s'"
 msgstr ""
 
-#: apt-pkg/cdrom.cc:516 apt-pkg/cdrom.cc:598
-msgid "Identifying.. "
+#: methods/connect.cc:167
+#, c-format
+msgid "Temporary failure resolving '%s'"
 msgstr ""
 
-#: apt-pkg/cdrom.cc:541
+#: methods/connect.cc:169
 #, c-format
-msgid "Stored label: %s \n"
+msgid "Something wicked happened resolving '%s:%s' (%i)"
 msgstr ""
 
-#: apt-pkg/cdrom.cc:561
+#: methods/connect.cc:216
 #, c-format
-msgid "Using CD-ROM mount point %s\n"
+msgid "Unable to connect to %s %s:"
 msgstr ""
 
-#: apt-pkg/cdrom.cc:579
-msgid "Unmounting CD-ROM\n"
+#: methods/gpgv.cc:92
+msgid "E: Argument list from Acquire::gpgv::Options too long. Exiting."
 msgstr ""
 
-#: apt-pkg/cdrom.cc:583
-msgid "Waiting for disc...\n"
+#: methods/gpgv.cc:191
+msgid ""
+"Internal error: Good signature, but could not determine key fingerprint?!"
 msgstr ""
 
-#. Mount the new CDROM
-#: apt-pkg/cdrom.cc:591
-msgid "Mounting CD-ROM...\n"
+#: methods/gpgv.cc:196
+msgid "At least one invalid signature was encountered."
 msgstr ""
 
-#: apt-pkg/cdrom.cc:609
-msgid "Scanning disc for index files..\n"
+#. FIXME String concatenation considered harmful.
+#: methods/gpgv.cc:201
+msgid "Could not execute "
 msgstr ""
 
-#: apt-pkg/cdrom.cc:647
-#, c-format
-msgid "Found %i package indexes, %i source indexes and %i signatures\n"
+#: methods/gpgv.cc:202
+msgid " to verify signature (is gnupg installed?)"
 msgstr ""
 
-#: apt-pkg/cdrom.cc:704
-msgid "That is not a valid name, try again.\n"
+#: methods/gpgv.cc:206
+msgid "Unknown error executing gpgv"
 msgstr ""
 
-#: apt-pkg/cdrom.cc:720
-#, c-format
-msgid ""
-"This disc is called: \n"
-"'%s'\n"
+#: methods/gpgv.cc:237
+msgid "The following signatures were invalid:\n"
 msgstr ""
 
-#: apt-pkg/cdrom.cc:724
-msgid "Copying package lists..."
+#: methods/gpgv.cc:244
+msgid ""
+"The following signatures couldn't be verified because the public key is not "
+"available:\n"
 msgstr ""
 
-#: apt-pkg/cdrom.cc:748
-msgid "Writing new source list\n"
+#: methods/gzip.cc:57
+#, c-format
+msgid "Couldn't open pipe for %s"
 msgstr ""
 
-#: apt-pkg/cdrom.cc:757
-msgid "Source list entries for this disc are:\n"
+#: methods/gzip.cc:102
+#, c-format
+msgid "Read error from %s process"
 msgstr ""
 
-#: apt-pkg/cdrom.cc:791
-msgid "Unmounting CD-ROM..."
+#: methods/http.cc:381
+msgid "Waiting for headers"
 msgstr ""
 
-#: apt-pkg/indexcopy.cc:261
+#: methods/http.cc:527
 #, c-format
-msgid "Wrote %i records.\n"
+msgid "Got a single header line over %u chars"
 msgstr ""
 
-#: apt-pkg/indexcopy.cc:263
-#, c-format
-msgid "Wrote %i records with %i missing files.\n"
+#: methods/http.cc:535
+msgid "Bad header line"
 msgstr ""
 
-#: apt-pkg/indexcopy.cc:266
-#, c-format
-msgid "Wrote %i records with %i mismatched files\n"
+#: methods/http.cc:554 methods/http.cc:561
+msgid "The HTTP server sent an invalid reply header"
 msgstr ""
 
-#: apt-pkg/indexcopy.cc:269
-#, c-format
-msgid "Wrote %i records with %i missing files and %i mismatched files\n"
+#: methods/http.cc:590
+msgid "The HTTP server sent an invalid Content-Length header"
 msgstr ""
 
-#: apt-pkg/deb/dpkgpm.cc:358
-#, c-format
-msgid "Preparing %s"
+#: methods/http.cc:605
+msgid "The HTTP server sent an invalid Content-Range header"
 msgstr ""
 
-#: apt-pkg/deb/dpkgpm.cc:359
-#, c-format
-msgid "Unpacking %s"
+#: methods/http.cc:607
+msgid "This HTTP server has broken range support"
 msgstr ""
 
-#: apt-pkg/deb/dpkgpm.cc:364
-#, c-format
-msgid "Preparing to configure %s"
+#: methods/http.cc:631
+msgid "Unknown date format"
 msgstr ""
 
-#: apt-pkg/deb/dpkgpm.cc:365
-#, c-format
-msgid "Configuring %s"
+#: methods/http.cc:778
+msgid "Select failed"
 msgstr ""
 
-#: apt-pkg/deb/dpkgpm.cc:366
-#, c-format
-msgid "Installed %s"
+#: methods/http.cc:783
+msgid "Connection timed out"
 msgstr ""
 
-#: apt-pkg/deb/dpkgpm.cc:371
-#, c-format
-msgid "Preparing for removal of %s"
+#: methods/http.cc:806
+msgid "Error writing to output file"
 msgstr ""
 
-#: apt-pkg/deb/dpkgpm.cc:372
-#, c-format
-msgid "Removing %s"
+#: methods/http.cc:834
+msgid "Error writing to file"
 msgstr ""
 
-#: apt-pkg/deb/dpkgpm.cc:373
-#, c-format
-msgid "Removed %s"
+#: methods/http.cc:859
+msgid "Error writing to the file"
 msgstr ""
 
-#: apt-pkg/deb/dpkgpm.cc:378
-#, c-format
-msgid "Preparing for remove with config %s"
+#: methods/http.cc:873
+msgid "Error reading from server. Remote end closed connection"
 msgstr ""
 
-#: apt-pkg/deb/dpkgpm.cc:379
-#, c-format
-msgid "Removed with config %s"
+#: methods/http.cc:875
+msgid "Error reading from server"
+msgstr ""
+
+#: methods/http.cc:1106
+msgid "Bad header data"
+msgstr ""
+
+#: methods/http.cc:1123
+msgid "Connection failed"
+msgstr ""
+
+#: methods/http.cc:1214
+msgid "Internal error"
 msgstr ""
 
 #: methods/rsh.cc:330