]> git.saurik.com Git - apt.git/commitdiff
* Implement EDSP in libapt-pkg so that all front-ends which
authorDavid Kalnischkies <kalnischkies@gmail.com>
Tue, 17 May 2011 15:26:59 +0000 (17:26 +0200)
committerDavid Kalnischkies <kalnischkies@gmail.com>
Tue, 17 May 2011 15:26:59 +0000 (17:26 +0200)
  use the internal resolver can now be used also with external
  ones as the usage is hidden in between the old API
* provide two edsp solvers in apt-utils:
  - 'dump' to quickly output a complete scenario and
  - 'apt' to use the internal as an external resolver

100 files changed:
apt-inst/contrib/extracttar.cc
apt-inst/dirstream.cc
apt-pkg/acquire-item.cc
apt-pkg/acquire-method.cc
apt-pkg/acquire-method.h
apt-pkg/acquire-worker.cc
apt-pkg/algorithms.cc
apt-pkg/aptconfiguration.cc
apt-pkg/cacheiterators.h
apt-pkg/cacheset.h
apt-pkg/cdrom.cc
apt-pkg/contrib/cdromutl.cc
apt-pkg/contrib/error.cc
apt-pkg/contrib/mmap.cc
apt-pkg/contrib/netrc.cc
apt-pkg/contrib/strutl.cc
apt-pkg/deb/deblistparser.cc
apt-pkg/deb/debmetaindex.cc
apt-pkg/deb/dpkgpm.cc
apt-pkg/depcache.cc
apt-pkg/indexcopy.cc
apt-pkg/orderlist.cc
apt-pkg/packagemanager.cc
apt-pkg/packagemanager.h
apt-pkg/pkgcache.cc
apt-pkg/pkgcache.h
apt-pkg/pkgcachegen.cc
apt-pkg/policy.cc
cmdline/apt-cache.cc
cmdline/apt-get.cc
cmdline/apt-mark [deleted file]
cmdline/apt-mark.cc [new file with mode: 0644]
cmdline/makefile
debian/apt-utils.symbols
debian/apt.cron.daily
debian/apt.lintian-overrides [deleted file]
debian/apt.symbols
debian/changelog
debian/control
debian/rules
doc/apt-key.8.xml
doc/apt-mark.8.xml
doc/apt_preferences.5.xml
doc/po/de.po
methods/http.cc
methods/http.h
methods/mirror.cc
po/apt-all.pot
po/ar.po
po/ast.po
po/bg.po
po/bs.po
po/ca.po
po/cs.po
po/cy.po
po/da.po
po/de.po
po/dz.po
po/el.po
po/es.po
po/eu.po
po/fi.po
po/fr.po
po/gl.po
po/he.po
po/hu.po
po/it.po
po/ja.po
po/km.po
po/ko.po
po/ku.po
po/lt.po
po/mr.po
po/nb.po
po/ne.po
po/nl.po
po/nn.po
po/pl.po
po/pt.po
po/pt_BR.po
po/ro.po
po/ru.po
po/sk.po
po/sl.po
po/sv.po
po/th.po
po/tl.po
po/uk.po
po/vi.po
po/zh_CN.po
po/zh_TW.po
test/integration/framework
test/integration/skip-bug-602412-dequote-redirect [new file with mode: 0755]
test/integration/test-bug-470115-new-and-tighten-recommends [new file with mode: 0755]
test/integration/test-bug-612557-garbage-upgrade
test/integration/test-bug-618288-multiarch-same-lockstep [new file with mode: 0755]
test/integration/test-handling-broken-orgroups [new file with mode: 0755]
test/integration/test-ubuntu-bug-761175-remove-purge [new file with mode: 0755]
test/testextract.cc
test/versions.lst

index 1a358d57e6fb34280edef6136d74d1738a088ccd..01b6b38360bd61dd1dcfe505aed9a9312b0dc47f 100644 (file)
@@ -336,7 +336,7 @@ bool ExtractTar::Go(pkgDirStream &Stream)
       }
       
       // And finish up
-      if (Itm.Size >= 0 && BadRecord == false)
+      if (BadRecord == false)
         if (Stream.FinishedFile(Itm,Fd) == false)
            return false;
       
index 586bbf739d71572f667ae73c867c8492416e9741..9b6a568482a5206af9dc9a84b6a6dec305be9cd9 100644 (file)
@@ -43,11 +43,17 @@ bool pkgDirStream::DoItem(Item &Itm,int &Fd)
         
         // fchmod deals with umask and fchown sets the ownership
         if (fchmod(iFd,Itm.Mode) != 0)
-           return _error->Errno("fchmod",_("Failed to write file %s"),
-                                Itm.Name);
+        {
+           _error->Errno("fchmod",_("Failed to write file %s"), Itm.Name);
+           close(iFd);
+           return false;
+        }
         if (fchown(iFd,Itm.UID,Itm.GID) != 0 && errno != EPERM)
-           return _error->Errno("fchown",_("Failed to write file %s"),
-                                Itm.Name);
+        {
+           return _error->Errno("fchown",_("Failed to write file %s"), Itm.Name);
+           close(iFd);
+           return false;
+        }
         Fd = iFd;
         return true;
       }
index cf88ded7b243da48ac69de813331172712a8908b..6785b4e1be9413d1d80787fa340cbed4f5e0ec82 100644 (file)
@@ -840,7 +840,7 @@ string pkgAcqIndex::Custom600Headers()
    if (ShortDesc().find("Translation") != 0)
       msg += "\nFail-Ignore: true";
    struct stat Buf;
-   if (stat(Final.c_str(),&Buf) != 0)
+   if (stat(Final.c_str(),&Buf) == 0)
       msg += "\nLast-Modified: " + TimeRFC1123(Buf.st_mtime);
 
    return msg;
@@ -1502,6 +1502,26 @@ void pkgAcqMetaIndex::Failed(string Message,pkgAcquire::MethodConfig *Cnf)
       ReportMirrorFailure("GPGFailure");
    }
 
+   /* Always move the meta index, even if gpgv failed. This ensures
+    * that PackageFile objects are correctly filled in */
+   if (FileExists(DestFile)) {
+      string FinalFile = _config->FindDir("Dir::State::lists");
+      FinalFile += URItoFileName(RealURI);
+      /* InRelease files become Release files, otherwise
+       * they would be considered as trusted later on */
+      if (SigFile == DestFile) {
+        RealURI = RealURI.replace(RealURI.rfind("InRelease"), 9,
+                                      "Release");
+        FinalFile = FinalFile.replace(FinalFile.rfind("InRelease"), 9,
+                                      "Release");
+        SigFile = FinalFile;
+      }
+      Rename(DestFile,FinalFile);
+      chmod(FinalFile.c_str(),0644);
+
+      DestFile = FinalFile;
+   }
+
    // No Release file was present, or verification failed, so fall
    // back to queueing Packages files without verification
    QueueIndexes(false);
@@ -1625,7 +1645,7 @@ pkgAcqArchive::pkgAcqArchive(pkgAcquire *Owner,pkgSourceList *Sources,
 
    // Select a source
    if (QueueNext() == false && _error->PendingError() == false)
-      _error->Error(_("I wasn't able to locate file for the %s package. "
+      _error->Error(_("I wasn't able to locate file for the %s package. "
                    "This might mean you need to manually fix this package."),
                    Version.ParentPkg().Name());
 }
index fb45d9ee71395bee8c140914a73c464c22e81d35..e9e102488739df093d096e32800244692fe43b4d 100644 (file)
@@ -23,9 +23,7 @@
 #include <apt-pkg/hashes.h>
 
 #include <iostream>
-#include <stdarg.h>
 #include <stdio.h>
-#include <unistd.h>
 #include <sys/signal.h>
                                                                        /*}}}*/
 
@@ -36,32 +34,28 @@ using namespace std;
 /* This constructs the initialization text */
 pkgAcqMethod::pkgAcqMethod(const char *Ver,unsigned long Flags)
 {
-   char S[300] = "";
-   char *End = S;
-   strcat(End,"100 Capabilities\n");
-   sprintf(End+strlen(End),"Version: %s\n",Ver);
+   std::cout << "100 Capabilities\n"
+            << "Version: " << Ver << "\n";
 
    if ((Flags & SingleInstance) == SingleInstance)
-      strcat(End,"Single-Instance: true\n");
-   
+      std::cout << "Single-Instance: true\n";
+
    if ((Flags & Pipeline) == Pipeline)
-      strcat(End,"Pipeline: true\n");
-   
+      std::cout << "Pipeline: true\n";
+
    if ((Flags & SendConfig) == SendConfig)
-      strcat(End,"Send-Config: true\n");
+      std::cout << "Send-Config: true\n";
 
    if ((Flags & LocalOnly) == LocalOnly)
-      strcat(End,"Local-Only: true\n");
+      std::cout <<"Local-Only: true\n";
 
    if ((Flags & NeedsCleanup) == NeedsCleanup)
-      strcat(End,"Needs-Cleanup: true\n");
+      std::cout << "Needs-Cleanup: true\n";
 
    if ((Flags & Removable) == Removable)
-      strcat(End,"Removable: true\n");
-   strcat(End,"\n");
+      std::cout << "Removable: true\n";
 
-   if (write(STDOUT_FILENO,S,strlen(S)) != (signed)strlen(S))
-      exit(100);
+   std::cout << "\n" << std::flush;
 
    SetNonBlock(STDIN_FILENO,true);
 
@@ -94,13 +88,11 @@ void pkgAcqMethod::Fail(string Err,bool Transient)
       if (*I == '\n') 
         *I = ' ';
    }
-   
-   char S[1024];
-   char *End = S;
+
    if (Queue != 0)
    {
-      End += snprintf(S,sizeof(S)-50,"400 URI Failure\nURI: %s\n"
-                     "Message: %s %s\n",Queue->Uri.c_str(), Err.c_str(), IP.c_str());
+      std::cout << "400 URI Failure\nURI: " << Queue->Uri << "\n"
+               << "Message: " << Err << " " << IP << "\n";
       // Dequeue
       FetchItem *Tmp = Queue;
       Queue = Queue->Next;
@@ -109,22 +101,17 @@ void pkgAcqMethod::Fail(string Err,bool Transient)
         QueueBack = Queue;
    }
    else
-   {
-      End += snprintf(S,sizeof(S)-50,"400 URI Failure\nURI: <UNKNOWN>\n"
-                     "Message: %s\n",Err.c_str());
-   }
+      std::cout << "400 URI Failure\nURI: <UNKNOWN>\nMessage: " << Err << "\n";
+
    if(FailReason.empty() == false)
-      End += snprintf(End,sizeof(S)-50 - (End - S),"FailReason: %s\n",FailReason.c_str());
+      std::cout << "FailReason: " << FailReason << "\n";
    if (UsedMirror.empty() == false)
-      End += snprintf(End,sizeof(S)-50 - (End - S),"UsedMirror: %s\n",UsedMirror.c_str());
-   // Set the transient flag 
+      std::cout << "UsedMirror: " << UsedMirror << "\n";
+   // Set the transient flag
    if (Transient == true)
-      strcat(S,"Transient-Failure: true\n\n");
-   else
-      strcat(S,"\n");
-   
-   if (write(STDOUT_FILENO,S,strlen(S)) != (signed)strlen(S))
-      exit(100);
+      std::cout << "Transient-Failure: true\n";
+
+   std::cout << "\n" << std::flush;
 }
                                                                        /*}}}*/
 // AcqMethod::URIStart - Indicate a download is starting               /*{{{*/
@@ -134,27 +121,22 @@ void pkgAcqMethod::URIStart(FetchResult &Res)
 {
    if (Queue == 0)
       abort();
-   
-   char S[1024] = "";
-   char *End = S;
-   
-   End += snprintf(S,sizeof(S),"200 URI Start\nURI: %s\n",Queue->Uri.c_str());
+
+   std::cout << "200 URI Start\n"
+            << "URI: " << Queue->Uri << "\n";
    if (Res.Size != 0)
-      End += snprintf(End,sizeof(S)-4 - (End - S),"Size: %lu\n",Res.Size);
-   
+      std::cout << "Size: " << Res.Size << "\n";
+
    if (Res.LastModified != 0)
-      End += snprintf(End,sizeof(S)-4 - (End - S),"Last-Modified: %s\n",
-                     TimeRFC1123(Res.LastModified).c_str());
-   
+      std::cout << "Last-Modified: " << TimeRFC1123(Res.LastModified) << "\n";
+
    if (Res.ResumePoint != 0)
-      End += snprintf(End,sizeof(S)-4 - (End - S),"Resume-Point: %lu\n",
-                     Res.ResumePoint);
+      std::cout << "Resume-Point: " << Res.ResumePoint << "\n";
+
    if (UsedMirror.empty() == false)
-      End += snprintf(End,sizeof(S)-4 - (End - S),"UsedMirror: %s\n",UsedMirror.c_str());
-      
-   strcat(End,"\n");
-   if (write(STDOUT_FILENO,S,strlen(S)) != (signed)strlen(S))
-      exit(100);
+      std::cout << "UsedMirror: " << UsedMirror << "\n";
+
+   std::cout << "\n" << std::flush;
 }
                                                                        /*}}}*/
 // AcqMethod::URIDone - A URI is finished                              /*{{{*/
@@ -164,76 +146,65 @@ void pkgAcqMethod::URIDone(FetchResult &Res, FetchResult *Alt)
 {
    if (Queue == 0)
       abort();
-   
-   char S[1024] = "";
-   char *End = S;
-   
-   End += snprintf(S,sizeof(S),"201 URI Done\nURI: %s\n",Queue->Uri.c_str());
+
+   std::cout << "201 URI Done\n"
+            << "URI: " << Queue->Uri << "\n";
 
    if (Res.Filename.empty() == false)
-      End += snprintf(End,sizeof(S)-50 - (End - S),"Filename: %s\n",Res.Filename.c_str());
-   
+      std::cout << "Filename: " << Res.Filename << "\n";
+
    if (Res.Size != 0)
-      End += snprintf(End,sizeof(S)-50 - (End - S),"Size: %lu\n",Res.Size);
-   
+      std::cout << "Size: " << Res.Size << "\n";
+
    if (Res.LastModified != 0)
-      End += snprintf(End,sizeof(S)-50 - (End - S),"Last-Modified: %s\n",
-                     TimeRFC1123(Res.LastModified).c_str());
+      std::cout << "Last-Modified: " << TimeRFC1123(Res.LastModified) << "\n";
 
    if (Res.MD5Sum.empty() == false)
-   {
-      End += snprintf(End,sizeof(S)-50 - (End - S),"MD5-Hash: %s\n",Res.MD5Sum.c_str());
-      End += snprintf(End,sizeof(S)-50 - (End - S),"MD5Sum-Hash: %s\n",Res.MD5Sum.c_str());
-   }
+      std::cout << "MD5-Hash: " << Res.MD5Sum << "\n"
+               << "MD5Sum-Hash: " << Res.MD5Sum << "\n";
    if (Res.SHA1Sum.empty() == false)
-      End += snprintf(End,sizeof(S)-50 - (End - S),"SHA1-Hash: %s\n",Res.SHA1Sum.c_str());
+      std::cout << "SHA1-Hash: " << Res.SHA1Sum << "\n";
    if (Res.SHA256Sum.empty() == false)
-      End += snprintf(End,sizeof(S)-50 - (End - S),"SHA256-Hash: %s\n",Res.SHA256Sum.c_str());
+      std::cout << "SHA256-Hash: " << Res.SHA256Sum << "\n";
    if (UsedMirror.empty() == false)
-      End += snprintf(End,sizeof(S)-50 - (End - S),"UsedMirror: %s\n",UsedMirror.c_str());
-   if (Res.GPGVOutput.size() > 0)
-      End += snprintf(End,sizeof(S)-50 - (End - S),"GPGVOutput:\n");     
-   for (vector<string>::iterator I = Res.GPGVOutput.begin();
-      I != Res.GPGVOutput.end(); I++)
-      End += snprintf(End,sizeof(S)-50 - (End - S), " %s\n", (*I).c_str());
+      std::cout << "UsedMirror: " << UsedMirror << "\n";
+   if (Res.GPGVOutput.empty() == false)
+   {
+      std::cout << "GPGVOutput:\n";
+      for (vector<string>::const_iterator I = Res.GPGVOutput.begin();
+          I != Res.GPGVOutput.end(); ++I)
+        std::cout << " " << *I << "\n";
+   }
 
    if (Res.ResumePoint != 0)
-      End += snprintf(End,sizeof(S)-50 - (End - S),"Resume-Point: %lu\n",
-                     Res.ResumePoint);
+      std::cout << "Resume-Point: " << Res.ResumePoint << "\n";
 
    if (Res.IMSHit == true)
-      strcat(End,"IMS-Hit: true\n");
-   End = S + strlen(S);
-   
+      std::cout << "IMS-Hit: true\n";
+
    if (Alt != 0)
    {
       if (Alt->Filename.empty() == false)
-        End += snprintf(End,sizeof(S)-50 - (End - S),"Alt-Filename: %s\n",Alt->Filename.c_str());
-      
+        std::cout << "Alt-Filename: " << Alt->Filename << "\n";
+
       if (Alt->Size != 0)
-        End += snprintf(End,sizeof(S)-50 - (End - S),"Alt-Size: %lu\n",Alt->Size);
-      
+        std::cout << "Alt-Size: " << Alt->Size << "\n";
+
       if (Alt->LastModified != 0)
-        End += snprintf(End,sizeof(S)-50 - (End - S),"Alt-Last-Modified: %s\n",
-                        TimeRFC1123(Alt->LastModified).c_str());
-      
+        std::cout << "Alt-Last-Modified: " << TimeRFC1123(Alt->LastModified) << "\n";
+
       if (Alt->MD5Sum.empty() == false)
-        End += snprintf(End,sizeof(S)-50 - (End - S),"Alt-MD5-Hash: %s\n",
-                        Alt->MD5Sum.c_str());
+        std::cout << "Alt-MD5-Hash: " << Alt->MD5Sum << "\n";
       if (Alt->SHA1Sum.empty() == false)
-        End += snprintf(End,sizeof(S)-50 - (End - S),"Alt-SHA1-Hash: %s\n",
-                        Alt->SHA1Sum.c_str());
+        std::cout << "Alt-SHA1-Hash: " << Alt->SHA1Sum << "\n";
       if (Alt->SHA256Sum.empty() == false)
-        End += snprintf(End,sizeof(S)-50 - (End - S),"Alt-SHA256-Hash: %s\n",
-                        Alt->SHA256Sum.c_str());
-      
+        std::cout << "Alt-SHA256-Hash: " << Alt->SHA256Sum << "\n";
+
       if (Alt->IMSHit == true)
-        strcat(End,"Alt-IMS-Hit: true\n");
+        std::cout << "Alt-IMS-Hit: true\n";
    }
-   
-   strcat(End,"\n");
-   if (write(STDOUT_FILENO,S,strlen(S)) != (signed)strlen(S))
-      exit(100);
+
+   std::cout << "\n" << std::flush;
 
    // Dequeue
    FetchItem *Tmp = Queue;
@@ -249,13 +220,10 @@ void pkgAcqMethod::URIDone(FetchResult &Res, FetchResult *Alt)
    to be ackd */
 bool pkgAcqMethod::MediaFail(string Required,string Drive)
 {
-   char S[1024];
-   snprintf(S,sizeof(S),"403 Media Failure\nMedia: %s\nDrive: %s\n\n",
+   fprintf(stdout, "403 Media Failure\nMedia: %s\nDrive: %s\n",
            Required.c_str(),Drive.c_str());
+   std::cout << "\n" << std::flush;
 
-   if (write(STDOUT_FILENO,S,strlen(S)) != (signed)strlen(S))
-      exit(100);
-   
    vector<string> MyMessages;
    
    /* Here we read messages until we find a 603, each non 603 message is
@@ -406,30 +374,34 @@ int pkgAcqMethod::Run(bool Single)
    return 0;
 }
                                                                        /*}}}*/
-// AcqMethod::Log - Send a log message                                 /*{{{*/
+// AcqMethod::PrintStatus - privately really send a log/status message /*{{{*/
 // ---------------------------------------------------------------------
 /* */
-void pkgAcqMethod::Log(const char *Format,...)
+void pkgAcqMethod::PrintStatus(char const * const header, const char* Format,
+                              va_list &args) const
 {
    string CurrentURI = "<UNKNOWN>";
    if (Queue != 0)
       CurrentURI = Queue->Uri;
-   
+   if (UsedMirror.empty() == true)
+      fprintf(stdout, "%s\nURI: %s\nMessage: ",
+             header, CurrentURI.c_str());
+   else
+      fprintf(stdout, "%s\nURI: %s\nUsedMirror: %s\nMessage: ",
+             header, CurrentURI.c_str(), UsedMirror.c_str());
+   vfprintf(stdout,Format,args);
+   std::cout << "\n\n" << std::flush;
+}
+                                                                       /*}}}*/
+// AcqMethod::Log - Send a log message                                 /*{{{*/
+// ---------------------------------------------------------------------
+/* */
+void pkgAcqMethod::Log(const char *Format,...)
+{
    va_list args;
    va_start(args,Format);
-
-   // sprintf the description
-   char S[1024];
-   unsigned int Len = snprintf(S,sizeof(S)-4,"101 Log\n"
-                               "URI: %s\n"
-                               "UsedMirror: %s\n"
-                              "Message: ", UsedMirror.c_str(),
-                               CurrentURI.c_str());
-   vsnprintf(S+Len,sizeof(S)-4-Len,Format,args);
-   strcat(S,"\n\n");
-   
-   if (write(STDOUT_FILENO,S,strlen(S)) != (signed)strlen(S))
-      exit(100);
+   PrintStatus("101 Log", Format, args);
+   va_end(args);
 }
                                                                        /*}}}*/
 // AcqMethod::Status - Send a status message                           /*{{{*/
@@ -437,26 +409,10 @@ void pkgAcqMethod::Log(const char *Format,...)
 /* */
 void pkgAcqMethod::Status(const char *Format,...)
 {
-   string CurrentURI = "<UNKNOWN>";
-   if (Queue != 0)
-      CurrentURI = Queue->Uri;
-   
    va_list args;
    va_start(args,Format);
-
-   // sprintf the description
-   char S[1024];
-   unsigned int Len = snprintf(S,sizeof(S)-4,"102 Status\n"
-                               "URI: %s\n"
-                               "UsedMirror: %s\n"
-                              "Message: ",UsedMirror.c_str(),
-                               CurrentURI.c_str());
-
-   vsnprintf(S+Len,sizeof(S)-4-Len,Format,args);
-   strcat(S,"\n\n");
-   
-   if (write(STDOUT_FILENO,S,strlen(S)) != (signed)strlen(S))
-      exit(100);
+   PrintStatus("102 Status", Format, args);
+   va_end(args);
 }
                                                                        /*}}}*/
 // AcqMethod::Redirect - Send a redirect message                       /*{{{*/
@@ -465,16 +421,13 @@ void pkgAcqMethod::Status(const char *Format,...)
    to keep the pipeline synchronized. */
 void pkgAcqMethod::Redirect(const string &NewURI)
 {
-   string CurrentURI = "<UNKNOWN>";
+   std::cout << "103 Redirect\nURI: ";
    if (Queue != 0)
-      CurrentURI = Queue->Uri;
-   char S[1024];
-   snprintf(S, sizeof(S)-50, "103 Redirect\nURI: %s\nNew-URI: %s\n\n",
-         CurrentURI.c_str(), NewURI.c_str());
-
-   if (write(STDOUT_FILENO,S,strlen(S)) != (ssize_t)strlen(S))
-      exit(100);
+      std::cout << Queue->Uri << "\n";
+   else
+      std::cout << "<UNKNOWN>\n";
+   std::cout << "New-URI: " << NewURI << "\n"
+            << "\n" << std::flush;
 
    // Change the URI for the request.
    Queue->Uri = NewURI;
index 03851e8239657451abab188a9f883282395e2bab..72efa8065491e644370363a2fa7e97f1797c5f67 100644 (file)
@@ -23,6 +23,7 @@
 #include <apt-pkg/configuration.h>
 #include <apt-pkg/strutl.h>
 
+#include <stdarg.h>
 
 class Hashes;
 class pkgAcqMethod
@@ -78,6 +79,8 @@ class pkgAcqMethod
    bool MediaFail(string Required,string Drive);
    virtual void Exit() {};
 
+   void PrintStatus(char const * const header, const char* Format, va_list &args) const;
+
    public:
    enum CnfFlags {SingleInstance = (1<<0),
                   Pipeline = (1<<1), SendConfig = (1<<2),
index ddd8e31018c5bcc028d4fe0c2183fc558876704d..75e03232a1de76a28ed2e57de03159542d6a28d0 100644 (file)
@@ -287,10 +287,10 @@ bool pkgAcquire::Worker::RunMessages()
               Log->Pulse(Owner->GetOwner());
            
            OwnerQ->ItemDone(Itm);
-           if (TotalSize != 0 &&
-               (unsigned)atoi(LookupTag(Message,"Size","0").c_str()) != TotalSize)
-              _error->Warning("Bizarre Error - File size is not what the server reported %s %lu",
-                              LookupTag(Message,"Size","0").c_str(),TotalSize);
+           unsigned long const ServerSize = atol(LookupTag(Message,"Size","0").c_str());
+           if (TotalSize != 0 && ServerSize != TotalSize)
+              _error->Warning("Size of file %s is not what the server reported %s %lu",
+                              Owner->DestFile.c_str(), LookupTag(Message,"Size","0").c_str(),TotalSize);
 
            // see if there is a hash to verify
            string RecivedHash;
@@ -309,8 +309,7 @@ bool pkgAcquire::Worker::RunMessages()
                       << endl << endl;
               }
            }
-           Owner->Done(Message,atoi(LookupTag(Message,"Size","0").c_str()),
-                       RecivedHash.c_str(), Config);
+           Owner->Done(Message, ServerSize, RecivedHash.c_str(), Config);
            ItemDone();
            
            // Log that we are done
index 31c3e9c28633316d7835f7e4743229e4e99a0bf6..6f1f82d501c95af5ce73832021a1a848f6f91352 100644 (file)
@@ -104,9 +104,7 @@ bool pkgSimulate::Install(PkgIterator iPkg,string /*File*/)
         DepIterator Start;
         DepIterator End;
         D.GlobOr(Start,End);
-        if (Start->Type == pkgCache::Dep::Conflicts ||
-            Start->Type == pkgCache::Dep::DpkgBreaks ||
-            Start->Type == pkgCache::Dep::Obsoletes ||
+        if (Start.IsNegative() == true ||
             End->Type == pkgCache::Dep::PreDepends)
          {
            if ((Sim[End] & pkgDepCache::DepGInstall) == 0)
@@ -662,12 +660,10 @@ bool pkgProblemResolver::DoUpgrade(pkgCache::PkgIterator Pkg)
       // Compute a single dependency element (glob or)
       pkgCache::DepIterator Start = D;
       pkgCache::DepIterator End = D;
-      unsigned char State = 0;
       for (bool LastOR = true; D.end() == false && LastOR == true;)
       {
-        State |= Cache[D];
         LastOR = (D->CompareOp & pkgCache::Dep::Or) == pkgCache::Dep::Or;
-        D++;
+        ++D;
         if (LastOR == true)
            End = D;
       }
@@ -712,9 +708,7 @@ bool pkgProblemResolver::DoUpgrade(pkgCache::PkgIterator Pkg)
            {
               /* We let the algorithm deal with conflicts on its next iteration,
                it is much smarter than us */
-              if (Start->Type == pkgCache::Dep::Conflicts || 
-                  Start->Type == pkgCache::Dep::DpkgBreaks || 
-                  Start->Type == pkgCache::Dep::Obsoletes)
+              if (Start.IsNegative() == true)
                   break;
               
               if (Debug == true)
@@ -956,9 +950,7 @@ bool pkgProblemResolver::ResolveInternal(bool const BrokenFix)
               if a package has a dep on another package that cant be found */
            SPtrArray<pkgCache::Version *> VList = Start.AllTargets();
            if (*VList == 0 && (Flags[I->ID] & Protected) != Protected &&
-               Start->Type != pkgCache::Dep::Conflicts &&
-               Start->Type != pkgCache::Dep::DpkgBreaks &&
-               Start->Type != pkgCache::Dep::Obsoletes &&
+               Start.IsNegative() == false &&
                Cache[I].NowBroken() == false)
            {          
               if (InOr == true)
@@ -983,10 +975,7 @@ bool pkgProblemResolver::ResolveInternal(bool const BrokenFix)
                   at is not the currently selected version of the 
                   package, which means it is not necessary to 
                   remove/keep */
-               if (Cache[Pkg].InstallVer != Ver &&
-                   (Start->Type == pkgCache::Dep::Conflicts ||
-                    Start->Type == pkgCache::Dep::DpkgBreaks ||
-                    Start->Type == pkgCache::Dep::Obsoletes)) 
+               if (Cache[Pkg].InstallVer != Ver && Start.IsNegative() == true)
                {
                   if (Debug) 
                      clog << "  Conflicts//Breaks against version " 
@@ -1004,9 +993,7 @@ bool pkgProblemResolver::ResolveInternal(bool const BrokenFix)
                  fiddle with the VList package */
               if (Scores[I->ID] <= Scores[Pkg->ID] ||
                   ((Cache[Start] & pkgDepCache::DepNow) == 0 &&
-                   End->Type != pkgCache::Dep::Conflicts &&
-                   End->Type != pkgCache::Dep::DpkgBreaks &&
-                   End->Type != pkgCache::Dep::Obsoletes))
+                   End.IsNegative() == false))
               {
                  // Try a little harder to fix protected packages..
                  if ((Flags[I->ID] & Protected) == Protected)
@@ -1113,10 +1100,8 @@ bool pkgProblemResolver::ResolveInternal(bool const BrokenFix)
            }
 
            // Hm, nothing can possibly satisify this dep. Nuke it.
-           if (VList[0] == 0 && 
-               Start->Type != pkgCache::Dep::Conflicts &&
-               Start->Type != pkgCache::Dep::DpkgBreaks &&
-               Start->Type != pkgCache::Dep::Obsoletes &&
+           if (VList[0] == 0 &&
+               Start.IsNegative() == false &&
                (Flags[I->ID] & Protected) != Protected)
            {
               bool Installed = Cache[I].Install();
@@ -1162,9 +1147,7 @@ bool pkgProblemResolver::ResolveInternal(bool const BrokenFix)
               Change = true;
               if ((Cache[J->Dep] & pkgDepCache::DepGNow) == 0)
               {
-                 if (J->Dep->Type == pkgCache::Dep::Conflicts || 
-                     J->Dep->Type == pkgCache::Dep::DpkgBreaks ||
-                     J->Dep->Type == pkgCache::Dep::Obsoletes)
+                 if (J->Dep.IsNegative() == true)
                  {
                     if (Debug == true)
                        clog << "  Fixing " << I.FullName(false) << " via remove of " << J->Pkg.FullName(false) << endl;
index 14ee09e0d2ea7c5c34e6d5b6af02f5465a011edc..ca602d4bfd1df5fa17938e32c0aee7b1eb28332f 100644 (file)
@@ -337,7 +337,7 @@ std::vector<std::string> const Configuration::getArchitectures(bool const &Cache
                                char* arch = strtok(buf, " ");
                                while (arch != NULL) {
                                        for (; isspace(*arch) != 0; ++arch);
-                                       if (arch != '\0') {
+                                       if (arch[0] != '\0') {
                                                char const* archend = arch;
                                                for (; isspace(*archend) == 0 && *archend != '\0'; ++archend);
                                                archs.push_back(string(arch, (archend - arch)));
index 8f9f811da06d2947a917eb8f2dac6f92219cbce4..0c9813c6d470c460f74d38800ef47b4a37c3df41 100644 (file)
@@ -287,6 +287,7 @@ class pkgCache::DepIterator : public Iterator<Dependency, DepIterator> {
        inline PkgIterator ParentPkg() const {return PkgIterator(*Owner,Owner->PkgP + Owner->VerP[S->ParentVer].ParentPkg);};
        inline bool Reverse() const {return Type == DepRev;};
        bool IsCritical() const;
+       bool IsNegative() const;
        void GlobOr(DepIterator &Start,DepIterator &End);
        Version **AllTargets() const;
        bool SmartTargetPkg(PkgIterator &Result) const;
index e690d660cd01bb99f4946f32196cd5c6fa42aadc..eb4f04d7262c2e029c01c754d23e66b61c053d34 100644 (file)
@@ -135,7 +135,7 @@ public:                                                                     /*{{{*/
        static APT::PackageSet FromTask(pkgCacheFile &Cache, std::string pattern, CacheSetHelper &helper);
        static APT::PackageSet FromTask(pkgCacheFile &Cache, std::string const &pattern) {
                CacheSetHelper helper;
-               return APT::PackageSet::FromTask(Cache, pattern, helper);
+               return FromTask(Cache, pattern, helper);
        }
 
        /** \brief returns all packages in the cache whose name matchs a given pattern
@@ -149,7 +149,7 @@ public:                                                                     /*{{{*/
        static APT::PackageSet FromRegEx(pkgCacheFile &Cache, std::string pattern, CacheSetHelper &helper);
        static APT::PackageSet FromRegEx(pkgCacheFile &Cache, std::string const &pattern) {
                CacheSetHelper helper;
-               return APT::PackageSet::FromRegEx(Cache, pattern, helper);
+               return FromRegEx(Cache, pattern, helper);
        }
 
        /** \brief returns all packages specified by a string
@@ -160,7 +160,7 @@ public:                                                                     /*{{{*/
        static APT::PackageSet FromString(pkgCacheFile &Cache, std::string const &string, CacheSetHelper &helper);
        static APT::PackageSet FromString(pkgCacheFile &Cache, std::string const &string) {
                CacheSetHelper helper;
-               return APT::PackageSet::FromString(Cache, string, helper);
+               return FromString(Cache, string, helper);
        }
 
        /** \brief returns a package specified by a string
@@ -171,7 +171,7 @@ public:                                                                     /*{{{*/
        static pkgCache::PkgIterator FromName(pkgCacheFile &Cache, std::string const &string, CacheSetHelper &helper);
        static pkgCache::PkgIterator FromName(pkgCacheFile &Cache, std::string const &string) {
                CacheSetHelper helper;
-               return APT::PackageSet::FromName(Cache, string, helper);
+               return FromName(Cache, string, helper);
        }
 
        /** \brief returns all packages specified on the commandline
@@ -184,7 +184,7 @@ public:                                                                     /*{{{*/
        static APT::PackageSet FromCommandLine(pkgCacheFile &Cache, const char **cmdline, CacheSetHelper &helper);
        static APT::PackageSet FromCommandLine(pkgCacheFile &Cache, const char **cmdline) {
                CacheSetHelper helper;
-               return APT::PackageSet::FromCommandLine(Cache, cmdline, helper);
+               return FromCommandLine(Cache, cmdline, helper);
        }
 
        struct Modifier {
@@ -215,7 +215,7 @@ public:                                                                     /*{{{*/
                std::list<PackageSet::Modifier> const &mods,
                unsigned short const &fallback) {
                CacheSetHelper helper;
-               return APT::PackageSet::GroupedFromCommandLine(Cache, cmdline,
+               return GroupedFromCommandLine(Cache, cmdline,
                                mods, fallback, helper);
        }
 
@@ -309,10 +309,10 @@ public:                                                                   /*{{{*/
        static APT::VersionSet FromCommandLine(pkgCacheFile &Cache, const char **cmdline,
                        APT::VersionSet::Version const &fallback) {
                CacheSetHelper helper;
-               return APT::VersionSet::FromCommandLine(Cache, cmdline, fallback, helper);
+               return FromCommandLine(Cache, cmdline, fallback, helper);
        }
        static APT::VersionSet FromCommandLine(pkgCacheFile &Cache, const char **cmdline) {
-               return APT::VersionSet::FromCommandLine(Cache, cmdline, CANDINST);
+               return FromCommandLine(Cache, cmdline, CANDINST);
        }
 
        static APT::VersionSet FromString(pkgCacheFile &Cache, std::string pkg,
@@ -321,10 +321,10 @@ public:                                                                   /*{{{*/
        static APT::VersionSet FromString(pkgCacheFile &Cache, std::string pkg,
                        APT::VersionSet::Version const &fallback) {
                CacheSetHelper helper;
-               return APT::VersionSet::FromString(Cache, pkg, fallback, helper);
+               return FromString(Cache, pkg, fallback, helper);
        }
        static APT::VersionSet FromString(pkgCacheFile &Cache, std::string pkg) {
-               return APT::VersionSet::FromString(Cache, pkg, CANDINST);
+               return FromString(Cache, pkg, CANDINST);
        }
 
        /** \brief returns all versions specified for the package
@@ -338,10 +338,10 @@ public:                                                                   /*{{{*/
        static APT::VersionSet FromPackage(pkgCacheFile &Cache, pkgCache::PkgIterator const &P,
                        APT::VersionSet::Version const &fallback) {
                CacheSetHelper helper;
-               return APT::VersionSet::FromPackage(Cache, P, fallback, helper);
+               return FromPackage(Cache, P, fallback, helper);
        }
        static APT::VersionSet FromPackage(pkgCacheFile &Cache, pkgCache::PkgIterator const &P) {
-               return APT::VersionSet::FromPackage(Cache, P, CANDINST);
+               return FromPackage(Cache, P, CANDINST);
        }
 
        struct Modifier {
@@ -364,7 +364,7 @@ public:                                                                     /*{{{*/
                std::list<VersionSet::Modifier> const &mods,
                unsigned short const &fallback) {
                CacheSetHelper helper;
-               return APT::VersionSet::GroupedFromCommandLine(Cache, cmdline,
+               return GroupedFromCommandLine(Cache, cmdline,
                                mods, fallback, helper);
        }
                                                                        /*}}}*/
index 36a1d7f12c3be7af2b0d63b7c36d04de8ca9a435..2a914c6654d6dec1f7b1979c1259aaa03b1aaabb 100644 (file)
@@ -155,7 +155,11 @@ bool pkgCdrom::FindPackages(string CD,
         break;
 
       if (chdir(CD.c_str()) != 0)
-        return _error->Errno("chdir","Unable to change to %s",CD.c_str());
+      {
+        _error->Errno("chdir","Unable to change to %s", CD.c_str());
+        closedir(D);
+        return false;
+      }
    };
 
    closedir(D);
@@ -257,8 +261,10 @@ bool pkgCdrom::DropRepeats(vector<string> &List,const char *Name)
       Inodes[I] = Buf.st_ino;
    }
    
-   if (_error->PendingError() == true)
+   if (_error->PendingError() == true) {
+      delete[] Inodes;
       return false;
+   }
    
    // Look for dups
    for (unsigned int I = 0; I != List.size(); I++)
@@ -513,7 +519,8 @@ bool pkgCdrom::Ident(string &ident, pkgCdromStatus *log)            /*{{{*/
    if (CDROM[0] == '.')
       CDROM= SafeGetCWD() + '/' + CDROM;
 
-   if(log) {
+   if (log != NULL)
+   {
       msg.str("");
       ioprintf(msg, _("Using CD-ROM mount point %s\nMounting CD-ROM\n"),
                      CDROM.c_str());
@@ -523,7 +530,7 @@ bool pkgCdrom::Ident(string &ident, pkgCdromStatus *log)            /*{{{*/
       return _error->Error("Failed to mount the cdrom.");
 
    // Hash the CD to get an ID
-   if(log) 
+   if (log != NULL)
       log->Update(_("Identifying.. "));
    
 
@@ -533,10 +540,12 @@ bool pkgCdrom::Ident(string &ident, pkgCdromStatus *log)          /*{{{*/
       return false;
    }
 
-   msg.str("");
-   ioprintf(msg, "[%s]\n",ident.c_str());
-   log->Update(msg.str());
-
+   if (log != NULL)
+   {
+      msg.str("");
+      ioprintf(msg, "[%s]\n",ident.c_str());
+      log->Update(msg.str());
+   }
 
    // Read the database
    Configuration Database;
@@ -547,7 +556,8 @@ bool pkgCdrom::Ident(string &ident, pkgCdromStatus *log)            /*{{{*/
         return _error->Error("Unable to read the cdrom database %s",
                              DFile.c_str());
    }
-   if(log) {
+   if (log != NULL)
+   {
       msg.str("");
       ioprintf(msg, _("Stored label: %s\n"),
       Database.Find("CD::"+ident).c_str());
@@ -555,8 +565,10 @@ bool pkgCdrom::Ident(string &ident, pkgCdromStatus *log)           /*{{{*/
    }
 
    // Unmount and finish
-   if (_config->FindB("APT::CDROM::NoMount",false) == false) {
-      log->Update(_("Unmounting CD-ROM...\n"), STEP_LAST);
+   if (_config->FindB("APT::CDROM::NoMount",false) == false)
+   {
+      if (log != NULL)
+        log->Update(_("Unmounting CD-ROM...\n"), STEP_LAST);
       UnmountCdrom(CDROM);
    }
 
@@ -572,7 +584,8 @@ bool pkgCdrom::Add(pkgCdromStatus *log)                                     /*{{{*/
    if (CDROM[0] == '.')
       CDROM= SafeGetCWD() + '/' + CDROM;
    
-   if(log) {
+   if(log != NULL)
+   {
       log->SetTotal(STEP_LAST);
       msg.str("");
       ioprintf(msg, _("Using CD-ROM mount point %s\n"), CDROM.c_str());
@@ -592,11 +605,12 @@ bool pkgCdrom::Add(pkgCdromStatus *log)                                   /*{{{*/
    // Unmount the CD and get the user to put in the one they want
    if (_config->FindB("APT::CDROM::NoMount",false) == false)
    {
-      if(log)
+      if(log != NULL)
         log->Update(_("Unmounting CD-ROM\n"), STEP_UNMOUNT);
       UnmountCdrom(CDROM);
 
-      if(log) {
+      if(log != NULL)
+      {
         log->Update(_("Waiting for disc...\n"), STEP_WAIT);
         if(!log->ChangeCdrom()) {
            // user aborted
@@ -605,26 +619,29 @@ bool pkgCdrom::Add(pkgCdromStatus *log)                                   /*{{{*/
       }
 
       // Mount the new CDROM
-      log->Update(_("Mounting CD-ROM...\n"), STEP_MOUNT);
+      if(log != NULL)
+        log->Update(_("Mounting CD-ROM...\n"), STEP_MOUNT);
+
       if (MountCdrom(CDROM) == false)
         return _error->Error("Failed to mount the cdrom.");
    }
    
    // Hash the CD to get an ID
-   if(log)
+   if(log != NULL)
       log->Update(_("Identifying.. "), STEP_IDENT);
    string ID;
    if (IdentCdrom(CDROM,ID) == false)
    {
-      log->Update("\n");
+      if (log != NULL)
+        log->Update("\n");
       return false;
    }
-   if(log) 
+   if(log != NULL)
+   {
       log->Update("["+ID+"]\n");
-
-   if(log) 
       log->Update(_("Scanning disc for index files..\n"),STEP_SCAN);
-   
+   }
+
    // Get the CD structure
    vector<string> List;
    vector<string> SourceList;
@@ -634,7 +651,8 @@ bool pkgCdrom::Add(pkgCdromStatus *log)                                     /*{{{*/
    string InfoDir;
    if (FindPackages(CDROM,List,SourceList, SigList,TransList,InfoDir,log) == false)
    {
-      log->Update("\n");
+      if (log != NULL)
+        log->Update("\n");
       return false;
    }
 
@@ -661,7 +679,7 @@ bool pkgCdrom::Add(pkgCdromStatus *log)                                     /*{{{*/
    DropRepeats(SourceList,"Sources");
    DropRepeats(SigList,"Release.gpg");
    DropRepeats(TransList,"");
-   if(log) {
+   if(log != NULL) {
       msg.str("");
       ioprintf(msg, _("Found %zu package indexes, %zu source indexes, "
                      "%zu translation indexes and %zu signatures\n"), 
@@ -698,7 +716,8 @@ bool pkgCdrom::Add(pkgCdromStatus *log)                                     /*{{{*/
               if (*J == '"' || *J == ']' || *J == '[')
                  *J = '_';
            
-           if(log) {
+           if(log != NULL)
+           {
               msg.str("");
               ioprintf(msg, _("Found label '%s'\n"), Name.c_str());
               log->Update(msg.str());
@@ -710,7 +729,7 @@ bool pkgCdrom::Add(pkgCdromStatus *log)                                     /*{{{*/
       if (_config->FindB("APT::CDROM::Rename",false) == true ||
          Name.empty() == true)
       {
-        if(!log
+        if(log == NULL
          {
            if (_config->FindB("APT::CDROM::NoMount",false) == false) 
               UnmountCdrom(CDROM);
@@ -743,13 +762,13 @@ bool pkgCdrom::Add(pkgCdromStatus *log)                                   /*{{{*/
         *J = '_';
    
    Database.Set("CD::" + ID,Name);
-   if(log) {
+   if(log != NULL)
+   {
       msg.str("");
       ioprintf(msg, _("This disc is called: \n'%s'\n"), Name.c_str());
       log->Update(msg.str());
+      log->Update(_("Copying package lists..."), STEP_COPY);
    }
-
-   log->Update(_("Copying package lists..."), STEP_COPY);
    // take care of the signatures and copy them if they are ok
    // (we do this before PackageCopy as it modifies "List" and "SourceList")
    SigVerify SignVerify;
@@ -774,16 +793,15 @@ bool pkgCdrom::Add(pkgCdromStatus *log)                                   /*{{{*/
       if (WriteDatabase(Database) == false)
         return false;
       
-      if(log) {
+      if(log != NULL)
         log->Update(_("Writing new source list\n"), STEP_WRITE);
-      }
       if (WriteSourceList(Name,List,false) == false ||
          WriteSourceList(Name,SourceList,true) == false)
         return false;
    }
 
    // Print the sourcelist entries
-   if(log
+   if(log != NULL)
       log->Update(_("Source list entries for this disc are:\n"));
 
    for (vector<string>::iterator I = List.begin(); I != List.end(); I++)
@@ -796,7 +814,8 @@ bool pkgCdrom::Add(pkgCdromStatus *log)                                     /*{{{*/
         return _error->Error("Internal error");
       }
 
-      if(log) {
+      if(log != NULL)
+      {
         msg.str("");
         msg << "deb cdrom:[" << Name << "]/" << string(*I,0,Space) << 
            " " << string(*I,Space+1) << endl;
@@ -814,7 +833,7 @@ bool pkgCdrom::Add(pkgCdromStatus *log)                                     /*{{{*/
         return _error->Error("Internal error");
       }
 
-      if(log) {
+      if(log != NULL) {
         msg.str("");
         msg << "deb-src cdrom:[" << Name << "]/" << string(*I,0,Space) << 
            " " << string(*I,Space+1) << endl;
@@ -824,7 +843,8 @@ bool pkgCdrom::Add(pkgCdromStatus *log)                                     /*{{{*/
 
    // Unmount and finish
    if (_config->FindB("APT::CDROM::NoMount",false) == false) {
-      log->Update(_("Unmounting CD-ROM...\n"), STEP_LAST);
+      if (log != NULL)
+        log->Update(_("Unmounting CD-ROM...\n"), STEP_LAST);
       UnmountCdrom(CDROM);
    }
 
index 83c324f543bfdadf035ef21dda531eb2c49a41e1..821e6d688e45b2fd083ffea530de738dd0101dbd 100644 (file)
@@ -20,7 +20,6 @@
 #include <apti18n.h>
     
 #include <sys/wait.h>
-#include <sys/errno.h>
 #include <sys/statvfs.h>
 #include <dirent.h>
 #include <fcntl.h>
@@ -206,8 +205,11 @@ bool IdentCdrom(string CD,string &Res,unsigned int Version)
       Hash.Add(Dir->d_name);
    };
    
-   if (chdir(StartDir.c_str()) != 0)
-      return _error->Errno("chdir",_("Unable to change to %s"),StartDir.c_str());
+   if (chdir(StartDir.c_str()) != 0) {
+      _error->Errno("chdir",_("Unable to change to %s"),StartDir.c_str());
+      closedir(D);
+      return false;
+   }
    closedir(D);
    
    // Some stats from the fsys
@@ -236,7 +238,7 @@ bool IdentCdrom(string CD,string &Res,unsigned int Version)
 }
                                                                        /*}}}*/
 
-// FindMountPointForDevice - Find mountpoint for the given device      /*{{{*/
+// FindMountPointForDevice - Find mountpoint for the given device      /*{{{*/
 string FindMountPointForDevice(const char *devnode)
 {
    char buf[255];
@@ -254,7 +256,10 @@ string FindMountPointForDevice(const char *devnode)
          while ( fgets(buf, sizeof(buf), f) != NULL) {
             if (strncmp(buf, devnode, strlen(devnode)) == 0) {
                if(TokSplitString(' ', buf, out, 10))
+               {
+                  fclose(f);
                   return string(out[1]);
+               }
             }
          }
          fclose(f);
@@ -263,5 +268,4 @@ string FindMountPointForDevice(const char *devnode)
    
    return string();
 }
-
-
+                                                                       /*}}}*/
index fe50e606b6fd2a33e45716d8e0962dd06447d053..18810d2a47f6234dbcbf2c90f3eb0678224fa567 100644 (file)
@@ -107,6 +107,7 @@ bool GlobalError::InsertErrno(MsgType type, const char* Function,
                        msgSize = n + 1;
                else
                        msgSize *= 2;
+               free(S);
                return true;
        }
 
@@ -160,6 +161,7 @@ bool GlobalError::Insert(MsgType type, const char* Description,
                        msgSize = n + 1;
                else
                        msgSize *= 2;
+               free(S);
                return true;
        }
 
index 9945b160679d081469d3ee3c7ccdf4d51a127b4c..19381ae4719ea7005ac338463bdbe7e4a5e3cd95 100644 (file)
@@ -237,11 +237,19 @@ DynamicMMap::DynamicMMap(unsigned long Flags,unsigned long const &WorkSpace,
        if ((this->Flags & Fallback) != Fallback) {
                // Set the permissions.
                int Prot = PROT_READ;
+#ifdef MAP_ANONYMOUS
                int Map = MAP_PRIVATE | MAP_ANONYMOUS;
+#else
+               int Map = MAP_PRIVATE | MAP_ANON;
+#endif
                if ((this->Flags & ReadOnly) != ReadOnly)
                        Prot |= PROT_WRITE;
                if ((this->Flags & Public) == Public)
+#ifdef MAP_ANONYMOUS
                        Map = MAP_SHARED | MAP_ANONYMOUS;
+#else
+                       Map = MAP_SHARED | MAP_ANON;
+#endif
 
                // use anonymous mmap() to get the memory
                Base = (unsigned char*) mmap(0, WorkSpace, Prot, Map, -1, 0);
index d8027fc24c6605f54ac745fbe0b88f1c242feb66..34f472ee1b619c1bc85e860c1d1148126c492f45 100644 (file)
@@ -160,10 +160,10 @@ void maybe_add_auth (URI &Uri, string NetRCFile)
     {
       char login[64] = "";
       char password[64] = "";
-      char *netrcfile = strdupa (NetRCFile.c_str ());
+      char *netrcfile = strdup(NetRCFile.c_str());
 
       // first check for a generic host based netrc entry
-      char *host = strdupa (Uri.Host.c_str ());
+      char *host = strdup(Uri.Host.c_str());
       if (host && parsenetrc (host, login, password, netrcfile) == 0)
       {
         if (_config->FindB("Debug::Acquire::netrc", false) == true)
@@ -173,13 +173,16 @@ void maybe_add_auth (URI &Uri, string NetRCFile)
                      << std::endl;
         Uri.User = string (login);
         Uri.Password = string (password);
+       free(netrcfile);
+       free(host);
        return;
       }
+      free(host);
 
       // if host did not work, try Host+Path next, this will trigger
       // a lookup uri.startswith(host) in the netrc file parser (because
       // of the "/"
-      char *hostpath = strdupa (string(Uri.Host+Uri.Path).c_str ());
+      char *hostpath = strdup(string(Uri.Host+Uri.Path).c_str());
       if (hostpath && parsenetrc (hostpath, login, password, netrcfile) == 0)
       {
         if (_config->FindB("Debug::Acquire::netrc", false) == true)
@@ -189,8 +192,9 @@ void maybe_add_auth (URI &Uri, string NetRCFile)
                      << std::endl;
         Uri.User = string (login);
         Uri.Password = string (password);
-        return;
       }
+      free(netrcfile);
+      free(hostpath);
     }
   }
 }
index 2e2bb5ebcdfdfb985c427d2f16d403730b9f67aa..072dda3ac3b1f74b76f403c4d79bbaffdc5fbbae 100644 (file)
@@ -692,14 +692,16 @@ int StringToBool(const string &Text,int Default)
    year 2000 complient and timezone neutral */
 string TimeRFC1123(time_t Date)
 {
-   struct tm Conv = *gmtime(&Date);
-   char Buf[300];
+   struct tm Conv;
+   if (gmtime_r(&Date, &Conv) == NULL)
+      return "";
 
+   char Buf[300];
    const char *Day[] = {"Sun","Mon","Tue","Wed","Thu","Fri","Sat"};
    const char *Month[] = {"Jan","Feb","Mar","Apr","May","Jun","Jul",
                           "Aug","Sep","Oct","Nov","Dec"};
 
-   sprintf(Buf,"%s, %02i %s %i %02i:%02i:%02i GMT",Day[Conv.tm_wday],
+   snprintf(Buf, sizeof(Buf), "%s, %02i %s %i %02i:%02i:%02i GMT",Day[Conv.tm_wday],
           Conv.tm_mday,Month[Conv.tm_mon],Conv.tm_year+1900,Conv.tm_hour,
           Conv.tm_min,Conv.tm_sec);
    return Buf;
index 4be626741e0292bef06738ac7cad3c2bfbb8a14a..4a9e94c855a2d8a24303f50e0f4005eabc2e1eb7 100644 (file)
@@ -284,18 +284,18 @@ unsigned short debListParser::VersionHash()
       /* Strip out any spaces from the text, this undoes dpkgs reformatting
          of certain fields. dpkg also has the rather interesting notion of
          reformatting depends operators < -> <= */
-      char *I = S;
+      char *J = S;
       for (; Start != End; Start++)
       {
         if (isspace(*Start) == 0)
-           *I++ = tolower_ascii(*Start);
+           *J++ = tolower_ascii(*Start);
         if (*Start == '<' && Start[1] != '<' && Start[1] != '=')
-           *I++ = '=';
+           *J++ = '=';
         if (*Start == '>' && Start[1] != '>' && Start[1] != '=')
-           *I++ = '=';
+           *J++ = '=';
       }
 
-      Result = AddCRC16(Result,S,I - S);
+      Result = AddCRC16(Result,S,J - S);
    }
    
    return Result;
@@ -487,7 +487,7 @@ const char *debListParser::ParseDepends(const char *Start,const char *Stop,
    // Parse off the package name
    const char *I = Start;
    for (;I != Stop && isspace(*I) == 0 && *I != '(' && *I != ')' &&
-       *I != ',' && *I != '|'; I++);
+       *I != ',' && *I != '|' && *I != '[' && *I != ']'; I++);
    
    // Malformed, no '('
    if (I != Stop && *I == ')')
index a6edab6b9f5174635660f31d7f10eaa817aa8d63..a91cc34e9b826b31aa99f733897342f90550aef7 100644 (file)
@@ -195,11 +195,14 @@ vector <struct IndexTarget *>* debReleaseIndex::ComputeIndexTargets() const {
                }
        }
 
+       std::vector<std::string> const lang = APT::Configuration::getLanguages(true);
+       if (lang.empty() == true)
+               return IndexTargets;
+
        // get the Translations:
        // - if its a dists-style repository get the i18n/Index first
        // - if its flat try to acquire files by guessing
        if (Dist[Dist.size() - 1] == '/') {
-               std::vector<std::string> const lang = APT::Configuration::getLanguages(true);
                for (std::set<std::string>::const_iterator s = sections.begin();
                     s != sections.end(); ++s) {
                        for (std::vector<std::string>::const_iterator l = lang.begin();
index 01808be243b3cfef5329c86aec9d27aba43d70c0..b37980b7ecbbdae96d210bb6ffca6a700c94d23b 100644 (file)
@@ -391,8 +391,9 @@ void pkgDPkgPM::DoTerminalPty(int master)
    {
       // this happens when the child is about to exit, we
       // give it time to actually exit, otherwise we run
-      // into a race
-      usleep(500000);
+      // into a race so we sleep for half a second.
+      struct timespec sleepfor = { 0, 500000000 };
+      nanosleep(&sleepfor, NULL);
       return;
    }  
    if(len <= 0) 
index 31410e2a69202596cd09021219e3fc5a589d6865..5cb68804dd46bc8efd515f1c8ed141331c39b200 100644 (file)
@@ -70,7 +70,7 @@ void pkgDepCache::ActionGroup::release()
            cache.MarkAndSweep();
        }
 
-      released = false;
+      released = true;
     }
 }
 
@@ -339,8 +339,7 @@ bool pkgDepCache::CheckDep(DepIterator Dep,int Type,PkgIterator &Res)
    /* Check simple depends. A depends -should- never self match but 
       we allow it anyhow because dpkg does. Technically it is a packaging
       bug. Conflicts may never self match */
-   if (Dep.TargetPkg() != Dep.ParentPkg() ||
-       (Dep->Type != Dep::Conflicts && Dep->Type != Dep::DpkgBreaks && Dep->Type != Dep::Obsoletes))
+   if (Dep.TargetPkg() != Dep.ParentPkg() || Dep.IsNegative() == false)
    {
       PkgIterator Pkg = Dep.TargetPkg();
       // Check the base package
@@ -370,8 +369,7 @@ bool pkgDepCache::CheckDep(DepIterator Dep,int Type,PkgIterator &Res)
    {
       /* Provides may never be applied against the same package (or group)
          if it is a conflicts. See the comment above. */
-      if (P.OwnerPkg()->Group == Pkg->Group &&
-         (Dep->Type == Dep::Conflicts || Dep->Type == Dep::DpkgBreaks))
+      if (P.OwnerPkg()->Group == Pkg->Group && Dep.IsNegative() == true)
         continue;
       
       // Check if the provides is a hit
@@ -549,8 +547,8 @@ void pkgDepCache::AddStates(const PkgIterator &Pkg,int Add)
    // Not installed
    if (Pkg->CurrentVer == 0)
    {
-      if (State.Mode == ModeDelete && 
-         (State.iFlags | Purge) == Purge && Pkg.Purge() == false)
+      if (State.Mode == ModeDelete &&
+         (State.iFlags & Purge) == Purge && Pkg.Purge() == false)
         iDelCount += Add;
       
       if (State.Mode == ModeInstall)
@@ -594,9 +592,7 @@ void pkgDepCache::BuildGroupOrs(VerIterator const &V)
 
       /* Invert for Conflicts. We have to do this twice to get the
          right sense for a conflicts group */
-      if (D->Type == Dep::Conflicts ||
-         D->Type == Dep::DpkgBreaks ||
-         D->Type == Dep::Obsoletes)
+      if (D.IsNegative() == true)
         State = ~State;
       
       // Add to the group if we are within an or..
@@ -607,9 +603,7 @@ void pkgDepCache::BuildGroupOrs(VerIterator const &V)
         Group = 0;
       
       // Invert for Conflicts
-      if (D->Type == Dep::Conflicts ||
-         D->Type == Dep::DpkgBreaks ||
-         D->Type == Dep::Obsoletes)
+      if (D.IsNegative() == true)
         State = ~State;
    }    
 }
@@ -742,9 +736,7 @@ void pkgDepCache::Update(OpProgress *Prog)
               Group = 0;
 
            // Invert for Conflicts
-           if (D->Type == Dep::Conflicts ||
-               D->Type == Dep::DpkgBreaks ||
-               D->Type == Dep::Obsoletes)
+           if (D.IsNegative() == true)
               State = ~State;
         }
       }
@@ -774,9 +766,7 @@ void pkgDepCache::Update(DepIterator D)
       State = DependencyState(D);
     
       // Invert for Conflicts
-      if (D->Type == Dep::Conflicts ||
-         D->Type == Dep::DpkgBreaks ||
-         D->Type == Dep::Obsoletes)
+      if (D.IsNegative() == true)
         State = ~State;
 
       RemoveStates(D.ParentPkg());
@@ -1088,7 +1078,22 @@ void pkgDepCache::MarkInstall(PkgIterator const &Pkg,bool AutoInst,
       */
       if (IsImportantDep(Start) == false)
         continue;
-      
+
+      /* If we are in an or group locate the first or that can 
+         succeed. We have already cached this.. */
+      for (; Ors > 1 && (DepState[Start->ID] & DepCVer) != DepCVer; --Ors)
+        ++Start;
+      if (Ors == 1 && (DepState[Start->ID] &DepCVer) != DepCVer && Start.IsNegative() == false)
+      {
+        if(DebugAutoInstall == true)
+           std::clog << OutputInDepth(Depth) << Start << " can't be satisfied!" << std::endl;
+        if (Start.IsCritical() == false)
+           continue;
+        // if the dependency was critical, we can't install it, so remove it again
+        MarkDelete(Pkg,false,Depth + 1, false);
+        return;
+      }
+
       /* Check if any ImportantDep() (but not Critical) were added
        * since we installed the package.  Also check for deps that
        * were satisfied in the past: for instance, if a version
@@ -1096,57 +1101,49 @@ void pkgDepCache::MarkInstall(PkgIterator const &Pkg,bool AutoInst,
        * package should follow that Recommends rather than causing the
        * dependency to be removed. (bug #470115)
        */
-      bool isNewImportantDep = false;
-      bool isPreviouslySatisfiedImportantDep = false;
-      if(!ForceImportantDeps && !Start.IsCritical())
+      if (Pkg->CurrentVer != 0 && ForceImportantDeps == false && Start.IsCritical() == false)
       {
-        bool found=false;
-        VerIterator instVer = Pkg.CurrentVer();
-        if(!instVer.end())
+        bool isNewImportantDep = true;
+        bool isPreviouslySatisfiedImportantDep = false;
+        for (DepIterator D = Pkg.CurrentVer().DependsList(); D.end() != true; ++D)
+        {
+           //FIXME: Should we handle or-group better here?
+           // We do not check if the package we look for is part of the same or-group
+           // we might find while searching, but could that really be a problem?
+           if (D.IsCritical() == true || IsImportantDep(D) == false ||
+               Start.TargetPkg() != D.TargetPkg())
+              continue;
+
+           isNewImportantDep = false;
+
+           while ((D->CompareOp & Dep::Or) != 0)
+              ++D;
+
+           isPreviouslySatisfiedImportantDep = (((*this)[D] & DepGNow) != 0);
+           if (isPreviouslySatisfiedImportantDep == true)
+              break;
+        }
+
+        if(isNewImportantDep == true)
+        {
+           if (DebugAutoInstall == true)
+              std::clog << OutputInDepth(Depth) << "new important dependency: "
+                        << Start.TargetPkg().FullName() << std::endl;
+        }
+        else if(isPreviouslySatisfiedImportantDep == true)
+        {
+           if (DebugAutoInstall == true)
+              std::clog << OutputInDepth(Depth) << "previously satisfied important dependency on "
+                        << Start.TargetPkg().FullName() << std::endl;
+        }
+        else
         {
-          for (DepIterator D = instVer.DependsList(); D.end() != true; D++)
-            {
-              //FIXME: deal better with or-groups(?)
-              if(IsImportantDep(D) && !D.IsCritical() &&
-                 Start.TargetPkg() == D.TargetPkg())
-                {
-                  if(!isPreviouslySatisfiedImportantDep)
-                    {
-                      DepIterator D2 = D;
-                      while((D2->CompareOp & Dep::Or) != 0)
-                        ++D2;
-
-                      isPreviouslySatisfiedImportantDep =
-                        (((*this)[D2] & DepGNow) != 0);
-                    }
-
-                  found=true;
-                }
-            }
-           // this is a new dep if it was not found to be already
-           // a important dep of the installed pacakge
-           isNewImportantDep = !found;
+           if (DebugAutoInstall == true)
+              std::clog << OutputInDepth(Depth) << "ignore old unsatisfied important dependency on "
+                        << Start.TargetPkg().FullName() << std::endl;
+           continue;
         }
       }
-      if(isNewImportantDep)
-        if(DebugAutoInstall == true)
-           std::clog << OutputInDepth(Depth) << "new important dependency: "
-                     << Start.TargetPkg().Name() << std::endl;
-      if(isPreviouslySatisfiedImportantDep)
-       if(DebugAutoInstall == true)
-         std::clog << OutputInDepth(Depth) << "previously satisfied important dependency on "
-                   << Start.TargetPkg().Name() << std::endl;
-
-      // skip important deps if the package is already installed
-      if (Pkg->CurrentVer != 0 && Start.IsCritical() == false 
-         && !isNewImportantDep && !isPreviouslySatisfiedImportantDep
-         && !ForceImportantDeps)
-        continue;
-      
-      /* If we are in an or group locate the first or that can 
-         succeed. We have already cached this.. */
-      for (; Ors > 1 && (DepState[Start->ID] & DepCVer) != DepCVer; Ors--)
-        Start++;
 
       /* This bit is for processing the possibilty of an install/upgrade
          fixing the problem */
@@ -1212,8 +1209,7 @@ void pkgDepCache::MarkInstall(PkgIterator const &Pkg,bool AutoInst,
       /* For conflicts we just de-install the package and mark as auto,
          Conflicts may not have or groups.  For dpkg's Breaks we try to
          upgrade the package. */
-      if (Start->Type == Dep::Conflicts || Start->Type == Dep::Obsoletes ||
-         Start->Type == Dep::DpkgBreaks)
+      if (Start.IsNegative() == true)
       {
         for (Version **I = List; *I != 0; I++)
         {
index c2ee1c34726f70de4d73ea055ed69726fbb340cb..064fb007c9decc7f9670b185d827a4886fc0ca5a 100644 (file)
@@ -75,7 +75,7 @@ bool IndexCopy::CopyPackages(string CDROM,string Name,vector<string> &List,
       
       // Open the package file
       FileFd Pkg;
-      if (FileExists(*I + GetFileName()) == true)
+      if (RealFileExists(*I + GetFileName()) == true)
       {
         Pkg.Open(*I + GetFileName(),FileFd::ReadOnly);
         FileSize = Pkg.Size();
@@ -532,7 +532,7 @@ bool SigVerify::Verify(string prefix, string file, indexRecords *MetaIndex)
    // we skip non-existing files in the verifcation to support a cdrom
    // with no Packages file (just a Package.gz), see LP: #255545
    // (non-existing files are not considered a error)
-   if(!FileExists(prefix+file))
+   if(!RealFileExists(prefix+file))
    {
       _error->Warning(_("Skipping nonexistent file %s"), string(prefix+file).c_str());
       return true;
@@ -601,7 +601,7 @@ bool SigVerify::CopyAndVerify(string CDROM,string Name,vector<string> &SigList,
       string const release = *I+"Release";
 
       // a Release.gpg without a Release should never happen
-      if(FileExists(release) == false)
+      if(RealFileExists(release) == false)
       {
         delete MetaIndex;
         continue;
@@ -681,7 +681,7 @@ bool SigVerify::RunGPGV(std::string const &File, std::string const &FileGPG,
    std::vector<string> keyrings;
    if (DirectoryExists(trustedPath))
      keyrings = GetListOfFilesInDir(trustedPath, "gpg", false, true);
-   if (FileExists(trustedFile) == true)
+   if (RealFileExists(trustedFile) == true)
      keyrings.push_back(trustedFile);
 
    std::vector<const char *> Args;
@@ -788,7 +788,7 @@ bool TranslationsCopy::CopyTranslations(string CDROM,string Name,   /*{{{*/
       
       // Open the package file
       FileFd Pkg;
-      if (FileExists(*I) == true)
+      if (RealFileExists(*I) == true)
       {
         Pkg.Open(*I,FileFd::ReadOnly);
         FileSize = Pkg.Size();
index d5bd1958103ecd595cbd9a73daab1d968ffd79e3..ba43bc7572cde5057b70848b42032e2b1f8cdea1 100644 (file)
@@ -490,7 +490,7 @@ bool pkgOrderList::VisitRProvides(DepFunc F,VerIterator Ver)
    bool Res = true;
    for (PrvIterator P = Ver.ProvidesList(); P.end() == false; P++)
       Res &= (this->*F)(P.ParentPkg().RevDependsList());
-   return true;
+   return Res;
 }
                                                                        /*}}}*/
 // OrderList::VisitProvides - Visit all of the providing packages      /*{{{*/
@@ -507,15 +507,11 @@ bool pkgOrderList::VisitProvides(DepIterator D,bool Critical)
       if (Cache[Pkg].Keep() == true && Pkg.State() == PkgIterator::NeedsNothing)
         continue;
       
-      if (D->Type != pkgCache::Dep::Conflicts &&
-         D->Type != pkgCache::Dep::DpkgBreaks &&
-         D->Type != pkgCache::Dep::Obsoletes &&
+      if (D.IsNegative() == false &&
          Cache[Pkg].InstallVer != *I)
         continue;
       
-      if ((D->Type == pkgCache::Dep::Conflicts ||
-          D->Type == pkgCache::Dep::DpkgBreaks ||
-          D->Type == pkgCache::Dep::Obsoletes) &&
+      if (D.IsNegative() == true &&
          (Version *)Pkg.CurrentVer() != *I)
         continue;
       
@@ -647,9 +643,7 @@ bool pkgOrderList::DepUnPackCrit(DepIterator D)
       {
         /* Forward critical dependencies MUST be correct before the 
            package can be unpacked. */
-        if (D->Type != pkgCache::Dep::Conflicts &&
-            D->Type != pkgCache::Dep::DpkgBreaks &&
-            D->Type != pkgCache::Dep::Obsoletes &&
+        if (D.IsNegative() == false &&
             D->Type != pkgCache::Dep::PreDepends)
            continue;
                                 
@@ -1077,9 +1071,7 @@ bool pkgOrderList::CheckDep(DepIterator D)
       
       /* Conflicts requires that all versions are not present, depends
          just needs one */
-      if (D->Type != pkgCache::Dep::Conflicts && 
-         D->Type != pkgCache::Dep::DpkgBreaks && 
-         D->Type != pkgCache::Dep::Obsoletes)
+      if (D.IsNegative() == false)
       {
         /* Try to find something that does not have the after flag set
            if at all possible */
index 4c655cb7b1d7b6c7878cb81e6ffcf9148cf1aadf..fe9f6eb68e4e2a1c27f33f6678bb34296f685640 100644 (file)
@@ -319,6 +319,17 @@ bool pkgPackageManager::SmartConfigure(PkgIterator Pkg)
       List->Flag(Pkg,pkgOrderList::Configured,pkgOrderList::States);
    }
 
+   if (Cache[Pkg].InstVerIter(Cache)->MultiArch == pkgCache::Version::Same)
+      for (PkgIterator P = Pkg.Group().PackageList();
+          P.end() == false; P = Pkg.Group().NextPkg(P))
+      {
+        if (Pkg == P || List->IsFlag(P,pkgOrderList::Configured) == true ||
+            Cache[P].InstallVer == 0 || (P.CurrentVer() == Cache[P].InstallVer &&
+             (Cache[Pkg].iFlags & pkgDepCache::ReInstall) != pkgDepCache::ReInstall))
+           continue;
+        SmartConfigure(P);
+      }
+
    // Sanity Check
    if (List->IsFlag(Pkg,pkgOrderList::Configured) == false)
       return _error->Error(_("Could not perform immediate configuration on '%s'. "
@@ -474,22 +485,29 @@ bool pkgPackageManager::SmartRemove(PkgIterator Pkg)
 // ---------------------------------------------------------------------
 /* This performs the task of handling pre-depends. */
 bool pkgPackageManager::SmartUnPack(PkgIterator Pkg)
+{
+   return SmartUnPack(Pkg, true);
+}
+bool pkgPackageManager::SmartUnPack(PkgIterator Pkg, bool const Immediate)
 {
    // Check if it is already unpacked
    if (Pkg.State() == pkgCache::PkgIterator::NeedsConfigure &&
        Cache[Pkg].Keep() == true)
    {
       List->Flag(Pkg,pkgOrderList::UnPacked,pkgOrderList::States);
-      if (List->IsFlag(Pkg,pkgOrderList::Immediate) == true)
+      if (Immediate == true &&
+         List->IsFlag(Pkg,pkgOrderList::Immediate) == true)
         if (SmartConfigure(Pkg) == false)
            return _error->Error(_("Could not perform immediate configuration on already unpacked '%s'. "
                        "Please see man 5 apt.conf under APT::Immediate-Configure for details."),Pkg.Name());
       return true;
    }
 
+   VerIterator const instVer = Cache[Pkg].InstVerIter(Cache);
+
    /* See if this packages install version has any predependencies
       that are not met by 'now' packages. */
-   for (DepIterator D = Cache[Pkg].InstVerIter(Cache).DependsList(); 
+   for (DepIterator D = instVer.DependsList();
        D.end() == false; )
    {
       // Compute a single dependency element (glob or)
@@ -575,20 +593,32 @@ bool pkgPackageManager::SmartUnPack(PkgIterator Pkg)
 
    // Check for reverse conflicts.
    if (CheckRConflicts(Pkg,Pkg.RevDependsList(),
-                  Cache[Pkg].InstVerIter(Cache).VerStr()) == false)
+                  instVer.VerStr()) == false)
       return false;
    
-   for (PrvIterator P = Cache[Pkg].InstVerIter(Cache).ProvidesList(); 
+   for (PrvIterator P = instVer.ProvidesList();
        P.end() == false; P++)
       CheckRConflicts(Pkg,P.ParentPkg().RevDependsList(),P.ProvideVersion());
 
+   List->Flag(Pkg,pkgOrderList::UnPacked,pkgOrderList::States);
+
+   if (instVer->MultiArch == pkgCache::Version::Same)
+      for (PkgIterator P = Pkg.Group().PackageList();
+          P.end() == false; P = Pkg.Group().NextPkg(P))
+      {
+        if (Pkg == P || List->IsFlag(P,pkgOrderList::UnPacked) == true ||
+            Cache[P].InstallVer == 0 || (P.CurrentVer() == Cache[P].InstallVer &&
+             (Cache[Pkg].iFlags & pkgDepCache::ReInstall) != pkgDepCache::ReInstall))
+           continue;
+        SmartUnPack(P, false);
+      }
+
    if(Install(Pkg,FileNames[Pkg->ID]) == false)
       return false;
 
-   List->Flag(Pkg,pkgOrderList::UnPacked,pkgOrderList::States);
-   
    // Perform immedate configuration of the package.
-   if (List->IsFlag(Pkg,pkgOrderList::Immediate) == true)
+   if (Immediate == true &&
+       List->IsFlag(Pkg,pkgOrderList::Immediate) == true)
       if (SmartConfigure(Pkg) == false)
         return _error->Error(_("Could not perform immediate configuration on '%s'. "
                        "Please see man 5 apt.conf under APT::Immediate-Configure for details. (%d)"),Pkg.Name(),2);
index efd2cfac6ad18004efab7c51a2a9bb871a0c110a..053b4dc1317087d7703a708398b1bf71c5bb93d3 100644 (file)
@@ -69,7 +69,9 @@ class pkgPackageManager : protected pkgCache::Namespace
    // Install helpers
    bool ConfigureAll();
    bool SmartConfigure(PkgIterator Pkg);
+   //FIXME: merge on abi break
    bool SmartUnPack(PkgIterator Pkg);
+   bool SmartUnPack(PkgIterator Pkg, bool const Immediate);
    bool SmartRemove(PkgIterator Pkg);
    bool EarlyRemove(PkgIterator Pkg);   
    
index 93d09a18ead569cd1ed271097bbb2fff76fa4a70..38e4e904ed41133ae2feb07b9bdd94fad8584354 100644 (file)
@@ -220,6 +220,9 @@ pkgCache::PkgIterator pkgCache::FindPkg(const string &Name) {
                        return FindPkg(Name, "native");
        }
        string const Arch = Name.substr(found+1);
+       /* Beware: This is specialcased to handle pkg:any in dependencies as
+          these are linked to virtual pkg:any named packages with all archs.
+          If you want any arch from a given pkg, use FindPkg(pkg,arch) */
        if (Arch == "any")
                return FindPkg(Name, "any");
        return FindPkg(Name.substr(0, found), Arch);
@@ -231,7 +234,7 @@ pkgCache::PkgIterator pkgCache::FindPkg(const string &Name) {
 pkgCache::PkgIterator pkgCache::FindPkg(const string &Name, string const &Arch) {
        if (MultiArchCache() == false) {
                if (Arch == "native" || Arch == "all" || Arch == "any" ||
-                   Arch == _config->Find("APT::Architecture"))
+                   Arch == NativeArch())
                        return SingleArchFindPkg(Name);
                else
                        return PkgIterator(*this,0);
@@ -325,15 +328,15 @@ pkgCache::PkgIterator pkgCache::GrpIterator::FindPkg(string Arch) const {
        if (Arch == "any")
                return PkgIterator(*Owner, Owner->PkgP + S->FirstPackage);
 
-       static string const myArch = _config->Find("APT::Architecture");
+       char const* const myArch = Owner->NativeArch();
        /* Most of the time the package for our native architecture is
           the one we add at first to the cache, but this would be the
           last one we check, so we do it now. */
        if (Arch == "native" || Arch == myArch || Arch == "all") {
-               Arch = myArch;
                pkgCache::Package *Pkg = Owner->PkgP + S->LastPackage;
-               if (stringcasecmp(Arch, Owner->StrP + Pkg->Arch) == 0)
+               if (strcasecmp(myArch, Owner->StrP + Pkg->Arch) == 0)
                        return PkgIterator(*Owner, Pkg);
+               Arch = myArch;
        }
 
        /* Iterate over the list to find the matching arch
@@ -506,7 +509,8 @@ std::string pkgCache::PkgIterator::FullName(bool const &Pretty) const
 {
    string fullname = Name();
    if (Pretty == false ||
-       (strcmp(Arch(), "all") != 0 && _config->Find("APT::Architecture") != Arch()))
+       (strcmp(Arch(), "all") != 0 &&
+       strcmp(Owner->NativeArch(), Arch()) != 0))
       return fullname.append(":").append(Arch());
    return fullname;
 }
@@ -517,15 +521,24 @@ std::string pkgCache::PkgIterator::FullName(bool const &Pretty) const
    conflicts (including dpkg's Breaks fields). */
 bool pkgCache::DepIterator::IsCritical() const
 {
-   if (S->Type == pkgCache::Dep::Conflicts ||
-       S->Type == pkgCache::Dep::DpkgBreaks ||
-       S->Type == pkgCache::Dep::Obsoletes ||
+   if (IsNegative() == true ||
        S->Type == pkgCache::Dep::Depends ||
        S->Type == pkgCache::Dep::PreDepends)
       return true;
    return false;
 }
                                                                        /*}}}*/
+// DepIterator::IsNegative - Returns true if the dep is a negative one /*{{{*/
+// ---------------------------------------------------------------------
+/* Some dependencies are positive like Depends and Recommends, others
+   are negative like Conflicts which can and should be handled differently */
+bool pkgCache::DepIterator::IsNegative() const
+{
+   return S->Type == Dep::DpkgBreaks ||
+         S->Type == Dep::Conflicts ||
+         S->Type == Dep::Obsoletes;
+}
+                                                                       /*}}}*/
 // DepIterator::SmartTargetPkg - Resolve dep target pointers w/provides        /*{{{*/
 // ---------------------------------------------------------------------
 /* This intellegently looks at dep target packages and tries to figure
@@ -603,9 +616,7 @@ pkgCache::Version **pkgCache::DepIterator::AllTargets() const
         if (Owner->VS->CheckDep(I.VerStr(),S->CompareOp,TargetVer()) == false)
            continue;
 
-        if ((S->Type == pkgCache::Dep::Conflicts ||
-             S->Type == pkgCache::Dep::DpkgBreaks ||
-             S->Type == pkgCache::Dep::Obsoletes) &&
+        if (IsNegative() == true &&
             ParentPkg() == I.ParentPkg())
            continue;
         
@@ -620,9 +631,7 @@ pkgCache::Version **pkgCache::DepIterator::AllTargets() const
         if (Owner->VS->CheckDep(I.ProvideVersion(),S->CompareOp,TargetVer()) == false)
            continue;
         
-        if ((S->Type == pkgCache::Dep::Conflicts ||
-             S->Type == pkgCache::Dep::DpkgBreaks ||
-             S->Type == pkgCache::Dep::Obsoletes) &&
+        if (IsNegative() == true &&
             ParentPkg() == I.OwnerPkg())
            continue;
         
index d654a29769a97024b4d7c26a70d05c211da1c078..1b174372481f0a1a7a43a4ce1fb24c3f7a4d29de 100644 (file)
@@ -215,6 +215,7 @@ class pkgCache                                                              /*{{{*/
 private:
    bool MultiArchEnabled;
    PkgIterator SingleArchFindPkg(const string &Name);
+   inline char const * const NativeArch() const;
 };
                                                                        /*}}}*/
 // Header structure                                                    /*{{{*/
@@ -649,6 +650,11 @@ struct pkgCache::StringItem
    map_ptrloc NextItem;      // StringItem
 };
                                                                        /*}}}*/
+
+
+inline char const * const pkgCache::NativeArch() const
+       { return StrP + HeaderP->Architecture; };
+
 #include <apt-pkg/cacheiterators.h>
 
 inline pkgCache::GrpIterator pkgCache::GrpBegin() 
index 46dd220073fc6015f50b3420f3f511fd39a7f5ca..8e088ba68d1baaa037528bcb333e267d4722d824 100644 (file)
@@ -479,7 +479,8 @@ bool pkgCacheGenerator::NewPackage(pkgCache::PkgIterator &Pkg,const string &Name
    // Set the name, arch and the ID
    Pkg->Name = Grp->Name;
    Pkg->Group = Grp.Index();
-   map_ptrloc const idxArch = WriteUniqString((Arch == "all") ? _config->Find("APT::Architecture") : Arch.c_str());
+   // all is mapped to the native architecture
+   map_ptrloc const idxArch = (Arch == "all") ? Cache.HeaderP->Architecture : WriteUniqString(Arch.c_str());
    if (unlikely(idxArch == 0))
       return false;
    Pkg->Arch = idxArch;
@@ -783,7 +784,7 @@ bool pkgCacheGenerator::ListParser::NewProvides(pkgCache::VerIterator &Ver,
 
    // We do not add self referencing provides
    if (Ver.ParentPkg().Name() == PkgName && (PkgArch == Ver.ParentPkg().Arch() ||
-       (PkgArch == "all" && _config->Find("APT::Architecture") == Ver.ParentPkg().Arch())))
+       (PkgArch == "all" && strcmp((Cache.StrP + Cache.HeaderP->Architecture), Ver.ParentPkg().Arch()) == 0)))
       return true;
    
    // Get a structure
index 4e4077feb3a5dafcda09003ccb00ca0f3e790f66..4fc272a747a3356f836176c7295b28891c87d9b6 100644 (file)
@@ -216,10 +216,22 @@ void pkgPolicy::CreatePin(pkgVersionMatch::MatchType Type,string Name,
       P->Data = Data;
       return;
    }
+   
+   // Allow pinning by wildcards
+   // TODO: Maybe we should always prefer specific pins over non-
+   // specific ones.
+   if (Name[0] == '/' || Name.find_first_of("*[?") != string::npos)
+   {
+      pkgVersionMatch match(Data, Type);
+      for (pkgCache::GrpIterator G = Cache->GrpBegin(); G.end() != true; ++G)
+        if (match.ExpressionMatches(Name, G.Name()))
+           CreatePin(Type, G.Name(), Data, Priority);
+      return;
+   }
 
    // Get a spot to put the pin
    pkgCache::GrpIterator Grp = Cache->FindGrp(Name);
-   for (pkgCache::PkgIterator Pkg = Grp.FindPkg("any");
+   for (pkgCache::PkgIterator Pkg = Grp.PackageList();
        Pkg.end() != true; Pkg = Grp.NextPkg(Pkg))
    {
       Pin *P = 0;
index 01e0d22e07ba124719f739c4833e94a35fb67f40..232bb93ec670eafd23b432248c1c631af00f8a71 100644 (file)
@@ -121,9 +121,7 @@ bool ShowUnMet(pkgCache::VerIterator const &V, bool const &Important)
                  continue;
 
            // Skip conflicts and replaces
-           if (End->Type == pkgCache::Dep::DpkgBreaks ||
-               End->Type == pkgCache::Dep::Replaces ||
-               End->Type == pkgCache::Dep::Conflicts)
+           if (End.IsNegative() == true)
               continue;
 
            // Verify the or group
@@ -848,10 +846,7 @@ bool XVcg(CommandLine &CmdL)
               {
                  /* If a conflicts does not meet anything in the database
                     then show the relation but do not recurse */
-                 if (Hit == false && 
-                     (D->Type == pkgCache::Dep::Conflicts ||
-                      D->Type == pkgCache::Dep::DpkgBreaks ||
-                      D->Type == pkgCache::Dep::Obsoletes))
+                 if (Hit == false && D.IsNegative() == true)
                  {
                     if (Show[D.TargetPkg()->ID] == None && 
                         Show[D.TargetPkg()->ID] != ToShow)
@@ -1060,9 +1055,7 @@ bool Dotty(CommandLine &CmdL)
               {
                  /* If a conflicts does not meet anything in the database
                     then show the relation but do not recurse */
-                 if (Hit == false && 
-                     (D->Type == pkgCache::Dep::Conflicts ||
-                      D->Type == pkgCache::Dep::Obsoletes))
+                 if (Hit == false && D.IsNegative() == true)
                  {
                     if (Show[D.TargetPkg()->ID] == None && 
                         Show[D.TargetPkg()->ID] != ToShow)
@@ -1082,6 +1075,7 @@ bool Dotty(CommandLine &CmdL)
               {
                  case pkgCache::Dep::Conflicts:
                  case pkgCache::Dep::Obsoletes:
+                 case pkgCache::Dep::DpkgBreaks:
                  printf("[color=springgreen];\n");
                  break;
                  
@@ -1115,6 +1109,9 @@ bool Dotty(CommandLine &CmdL)
    }
    
    printf("}\n");
+   delete[] Show;
+   delete[] Flags;
+   delete[] ShapeMap;
    return true;
 }
                                                                        /*}}}*/
@@ -1331,9 +1328,8 @@ bool Search(CommandLine &CmdL)
        return _error->Error("Write to stdout failed");
    return true;
 }
-
-
-/* show automatically installed packages (sorted) */
+                                                                       /*}}}*/
+/* ShowAuto - show automatically installed packages (sorted)           {{{*/
 bool ShowAuto(CommandLine &CmdL)
 {
    pkgCacheFile CacheFile;
@@ -1354,6 +1350,7 @@ bool ShowAuto(CommandLine &CmdL)
     for (vector<string>::iterator I = packages.begin(); I != packages.end(); I++)
             cout << *I << "\n";
 
+   _error->Notice(_("This command is deprecated. Please use 'apt-mark showauto' instead."));
    return true;
 }
                                                                        /*}}}*/
@@ -1699,7 +1696,6 @@ bool ShowHelp(CommandLine &Cmd)
       "   unmet - Show unmet dependencies\n"
       "   search - Search the package list for a regex pattern\n"
       "   show - Show a readable record for the package\n"
-      "   showauto - Display a list of automatically installed packages\n"
       "   depends - Show raw dependency information for a package\n"
       "   rdepends - Show reverse dependency information for a package\n"
       "   pkgnames - List the names of all packages in the system\n"
index 2312f5a101736f51eb9243f5d9ff3efe7b31a91d..fdb1033a159d4c2e0a0a42fd108c28d3438827b9 100644 (file)
@@ -2050,8 +2050,8 @@ bool DoInstall(CommandLine &CmdL)
 
    return InstallPackages(Cache,false);   
 }
-
-/* mark packages as automatically/manually installed. */
+                                                                       /*}}}*/
+/* mark packages as automatically/manually installed.                  {{{*/
 bool DoMarkAuto(CommandLine &CmdL)
 {
    bool Action = true;
@@ -2086,6 +2086,9 @@ bool DoMarkAuto(CommandLine &CmdL)
          AutoMarkChanged++;
       }
    }
+
+   _error->Notice(_("This command is deprecated. Please use 'apt-mark auto' and 'apt-mark manual' instead."));
+
    if (AutoMarkChanged && ! _config->FindB("APT::Get::Simulate",false))
       return Cache->writeStateFile(NULL);
    return false;
@@ -2386,8 +2389,10 @@ bool DoSource(CommandLine &CmdL)
       string Src;
       pkgSrcRecords::Parser *Last = FindSrc(*I,Recs,SrcRecs,Src,*Cache);
       
-      if (Last == 0)
+      if (Last == 0) {
+        delete[] Dsc;
         return _error->Error(_("Unable to find a source package for %s"),Src.c_str());
+      }
       
       string srec = Last->AsStr();
       string::size_type pos = srec.find("\nVcs-");
@@ -2418,8 +2423,10 @@ bool DoSource(CommandLine &CmdL)
 
       // Back track
       vector<pkgSrcRecords::File> Lst;
-      if (Last->Files(Lst) == false)
+      if (Last->Files(Lst) == false) {
+        delete[] Dsc;
         return false;
+      }
 
       // Load them into the fetcher
       for (vector<pkgSrcRecords::File>::const_iterator I = Lst.begin();
@@ -2480,6 +2487,7 @@ bool DoSource(CommandLine &CmdL)
    struct statvfs Buf;
    string OutputDir = ".";
    if (statvfs(OutputDir.c_str(),&Buf) != 0) {
+      delete[] Dsc;
       if (errno == EOVERFLOW)
         return _error->WarningE("statvfs",_("Couldn't determine free space in %s"),
                                OutputDir.c_str());
@@ -2493,10 +2501,12 @@ bool DoSource(CommandLine &CmdL)
 #if HAVE_STRUCT_STATFS_F_TYPE
            || unsigned(Stat.f_type) != RAMFS_MAGIC
 #endif
-           ) 
+           )  {
+        delete[] Dsc;
           return _error->Error(_("You don't have enough free space in %s"),
               OutputDir.c_str());
-      }
+       }
+     }
    
    // Number of bytes
    if (DebBytes != FetchBytes)
@@ -2531,7 +2541,10 @@ bool DoSource(CommandLine &CmdL)
    
    // Run it
    if (Fetcher.Run() == pkgAcquire::Failed)
+   {
+      delete[] Dsc;
       return false;
+   }
 
    // Print error messages
    bool Failed = false;
@@ -2546,8 +2559,11 @@ bool DoSource(CommandLine &CmdL)
       Failed = true;
    }
    if (Failed == true)
+   {
+      delete[] Dsc;
       return _error->Error(_("Failed to fetch some archives."));
-   
+   }
+
    if (_config->FindB("APT::Get::Download-only",false) == true)
    {
       c1out << _("Download complete and in download only mode") << endl;
@@ -2638,6 +2654,9 @@ bool DoSource(CommandLine &CmdL)
 bool DoBuildDep(CommandLine &CmdL)
 {
    CacheFile Cache;
+
+   _config->Set("APT::Install-Recommends", false);
+   
    if (Cache.Open(true) == false)
       return false;
 
@@ -3168,8 +3187,6 @@ bool ShowHelp(CommandLine &CmdL)
       "   clean - Erase downloaded archive files\n"
       "   autoclean - Erase old downloaded archive files\n"
       "   check - Verify that there are no broken dependencies\n"
-      "   markauto - Mark the given packages as automatically installed\n"
-      "   unmarkauto - Mark the given packages as manually installed\n"
       "   changelog - Download and display the changelog for the given package\n"
       "   download - Download the binary package into the current directory\n"
       "\n"
diff --git a/cmdline/apt-mark b/cmdline/apt-mark
deleted file mode 100755 (executable)
index c64d435..0000000
+++ /dev/null
@@ -1,101 +0,0 @@
-#!/usr/bin/python
-
-from optparse import OptionParser
-
-import sys
-import os.path
-    
-try:
-    import apt_pkg
-except ImportError:
-    print >> sys.stderr, "Error importing apt_pkg, is python-apt installed?"
-    sys.exit(1)
-    
-actions = { "markauto" : 1,
-            "unmarkauto": 0
-          }
-
-def show_automatic(filename):
-    if not os.path.exists(STATE_FILE):
-        return
-    auto = set()
-    tagfile = apt_pkg.TagFile(open(STATE_FILE))
-    for section in tagfile:
-        pkgname = section.get("Package")
-        autoInst = section.get("Auto-Installed")
-        if int(autoInst):
-            auto.add(pkgname)
-    print "\n".join(sorted(auto))
-    
-
-def mark_unmark_automatic(filename, action, pkgs):
-    " mark or unmark automatic flag"
-    # open the statefile
-    if os.path.exists(STATE_FILE):
-        try:
-            tagfile = apt_pkg.TagFile(open(STATE_FILE))
-            outfile = open(STATE_FILE+".tmp","w")
-        except IOError, msg:
-            print "%s, are you root?" % (msg)
-            sys.exit(1)
-        for section in tagfile:
-            pkgname = section.get("Package")
-            autoInst = section.get("Auto-Installed")
-            if pkgname in pkgs:
-                if options.verbose:
-                    print "changing %s to %s" % (pkgname,action)
-                newsec = apt_pkg.rewrite_section(section,
-                                       [],
-                                       [ ("Auto-Installed",str(action)) ])
-                pkgs.remove(pkgname)
-                outfile.write(newsec+"\n")
-            else:
-                outfile.write(str(section)+"\n")
-        if action == 1:
-            for pkgname in pkgs:
-                if options.verbose:
-                    print "changing %s to %s" % (pkgname,action)
-                outfile.write("Package: %s\nAuto-Installed: %d\n\n" % (pkgname, action))
-        # all done, rename the tmpfile
-        os.chmod(outfile.name, 0644)
-        os.rename(outfile.name, STATE_FILE)
-        os.chmod(STATE_FILE, 0644)
-
-
-if __name__ == "__main__":
-    apt_pkg.init()
-
-    # option parsing
-    parser = OptionParser()
-    parser.usage = "%prog [options] {markauto|unmarkauto} packages..."
-    parser.epilog = "apt-mark is deprecated, use apt-get markauto/unmarkauto."
-    parser.add_option("-f", "--file", action="store", type="string",
-                      dest="filename",
-                      help="read/write a different file")
-    parser.add_option("-v", "--verbose",
-                      action="store_true", dest="verbose", default=False,
-                      help="print verbose status messages to stdout")
-    (options, args) = parser.parse_args()
-
-    if not args:
-        parser.print_help()
-        sys.exit(1)
-
-    # get the state-file
-    if not options.filename:
-        STATE_FILE = apt_pkg.config.find_dir("Dir::State") + "extended_states"
-    else:
-        STATE_FILE=options.filename
-
-    if len(args) == 0:
-        parser.error("first argument must be 'markauto', 'unmarkauto' or 'showauto'")
-
-    if args[0] == "showauto":
-        show_automatic(STATE_FILE)
-    else:
-        # get pkgs to change
-        if args[0] not in actions.keys():
-            parser.error("first argument must be 'markauto', 'unmarkauto' or 'showauto'")
-        pkgs = args[1:]
-        action = actions[args[0]]
-        mark_unmark_automatic(STATE_FILE, action, pkgs)
diff --git a/cmdline/apt-mark.cc b/cmdline/apt-mark.cc
new file mode 100644 (file)
index 0000000..b2c6649
--- /dev/null
@@ -0,0 +1,373 @@
+// -*- mode: cpp; mode: fold -*-
+// Description                                                         /*{{{*/
+/* #####################################################################
+   apt-mark - show and change auto-installed bit information
+   ##################################################################### */
+                                                                       /*}}}*/
+// Include Files                                                       /*{{{*/
+#include <apt-pkg/cachefile.h>
+#include <apt-pkg/cacheset.h>
+#include <apt-pkg/cmndline.h>
+#include <apt-pkg/error.h>
+#include <apt-pkg/init.h>
+#include <apt-pkg/strutl.h>
+
+#include <config.h>
+#include <apti18n.h>
+
+#include <algorithm>
+                                                                       /*}}}*/
+using namespace std;
+
+ostream c0out(0);
+ostream c1out(0);
+ostream c2out(0);
+ofstream devnull("/dev/null");
+/* DoAuto - mark packages as automatically/manually installed          {{{*/
+bool DoAuto(CommandLine &CmdL)
+{
+   pkgCacheFile CacheFile;
+   pkgCache *Cache = CacheFile.GetPkgCache();
+   pkgDepCache *DepCache = CacheFile.GetDepCache();
+   if (unlikely(Cache == NULL || DepCache == NULL))
+      return false;
+
+   APT::PackageSet pkgset = APT::PackageSet::FromCommandLine(CacheFile, CmdL.FileList + 1);
+   if (pkgset.empty() == true)
+      return _error->Error(_("No packages found"));
+
+   bool MarkAuto = strcasecmp(CmdL.FileList[0],"auto") == 0;
+   int AutoMarkChanged = 0;
+
+   for (APT::PackageSet::const_iterator Pkg = pkgset.begin(); Pkg != pkgset.end(); ++Pkg)
+   {
+      if (Pkg->CurrentVer == 0)
+      {
+        ioprintf(c1out,_("%s can not be marked as it is not installed.\n"), Pkg.FullName(true).c_str());
+        continue;
+      }
+      else if ((((*DepCache)[Pkg].Flags & pkgCache::Flag::Auto) == pkgCache::Flag::Auto) == MarkAuto)
+      {
+        if (MarkAuto == false)
+           ioprintf(c1out,_("%s was already set to manually installed.\n"), Pkg.FullName(true).c_str());
+        else
+           ioprintf(c1out,_("%s was already set to automatically installed.\n"), Pkg.FullName(true).c_str());
+        continue;
+      }
+
+      if (MarkAuto == false)
+        ioprintf(c1out,_("%s set to manually installed.\n"), Pkg.FullName(true).c_str());
+      else
+        ioprintf(c1out,_("%s set to automatically installed.\n"), Pkg.FullName(true).c_str());
+
+      DepCache->MarkAuto(Pkg, MarkAuto);
+      ++AutoMarkChanged;
+   }
+   if (AutoMarkChanged > 0 && _config->FindB("APT::Mark::Simulate", false) == false)
+      return DepCache->writeStateFile(NULL);
+   return true;
+}
+                                                                       /*}}}*/
+/* DoMarkAuto - mark packages as automatically/manually installed      {{{*/
+/* Does the same as DoAuto but tries to do it exactly the same why as
+   the python implementation did it so it can be a drop-in replacement */
+bool DoMarkAuto(CommandLine &CmdL)
+{
+   pkgCacheFile CacheFile;
+   pkgCache *Cache = CacheFile.GetPkgCache();
+   pkgDepCache *DepCache = CacheFile.GetDepCache();
+   if (unlikely(Cache == NULL || DepCache == NULL))
+      return false;
+
+   APT::PackageSet pkgset = APT::PackageSet::FromCommandLine(CacheFile, CmdL.FileList + 1);
+   if (pkgset.empty() == true)
+      return _error->Error(_("No packages found"));
+
+   bool const MarkAuto = strcasecmp(CmdL.FileList[0],"markauto") == 0;
+   bool const Verbose = _config->FindB("APT::MarkAuto::Verbose", false);
+   int AutoMarkChanged = 0;
+
+   for (APT::PackageSet::const_iterator Pkg = pkgset.begin(); Pkg != pkgset.end(); ++Pkg)
+   {
+      if (Pkg->CurrentVer == 0 ||
+         (((*DepCache)[Pkg].Flags & pkgCache::Flag::Auto) == pkgCache::Flag::Auto) == MarkAuto)
+        continue;
+
+      if (Verbose == true)
+        ioprintf(c1out, "changing %s to %d\n", Pkg.Name(), (MarkAuto == false) ? 0 : 1);
+
+      DepCache->MarkAuto(Pkg, MarkAuto);
+      ++AutoMarkChanged;
+   }
+   if (AutoMarkChanged > 0 && _config->FindB("APT::Mark::Simulate", false) == false)
+      return DepCache->writeStateFile(NULL);
+
+   _error->Notice(_("This command is deprecated. Please use 'apt-mark auto' and 'apt-mark manual' instead."));
+
+   return true;
+}
+                                                                       /*}}}*/
+/* ShowAuto - show automatically installed packages (sorted)           {{{*/
+bool ShowAuto(CommandLine &CmdL)
+{
+   pkgCacheFile CacheFile;
+   pkgCache *Cache = CacheFile.GetPkgCache();
+   pkgDepCache *DepCache = CacheFile.GetDepCache();
+   if (unlikely(Cache == NULL || DepCache == NULL))
+      return false;
+
+   std::vector<string> packages;
+
+   bool const ShowAuto = strcasecmp(CmdL.FileList[0],"showauto") == 0;
+
+   if (CmdL.FileList[1] == 0)
+   {
+      packages.reserve(Cache->HeaderP->PackageCount / 3);
+      for (pkgCache::PkgIterator P = Cache->PkgBegin(); P.end() == false; ++P)
+        if (P->CurrentVer != 0 &&
+            (((*DepCache)[P].Flags & pkgCache::Flag::Auto) == pkgCache::Flag::Auto) == ShowAuto)
+           packages.push_back(P.FullName(true));
+   }
+   else
+   {
+      APT::CacheSetHelper helper(false); // do not show errors
+      APT::PackageSet pkgset = APT::PackageSet::FromCommandLine(CacheFile, CmdL.FileList + 1, helper);
+      packages.reserve(pkgset.size());
+      for (APT::PackageSet::const_iterator P = pkgset.begin(); P != pkgset.end(); ++P)
+        if (P->CurrentVer != 0 &&
+            (((*DepCache)[P].Flags & pkgCache::Flag::Auto) == pkgCache::Flag::Auto) == ShowAuto)
+           packages.push_back(P.FullName(true));
+   }
+
+   std::sort(packages.begin(), packages.end());
+
+   for (vector<string>::const_iterator I = packages.begin(); I != packages.end(); ++I)
+      std::cout << *I << std::endl;
+
+   return true;
+}
+                                                                       /*}}}*/
+/* DoHold - mark packages as hold by dpkg                              {{{*/
+bool DoHold(CommandLine &CmdL)
+{
+   pkgCacheFile CacheFile;
+   pkgCache *Cache = CacheFile.GetPkgCache();
+   if (unlikely(Cache == NULL))
+      return false;
+
+   APT::PackageSet pkgset = APT::PackageSet::FromCommandLine(CacheFile, CmdL.FileList + 1);
+   if (pkgset.empty() == true)
+      return _error->Error(_("No packages found"));
+
+   bool const MarkHold = strcasecmp(CmdL.FileList[0],"hold") == 0;
+
+   for (APT::PackageSet::iterator Pkg = pkgset.begin(); Pkg != pkgset.end(); ++Pkg)
+   {
+      if ((Pkg->SelectedState == pkgCache::State::Hold) == MarkHold)
+      {
+        if (MarkHold == true)
+           ioprintf(c1out,_("%s was already set on hold.\n"), Pkg.FullName(true).c_str());
+        else
+           ioprintf(c1out,_("%s was already not hold.\n"), Pkg.FullName(true).c_str());
+        pkgset.erase(Pkg);
+        continue;
+      }
+   }
+
+   if (pkgset.empty() == true)
+      return true;
+
+   if (_config->FindB("APT::Mark::Simulate", false) == true)
+   {
+      for (APT::PackageSet::iterator Pkg = pkgset.begin(); Pkg != pkgset.end(); ++Pkg)
+      {
+        if (MarkHold == false)
+           ioprintf(c1out,_("%s set on hold.\n"), Pkg.FullName(true).c_str());
+        else
+           ioprintf(c1out,_("Canceled hold on %s.\n"), Pkg.FullName(true).c_str());
+      }
+      return true;
+   }
+
+   string dpkgcall = _config->Find("Dir::Bin::dpkg", "dpkg");
+   std::vector<string> const dpkgoptions = _config->FindVector("DPkg::options");
+   for (std::vector<string>::const_iterator o = dpkgoptions.begin();
+       o != dpkgoptions.end(); ++o)
+      dpkgcall.append(" ").append(*o);
+   dpkgcall.append(" --set-selections");
+   FILE *dpkg = popen(dpkgcall.c_str(), "w");
+   if (dpkg == NULL)
+      return _error->Errno("DoHold", "fdopen on dpkg stdin failed");
+
+   for (APT::PackageSet::iterator Pkg = pkgset.begin(); Pkg != pkgset.end(); ++Pkg)
+   {
+      if (MarkHold == true)
+      {
+        fprintf(dpkg, "%s hold\n", Pkg.FullName(true).c_str());
+        ioprintf(c1out,_("%s set on hold.\n"), Pkg.FullName(true).c_str());
+      }
+      else
+      {
+        fprintf(dpkg, "%s install\n", Pkg.FullName(true).c_str());
+        ioprintf(c1out,_("Canceled hold on %s.\n"), Pkg.FullName(true).c_str());
+      }
+   }
+
+   int const status = pclose(dpkg);
+   if (status == -1)
+      return _error->Errno("DoHold", "dpkg execution failed in the end");
+   if (WIFEXITED(status) == false || WEXITSTATUS(status) != 0)
+      return _error->Error(_("Executing dpkg failed. Are you root?"));
+   return true;
+}
+                                                                       /*}}}*/
+/* ShowHold - show packages set on hold in dpkg status                 {{{*/
+bool ShowHold(CommandLine &CmdL)
+{
+   pkgCacheFile CacheFile;
+   pkgCache *Cache = CacheFile.GetPkgCache();
+   if (unlikely(Cache == NULL))
+      return false;
+
+   std::vector<string> packages;
+
+   if (CmdL.FileList[1] == 0)
+   {
+      packages.reserve(50); // how many holds are realistic? I hope just a few…
+      for (pkgCache::PkgIterator P = Cache->PkgBegin(); P.end() == false; ++P)
+        if (P->SelectedState == pkgCache::State::Hold)
+           packages.push_back(P.FullName(true));
+   }
+   else
+   {
+      APT::CacheSetHelper helper(false); // do not show errors
+      APT::PackageSet pkgset = APT::PackageSet::FromCommandLine(CacheFile, CmdL.FileList + 1, helper);
+      packages.reserve(pkgset.size());
+      for (APT::PackageSet::const_iterator P = pkgset.begin(); P != pkgset.end(); ++P)
+        if (P->SelectedState == pkgCache::State::Hold)
+           packages.push_back(P.FullName(true));
+   }
+
+   std::sort(packages.begin(), packages.end());
+
+   for (vector<string>::const_iterator I = packages.begin(); I != packages.end(); ++I)
+      std::cout << *I << std::endl;
+
+   return true;
+}
+                                                                       /*}}}*/
+// ShowHelp - Show a help screen                                       /*{{{*/
+// ---------------------------------------------------------------------
+/* */
+bool ShowHelp(CommandLine &CmdL)
+{
+   ioprintf(cout,_("%s %s for %s compiled on %s %s\n"),PACKAGE,VERSION,
+           COMMON_ARCH,__DATE__,__TIME__);
+
+   cout <<
+    _("Usage: apt-mark [options] {auto|manual} pkg1 [pkg2 ...]\n"
+      "\n"
+      "apt-mark is a simple command line interface for marking packages\n"
+      "as manual or automatical installed. It can also list marks.\n"
+      "\n"
+      "Commands:\n"
+      "   auto - Mark the given packages as automatically installed\n"
+      "   manual - Mark the given packages as manually installed\n"
+      "\n"
+      "Options:\n"
+      "  -h  This help text.\n"
+      "  -q  Loggable output - no progress indicator\n"
+      "  -qq No output except for errors\n"
+      "  -s  No-act. Just prints what would be done.\n"
+      "  -f  read/write auto/manual marking in the given file\n"
+      "  -c=? Read this configuration file\n"
+      "  -o=? Set an arbitrary configuration option, eg -o dir::cache=/tmp\n"
+      "See the apt-mark(8) and apt.conf(5) manual pages for more information.")
+      << std::endl;
+   return true;
+}
+                                                                       /*}}}*/
+int main(int argc,const char *argv[])                                  /*{{{*/
+{
+   CommandLine::Args Args[] = {
+      {'h',"help","help",0},
+      {0,"version","version",0},
+      {'q',"quiet","quiet",CommandLine::IntLevel},
+      {'q',"silent","quiet",CommandLine::IntLevel},
+      {'v',"verbose","APT::MarkAuto::Verbose",0},
+      {'s',"simulate","APT::Mark::Simulate",0},
+      {'s',"just-print","APT::Mark::Simulate",0},
+      {'s',"recon","APT::Mark::Simulate",0},
+      {'s',"dry-run","APT::Mark::Simulate",0},
+      {'s',"no-act","APT::Mark::Simulate",0},
+      {'f',"file","Dir::State::extended_states",CommandLine::HasArg},
+      {'c',"config-file",0,CommandLine::ConfigFile},
+      {'o',"option",0,CommandLine::ArbItem},
+      {0,0,0,0}};
+   CommandLine::Dispatch Cmds[] = {{"help",&ShowHelp},
+                                  {"auto",&DoAuto},
+                                  {"manual",&DoAuto},
+                                  {"hold",&DoHold},
+                                  {"unhold",&DoHold},
+                                  {"showauto",&ShowAuto},
+                                  {"showmanual",&ShowAuto},
+                                  {"showhold",&ShowHold},
+                                  // be nice and forgive the typo
+                                  {"showholds",&ShowHold},
+                                  // be nice and forgive it as it is technical right
+                                  {"install",&DoHold},
+                                  // obsolete commands for compatibility
+                                  {"markauto", &DoMarkAuto},
+                                  {"unmarkauto", &DoMarkAuto},
+                                   {0,0}};
+
+   // Set up gettext support
+   setlocale(LC_ALL,"");
+   textdomain(PACKAGE);
+
+   // Parse the command line and initialize the package library
+   CommandLine CmdL(Args,_config);
+   if (pkgInitConfig(*_config) == false ||
+       CmdL.Parse(argc,argv) == false ||
+       pkgInitSystem(*_config,_system) == false)
+   {
+      if (_config->FindB("version") == true)
+        ShowHelp(CmdL);
+      _error->DumpErrors();
+      return 100;
+   }
+
+   // See if the help should be shown
+   if (_config->FindB("help") == true ||
+       _config->FindB("version") == true ||
+       CmdL.FileSize() == 0)
+   {
+      ShowHelp(CmdL);
+      return 0;
+   }
+
+   // Deal with stdout not being a tty
+   if (!isatty(STDOUT_FILENO) && _config->FindI("quiet", -1) == -1)
+      _config->Set("quiet","1");
+
+   // Setup the output streams
+   c0out.rdbuf(cout.rdbuf());
+   c1out.rdbuf(cout.rdbuf());
+   c2out.rdbuf(cout.rdbuf());
+   if (_config->FindI("quiet",0) > 0)
+      c0out.rdbuf(devnull.rdbuf());
+   if (_config->FindI("quiet",0) > 1)
+      c1out.rdbuf(devnull.rdbuf());
+
+   // Match the operation
+   CmdL.DispatchArg(Cmds);
+
+   // Print any errors or warnings found during parsing
+   bool const Errors = _error->PendingError();
+   if (_config->FindI("quiet",0) > 0)
+      _error->DumpErrors();
+   else
+      _error->DumpErrors(GlobalError::DEBUG);
+   return Errors == true ? 100 : 0;
+}
+                                                                       /*}}}*/
index aea5d1db55257028aaa1b20af44caadbf32b2f3a..6d988a8f587f365355440619da2ad86a89e1fbc4 100644 (file)
@@ -54,10 +54,11 @@ TARGET=program
 include $(COPY_H)
 
 # The apt-mark program
-SOURCE=apt-mark
-TO=$(BIN)
-TARGET=program
-include $(COPY_H)
+PROGRAM=apt-mark
+SLIBS = -lapt-pkg $(INTLLIBS)
+LIB_MAKES = apt-pkg/makefile
+SOURCE = apt-mark.cc
+include $(PROGRAM_H)
 
 # The apt-report-mirror-failure program
 #SOURCE=apt-report-mirror-failure
index 2f57eb10ae7b361b907ebb040beb9e489ebb823b..9ba283a518e87a5f04f551a29f42882a283d267d 100644 (file)
@@ -111,11 +111,13 @@ libapt-inst.so.1.2 libapt-inst1.2
  (c++|optional)"vtable for pkgCache::Iterator<pkgCache::Package, pkgCache::PkgIterator>@Base" 0.8.0
  (c++|optional)"vtable for pkgCache::Iterator<pkgCache::Version, pkgCache::VerIterator>@Base" 0.8.0
 ### gcc-4.4 specific
+# (c++|regex|optional=std)"^char\* std::[^ ]+<.+ >::_.+@Base$" 0.8.0
+# (c++|optional=std)"std::basic_string<char, std::char_traits<char>, std::allocator<char> >& std::basic_string<char, std::char_traits<char>, std::allocator<char> >::append<unsigned char*>(unsigned char*, unsigned char*)@Base" 0.8.0
+### gcc-4.6 specific
+ (c++|optional=std)"std::vector<APT::Configuration::Compressor, std::allocator<APT::Configuration::Compressor> >::~vector()@Base" 0.8.12 1
  (c++|optional=std)"std::basic_string<char, std::char_traits<char>, std::allocator<char> >& std::basic_string<char, std::char_traits<char>, std::allocator<char> >::_M_replace_dispatch<unsigned char*>(__gnu_cxx::__normal_iterator<char*, std::basic_string<char, std::char_traits<char>, std::allocator<char> > >, __gnu_cxx::__normal_iterator<char*, std::basic_string<char, std::char_traits<char>, std::allocator<char> > >, unsigned char*, unsigned char*, std::__false_type)@Base" 0.8.0
 ### try to ignore std:: template instances
- (c++|optional=std)"std::basic_string<char, std::char_traits<char>, std::allocator<char> >& std::basic_string<char, std::char_traits<char>, std::allocator<char> >::append<unsigned char*>(unsigned char*, unsigned char*)@Base" 0.8.0
  (c++|regex|optional=std)"^std::basic_string<.+ >\(.+\)@Base$" 0.8.0
- (c++|regex|optional=std)"^char\* std::[^ ]+<.+ >::_.+@Base$" 0.8.0
  (c++|regex|optional=std)"^typeinfo name for std::iterator<.*>@Base$" 0.8.0
  (c++|regex|optional=std)"^typeinfo for std::iterator<.*>@Base$" 0.8.0
 ###
index c61bfb9bb3cd0f7c885f6eca09f13b002d694be2..69f97a36b9bd81186b7c4ade8359a36820a224e0 100644 (file)
@@ -305,6 +305,26 @@ debug_echo()
     fi
 }
 
+check_power(){
+    # laptop check, on_ac_power returns:
+    #       0 (true)    System is on main power
+    #       1 (false)   System is not on main power
+    #       255 (false) Power status could not be determined
+    # Desktop systems always return 255 it seems
+    if which on_ac_power >/dev/null; then
+        on_ac_power
+        POWER=$?
+        if [ $POWER -eq 1 ]; then
+           debug_echo "exit: system NOT on main power"
+           return 1
+        elif [ $POWER -ne 0 ]; then
+           debug_echo "power status ($POWER) undetermined, continuing"
+        fi
+        debug_echo "system is on main power."
+    fi
+    return 0
+}
+
 # ------------------------ main ----------------------------
 
 # Backup the 7 last versions of APT's extended_states file
@@ -350,22 +370,7 @@ if [ "$VERBOSE" -ge 3 ]; then
     set -x
 fi
 
-# laptop check, on_ac_power returns:
-#       0 (true)    System is on main power
-#       1 (false)   System is not on main power
-#       255 (false) Power status could not be determined
-# Desktop systems always return 255 it seems
-if which on_ac_power >/dev/null; then
-    on_ac_power
-    POWER=$?
-    if [ $POWER -eq 1 ]; then
-       debug_echo "exit: system NOT on main power"
-       exit 0
-    elif [ $POWER -ne 0 ]; then
-       debug_echo "power status ($POWER) undetermined, continuing"
-    fi
-    debug_echo "system is on main power."
-fi
+check_power || exit 0
 
 # check if we can lock the cache and if the cache is clean
 if which apt-get >/dev/null && ! eval apt-get check -f $XAPTOPT $XSTDERR ; then
@@ -416,6 +421,7 @@ do_cache_backup $BackupArchiveInterval
 # sleep random amount of time to avoid hitting the 
 # mirrors at the same time
 random_sleep
+check_power || exit 0
 
 # include default system language so that "apt-get update" will
 # fetch the right translated package descriptions
@@ -466,7 +472,7 @@ fi
 
 # auto upgrade all upgradeable packages
 UPGRADE_STAMP=/var/lib/apt/periodic/upgrade-stamp
-if [ $UPDATED -eq 1 ] && which unattended-upgrade >/dev/null && check_stamp $UPGRADE_STAMP $UnattendedUpgradeInterval; then
+if which unattended-upgrade >/dev/null && check_stamp $UPGRADE_STAMP $UnattendedUpgradeInterval; then
     if unattended-upgrade $XUUPOPT; then
        update_stamp $UPGRADE_STAMP
        debug_echo "unattended-upgrade (success)"
diff --git a/debian/apt.lintian-overrides b/debian/apt.lintian-overrides
deleted file mode 100644 (file)
index 49c5ce5..0000000
+++ /dev/null
@@ -1,3 +0,0 @@
-# apt-mark is rarely used auxiliary script, we don't want to depend on
-# python-apt only for it. 
-apt binary: python-script-but-no-python-dep ./usr/bin/apt-mark
index 1c108fb69a92e2d64478c91b42228d27cf1f3cd9..bb60c22be40819bec537ad30b2de25981797a2f8 100644 (file)
@@ -277,11 +277,7 @@ libapt-pkg.so.4.10 libapt-pkg4.10
  (c++)"pkgDepCache::DefaultRootSetFunc::InRootSet(pkgCache::PkgIterator const&)@Base" 0.8.0
  (c++)"pkgDepCache::DefaultRootSetFunc::~DefaultRootSetFunc()@Base" 0.8.0
  (c++)"pkgDepCache::MarkFollowsSuggests()@Base" 0.8.0
- (c++)"pkgDepCache::SetCandidateVersion(pkgCache::VerIterator)@Base" 0.8.0
  (c++)"pkgDepCache::MarkFollowsRecommends()@Base" 0.8.0
- (c++)"pkgDepCache::ReInstallPseudoForGroup(pkgCache::PkgIterator const&, std::set<unsigned long, std::less<unsigned long>, std::allocator<unsigned long> >&)@Base" 0.8.0
- (c++)"pkgDepCache::ReInstallPseudoForGroup(unsigned long const&, std::set<unsigned long, std::less<unsigned long>, std::allocator<unsigned long> >&)@Base" 0.8.0
- (c++)"pkgDepCache::RemovePseudoInstalledPkg(pkgCache::PkgIterator&, std::set<unsigned long, std::less<unsigned long>, std::allocator<unsigned long> >&)@Base" 0.8.0
  (c++)"pkgDepCache::Init(OpProgress*)@Base" 0.8.0
  (c++)"pkgDepCache::Sweep()@Base" 0.8.0
  (c++)"pkgDepCache::Policy::IsImportantDep(pkgCache::DepIterator const&)@Base" 0.8.0
@@ -1222,35 +1218,45 @@ libapt-pkg.so.4.10 libapt-pkg4.10
 ### demangle strangeness - buildd report it as MISSING and as new…
  (c++)"pkgAcqMetaSig::pkgAcqMetaSig(pkgAcquire*, std::basic_string<char, std::char_traits<char>, std::allocator<char> >, std::basic_string<char, std::char_traits<char>, std::allocator<char> >, std::basic_string<char, std::char_traits<char>, std::allocator<char> >, std::basic_string<char, std::char_traits<char>, std::allocator<char> >, std::basic_string<char, std::char_traits<char>, std::allocator<char> >, std::basic_string<char, std::char_traits<char>, std::allocator<char> >, std::vector<IndexTarget*, std::allocator<IndexTarget*> > const*, indexRecords*)@Base" 0.8.0
 ### gcc-4.4 specific
- (c++|optional=inherent)"APT::PackageSet::PackageSet(APT::PackageSet const&)@Base" 0.8.0
- (c++|optional=inline)"stringcasecmp(char const*, char const*, char const*)@Base" 0.8.0
- (arch=armel|c++|optional=inline)"stringcasecmp(std::basic_string<char, std::char_traits<char>, std::allocator<char> > const&, char const*)@Base" 0.8.0
- (c++|optional=inherent)"APT::VersionSet::insert(pkgCache::VerIterator const&)@Base" 0.8.0
- (c++|optional=inline)"APT::VersionSet::insert(APT::VersionSet const&)@Base" 0.8.0
- (c++|optional=private)"debTranslationsIndex::IndexFile(char const*) const@Base" 0.8.0
- (c++|optional=inline)"pkgCache::Iterator<pkgCache::Version, pkgCache::VerIterator>::end() const@Base" 0.8.0
- (c++|optional=inherent)"HashString::operator=(HashString const&)@Base" 0.8.0
- (c++|regex|optional=std)"^std::less<[^ ]+>::operator\(\)\(.+\) const@Base$" 0.8.0
- (c++|regex|optional=std)"^std::vector<.+ >::(vector|push_back|erase|_[^ ]+)\(.+\)( const|)@Base$" 0.8.0
- (c++|regex|optional=std)"^std::basic_string<char, std::char_traits<char>, std::allocator<char> >::basic_string<char( const|)\*>\(.+\)@Base$" 0.8.0
- (c++|regex|optional=std)"^pkgCache::(Dep|Pkg|Ver|Grp|Prv|Desc|PkgFile)Iterator\*\* std::_.+@Base$" 0.8.0
+# (c++|optional=inherent)"APT::PackageSet::PackageSet(APT::PackageSet const&)@Base" 0.8.0
+# (c++|optional=inline)"stringcasecmp(char const*, char const*, char const*)@Base" 0.8.0
+# (arch=armel|c++|optional=inline)"stringcasecmp(std::basic_string<char, std::char_traits<char>, std::allocator<char> > const&, char const*)@Base" 0.8.0
+# (c++|optional=inherent)"APT::VersionSet::insert(pkgCache::VerIterator const&)@Base" 0.8.0
+# (c++|optional=inline)"APT::VersionSet::insert(APT::VersionSet const&)@Base" 0.8.0
+# (c++|optional=private)"debTranslationsIndex::IndexFile(char const*) const@Base" 0.8.0
+# (c++|optional=inline)"pkgCache::Iterator<pkgCache::Version, pkgCache::VerIterator>::end() const@Base" 0.8.0
+# (c++|optional=inherent)"HashString::operator=(HashString const&)@Base" 0.8.0
+# (c++|regex|optional=std)"^std::less<[^ ]+>::operator\(\)\(.+\) const@Base$" 0.8.0
+# (c++|regex|optional=std)"^std::vector<.+ >::(vector|push_back|erase|_[^ ]+)\(.+\)( const|)@Base$" 0.8.0
+# (c++|regex|optional=std)"^pkgCache::(Dep|Pkg|Ver|Grp|Prv|Desc|PkgFile)Iterator\*\* std::_.+@Base$" 0.8.0
 ### gcc-4.5 specific
-# (c++|optional=template)"SPtrArray<unsigned char>::~SPtrArray()@Base" 0.8.0
-# (c++|regex|optional=template)"^SPtrArray<[^ ]+>::~SPtrArray\(\)@Base$" 0.8.0
-# (c++|optional=inline)"FileFd::FileFd(std::basic_string<char, std::char_traits<char>, std::allocator<char> >, FileFd::OpenMode, unsigned long)@Base" 0.8.0
-### architecture specific: va_list
- (arch=i386 hurd-i386 kfreebsd-i386|c++)"GlobalError::Insert(GlobalError::MsgType, char const*, char*&)@Base" 0.8.0
- (arch=armel armhf|c++)"GlobalError::Insert(GlobalError::MsgType, char const*, std::__va_list&)@Base" 0.8.0
- (arch=alpha|c++)"GlobalError::Insert(GlobalError::MsgType, char const*, __va_list_tag&)@Base" 0.8.0
- (arch=amd64 kfreebsd-amd64 powerpc powerpcspe s390|c++)"GlobalError::Insert(GlobalError::MsgType, char const*, __va_list_tag (&) [1])@Base" 0.8.0
- (arch=hppa ia64 mipsel sparc sparc64|c++)"GlobalError::Insert(GlobalError::MsgType, char const*, void*&)@Base" 0.8.0
- (arch=sh4|c++)"GlobalError::Insert(GlobalError::MsgType, char const*, __builtin_va_list&)@Base" 0.8.0
- (arch=i386 hurd-i386 kfreebsd-i386|c++)"GlobalError::InsertErrno(GlobalError::MsgType, char const*, char const*, char*&)@Base" 0.8.0
- (arch=armel armhf|c++)"GlobalError::InsertErrno(GlobalError::MsgType, char const*, char const*, std::__va_list&)@Base" 0.8.0
- (arch=alpha|c++)"GlobalError::InsertErrno(GlobalError::MsgType, char const*, char const*, __va_list_tag&)@Base" 0.8.0
- (arch=amd64 kfreebsd-amd64 powerpc powerpcspe s390|c++)"GlobalError::InsertErrno(GlobalError::MsgType, char const*, char const*, __va_list_tag (&) [1])@Base" 0.8.0
- (arch=hppa ia64 mipsel sparc sparc64|c++)"GlobalError::InsertErrno(GlobalError::MsgType, char const*, char const*, void*&)@Base" 0.8.0
- (arch=sh4|c++)"GlobalError::InsertErrno(GlobalError::MsgType, char const*, char const*, __builtin_va_list&)@Base" 0.8.0
+ (c++|regex|optional=std)"^char\* std::[^ ]+<.+ >::_.+@Base$" 0.8.0
+ (c++|optional=inline)"FileFd::FileFd(std::basic_string<char, std::char_traits<char>, std::allocator<char> >, FileFd::OpenMode, unsigned long)@Base" 0.8.0
+ (c++|regex|optional=template)"^SPtrArray<[^ ]+>::~SPtrArray\(\)@Base$" 0.8.0
+ (c++|optional=template)"SPtrArray<unsigned char>::~SPtrArray()@Base" 0.8.0
+### gcc-4.6 specific
+ (c++|optional=template)"SPtrArray<pkgCache::Version*>::~SPtrArray()@Base" 0.8.0
+ (c++|regex|optional=std)"^std::basic_string<char, std::char_traits<char>, std::allocator<char> >::basic_string<char( const|)\*>\(.+\)@Base$" 0.8.0
+ (c++|regex|optional=std)"^std::vector<DiffInfo, .+@Base$" 0.8.0
+ (c++|regex|optional=std)"^std::vector<.+ >::(vector|push_back|erase|_[^ ]+)\(.+\)( const|)@Base$" 0.8.0
+ (c++|optional=strange)"pkgCache::VerIterator::VerIterator(pkgCache&, pkgCache::Version*)@Base" 0.8.0
+### architecture specific: va_list & size_t
+ (arch=i386 hurd-i386 kfreebsd-i386|c++|optional=private)"GlobalError::Insert(GlobalError::MsgType, char const*, char*&, unsigned int&)@Base" 0.8.11.4 1
+ (arch=armel armhf|c++|optional=private)"GlobalError::Insert(GlobalError::MsgType, char const*, std::__va_list&, unsigned int&)@Base" 0.8.11.4 1
+ (arch=alpha|c++|optional=private)"GlobalError::Insert(GlobalError::MsgType, char const*, __va_list_tag&, unsigned long&)@Base" 0.8.11.4 1
+ (arch=powerpc powerpcspe|c++|optional=private)"GlobalError::Insert(GlobalError::MsgType, char const*, __va_list_tag (&) [1], unsigned int&)@Base" 0.8.11.4 1
+ (arch=amd64 kfreebsd-amd64 s390|c++|optional=private)"GlobalError::Insert(GlobalError::MsgType, char const*, __va_list_tag (&) [1], unsigned long&)@Base" 0.8.11.4 1
+ (arch=hppa mipsel sparc|c++|optional=private)"GlobalError::Insert(GlobalError::MsgType, char const*, void*&, unsigned int&)@Base" 0.8.11.4 1
+ (arch=ia64 sparc64|c++|optional=private)"GlobalError::Insert(GlobalError::MsgType, char const*, void*&, unsigned long&)@Base" 0.8.11.4 1
+ (arch=sh4|c++|optional=private)"GlobalError::Insert(GlobalError::MsgType, char const*, __builtin_va_list&, unsigned int&)@Base" 0.8.11.4 1
+ (arch=i386 hurd-i386 kfreebsd-i386|c++|optional=private)"GlobalError::InsertErrno(GlobalError::MsgType, char const*, char const*, char*&, int, unsigned int&)@Base" 0.8.11.4 1
+ (arch=armel armhf|c++|optional=private)"GlobalError::InsertErrno(GlobalError::MsgType, char const*, char const*, std::__va_list&, int, unsigned int&)@Base" 0.8.11.4 1
+ (arch=alpha|c++|optional=private)"GlobalError::InsertErrno(GlobalError::MsgType, char const*, char const*, __va_list_tag&, int, unsigned long&)@Base" 0.8.11.4 1
+ (arch=powerpc powerpcspe|c++|optional=private)"GlobalError::InsertErrno(GlobalError::MsgType, char const*, char const*, __va_list_tag (&) [1], int, unsigned int&)@Base" 0.8.11.4 1
+ (arch=amd64 kfreebsd-amd64 s390|c++|optional=private)"GlobalError::InsertErrno(GlobalError::MsgType, char const*, char const*, __va_list_tag (&) [1], int, unsigned long&)@Base" 0.8.11.4 1
+ (arch=hppa mipsel sparc|c++|optional=private)"GlobalError::InsertErrno(GlobalError::MsgType, char const*, char const*, void*&, int, unsigned int&)@Base" 0.8.11.4 1
+ (arch=ia64 sparc64|c++|optional=private)"GlobalError::InsertErrno(GlobalError::MsgType, char const*, char const*, void*&, int, unsigned long&)@Base" 0.8.11.4 1
+ (arch=sh4|c++|optional=private)"GlobalError::InsertErrno(GlobalError::MsgType, char const*, char const*, __builtin_va_list&, int, unsigned int&)@Base" 0.8.11.4 1
 ### architecture specific: size_t
  (arch=i386 armel armhf hppa hurd-i386 kfreebsd-i386 mipsel powerpc powerpcspe sh4 sparc|c++)"_strtabexpand(char*, unsigned int)@Base" 0.8.0
  (arch=alpha amd64 ia64 kfreebsd-amd64 s390 sparc64|c++)"_strtabexpand(char*, unsigned long)@Base" 0.8.0
@@ -1263,7 +1269,6 @@ libapt-pkg.so.4.10 libapt-pkg4.10
  (c++|regex|optional=std)"^(bool|void) std::(operator|sort_heap|make_heap)[^ ]+<.+ >\(.+\)@Base$" 0.8.0
  (c++|regex|optional=std)"^std::reverse_iterator<.+ > std::__.+@Base$" 0.8.0
  (c++|regex|optional=std)"^std::basic_string<.+ >\(.+\)@Base$" 0.8.0
- (c++|regex|optional=std)"^char\* std::[^ ]+<.+ >::_.+@Base$" 0.8.0
  (c++|regex|optional=std)"^__gnu_cxx::__[^ ]+<.*@Base$" 0.8.0
  (c++|regex|optional=std)"^typeinfo name for std::iterator<.*>@Base$" 0.8.0
  (c++|regex|optional=std)"^typeinfo for std::iterator<.*>@Base$" 0.8.0
@@ -1301,3 +1306,15 @@ libapt-pkg.so.4.10 libapt-pkg4.10
  (c++)"typeinfo name for pkgAcqMetaClearSig@Base" 0.8.11 1
  (c++)"vtable for pkgAcqSubIndex@Base" 0.8.11 1
  (c++)"vtable for pkgAcqMetaClearSig@Base" 0.8.11 1
+ (c++)"FindMountPointForDevice(char const*)@Base" 0.8.12 1
+ (c++)"pkgUdevCdromDevices::ScanForRemovable(bool)@Base" 0.8.12 1
+ (c++)"APT::Configuration::Compressor::Compressor(char const*, char const*, char const*, char const*, char const*, unsigned short)@Base" 0.8.12 1
+ (c++)"APT::Configuration::Compressor::~Compressor()@Base" 0.8.12 1
+ (c++)"APT::Configuration::getCompressors(bool)@Base" 0.8.12 1
+ (c++)"APT::Configuration::getCompressorExtensions()@Base" 0.8.12 1
+ (c++)"APT::Configuration::setDefaultConfigurationForCompressors()@Base" 0.8.12 1
+ (c++)"pkgDepCache::SetCandidateVersion(pkgCache::VerIterator, bool const&)@Base" 0.8.12 1
+ (c++)"pkgAcqMetaClearSig::Custom600Headers()@Base" 0.8.13 1
+ (c++|optional=private)"debListParser::NewProvidesAllArch(pkgCache::VerIterator&, std::basic_string<char, std::char_traits<char>, std::allocator<char> > const&, std::basic_string<char, std::char_traits<char>, std::allocator<char> > const&)@Base" 0.8.13.2 1
+ (c++|optional=private)"PrintMode(char)@Base" 0.8.13.2 1
+ (c++)"pkgDepCache::IsModeChangeOk(pkgDepCache::ModeList, pkgCache::PkgIterator const&, unsigned long, bool)@Base" 0.8.13.2 1
index e669077fed84726e8603ba63eacd450df3f4fd37..16827ff8d765f2598abfa03beca84518bfff1f0c 100644 (file)
@@ -1,4 +1,133 @@
-apt (0.8.13.1) UNRELEASED; urgency=low
+apt (0.8.15) UNRELEASED; urgency=low
+
+  [ David Kalnischkies ]
+  * Implement EDSP in libapt-pkg so that all front-ends which
+    use the internal resolver can now be used also with external
+    ones as the usage is hidden in between the old API
+  * provide two edsp solvers in apt-utils:
+    - 'dump' to quickly output a complete scenario and
+    - 'apt' to use the internal as an external resolver
+
+ -- David Kalnischkies <kalnischkies@gmail.com>  Tue, 17 May 2011 17:19:48 +0200
+
+apt (0.8.14.2) UNRELEASED; urgency=low
+
+  [ Julian Andres Klode ]
+  * apt-pkg/depcache.cc:
+    - Really release action groups only once (Closes: #622744)
+    - Make purge work again for config-files (LP: #244598) (Closes: #150831)
+  * debian/apt.cron.daily:
+    - Check power after wait, patch by manuel-soto (LP: #705269)
+  * debian/control:
+    - Move ${shlibs:Depends} to Pre-Depends, as we do not want APT
+      unpacked if a library is too old and thus break upgrades
+  * doc/apt-key.8.xml:
+    - Document apt-key net-update (LP: #192810)
+
+  [ Christian Perrier ]
+  * Galician translation update (Miguel Anxo Bouzada). Closes: #626505
+
+  [ David Kalnischkies ]
+  * fix a bunch of cppcheck warnings/errors based on a patch by
+    Niels Thykier, thanks! (Closes: #622805)
+  * apt-pkg/depcache.cc:
+    - really include 'rc' packages in the delete count by fixing a
+      typo which exists since 1999 in the source… (LP: #761175)
+    - if critical or-group can't be satisfied, exit directly.
+  * apt-pkg/acquire-method.cc:
+    - write directly to stdout instead of creating the message in
+      memory first before writing to avoid hitting limits
+    - fix order of CurrentURI and UsedMirror in Status() and Log()
+  * apt-pkg/orderlist.cc:
+    - let VisitRProvides report if the calls were successful
+  * apt-pkg/deb/dpkgpm.cc:
+    - replace obsolete usleep with nanosleep
+  * debian/apt{,-utils}.symbols:
+    - update both experimental symbol-files to reflect 0.8.14 state
+  * debian/rules:
+    - remove unused embedded jquery by doxygen from libapt-pkg-doc
+  * cmdline/apt-mark.cc:
+    - reimplement apt-mark in c++
+    - provide a 'showmanual' command (Closes: #582791)
+    - provide a 'dpkg --set-selections' wrapper to set/release holds
+  * cmdline/apt-get.cc:
+    - deprecate mostly undocumented 'markauto' in favor of 'apt-mark'
+  * cmdline/apt-cache.cc:
+    - deprecate mostly undocumented 'showauto' in favor of 'apt-mark'
+  * apt-pkg/pkgcache.cc:
+    - really ignore :arch in FindPkg() in non-multiarch environment
+  * doc/po/de.po:
+    - undo the translation of the command 'dump' in manpage of apt-config
+      as report by Burghard Grossmann on debian-l10n-german, thanks!
+  * apt-pkg/deb/debmetaindex.cc:
+    - do not download TranslationIndex if no Translation-* will be
+      downloaded later on anyway (Closes: #624218)
+  * test/versions.lst:
+    - disable obscure version number tests with versions dpkg doesn't
+      allow any more as they don't start with a number
+  * apt-pkg/acquire-worker.cc:
+    - print filename in the unmatching size warning (Closes: #623137)
+  * apt-pkg/acquire-item.cc:
+    - apply fix for poorly worded 'locate file' error message from
+      Ben Finney, thanks! (Closes: #623171)
+  * methods/http.cc:
+    - add config option to ignore a closed stdin to be able to easily
+      use the method as a simple standalone downloader
+    - Location header in redirects should be absolute URI, but some
+      servers just send an absolute path so still deal with it properly
+    - dequote URL taken from Location in redirects as we will otherwise
+      quote an already quoted string in the request later (Closes: #602412)
+  * apt-pkg/contrib/netrc.cc:
+    - replace non-posix gnu-extension strdupa with strdup
+  * apt-pkg/packagemanager.cc:
+    - ensure for Multi-Arch:same packages that they are unpacked in
+      lock step even in immediate configuration (Closes: #618288)
+
+ -- Michael Vogt <mvo@debian.org>  Mon, 16 May 2011 14:57:52 +0200
+
+apt (0.8.14.1) unstable; urgency=low
+
+  * apt-pkg/acquire-item.cc:
+    - Only try to rename existing Release files (Closes: #622912)
+
+ -- Julian Andres Klode <jak@debian.org>  Sat, 16 Apr 2011 14:36:10 +0200
+
+apt (0.8.14) unstable; urgency=low
+
+  [ Julian Andres Klode ]
+  * apt-pkg/indexcopy.cc:
+    - Use RealFileExists() instead of FileExists(), allows amongst other
+      things a directory named Sources to exist on a CD-ROM (LP: #750694).
+  * apt-pkg/acquire-item.cc:
+    - Use Release files even if they cannot be verified (LP: #704595)
+  * cmdline/apt-get.cc:
+    - Do not install recommends for build-dep (Closes: #454479) (LP: #245273)
+  * apt-pkg/deb/deblistparser.cc:
+    - Handle no space before "[" in build-dependencies (LP: #72344)
+  * apt-pkg/policy.cc:
+    - Allow pinning by glob() expressions, and regular expressions
+      surrounded by slashes (the "/" character) (LP: #399474)
+      (Closes: #121132)
+  * debian/control:
+    - Set Standards-Version to 3.9.2
+  
+  [ Michael Vogt ]
+  * mirror method:
+    - do not crash if the mirror file fails to download
+  * apt-pkg/aptconfiguration.cc:
+    - fix comparing for a empty string
+  * debian/apt.cron.daily:
+    - run unattended-upgrades even if there was a error during
+      the apt-get update (LP: #676295)
+
+  [ David Kalnischkies ]
+  * apt-pkg/pkgcache.cc:
+    - use the native Architecture stored in the cache header instead of
+      loading it from configuration as suggested by Julian Andres Klode
+
+ -- Julian Andres Klode <jak@debian.org>  Fri, 15 Apr 2011 14:28:15 +0200
+
+apt (0.8.13.2) unstable; urgency=low
 
   [ David Kalnischkies ]
   * apt-pkg/deb/dpkgpm.cc:
@@ -32,7 +161,14 @@ apt (0.8.13.1) UNRELEASED; urgency=low
   * apt-pkg/deb/deblistparser.cc:
     - create foo:any provides for all architectures for an allowed package
 
- -- David Kalnischkies <kalnischkies@gmail.com>  Tue, 29 Mar 2011 13:12:45 +0200
+ -- Michael Vogt <mvo@debian.org>  Tue, 05 Apr 2011 09:40:28 +0200
+
+apt (0.8.13.1) unstable; urgency=low
+
+  * apt-pkg/acquire-item.cc: Use stat buffer if stat was
+    successful, not if it failed (Closes: #620546)
+
+ -- Julian Andres Klode <jak@debian.org>  Sat, 02 Apr 2011 20:55:35 +0200
 
 apt (0.8.13) unstable; urgency=low
 
index ba0901538f095726f913de9cb6548feff3e58fa0..6d0f16b7096d209c1d2ce04d5f97657374370086 100644 (file)
@@ -5,7 +5,7 @@ Maintainer: APT Development Team <deity@lists.debian.org>
 Uploaders: Michael Vogt <mvo@debian.org>, Otavio Salvador <otavio@debian.org>,
  Christian Perrier <bubulle@debian.org>, Daniel Burrows <dburrows@debian.org>,
  Julian Andres Klode <jak@debian.org>
-Standards-Version: 3.9.0
+Standards-Version: 3.9.2
 Build-Depends: dpkg-dev (>= 1.15.8), debhelper (>= 7.2.3~), libdb-dev, gettext (>= 0.12), libcurl4-gnutls-dev (>= 7.19.0), zlib1g-dev | libz-dev, debiandoc-sgml, xsltproc, docbook-xsl, docbook-xml, po4a (>= 0.34-2), autotools-dev, autoconf, automake, doxygen
 Build-Conflicts: autoconf2.13, automake1.4
 Vcs-Bzr: http://bzr.debian.org/apt/debian-sid/
@@ -13,7 +13,8 @@ Vcs-Browser: http://bzr.debian.org/loggerhead/apt/debian-sid/
 
 Package: apt
 Architecture: any
-Depends: ${shlibs:Depends}, debian-archive-keyring, ${misc:Depends}, gnupg
+Pre-Depends: ${shlibs:Depends}
+Depends: debian-archive-keyring, ${misc:Depends}, gnupg
 Replaces: manpages-pl (<< 20060617-3~)
 Provides: ${libapt-pkg:provides}
 Conflicts: python-apt (<< 0.7.93.2~)
index c83796e03f327f53082ca18a30ca8a8de72f7cb6..6c58d82bb191d394766502c9b54e7313a0ab19e3 100755 (executable)
@@ -120,6 +120,9 @@ libapt-pkg-doc: build-doc
 #
 # libapt-pkg-doc install
 #
+       # remove doxygen's embedded jquery as we don't use it anyway (#622147)
+       rm -f $(BLD)/doc/doxygen/html/jquery.js
+
        dh_installdocs -p$@ $(BLD)/docs/design* \
                            $(BLD)/docs/dpkg-tech* \
                            $(BLD)/docs/files* \
index f1cc3ac02a1138334b0d223e01c3c2fea73771c5..9bfab84b6323f19d69e0640c867af8c29c486d6f 100644 (file)
 
      </listitem>
      </varlistentry>
+     
+     <varlistentry><term>net-update</term>
+     <listitem>
+     <para>
+
+       Update the local keyring with the keys of a key server
+       and removes from the keyring the archive keys which are no
+       longer valid. This requires an installed wget and an APT
+       build configured to have a server to fetch from. APT in
+       Debian does not support this command, but Ubuntu's APT
+       does.
+
+     </para>
+
+     </listitem>
+     </varlistentry>
    </variablelist>
 </refsect1>
 
index ec50d6f765400d1824b667138f15408be5bb8daf..01c8665ddc646b531baf9b6faefd53796625f8c1 100644 (file)
@@ -18,7 +18,7 @@
    &apt-email;
    &apt-product;
    <!-- The last update date -->
-   <date>9 August 2009</date>
+   <date>21 April 2011</date>
  </refentryinfo>
  
  <refmeta>
        <group choice="plain">
                <arg choice="plain">
                        <group choice="req">
-                               <arg choice="plain">markauto</arg>
-                               <arg choice="plain">unmarkauto</arg>
+                               <arg choice="plain">auto</arg>
+                               <arg choice="plain">manual</arg>
+                               <arg choice="plain">showauto</arg>
+                               <arg choice="plain">showmanual</arg>
                        </group>
                        <arg choice="plain" rep="repeat"><replaceable>package</replaceable></arg>
                </arg>
-               <arg choice="plain">showauto</arg>
        </group>
    </cmdsynopsis>
  </refsynopsisdiv>
      <command>apt-get</command> or <command>aptitude</command>.
    </para>
      <variablelist>
-       <varlistentry><term>markauto</term>
-        <listitem><para><literal>markauto</literal> is used to mark a
+       <varlistentry><term>auto</term>
+        <listitem><para><literal>auto</literal> is used to mark a
      package as being automatically installed, which will cause the
      package to be removed when no more manually installed packages
      depend on this package.
        </para></listitem>
        </varlistentry>
 
-       <varlistentry><term>unmarkauto</term>
-        <listitem><para><literal>unmarkauto</literal> is used to mark a
+       <varlistentry><term>manual</term>
+        <listitem><para><literal>manual</literal> is used to mark a
      package as being manually installed, which will prevent the
      package from being automatically removed if no other packages
      depend on it.
        </para></listitem>
        </varlistentry>
 
+       <varlistentry><term>hold</term>
+        <listitem><para><literal>hold</literal> is used to mark a
+       package as hold back, which will prevent the package from being
+       automatically installed, upgraded or removed.
+       The command is only a wrapper around <command>dpkg --set-selections</command>
+       and the state is therefore maintained by &dpkg; and not effected
+       by the <option>--filename</option> option.
+       </para></listitem>
+       </varlistentry>
+
+       <varlistentry><term>unhold</term>
+        <listitem><para><literal>unhold</literal> is used to cancel a
+       previously set hold on a package to allow all actions again.
+       </para></listitem>
+       </varlistentry>
+
        <varlistentry><term>showauto</term>
         <listitem><para><literal>showauto</literal> is used to print a
      list of automatically installed packages with each package on a new line.
+     All automatically installed packages will be listed if no package is given.
+     If packages are given only those which are automatically installed will be shown.
+       </para></listitem>
+       </varlistentry>
+
+       <varlistentry><term>showmanual</term>
+        <listitem><para><literal>showmanual</literal> can be used in
+     the same way as <literal>showauto</literal> except that it will print
+     a list of manually installed packages instead.
        </para></listitem>
        </varlistentry>
+
+       <varlistentry><term>showhold</term>
+        <listitem><para><literal>showhold</literal> is used to print a list
+     of packages on hold in the same way as for the other show commands.
+       </para></listitem>
+       </varlistentry>
+
+
      </variablelist>
  </refsect1>
  
      is <filename>extended_status</filename> in the directory defined
      by the Configuration Item: <literal>Dir::State</literal>.</para></listitem>
      </varlistentry>
-   
-     <varlistentry><term><option>-h</option></term>
-     <term><option>--help</option></term>
-     <listitem><para>Show a short usage summary.
-     </para>
-     </listitem>
-     </varlistentry>
-     
-     <varlistentry>
-      <term><option>-v</option></term>
-      <term><option>--version</option></term>
-      <listitem><para>Show the program version.
-     </para>
-     </listitem>
-     </varlistentry>
 
-     
+     &apt-commonoptions;
    </variablelist>
  </refsect1>
 
index 219da7cd1ee2bc8289682655b8d4eb99e8a35b30..55504f3e5e8a9794e99c7d0fb900dd41fabf7411 100644 (file)
@@ -259,6 +259,49 @@ Pin-Priority: 500
 
 </refsect2>
 
+<refsect2><title>Regular expressions and glob() syntax</title>
+<para>
+APT also supports pinning by glob() expressions and regular
+expressions surrounded by /. For example, the following
+example assigns the priority 500 to all packages from
+experimental where the name starts with gnome (as a glob()-like
+expression or contains the word kde (as a POSIX extended regular
+expression surrounded by slashes).
+</para>
+
+<programlisting>
+Package: gnome* /kde/
+Pin: release n=experimental
+Pin-Priority: 500
+</programlisting>
+
+<para>
+The rule for those expressions is that they can occur anywhere
+where a string can occur. Those, the following pin assigns the
+priority 990 to all packages from a release starting with karmic.
+</para>
+
+<programlisting>
+Package: *
+Pin: release n=karmic*
+Pin-Priority: 990
+</programlisting>
+
+If a regular expression occurs in a <literal>Package</literal> field,
+the behavior is the same as if this regular expression were replaced
+with a list of all package names it matches. It is undecided whether
+this will change in the future, thus you should always list wild-card
+pins first, so later specific pins override it.
+
+The pattern "<literal>*</literal>" in a Package field is not considered
+a glob() expression in itself.
+
+</refsect2>
+
+
+
+
+
 <refsect2>
 <title>How APT Interprets Priorities</title>
 
index 75595df077e0b767bd81b171a24ca00437a347a7..891e699646df3e49966e6b6e6e4ba959b13a52b6 100644 (file)
@@ -1912,7 +1912,7 @@ msgstr ""
 "<command>apt-config</command><arg><option>-hv</option></arg><arg><option>-"
 "o=<replaceable>Konfigurationszeichenkette</replaceable></option></"
 "arg><arg><option>-c=<replaceable>Datei</replaceable></option></arg><group "
-"choice=\"req\"> <arg>shell</arg> <arg>Abbild</arg> </group>"
+"choice=\"req\"> <arg>shell</arg> <arg>dump</arg> </group>"
 
 #. type: Content of: <refentry><refsect1><para>
 #: apt-config.8.xml:51
index dfc1619e3c4994c9dda537c2728c6722e9b8fd82..13f9cbe0613a01d4c102961efc6a15248c6343e8 100644 (file)
@@ -778,9 +778,10 @@ bool HttpMethod::Go(bool ToFile,ServerState *Srv)
    
    if (Srv->In.WriteSpace() == true && ToFile == true && FileFD != -1)
       FD_SET(FileFD,&wfds);
-   
+
    // Add stdin
-   FD_SET(STDIN_FILENO,&rfds);
+   if (_config->FindB("Acquire::http::DependOnSTDIN", true) == true)
+      FD_SET(STDIN_FILENO,&rfds);
          
    // Figure out the max fd
    int MaxFd = FileFD;
@@ -947,9 +948,25 @@ HttpMethod::DealWithHeaders(FetchResult &Res,ServerState *Srv)
            && Srv->Result != 304    // Not Modified
            && Srv->Result != 306))  // (Not part of HTTP/1.1, reserved)
    {
-      if (!Srv->Location.empty())
+      if (Srv->Location.empty() == true);
+      else if (Srv->Location[0] == '/' && Queue->Uri.empty() == false)
       {
-         NextURI = Srv->Location;
+        URI Uri = Queue->Uri;
+        if (Uri.Host.empty() == false)
+        {
+           if (Uri.Port != 0)
+              strprintf(NextURI, "http://%s:%u", Uri.Host.c_str(), Uri.Port);
+           else
+              NextURI = "http://" + Uri.Host;
+        }
+        else
+           NextURI.clear();
+        NextURI.append(DeQuoteString(Srv->Location));
+        return TRY_AGAIN_OR_REDIRECT;
+      }
+      else
+      {
+         NextURI = DeQuoteString(Srv->Location);
          return TRY_AGAIN_OR_REDIRECT;
       }
       /* else pass through for error message */
@@ -1113,7 +1130,13 @@ int HttpMethod::Loop()
          do a WaitFd above.. Otherwise the FD is closed. */
       int Result = Run(true);
       if (Result != -1 && (Result != 0 || Queue == 0))
-        return 100;
+      {
+        if(FailReason.empty() == false ||
+           _config->FindB("Acquire::http::DependOnSTDIN", true) == true)
+           return 100;
+        else
+           return 0;
+      }
 
       if (Queue == 0)
         continue;
index 0bc019e771af46fd9997f52582692ab26d6c5b72..aa96c6810d9824c36893a59cd9fda7d910e56f29 100644 (file)
@@ -182,7 +182,7 @@ class HttpMethod : public pkgAcqMethod
    string AutoDetectProxyCmd;
 
    public:
-   friend class ServerState;
+   friend struct ServerState;
 
    FileFd *File;
    ServerState *Server;
index e499b054b15edb0e36a62bf08417a6867e6aeba4..2cf5c9ce1110a9d7f9b259cf9913451b89126d94 100644 (file)
@@ -141,8 +141,10 @@ bool MirrorMethod::DownloadMirrorFile(string mirror_uri_str)
    pkgAcquire Fetcher;
    new pkgAcqFile(&Fetcher, fetch, "", 0, "", "", "", MirrorFile);
    bool res = (Fetcher.Run() == pkgAcquire::Continue);
-   if(res)
+   if(res) {
       DownloadedMirrorFile = true;
+      chmod(MirrorFile.c_str(), 0644);
+   }
    Fetcher.Shutdown();
 
    if(Debug)
@@ -158,6 +160,9 @@ bool MirrorMethod::RandomizeMirrorFile(string mirror_file)
    vector<string> content;
    string line;
 
+   if (!FileExists(mirror_file))
+      return false;
+
    // read 
    ifstream in(mirror_file.c_str());
    while ( !in.eof() ) {
@@ -251,6 +256,13 @@ bool MirrorMethod::InitMirrors()
       return _error->Error(_("No mirror file '%s' found "), MirrorFile.c_str());
    }
 
+   if (access(MirrorFile.c_str(), R_OK) != 0)
+   {
+      // FIXME: fallback to a default mirror here instead 
+      //        and provide a config option to define that default
+      return _error->Error(_("Can not read mirror file '%s'"), MirrorFile.c_str());
+   }  
+
    // FIXME: make the mirror selection more clever, do not 
    //        just use the first one!
    // BUT: we can not make this random, the mirror has to be
@@ -354,8 +366,8 @@ bool MirrorMethod::Fetch(FetchItem *Itm)
    if(Itm->IndexFile && !DownloadedMirrorFile)
    {
       Clean(_config->FindDir("Dir::State::mirrors"));
-      DownloadMirrorFile(Itm->Uri);
-      RandomizeMirrorFile(MirrorFile);
+      if (DownloadMirrorFile(Itm->Uri))
+         RandomizeMirrorFile(MirrorFile);
    }
 
    if(AllMirrors.empty()) {
index 4634bf64c3a5a3efcef098fe949892e6b2b780db..73ed82195db229fe1f836a6e711d8990b5e3a464 100644 (file)
@@ -2719,8 +2719,8 @@ msgstr ""
 #: apt-pkg/acquire-item.cc:1424
 #, c-format
 msgid ""
-"I wasn't able to locate file for the %s package. This might mean you need to "
-"manually fix this package."
+"I wasn't able to locate a file for the %s package. This might mean you need "
+"to manually fix this package."
 msgstr ""
 
 #: apt-pkg/acquire-item.cc:1479
index d19ba61fb7a21baf2f4df29187b49a31f89f4da7..6b2f1f134de689f45eafce7cf30b7b0c2559d40b 100644 (file)
--- a/po/ar.po
+++ b/po/ar.po
@@ -2792,8 +2792,8 @@ msgstr ""
 #: apt-pkg/acquire-item.cc:1631
 #, c-format
 msgid ""
-"I wasn't able to locate file for the %s package. This might mean you need to "
-"manually fix this package."
+"I wasn't able to locate a file for the %s package. This might mean you need "
+"to manually fix this package."
 msgstr ""
 
 #: apt-pkg/acquire-item.cc:1686
index a7e5a24390db62944deef5e8b7992833f4a50ce7..593fc6e391ae4176afeeee942f5f038222bb5c97 100644 (file)
--- a/po/ast.po
+++ b/po/ast.po
@@ -3013,8 +3013,8 @@ msgstr ""
 #: apt-pkg/acquire-item.cc:1631
 #, c-format
 msgid ""
-"I wasn't able to locate file for the %s package. This might mean you need to "
-"manually fix this package."
+"I wasn't able to locate a file for the %s package. This might mean you need "
+"to manually fix this package."
 msgstr ""
 "Nun pudo alcontrase un ficheru pal paquete %s. Esto puede significar que "
 "necesites iguar manualmente esti paquete"
index 69628a4d67fe465fb84ddcd3d5f6476659de82e3..6946e76d246bc85eeb7b6011f6f906bae8a294ff 100644 (file)
--- a/po/bg.po
+++ b/po/bg.po
@@ -3051,8 +3051,8 @@ msgstr ""
 #: apt-pkg/acquire-item.cc:1631
 #, c-format
 msgid ""
-"I wasn't able to locate file for the %s package. This might mean you need to "
-"manually fix this package."
+"I wasn't able to locate a file for the %s package. This might mean you need "
+"to manually fix this package."
 msgstr ""
 "Неуспех при намирането на файл за пакет %s. Това може да означава, че трябва "
 "ръчно да оправите този пакет."
index 28011b17bf6df720222dc1de1c01d3fe0d56256a..7736af3d0ccd1bbdd912a0eb1ba1e99a30ae5e31 100644 (file)
--- a/po/bs.po
+++ b/po/bs.po
@@ -2789,8 +2789,8 @@ msgstr ""
 #: apt-pkg/acquire-item.cc:1631
 #, c-format
 msgid ""
-"I wasn't able to locate file for the %s package. This might mean you need to "
-"manually fix this package."
+"I wasn't able to locate a file for the %s package. This might mean you need "
+"to manually fix this package."
 msgstr ""
 
 #: apt-pkg/acquire-item.cc:1686
index 4692b03c9c122d8a1b30fdd4d423db496283762f..990f85555305031938b4e8aaf35eea12ba1e527b 100644 (file)
--- a/po/ca.po
+++ b/po/ca.po
@@ -3048,8 +3048,8 @@ msgstr ""
 #: apt-pkg/acquire-item.cc:1631
 #, c-format
 msgid ""
-"I wasn't able to locate file for the %s package. This might mean you need to "
-"manually fix this package."
+"I wasn't able to locate a file for the %s package. This might mean you need "
+"to manually fix this package."
 msgstr ""
 "No s'ha trobat un fitxer pel paquet %s. Això podria significar que haureu "
 "d'arreglar aquest paquet manualment."
index a25e28b2d07806df01b8e4fc6956b8a1338663ba..a3285a49048e48e06a2a7da5d1b4b1b45f21c254 100644 (file)
--- a/po/cs.po
+++ b/po/cs.po
@@ -2992,8 +2992,8 @@ msgstr ""
 #: apt-pkg/acquire-item.cc:1631
 #, c-format
 msgid ""
-"I wasn't able to locate file for the %s package. This might mean you need to "
-"manually fix this package."
+"I wasn't able to locate a file for the %s package. This might mean you need "
+"to manually fix this package."
 msgstr ""
 "Nebyl jsem schopen nalézt soubor s balíkem %s. Asi budete muset tento balík "
 "opravit ručně."
index cea53f5670fa88998f43b2b3aaa8fd4f8f273d99..4df1dc35fedc313409d6a0a6b851502287089e96 100644 (file)
--- a/po/cy.po
+++ b/po/cy.po
@@ -3080,8 +3080,8 @@ msgstr ""
 #: apt-pkg/acquire-item.cc:1631
 #, c-format
 msgid ""
-"I wasn't able to locate file for the %s package. This might mean you need to "
-"manually fix this package."
+"I wasn't able to locate a file for the %s package. This might mean you need "
+"to manually fix this package."
 msgstr ""
 "Methais i leoli ffeila r gyfer y pecyn %s. Fa all hyn olygu bod rhaid i chi "
 "drwsio'r pecyn hyn a law."
index a15063f2d837851951673b74efcd2093e6af4731..b26b10a941fe0602c28561346390c76b654dbe3b 100644 (file)
--- a/po/da.po
+++ b/po/da.po
@@ -3014,8 +3014,8 @@ msgstr ""
 #: apt-pkg/acquire-item.cc:1631
 #, c-format
 msgid ""
-"I wasn't able to locate file for the %s package. This might mean you need to "
-"manually fix this package."
+"I wasn't able to locate a file for the %s package. This might mean you need "
+"to manually fix this package."
 msgstr ""
 "Jeg kunne ikke lokalisere filen til %s-pakken. Det betyder muligvis at du er "
 "nødt til manuelt at reparere denne pakke."
index 267715718b9763188ca5942bd5745524f62f2a63..8732f2900cfb3e6850ae72226cbae7cecaf735e3 100644 (file)
--- a/po/de.po
+++ b/po/de.po
@@ -3089,8 +3089,8 @@ msgstr ""
 #: apt-pkg/acquire-item.cc:1631
 #, c-format
 msgid ""
-"I wasn't able to locate file for the %s package. This might mean you need to "
-"manually fix this package."
+"I wasn't able to locate a file for the %s package. This might mean you need "
+"to manually fix this package."
 msgstr ""
 "Es konnte keine Datei für Paket %s gefunden werden. Das könnte heißen, dass "
 "Sie dieses Paket von Hand korrigieren müssen."
index 0fd423cc0285d4faaf5166a7fc9a2e4f7090d06c..f569e0fbefe514f65a215ce285233a9a57f06f38 100644 (file)
--- a/po/dz.po
+++ b/po/dz.po
@@ -3001,8 +3001,8 @@ msgstr ""
 #: apt-pkg/acquire-item.cc:1631
 #, c-format
 msgid ""
-"I wasn't able to locate file for the %s package. This might mean you need to "
-"manually fix this package."
+"I wasn't able to locate a file for the %s package. This might mean you need "
+"to manually fix this package."
 msgstr ""
 " %s་ཐུམ་སྒྲིལ་གི་དོན་ལུ་ང་་གི་ཡིག་སྣོད་ཅིག་ག་ཡོད་འཚོལ་མི་འཐོབ་པས། འདི་འབདཝ་ལས་ཁྱོད་ཀྱི་ལག་ཐོག་ལས་ "
 "འ་ནི་ཐུམ་སྒྲིལ་འདི་གི་དཀའ་ངལ་སེལ་དགོཔ་འདུག "
index 2192fd2874e38935d7e6be59d22d6977b7a8a4dd..8a40c5cf7abb3c9156780f60d49397bcc1db925c 100644 (file)
--- a/po/el.po
+++ b/po/el.po
@@ -3035,8 +3035,8 @@ msgstr ""
 #: apt-pkg/acquire-item.cc:1631
 #, c-format
 msgid ""
-"I wasn't able to locate file for the %s package. This might mean you need to "
-"manually fix this package."
+"I wasn't able to locate a file for the %s package. This might mean you need "
+"to manually fix this package."
 msgstr ""
 "Αδύνατος ο εντοπισμός ενός αρχείου για το πακέτο %s. Αυτό ίσως σημαίνει ότι "
 "χρειάζεται να διορθώσετε χειροκίνητα το πακέτο."
index dae1712c448cfe0acf6057472e5e99f77099c76c..595040a52025d25da44a58e81f8ae4e8a97190d8 100644 (file)
--- a/po/es.po
+++ b/po/es.po
@@ -3116,8 +3116,8 @@ msgstr ""
 #: apt-pkg/acquire-item.cc:1631
 #, c-format
 msgid ""
-"I wasn't able to locate file for the %s package. This might mean you need to "
-"manually fix this package."
+"I wasn't able to locate a file for the %s package. This might mean you need "
+"to manually fix this package."
 msgstr ""
 "No se pudo localizar un archivo para el paquete %s. Esto puede significar "
 "que necesita arreglar manualmente este paquete."
index 825e7de6ae1549dba40c57bf26da35f717bd932f..7e8c5838fa774624baf79de2b8cd57b6316bb693 100644 (file)
--- a/po/eu.po
+++ b/po/eu.po
@@ -2996,8 +2996,8 @@ msgstr ""
 #: apt-pkg/acquire-item.cc:1631
 #, c-format
 msgid ""
-"I wasn't able to locate file for the %s package. This might mean you need to "
-"manually fix this package."
+"I wasn't able to locate a file for the %s package. This might mean you need "
+"to manually fix this package."
 msgstr ""
 "Ezin izan dut %s paketeko fitxategi bat lokalizatu. Beharbada eskuz konpondu "
 "beharko duzu paketea."
index faf9885c80090957e8635e615931f7fc4e79b9b9..ef085b1719818e2b8aa6de383ab7dad0b5bd5d5e 100644 (file)
--- a/po/fi.po
+++ b/po/fi.po
@@ -2988,8 +2988,8 @@ msgstr ""
 #: apt-pkg/acquire-item.cc:1631
 #, c-format
 msgid ""
-"I wasn't able to locate file for the %s package. This might mean you need to "
-"manually fix this package."
+"I wasn't able to locate a file for the %s package. This might mean you need "
+"to manually fix this package."
 msgstr ""
 "Pakettia %s vastaavaa tiedostoa ei löytynyt. Voit ehkä joutua korjaamaan "
 "tämän paketin itse."
index f3fe11e56fd47bd3f1600ba8b5091b70cdad5021..9a67d34489e81b24f5aa0f16261003f7c41bc499 100644 (file)
--- a/po/fr.po
+++ b/po/fr.po
@@ -3107,8 +3107,8 @@ msgstr ""
 #: apt-pkg/acquire-item.cc:1631
 #, c-format
 msgid ""
-"I wasn't able to locate file for the %s package. This might mean you need to "
-"manually fix this package."
+"I wasn't able to locate a file for the %s package. This might mean you need "
+"to manually fix this package."
 msgstr ""
 "Impossible de localiser un fichier du paquet %s. Cela signifie que vous "
 "devrez corriger ce paquet vous-même."
index 7d23e7a11d220a2e9279ffe931d454999228eec4..7de0e5d8cec8b83ed0bfe2cad63a77262a9d5a74 100644 (file)
--- a/po/gl.po
+++ b/po/gl.po
@@ -4,13 +4,15 @@
 #
 # Jacobo Tarrío <jtarrio@debian.org>, 2005, 2007, 2008.
 # mvillarino <mvillarino@users.sourceforge.net>, 2008.
+# Miguel Anxo Bouzada <mbouzada@gmail.com>, 2011.
+#
 msgid ""
 msgstr ""
 "Project-Id-Version: apt_po_gl\n"
 "Report-Msgid-Bugs-To: \n"
-"POT-Creation-Date: 2011-02-15 06:09+0100\n"
-"PO-Revision-Date: 2008-12-17 22:44+0100\n"
-"Last-Translator: mvillarino <mvillarino@users.sourceforge.net>\n"
+"POT-Creation-Date: 2011-01-12 17:42+0100\n"
+"PO-Revision-Date: 2011-05-12 15:28+0100\n"
+"Last-Translator: Miguel Anxo Bouzada <mbouzada@gmail.com>\n"
 "Language-Team: galician <proxecto@trasno.net>\n"
 "Language: \n"
 "MIME-Version: 1.0\n"
@@ -18,6 +20,7 @@ msgstr ""
 "Content-Transfer-Encoding: 8bit\n"
 "X-Generator: KBabel 1.11.4\n"
 "Plural-Forms: nplurals=2; plural=n != 1;\n"
+"X-Poedit-Language: Galician\n"
 
 #: cmdline/apt-cache.cc:156
 #, c-format
@@ -29,9 +32,8 @@ msgid "Total package names: "
 msgstr "Número total de nomes de paquetes : "
 
 #: cmdline/apt-cache.cc:286
-#, fuzzy
 msgid "Total package structures: "
-msgstr "Número total de nomes de paquetes : "
+msgstr "Estruturas de paquetes totais: "
 
 #: cmdline/apt-cache.cc:326
 msgid "  Normal packages: "
@@ -75,7 +77,7 @@ msgstr "Número total de relacións descrición/ficheiro: "
 
 #: cmdline/apt-cache.cc:343
 msgid "Total Provides mappings: "
-msgstr "Número total de mapas de Provides: "
+msgstr "Número total de asignacións provistas: "
 
 #: cmdline/apt-cache.cc:355
 msgid "Total globbed strings: "
@@ -93,84 +95,120 @@ msgstr "Espazo de reserva total: "
 msgid "Total space accounted for: "
 msgstr "Espazo total contabilizado: "
 
-#: cmdline/apt-cache.cc:513 cmdline/apt-cache.cc:1142
+#: cmdline/apt-cache.cc:513 cmdline/apt-cache.cc:1194
 #, c-format
 msgid "Package file %s is out of sync."
 msgstr "O ficheiro de paquete %s está sen sincronizar."
 
-#: cmdline/apt-cache.cc:591 cmdline/apt-cache.cc:1377
-#: cmdline/apt-cache.cc:1379 cmdline/apt-cache.cc:1456
+#: cmdline/apt-cache.cc:1273
+msgid "You must give at least one search pattern"
+msgstr "Debe fornecer cando menos un patrón de busca"
+
+#: cmdline/apt-cache.cc:1429 cmdline/apt-cache.cc:1431
+#: cmdline/apt-cache.cc:1508
 msgid "No packages found"
 msgstr "Non se atopou ningún paquete"
 
-#: cmdline/apt-cache.cc:1221
-#, fuzzy
-msgid "You must give at least one search pattern"
-msgstr "Debe fornecer exactamente un patrón"
-
-#: cmdline/apt-cache.cc:1451 apt-pkg/cacheset.cc:440
+#: cmdline/apt-cache.cc:1503 apt-pkg/cacheset.cc:440
 #, c-format
 msgid "Unable to locate package %s"
-msgstr "Non se puido atopar o paquete %s"
+msgstr "Non foi posíbel atopar o paquete %s"
 
-#: cmdline/apt-cache.cc:1481
+#: cmdline/apt-cache.cc:1533
 msgid "Package files:"
 msgstr "Ficheiros de paquetes:"
 
-#: cmdline/apt-cache.cc:1488 cmdline/apt-cache.cc:1586
+#: cmdline/apt-cache.cc:1540 cmdline/apt-cache.cc:1638
 msgid "Cache is out of sync, can't x-ref a package file"
 msgstr ""
 "A caché está sen sincronizar, non se pode facer referencia a un ficheiro de "
 "paquetes"
 
 #. Show any packages have explicit pins
-#: cmdline/apt-cache.cc:1502
+#: cmdline/apt-cache.cc:1554
 msgid "Pinned packages:"
 msgstr "Paquetes inmobilizados:"
 
-#: cmdline/apt-cache.cc:1514 cmdline/apt-cache.cc:1566
+#: cmdline/apt-cache.cc:1566 cmdline/apt-cache.cc:1618
 msgid "(not found)"
 msgstr "(non se atopou)"
 
-#: cmdline/apt-cache.cc:1523
+#: cmdline/apt-cache.cc:1575
 msgid "  Installed: "
 msgstr "  Instalado: "
 
-#: cmdline/apt-cache.cc:1524
+#: cmdline/apt-cache.cc:1576
 msgid "  Candidate: "
 msgstr "  Candidato: "
 
-#: cmdline/apt-cache.cc:1548 cmdline/apt-cache.cc:1556
+#: cmdline/apt-cache.cc:1600 cmdline/apt-cache.cc:1608
 msgid "(none)"
 msgstr "(ningún)"
 
-#: cmdline/apt-cache.cc:1563
+#: cmdline/apt-cache.cc:1615
 msgid "  Package pin: "
 msgstr "  Inmobilizado: "
 
 #. Show the priority tables
-#: cmdline/apt-cache.cc:1572
+#: cmdline/apt-cache.cc:1624
 msgid "  Version table:"
 msgstr "  Táboa de versións:"
 
-#: cmdline/apt-cache.cc:1686 cmdline/apt-cdrom.cc:197 cmdline/apt-config.cc:70
+#: cmdline/apt-cache.cc:1738 cmdline/apt-cdrom.cc:197 cmdline/apt-config.cc:70
 #: cmdline/apt-extracttemplates.cc:225 ftparchive/apt-ftparchive.cc:589
-#: cmdline/apt-get.cc:3047 cmdline/apt-sortpkgs.cc:144
+#: cmdline/apt-get.cc:2793 cmdline/apt-sortpkgs.cc:144
 #, c-format
 msgid "%s %s for %s compiled on %s %s\n"
-msgstr "%s %s para %s compilado o %s %s\n"
+msgstr "%s %s para %s compilado en %s %s\n"
 
-#: cmdline/apt-cache.cc:1693
+#: cmdline/apt-cache.cc:1745
 #, fuzzy
+#| msgid ""
+#| "Usage: apt-cache [options] command\n"
+#| "       apt-cache [options] showpkg pkg1 [pkg2 ...]\n"
+#| "       apt-cache [options] showsrc pkg1 [pkg2 ...]\n"
+#| "\n"
+#| "apt-cache is a low-level tool used to query information\n"
+#| "from APT's binary cache files\n"
+#| "\n"
+#| "Commands:\n"
+#| "   gencaches - Build both the package and source cache\n"
+#| "   showpkg - Show some general information for a single package\n"
+#| "   showsrc - Show source records\n"
+#| "   stats - Show some basic statistics\n"
+#| "   dump - Show the entire file in a terse form\n"
+#| "   dumpavail - Print an available file to stdout\n"
+#| "   unmet - Show unmet dependencies\n"
+#| "   search - Search the package list for a regex pattern\n"
+#| "   show - Show a readable record for the package\n"
+#| "   showauto - Display a list of automatically installed packages\n"
+#| "   depends - Show raw dependency information for a package\n"
+#| "   rdepends - Show reverse dependency information for a package\n"
+#| "   pkgnames - List the names of all packages in the system\n"
+#| "   dotty - Generate package graphs for GraphViz\n"
+#| "   xvcg - Generate package graphs for xvcg\n"
+#| "   policy - Show policy settings\n"
+#| "\n"
+#| "Options:\n"
+#| "  -h   This help text.\n"
+#| "  -p=? The package cache.\n"
+#| "  -s=? The source cache.\n"
+#| "  -q   Disable progress indicator.\n"
+#| "  -i   Show only important deps for the unmet command.\n"
+#| "  -c=? Read this configuration file\n"
+#| "  -o=? Set an arbitrary configuration option, eg -o dir::cache=/tmp\n"
+#| "See the apt-cache(8) and apt.conf(5) manual pages for more information.\n"
 msgid ""
 "Usage: apt-cache [options] command\n"
+"       apt-cache [options] add file1 [file2 ...]\n"
 "       apt-cache [options] showpkg pkg1 [pkg2 ...]\n"
 "       apt-cache [options] showsrc pkg1 [pkg2 ...]\n"
 "\n"
-"apt-cache is a low-level tool used to query information\n"
-"from APT's binary cache files\n"
+"apt-cache is a low-level tool used to manipulate APT's binary\n"
+"cache files, and query information from them\n"
 "\n"
 "Commands:\n"
+"   add - Add a package file to the source cache\n"
 "   gencaches - Build both the package and source cache\n"
 "   showpkg - Show some general information for a single package\n"
 "   showsrc - Show source records\n"
@@ -198,61 +236,59 @@ msgid ""
 "  -o=? Set an arbitrary configuration option, eg -o dir::cache=/tmp\n"
 "See the apt-cache(8) and apt.conf(5) manual pages for more information.\n"
 msgstr ""
-"Emprego: apt-cache [opcións] orde\n"
-"         apt-cache [opcións] add fich1 [fich2 ...]\n"
-"         apt-cache [opcións] showpkg paq1 [paq2 ...]\n"
-"         apt-cache [opcións] showsrc paq1 [paq2 ...]\n"
+"Uso: apt-cache [opcións] orde\n"
+"       apt-cache [opcións] showpkg paquete1 [paquete2 ...]\n"
+"       apt-cache [opcións] showsrc paquete1 [paquete2 ...]\n"
 "\n"
-"apt-cache é unha ferramenta de baixo nivel que se emprega para manipular\n"
-"os ficheiros binarios de caché de APT e obter información deles\n"
+"apt-cache é unha ferramenta de baixo nivel usada para consultar\n"
+"informacións dos ficheiros binarios da cache do APT\n"
 "\n"
 "Ordes:\n"
-"   add - Engade un ficheiro de paquetes á caché de fontes\n"
-"   gencaches - Reconstrúe as cachés de paquetes e fontes\n"
-"   showpkg - Amosa información xeral dun paquete\n"
-"   showsrc - Amosa os rexistros de fontes\n"
-"   stats - Amosa algunhas estatísticas básicas\n"
-"   dump - Amosa todo o ficheiro nun formato abreviado\n"
-"   dumpavail - Saca un ficheiro de dispoñibles pola saída estándar\n"
-"   unmet - Amosa as dependencias sen cumprir\n"
-"   search - Busca unha expresión regular na lista de paquetes\n"
-"   show - Amosa un rexistro lexible para o paquete\n"
-"   depends - Amosa a información bruta de dependencias dun paquete\n"
-"   rdepends - Amosa información de dependencias inversas dun paquete\n"
-"   pkgnames - Amosa os nomes de tódolos paquetes\n"
-"   dotty - Xera gráficas de paquetes para GraphViz\n"
-"   xvcg - Xera gráficas de paquetes para xvcg\n"
-"   policy - Amosa a configuración de normativa\n"
+"   gencaches - Constrúe as caches de paquete e fonte\n"
+"   showpkg - Mostra algunhas informacións xerais dun único paquete\n"
+"   showsrc - Mostra rexistros da fonte\n"
+"   stats - Mostra algunhas estatísticas básicas\n"
+"   dump - Mostra o ficheiro enteiro nun formato concreto\n"
+"   dumpavail - Imprime un ficheiro dispoñíbel para stdout\n"
+"   unmet - Mostra dependencias non atopadas\n"
+"   search - Busca na lista de paquetes por unha expresión regular\n"
+"   show - Mostra un rexistro lexíbel para o paquete\n"
+"   showauto - Mostra unha lista dos paquetes instalados automaticamente\n"
+"   depends - Mostra informacións brutas de dependencia para un paquete\n"
+"   rdepends - Mostra informacións de dependencia inversa para un paquete\n"
+"   pkgnames - Lista os nomes de todos os paquetes no sistema\n"
+"   dotty - Xera gráficos de paquete para o GraphViz\n"
+"   xvcg - Xera gráficos de paquete para o xvcg\n"
+"   policy - Mostra configuracións da política\n"
 "\n"
-"Opcións:\n"
+"Options:\n"
 "  -h   Este texto de axuda.\n"
-"  -p=? A caché de paquetes.\n"
-"  -s=? A caché de fontes.\n"
+"  -p=? A cache do paquete.\n"
+"  -s=? A cache da fonte.\n"
 "  -q   Desactiva o indicador de progreso.\n"
-"  -i   Amosa só as dependencias importantes na orde unmet.\n"
-"  -c=? Le este ficheiro de configuración.\n"
-"  -o=? Establece unha opción de configuración, por exemplo: -o dir::cache=/"
+"  -i   Mostra soamente dependencias importantes para a orde unmet.\n"
+"  -c=? Ler este ficheiro de configuración\n"
+"  -o=? Define unha opción arbitraria de configuración, ex. -o dir::cache=/"
 "tmp\n"
-"Vexa as páxinas de manual de apt-cache(8) e apt.conf(5) para máis "
+"Vexa a páxina de manual apt-cache(8) e apt.conf(5) para obter mais "
 "información.\n"
 
 #: cmdline/apt-cdrom.cc:77
-#, fuzzy
 msgid "Please provide a name for this Disc, such as 'Debian 5.0.3 Disk 1'"
-msgstr "Forneza un nome para este disco, coma \"Debian 2.1r1 Disco 1\""
+msgstr "Forneza un nome para este disco, como «Debian 5.0.3 Disco 1»"
 
 #: cmdline/apt-cdrom.cc:92
 msgid "Please insert a Disc in the drive and press enter"
-msgstr "Introduza un disco na unidade e prema Intro"
+msgstr "Insira un disco na unidade e prema Intro"
 
 #: cmdline/apt-cdrom.cc:127
-#, fuzzy, c-format
+#, c-format
 msgid "Failed to mount '%s' to '%s'"
-msgstr "Non se puido cambiar o nome de %s a %s"
+msgstr "Produciuse un fallo ao montar «%s» en «%s»"
 
 #: cmdline/apt-cdrom.cc:162
 msgid "Repeat this process for the rest of the CDs in your set."
-msgstr "Repita este proceso para o resto de CDs do seu conxunto."
+msgstr "Repita este proceso para o resto de CD do seu conxunto."
 
 #: cmdline/apt-config.cc:41
 msgid "Arguments not in pairs"
@@ -273,7 +309,7 @@ msgid ""
 "  -c=? Read this configuration file\n"
 "  -o=? Set an arbitrary configuration option, eg -o dir::cache=/tmp\n"
 msgstr ""
-"Emprego: apt-config [opcións] orde\n"
+"Uso: apt-config [opcións] orde\n"
 "\n"
 "apt-config é unha ferramenta simple para ler a configuración de APT\n"
 "\n"
@@ -284,7 +320,7 @@ msgstr ""
 "Opcións:\n"
 "  -h   Este texto de axuda.\n"
 "  -c=? Le este ficheiro de configuración\n"
-"  -o=? Establece unha opción de configuración, por exemplo: -o dir::cache=/"
+"  -o=? Estabelece unha opción de configuración, por exemplo: -o dir::cache=/"
 "tmp\n"
 
 #: cmdline/apt-extracttemplates.cc:98
@@ -305,26 +341,26 @@ msgid ""
 "  -c=? Read this configuration file\n"
 "  -o=? Set an arbitrary configuration option, eg -o dir::cache=/tmp\n"
 msgstr ""
-"Emprego: apt-extracttemplates fich1 [fich2 ...]\n"
+"Uso: apt-extracttemplates fich1 [fich2 ...]\n"
 "\n"
 "apt-extracttemplates é unha ferramenta para extraer información\n"
 "de configuración e patróns dos paquetes debian\n"
 "\n"
 "Opcións:\n"
 "  -h   Este texto de axuda\n"
-"  -t   Establece o directorio temporal\n"
+"  -t   Estabelece o directorio temporal\n"
 "  -c=? Le este ficheiro de configuración\n"
-"  -o=? Establece unha opción de configuración, por exemplo: -o dir::cache=/"
+"  -o=? Estabelece unha opción de configuración, por exemplo: -o dir::cache=/"
 "tmp\n"
 
-#: cmdline/apt-extracttemplates.cc:267 apt-pkg/pkgcachegen.cc:1175
+#: cmdline/apt-extracttemplates.cc:267 apt-pkg/pkgcachegen.cc:1171
 #, c-format
 msgid "Unable to write to %s"
-msgstr "Non se puido escribir en %s"
+msgstr "Non é posíbel escribir en %s"
 
 #: cmdline/apt-extracttemplates.cc:309
 msgid "Cannot get debconf version. Is debconf installed?"
-msgstr "Non se puido obter a versión de debconf. ¿Debconf está instalado?"
+msgstr "Non é posíbel obter a versión de debconf. Debconf está instalado?"
 
 #: ftparchive/apt-ftparchive.cc:170 ftparchive/apt-ftparchive.cc:347
 msgid "Package extension list is too long"
@@ -335,7 +371,7 @@ msgstr "A lista de extensións de paquetes é longa de máis"
 #: ftparchive/apt-ftparchive.cc:276 ftparchive/apt-ftparchive.cc:298
 #, c-format
 msgid "Error processing directory %s"
-msgstr "Erro ao procesar o directorio %s"
+msgstr "Produciuse un erro ao procesar o directorio %s"
 
 #: ftparchive/apt-ftparchive.cc:260
 msgid "Source extension list is too long"
@@ -343,12 +379,12 @@ msgstr "A lista de extensións de fontes é longa de máis"
 
 #: ftparchive/apt-ftparchive.cc:377
 msgid "Error writing header to contents file"
-msgstr "Erro ao gravar a cabeceira no ficheiro de contido"
+msgstr "Produciuse un erro ao gravar a cabeceira no ficheiro de contido"
 
 #: ftparchive/apt-ftparchive.cc:407
 #, c-format
 msgid "Error processing contents %s"
-msgstr "Erro ao procesar o contido %s"
+msgstr "Produciuse un erro ao procesar o contido %s"
 
 #: ftparchive/apt-ftparchive.cc:595
 msgid ""
@@ -399,81 +435,77 @@ msgstr ""
 "       generate config [grupos]\n"
 "       clean config\n"
 "\n"
-"apt-ftparchive xera ficheiros de índices para arquivos de Debian. Soporta\n"
+"apt-ftparchive xera ficheiros de índices para arquivos de Debian. Admite\n"
 "varios estilos de xeración, de totalmente automática a substitutos "
 "funcionais\n"
 "de dpkg-scanpackages e dpkg-scansources\n"
 "\n"
 "apt-ftparchive xera ficheiros Packages dunha árbore de .debs. O ficheiro\n"
-"Packages ten o contido de tódolos campos de control de cada paquete, así\n"
-"coma a suma MD5 e o tamaño do ficheiro. Sopórtase un ficheiro de \"overrides"
-"\"\n"
+"Packages ten o contido de todos os campos de control de cada paquete, así\n"
+"coma a suma MD5 e o tamaño do ficheiro. Admitese un ficheiro de «overrides»\n"
 "para forzar o valor dos campos Priority e Section.\n"
 "\n"
 "De xeito semellante, apt-ftparchive xera ficheiros Sources dunha árbore de\n"
 ".dscs. Pódese empregar a opción --source-override para especificar un "
 "ficheiro\n"
-"de \"overrides\" para fontes.\n"
+"de «overrides» para fontes.\n"
 "\n"
-"As ordes \"packages\" e \"sources\" deberían se executar na raíz da árbore.\n"
-"\"Rutabinaria\" debería apuntar á base da busca recursiva e o ficheiro\n"
-"\"fichoverride\" debería conter os modificadores de \"override\". "
-"\"Prefixoruta\"\n"
+"As ordes «packages» e «sources» deberían executarse na raíz da árbore.\n"
+"«Rutabinaria» debería apuntar á base da busca recursiva e o ficheiro\n"
+"«fichoverride» debería conter os modificadores de «override». «Prefixoruta»\n"
 "engádese aos campos de nomes de ficheiros se está presente. Un exemplo\n"
 "de emprego do arquivo de Debian:\n"
-"   apt-ftparchive packages dists/potato/main/binary-i386/ > \\\n"
+"   apt-ftparchive packages dists/potato/main/binary-i386/ > \n"
 "               dists/potato/main/binary-i386/Packages\n"
 "\n"
 "Opcións:\n"
 "  -h    Este texto de axuda\n"
 "  --md5 Controla a xeración de MD5\n"
-"  -s=?  Ficheiro de \"override\" de fontes\n"
+"  -s=?  Ficheiro de «override» de fontes\n"
 "  -q    Non produce ningunha saída por pantalla\n"
 "  -d=?  Escolle a base de datos de caché opcional\n"
 "  --no-delink Activa o modo de depuración de desligado\n"
 "  --contents  Controla a xeración do ficheiro de contido\n"
 "  -c=?  Le este ficheiro de configuración\n"
-"  -o=?  Establece unha opción de configuración"
+"  -o=?  Estabelece unha opción de configuración"
 
 #: ftparchive/apt-ftparchive.cc:801
 msgid "No selections matched"
-msgstr "Ningunha selección encaixou"
+msgstr "Non coincide ningunha selección"
 
 #: ftparchive/apt-ftparchive.cc:879
 #, c-format
 msgid "Some files are missing in the package file group `%s'"
-msgstr "Fallan ficheiros no grupo de ficheiros de paquetes \"%s\""
+msgstr "Faltan ficheiros no grupo de ficheiros de paquetes «%s»"
 
 #: ftparchive/cachedb.cc:43
 #, c-format
 msgid "DB was corrupted, file renamed to %s.old"
-msgstr ""
-"A base de datos estaba corrompida, cambiouse o nome do ficheiro a %s.old"
+msgstr "A base de datos estaba danada, cambiouse o nome do ficheiro a %s.old"
 
 #: ftparchive/cachedb.cc:61
 #, c-format
 msgid "DB is old, attempting to upgrade %s"
-msgstr "A base de datos é antiga, trátase de actualizar %s"
+msgstr "A base de datos é antiga, tentando anovar %s"
 
 #: ftparchive/cachedb.cc:72
-#, fuzzy
 msgid ""
 "DB format is invalid. If you upgraded from an older version of apt, please "
 "remove and re-create the database."
 msgstr ""
-"O formato da base de datos non é válido. Se actualizou desde unha versión "
-"antiga de apt, elimine e volva crear a base de datos."
+"O formato da base de datos non é correcto. Se a anovou desde unha versión "
+"antiga de apt, retirea e volva a crear a base de datos"
 
 #: ftparchive/cachedb.cc:77
 #, c-format
 msgid "Unable to open DB file %s: %s"
-msgstr "Non se puido abrir o ficheiro de base de datos %s: %s"
+msgstr "Non é posíbel abrir o ficheiro de base de datos %s: %s"
 
 #: ftparchive/cachedb.cc:123 apt-inst/extract.cc:178 apt-inst/extract.cc:190
 #: apt-inst/extract.cc:207 apt-inst/deb/dpkgdb.cc:117
 #, c-format
 msgid "Failed to stat %s"
-msgstr "Non se atopou %s"
+msgstr "Non foi posíbel determinar o estado %s"
 
 #: ftparchive/cachedb.cc:242
 msgid "Archive has no control record"
@@ -481,17 +513,17 @@ msgstr "O arquivo non ten un rexistro de control"
 
 #: ftparchive/cachedb.cc:448
 msgid "Unable to get a cursor"
-msgstr "Non se puido obter un cursor"
+msgstr "Non é posíbel obter un cursor"
 
 #: ftparchive/writer.cc:73
 #, c-format
 msgid "W: Unable to read directory %s\n"
-msgstr "A: Non se puido ler o directorio %s\n"
+msgstr "A: non é posíbel ler o directorio %s\n"
 
 #: ftparchive/writer.cc:78
 #, c-format
 msgid "W: Unable to stat %s\n"
-msgstr "A: Non se atopou %s\n"
+msgstr "A: non é posíbel atopar %s\n"
 
 #: ftparchive/writer.cc:134
 msgid "E: "
@@ -503,21 +535,21 @@ msgstr "A: "
 
 #: ftparchive/writer.cc:143
 msgid "E: Errors apply to file "
-msgstr "E: Os erros aplícanse ao ficheiro "
+msgstr "E: os erros aplícanse ao ficheiro "
 
 #: ftparchive/writer.cc:161 ftparchive/writer.cc:193
 #, c-format
 msgid "Failed to resolve %s"
-msgstr "Non se puido resolver %s"
+msgstr "Non foi posíbel solucionar %s"
 
 #: ftparchive/writer.cc:174
 msgid "Tree walking failed"
-msgstr "O percorrido da árbore fallou"
+msgstr "Fallou o percorrido da árbore"
 
 #: ftparchive/writer.cc:201
 #, c-format
 msgid "Failed to open %s"
-msgstr "Non se puido abrir %s"
+msgstr "Non foi posíbel abrir %s"
 
 #: ftparchive/writer.cc:260
 #, c-format
@@ -527,22 +559,22 @@ msgstr " DesLig %s [%s]\n"
 #: ftparchive/writer.cc:268
 #, c-format
 msgid "Failed to readlink %s"
-msgstr "Non se puido ler a ligazón %s"
+msgstr "Non foi posíbel ler a ligazón %s"
 
 #: ftparchive/writer.cc:272
 #, c-format
 msgid "Failed to unlink %s"
-msgstr "Non se puido borrar %s"
+msgstr "Non foi posíbel desligar %s"
 
 #: ftparchive/writer.cc:279
 #, c-format
 msgid "*** Failed to link %s to %s"
-msgstr "*** Non se puido ligar %s con %s"
+msgstr "*** Non foi posíbel ligar %s con %s"
 
 #: ftparchive/writer.cc:289
 #, c-format
 msgid " DeLink limit of %sB hit.\n"
-msgstr " Alcanzouse o límite de desligado de %sB.\n"
+msgstr " Acadouse o límite de desligado de %sB.\n"
 
 #: ftparchive/writer.cc:393
 msgid "Archive had no package field"
@@ -551,7 +583,7 @@ msgstr "O arquivo non tiña un campo Package"
 #: ftparchive/writer.cc:401 ftparchive/writer.cc:688
 #, c-format
 msgid "  %s has no override entry\n"
-msgstr "  %s non ten unha entrada de \"override\"\n"
+msgstr "  %s non ten unha entrada de «override»\n"
 
 #: ftparchive/writer.cc:464 ftparchive/writer.cc:793
 #, c-format
@@ -561,68 +593,68 @@ msgstr "  O mantedor de %s é %s, non %s\n"
 #: ftparchive/writer.cc:698
 #, c-format
 msgid "  %s has no source override entry\n"
-msgstr "  %s non ten unha entrada de \"override\" de código fonte\n"
+msgstr "  %s non ten unha entrada de «override» de código fonte\n"
 
 #: ftparchive/writer.cc:702
 #, c-format
 msgid "  %s has no binary override entry either\n"
-msgstr "  %s tampouco ten unha entrada de \"override\" de binarios\n"
+msgstr "  %s tampouco ten unha entrada de «override» de binarios\n"
 
 #: ftparchive/contents.cc:321
 #, c-format
 msgid "Internal error, could not locate member %s"
-msgstr "Erro interno, non se puido atopar o membro %s"
+msgstr "Produciuse un erro interno, non foi posíbel atopar o membro %s"
 
 #: ftparchive/contents.cc:358 ftparchive/contents.cc:389
 msgid "realloc - Failed to allocate memory"
-msgstr "realloc - Non se puido reservar memoria"
+msgstr "realloc - Non foi posíbel reservar memoria"
 
 #: ftparchive/override.cc:34 ftparchive/override.cc:142
 #, c-format
 msgid "Unable to open %s"
-msgstr "Non se puido abrir %s"
+msgstr "Non é posíbel puido abrir %s"
 
 #: ftparchive/override.cc:60 ftparchive/override.cc:166
 #, c-format
 msgid "Malformed override %s line %lu #1"
-msgstr "\"Override\" %s liña %lu mal formado (1)"
+msgstr "«Override» %s liña %lu incorrecta (1)"
 
 #: ftparchive/override.cc:74 ftparchive/override.cc:178
 #, c-format
 msgid "Malformed override %s line %lu #2"
-msgstr "\"Override\" %s liña %lu mal formado (2)"
+msgstr "«Override» %s liña %lu incorrecta (2)"
 
 #: ftparchive/override.cc:88 ftparchive/override.cc:191
 #, c-format
 msgid "Malformed override %s line %lu #3"
-msgstr "\"Override\" %s liña %lu mal formado (3)"
+msgstr "«Override» %s liña %lu incorrecta (3)"
 
 #: ftparchive/override.cc:127 ftparchive/override.cc:201
 #, c-format
 msgid "Failed to read the override file %s"
-msgstr "Non se puido ler o ficheiro de \"overrides\" %s"
+msgstr "Non foi posíbel ler o ficheiro de «override» %s"
 
 #: ftparchive/multicompress.cc:72
 #, c-format
 msgid "Unknown compression algorithm '%s'"
-msgstr "Algoritmo de compresión \"%s\" descoñecido"
+msgstr "Algoritmo de compresión «%s» descoñecido"
 
 #: ftparchive/multicompress.cc:102
 #, c-format
 msgid "Compressed output %s needs a compression set"
-msgstr "A saída comprimida %s precisa dun xogo de compresión"
+msgstr "A saída comprimida %s precisa dun conxunto de compresión"
 
 #: ftparchive/multicompress.cc:169 methods/rsh.cc:91
 msgid "Failed to create IPC pipe to subprocess"
-msgstr "Non se puido crear a canle IPC ao subproceso"
+msgstr "Non foi posíbel crear a canle IPC ao subproceso"
 
 #: ftparchive/multicompress.cc:195
 msgid "Failed to create FILE*"
-msgstr "Non se puido crear o FILE*"
+msgstr "Non foi posíbel crear o FILE*"
 
 #: ftparchive/multicompress.cc:198
 msgid "Failed to fork"
-msgstr "Non se puido chamar a fork"
+msgstr "Non foi posíbel facer a bifurcación"
 
 #: ftparchive/multicompress.cc:212
 msgid "Compress child"
@@ -631,15 +663,15 @@ msgstr "Fillo de compresión"
 #: ftparchive/multicompress.cc:235
 #, c-format
 msgid "Internal error, failed to create %s"
-msgstr "Erro interno, non se puido crear %s"
+msgstr "Produciuse un erro interno, non foi posíbel crear %s"
 
 #: ftparchive/multicompress.cc:286
 msgid "Failed to create subprocess IPC"
-msgstr "Non se puido crear o IPC do subproceso"
+msgstr "Non foi posíbel crear o IPC do subproceso"
 
 #: ftparchive/multicompress.cc:321
 msgid "Failed to exec compressor "
-msgstr "Non se puido executar o compresor "
+msgstr "Non foi posíbel executar o compresor "
 
 #: ftparchive/multicompress.cc:360
 msgid "decompressor"
@@ -647,21 +679,21 @@ msgstr "descompresor"
 
 #: ftparchive/multicompress.cc:403
 msgid "IO to subprocess/file failed"
-msgstr "A E/S ao subproceso/ficheiro fallou"
+msgstr "Produciuse un fallo na E/S do subproceso/ficheiro"
 
 #: ftparchive/multicompress.cc:455
 msgid "Failed to read while computing MD5"
-msgstr "Non se puido ler ao calcular o MD5"
+msgstr "Non foi posíbel ler ao calcular o MD5"
 
 #: ftparchive/multicompress.cc:472
 #, c-format
 msgid "Problem unlinking %s"
-msgstr "Problema ao borrar %s"
+msgstr "Xurdiu un problema ao desligar %s"
 
 #: ftparchive/multicompress.cc:487 apt-inst/extract.cc:185
 #, c-format
 msgid "Failed to rename %s to %s"
-msgstr "Non se puido cambiar o nome de %s a %s"
+msgstr "Non foi posíbel cambiar o nome de %s a %s"
 
 #: cmdline/apt-get.cc:135
 msgid "Y"
@@ -670,7 +702,7 @@ msgstr "S"
 #: cmdline/apt-get.cc:157 apt-pkg/cachefilter.cc:29
 #, c-format
 msgid "Regex compilation error - %s"
-msgstr "Erro na compilación da expresión regular - %s"
+msgstr "Produciuse un erro na compilación da expresión regular - %s"
 
 #: cmdline/apt-get.cc:252
 msgid "The following packages have unmet dependencies:"
@@ -679,28 +711,28 @@ msgstr "Os seguintes paquetes teñen dependencias sen cumprir:"
 #: cmdline/apt-get.cc:342
 #, c-format
 msgid "but %s is installed"
-msgstr "pero %s está instalado"
+msgstr "mais %s está instalado"
 
 #: cmdline/apt-get.cc:344
 #, c-format
 msgid "but %s is to be installed"
-msgstr "pero hase instalar %s"
+msgstr "mais vaise instalar %s"
 
 #: cmdline/apt-get.cc:351
 msgid "but it is not installable"
-msgstr "pero non é instalable"
+msgstr "mais non é instalábel"
 
 #: cmdline/apt-get.cc:353
 msgid "but it is a virtual package"
-msgstr "pero é un paquete virtual"
+msgstr "mais é un paquete virtual"
 
 #: cmdline/apt-get.cc:356
 msgid "but it is not installed"
-msgstr "pero non está instalado"
+msgstr "mais non está instalado"
 
 #: cmdline/apt-get.cc:356
 msgid "but it is not going to be installed"
-msgstr "pero non se ha instalar"
+msgstr "mais non se vai a instalar"
 
 #: cmdline/apt-get.cc:361
 msgid " or"
@@ -712,41 +744,41 @@ msgstr "Os seguintes paquetes NOVOS hanse instalar:"
 
 #: cmdline/apt-get.cc:420
 msgid "The following packages will be REMOVED:"
-msgstr "Os seguintes paquetes hanse ELIMINAR:"
+msgstr "Vanse RETIRAR os paquetes seguintes:"
 
 #: cmdline/apt-get.cc:442
 msgid "The following packages have been kept back:"
-msgstr "Os seguintes paquetes consérvanse:"
+msgstr "Consérvanse os seguintes paquetes:"
 
 #: cmdline/apt-get.cc:465
 msgid "The following packages will be upgraded:"
-msgstr "Os seguintes paquetes hanse actualizar:"
+msgstr "Vanse anovar os paquetes seguintes:"
 
 #: cmdline/apt-get.cc:488
 msgid "The following packages will be DOWNGRADED:"
-msgstr "Os seguintes paquetes hanse DESACTUALIZAR:"
+msgstr "Vanse REVERTER os seguintes paquetes :"
 
 #: cmdline/apt-get.cc:508
 msgid "The following held packages will be changed:"
-msgstr "Os seguintes paquetes retidos hanse modificar:"
+msgstr "Vanse modificar os paquetes retidos seguintes:"
 
 #: cmdline/apt-get.cc:563
 #, c-format
 msgid "%s (due to %s) "
-msgstr "%s (debido a %s) "
+msgstr "%s (por mor de %s) "
 
 #: cmdline/apt-get.cc:571
 msgid ""
 "WARNING: The following essential packages will be removed.\n"
 "This should NOT be done unless you know exactly what you are doing!"
 msgstr ""
-"AVISO: Hanse eliminar os seguintes paquetes esenciais.\n"
-"¡Isto NON se debe facer a menos que saiba exactamente o que está a facer!"
+"AVISO: Retiraranse os seguintes paquetes esenciais.\n"
+"Isto NON se debe facer a menos que saiba exactamente o que está a facer!"
 
 #: cmdline/apt-get.cc:605
 #, c-format
 msgid "%lu upgraded, %lu newly installed, "
-msgstr "%lu actualizados, %lu instalados, "
+msgstr "%lu anovados, %lu instalados, "
 
 #: cmdline/apt-get.cc:609
 #, c-format
@@ -756,27 +788,27 @@ msgstr "%lu reinstalados, "
 #: cmdline/apt-get.cc:611
 #, c-format
 msgid "%lu downgraded, "
-msgstr "%lu desactualizados, "
+msgstr "%lu revertidos, "
 
 #: cmdline/apt-get.cc:613
 #, c-format
 msgid "%lu to remove and %lu not upgraded.\n"
-msgstr "%lu hanse eliminar e %lu sen actualizar.\n"
+msgstr "Vanse retirar %lu e deixar %lu sen anovar.\n"
 
 #: cmdline/apt-get.cc:617
 #, c-format
 msgid "%lu not fully installed or removed.\n"
-msgstr "%lu non instalados ou eliminados de todo.\n"
+msgstr "%lu non instalados ou retirados de todo.\n"
 
 #: cmdline/apt-get.cc:639
-#, fuzzy, c-format
+#, c-format
 msgid "Note, selecting '%s' for task '%s'\n"
-msgstr "Nota, escóllese %s para a expresión regular \"%s\"\n"
+msgstr "Nota, seleccione «%s» para a tarefa «%s»\n"
 
 #: cmdline/apt-get.cc:645
-#, fuzzy, c-format
+#, c-format
 msgid "Note, selecting '%s' for regex '%s'\n"
-msgstr "Nota, escóllese %s para a expresión regular \"%s\"\n"
+msgstr "Nota, seleccione «%s» para a expresión regular «%s»\n"
 
 #: cmdline/apt-get.cc:662
 #, c-format
@@ -788,9 +820,8 @@ msgid " [Installed]"
 msgstr " [Instalado]"
 
 #: cmdline/apt-get.cc:682
-#, fuzzy
 msgid " [Not candidate version]"
-msgstr "Versións candidatas"
+msgstr " [Non hai unha versión candidata]"
 
 #: cmdline/apt-get.cc:684
 msgid "You should explicitly select one to install."
@@ -803,182 +834,185 @@ msgid ""
 "This may mean that the package is missing, has been obsoleted, or\n"
 "is only available from another source\n"
 msgstr ""
-"O paquete %s non está dispoñible, pero outro paquete fai referencia a el.\n"
-"Isto pode significar que o paquete falla, está obsoleto ou só está\n"
-"dispoñible noutra fonte.\n"
+"O paquete %s non está dispoñíbel, mais outro paquete fai referencia a el.\n"
+"Isto pode significar que falta o paquete, está obsoleto ou só está\n"
+"dispoñíbel noutra fonte.\n"
 
 #: cmdline/apt-get.cc:705
 msgid "However the following packages replace it:"
-msgstr "Nembargantes, os seguintes paquetes substitúeno:"
+msgstr "Porén, os seguintes paquetes substitúeno:"
 
 #: cmdline/apt-get.cc:717
-#, fuzzy, c-format
+#, c-format
 msgid "Package '%s' has no installation candidate"
-msgstr "O paquete %s non ten un candidato para a instalación"
+msgstr "O paquete «%s» non ten unha instalación candidata"
 
 #: cmdline/apt-get.cc:728
 #, c-format
 msgid "Virtual packages like '%s' can't be removed\n"
-msgstr ""
+msgstr "Non se poden retirar os paquetes virtuais como «%s»\n"
 
 #: cmdline/apt-get.cc:759
-#, fuzzy, c-format
+#, c-format
 msgid "Note, selecting '%s' instead of '%s'\n"
-msgstr "Nota, escóllese %s no canto de %s\n"
+msgstr "Nota, seleccione «%s» no canto de «%s»\n"
 
 #: cmdline/apt-get.cc:789
 #, c-format
 msgid "Skipping %s, it is already installed and upgrade is not set.\n"
-msgstr "Omítese %s, xa está instalado e non se especificou a actualización.\n"
+msgstr "Omítese %s, xa está instalado e non se especificou a anovación.\n"
 
 #: cmdline/apt-get.cc:793
-#, fuzzy, c-format
+#, c-format
 msgid "Skipping %s, it is not installed and only upgrades are requested.\n"
-msgstr "Omítese %s, xa está instalado e non se especificou a actualización.\n"
+msgstr "Omitindo %s, non está instalado e só se solicitaron as anovacións.\n"
 
 #: cmdline/apt-get.cc:803
 #, c-format
 msgid "Reinstallation of %s is not possible, it cannot be downloaded.\n"
-msgstr "A reinstalación de %s non é posible, non se pode descargar.\n"
+msgstr "A reinstalación de %s non é posíbel, non se pode descargar.\n"
 
 #: cmdline/apt-get.cc:808
 #, c-format
 msgid "%s is already the newest version.\n"
 msgstr "%s xa é a versión máis recente.\n"
 
-#: cmdline/apt-get.cc:827 cmdline/apt-get.cc:2024
+#: cmdline/apt-get.cc:827 cmdline/apt-get.cc:2027
 #, c-format
 msgid "%s set to manually installed.\n"
-msgstr "%s cambiouse a instalado manualmente.\n"
+msgstr "%s cambiado a instalado manualmente.\n"
 
 #: cmdline/apt-get.cc:853
-#, fuzzy, c-format
+#, c-format
 msgid "Selected version '%s' (%s) for '%s'\n"
-msgstr "Escolleuse a versión %s (%s) de %s\n"
+msgstr "Versión seleccionada «%s» (%s) para «%s»\n"
 
 #: cmdline/apt-get.cc:858
-#, fuzzy, c-format
+#, c-format
 msgid "Selected version '%s' (%s) for '%s' because of '%s'\n"
-msgstr "Escolleuse a versión %s (%s) de %s\n"
+msgstr "Versión seleccionada «%s» (%s) para «%s» xa que «%s»\n"
 
-#: cmdline/apt-get.cc:899
+#: cmdline/apt-get.cc:898
 #, c-format
 msgid "Package %s is not installed, so not removed\n"
-msgstr "O paquete %s non está instalado, así que non se eliminou\n"
+msgstr "O paquete %s non está instalado, así que non foi retirado\n"
 
-#: cmdline/apt-get.cc:977
+#: cmdline/apt-get.cc:973
 msgid "Correcting dependencies..."
-msgstr "A corrixir as dependencias..."
+msgstr "Corrixindo as dependencias..."
 
-#: cmdline/apt-get.cc:980
+#: cmdline/apt-get.cc:976
 msgid " failed."
 msgstr " fallou."
 
-#: cmdline/apt-get.cc:983
+#: cmdline/apt-get.cc:979
 msgid "Unable to correct dependencies"
-msgstr "Non se puido corrixir as dependencias."
+msgstr "Non foi posíbel corrixir as dependencias."
 
-#: cmdline/apt-get.cc:986
+#: cmdline/apt-get.cc:982
 msgid "Unable to minimize the upgrade set"
-msgstr "Non se puido minimizar o xogo de actualizacións"
+msgstr "Non foi posíbel minimizar o conxunto de anovacións"
 
-#: cmdline/apt-get.cc:988
+#: cmdline/apt-get.cc:984
 msgid " Done"
-msgstr " Rematado"
+msgstr " Feito"
 
-#: cmdline/apt-get.cc:992
+#: cmdline/apt-get.cc:988
 msgid "You might want to run 'apt-get -f install' to correct these."
-msgstr "Pode querer executar \"apt-get -f install\" para corrixilos."
+msgstr "Pode querer executar «apt-get -f install» para corrixilos."
 
-#: cmdline/apt-get.cc:995
+#: cmdline/apt-get.cc:991
 msgid "Unmet dependencies. Try using -f."
 msgstr "Dependencias incumpridas. Probe a empregar -f."
 
-#: cmdline/apt-get.cc:1020
+#: cmdline/apt-get.cc:1016
 msgid "WARNING: The following packages cannot be authenticated!"
-msgstr "AVISO: ¡Non se poden autenticar os seguintes paquetes!"
+msgstr "AVISO: Non se poden autenticar os seguintes paquetes!"
 
-#: cmdline/apt-get.cc:1024
+#: cmdline/apt-get.cc:1020
 msgid "Authentication warning overridden.\n"
 msgstr "Ignórase o aviso de autenticación.\n"
 
-#: cmdline/apt-get.cc:1031
+#: cmdline/apt-get.cc:1027
 msgid "Install these packages without verification [y/N]? "
-msgstr "¿Instalar estes paquetes sen verificación [s/N]? "
+msgstr "Instalar estes paquetes sen verificación [s/N]? "
 
-#: cmdline/apt-get.cc:1033
+#: cmdline/apt-get.cc:1029
 msgid "Some packages could not be authenticated"
-msgstr "Non se puido autenticar algúns paquetes"
+msgstr "Non foi posíbel autenticar algúns paquetes"
 
-#: cmdline/apt-get.cc:1042 cmdline/apt-get.cc:1203
+#: cmdline/apt-get.cc:1038 cmdline/apt-get.cc:1199
 msgid "There are problems and -y was used without --force-yes"
-msgstr "Houbo problemas e empregouse -y sen --force-yes"
+msgstr "Xurdiron problemas e empregouse -y sen --force-yes"
 
-#: cmdline/apt-get.cc:1083
+#: cmdline/apt-get.cc:1079
 msgid "Internal error, InstallPackages was called with broken packages!"
-msgstr "Erro interno, chamouse a InstallPackages con paquetes rotos."
+msgstr ""
+"Produciuse un erro interno, chamouse a InstallPackages con paquetes "
+"estragados."
 
-#: cmdline/apt-get.cc:1092
+#: cmdline/apt-get.cc:1088
 msgid "Packages need to be removed but remove is disabled."
-msgstr "Hai que eliminar paquetes pero a eliminación está desactivada."
+msgstr "Hai que retirar paquetes mais o retirado está desactivado."
 
-#: cmdline/apt-get.cc:1103
+#: cmdline/apt-get.cc:1099
 msgid "Internal error, Ordering didn't finish"
-msgstr "Erro interno, a ordeación non rematou"
+msgstr "Produciuse un erro interno; non rematou a ordenación"
 
-#: cmdline/apt-get.cc:1141
+#: cmdline/apt-get.cc:1137
 msgid "How odd.. The sizes didn't match, email apt@packages.debian.org"
 msgstr ""
-"Que raro... Os tamaños non coinciden, envíe email a apt@packages.debian.org"
+"Que estraño... Os tamaños non coinciden; envíe un correo-e a apt@packages."
+"debian.org"
 
 #. TRANSLATOR: The required space between number and unit is already included
 #. in the replacement strings, so %sB will be correctly translate in e.g. 1,5 MB
-#: cmdline/apt-get.cc:1148
+#: cmdline/apt-get.cc:1144
 #, c-format
 msgid "Need to get %sB/%sB of archives.\n"
-msgstr "Hai que recibir %sB/%sB de arquivos.\n"
+msgstr "Ten que recibir %sB/%sB de arquivos.\n"
 
 #. TRANSLATOR: The required space between number and unit is already included
 #. in the replacement string, so %sB will be correctly translate in e.g. 1,5 MB
-#: cmdline/apt-get.cc:1153
+#: cmdline/apt-get.cc:1149
 #, c-format
 msgid "Need to get %sB of archives.\n"
-msgstr "Hai que recibir %sB de arquivos.\n"
+msgstr "Ten que recibir %sB de arquivos.\n"
 
 #. TRANSLATOR: The required space between number and unit is already included
 #. in the replacement string, so %sB will be correctly translate in e.g. 1,5 MB
-#: cmdline/apt-get.cc:1160
+#: cmdline/apt-get.cc:1156
 #, c-format
 msgid "After this operation, %sB of additional disk space will be used.\n"
-msgstr "Despois desta operación hanse ocupar %sB de disco adicionais.\n"
+msgstr "Despois desta operación ocuparanse %sB de disco adicionais.\n"
 
 #. TRANSLATOR: The required space between number and unit is already included
 #. in the replacement string, so %sB will be correctly translate in e.g. 1,5 MB
-#: cmdline/apt-get.cc:1165
+#: cmdline/apt-get.cc:1161
 #, c-format
 msgid "After this operation, %sB disk space will be freed.\n"
-msgstr "Despois desta operación hanse liberar %sB de disco.\n"
+msgstr "Despois desta operación liberaranse %sB de espazo de disco.\n"
 
-#: cmdline/apt-get.cc:1180 cmdline/apt-get.cc:1183 cmdline/apt-get.cc:2428
-#: cmdline/apt-get.cc:2431
+#: cmdline/apt-get.cc:1176 cmdline/apt-get.cc:1179 cmdline/apt-get.cc:2367
+#: cmdline/apt-get.cc:2370
 #, c-format
 msgid "Couldn't determine free space in %s"
-msgstr "Non se puido determinar o espazo libre en %s"
+msgstr "Non foi posíbel determinar o espazo libre en %s"
 
-#: cmdline/apt-get.cc:1193
+#: cmdline/apt-get.cc:1189
 #, c-format
 msgid "You don't have enough free space in %s."
-msgstr "Non hai espazo libre de abondo en %s."
+msgstr "Non hai espazo libre abondo en %s."
 
-#: cmdline/apt-get.cc:1209 cmdline/apt-get.cc:1229
+#: cmdline/apt-get.cc:1205 cmdline/apt-get.cc:1225
 msgid "Trivial Only specified but this is not a trivial operation."
-msgstr "Especificouse \"Só Triviais\" pero esta non é unha operación trivial."
+msgstr "Especificouse «Só triviais» mais esta non é unha operación trivial."
 
-#: cmdline/apt-get.cc:1211
+#: cmdline/apt-get.cc:1207
 msgid "Yes, do as I say!"
-msgstr "¡Si, fai o que digo!"
+msgstr "Si, fai o que digo!"
 
-#: cmdline/apt-get.cc:1213
+#: cmdline/apt-get.cc:1209
 #, c-format
 msgid ""
 "You are about to do something potentially harmful.\n"
@@ -986,53 +1020,52 @@ msgid ""
 " ?] "
 msgstr ""
 "Está a piques de facer algo perigoso.\n"
-"Para continuar escriba a frase \"%s\"\n"
+"Para continuar escriba a frase «%s»\n"
 " ?] "
 
-#: cmdline/apt-get.cc:1219 cmdline/apt-get.cc:1238
+#: cmdline/apt-get.cc:1215 cmdline/apt-get.cc:1234
 msgid "Abort."
-msgstr "Abortar."
+msgstr "Interromper."
 
-#: cmdline/apt-get.cc:1234
+#: cmdline/apt-get.cc:1230
 msgid "Do you want to continue [Y/n]? "
-msgstr "¿Quere continuar [S/n]? "
+msgstr "Quere continuar [S/n]? "
 
-#: cmdline/apt-get.cc:1306 cmdline/apt-get.cc:2488 apt-pkg/algorithms.cc:1491
+#: cmdline/apt-get.cc:1302 cmdline/apt-get.cc:2427 apt-pkg/algorithms.cc:1470
 #, c-format
 msgid "Failed to fetch %s  %s\n"
-msgstr "Non se puido obter %s  %s\n"
+msgstr "Non foi posíbel obter %s  %s\n"
 
-#: cmdline/apt-get.cc:1324
+#: cmdline/apt-get.cc:1320
 msgid "Some files failed to download"
-msgstr "Non se puido descargar algúns ficheiros"
+msgstr "Non foi posíbel descargar algúns ficheiros"
 
-#: cmdline/apt-get.cc:1325 cmdline/apt-get.cc:2497
+#: cmdline/apt-get.cc:1321 cmdline/apt-get.cc:2436
 msgid "Download complete and in download only mode"
 msgstr "Completouse a descarga no modo de só descargas"
 
-#: cmdline/apt-get.cc:1331
+#: cmdline/apt-get.cc:1327
 msgid ""
 "Unable to fetch some archives, maybe run apt-get update or try with --fix-"
 "missing?"
 msgstr ""
-"Non se puido obter algúns arquivos; probe con apt-get update ou --fix-"
+"Non foi posíbel obter algúns arquivos; probe con apt-get update ou --fix-"
 "missing."
 
-#: cmdline/apt-get.cc:1335
+#: cmdline/apt-get.cc:1331
 msgid "--fix-missing and media swapping is not currently supported"
 msgstr ""
-"O emprego conxunto de --fix-missing e intercambio de discos non está "
-"soportado"
+"O emprego conxunto de --fix-missing e intercambio de discos non está admitido"
 
-#: cmdline/apt-get.cc:1340
+#: cmdline/apt-get.cc:1336
 msgid "Unable to correct missing packages."
-msgstr "Non se puido corrixir os paquetes non dispoñibles."
+msgstr "Non é posíbel corrixir os paquetes non dispoñíbeis."
 
-#: cmdline/apt-get.cc:1341
+#: cmdline/apt-get.cc:1337
 msgid "Aborting install."
-msgstr "A abortar a instalación."
+msgstr "Interrompendo a instalación."
 
-#: cmdline/apt-get.cc:1369
+#: cmdline/apt-get.cc:1365
 msgid ""
 "The following package disappeared from your system as\n"
 "all files have been overwritten by other packages:"
@@ -1040,45 +1073,49 @@ msgid_plural ""
 "The following packages disappeared from your system as\n"
 "all files have been overwritten by other packages:"
 msgstr[0] ""
+"O seguinte paquete desapareceu do seu sistema e todos os \n"
+"ficheiros serán sobrescritos por outros paquetes:"
 msgstr[1] ""
+"Os seguintes paquetes desapareceron do seu sistema e todos os \n"
+"ficheiros serán sobrescritos por outros paquetes:"
 
-#: cmdline/apt-get.cc:1373
+#: cmdline/apt-get.cc:1369
 msgid "Note: This is done automatic and on purpose by dpkg."
-msgstr ""
+msgstr "Nota: Isto será feito automaticamente por dpkg."
 
-#: cmdline/apt-get.cc:1503
+#: cmdline/apt-get.cc:1499
 #, c-format
 msgid "Ignore unavailable target release '%s' of package '%s'"
-msgstr ""
+msgstr "Ignorase a versión de destino «%s» non dispoñíbel do paquete «%s»"
 
-#: cmdline/apt-get.cc:1535
-#, fuzzy, c-format
+#: cmdline/apt-get.cc:1531
+#, c-format
 msgid "Picking '%s' as source package instead of '%s'\n"
-msgstr "Non se atopou a lista de paquetes fonte %s"
+msgstr "Tome «%s» como paquete fonte no canto de «%s»\n"
 
 #. if (VerTag.empty() == false && Last == 0)
-#: cmdline/apt-get.cc:1573
+#: cmdline/apt-get.cc:1569
 #, c-format
 msgid "Ignore unavailable version '%s' of package '%s'"
-msgstr ""
+msgstr "Ignorar a versión non dispoñíbel «%s» do paquete «%s»"
 
-#: cmdline/apt-get.cc:1589
+#: cmdline/apt-get.cc:1585
 msgid "The update command takes no arguments"
-msgstr "A orde \"update\" non toma argumentos"
+msgstr "A orde «update» non toma argumentos"
 
-#: cmdline/apt-get.cc:1651
+#: cmdline/apt-get.cc:1647
 msgid "We are not supposed to delete stuff, can't start AutoRemover"
 msgstr ""
-"Non se supón que se deban eliminar cousas; non se pode iniciar o "
-"autoeliminador"
+"Non se agarda que eliminemos cousas, non se pode iniciar o Retirado "
+"automático"
 
-#: cmdline/apt-get.cc:1703
+#: cmdline/apt-get.cc:1699
 msgid ""
 "Hmm, seems like the AutoRemover destroyed something which really\n"
 "shouldn't happen. Please file a bug report against apt."
 msgstr ""
-"Hum, semella que o autoeliminadir destruiu algo, o que non debería\n"
-"ter ocorrido. Envíe un informe de erro sobre apt."
+"Vaia, semella que o Retirado automático destruíu algo que realmente\n"
+"non debería ter feito. Informe deste erro de apt."
 
 #.
 #. if (Packages == 1)
@@ -1090,266 +1127,307 @@ msgstr ""
 #. "that package should be filed.") << endl;
 #. }
 #.
-#: cmdline/apt-get.cc:1706 cmdline/apt-get.cc:1855
+#: cmdline/apt-get.cc:1702 cmdline/apt-get.cc:1858
 msgid "The following information may help to resolve the situation:"
-msgstr "A seguinte información pode axudar a resolver a situación:"
+msgstr "A seguinte información pode axudar a solucionar a situación:"
 
-#: cmdline/apt-get.cc:1710
+#: cmdline/apt-get.cc:1706
 msgid "Internal Error, AutoRemover broke stuff"
-msgstr "Erro interno, o autoeliminador rompeu cousas"
+msgstr "Produciuse un erro interno, o Retirado automático estragou cousas"
 
-#: cmdline/apt-get.cc:1717
-#, fuzzy
+#: cmdline/apt-get.cc:1713
 msgid ""
 "The following package was automatically installed and is no longer required:"
 msgid_plural ""
 "The following packages were automatically installed and are no longer "
 "required:"
 msgstr[0] ""
-"Os seguintes paquetes instaláronse automaticamente e xa non son necesarios:"
+"O seguinte paquete foi instalado automaticamente e xa non é necesario:"
 msgstr[1] ""
-"Os seguintes paquetes instaláronse automaticamente e xa non son necesarios:"
+"Os seguintes paquetes foron instalados automaticamente e xa non son "
+"necesarios:"
 
-#: cmdline/apt-get.cc:1721
-#, fuzzy, c-format
+#: cmdline/apt-get.cc:1717
+#, c-format
 msgid "%lu package was automatically installed and is no longer required.\n"
 msgid_plural ""
 "%lu packages were automatically installed and are no longer required.\n"
-msgstr[0] ""
-"Os seguintes paquetes instaláronse automaticamente e xa non son necesarios:"
+msgstr[0] "%lu paquete foi instalado automaticamente e xa non é necesario.\n"
 msgstr[1] ""
-"Os seguintes paquetes instaláronse automaticamente e xa non son necesarios:"
+"%lu paquetes foron instalados automaticamente e xa non son necesarios.\n"
 
-#: cmdline/apt-get.cc:1723
+#: cmdline/apt-get.cc:1719
 msgid "Use 'apt-get autoremove' to remove them."
-msgstr "Empregue \"apt-get autoremove\" para eliminalos."
+msgstr "Empregue «apt-get autoremove» para eliminalos."
 
-#: cmdline/apt-get.cc:1742
+#: cmdline/apt-get.cc:1738
 msgid "Internal error, AllUpgrade broke stuff"
-msgstr "Erro interno, AllUpgrade rompeu cousas"
+msgstr "Produciuse un erro interno, AllUpgrade estragou cousas"
 
-#: cmdline/apt-get.cc:1825
+#: cmdline/apt-get.cc:1828
 msgid "You might want to run 'apt-get -f install' to correct these:"
-msgstr "Pode querer executar \"apt-get -f install\" corrixir isto:"
+msgstr "Pode querer executar «apt-get -f install» para corrixir isto:"
 
-#: cmdline/apt-get.cc:1828
+#: cmdline/apt-get.cc:1831
 msgid ""
 "Unmet dependencies. Try 'apt-get -f install' with no packages (or specify a "
 "solution)."
 msgstr ""
-"Dependencias incumpridas. Probe \"apt-get -f install\" sen paquetes (ou "
+"Dependencias incumpridas. Probe «apt-get -f install» sen paquetes (ou "
 "especifique unha solución)."
 
-#: cmdline/apt-get.cc:1840
+#: cmdline/apt-get.cc:1843
 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"
 "distribution that some required packages have not yet been created\n"
 "or been moved out of Incoming."
 msgstr ""
-"Non se puido instalar algúns paquetes. Isto pode significar que solicitou\n"
-"unha situación imposible ou, se emprega a distribución inestable, que\n"
-"algúns paquetes solicitados aínda non se crearon ou moveron de Incoming."
+"Non foi posíbel instalar algúns paquetes. Isto pode significar que "
+"solicitou\n"
+"unha situación imposíbel ou, se emprega a distribución inestábel, que\n"
+"algúns paquetes solicitados aínda non se creasen ou que se movesen da "
+"entrada."
 
-#: cmdline/apt-get.cc:1858
+#: cmdline/apt-get.cc:1861
 msgid "Broken packages"
-msgstr "Paquetes rotos"
+msgstr "Paquetes estragados"
 
-#: cmdline/apt-get.cc:1886
+#: cmdline/apt-get.cc:1889
 msgid "The following extra packages will be installed:"
-msgstr "Hanse instalar os seguintes paquetes extra:"
+msgstr "Instalaranse os seguintes paquetes extra:"
 
-#: cmdline/apt-get.cc:1976
+#: cmdline/apt-get.cc:1979
 msgid "Suggested packages:"
-msgstr "Paquetes suxiridos:"
+msgstr "Paquetes suxeridos:"
 
-#: cmdline/apt-get.cc:1977
+#: cmdline/apt-get.cc:1980
 msgid "Recommended packages:"
 msgstr "Paquetes recomendados:"
 
-#: cmdline/apt-get.cc:2019
+#: cmdline/apt-get.cc:2022
 #, c-format
 msgid "Couldn't find package %s"
-msgstr "Non se puido atopar o paquete %s"
+msgstr "Non foi posíbel atopar o paquete %s"
 
-#: cmdline/apt-get.cc:2026
-#, fuzzy, c-format
+#: cmdline/apt-get.cc:2029
+#, c-format
 msgid "%s set to automatically installed.\n"
-msgstr "%s cambiouse a instalado manualmente.\n"
+msgstr "%s está estabelecido para a súa instalación automática.\n"
 
-#: cmdline/apt-get.cc:2047
+#: cmdline/apt-get.cc:2050
 msgid "Calculating upgrade... "
-msgstr "A calcular a actualización... "
+msgstr "Calculando a anovación... "
 
-#: cmdline/apt-get.cc:2050 methods/ftp.cc:707 methods/connect.cc:111
+#: cmdline/apt-get.cc:2053 methods/ftp.cc:707 methods/connect.cc:111
 msgid "Failed"
 msgstr "Fallou"
 
-#: cmdline/apt-get.cc:2055
+#: cmdline/apt-get.cc:2058
 msgid "Done"
-msgstr "Rematado"
+msgstr "Feito"
 
-#: cmdline/apt-get.cc:2122 cmdline/apt-get.cc:2130
+#: cmdline/apt-get.cc:2125 cmdline/apt-get.cc:2133
 msgid "Internal error, problem resolver broke stuff"
-msgstr "Erro interno, o resolvedor interno rompeu cousas"
+msgstr "Produciuse un erro interno, o solucionador interno estragou cousas"
 
-#: cmdline/apt-get.cc:2154 cmdline/apt-get.cc:2187
+#: cmdline/apt-get.cc:2157 cmdline/apt-get.cc:2190
 msgid "Unable to lock the download directory"
-msgstr "Non se puido bloquear o directorio de descargas"
+msgstr "Non é posíbel bloquear o directorio de descargas"
 
-#: cmdline/apt-get.cc:2238
-#, c-format
-msgid "Downloading %s %s"
-msgstr ""
-
-#: cmdline/apt-get.cc:2294
+#: cmdline/apt-get.cc:2233
 msgid "Must specify at least one package to fetch source for"
-msgstr ""
-"Ten que especificar alomenos un paquete para lle descargar o código fonte"
+msgstr "Ten que especificar polo menos un paquete para obter o código fonte"
 
-#: cmdline/apt-get.cc:2334 cmdline/apt-get.cc:2615
+#: cmdline/apt-get.cc:2273 cmdline/apt-get.cc:2554
 #, c-format
 msgid "Unable to find a source package for %s"
-msgstr "Non se puido atopar un paquete fonte para %s"
+msgstr "Non sé posíbel atopar un paquete fonte para %s"
 
-#: cmdline/apt-get.cc:2350
+#: cmdline/apt-get.cc:2289
 #, c-format
 msgid ""
 "NOTICE: '%s' packaging is maintained in the '%s' version control system at:\n"
 "%s\n"
 msgstr ""
+"AVISO: o paquete «%s» mantense no sistema de control de versións «%s» en:\n"
+"%s\n"
 
-#: cmdline/apt-get.cc:2355
+#: cmdline/apt-get.cc:2294
 #, c-format
 msgid ""
 "Please use:\n"
 "bzr get %s\n"
 "to retrieve the latest (possibly unreleased) updates to the package.\n"
 msgstr ""
+"Empregue:\n"
+"bzr get %s\n"
+"para obter as últimas actualizacións (posibelmente non publicadas) do "
+"paquete.\n"
 
-#: cmdline/apt-get.cc:2406
+#: cmdline/apt-get.cc:2345
 #, c-format
 msgid "Skipping already downloaded file '%s'\n"
-msgstr "Omítese o ficheiro xa descargado \"%s\"\n"
+msgstr "Omítese o ficheiro xa descargado «%s»\n"
 
-#: cmdline/apt-get.cc:2441
+#: cmdline/apt-get.cc:2380
 #, c-format
 msgid "You don't have enough free space in %s"
-msgstr "Non hai espazo libre de abondo en %s"
+msgstr "Non hai espazo libre abondo en %s"
 
 #. TRANSLATOR: The required space between number and unit is already included
 #. in the replacement strings, so %sB will be correctly translate in e.g. 1,5 MB
-#: cmdline/apt-get.cc:2449
+#: cmdline/apt-get.cc:2388
 #, c-format
 msgid "Need to get %sB/%sB of source archives.\n"
-msgstr "Hai que recibir %sB/%sB de arquivos de fonte.\n"
+msgstr "Ten que recibir %sB/%sB de arquivos de fonte.\n"
 
 #. TRANSLATOR: The required space between number and unit is already included
 #. in the replacement string, so %sB will be correctly translate in e.g. 1,5 MB
-#: cmdline/apt-get.cc:2454
+#: cmdline/apt-get.cc:2393
 #, c-format
 msgid "Need to get %sB of source archives.\n"
-msgstr "Hai que recibir %sB de arquivos de fonte.\n"
+msgstr "Ten que recibir %sB de arquivos de fonte.\n"
 
-#: cmdline/apt-get.cc:2460
+#: cmdline/apt-get.cc:2399
 #, c-format
 msgid "Fetch source %s\n"
 msgstr "Obter fonte %s\n"
 
-#: cmdline/apt-get.cc:2493
+#: cmdline/apt-get.cc:2432
 msgid "Failed to fetch some archives."
-msgstr "Non se puido recibir algúns arquivos."
+msgstr "Non se puideron obter algúns arquivos."
 
-#: cmdline/apt-get.cc:2523
+#: cmdline/apt-get.cc:2462
 #, c-format
 msgid "Skipping unpack of already unpacked source in %s\n"
-msgstr "Omítese o desempaquetamento do código fonte xa desempaquetado en %s\n"
+msgstr "Omítese o desempaquetado do código fonte xa desempaquetado en %s\n"
 
-#: cmdline/apt-get.cc:2535
+#: cmdline/apt-get.cc:2474
 #, c-format
 msgid "Unpack command '%s' failed.\n"
-msgstr "Fallou a orde de desempaquetamento \"%s\".\n"
+msgstr "Fallou a orde de desempaquetado «%s».\n"
 
-#: cmdline/apt-get.cc:2536
+#: cmdline/apt-get.cc:2475
 #, c-format
 msgid "Check if the 'dpkg-dev' package is installed.\n"
-msgstr "Comprobe que o paquete \"dpkg-dev\" estea instalado.\n"
+msgstr "Comprobe que o paquete «dpkg-dev» estea instalado.\n"
 
-#: cmdline/apt-get.cc:2553
+#: cmdline/apt-get.cc:2492
 #, c-format
 msgid "Build command '%s' failed.\n"
-msgstr "Fallou a codificación de %s.\n"
+msgstr "Fallou a orde de construción de «%s».\n"
 
-#: cmdline/apt-get.cc:2573
+#: cmdline/apt-get.cc:2512
 msgid "Child process failed"
 msgstr "O proceso fillo fallou"
 
-#: cmdline/apt-get.cc:2589
+#: cmdline/apt-get.cc:2528
 msgid "Must specify at least one package to check builddeps for"
 msgstr ""
-"Ten que especificar alomenos un paquete para lle comprobar as dependencias "
+"Ten que especificar polo menos un paquete para comprobarlle as dependencias "
 "de compilación"
 
-#: cmdline/apt-get.cc:2620
+#: cmdline/apt-get.cc:2559
 #, c-format
 msgid "Unable to get build-dependency information for %s"
-msgstr "Non se puido obter a información de dependencias de compilación de %s"
+msgstr "Non é posíbel obter a información de dependencias de compilación de %s"
 
-#: cmdline/apt-get.cc:2640
+#: cmdline/apt-get.cc:2579
 #, c-format
 msgid "%s has no build depends.\n"
 msgstr "%s non ten dependencias de compilación.\n"
 
-#: cmdline/apt-get.cc:2691
+#: cmdline/apt-get.cc:2630
 #, c-format
 msgid ""
 "%s dependency for %s cannot be satisfied because the package %s cannot be "
 "found"
 msgstr ""
-"A dependencia \"%s\" de %s non se pode satisfacer porque non se pode atopar "
-"paquete %s"
+"A dependencia «%s» de %s non se pode satisfacer porque non se pode atopar o "
+"paquete %s"
 
-#: cmdline/apt-get.cc:2744
+#: cmdline/apt-get.cc:2683
 #, c-format
 msgid ""
 "%s dependency for %s cannot be satisfied because no available versions of "
 "package %s can satisfy version requirements"
 msgstr ""
-"A dependencia \"%s\" de %s non se pode satisfacer porque ningunha versión "
-"dispoñible do paquete %s satisfai os requirimentos de versión"
+"A dependencia «%s» de %s non se pode satisfacer porque ningunha versión "
+"dispoñíbel do paquete %s satisfai os requirimentos de versión"
 
-#: cmdline/apt-get.cc:2780
+#: cmdline/apt-get.cc:2719
 #, c-format
 msgid "Failed to satisfy %s dependency for %s: Installed package %s is too new"
 msgstr ""
-"Non se puido satisfacer a dependencia \"%s\" de %s: O paquete instalado %s é "
-"novo de máis"
+"Non foi posíbel satisfacer a dependencia «%s» de %s: O paquete instalado %s "
+"é novo de máis"
 
-#: cmdline/apt-get.cc:2807
+#: cmdline/apt-get.cc:2746
 #, c-format
 msgid "Failed to satisfy %s dependency for %s: %s"
-msgstr "Non se puido satisfacer a dependencia \"%s\" de %s: %s"
+msgstr "Non foi posíbel satisfacer a dependencia «%s» de %s: %s"
 
-#: cmdline/apt-get.cc:2823
+#: cmdline/apt-get.cc:2762
 #, c-format
 msgid "Build-dependencies for %s could not be satisfied."
-msgstr "Non se puideron satisfacer as dependencias de compilación de %s."
+msgstr "Non se puideron satisfacer as dependencias de construción de %s."
 
-#: cmdline/apt-get.cc:2828
+#: cmdline/apt-get.cc:2767
 msgid "Failed to process build dependencies"
-msgstr "Non se puido procesar as dependencias de compilación"
-
-#: cmdline/apt-get.cc:2921 cmdline/apt-get.cc:2933
-#, fuzzy, c-format
-msgid "Changelog for %s (%s)"
-msgstr "A conectar a %s (%s)"
+msgstr "Non se puideron procesar as dependencias de construción"
 
-#: cmdline/apt-get.cc:3052
+#: cmdline/apt-get.cc:2798
 msgid "Supported modules:"
-msgstr "Módulos soportados:"
+msgstr "Módulos admitidos:"
 
-#: cmdline/apt-get.cc:3093
+#: cmdline/apt-get.cc:2839
 #, fuzzy
+#| msgid ""
+#| "Usage: apt-get [options] command\n"
+#| "       apt-get [options] install|remove pkg1 [pkg2 ...]\n"
+#| "       apt-get [options] source pkg1 [pkg2 ...]\n"
+#| "\n"
+#| "apt-get is a simple command line interface for downloading and\n"
+#| "installing packages. The most frequently used commands are update\n"
+#| "and install.\n"
+#| "\n"
+#| "Commands:\n"
+#| "   update - Retrieve new lists of packages\n"
+#| "   upgrade - Perform an upgrade\n"
+#| "   install - Install new packages (pkg is libc6 not libc6.deb)\n"
+#| "   remove - Remove packages\n"
+#| "   autoremove - Remove automatically all unused packages\n"
+#| "   purge - Remove packages and config files\n"
+#| "   source - Download source archives\n"
+#| "   build-dep - Configure build-dependencies for source packages\n"
+#| "   dist-upgrade - Distribution upgrade, see apt-get(8)\n"
+#| "   dselect-upgrade - Follow dselect selections\n"
+#| "   clean - Erase downloaded archive files\n"
+#| "   autoclean - Erase old downloaded archive files\n"
+#| "   check - Verify that there are no broken dependencies\n"
+#| "   markauto - Mark the given packages as automatically installed\n"
+#| "   unmarkauto - Mark the given packages as manually installed\n"
+#| "   changelog - Download and display the changelog for the given package\n"
+#| "   download - Download the binary package into the current directory\n"
+#| "\n"
+#| "Options:\n"
+#| "  -h  This help text.\n"
+#| "  -q  Loggable output - no progress indicator\n"
+#| "  -qq No output except for errors\n"
+#| "  -d  Download only - do NOT install or unpack archives\n"
+#| "  -s  No-act. Perform ordering simulation\n"
+#| "  -y  Assume Yes to all queries and do not prompt\n"
+#| "  -f  Attempt to correct a system with broken dependencies in place\n"
+#| "  -m  Attempt to continue if archives are unlocatable\n"
+#| "  -u  Show a list of upgraded packages as well\n"
+#| "  -b  Build the source package after fetching it\n"
+#| "  -V  Show verbose version numbers\n"
+#| "  -c=? Read this configuration file\n"
+#| "  -o=? Set an arbitrary configuration option, eg -o dir::cache=/tmp\n"
+#| "See the apt-get(8), sources.list(5) and apt.conf(5) manual\n"
+#| "pages for more information and options.\n"
+#| "                       This APT has Super Cow Powers.\n"
 msgid ""
 "Usage: apt-get [options] command\n"
 "       apt-get [options] install|remove pkg1 [pkg2 ...]\n"
@@ -1375,8 +1453,6 @@ msgid ""
 "   check - Verify that there are no broken dependencies\n"
 "   markauto - Mark the given packages as automatically installed\n"
 "   unmarkauto - Mark the given packages as manually installed\n"
-"   changelog - Download and display the changelog for the given package\n"
-"   download - Download the binary package into the current directory\n"
 "\n"
 "Options:\n"
 "  -h  This help text.\n"
@@ -1396,57 +1472,65 @@ msgid ""
 "pages for more information and options.\n"
 "                       This APT has Super Cow Powers.\n"
 msgstr ""
-"Emprego: apt-get [opcións] orde\n"
-"         apt-get [opcións] install|remove paq1 [paq2 ...]\n"
-"         apt-get [opcións] source paq1 [paq2 ...]\n"
+"Uso: apt-get [opcións] orde\n"
+"       apt-get [opcións] install|remove paquete1 [paquete2 ...]\n"
+"       apt-get [opcións] source paquete1 [paquete2 ...]\n"
 "\n"
-"apt-get é unha simple interface de liña de ordes para descargar e instalar\n"
-"paquetes. As ordes empregadas máis habitualmente son \"update\" e \"install"
-"\".\n"
+"apt-get é unha sinxela interface de liña de ordes para a descarga e\n"
+"instalación de paquetes. As ordes empregadas con máis frecuencia\n"
+"son actualizadas e instaladas. \n"
 "\n"
 "Ordes:\n"
-"   update - Descarga novas listas de paquetes\n"
-"   upgrade - Realiza unha actualización\n"
-"   install - Instala novos paquetes (o paquete chámase libc6, non libc6."
-"deb)\n"
-"   remove - Elimina paquetes\n"
-"   autoremove - Elimina automaticamente os paquetes non usados\n"
-"   purge - Elimina e purga paquetes\n"
-"   source - Descarga arquivos de código fonte\n"
-"   build-dep - Configura as dependencias de compilación dos paquetes fonte\n"
-"   dist-upgrade - Actualiza a distribución, consulte apt-get(8)\n"
+"   update - Recupera unha nova lista de paquetes\n"
+"   upgrade - Executa unha actualización\n"
+"   install - Instala novos paquetes (o paquete é libc6 non libc6.deb)\n"
+"   remove - Retira paquetes\n"
+"   autoremove - Retira automaticamente todos os paquetes sen uso\n"
+"   purge - Retira paquetes e ficheiros de configuración\n"
+"   source - Descarga os arquivos de fontes\n"
+"   build-dep - Configura as dependencias para paquetes de fontes\n"
+"   dist-upgrade - Actualiza a distribución, vexa apt-get(8)\n"
 "   dselect-upgrade - Segue as seleccións de dselect\n"
-"   clean - Borra os arquivos descargados\n"
-"   autoclean - Borra os arquivos descargados antigos\n"
-"   check - Comproba que non haxa dependencias rotas\n"
+"   clean - Borra os arquivos de ficheiros\n"
+"   autoclean - Borra os arquivos de ficheiros antigos\n"
+"   check - Comproba que non haxa dependencias sen cumprir\n"
+"   markauto - Marca os paquetes como instalados automaticamente\n"
+"   unmarkauto - Marca os paquetes como instalados manualmente\n"
+"   changelog - Descarga e mostra o rexistro de cambios para o paquete "
+"proposto\n"
+"   download - Descarga o paquete binario no directorio actual\n"
 "\n"
-"Opcións:\n"
-"  -h  Este texto de axuda.\n"
-"  -q  Saída que se pode rexistrar - sen indicador de progreso\n"
-"  -qq Sen saída agás polos erros\n"
-"  -d  Só descarga - NON instala nin desempaqueta os arquivos\n"
-"  -s  Non actuar. Realiza unha simulación de ordeamento\n"
-"  -y  Supón unha resposta afirmativa a tódalas preguntas sen amosalas\n"
-"  -f  Tenta corrixir un sistema con dependencias rotas\n"
-"  -m  Tenta continuar se non se poden localizar os arquivos\n"
-"  -u  Tamén amosa unha lista de paquetes actualizados\n"
-"  -b  Compila o paquete fonte despois de o descargar\n"
-"  -V  Amosa números de versión detallados\n"
-"  -c=? Le este ficheiro de configuración\n"
-"  -o=? Establece unha opción de configuración, por exemplo: -o dir::cache=/"
+"Opçións:\n"
+"  -h  Este texto de axuda\n"
+"  -q  Saída rexistrábel - sen indicador de progreso\n"
+"  -qq Sen saída, agás para os erros \n"
+"  -d  Só descarga - NON instala ou desempaqueta os arquivos\n"
+"  -s  Sen acción. Fai unha simulación\n"
+"  -y  Asume Si para todas as preguntas e non as presenta\n"
+"  -f  Tenta corrixir un sistema con dependencias non cumpridas\n"
+"  -m  Tenta continuar se os arquivos non son localizados\n"
+"  -u  Mostra tamén unha lista de paquetes actualizados\n"
+"  -b  Constrúe o paquete fonte despois de descargalo\n"
+"  -V  Mostra os números detallados da versión\n"
+"  -c=? Ler este ficheiro de configuración\n"
+"  -o=? Define unha opción arbitraria de configuración, p.ex. -o dir::cache=/"
 "tmp\n"
-"Consulte as páxinas de manual apt-get(8), sources.list(5) e apt.conf(5) "
-"para\n"
-"máis información e opcións.\n"
-"                  Este APT ten Poderes de Supervaca.\n"
+"Vexa as páxinas do manual sobre apt-get(8), sources.list(5) e apt.conf(5) \n"
+"para obter mais información e opcións\n"
+"                       Este APT ten poderes da Super Vaca.\n"
 
-#: cmdline/apt-get.cc:3254
+#: cmdline/apt-get.cc:2995
 msgid ""
 "NOTE: This is only a simulation!\n"
 "      apt-get needs root privileges for real execution.\n"
 "      Keep also in mind that locking is deactivated,\n"
 "      so don't depend on the relevance to the real current situation!"
 msgstr ""
+"NOTA: Isto é só unha simulación!\n"
+"      apt-get precisa de privilexios de administrador para executarse "
+"realmente.\n"
+"      Lembre tamén que o bloqueo está desactivado,\n"
+"      polo que non debe depender da relevancia da situación actual real."
 
 #: cmdline/acqprogress.cc:57
 msgid "Hit "
@@ -1467,12 +1551,12 @@ msgstr "Err "
 #: cmdline/acqprogress.cc:137
 #, c-format
 msgid "Fetched %sB in %s (%sB/s)\n"
-msgstr "Recibíronse %sB en %s (%sB/s)\n"
+msgstr "Obtivéronse %sB en %s (%sB/s)\n"
 
 #: cmdline/acqprogress.cc:227
 #, c-format
 msgid " [Working]"
-msgstr " [A traballar]"
+msgstr " [Traballando]"
 
 #: cmdline/acqprogress.cc:283
 #, c-format
@@ -1482,12 +1566,12 @@ msgid ""
 "in the drive '%s' and press enter\n"
 msgstr ""
 "Cambio de soporte: introduza o disco etiquetado\n"
-" \"%s\"\n"
-"na unidade \"%s\" e prema Intro\n"
+" «%s»\n"
+"na unidade «%s» e prema Intro\n"
 
 #: cmdline/apt-sortpkgs.cc:86
 msgid "Unknown package record!"
-msgstr "¡Rexistro de paquete descoñecido!"
+msgstr "Rexistro de paquete descoñecido!"
 
 #: cmdline/apt-sortpkgs.cc:150
 msgid ""
@@ -1504,19 +1588,19 @@ msgid ""
 msgstr ""
 "Emprego: apt-sortpkgs [opcións] fich1 [fich2 ...]\n"
 "\n"
-"apt-sortpkgs é unha ferramenta simple para ordear ficheiros de paquetes.\n"
+"apt-sortpkgs é unha ferramenta simple para ordenar ficheiros de paquetes.\n"
 "A opción -s emprégase para indicar o tipo de ficheiro que é.\n"
 "\n"
 "Opcións:\n"
 "  -h   Este texto de axuda\n"
-"  -s   Emprega ordeamento por ficheiros fonte\n"
+"  -s   Emprega ordenamento por ficheiros fonte\n"
 "  -c=? Le este ficheiro de configuración\n"
-"  -o=? Establece unha opción de configuración; por exemplo, -o dir::cache=/"
+"  -o=? Estabelece unha opción de configuración; por exemplo, -o dir::cache=/"
 "tmp\n"
 
 #: dselect/install:32
 msgid "Bad default setting!"
-msgstr "¡Configuración por defecto incorrecta!"
+msgstr "Configuración predeterminada incorrecta!"
 
 #: dselect/install:51 dselect/install:83 dselect/install:87 dselect/install:94
 #: dselect/install:105 dselect/update:45
@@ -1525,69 +1609,69 @@ msgstr "Prema Intro para continuar."
 
 #: dselect/install:91
 msgid "Do you want to erase any previously downloaded .deb files?"
-msgstr "¿Quere borrar os ficheiros .deb descargados anteriormente?"
+msgstr "Quere borrar os ficheiros .deb descargados anteriormente?"
 
 #: dselect/install:101
-#, fuzzy
 msgid "Some errors occurred while unpacking. Packages that were installed"
-msgstr "Houbo algúns erros ao desempaquetar. Vanse configurar os paquetes"
+msgstr ""
+"Ocorreron algúns erros ao desempaquetar,  Os paquetes que se instalaron"
 
 #: dselect/install:102
-#, fuzzy
 msgid "will be configured. This may result in duplicate errors"
-msgstr "que se instalaron. Isto pode producir erros duplicados ou erros"
+msgstr "serán configurados, Isto pode dar erros de duplicación"
 
 #: dselect/install:103
 msgid "or errors caused by missing dependencies. This is OK, only the errors"
-msgstr "causados por dependencias incumpridas. Isto é normal, só os erros"
+msgstr ""
+"ou erros causados por dependencias incumpridas. Isto é normal, só os erros"
 
 #: dselect/install:104
 msgid ""
 "above this message are important. Please fix them and run [I]nstall again"
 msgstr ""
-"que hai enriba desta mensaxe son importantes. Arránxeos e volva instalar."
+"que hai enriba desta mensaxe son importantes. Arránxeos e volva instalar."
 
 #: dselect/update:30
 msgid "Merging available information"
-msgstr "A mesturar a información sobre paquetes dispoñibles"
+msgstr "Mesturando a información sobre paquetes dispoñíbeis"
 
 #: apt-inst/contrib/extracttar.cc:114
 msgid "Failed to create pipes"
-msgstr "Non se puido crear as canles"
+msgstr "Non foi posíbel crear as canles"
 
 #: apt-inst/contrib/extracttar.cc:141
 msgid "Failed to exec gzip "
-msgstr "Non se puido executar gzip"
+msgstr "Non foi posíbel executar gzip "
 
-#: apt-inst/contrib/extracttar.cc:178 apt-inst/contrib/extracttar.cc:208
+#: apt-inst/contrib/extracttar.cc:178 apt-inst/contrib/extracttar.cc:204
 msgid "Corrupted archive"
-msgstr "Arquivo corrompido"
+msgstr "Arquivo danado"
 
 #: apt-inst/contrib/extracttar.cc:193
 msgid "Tar checksum failed, archive corrupted"
-msgstr "A suma de comprobación do arquivo tar non coincide, está corrompido"
+msgstr "A suma de comprobación do arquivo tar non coincide, está danado"
 
-#: apt-inst/contrib/extracttar.cc:300
+#: apt-inst/contrib/extracttar.cc:296
 #, c-format
 msgid "Unknown TAR header type %u, member %s"
 msgstr "Tipo de cabeceira TAR %u descoñecido, membro %s"
 
 #: apt-inst/contrib/arfile.cc:70
 msgid "Invalid archive signature"
-msgstr "Sinatura de arquivo non válida"
+msgstr "Sinatura de arquivo incorrecta"
 
 #: apt-inst/contrib/arfile.cc:78
 msgid "Error reading archive member header"
-msgstr "Erro ao ler a cabeceira do membro do arquivo"
+msgstr "Produciuse un erro ao ler a cabeceira do membro do arquivo"
 
 #: apt-inst/contrib/arfile.cc:90
-#, fuzzy, c-format
+#, c-format
 msgid "Invalid archive member header %s"
-msgstr "Cabeceira do membro do arquivo non válida"
+msgstr "Cabeceira do membro do arquivo incorrecta %s"
 
 #: apt-inst/contrib/arfile.cc:102
 msgid "Invalid archive member header"
-msgstr "Cabeceira do membro do arquivo non válida"
+msgstr "Cabeceira do membro do arquivo incorrecta"
 
 #: apt-inst/contrib/arfile.cc:128
 msgid "Archive is too short"
@@ -1595,7 +1679,7 @@ msgstr "O arquivo é curto de máis"
 
 #: apt-inst/contrib/arfile.cc:132
 msgid "Failed to read the archive headers"
-msgstr "Non se puido ler as cabeceiras dos arquivos"
+msgstr "Non foi posíbel ler as cabeceiras dos arquivos"
 
 #: apt-inst/filelist.cc:380
 msgid "DropNode called on still linked node"
@@ -1603,15 +1687,15 @@ msgstr "Chamouse a DropNode nun nodo aínda ligado"
 
 #: apt-inst/filelist.cc:412
 msgid "Failed to locate the hash element!"
-msgstr "Non se puido atopar o elemento hash"
+msgstr "Non foi posíbel atopar o elemento hash"
 
 #: apt-inst/filelist.cc:459
 msgid "Failed to allocate diversion"
-msgstr "Non se puido reservar un desvío"
+msgstr "Non foi posíbel reservar un desvío"
 
 #: apt-inst/filelist.cc:464
 msgid "Internal error in AddDiversion"
-msgstr "Erro interno en AddDiversion"
+msgstr "Produciuse un erro interno en AddDiversion"
 
 #: apt-inst/filelist.cc:477
 #, c-format
@@ -1631,12 +1715,12 @@ msgstr "Ficheiro de configuración %s/%s duplicado"
 #: apt-inst/dirstream.cc:41 apt-inst/dirstream.cc:46 apt-inst/dirstream.cc:49
 #, c-format
 msgid "Failed to write file %s"
-msgstr "Non se puido gravar o ficheiro %s"
+msgstr "Non foi posíbel escribir no ficheiro «%s»"
 
 #: apt-inst/dirstream.cc:92 apt-inst/dirstream.cc:100
 #, c-format
 msgid "Failed to close file %s"
-msgstr "Non se puido pechar o ficheiro %s"
+msgstr "Non foi posíbel pechar o ficheiro %s"
 
 #: apt-inst/extract.cc:93 apt-inst/extract.cc:164
 #, c-format
@@ -1646,7 +1730,7 @@ msgstr "A ruta %s é longa de máis"
 #: apt-inst/extract.cc:124
 #, c-format
 msgid "Unpacking %s more than once"
-msgstr "A desempaquetar %s máis dunha vez"
+msgstr "Desempaquetando %s máis dunha vez"
 
 #: apt-inst/extract.cc:134
 #, c-format
@@ -1656,7 +1740,7 @@ msgstr "O directorio %s está desviado"
 #: apt-inst/extract.cc:144
 #, c-format
 msgid "The package is trying to write to the diversion target %s/%s"
-msgstr "O paquete tenta gravar no destino do desvío %s/%s"
+msgstr "O paquete tenta escribir no destino do desvío %s/%s"
 
 #: apt-inst/extract.cc:154 apt-inst/extract.cc:297
 msgid "The diversion path is too long"
@@ -1669,77 +1753,77 @@ msgstr "O directorio %s estase a substituír por algo que non é un directorio"
 
 #: apt-inst/extract.cc:280
 msgid "Failed to locate node in its hash bucket"
-msgstr "Non se puido atopar o nodo no seu caldeiro hash"
+msgstr "Non foi posíbel atopar o nodo no seu contedor hash"
 
 #: apt-inst/extract.cc:284
 msgid "The path is too long"
 msgstr "A ruta é longa de máis"
 
-#: apt-inst/extract.cc:412
+#: apt-inst/extract.cc:414
 #, c-format
 msgid "Overwrite package match with no version for %s"
 msgstr "Coincidencia na sobrescritura sen versión para %s"
 
-#: apt-inst/extract.cc:429
+#: apt-inst/extract.cc:431
 #, c-format
 msgid "File %s/%s overwrites the one in the package %s"
 msgstr "O ficheiro %s/%s sobrescribe o do paquete %s"
 
 #. Only warn if there are no sources.list.d.
 #. Only warn if there is no sources.list file.
-#: apt-inst/extract.cc:462 apt-pkg/contrib/cdromutl.cc:179
-#: apt-pkg/contrib/fileutl.cc:334 apt-pkg/sourcelist.cc:204
-#: apt-pkg/sourcelist.cc:210 apt-pkg/acquire.cc:450 apt-pkg/init.cc:103
-#: apt-pkg/init.cc:111 apt-pkg/clean.cc:33 apt-pkg/policy.cc:309
+#: apt-inst/extract.cc:464 apt-pkg/contrib/cdromutl.cc:179
+#: apt-pkg/contrib/fileutl.cc:329 apt-pkg/sourcelist.cc:204
+#: apt-pkg/sourcelist.cc:210 apt-pkg/acquire.cc:450 apt-pkg/init.cc:100
+#: apt-pkg/init.cc:108 apt-pkg/clean.cc:33 apt-pkg/policy.cc:307
 #: methods/mirror.cc:87
 #, c-format
 msgid "Unable to read %s"
-msgstr "Non se pode ler %s"
+msgstr "Non é posíbel ler %s"
 
-#: apt-inst/extract.cc:489
+#: apt-inst/extract.cc:491
 #, c-format
 msgid "Unable to stat %s"
-msgstr "Non se atopou %s"
+msgstr "Non é posíbel determinar o estado %s"
 
 #: apt-inst/deb/dpkgdb.cc:51 apt-inst/deb/dpkgdb.cc:57
 #, c-format
 msgid "Failed to remove %s"
-msgstr "Non se puido eliminar %s"
+msgstr "Non foi posíbel retirar %s"
 
 #: apt-inst/deb/dpkgdb.cc:106 apt-inst/deb/dpkgdb.cc:108
 #, c-format
 msgid "Unable to create %s"
-msgstr "Non se pode crear %s"
+msgstr "Non é posíbel crear %s"
 
 #: apt-inst/deb/dpkgdb.cc:114
 #, c-format
 msgid "Failed to stat %sinfo"
-msgstr "Non se atopou %sinfo"
+msgstr "Non foi posíbel atopar %sinfo"
 
 #: apt-inst/deb/dpkgdb.cc:119
 msgid "The info and temp directories need to be on the same filesystem"
 msgstr ""
 "Os directorios info e temp teñen que estar no mesmo sistema de ficheiros"
 
-#: apt-inst/deb/dpkgdb.cc:135 apt-pkg/pkgcachegen.cc:1074
-#: apt-pkg/pkgcachegen.cc:1178 apt-pkg/pkgcachegen.cc:1184
-#: apt-pkg/pkgcachegen.cc:1330
+#: apt-inst/deb/dpkgdb.cc:135 apt-pkg/pkgcachegen.cc:1070
+#: apt-pkg/pkgcachegen.cc:1174 apt-pkg/pkgcachegen.cc:1180
+#: apt-pkg/pkgcachegen.cc:1326
 msgid "Reading package lists"
-msgstr "A ler as listas de paquetes"
+msgstr "Lendo as listas de paquetes"
 
 #: apt-inst/deb/dpkgdb.cc:176
 #, c-format
 msgid "Failed to change to the admin dir %sinfo"
-msgstr "Non se puido cambiar ao directorio de administración %sinfo"
+msgstr "Non foi posíbel cambiar ao directorio de administración %sinfo"
 
 #: apt-inst/deb/dpkgdb.cc:197 apt-inst/deb/dpkgdb.cc:351
 #: apt-inst/deb/dpkgdb.cc:444
 msgid "Internal error getting a package name"
-msgstr "Erro interno ao obter un nome de paquete"
+msgstr "Produciuse un erro interno ao obter un nome de paquete"
 
 #: apt-inst/deb/dpkgdb.cc:201 apt-inst/deb/dpkgdb.cc:382
 msgid "Reading file listing"
-msgstr "A ler a lista de ficheiros"
+msgstr "Lendo a lista de ficheiros"
 
 #: apt-inst/deb/dpkgdb.cc:212
 #, c-format
@@ -1748,45 +1832,45 @@ msgid ""
 "then make it empty and immediately re-install the same version of the "
 "package!"
 msgstr ""
-"Non se puido abrir o ficheiro de listas \"%sinfo/%s\". Se non pode "
+"Non foi posíbel abrir o ficheiro de listas «%sinfo/%s». Se non pode "
 "recuperalo, baléireo e reinstale a mesma versión do paquete."
 
 #: apt-inst/deb/dpkgdb.cc:225 apt-inst/deb/dpkgdb.cc:238
 #, c-format
 msgid "Failed reading the list file %sinfo/%s"
-msgstr "Non se puido ler o ficheiro de listas %sinfo/%s"
+msgstr "Non foi posíbel ler o ficheiro de listas %sinfo/%s"
 
 #: apt-inst/deb/dpkgdb.cc:262
 msgid "Internal error getting a node"
-msgstr "Erro interno ao obter un nodo"
+msgstr "Produciuse un erro interno ao obter un nodo"
 
 #: apt-inst/deb/dpkgdb.cc:305
 #, c-format
 msgid "Failed to open the diversions file %sdiversions"
-msgstr "Non se puido abrir o ficheiro de desvíos %sdiversions"
+msgstr "Non foi posíbel abrir o ficheiro de desvíos %sdiversions"
 
 #: apt-inst/deb/dpkgdb.cc:320
 msgid "The diversion file is corrupted"
-msgstr "O ficheiro de desvíos está corrompido"
+msgstr "O ficheiro de desvíos está danado"
 
 #: apt-inst/deb/dpkgdb.cc:327 apt-inst/deb/dpkgdb.cc:332
 #: apt-inst/deb/dpkgdb.cc:337
 #, c-format
 msgid "Invalid line in the diversion file: %s"
-msgstr "Liña non válida no ficheiro de desvíos: %s"
+msgstr "Liña incorrecta no ficheiro de desvíos: %s"
 
 #: apt-inst/deb/dpkgdb.cc:358
 msgid "Internal error adding a diversion"
-msgstr "Erro interno ao engadir un desvío"
+msgstr "Produciuse un erro interno ao engadir un desvío"
 
 #: apt-inst/deb/dpkgdb.cc:379
 msgid "The pkg cache must be initialized first"
-msgstr "Ten que se inicializar a caché de paquetes primeiro"
+msgstr "Antes ten que inicializarse a caché de paquetes"
 
 #: apt-inst/deb/dpkgdb.cc:439
 #, c-format
 msgid "Failed to find a Package: header, offset %lu"
-msgstr "Non se puido atopar unha cabeceira Package:, desprazamento %lu"
+msgstr "Non foi posíbel atopar unha cabeceira Package:, desprazamento %lu"
 
 #: apt-inst/deb/dpkgdb.cc:461
 #, c-format
@@ -1796,73 +1880,71 @@ msgstr "Sección ConfFile incorrecta no ficheiro de estado. Desprazamento %lu"
 #: apt-inst/deb/dpkgdb.cc:466
 #, c-format
 msgid "Error parsing MD5. Offset %lu"
-msgstr "Erro ao analizar o MD5. Desprazamento %lu"
+msgstr "Produciuse un erro ao analizar o MD5. Desprazamento %lu"
 
 #: apt-inst/deb/debfile.cc:38 apt-inst/deb/debfile.cc:43
 #, c-format
 msgid "This is not a valid DEB archive, missing '%s' member"
-msgstr "Este non é un arquivo DEB válido, falla o membro \"%s\""
+msgstr "Este non é un arquivo DEB correcto, falta o membro «%s»"
 
 #: apt-inst/deb/debfile.cc:50
 #, c-format
 msgid "This is not a valid DEB archive, it has no '%s', '%s' or '%s' member"
 msgstr ""
-"Este non é un arquivo DEB válido, non ten un membro \"%s\", \"%s\" ou \"%s\""
+"Este non é un arquivo DEB correcto, non ten un membro «%s», «%s» ou «%s»"
 
 #: apt-inst/deb/debfile.cc:110
 #, c-format
 msgid "Couldn't change to %s"
-msgstr "Non se puido cambiar a %s"
+msgstr "Non foi posíbel cambiar a %s"
 
 #: apt-inst/deb/debfile.cc:140
+#, fuzzy
+#| msgid "Internal error, could not locate member %s"
 msgid "Internal error, could not locate member"
-msgstr "Erro interno, non se puido atopar un membro"
+msgstr "Produciuse un erro interno, non foi posíbel atopar o membro %s"
 
 #: apt-inst/deb/debfile.cc:173
 msgid "Failed to locate a valid control file"
-msgstr "Non se puido atopar un ficheiro de control válido"
+msgstr "Non foi posíbel atopar un ficheiro de control correcto"
 
 #: apt-inst/deb/debfile.cc:258
 msgid "Unparsable control file"
-msgstr "Ficheiro de control non analizable"
-
-#: methods/bzip2.cc:60 methods/gzip.cc:52
-msgid "Empty files can't be valid archives"
-msgstr ""
+msgstr "Ficheiro de control non analizábel"
 
-#: methods/bzip2.cc:64
+#: methods/bzip2.cc:65
 #, c-format
 msgid "Couldn't open pipe for %s"
-msgstr "Non se puido abrir unha canle para %s"
+msgstr "Non foi posíbel abrir unha canle para %s"
 
-#: methods/bzip2.cc:108
+#: methods/bzip2.cc:109
 #, c-format
 msgid "Read error from %s process"
 msgstr "Erro de lectura do proceso %s"
 
-#: methods/bzip2.cc:140 methods/bzip2.cc:149 methods/copy.cc:43
-#: methods/gzip.cc:92 methods/gzip.cc:101 methods/rred.cc:524
-#: methods/rred.cc:533
+#: methods/bzip2.cc:141 methods/bzip2.cc:150 methods/copy.cc:43
+#: methods/gzip.cc:93 methods/gzip.cc:102 methods/rred.cc:486
+#: methods/rred.cc:495
 msgid "Failed to stat"
-msgstr "Non se atopou"
+msgstr "Non foi posíbel determinar o estado"
 
-#: methods/bzip2.cc:146 methods/copy.cc:80 methods/gzip.cc:98
-#: methods/rred.cc:530
+#: methods/bzip2.cc:147 methods/copy.cc:80 methods/gzip.cc:99
+#: methods/rred.cc:492
 msgid "Failed to set modification time"
-msgstr "Non se puido estabrecer a hora de modificación"
+msgstr "Non foi posíbel estabelecer a hora de modificación"
 
 #: methods/cdrom.cc:199
 #, c-format
 msgid "Unable to read the cdrom database %s"
-msgstr "Non se puido ler a base de datos de CD-ROMs %s"
+msgstr "Non é posíbel ler a base de datos do CD-ROM %s"
 
 #: methods/cdrom.cc:208
 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 ""
-"Empregue apt-cdrom para que APT poida recoñecer este CD-ROM. Non se pode "
-"empregar apt-get update para engadir CD-ROMs"
+"Empregue apt-cdrom para que APT poida recoñecer este CD-ROM. Non foi posíbel "
+"empregar apt-get update para engadir un CD-ROM"
 
 #: methods/cdrom.cc:218
 msgid "Wrong CD-ROM"
@@ -1871,7 +1953,7 @@ msgstr "CD-ROM incorrecto"
 #: methods/cdrom.cc:245
 #, c-format
 msgid "Unable to unmount the CD-ROM in %s, it may still be in use."
-msgstr "Non se puido desmontar o CD-ROM de %s, pode estarse empregando aínda."
+msgstr "Non é posíbel desmontar o CD-ROM de %s, pode estarse empregando aínda."
 
 #: methods/cdrom.cc:250
 msgid "Disk not found."
@@ -1883,20 +1965,20 @@ msgstr "Non se atopou o ficheiro"
 
 #: methods/file.cc:44
 msgid "Invalid URI, local URIS must not start with //"
-msgstr "URI non válido, os URIs locais non deben comezar por //"
+msgstr "URI incorrecto, os URI locais non deben comezar por //"
 
 #. Login must be before getpeername otherwise dante won't work.
 #: methods/ftp.cc:168
 msgid "Logging in"
-msgstr "A se identificar"
+msgstr "Identificándose"
 
 #: methods/ftp.cc:174
 msgid "Unable to determine the peer name"
-msgstr "Non se puido determinar o nome do outro extremo"
+msgstr "Non é posíbel determinar o nome do outro extremo"
 
 #: methods/ftp.cc:179
 msgid "Unable to determine the local name"
-msgstr "Non se puido determinar o nome local"
+msgstr "Non é posíbel determinar o nome local"
 
 #: methods/ftp.cc:210 methods/ftp.cc:238
 #, c-format
@@ -1906,12 +1988,12 @@ msgstr "O servidor rexeitou a conexión e dixo: %s"
 #: methods/ftp.cc:216
 #, c-format
 msgid "USER failed, server said: %s"
-msgstr "A orde USER fallou, o servidor dixo: %s"
+msgstr "Fallou a orde USER, o servidor dixo: %s"
 
 #: methods/ftp.cc:223
 #, c-format
 msgid "PASS failed, server said: %s"
-msgstr "A orde PASS fallou, o servidor dixo: %s"
+msgstr "Fallou a orde PASS, o servidor dixo: %s"
 
 #: methods/ftp.cc:243
 msgid ""
@@ -1924,69 +2006,69 @@ msgstr ""
 #: methods/ftp.cc:271
 #, c-format
 msgid "Login script command '%s' failed, server said: %s"
-msgstr "A orde do script de conexión \"%s\" fallou, o servidor dixo: %s"
+msgstr "Fallou a orde do script de acceso «%s», o servidor dixo: %s"
 
 #: methods/ftp.cc:297
 #, c-format
 msgid "TYPE failed, server said: %s"
-msgstr "A orde TYPE fallou, o servidor dixo: %s"
+msgstr "Fallou a orde TYPE, o servidor dixo: %s"
 
 #: methods/ftp.cc:335 methods/ftp.cc:446 methods/rsh.cc:183 methods/rsh.cc:226
 msgid "Connection timeout"
-msgstr "Tempo esgotado para a conexión"
+msgstr "Esgotouse o tempo para a conexión"
 
 #: methods/ftp.cc:341
 msgid "Server closed the connection"
 msgstr "O servidor pechou a conexión"
 
-#: methods/ftp.cc:344 apt-pkg/contrib/fileutl.cc:811 methods/rsh.cc:190
+#: methods/ftp.cc:344 apt-pkg/contrib/fileutl.cc:802 methods/rsh.cc:190
 msgid "Read error"
-msgstr "Erro de lectura"
+msgstr "Produciuse un erro de lectura"
 
 #: methods/ftp.cc:351 methods/rsh.cc:197
 msgid "A response overflowed the buffer."
-msgstr "Unha resposta desbordou o buffer."
+msgstr "Unha resposta desbordou o búfer."
 
 #: methods/ftp.cc:368 methods/ftp.cc:380
 msgid "Protocol corruption"
-msgstr "Corrupción do protocolo"
+msgstr "Dano no protocolo"
 
-#: methods/ftp.cc:452 apt-pkg/contrib/fileutl.cc:853 methods/rsh.cc:232
+#: methods/ftp.cc:452 apt-pkg/contrib/fileutl.cc:844 methods/rsh.cc:232
 msgid "Write error"
-msgstr "Erro de escritura"
+msgstr "Produciuse un erro de escritura"
 
 #: methods/ftp.cc:692 methods/ftp.cc:698 methods/ftp.cc:734
 msgid "Could not create a socket"
-msgstr "Non se puido crear un socket"
+msgstr "Non é posíbel crear un socket"
 
 #: methods/ftp.cc:703
 msgid "Could not connect data socket, connection timed out"
 msgstr ""
-"Non se puido conectar o socket de datos, o tempo esgotouse para a conexión"
+"Non é posíbel conectar o socket de datos, o tempo esgotouse para a conexión"
 
 #: methods/ftp.cc:709
 msgid "Could not connect passive socket."
-msgstr "Non se puido conectar o socket pasivo."
+msgstr "Non é posíbel conectar o socket pasivo."
 
 #: methods/ftp.cc:727
 msgid "getaddrinfo was unable to get a listening socket"
-msgstr "getaddrinfo non puido obter un socket para escoitar"
+msgstr "getaddrinfo non puido obter un socket no que atender"
 
 #: methods/ftp.cc:741
 msgid "Could not bind a socket"
-msgstr "Non se puido ligar un socket"
+msgstr "Non é posíbel ligar un socket"
 
 #: methods/ftp.cc:745
 msgid "Could not listen on the socket"
-msgstr "Non se puido escoitar no socket"
+msgstr "Non é posíbel escoitar no socket"
 
 #: methods/ftp.cc:752
 msgid "Could not determine the socket's name"
-msgstr "Non se puido determinar o nome do socket"
+msgstr "Non é posíbel determinar o nome do socket"
 
 #: methods/ftp.cc:784
 msgid "Unable to send PORT command"
-msgstr "Non se puido enviar a orde PORT"
+msgstr "Non é posíbel enviar a orde PORT"
 
 #: methods/ftp.cc:794
 #, c-format
@@ -1996,7 +2078,7 @@ msgstr "Familia de enderezos %u (AF_*) descoñecida"
 #: methods/ftp.cc:803
 #, c-format
 msgid "EPRT failed, server said: %s"
-msgstr "A orde EPRT fallou, o servidor dixo: %s"
+msgstr "Produciuse un fallou na orde EPRT, o servidor dixo: %s"
 
 #: methods/ftp.cc:823
 msgid "Data socket connect timed out"
@@ -2004,16 +2086,16 @@ msgstr "A conexión do socket de datos esgotou o tempo"
 
 #: methods/ftp.cc:830
 msgid "Unable to accept connection"
-msgstr "Non se pode aceptar a conexión"
+msgstr "Non é posíbel aceptar a conexión"
 
 #: methods/ftp.cc:869 methods/http.cc:1006 methods/rsh.cc:302
 msgid "Problem hashing file"
-msgstr "Problema ao calcular o hash do ficheiro"
+msgstr "Xurdiu un problema ao calcular o hash do ficheiro"
 
 #: methods/ftp.cc:882
 #, c-format
 msgid "Unable to fetch file, server said '%s'"
-msgstr "Non se pode obter o ficheiro, o servidor dixo \"%s\""
+msgstr "Non é posíbel obter o ficheiro, o servidor dixo «%s»"
 
 #: methods/ftp.cc:897 methods/rsh.cc:321
 msgid "Data socket timed out"
@@ -2022,7 +2104,7 @@ msgstr "O socket de datos esgotou o tempo"
 #: methods/ftp.cc:927
 #, c-format
 msgid "Data transfer failed, server said '%s'"
-msgstr "A transferencia de datos fallou, o servidor dixo \"%s\""
+msgstr "Produciuse un fallou na transferencia de datos, o servidor dixo «%s»"
 
 #. Get the files information
 #: methods/ftp.cc:1004
@@ -2031,12 +2113,12 @@ msgstr "Petición"
 
 #: methods/ftp.cc:1116
 msgid "Unable to invoke "
-msgstr "Non se puido chamar a "
+msgstr "Non é posíbel chamar a "
 
 #: methods/connect.cc:71
 #, c-format
 msgid "Connecting to %s (%s)"
-msgstr "A conectar a %s (%s)"
+msgstr "Conectando a %s (%s)"
 
 #: methods/connect.cc:82
 #, c-format
@@ -2046,98 +2128,97 @@ msgstr "[IP: %s %s]"
 #: methods/connect.cc:89
 #, c-format
 msgid "Could not create a socket for %s (f=%u t=%u p=%u)"
-msgstr "Non se puido crear un socket para %s (f=%u t=%u p=%u)"
+msgstr "Non foi posíbel crear un socket para %s (f=%u t=%u p=%u)"
 
 #: methods/connect.cc:95
 #, c-format
 msgid "Cannot initiate the connection to %s:%s (%s)."
-msgstr "Non se pode iniciar a conexión a %s:%s (%s)."
+msgstr "Non é posíbel iniciar a conexión a %s:%s (%s)."
 
 #: methods/connect.cc:103
 #, c-format
 msgid "Could not connect to %s:%s (%s), connection timed out"
-msgstr "Non se puido conectar a %s:%s (%s), a conexión esgotou o tempo"
+msgstr "Non foi posíbel conectar a %s:%s (%s), a conexión esgotou o tempo"
 
 #: methods/connect.cc:121
 #, c-format
 msgid "Could not connect to %s:%s (%s)."
-msgstr "Non se puido conectar a %s:%s (%s)."
+msgstr "Non foi posíbel conectar a %s:%s (%s)."
 
 #. We say this mainly because the pause here is for the
 #. ssh connection that is still going
 #: methods/connect.cc:149 methods/rsh.cc:424
 #, c-format
 msgid "Connecting to %s"
-msgstr "A conectar a %s"
+msgstr "Conectando a %s"
 
 #: methods/connect.cc:168 methods/connect.cc:187
 #, c-format
 msgid "Could not resolve '%s'"
-msgstr "Non se puido resolver \"%s\""
+msgstr "Non foi posíbel atopar «%s»"
 
 #: methods/connect.cc:193
 #, c-format
 msgid "Temporary failure resolving '%s'"
-msgstr "Fallo temporal ao resolver \"%s\""
+msgstr "Produciuse un fallo temporal ao buscar «%s»"
 
 #: methods/connect.cc:196
-#, fuzzy, c-format
+#, c-format
 msgid "Something wicked happened resolving '%s:%s' (%i - %s)"
-msgstr "Algo estraño ocorreu ao resolver \"%s:%s\" (%i)"
+msgstr "Aconteceu algo malo, buscando «%s:%s» (%i - %s)"
 
 #: methods/connect.cc:243
-#, fuzzy, c-format
+#, c-format
 msgid "Unable to connect to %s:%s:"
-msgstr "Non se pode conectar a %s %s:"
+msgstr "Non é posíbel conectar %s:%s:"
 
 #. TRANSLATOR: %s is the trusted keyring parts directory
 #: methods/gpgv.cc:71
-#, fuzzy, c-format
+#, c-format
 msgid "No keyring installed in %s."
-msgstr "A abortar a instalación."
+msgstr "Non ha ningún chaveiro instalado en %s."
 
 #: methods/gpgv.cc:163
 msgid ""
 "Internal error: Good signature, but could not determine key fingerprint?!"
 msgstr ""
-"Erro interno: Sinatura correcta, pero non se puido determinar a pegada "
+"Erro interno: Sinatura correcta, pero non foi posíbel determinar a pegada "
 "dixital da chave"
 
 #: methods/gpgv.cc:168
 msgid "At least one invalid signature was encountered."
-msgstr "Atopouse alomenos unha sinatura non válida."
+msgstr "Atopouse polo menos unha sinatura incorrecta."
 
 #: methods/gpgv.cc:172
-#, fuzzy
 msgid "Could not execute 'gpgv' to verify signature (is gpgv installed?)"
 msgstr ""
-"Non se puido executar \"%s\" para verificar a sinatura (¿está gpgv "
-"instalado?)"
+"Non é posíbel executar «gpgv» para verificar a sinatura (Está instalado "
+"gpgv?)"
 
 #: methods/gpgv.cc:177
 msgid "Unknown error executing gpgv"
-msgstr "Erro descoñecido ao executar gpgv"
+msgstr "Produciuse un erro descoñecido ao executar gpgv"
 
 #: methods/gpgv.cc:211 methods/gpgv.cc:218
 msgid "The following signatures were invalid:\n"
-msgstr "As seguintes sinaturas non eran válidas:\n"
+msgstr "As seguintes sinaturas non eran correctas:\n"
 
 #: methods/gpgv.cc:225
 msgid ""
 "The following signatures couldn't be verified because the public key is not "
 "available:\n"
 msgstr ""
-"Non se puido verificar as seguintes sinaturas porque a chave pública non "
-"está dispoñible:\n"
+"Non se puideron verificar as seguintes sinaturas porque a chave pública non "
+"está dispoñíbel:\n"
 
 #: methods/http.cc:385
 msgid "Waiting for headers"
-msgstr "A agardar polas cabeceiras"
+msgstr "Agardando polas cabeceiras"
 
 #: methods/http.cc:531
 #, c-format
 msgid "Got a single header line over %u chars"
-msgstr "Recibiuse unha soa liña de cabeceira en %u caracteres"
+msgstr "Obtivose unha soa liña de cabeceira en %u caracteres"
 
 #: methods/http.cc:539
 msgid "Bad header line"
@@ -2145,23 +2226,24 @@ msgstr "Liña de cabeceira incorrecta"
 
 #: methods/http.cc:564 methods/http.cc:571
 msgid "The HTTP server sent an invalid reply header"
-msgstr "O servidor HTTP enviou unha cabeceira de resposta non válida"
+msgstr "O servidor HTTP enviou unha cabeceira de resposta incorrecta"
 
 #: methods/http.cc:600
 msgid "The HTTP server sent an invalid Content-Length header"
-msgstr "O servidor HTTP enviou unha cabeceira Content-Length non válida"
+msgstr ""
+"O servidor HTTP enviou unha cabeceira cunha lonxitude de contido incorrecta"
 
 #: methods/http.cc:615
 msgid "The HTTP server sent an invalid Content-Range header"
-msgstr "O servidor HTTP enviou unha cabeceira Content-Range non válida"
+msgstr "O servidor HTTP enviou unha cabeceira cun rango de contido incorrecto"
 
 #: methods/http.cc:617
 msgid "This HTTP server has broken range support"
-msgstr "Este servidor HTTP ten un soporte de rangos roto"
+msgstr "Este servidor HTTP ten a compatibilidade de rangos estragada"
 
 #: methods/http.cc:641
 msgid "Unknown date format"
-msgstr "Formato de data descoñecido"
+msgstr "Formato de datos descoñecido"
 
 #: methods/http.cc:799
 msgid "Select failed"
@@ -2173,27 +2255,28 @@ msgstr "A conexión esgotou o tempo"
 
 #: methods/http.cc:827
 msgid "Error writing to output file"
-msgstr "Erro ao escribir no ficheiro de saída"
+msgstr "Produciuse un erro ao escribir no ficheiro de saída"
 
 #: methods/http.cc:858
 msgid "Error writing to file"
-msgstr "Erro ao escribir nun ficheiro"
+msgstr "Produciuse un erro ao escribir nun ficheiro"
 
 #: methods/http.cc:886
 msgid "Error writing to the file"
-msgstr "Erro ao escribir no ficheiro"
+msgstr "Produciuse un erro ao escribir no ficheiro"
 
 #: methods/http.cc:900
 msgid "Error reading from server. Remote end closed connection"
-msgstr "Erro ao ler do servidor. O extremo remoto pechou a conexión"
+msgstr ""
+"Produciuse un erro ao ler do servidor. O extremo remoto pechou a conexión"
 
 #: methods/http.cc:902
 msgid "Error reading from server"
-msgstr "Erro ao ler do servidor"
+msgstr "Produciuse un erro ao ler do servidor"
 
-#: methods/http.cc:991 apt-pkg/contrib/mmap.cc:283
+#: methods/http.cc:991 apt-pkg/contrib/mmap.cc:281
 msgid "Failed to truncate file"
-msgstr "Non se puido truncar o ficheiro"
+msgstr "Non foi posíbel truncar o ficheiro"
 
 #: methods/http.cc:1160
 msgid "Bad header data"
@@ -2201,80 +2284,84 @@ msgstr "Datos da cabeceira incorrectos"
 
 #: methods/http.cc:1177 methods/http.cc:1232
 msgid "Connection failed"
-msgstr "A conexión fallou"
+msgstr "Produciuse un fallo na conexión"
 
 #: methods/http.cc:1324
 msgid "Internal error"
-msgstr "Erro interno"
+msgstr "Produciuse un erro interno"
 
 #: apt-pkg/contrib/mmap.cc:77
 msgid "Can't mmap an empty file"
-msgstr "Non se pode facer mmap sobre un ficheiro baleiro"
+msgstr "Non é posíbel facer mmap sobre un ficheiro baleiro"
 
 #: apt-pkg/contrib/mmap.cc:89
-#, fuzzy, c-format
+#, c-format
 msgid "Couldn't duplicate file descriptor %i"
-msgstr "Non se puido abrir unha canle para %s"
+msgstr "Non foi posíbel duplicar o descritor de ficheiro %i"
 
 #: apt-pkg/contrib/mmap.cc:97 apt-pkg/contrib/mmap.cc:250
 #, c-format
 msgid "Couldn't make mmap of %lu bytes"
-msgstr "Non se puido facer mmap de %lu bytes"
+msgstr "Non foi posíbel facer mmap de %lu bytes"
 
 #: apt-pkg/contrib/mmap.cc:124
-#, fuzzy
 msgid "Unable to close mmap"
-msgstr "Non se puido abrir %s"
+msgstr "Non é posíbel pechar mmap"
 
 #: apt-pkg/contrib/mmap.cc:152 apt-pkg/contrib/mmap.cc:180
-#, fuzzy
 msgid "Unable to synchronize mmap"
-msgstr "Non se puido chamar a "
+msgstr "Non é posíbel sincronizar mmap"
 
-#: apt-pkg/contrib/mmap.cc:302
+#: apt-pkg/contrib/mmap.cc:300
 #, c-format
 msgid ""
 "Dynamic MMap ran out of room. Please increase the size of APT::Cache-Limit. "
 "Current value: %lu. (man 5 apt.conf)"
 msgstr ""
+"Dynamic MMap executouse fora do lugar. Incremente o tamaño de APT::Cache-"
+"Limit. O valor actual é : %lu. (man 5 apt.conf)"
 
-#: apt-pkg/contrib/mmap.cc:401
+#: apt-pkg/contrib/mmap.cc:399
 #, c-format
 msgid ""
 "Unable to increase the size of the MMap as the limit of %lu bytes is already "
 "reached."
 msgstr ""
+"Non é posíbel aumentar o tamaño de MMap xa que o límite de %lu bytes xa foi "
+"acadado."
 
-#: apt-pkg/contrib/mmap.cc:404
+#: apt-pkg/contrib/mmap.cc:402
 msgid ""
 "Unable to increase size of the MMap as automatic growing is disabled by user."
 msgstr ""
+"Non é posíbel aumentar o tamaño de MMap xa que o crecemento automático foi "
+"desactivado polo usuario."
 
 #. d means days, h means hours, min means minutes, s means seconds
 #: apt-pkg/contrib/strutl.cc:371
 #, c-format
 msgid "%lid %lih %limin %lis"
-msgstr ""
+msgstr "%lid %lih %limin %lis"
 
 #. h means hours, min means minutes, s means seconds
 #: apt-pkg/contrib/strutl.cc:378
 #, c-format
 msgid "%lih %limin %lis"
-msgstr ""
+msgstr "%lih %limin %lis"
 
 #. min means minutes, s means seconds
 #: apt-pkg/contrib/strutl.cc:385
 #, c-format
 msgid "%limin %lis"
-msgstr ""
+msgstr "%limin %lis"
 
 #. s means seconds
 #: apt-pkg/contrib/strutl.cc:390
 #, c-format
 msgid "%lis"
-msgstr ""
+msgstr "%lis"
 
-#: apt-pkg/contrib/strutl.cc:1136
+#: apt-pkg/contrib/strutl.cc:1119
 #, c-format
 msgid "Selection %s not found"
 msgstr "Non se atopou a selección %s"
@@ -2282,72 +2369,76 @@ msgstr "Non se atopou a selección %s"
 #: apt-pkg/contrib/configuration.cc:452
 #, c-format
 msgid "Unrecognized type abbreviation: '%c'"
-msgstr "Abreviatura de tipo \"%c\" descoñecida"
+msgstr "Abreviatura de tipo «%c» descoñecida"
 
 #: apt-pkg/contrib/configuration.cc:510
 #, c-format
 msgid "Opening configuration file %s"
-msgstr "A abrir o ficheiro de configuración %s"
+msgstr "Abrindo o ficheiro de configuración %s"
 
 #: apt-pkg/contrib/configuration.cc:678
 #, c-format
 msgid "Syntax error %s:%u: Block starts with no name."
-msgstr "Erro de sintaxe %s:%u: O bloque comeza sen un nome."
+msgstr "Produciuse un erro de sintaxe %s:%u: O bloque comeza sen un nome."
 
 #: apt-pkg/contrib/configuration.cc:697
 #, c-format
 msgid "Syntax error %s:%u: Malformed tag"
-msgstr "Erro de sintaxe %s:%u: Etiqueta mal formada"
+msgstr "Produciuse un erro de sintaxe %s:%u: Etiqueta mal formada"
 
 #: apt-pkg/contrib/configuration.cc:714
 #, c-format
 msgid "Syntax error %s:%u: Extra junk after value"
-msgstr "Erro de sintaxe %s:%u: Lixo extra despois do valor"
+msgstr "Produciuse un erro de sintaxe %s:%u: Lixo extra despois do valor"
 
 #: apt-pkg/contrib/configuration.cc:754
 #, c-format
 msgid "Syntax error %s:%u: Directives can only be done at the top level"
-msgstr "Erro de sintaxe %s:%u: Só se poden facer directivas no nivel superior"
+msgstr ""
+"Produciuse un erro de sintaxe %s:%u: Só se poden facer directivas no nivel "
+"superior"
 
 #: apt-pkg/contrib/configuration.cc:761
 #, c-format
 msgid "Syntax error %s:%u: Too many nested includes"
-msgstr "Erro de sintaxe %s:%u: Includes aniñados de máis"
+msgstr "Produciuse un erro de sintaxe %s:%u: Includes aniñados de máis"
 
 #: apt-pkg/contrib/configuration.cc:765 apt-pkg/contrib/configuration.cc:770
 #, c-format
 msgid "Syntax error %s:%u: Included from here"
-msgstr "Erro de sintaxe %s:%u: Incluído de aquí"
+msgstr "Produciuse un erro de sintaxe %s:%u: Incluído de aquí"
 
 #: apt-pkg/contrib/configuration.cc:774
 #, c-format
 msgid "Syntax error %s:%u: Unsupported directive '%s'"
-msgstr "Erro de sintaxe %s:%u: Non se soporta a directiva \"%s\""
+msgstr "Produciuse un erro de sintaxe %s:%u: Non se admite a directiva «%s»"
 
 #: apt-pkg/contrib/configuration.cc:777
-#, fuzzy, c-format
+#, c-format
 msgid "Syntax error %s:%u: clear directive requires an option tree as argument"
-msgstr "Erro de sintaxe %s:%u: Só se poden facer directivas no nivel superior"
+msgstr ""
+"Produciuse un erro de sintaxe %s:%u: a directiva «clear» require unha árbore "
+"de opción como argumento"
 
 #: apt-pkg/contrib/configuration.cc:827
 #, c-format
 msgid "Syntax error %s:%u: Extra junk at end of file"
-msgstr "Erro de sintaxe %s:%u: Lixo extra á fin da liña"
+msgstr "Produciuse un erro de sintaxe %s:%u: Lixo extra á fin da liña"
 
 #: apt-pkg/contrib/progress.cc:153
 #, c-format
 msgid "%c%s... Error!"
-msgstr "%c%s... ¡Erro!"
+msgstr "%c%s... Erro!"
 
 #: apt-pkg/contrib/progress.cc:155
 #, c-format
 msgid "%c%s... Done"
-msgstr "%c%s... Rematado"
+msgstr "%c%s... Feito"
 
 #: apt-pkg/contrib/cmndline.cc:77
 #, c-format
 msgid "Command line option '%c' [from %s] is not known."
-msgstr "Non se coñece a opción de liña de ordes \"%c\" [de %s]."
+msgstr "Non se coñece a opción de liña de ordes «%c» [de %s]."
 
 #: apt-pkg/contrib/cmndline.cc:103 apt-pkg/contrib/cmndline.cc:111
 #: apt-pkg/contrib/cmndline.cc:119
@@ -2374,148 +2465,132 @@ msgstr ""
 #: apt-pkg/contrib/cmndline.cc:236
 #, c-format
 msgid "Option %s requires an integer argument, not '%s'"
-msgstr "A opción %s precisa dun argumento enteiro, non \"%s\""
+msgstr "A opción %s precisa dun argumento enteiro, non «%s»"
 
 #: apt-pkg/contrib/cmndline.cc:267
 #, c-format
 msgid "Option '%s' is too long"
-msgstr "A opción \"%s\" é longa de máis"
+msgstr "A opción «%s» é longa de máis"
 
 #: apt-pkg/contrib/cmndline.cc:300
 #, c-format
 msgid "Sense %s is not understood, try true or false."
-msgstr "O senso %s non se entende, probe \"true\" ou \"false\"."
+msgstr "O senso %s non se entende, probe «true» ou «false»."
 
 #: apt-pkg/contrib/cmndline.cc:350
 #, c-format
 msgid "Invalid operation %s"
-msgstr "Operación %s non válida"
+msgstr "Operación incorrecta: %s"
 
 #: apt-pkg/contrib/cdromutl.cc:52
 #, c-format
 msgid "Unable to stat the mount point %s"
-msgstr "Non se pode analizar o punto de montaxe %s"
+msgstr "Non é posíbel analizar o punto de montaxe %s"
 
 #: apt-pkg/contrib/cdromutl.cc:175 apt-pkg/contrib/cdromutl.cc:209
 #: apt-pkg/acquire.cc:456 apt-pkg/acquire.cc:481 apt-pkg/clean.cc:39
 #: methods/mirror.cc:93
 #, c-format
 msgid "Unable to change to %s"
-msgstr "Non se pode cambiar a %s"
+msgstr "Non é posíbel cambiar a %s"
 
 #: apt-pkg/contrib/cdromutl.cc:217
 msgid "Failed to stat the cdrom"
-msgstr "Non se puido analizar o CD-ROM"
+msgstr "Non foi posíbel analizar o CD-ROM"
 
-#: apt-pkg/contrib/fileutl.cc:159
+#: apt-pkg/contrib/fileutl.cc:154
 #, c-format
 msgid "Not using locking for read only lock file %s"
 msgstr "Non se empregan bloqueos para o ficheiro de bloqueo de só lectura %s"
 
-#: apt-pkg/contrib/fileutl.cc:164
+#: apt-pkg/contrib/fileutl.cc:159
 #, c-format
 msgid "Could not open lock file %s"
-msgstr "Non se puido abrir o ficheiro de bloqueo %s"
+msgstr "Non foi posíbel abrir o ficheiro de bloqueo %s"
 
-#: apt-pkg/contrib/fileutl.cc:182
+#: apt-pkg/contrib/fileutl.cc:177
 #, c-format
 msgid "Not using locking for nfs mounted lock file %s"
 msgstr "Non se empregan bloqueos para o ficheiro de bloqueo montado por NFS %s"
 
-#: apt-pkg/contrib/fileutl.cc:186
+#: apt-pkg/contrib/fileutl.cc:181
 #, c-format
 msgid "Could not get lock %s"
-msgstr "Non se puido obter o bloqueo %s"
+msgstr "Non foi posíbel obter o bloqueo %s"
 
-#: apt-pkg/contrib/fileutl.cc:326
+#: apt-pkg/contrib/fileutl.cc:321
 #, c-format
 msgid "List of files can't be created as '%s' is not a directory"
-msgstr ""
-
-#: apt-pkg/contrib/fileutl.cc:353
-#, c-format
-msgid "Ignoring '%s' in directory '%s' as it is not a regular file"
-msgstr ""
-
-#: apt-pkg/contrib/fileutl.cc:371
-#, c-format
-msgid "Ignoring file '%s' in directory '%s' as it has no filename extension"
-msgstr ""
+msgstr "A lista de ficheiros non pode ser creada como «%s» non é un directorio"
 
-#: apt-pkg/contrib/fileutl.cc:380
-#, c-format
-msgid ""
-"Ignoring file '%s' in directory '%s' as it has an invalid filename extension"
-msgstr ""
-
-#: apt-pkg/contrib/fileutl.cc:670
+#: apt-pkg/contrib/fileutl.cc:661
 #, c-format
 msgid "Waited for %s but it wasn't there"
 msgstr "Agardouse por %s pero non estaba alí"
 
-#: apt-pkg/contrib/fileutl.cc:682
+#: apt-pkg/contrib/fileutl.cc:673
 #, c-format
 msgid "Sub-process %s received a segmentation fault."
 msgstr "O subproceso %s recibiu un fallo de segmento."
 
-#: apt-pkg/contrib/fileutl.cc:684
-#, fuzzy, c-format
+#: apt-pkg/contrib/fileutl.cc:675
+#, c-format
 msgid "Sub-process %s received signal %u."
-msgstr "O subproceso %s recibiu un fallo de segmento."
+msgstr "O subproceso %s recibiu o sinal %u."
 
-#: apt-pkg/contrib/fileutl.cc:688
+#: apt-pkg/contrib/fileutl.cc:679
 #, c-format
 msgid "Sub-process %s returned an error code (%u)"
 msgstr "O subproceso %s devolveu un código de erro (%u)"
 
-#: apt-pkg/contrib/fileutl.cc:690
+#: apt-pkg/contrib/fileutl.cc:681
 #, c-format
 msgid "Sub-process %s exited unexpectedly"
 msgstr "O subproceso %s saíu de xeito inesperado"
 
-#: apt-pkg/contrib/fileutl.cc:755
+#: apt-pkg/contrib/fileutl.cc:746
 #, c-format
 msgid "Could not open file %s"
-msgstr "Non se puido abrir o ficheiro %s"
+msgstr "Non foi posíbel abrir o ficheiro %s"
 
-#: apt-pkg/contrib/fileutl.cc:772
-#, fuzzy, c-format
+#: apt-pkg/contrib/fileutl.cc:763
+#, c-format
 msgid "Could not open file descriptor %d"
-msgstr "Non se puido abrir unha canle para %s"
+msgstr "Non foi posíbel abrir o descritor de ficheiro %d"
 
-#: apt-pkg/contrib/fileutl.cc:832
+#: apt-pkg/contrib/fileutl.cc:823
 #, c-format
 msgid "read, still have %lu to read but none left"
 msgstr "lectura, aínda hai %lu para ler pero non queda ningún"
 
-#: apt-pkg/contrib/fileutl.cc:865
+#: apt-pkg/contrib/fileutl.cc:856
 #, c-format
 msgid "write, still have %lu to write but couldn't"
 msgstr "escritura, aínda hai %lu para escribir pero non se puido"
 
-#: apt-pkg/contrib/fileutl.cc:1001
-#, fuzzy, c-format
+#: apt-pkg/contrib/fileutl.cc:985
+#, c-format
 msgid "Problem closing the gzip file %s"
-msgstr "Problema ao pechar o ficheiro"
+msgstr "Produciuse un problema ao pechar o arquivo gzip %s"
 
-#: apt-pkg/contrib/fileutl.cc:1004
-#, fuzzy, c-format
+#: apt-pkg/contrib/fileutl.cc:988
+#, c-format
 msgid "Problem closing the file %s"
-msgstr "Problema ao pechar o ficheiro"
+msgstr "Produciuse un problema ao pechar o ficheiro %s"
 
-#: apt-pkg/contrib/fileutl.cc:1009
-#, fuzzy, c-format
+#: apt-pkg/contrib/fileutl.cc:993
+#, c-format
 msgid "Problem renaming the file %s to %s"
-msgstr "Problema ao sincronizar o ficheiro"
+msgstr "Produciuse un problema ao renomear o ficheiro %s a %s"
 
-#: apt-pkg/contrib/fileutl.cc:1020
-#, fuzzy, c-format
+#: apt-pkg/contrib/fileutl.cc:1004
+#, c-format
 msgid "Problem unlinking the file %s"
-msgstr "Problema ao borrar o ficheiro"
+msgstr "Produciuse un problema ao desligar o ficheiro %s"
 
-#: apt-pkg/contrib/fileutl.cc:1033
+#: apt-pkg/contrib/fileutl.cc:1017
 msgid "Problem syncing the file"
-msgstr "Problema ao sincronizar o ficheiro"
+msgstr "Produciuse un problema ao sincronizar o ficheiro"
 
 #: apt-pkg/pkgcache.cc:145
 msgid "Empty package cache"
@@ -2523,20 +2598,20 @@ msgstr "Caché de paquetes baleira"
 
 #: apt-pkg/pkgcache.cc:151
 msgid "The package cache file is corrupted"
-msgstr "O ficheiro de caché de paquetes está corrompido"
+msgstr "O ficheiro de caché de paquetes está danado"
 
 #: apt-pkg/pkgcache.cc:156
 msgid "The package cache file is an incompatible version"
-msgstr "O ficheiro de caché de paquetes é unha versión incompatible"
+msgstr "O ficheiro de caché de paquetes é unha versión incompatíbel"
 
 #: apt-pkg/pkgcache.cc:161
 #, c-format
 msgid "This APT does not support the versioning system '%s'"
-msgstr "Este APT non soporta o sistema de versionamento \"%s\""
+msgstr "Este APT non admite o sistema de versionado «%s»"
 
 #: apt-pkg/pkgcache.cc:166
 msgid "The package cache was built for a different architecture"
-msgstr "A caché de paquetes construiuse para unha arquitectura diferente"
+msgstr "A caché de paquetes construíuse para unha arquitectura diferente"
 
 #: apt-pkg/pkgcache.cc:293
 msgid "Depends"
@@ -2556,7 +2631,7 @@ msgstr "Recomenda"
 
 #: apt-pkg/pkgcache.cc:294
 msgid "Conflicts"
-msgstr "Conflicto con"
+msgstr "Conflitos"
 
 #: apt-pkg/pkgcache.cc:294
 msgid "Replaces"
@@ -2568,11 +2643,11 @@ msgstr "Fai obsoleto a"
 
 #: apt-pkg/pkgcache.cc:295
 msgid "Breaks"
-msgstr "Rompe"
+msgstr "Estraga"
 
 #: apt-pkg/pkgcache.cc:295
 msgid "Enhances"
-msgstr ""
+msgstr "Mellora"
 
 #: apt-pkg/pkgcache.cc:306
 msgid "important"
@@ -2596,7 +2671,7 @@ msgstr "extra"
 
 #: apt-pkg/depcache.cc:125 apt-pkg/depcache.cc:154
 msgid "Building dependency tree"
-msgstr "A construír a árbore de dependencias"
+msgstr "Construindo a árbore de dependencias"
 
 #: apt-pkg/depcache.cc:126
 msgid "Candidate versions"
@@ -2608,17 +2683,17 @@ msgstr "Xeración de dependencias"
 
 #: apt-pkg/depcache.cc:175 apt-pkg/depcache.cc:208 apt-pkg/depcache.cc:212
 msgid "Reading state information"
-msgstr "A ler a información do estado"
+msgstr "Lendo a información do estado"
 
 #: apt-pkg/depcache.cc:237
 #, c-format
 msgid "Failed to open StateFile %s"
-msgstr "Non se puido abrir o ficheiro de estado %s"
+msgstr "Non foi posíbel abrir o ficheiro de estado %s"
 
 #: apt-pkg/depcache.cc:243
 #, c-format
 msgid "Failed to write temporary StateFile %s"
-msgstr "Non se puido gravar o ficheiro de estado temporal %s"
+msgstr "Non foi posíbel gravar o ficheiro de estado temporal %s"
 
 #: apt-pkg/depcache.cc:922
 #, c-format
@@ -2628,82 +2703,86 @@ msgstr ""
 #: apt-pkg/tagfile.cc:102
 #, c-format
 msgid "Unable to parse package file %s (1)"
-msgstr "Non se pode analizar o ficheiro de paquetes %s (1)"
+msgstr "Non é posíbel analizar o ficheiro de paquetes %s (1)"
 
 #: apt-pkg/tagfile.cc:189
 #, c-format
 msgid "Unable to parse package file %s (2)"
-msgstr "Non se pode analizar o ficheiro de paquetes %s (2)"
+msgstr "Non é posíbel analizar o ficheiro de paquetes %s (2)"
 
 #: apt-pkg/sourcelist.cc:92
-#, fuzzy, c-format
+#, c-format
 msgid "Malformed line %lu in source list %s ([option] unparseable)"
-msgstr "Liña %lu mal formada na lista de fontes %s (análise de dist)"
+msgstr ""
+"Liña %lu mal construída na lista de fontes %s ([opción] non analizábel)"
 
 #: apt-pkg/sourcelist.cc:95
-#, fuzzy, c-format
+#, c-format
 msgid "Malformed line %lu in source list %s ([option] too short)"
-msgstr "Liña %lu mal formada na lista de fontes %s (dist)"
+msgstr ""
+"Liña %lu mal construída na lista de fontes %s ([opción] demasiado curta)"
 
 #: apt-pkg/sourcelist.cc:106
-#, fuzzy, c-format
+#, c-format
 msgid "Malformed line %lu in source list %s ([%s] is not an assignment)"
-msgstr "Liña %lu mal formada na lista de fontes %s (análise de dist)"
+msgstr ""
+"Liña %lu mal construída na lista de fontes %s ([%s] non é unha asignación)"
 
 #: apt-pkg/sourcelist.cc:112
-#, fuzzy, c-format
+#, c-format
 msgid "Malformed line %lu in source list %s ([%s] has no key)"
-msgstr "Liña %lu mal formada na lista de fontes %s (análise de dist)"
+msgstr "Liña %lu mal construída na lista de fontes %s ([%s] non ten chave)"
 
 #: apt-pkg/sourcelist.cc:115
-#, fuzzy, c-format
+#, c-format
 msgid "Malformed line %lu in source list %s ([%s] key %s has no value)"
-msgstr "Liña %lu mal formada na lista de fontes %s (análise de dist)"
+msgstr ""
+"Liña %lu mal construída na lista de fontes %s ([%s] a chave %s non ten valor)"
 
 #: apt-pkg/sourcelist.cc:128
 #, c-format
 msgid "Malformed line %lu in source list %s (URI)"
-msgstr "Liña %lu mal formada na lista de fontes %s (URI)"
+msgstr "Liña %lu mal construída na lista de orixes %s (URI)"
 
 #: apt-pkg/sourcelist.cc:130
 #, c-format
 msgid "Malformed line %lu in source list %s (dist)"
-msgstr "Liña %lu mal formada na lista de fontes %s (dist)"
+msgstr "Liña %lu mal construída na lista de orixes %s (dist)"
 
 #: apt-pkg/sourcelist.cc:133
 #, c-format
 msgid "Malformed line %lu in source list %s (URI parse)"
-msgstr "Liña %lu mal formada na lista de fontes %s (análise de URI)"
+msgstr "Liña %lu mal construída na lista de orixes %s (análise de URI)"
 
 #: apt-pkg/sourcelist.cc:139
 #, c-format
 msgid "Malformed line %lu in source list %s (absolute dist)"
-msgstr "Liña %lu mal formada na lista de fontes %s (dist absoluta)"
+msgstr "Liña %lu mal construída na lista de orixes %s (dist absoluta)"
 
 #: apt-pkg/sourcelist.cc:146
 #, c-format
 msgid "Malformed line %lu in source list %s (dist parse)"
-msgstr "Liña %lu mal formada na lista de fontes %s (análise de dist)"
+msgstr "Liña %lu mal construída na lista de orixes %s (análise de dist)"
 
 #: apt-pkg/sourcelist.cc:244
 #, c-format
 msgid "Opening %s"
-msgstr "A abrir %s"
+msgstr "Abrindo %s"
 
 #: apt-pkg/sourcelist.cc:261 apt-pkg/cdrom.cc:438
 #, c-format
 msgid "Line %u too long in source list %s."
-msgstr "Liña %u longa de máis na lista de fontes %s."
+msgstr "Liña %u longa de máis na lista de orixes %s."
 
 #: apt-pkg/sourcelist.cc:281
 #, c-format
 msgid "Malformed line %u in source list %s (type)"
-msgstr "Liña %u mal formada na lista de fontes %s (tipo)"
+msgstr "Liña %u mal construída na lista de orixes %s (tipo)"
 
 #: apt-pkg/sourcelist.cc:285
 #, c-format
 msgid "Type '%s' is not known on line %u in source list %s"
-msgstr "O tipo \"%s\" non se coñece na liña %u da lista de fontes %s"
+msgstr "O tipo «%s» non se coñece na liña %u da lista de orixes %s"
 
 #: apt-pkg/packagemanager.cc:331 apt-pkg/packagemanager.cc:616
 #, c-format
@@ -2711,6 +2790,8 @@ msgid ""
 "Could not perform immediate configuration on '%s'. Please see man 5 apt.conf "
 "under APT::Immediate-Configure for details. (%d)"
 msgstr ""
+"Non foi posíbel facer a configuración inmediata en «%s». Vexa man 5 apt.conf "
+"baixo APT::Immediate-Configure para obter máis detalles. (%d)"
 
 #: apt-pkg/packagemanager.cc:452
 #, c-format
@@ -2719,8 +2800,8 @@ msgid ""
 "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 ""
-"Esta instalación ha requirir que se elimine temporalmente o paquete esencial "
-"%s debido a un bucle de Conflictos e Pre-dependencias. Isto adoita ser malo, "
+"Esta instalación requirirá que se retire temporalmente o paquete esencial %s "
+"por mor dun bucle de Conflitos e Pre-dependencias. Isto adoita ser malo, "
 "pero se o quere facer, active a opción APT::Force-LoopBreak."
 
 #: apt-pkg/packagemanager.cc:495
@@ -2729,71 +2810,78 @@ msgid ""
 "Could not perform immediate configuration on already unpacked '%s'. Please "
 "see man 5 apt.conf under APT::Immediate-Configure for details."
 msgstr ""
+"Non foi posíbel realizar a configuración inmediata no paquete, aínda sen "
+"desempaquetar, «%s». Vexa man 5 apt.conf baixo APT::Immediate-Configure para "
+"obter máis detalles."
 
 #: apt-pkg/pkgrecords.cc:32
 #, c-format
 msgid "Index file type '%s' is not supported"
-msgstr "O tipo de ficheiros de índices \"%s\" non está soportado"
+msgstr "O tipo de ficheiros de índices «%s» non está admitido"
 
-#: apt-pkg/algorithms.cc:313
+#: apt-pkg/algorithms.cc:292
 #, c-format
 msgid ""
 "The package %s needs to be reinstalled, but I can't find an archive for it."
 msgstr ""
-"O paquete %s ten que se reinstalar, pero non se pode atopar o seu arquivo."
+"O paquete %s ten que ser reinstalado, mais non é posíbel atopar o seu "
+"arquivo."
 
-#: apt-pkg/algorithms.cc:1239
+#: apt-pkg/algorithms.cc:1218
 msgid ""
 "Error, pkgProblemResolver::Resolve generated breaks, this may be caused by "
 "held packages."
 msgstr ""
-"Erro, pkgProblemResolver::Resolve xerou interrupcións, pode estar causado "
-"por paquetes retidos."
+"Erro, pkgProblemResolver::Resolve xerou interrupcións, isto pode estar "
+"causado por paquetes retidos."
 
-#: apt-pkg/algorithms.cc:1241
+#: apt-pkg/algorithms.cc:1220
 msgid "Unable to correct problems, you have held broken packages."
-msgstr "Non se poden resolver os problemas, ten retidos paquetes rotos."
+msgstr "Non é posíbel solucionar os problemas, ten retidos paquetes rotos."
 
-#: apt-pkg/algorithms.cc:1517 apt-pkg/algorithms.cc:1519
+#: apt-pkg/algorithms.cc:1496 apt-pkg/algorithms.cc:1498
 #, fuzzy
+#| msgid ""
+#| "Some index files failed to download. They have been ignored, or old ones "
+#| "used instead."
 msgid ""
-"Some index files failed to download. They have been ignored, or old ones "
+"Some index files failed to download, they have been ignored, or old ones "
 "used instead."
 msgstr ""
-"Non se puido descargar algúns ficheiros de índices; ignoráronse ou "
-"empregáronse uns vellos no seu lugar."
+"Algúns ficheiros de índice fallaron durante a descarga. Ignoráronse, ou "
+"foron utilizados algúns antigos no seu lugar"
 
 #: apt-pkg/acquire.cc:79
-#, fuzzy, c-format
+#, c-format
 msgid "List directory %spartial is missing."
-msgstr "O directorio de listas %spartial falla."
+msgstr "Non se atopa a lista de directorios %sparcial."
 
 #: apt-pkg/acquire.cc:83
-#, fuzzy, c-format
+#, c-format
 msgid "Archives directory %spartial is missing."
-msgstr "O directorio de arquivos %spartial falla."
+msgstr "Non se atopa a lista de arquivos %sparcial."
 
 #: apt-pkg/acquire.cc:91
-#, fuzzy, c-format
+#, c-format
 msgid "Unable to lock directory %s"
-msgstr "Non se puido bloquear o directorio de listas"
+msgstr "Non é posíbel bloquear o directorio %s"
 
 #. only show the ETA if it makes sense
 #. two days
 #: apt-pkg/acquire.cc:857
 #, c-format
 msgid "Retrieving file %li of %li (%s remaining)"
-msgstr "A obter o ficheiro %li de %li (fallan %s)"
+msgstr "Obtendo o ficheiro %li de %li (restan %s)"
 
 #: apt-pkg/acquire.cc:859
 #, c-format
 msgid "Retrieving file %li of %li"
-msgstr "A obter o ficheiro %li de %li"
+msgstr "Obtendo o ficheiro %li de %li"
 
 #: apt-pkg/acquire-worker.cc:110
 #, c-format
 msgid "The method driver %s could not be found."
-msgstr "Non se puido atopar o controlador de métodos %s."
+msgstr "Non foi posíbel atopar o controlador de métodos %s."
 
 #: apt-pkg/acquire-worker.cc:159
 #, c-format
@@ -2803,255 +2891,248 @@ msgstr "O método %s non se iniciou correctamente"
 #: apt-pkg/acquire-worker.cc:413
 #, c-format
 msgid "Please insert the disc labeled: '%s' in the drive '%s' and press enter."
-msgstr "Introduza o disco etiquetado: \"%s\" na unidade \"%s\" e prema Intro."
+msgstr "Insira o disco etiquetado: «%s» na unidade «%s» e prema Intro."
 
-#: apt-pkg/init.cc:146
+#: apt-pkg/init.cc:143
 #, c-format
 msgid "Packaging system '%s' is not supported"
-msgstr "O sistema de empaquetamento \"%s\" non está soportado"
+msgstr "O sistema de empaquetado «%s» non está admitido"
 
-#: apt-pkg/init.cc:162
+#: apt-pkg/init.cc:159
 msgid "Unable to determine a suitable packaging system type"
-msgstr "Non se puido determinar un tipo de sistema de empaquetamento axeitado"
+msgstr "Non é posíbel determinar un tipo de sistema de empaquetado axeitado"
 
 #: apt-pkg/clean.cc:56
 #, c-format
 msgid "Unable to stat %s."
-msgstr "Non se pode analizar %s."
+msgstr "Non é posíbel analizar %s."
 
 #: apt-pkg/srcrecords.cc:44
 msgid "You must put some 'source' URIs in your sources.list"
-msgstr "Debe introducir algúns URIs fonte no seu ficheiro sources.list"
+msgstr "Debe introducir algúns URI «orixe» no seu ficheiro sources.list"
 
 #: apt-pkg/cachefile.cc:84
 msgid "The package lists or status file could not be parsed or opened."
 msgstr ""
-"Non se puido analizar ou abrir as listas de paquetes ou ficheiro de estado."
+"Non foi posíbel analizar ou abrir as listas de paquetes ou ficheiro de "
+"estado."
 
 #: apt-pkg/cachefile.cc:88
 msgid "You may want to run apt-get update to correct these problems"
-msgstr "Pode querer executar apt-get update para corrixir estes problemas"
+msgstr "Pode querer executar «apt-get update» para corrixir estes problemas"
 
 #: apt-pkg/cachefile.cc:106
 msgid "The list of sources could not be read."
-msgstr "Non se puido ler a lista de orixes."
+msgstr "Non foi posíbel ler a lista de orixes."
 
-#: apt-pkg/policy.cc:346
-#, fuzzy, c-format
+#: apt-pkg/policy.cc:344
+#, c-format
 msgid "Invalid record in the preferences file %s, no Package header"
 msgstr ""
-"Rexistro non válido no ficheiro de preferencias, non hai unha cabeceira "
-"Package"
+"Rexistro incorrecto no ficheiro de preferencias %s; falta a cabeceira Package"
 
-#: apt-pkg/policy.cc:368
+#: apt-pkg/policy.cc:366
 #, c-format
 msgid "Did not understand pin type %s"
 msgstr "Non se entendeu o tipo de inmobilización %s"
 
-#: apt-pkg/policy.cc:376
+#: apt-pkg/policy.cc:374
 msgid "No priority (or zero) specified for pin"
 msgstr ""
 "Non se indicou unha prioridade (ou indicouse cero) para a inmobilización"
 
 #: apt-pkg/pkgcachegen.cc:80
 msgid "Cache has an incompatible versioning system"
-msgstr "A caché ten un sistema de versionamento incompatible"
+msgstr "A caché ten un sistema de versionado incompatíbel"
 
 #: apt-pkg/pkgcachegen.cc:198
 #, c-format
 msgid "Error occurred while processing %s (NewPackage)"
-msgstr "Ocorreu un erro ao procesar %s (NewPackage)"
+msgstr "Produciuse un erro ao procesar %s (NewPackage)"
 
 #: apt-pkg/pkgcachegen.cc:215
 #, c-format
 msgid "Error occurred while processing %s (UsePackage1)"
-msgstr "Ocorreu un erro ao procesar %s (UsePackage1)"
+msgstr "Produciuse un erro ao procesar %s (UsePackage1)"
 
 #: apt-pkg/pkgcachegen.cc:253
 #, c-format
 msgid "Error occurred while processing %s (NewFileDesc1)"
-msgstr "Ocorreu un erro ao procesar %s (NewFileDesc1)"
+msgstr "Produciuse un erro ao procesar %s (NewFileDesc1)"
 
 #: apt-pkg/pkgcachegen.cc:285
 #, c-format
 msgid "Error occurred while processing %s (UsePackage2)"
-msgstr "Ocorreu un erro ao procesar %s (UsePackage2)"
+msgstr "Produciuse un erro ao procesar %s (UsePackage2)"
 
 #: apt-pkg/pkgcachegen.cc:289
 #, c-format
 msgid "Error occurred while processing %s (NewFileVer1)"
-msgstr "Ocorreu un erro ao procesar %s (NewFileVer1)"
+msgstr "Produciuse un erro ao procesar %s (NewFileVer1)"
 
 #: apt-pkg/pkgcachegen.cc:306 apt-pkg/pkgcachegen.cc:316
 #: apt-pkg/pkgcachegen.cc:324
-#, fuzzy, c-format
+#, c-format
 msgid "Error occurred while processing %s (NewVersion%d)"
-msgstr "Ocorreu un erro ao procesar %s (NewVersion1)"
+msgstr "Produciuse un erro ao procesar %s (NewVersion%d)"
 
 #: apt-pkg/pkgcachegen.cc:320
 #, c-format
 msgid "Error occurred while processing %s (UsePackage3)"
-msgstr "Ocorreu un erro ao procesar %s (UsePackage3)"
+msgstr "Produciuse un erro ao procesar %s (UsePackage3)"
 
 #: apt-pkg/pkgcachegen.cc:353
 #, c-format
 msgid "Error occurred while processing %s (NewFileDesc2)"
-msgstr "Ocorreu un erro ao procesar %s (NewFileDesc2)"
+msgstr "Produciuse un erro ao procesar %s (NewFileDesc2)"
 
 #: apt-pkg/pkgcachegen.cc:360
 msgid "Wow, you exceeded the number of package names this APT is capable of."
-msgstr "Guau, superou o número de nomes de paquetes que este APT pode manexar."
+msgstr ""
+"Vaites!, superou o número de nomes de paquetes que este APT pode manexar."
 
 #: apt-pkg/pkgcachegen.cc:363
 msgid "Wow, you exceeded the number of versions this APT is capable of."
-msgstr "Guau, superou o número de versións que este APT pode manexar."
+msgstr "Vaites!, superou o número de versións que este APT pode manexar."
 
 #: apt-pkg/pkgcachegen.cc:366
 msgid "Wow, you exceeded the number of descriptions this APT is capable of."
-msgstr "Guau, superou o número de descricións que este APT pode manexar."
+msgstr "Vaites!, superou o número de descricións que este APT pode manexar."
 
 #: apt-pkg/pkgcachegen.cc:369
 msgid "Wow, you exceeded the number of dependencies this APT is capable of."
-msgstr "Guau, superou o número de dependencias que este APT pode manexar."
+msgstr "Vaites!, superou o número de dependencias que este APT pode manexar."
 
 #: apt-pkg/pkgcachegen.cc:398
 #, c-format
 msgid "Error occurred while processing %s (FindPkg)"
-msgstr "Ocorreu un erro ao procesar %s (FindPkg)"
+msgstr "Produciuse un erro ao procesar %s (FindPkg)"
 
 #: apt-pkg/pkgcachegen.cc:412
 #, c-format
 msgid "Error occurred while processing %s (CollectFileProvides)"
-msgstr "Ocorreu un erro ao procesar %s (CollectFileProvides)"
+msgstr "Produciuse un erro ao procesar %s (CollectFileProvides)"
 
 #: apt-pkg/pkgcachegen.cc:418
 #, c-format
 msgid "Package %s %s was not found while processing file dependencies"
-msgstr "Non se atopou o paquete %s %s ao procesar as dependencias de ficheiros"
+msgstr ""
+"Non foi posíbel atopar o paquete %s %s ao procesar as dependencias de "
+"ficheiros"
 
-#: apt-pkg/pkgcachegen.cc:986
+#: apt-pkg/pkgcachegen.cc:982
 #, c-format
 msgid "Couldn't stat source package list %s"
-msgstr "Non se atopou a lista de paquetes fonte %s"
+msgstr "Non foi posíbel atopar a lista de paquetes fonte %s"
 
-#: apt-pkg/pkgcachegen.cc:1091
+#: apt-pkg/pkgcachegen.cc:1087
 msgid "Collecting File Provides"
-msgstr "A recoller as provisións de ficheiros"
+msgstr "Recollendo as provisións de ficheiros"
 
-#: apt-pkg/pkgcachegen.cc:1269 apt-pkg/pkgcachegen.cc:1276
+#: apt-pkg/pkgcachegen.cc:1265 apt-pkg/pkgcachegen.cc:1272
 msgid "IO Error saving source cache"
-msgstr "Erro de E/S ao gravar a caché de fontes"
+msgstr "Produciuse un erro de E/S ao gravar a caché de fontes"
 
 #: apt-pkg/acquire-item.cc:136
 #, c-format
 msgid "rename failed, %s (%s -> %s)."
-msgstr "fallou o cambio de nome, %s (%s -> %s)."
+msgstr "non foi posíbel cambiar o nome, %s (%s -> %s)."
 
-#: apt-pkg/acquire-item.cc:629
+#: apt-pkg/acquire-item.cc:484
 msgid "MD5Sum mismatch"
-msgstr "Os MD5Sum non coinciden"
+msgstr "A MD5Sum non coincide"
 
-#: apt-pkg/acquire-item.cc:887 apt-pkg/acquire-item.cc:1781
-#: apt-pkg/acquire-item.cc:1924
+#: apt-pkg/acquire-item.cc:746 apt-pkg/acquire-item.cc:1574
+#: apt-pkg/acquire-item.cc:1717
 msgid "Hash Sum mismatch"
-msgstr "Os \"hashes\" non coinciden"
+msgstr "A sumas «hash» non coinciden"
 
-#: apt-pkg/acquire-item.cc:1341
-#, c-format
-msgid ""
-"Unable to find expected entry '%s' in Release file (Wrong sources.list entry "
-"or malformed file)"
-msgstr ""
-
-#: apt-pkg/acquire-item.cc:1356
-#, fuzzy, c-format
-msgid "Unable to find hash sum for '%s' in Release file"
-msgstr "Non se pode analizar o ficheiro de paquetes %s (1)"
-
-#: apt-pkg/acquire-item.cc:1415
+#: apt-pkg/acquire-item.cc:1244
 msgid "There is no public key available for the following key IDs:\n"
-msgstr ""
-"Non hai unha clave pública dispoñible para os seguintes IDs de clave:\n"
+msgstr "Non hai unha chave pública dispoñíbel para os seguintes ID de chave:\n"
 
 #. TRANSLATOR: The first %s is the URL of the bad Release file, the second is
 #. the time since then the file is invalid - formated in the same way as in
 #. the download progress display (e.g. 7d 3h 42min 1s)
-#: apt-pkg/acquire-item.cc:1452
+#: apt-pkg/acquire-item.cc:1281
 #, c-format
 msgid "Release file expired, ignoring %s (invalid since %s)"
-msgstr ""
+msgstr "Caducou o ficheiro de publicación, ignorando %s (non válido desde %s)"
 
-#: apt-pkg/acquire-item.cc:1473
+#: apt-pkg/acquire-item.cc:1302
 #, c-format
 msgid "Conflicting distribution: %s (expected %s but got %s)"
-msgstr ""
+msgstr "Conflito na distribución: %s (agardábase %s mais obtívose %s)"
 
-#: apt-pkg/acquire-item.cc:1506
+#: apt-pkg/acquire-item.cc:1328
 #, c-format
 msgid ""
 "A error occurred during the signature verification. The repository is not "
 "updated and the previous index files will be used. GPG error: %s: %s\n"
 msgstr ""
+"Produciuse un erro durante a verificación da sinatura. O repositorio non foi "
+"actualizado, empregaranse os ficheiros de índice anteriores. Erro de GPG: "
+"%s: %s\n"
 
-#: apt-pkg/acquire-item.cc:1515
+#: apt-pkg/acquire-item.cc:1337
 #, c-format
 msgid "GPG error: %s: %s"
-msgstr ""
+msgstr "Produciuse un erro de GPG: %s %s"
 
-#: apt-pkg/acquire-item.cc:1572
+#: apt-pkg/acquire-item.cc:1365
 #, c-format
 msgid ""
 "I wasn't able to locate a file for the %s package. This might mean you need "
 "to manually fix this package. (due to missing arch)"
 msgstr ""
-"Non se puido atopar un ficheiro para o paquete %s. Isto pode significar que "
-"ten que arranxar este paquete a man. (Falla a arquitectura)"
+"Non é posíbel atopar un ficheiro para o paquete %s. Isto pode significar que "
+"ten que arranxar este paquete a man. (Falta a arquitectura)"
 
-#: apt-pkg/acquire-item.cc:1631
+#: apt-pkg/acquire-item.cc:1424
 #, c-format
 msgid ""
-"I wasn't able to locate file for the %s package. This might mean you need to "
-"manually fix this package."
+"I wasn't able to locate a file for the %s package. This might mean you need "
+"to manually fix this package."
 msgstr ""
-"Non se puido atopar un ficheiro para o paquete %s. Isto pode significar que "
+"Non é posíbel atopar un ficheiro para o paquete %s. Isto pode significar que "
 "ten que arranxar este paquete a man."
 
-#: apt-pkg/acquire-item.cc:1686
+#: apt-pkg/acquire-item.cc:1479
 #, c-format
 msgid ""
 "The package index files are corrupted. No Filename: field for package %s."
 msgstr ""
-"Os ficheiros de índices de paquetes están corrompidos. Non hai un campo "
+"Os ficheiros de índices de paquetes están danados. Non hai un campo "
 "Filename: para o paquete %s."
 
-#: apt-pkg/acquire-item.cc:1773
+#: apt-pkg/acquire-item.cc:1566
 msgid "Size mismatch"
 msgstr "Os tamaños non coinciden"
 
 #: apt-pkg/indexrecords.cc:53
-#, fuzzy, c-format
+#, c-format
 msgid "Unable to parse Release file %s"
-msgstr "Non se pode analizar o ficheiro de paquetes %s (1)"
+msgstr "Non se puido analizar o ficheiro de publicación %s"
 
-#: apt-pkg/indexrecords.cc:63
-#, fuzzy, c-format
+#: apt-pkg/indexrecords.cc:60
+#, c-format
 msgid "No sections in Release file %s"
-msgstr "Nota, escóllese %s no canto de %s\n"
+msgstr "Non hai seccións no ficheiro de publicación %s"
 
-#: apt-pkg/indexrecords.cc:97
+#: apt-pkg/indexrecords.cc:94
 #, c-format
 msgid "No Hash entry in Release file %s"
-msgstr ""
+msgstr "Non hai entrada de Hash no ficheiro de publicación %s"
 
-#: apt-pkg/indexrecords.cc:110
-#, fuzzy, c-format
+#: apt-pkg/indexrecords.cc:107
+#, c-format
 msgid "Invalid 'Valid-Until' entry in Release file %s"
-msgstr "Liña non válida no ficheiro de desvíos: %s"
+msgstr "A entrada «Valid-Until» no ficheiro de publicación %s non é válida"
 
-#: apt-pkg/indexrecords.cc:125
-#, fuzzy, c-format
+#: apt-pkg/indexrecords.cc:122
+#, c-format
 msgid "Invalid 'Date' entry in Release file %s"
-msgstr "Non se pode analizar o ficheiro de paquetes %s (1)"
+msgstr "A entrada «Date» no ficheiro de publicación %s non é válida"
 
 #: apt-pkg/vendorlist.cc:66
 #, c-format
@@ -3064,43 +3145,43 @@ msgid ""
 "Using CD-ROM mount point %s\n"
 "Mounting CD-ROM\n"
 msgstr ""
-"A empregar o punto de montaxe de CD-ROMs %s\n"
-"A montar o CD-ROM\n"
+"Empregando o punto de montaxe de CD-ROMs %s\n"
+"Montando o CD-ROM\n"
 
 #: apt-pkg/cdrom.cc:527 apt-pkg/cdrom.cc:615
 msgid "Identifying.. "
-msgstr "A identificar.. "
+msgstr "Identificando... "
 
 #: apt-pkg/cdrom.cc:552
 #, c-format
 msgid "Stored label: %s\n"
-msgstr "Etiqueta armacenada: %s \n"
+msgstr "Etiqueta almacenada: %s\n"
 
 #: apt-pkg/cdrom.cc:559 apt-pkg/cdrom.cc:827
 msgid "Unmounting CD-ROM...\n"
-msgstr "A desmontar o CD-ROM...\n"
+msgstr "Desmontando o CD-ROM...\n"
 
 #: apt-pkg/cdrom.cc:578
 #, c-format
 msgid "Using CD-ROM mount point %s\n"
-msgstr "A empregar o punto de montaxe de CD-ROMs %s\n"
+msgstr "Empregando o punto de montaxe de CD-ROM %s\n"
 
 #: apt-pkg/cdrom.cc:596
 msgid "Unmounting CD-ROM\n"
-msgstr "A desmontar o CD-ROM\n"
+msgstr "Desmontando o CD-ROM\n"
 
 #: apt-pkg/cdrom.cc:600
 msgid "Waiting for disc...\n"
-msgstr "A agardar polo disco...\n"
+msgstr "Agardando polo disco...\n"
 
 #. Mount the new CDROM
 #: apt-pkg/cdrom.cc:608
 msgid "Mounting CD-ROM...\n"
-msgstr "A montar o CD-ROM...\n"
+msgstr "Montando o CD-ROM...\n"
 
 #: apt-pkg/cdrom.cc:626
 msgid "Scanning disc for index files..\n"
-msgstr "A buscar os ficheiros de índices no disco..\n"
+msgstr "Buscando os ficheiros de índices no disco..\n"
 
 #: apt-pkg/cdrom.cc:666
 #, c-format
@@ -3108,7 +3189,7 @@ msgid ""
 "Found %zu package indexes, %zu source indexes, %zu translation indexes and "
 "%zu signatures\n"
 msgstr ""
-"Atopáronse %zu índices de paquetes, %zu índices de fontes, %zu índices de "
+"Atopáronse %zu índices de paquetes, %zu índices de orixes, %zu índices de "
 "traducións e %zu sinaturas\n"
 
 #: apt-pkg/cdrom.cc:677
@@ -3116,15 +3197,17 @@ msgid ""
 "Unable to locate any package files, perhaps this is not a Debian Disc or the "
 "wrong architecture?"
 msgstr ""
+"Non é posíbel localizar ningún ficheiro de paquetes. É posíbel que non sexa "
+"un disco de Debian ou que a arquitectura sexa incorrecta."
 
 #: apt-pkg/cdrom.cc:703
 #, c-format
 msgid "Found label '%s'\n"
-msgstr "Atopouse a etiqueta \"%s\"\n"
+msgstr "Atopouse a etiqueta «%s»\n"
 
 #: apt-pkg/cdrom.cc:732
 msgid "That is not a valid name, try again.\n"
-msgstr "Ese non é un nome válido, volva tentalo.\n"
+msgstr "Ese non é un nome correcto, volva tentalo.\n"
 
 #: apt-pkg/cdrom.cc:748
 #, c-format
@@ -3133,81 +3216,83 @@ msgid ""
 "'%s'\n"
 msgstr ""
 "Este disco chámase: \n"
-"\"%s\"\n"
+"«%s»\n"
 
 #: apt-pkg/cdrom.cc:752
 msgid "Copying package lists..."
-msgstr "A copiar as listas de paquetes..."
+msgstr "Copiando as listas de paquetes..."
 
 #: apt-pkg/cdrom.cc:778
 msgid "Writing new source list\n"
-msgstr "A gravar a nova lista de fontes\n"
+msgstr "Escribindo a nova lista de orixes\n"
 
 #: apt-pkg/cdrom.cc:787
 msgid "Source list entries for this disc are:\n"
-msgstr "As entradas da lista de fontes deste disco son:\n"
+msgstr "As entradas da lista de orixes deste disco son:\n"
 
-#: apt-pkg/indexcopy.cc:270 apt-pkg/indexcopy.cc:909
+#: apt-pkg/indexcopy.cc:270 apt-pkg/indexcopy.cc:908
 #, c-format
 msgid "Wrote %i records.\n"
-msgstr "Graváronse %i rexistros.\n"
+msgstr "Escribíronse %i rexistros.\n"
 
-#: apt-pkg/indexcopy.cc:272 apt-pkg/indexcopy.cc:911
+#: apt-pkg/indexcopy.cc:272 apt-pkg/indexcopy.cc:910
 #, c-format
 msgid "Wrote %i records with %i missing files.\n"
-msgstr "Graváronse %i rexistros con %i ficheiros que fallan.\n"
+msgstr "Escribíronse %i rexistros con %i ficheiros que faltan.\n"
 
-#: apt-pkg/indexcopy.cc:275 apt-pkg/indexcopy.cc:914
+#: apt-pkg/indexcopy.cc:275 apt-pkg/indexcopy.cc:913
 #, c-format
 msgid "Wrote %i records with %i mismatched files\n"
-msgstr "Graváronse %i rexistros con %i ficheiros que non coinciden\n"
+msgstr "Escribíronse %i rexistros con %i ficheiros que non coinciden\n"
 
-#: apt-pkg/indexcopy.cc:278 apt-pkg/indexcopy.cc:917
+#: apt-pkg/indexcopy.cc:278 apt-pkg/indexcopy.cc:916
 #, c-format
 msgid "Wrote %i records with %i missing files and %i mismatched files\n"
 msgstr ""
-"Graváronse %i rexistros con %i ficheiros que fallan e %i ficheiros que non "
+"Escribíronse %i rexistros con %i ficheiros que faltan e %i ficheiros que non "
 "coinciden\n"
 
 #: apt-pkg/indexcopy.cc:537
-#, fuzzy, c-format
+#, c-format
 msgid "Skipping nonexistent file %s"
-msgstr "A abrir o ficheiro de configuración %s"
+msgstr "Omitindo o ficheiro inexistente %s"
 
 #: apt-pkg/indexcopy.cc:543
 #, c-format
 msgid "Can't find authentication record for: %s"
-msgstr ""
+msgstr "Non é posíbel atopar un rexistro de autenticación para: %s"
 
 #: apt-pkg/indexcopy.cc:549
-#, fuzzy, c-format
+#, c-format
 msgid "Hash mismatch for: %s"
-msgstr "Os \"hashes\" non coinciden"
+msgstr "Valor de hash non coincidente para: %s"
 
 #: apt-pkg/cacheset.cc:337
 #, c-format
 msgid "Release '%s' for '%s' was not found"
-msgstr "Non se atopou a versión \"%s\" de \"%s\""
+msgstr "Non se atopou a publicación «%s» de «%s»"
 
 #: apt-pkg/cacheset.cc:340
 #, c-format
 msgid "Version '%s' for '%s' was not found"
-msgstr "Non se atopou a versión \"%s\" de \"%s\""
+msgstr "Non se atopou a versión «%s» de «%s»"
 
 #: apt-pkg/cacheset.cc:447
-#, fuzzy, c-format
+#, c-format
 msgid "Couldn't find task '%s'"
-msgstr "Non se puido atopar a tarefa %s"
+msgstr "Non foi posíbel atopar a tarefa «%s»"
 
 #: apt-pkg/cacheset.cc:454
-#, fuzzy, c-format
+#, c-format
 msgid "Couldn't find any package by regex '%s'"
-msgstr "Non se puido atopar o paquete %s"
+msgstr "Non foi posíbel atopar ningún paquete pola expresión de rexistro «%s»"
 
 #: apt-pkg/cacheset.cc:467
 #, c-format
 msgid "Can't select versions from package '%s' as it is purely virtual"
 msgstr ""
+"Non é posíbel seleccionar distintas versións do paquete «%s» xa que é "
+"puramente virtual"
 
 #: apt-pkg/cacheset.cc:475 apt-pkg/cacheset.cc:483
 #, c-format
@@ -3215,144 +3300,162 @@ msgid ""
 "Can't select installed nor candidate version from package '%s' as it has "
 "neither of them"
 msgstr ""
+"Non é posíbel seleccionar nin a versión instalada nin a candidata do paquete "
+"«%s» xa que non ten ningunha delas"
 
 #: apt-pkg/cacheset.cc:491
 #, c-format
 msgid "Can't select newest version from package '%s' as it is purely virtual"
 msgstr ""
+"Non é posíbel seleccionar a versión máis recente do paquete «%s» xa que é "
+"puramente virtual"
 
 #: apt-pkg/cacheset.cc:499
 #, c-format
 msgid "Can't select candidate version from package %s as it has no candidate"
 msgstr ""
+"Non é posíbel seleccionar a versión candidata do paquete %s xa que non ten "
+"candidata"
 
 #: apt-pkg/cacheset.cc:507
 #, c-format
 msgid "Can't select installed version from package %s as it is not installed"
 msgstr ""
+"Non é posíbel seleccionar a versión instalada do paquete %s xa que non está "
+"instalado"
 
 #: apt-pkg/deb/dpkgpm.cc:52
 #, c-format
 msgid "Installing %s"
-msgstr "A instalar %s"
+msgstr "Instalando %s"
 
-#: apt-pkg/deb/dpkgpm.cc:53 apt-pkg/deb/dpkgpm.cc:819
+#: apt-pkg/deb/dpkgpm.cc:53 apt-pkg/deb/dpkgpm.cc:823
 #, c-format
 msgid "Configuring %s"
-msgstr "A configurar %s"
+msgstr "Configurando %s"
 
-#: apt-pkg/deb/dpkgpm.cc:54 apt-pkg/deb/dpkgpm.cc:826
+#: apt-pkg/deb/dpkgpm.cc:54 apt-pkg/deb/dpkgpm.cc:830
 #, c-format
 msgid "Removing %s"
-msgstr "A eliminar %s"
+msgstr "Retirando %s"
 
 #: apt-pkg/deb/dpkgpm.cc:55
-#, fuzzy, c-format
+#, c-format
 msgid "Completely removing %s"
-msgstr "Eliminouse %s completamente"
+msgstr "%s completamente retirado"
 
 #: apt-pkg/deb/dpkgpm.cc:56
 #, c-format
 msgid "Noting disappearance of %s"
-msgstr ""
+msgstr "Tomando nota da desaparición de %s"
 
 #: apt-pkg/deb/dpkgpm.cc:57
 #, c-format
 msgid "Running post-installation trigger %s"
-msgstr "A executar o disparador de post-instalación %s"
+msgstr "Executando o disparador de post-instalación %s"
 
 #. FIXME: use a better string after freeze
-#: apt-pkg/deb/dpkgpm.cc:642
+#: apt-pkg/deb/dpkgpm.cc:646
 #, c-format
 msgid "Directory '%s' missing"
-msgstr "O directorio \"%s\" falla"
+msgstr "Falta o directorio «%s»"
 
-#: apt-pkg/deb/dpkgpm.cc:657 apt-pkg/deb/dpkgpm.cc:671
-#, fuzzy, c-format
+#: apt-pkg/deb/dpkgpm.cc:661 apt-pkg/deb/dpkgpm.cc:675
+#, c-format
 msgid "Could not open file '%s'"
-msgstr "Non se puido abrir o ficheiro %s"
+msgstr "Non foi posíbel abrir o ficheiro «%s»"
 
-#: apt-pkg/deb/dpkgpm.cc:812
+#: apt-pkg/deb/dpkgpm.cc:816
 #, c-format
 msgid "Preparing %s"
-msgstr "A preparar %s"
+msgstr "Preparando %s"
 
-#: apt-pkg/deb/dpkgpm.cc:813
+#: apt-pkg/deb/dpkgpm.cc:817
 #, c-format
 msgid "Unpacking %s"
-msgstr "A desempaquetar %s"
+msgstr "Desempaquetando %s"
 
-#: apt-pkg/deb/dpkgpm.cc:818
+#: apt-pkg/deb/dpkgpm.cc:822
 #, c-format
 msgid "Preparing to configure %s"
-msgstr "A se preparar para configurar %s"
+msgstr "Preparandose para configurar %s"
 
-#: apt-pkg/deb/dpkgpm.cc:820
+#: apt-pkg/deb/dpkgpm.cc:824
 #, c-format
 msgid "Installed %s"
 msgstr "Instalouse %s"
 
-#: apt-pkg/deb/dpkgpm.cc:825
+#: apt-pkg/deb/dpkgpm.cc:829
 #, c-format
 msgid "Preparing for removal of %s"
-msgstr "A se preparar para a eliminación de %s"
+msgstr "Preparándose para o retirado de %s"
 
-#: apt-pkg/deb/dpkgpm.cc:827
+#: apt-pkg/deb/dpkgpm.cc:831
 #, c-format
 msgid "Removed %s"
-msgstr "Eliminouse %s"
+msgstr "Retirouse %s"
 
-#: apt-pkg/deb/dpkgpm.cc:832
+#: apt-pkg/deb/dpkgpm.cc:836
 #, c-format
 msgid "Preparing to completely remove %s"
-msgstr "A se preparar para eliminar %s completamente"
+msgstr "Preparándose para retirar %s completamente"
 
-#: apt-pkg/deb/dpkgpm.cc:833
+#: apt-pkg/deb/dpkgpm.cc:837
 #, c-format
 msgid "Completely removed %s"
-msgstr "Eliminouse %s completamente"
+msgstr "Retirouse %s completamente"
 
-#: apt-pkg/deb/dpkgpm.cc:1039
+#: apt-pkg/deb/dpkgpm.cc:1043
 msgid "Can not write log, openpty() failed (/dev/pts not mounted?)\n"
 msgstr ""
-"Non se puido escribir no rexistro, a chamada a openpty() fallou (¿/dev/pts "
+"Non foi posíbel escribir no rexistro, a chamada a openpty() fallou (/dev/pts "
 "non estaba montado?)\n"
 
-#: apt-pkg/deb/dpkgpm.cc:1070
+#: apt-pkg/deb/dpkgpm.cc:1074
 msgid "Running dpkg"
-msgstr ""
+msgstr "Executando dpkg"
 
-#: apt-pkg/deb/dpkgpm.cc:1273
+#: apt-pkg/deb/dpkgpm.cc:1277
 msgid "No apport report written because MaxReports is reached already"
 msgstr ""
+"Non se escribiu ningún informe de Apport porque xa se acadou o nivel "
+"MaxReports"
 
 #. check if its not a follow up error
-#: apt-pkg/deb/dpkgpm.cc:1278
+#: apt-pkg/deb/dpkgpm.cc:1282
 msgid "dependency problems - leaving unconfigured"
-msgstr ""
+msgstr "problemas de dependencias - déixase sen configurar"
 
-#: apt-pkg/deb/dpkgpm.cc:1280
+#: apt-pkg/deb/dpkgpm.cc:1284
 msgid ""
 "No apport report written because the error message indicates its a followup "
 "error from a previous failure."
 msgstr ""
+"Non se escribiu ningún informe de Apport porque a mensaxe de erro indica que "
+"é un error provinte dun fallo anterior."
 
-#: apt-pkg/deb/dpkgpm.cc:1286
+#: apt-pkg/deb/dpkgpm.cc:1290
 msgid ""
 "No apport report written because the error message indicates a disk full "
 "error"
 msgstr ""
+"Non se escribiu ningún informe de Apport porque a mensaxe de erro indica un "
+"erro de disco cheo."
 
-#: apt-pkg/deb/dpkgpm.cc:1292
+#: apt-pkg/deb/dpkgpm.cc:1296
 msgid ""
 "No apport report written because the error message indicates a out of memory "
 "error"
 msgstr ""
+"Non se escribiu un informe de contribución porque a mensaxe de erro indica "
+"un erro de falta de memoria"
 
-#: apt-pkg/deb/dpkgpm.cc:1299
+#: apt-pkg/deb/dpkgpm.cc:1303
 msgid ""
 "No apport report written because the error message indicates a dpkg I/O error"
 msgstr ""
+"Non se escribiu ningún informe de Apport porque a mensaxe de erro indica un "
+"erro de E/S en dpkg"
 
 #: apt-pkg/deb/debsystem.cc:69
 #, c-format
@@ -3360,11 +3463,15 @@ msgid ""
 "Unable to lock the administration directory (%s), is another process using "
 "it?"
 msgstr ""
+"Non é posíbel bloquear o directorio de administración (%s). Esta usandoo "
+"algún outro proceso?"
 
 #: apt-pkg/deb/debsystem.cc:72
-#, fuzzy, c-format
+#, c-format
 msgid "Unable to lock the administration directory (%s), are you root?"
-msgstr "Non se puido bloquear o directorio de listas"
+msgstr ""
+"Non é posíbel bloquear o directorio de administración (%s). É o "
+"administrador?"
 
 #. TRANSLATORS: the %s contains the recovery command, usually
 #. dpkg --configure -a
@@ -3373,65 +3480,87 @@ msgstr "Non se puido bloquear o directorio de listas"
 msgid ""
 "dpkg was interrupted, you must manually run '%s' to correct the problem. "
 msgstr ""
+"dpkg interrompeuse, debe executar manualmente «%s» para corrixir o problema. "
 
 #: apt-pkg/deb/debsystem.cc:106
 msgid "Not locked"
-msgstr ""
+msgstr "Non está bloqueado"
 
 #. FIXME: fallback to a default mirror here instead
 #. and provide a config option to define that default
 #: methods/mirror.cc:200
 #, c-format
 msgid "No mirror file '%s' found "
-msgstr ""
+msgstr "Non se atopou ningún ficheiro de replica «%s» "
 
 #: methods/mirror.cc:343
 #, c-format
 msgid "[Mirror: %s]"
-msgstr ""
+msgstr "[Replica: %s]"
 
-#: methods/rred.cc:503
+#: methods/rred.cc:465
 #, c-format
 msgid ""
 "Could not patch %s with mmap and with file operation usage - the patch seems "
 "to be corrupt."
 msgstr ""
+"Non foi posíbel actualizar %s con mmap e co ficheiro usado na operación - a "
+"actualización semella estar danada."
 
-#: methods/rred.cc:508
+#: methods/rred.cc:470
 #, c-format
 msgid ""
 "Could not patch %s with mmap (but no mmap specific fail) - the patch seems "
 "to be corrupt."
 msgstr ""
+"Non foi posíbel actualizar %s con mmap e (mais non hai un fallo específico "
+"de mmap) - a actualización semella estar danada."
 
 #: methods/rsh.cc:329
 msgid "Connection closed prematurely"
 msgstr "A conexión pechouse prematuramente"
 
-#~ msgid "E: Argument list from Acquire::gpgv::Options too long. Exiting."
+#~ msgid "Downloading %s %s"
+#~ msgstr "Descargando %s %s"
+
+#~ msgid "Changelog for %s (%s)"
+#~ msgstr "Rexistro de cambios de %s (%s)"
+
+#~ msgid "Empty files can't be valid archives"
+#~ msgstr "Os ficheiros baleiros non poden ser arquivadores válidos"
+
+#~ msgid "Ignoring '%s' in directory '%s' as it is not a regular file"
+#~ msgstr "Ignorando «%s» no directorio «%s» xa que non é un ficheiro regular"
+
+#~ msgid "Ignoring file '%s' in directory '%s' as it has no filename extension"
 #~ msgstr ""
-#~ "E: A lista de argumentos de Acquire:gpgv::Options é longa de máis. Sáese."
+#~ "Ignorando o ficheiro «%s» no directorio «%s» xa que non ten extensión de "
+#~ "nome"
 
-#~ msgid "Error occurred while processing %s (NewVersion2)"
-#~ msgstr "Ocorreu un erro ao procesar %s (NewVersion2)"
+#~ msgid ""
+#~ "Ignoring file '%s' in directory '%s' as it has an invalid filename "
+#~ "extension"
+#~ msgstr ""
+#~ "Ignorando o ficheiro «%s» no directorio «%s» xa que ten  unha extensión "
+#~ "de nome incorrecta"
 
-#~ msgid "Malformed line %u in source list %s (vendor id)"
-#~ msgstr "Liña %u mal formada na lista de fontes %s (id de provedor)"
+#~ msgid ""
+#~ "Unable to find expected entry '%s' in Release file (Wrong sources.list "
+#~ "entry or malformed file)"
+#~ msgstr ""
+#~ "Non é posíbel atopar a entrada agardada «%s» no ficheiro de publicación "
+#~ "(entrada sources.list incorrecta ou ficheiro con formato incorrecto)"
 
-#~ msgid "Couldn't access keyring: '%s'"
-#~ msgstr "Non se puido acceder ao chaveiro: \"%s\""
+#~ msgid "Unable to find hash sum for '%s' in Release file"
+#~ msgstr ""
+#~ "Non é posíbel ler a suma de comprobación para «%s» no ficheiro de "
+#~ "publicación"
 
-#~ msgid "Could not patch file"
-#~ msgstr "Non se puido parchear o ficheiro"
+#~ msgid "Can not read mirror file '%s'"
+#~ msgstr "Non é posíbel ler o ficheiro de replica «%s»"
 
 #~ msgid "       %4i %s\n"
-#~ msgstr "       %4i %s\n"
+#~ msgstr "\n"
 
 #~ msgid "%4i %s\n"
-#~ msgstr "%4i %s\n"
-
-#~ msgid "Processing triggers for %s"
-#~ msgstr "A procesar os disparadores de %s"
-
-#~ msgid "Dynamic MMap ran out of room"
-#~ msgstr "O MMap Dinámico esgotou o espazo"
+#~ msgstr "\n"
index 09e89df06774613914eefb936bf6997d63f69778..e05730472f71041e71ef4e76f345313cb904a290 100644 (file)
--- a/po/he.po
+++ b/po/he.po
@@ -2562,8 +2562,8 @@ msgstr ""
 #: apt-pkg/acquire-item.cc:1275
 #, c-format
 msgid ""
-"I wasn't able to locate file for the %s package. This might mean you need to "
-"manually fix this package."
+"I wasn't able to locate a file for the %s package. This might mean you need "
+"to manually fix this package."
 msgstr ""
 
 #: apt-pkg/acquire-item.cc:1316
index a4dde56d5c288c89b560d70842c33a07e8a3ae5f..45da059799d003e6e37409c2f9fb113046bd504b 100644 (file)
--- a/po/hu.po
+++ b/po/hu.po
@@ -2983,8 +2983,8 @@ msgstr ""
 #: apt-pkg/acquire-item.cc:1631
 #, c-format
 msgid ""
-"I wasn't able to locate file for the %s package. This might mean you need to "
-"manually fix this package."
+"I wasn't able to locate a file for the %s package. This might mean you need "
+"to manually fix this package."
 msgstr ""
 "Nem találtam egy fájlt a(z) %s csomaghoz. Ez azt jelentheti, hogy kézzel "
 "kell kijavítani a csomagot."
index 1f2e08bf3407bf008f3f80126ec7f734f90b566b..a9615bfadb5c3698118097220b437d3b5c8274e8 100644 (file)
--- a/po/it.po
+++ b/po/it.po
@@ -3115,8 +3115,8 @@ msgstr ""
 #: apt-pkg/acquire-item.cc:1424
 #, c-format
 msgid ""
-"I wasn't able to locate file for the %s package. This might mean you need to "
-"manually fix this package."
+"I wasn't able to locate a file for the %s package. This might mean you need "
+"to manually fix this package."
 msgstr ""
 "Impossibile trovare un file per il pacchetto %s. Potrebbe essere necessario "
 "sistemare manualmente questo pacchetto."
index c9be076fcd20642037e2dc2071bbbf9a4b158211..99db2d6d805d0a8a627d87e5b6f51abd3d7aaa03 100644 (file)
--- a/po/ja.po
+++ b/po/ja.po
@@ -3035,8 +3035,8 @@ msgstr ""
 #: apt-pkg/acquire-item.cc:1631
 #, c-format
 msgid ""
-"I wasn't able to locate file for the %s package. This might mean you need to "
-"manually fix this package."
+"I wasn't able to locate a file for the %s package. This might mean you need "
+"to manually fix this package."
 msgstr ""
 "パッケージ %s のファイルの位置を特定できません。おそらくこのパッケージを手動"
 "で修正する必要があります。"
index f10efe06de63db1131d780e9b538c5647449bf39..53d5dd08a470ecc229ac960bb5aca0ec081ae7a1 100644 (file)
--- a/po/km.po
+++ b/po/km.po
@@ -2964,8 +2964,8 @@ msgstr ""
 #: apt-pkg/acquire-item.cc:1631
 #, c-format
 msgid ""
-"I wasn't able to locate file for the %s package. This might mean you need to "
-"manually fix this package."
+"I wasn't able to locate a file for the %s package. This might mean you need "
+"to manually fix this package."
 msgstr ""
 "ខ្ញុំ​មិន​អាច​រកទីតាំង​ឯកសារ​សម្រាប់​កញ្ចប់ %s បានទេ ។ ​មាន​ន័យ​ថា​អ្នក​ត្រូវការ​ជួសជុល​កញ្ចប់​នេះ​ដោយ​ដៃ ។"
 
index 65439cced016c21706f2ac3a015b5de1daf40252..30ef7092e12ce6a8387d6bf09fade44e78931f56 100644 (file)
--- a/po/ko.po
+++ b/po/ko.po
@@ -2986,8 +2986,8 @@ msgstr ""
 #: apt-pkg/acquire-item.cc:1631
 #, c-format
 msgid ""
-"I wasn't able to locate file for the %s package. This might mean you need to "
-"manually fix this package."
+"I wasn't able to locate a file for the %s package. This might mean you need "
+"to manually fix this package."
 msgstr ""
 "%s 패키지의 파일을 찾을 수 없습니다. 수동으로 이 패키지를 고쳐야 할 수도 있습"
 "니다."
index a17e00f09e512017802fdf7a7bbfa0f90c4c00e8..a0979d13baefa08e7bc701e1ce94857508aaf621 100644 (file)
--- a/po/ku.po
+++ b/po/ku.po
@@ -2792,8 +2792,8 @@ msgstr ""
 #: apt-pkg/acquire-item.cc:1631
 #, c-format
 msgid ""
-"I wasn't able to locate file for the %s package. This might mean you need to "
-"manually fix this package."
+"I wasn't able to locate a file for the %s package. This might mean you need "
+"to manually fix this package."
 msgstr ""
 
 #: apt-pkg/acquire-item.cc:1686
index 0a4b58a5c315c7597773410bcd98d40a572ab79a..22bf253ef2f27c4c716f3b20a012b563c2d19e42 100644 (file)
--- a/po/lt.po
+++ b/po/lt.po
@@ -2889,8 +2889,8 @@ msgstr ""
 #: apt-pkg/acquire-item.cc:1631
 #, c-format
 msgid ""
-"I wasn't able to locate file for the %s package. This might mean you need to "
-"manually fix this package."
+"I wasn't able to locate a file for the %s package. This might mean you need "
+"to manually fix this package."
 msgstr ""
 
 #: apt-pkg/acquire-item.cc:1686
index c11620b3dc645cad138126ee62d3da4ca3e2b9a7..b0a17df801b4d583ce7cd29b0c82468719dcea3d 100644 (file)
--- a/po/mr.po
+++ b/po/mr.po
@@ -2972,8 +2972,8 @@ msgstr ""
 #: apt-pkg/acquire-item.cc:1631
 #, c-format
 msgid ""
-"I wasn't able to locate file for the %s package. This might mean you need to "
-"manually fix this package."
+"I wasn't able to locate a file for the %s package. This might mean you need "
+"to manually fix this package."
 msgstr ""
 "मी %s पॅकेजकरीता संचिका शोधण्यास  समर्थ नव्हतो. याचा अर्थ असाकी तुम्हालाहे पॅकेज स्वहस्ते "
 "स्थिर/निश्चित करण्याची गरज आहे."
index 42fa7c0ae60c9914f7429402504ec5ada8a8652a..fbd0c7cf0c2b60f992d9e4ccf6aeca4cf871d631 100644 (file)
--- a/po/nb.po
+++ b/po/nb.po
@@ -3013,8 +3013,8 @@ msgstr ""
 #: apt-pkg/acquire-item.cc:1631
 #, c-format
 msgid ""
-"I wasn't able to locate file for the %s package. This might mean you need to "
-"manually fix this package."
+"I wasn't able to locate a file for the %s package. This might mean you need "
+"to manually fix this package."
 msgstr ""
 "Klarte ikke å finne en fil for pakken %s. Det kan bety at du må ordne denne "
 "pakken selv."
index 733618227eab780f9b33289841db7f396be1ded4..dfd787a1b91cbeba7dbd0085e8a2c89b2e447116 100644 (file)
--- a/po/ne.po
+++ b/po/ne.po
@@ -2967,8 +2967,8 @@ msgstr ""
 #: apt-pkg/acquire-item.cc:1631
 #, c-format
 msgid ""
-"I wasn't able to locate file for the %s package. This might mean you need to "
-"manually fix this package."
+"I wasn't able to locate a file for the %s package. This might mean you need "
+"to manually fix this package."
 msgstr ""
 "%s प्याकेजको लागि मैले फाइल स्थित गर्न सकिन । यसको मतलब तपाईँले म्यानुल्ली यो प्याकेज "
 "निश्चित गर्नुहोस् ।"
index 54f0039a6d7692087034991045e13683761eb328..58506d72c26f3a3964fd208ef9ddee389cee30cd 100644 (file)
--- a/po/nl.po
+++ b/po/nl.po
@@ -3047,8 +3047,8 @@ msgstr ""
 #: apt-pkg/acquire-item.cc:1631
 #, c-format
 msgid ""
-"I wasn't able to locate file for the %s package. This might mean you need to "
-"manually fix this package."
+"I wasn't able to locate a file for the %s package. This might mean you need "
+"to manually fix this package."
 msgstr ""
 "Er kon geen bestand gevonden worden voor pakket %s. Dit kan betekenen dat u "
 "dit pakket handmatig moet repareren."
index e33aa27c7834f8c78a7fa8337f6aefce36a3b5ea..da14705ba18171e51b82d93263f97327d2438b87 100644 (file)
--- a/po/nn.po
+++ b/po/nn.po
@@ -2988,8 +2988,8 @@ msgstr ""
 #: apt-pkg/acquire-item.cc:1631
 #, c-format
 msgid ""
-"I wasn't able to locate file for the %s package. This might mean you need to "
-"manually fix this package."
+"I wasn't able to locate a file for the %s package. This might mean you need "
+"to manually fix this package."
 msgstr ""
 "Fann ikkje fila for pakken %s. Det kan henda du må fiksa denne pakken sjølv."
 
index fad4e96df703176458ac7f822172ccbe9fcaa9d9..64bd2443fa22ab578dfb9ff212bf35ceef8365e2 100644 (file)
--- a/po/pl.po
+++ b/po/pl.po
@@ -3018,8 +3018,8 @@ msgstr ""
 #: apt-pkg/acquire-item.cc:1631
 #, c-format
 msgid ""
-"I wasn't able to locate file for the %s package. This might mean you need to "
-"manually fix this package."
+"I wasn't able to locate a file for the %s package. This might mean you need "
+"to manually fix this package."
 msgstr ""
 "Nie udało się odnaleźć pliku dla pakietu %s. Może to oznaczać, że trzeba "
 "będzie ręcznie naprawić ten pakiet."
index b1286d96102e9fa90a73b9d8cba6726a46a15fba..946d54145d64c031043ca3276a51db4823ec7b13 100644 (file)
--- a/po/pt.po
+++ b/po/pt.po
@@ -3046,8 +3046,8 @@ msgstr ""
 #: apt-pkg/acquire-item.cc:1631
 #, c-format
 msgid ""
-"I wasn't able to locate file for the %s package. This might mean you need to "
-"manually fix this package."
+"I wasn't able to locate a file for the %s package. This might mean you need "
+"to manually fix this package."
 msgstr ""
 "Não foi possível localizar arquivo para o pacote %s. Isto pode significar "
 "que você precisa consertar manualmente este pacote."
index 3c883ea927d8a97f6eed6fe5c598415ff618a639..b94038fdb935eef95eefa57d1e8913c7618aab8e 100644 (file)
@@ -3025,8 +3025,8 @@ msgstr ""
 #: apt-pkg/acquire-item.cc:1631
 #, c-format
 msgid ""
-"I wasn't able to locate file for the %s package. This might mean you need to "
-"manually fix this package."
+"I wasn't able to locate a file for the %s package. This might mean you need "
+"to manually fix this package."
 msgstr ""
 "Não foi possível localizar arquivo para o pacote %s. Isto pode significar "
 "que você precisa consertar manualmente este pacote."
index d3ac7e8f02f791834ca3c9c3fae412da664f4ee2..9d7319068f1d741be33bb0a70524b34e354166f0 100644 (file)
--- a/po/ro.po
+++ b/po/ro.po
@@ -3034,8 +3034,8 @@ msgstr ""
 #: apt-pkg/acquire-item.cc:1631
 #, c-format
 msgid ""
-"I wasn't able to locate file for the %s package. This might mean you need to "
-"manually fix this package."
+"I wasn't able to locate a file for the %s package. This might mean you need "
+"to manually fix this package."
 msgstr ""
 "N-am putut localiza un fișier pentru pachetul %s. Aceasta ar putea însemna "
 "că aveți nevoie să depanați manual acest pachet."
index e86d17bc7f6d3ccf78da2ffc556938725f1d4404..bda3ce7c7aa218a17c32f013ca9be6ce6fff06ee 100644 (file)
--- a/po/ru.po
+++ b/po/ru.po
@@ -3056,8 +3056,8 @@ msgstr ""
 #: apt-pkg/acquire-item.cc:1631
 #, c-format
 msgid ""
-"I wasn't able to locate file for the %s package. This might mean you need to "
-"manually fix this package."
+"I wasn't able to locate a file for the %s package. This might mean you need "
+"to manually fix this package."
 msgstr ""
 "Не удалось обнаружить файл пакета %s. Это может означать, что вам придётся "
 "вручную исправить этот пакет."
index ea0594aa18b55a3ded500a6bbbb8fcf9f541468d..0f35324cb955cd2a26e924b88ad7000f318e36ea 100644 (file)
--- a/po/sk.po
+++ b/po/sk.po
@@ -3008,8 +3008,8 @@ msgstr ""
 #: apt-pkg/acquire-item.cc:1631
 #, c-format
 msgid ""
-"I wasn't able to locate file for the %s package. This might mean you need to "
-"manually fix this package."
+"I wasn't able to locate a file for the %s package. This might mean you need "
+"to manually fix this package."
 msgstr ""
 "Nedá sa nájsť súbor s balíkom %s. Asi budete musieť opraviť tento balík "
 "manuálne."
index 33e8e009b5a9fc36529816ff69900aa1423e7b22..9b497f93b593b13e7359bb5582421dae0aea04cf 100644 (file)
--- a/po/sl.po
+++ b/po/sl.po
@@ -3023,8 +3023,8 @@ msgstr ""
 #: apt-pkg/acquire-item.cc:1631
 #, c-format
 msgid ""
-"I wasn't able to locate file for the %s package. This might mean you need to "
-"manually fix this package."
+"I wasn't able to locate a file for the %s package. This might mean you need "
+"to manually fix this package."
 msgstr ""
 "Ni bilo mogoče najti datoteke za paket %s. Morda boste morali ročno "
 "popraviti ta paket."
index eef777133ecc59ef21bf0f91938b20a2ef468d2c..3f3f3cd785f0d6e59df983da5e28b38a900c84a0 100644 (file)
--- a/po/sv.po
+++ b/po/sv.po
@@ -3038,8 +3038,8 @@ msgstr ""
 #: apt-pkg/acquire-item.cc:1631
 #, c-format
 msgid ""
-"I wasn't able to locate file for the %s package. This might mean you need to "
-"manually fix this package."
+"I wasn't able to locate a file for the %s package. This might mean you need "
+"to manually fix this package."
 msgstr ""
 "Jag kunde inte hitta någon fil för paketet %s. Detta kan betyda att du "
 "manuellt måste reparera detta paket."
index c9c11a4e4d8b61654ea259f6b4417065a9c7b94c..f5c67f3739dce4956f7b32f419879676abe76dc8 100644 (file)
--- a/po/th.po
+++ b/po/th.po
@@ -2946,8 +2946,8 @@ msgstr "ไม่พบแฟ้มสำหรับแพกเกจ %s ค
 #: apt-pkg/acquire-item.cc:1631
 #, c-format
 msgid ""
-"I wasn't able to locate file for the %s package. This might mean you need to "
-"manually fix this package."
+"I wasn't able to locate a file for the %s package. This might mean you need "
+"to manually fix this package."
 msgstr "ไม่พบแฟ้มสำหรับแพกเกจ %s คุณอาจต้องแก้ปัญหาแพกเกจนี้เอง"
 
 #: apt-pkg/acquire-item.cc:1686
index 32c86f61e4fa633da2b88239f902e6aa832cc00d..b3831a7e8029f531d048848d70b2cc22ee8d6b92 100644 (file)
--- a/po/tl.po
+++ b/po/tl.po
@@ -3016,8 +3016,8 @@ msgstr ""
 #: apt-pkg/acquire-item.cc:1631
 #, c-format
 msgid ""
-"I wasn't able to locate file for the %s package. This might mean you need to "
-"manually fix this package."
+"I wasn't able to locate a file for the %s package. This might mean you need "
+"to manually fix this package."
 msgstr ""
 "Hindi ko mahanap ang talaksan para sa paketeng %s. Maaaring kailanganin "
 "niyong ayusin ng de kamay ang paketeng ito."
index d4d2fb6e6767a5e801542d53022875402833be3b..960681c470215a9b157748eeb358419735da4873 100644 (file)
--- a/po/uk.po
+++ b/po/uk.po
@@ -3035,8 +3035,8 @@ msgstr ""
 #: apt-pkg/acquire-item.cc:1631
 #, c-format
 msgid ""
-"I wasn't able to locate file for the %s package. This might mean you need to "
-"manually fix this package."
+"I wasn't able to locate a file for the %s package. This might mean you need "
+"to manually fix this package."
 msgstr ""
 "Я не можу знайти файл для пакунку %s. Можливо, Ви захочете власноруч "
 "виправити цей пакунок."
index 65ed46f6958e813bbef4416b00301f4463739b02..fec6dc3bb4f7deebd654940f498321b7ce60280a 100644 (file)
--- a/po/vi.po
+++ b/po/vi.po
@@ -3053,8 +3053,8 @@ msgstr ""
 #: apt-pkg/acquire-item.cc:1631
 #, c-format
 msgid ""
-"I wasn't able to locate file for the %s package. This might mean you need to "
-"manually fix this package."
+"I wasn't able to locate a file for the %s package. This might mean you need "
+"to manually fix this package."
 msgstr ""
 "Không tìm thấy tập tin liên quan đến gói %s. Có lẽ bạn cần phải tự sửa gói "
 "này."
index 72caa48cb46908cc44dfa7406a2b2b80e32d8ee0..fa88993ddc74b8445e2406f343753f8be3e70898 100644 (file)
@@ -2961,8 +2961,8 @@ msgstr ""
 #: apt-pkg/acquire-item.cc:1631
 #, c-format
 msgid ""
-"I wasn't able to locate file for the %s package. This might mean you need to "
-"manually fix this package."
+"I wasn't able to locate a file for the %s package. This might mean you need "
+"to manually fix this package."
 msgstr ""
 "我无法找到对应 %s 软件包的文件。在这种情况下您可能需要手动修正这个软件包。"
 
index c0ef69f763cd3c2c1d230cf540b1308fb2de1fba..1dcaf49ce4e0e1ffc8f00e42094caf631d84a039 100644 (file)
@@ -2949,8 +2949,8 @@ msgstr ""
 #: apt-pkg/acquire-item.cc:1631
 #, c-format
 msgid ""
-"I wasn't able to locate file for the %s package. This might mean you need to "
-"manually fix this package."
+"I wasn't able to locate a file for the %s package. This might mean you need "
+"to manually fix this package."
 msgstr "找不到 %s 套件的某個檔案。這意味著您可能要手動修復這個套件。"
 
 #: apt-pkg/acquire-item.cc:1686
index 013a71ec02cbcf0515ecd449e64ba015f70401e7..cc5af798c9b38448bba008ec9f85ac47ee1a1b84 100644 (file)
@@ -145,6 +145,7 @@ setupenvironment() {
        echo "DPKG::options:: \"--log=${TMPWORKINGDIRECTORY}/rootdir/var/log/dpkg.log\";" >> aptconfig.conf
        echo 'quiet::NoUpdate "true";' >> aptconfig.conf
        export LC_ALL=C
+       export PATH="${PATH}:/usr/local/sbin:/usr/sbin:/sbin"
        msgdone "info"
 }
 
@@ -218,6 +219,7 @@ buildsimplenativepackage() {
        local DEPENDENCIES="$5"
        local DESCRIPTION="$6"
        local SECTION="${7:-others}"
+       local PRIORITY="${8:-optional}"
        local DISTSECTION
        if [ "$SECTION" = "$(echo "$SECTION" | cut -d'/' -f 2)" ]; then
                DISTSECTION="main"
@@ -240,7 +242,7 @@ echo '$NAME says \"Hello!\"'" > ${BUILDDIR}/${NAME}
  -- Joe Sixpack <joe@example.org>  $(date -R)" > ${BUILDDIR}/debian/changelog
        echo "Source: $NAME
 Section: $SECTION
-Priority: optional
+Priority: $PRIORITY
 Maintainer: Joe Sixpack <joe@example.org>
 Standards-Version: 3.9.1
 
@@ -396,29 +398,34 @@ insertpackage() {
        local ARCH="$3"
        local VERSION="$4"
        local DEPENDENCIES="$5"
-       local ARCHS="$ARCH"
-       if [ "$ARCHS" = "all" ]; then
-               ARCHS="$(aptconfig dump | grep APT::Architecture | cut -d'"' -f 2 | sed '/^$/ d' | sort | uniq | tr '\n' ' ')"
-       fi
-       for BUILDARCH in $ARCHS; do
-               local PPATH="aptarchive/dists/${RELEASE}/main/binary-${BUILDARCH}"
-               mkdir -p $PPATH aptarchive/dists/${RELEASE}/main/source
-               touch aptarchive/dists/${RELEASE}/main/source/Sources
-               local FILE="${PPATH}/Packages"
-               echo "Package: $NAME
-Priority: optional
+       local PRIORITY="${6:-optional}"
+       local ARCHS=""
+       for arch in $(echo "$ARCH" | sed -e 's#,#\n#g'); do
+               if [ "$arch" = "all" ]; then
+                       ARCHS="$(aptconfig dump | grep APT::Architecture | cut -d'"' -f 2 | sed '/^$/ d' | sort | uniq | tr '\n' ' ')"
+               else
+                       ARCHS="$arch"
+               fi
+               for BUILDARCH in $ARCHS; do
+                       local PPATH="aptarchive/dists/${RELEASE}/main/binary-${BUILDARCH}"
+                       mkdir -p $PPATH aptarchive/dists/${RELEASE}/main/source
+                       touch aptarchive/dists/${RELEASE}/main/source/Sources
+                       local FILE="${PPATH}/Packages"
+                       echo "Package: $NAME
+Priority: $PRIORITY
 Section: other
 Installed-Size: 42
 Maintainer: Joe Sixpack <joe@example.org>
-Architecture: $ARCH
+Architecture: $arch
 Version: $VERSION
-Filename: pool/main/${NAME}/${NAME}_${VERSION}_${ARCH}.deb" >> $FILE
-               test -z "$DEPENDENCIES" || echo "$DEPENDENCIES" >> $FILE
-               echo "Description: an autogenerated dummy ${NAME}=${VERSION}/${RELEASE}
+Filename: pool/main/${NAME}/${NAME}_${VERSION}_${arch}.deb" >> $FILE
+                       test -z "$DEPENDENCIES" || echo "$DEPENDENCIES" >> $FILE
+                       echo "Description: an autogenerated dummy ${NAME}=${VERSION}/${RELEASE}
  If you find such a package installed on your system,
  YOU did something horribly wrong! They are autogenerated
  und used only by testcases for APT and surf no other propose…
 " >> $FILE
+               done
        done
 }
 
@@ -427,21 +434,24 @@ insertinstalledpackage() {
        local ARCH="$2"
        local VERSION="$3"
        local DEPENDENCIES="$4"
+       local PRIORITY="${5:-optional}"
        local FILE="rootdir/var/lib/dpkg/status"
-       echo "Package: $NAME
+       for arch in $(echo "$ARCH" | sed -e 's#,#\n#g'); do
+               echo "Package: $NAME
 Status: install ok installed
-Priority: optional
+Priority: $PRIORITY
 Section: other
 Installed-Size: 42
 Maintainer: Joe Sixpack <joe@example.org>
-Architecture: $ARCH
+Architecture: $arch
 Version: $VERSION" >> $FILE
-       test -z "$DEPENDENCIES" || echo "$DEPENDENCIES" >> $FILE
-       echo "Description: an autogenerated dummy ${NAME}=${VERSION}/${RELEASE}
+               test -z "$DEPENDENCIES" || echo "$DEPENDENCIES" >> $FILE
+               echo "Description: an autogenerated dummy ${NAME}=${VERSION}/installed
  If you find such a package installed on your system,
  YOU did something horribly wrong! They are autogenerated
  und used only by testcases for APT and surf no other propose…
 " >> $FILE
+       done
 }
 
 
@@ -563,13 +573,22 @@ changetowebserver() {
        if which weborf > /dev/null; then
                weborf -xb aptarchive/ 2>&1 > /dev/null &
                addtrap "kill $!;"
-               local APTARCHIVE="file://$(readlink -f ./aptarchive)"
-               for LIST in $(find rootdir/etc/apt/sources.list.d/ -name 'apt-test-*.list'); do
-                       sed -i $LIST -e "s#$APTARCHIVE#http://localhost:8080/#"
-               done
-               return 0
+       elif which lighttpd > /dev/null; then
+               echo "server.document-root = \"$(readlink -f ./aptarchive)\"
+server.port = 8080
+server.stat-cache-engine = \"disable\"" > lighttpd.conf
+               lighttpd -t -f lighttpd.conf >/dev/null || msgdie 'Can not change to webserver: our lighttpd config is invalid'
+               lighttpd -D -f lighttpd.conf 2>/dev/null >/dev/null &
+               addtrap "kill $!;"
+       else
+               msgdie 'You have to install weborf or lighttpd first'
+               return 1
        fi
-       return 1
+       local APTARCHIVE="file://$(readlink -f ./aptarchive)"
+       for LIST in $(find rootdir/etc/apt/sources.list.d/ -name 'apt-test-*.list'); do
+               sed -i $LIST -e "s#$APTARCHIVE#http://localhost:8080/#"
+       done
+       return 0
 }
 
 checkdiff() {
@@ -685,7 +704,7 @@ testmarkedauto() {
                while [ -n "$1" ]; do echo "$1"; shift; done | sort > $COMPAREFILE
        else
                msgtest 'Test for correctly marked as auto-installed' 'no package'
-               echo > $COMPAREFILE
+               echo -n > $COMPAREFILE
        fi
        aptmark showauto 2>&1 | checkdiff $COMPAREFILE - && msgpass || msgfail
 }
diff --git a/test/integration/skip-bug-602412-dequote-redirect b/test/integration/skip-bug-602412-dequote-redirect
new file mode 100755 (executable)
index 0000000..a63d362
--- /dev/null
@@ -0,0 +1,36 @@
+#!/bin/sh
+set -e
+
+TESTDIR=$(readlink -f $(dirname $0))
+. $TESTDIR/framework
+setupenvironment
+configarchitecture 'i386'
+
+if ! which lighttpd > /dev/null; then
+       msgdie 'You need lighttpd for this testcase, sorry…'
+       exit 1
+fi
+
+buildsimplenativepackage 'unrelated' 'all' '0.5~squeeze1' 'unstable'
+
+setupaptarchive
+
+echo "server.modules = ( \"mod_redirect\" )
+server.document-root = \"$(readlink -f ./aptarchive)\"
+server.port = 8080
+server.stat-cache-engine = \"disable\"
+url.redirect = ( \"^/pool/(.*)$\" => \"/newpool/\$1\" )" > lighttpd.conf
+
+mv aptarchive/pool aptarchive/newpool
+lighttpd -t -f lighttpd.conf >/dev/null || msgdie 'Can not change to webserver: our lighttpd config is invalid'
+lighttpd -D -f lighttpd.conf 2>/dev/null >/dev/null &
+addtrap "kill $!;"
+
+local APTARCHIVE="file://$(readlink -f ./aptarchive)"
+for LIST in $(find rootdir/etc/apt/sources.list.d/ -name 'apt-test-*.list'); do
+       sed -i $LIST -e "s#$APTARCHIVE#http://localhost:8080/#"
+done
+
+aptget update -qq || msgdie 'apt-get update failed'
+aptget install unrelated --download-only -qq || msgdie 'downloading package failed'
+
diff --git a/test/integration/test-bug-470115-new-and-tighten-recommends b/test/integration/test-bug-470115-new-and-tighten-recommends
new file mode 100755 (executable)
index 0000000..6bc22ea
--- /dev/null
@@ -0,0 +1,172 @@
+#!/bin/sh
+set -e
+
+TESTDIR=$(readlink -f $(dirname $0))
+. $TESTDIR/framework
+setupenvironment
+configarchitecture 'i386'
+
+insertinstalledpackage 'cool' 'all' '1'
+insertinstalledpackage 'stuff' 'all' '1'
+insertinstalledpackage 'coolstuff' 'all' '1'
+
+insertpackage 'unstable' 'cool' 'all' '2'
+insertpackage 'unstable' 'stuff' 'all' '2'
+insertpackage 'unstable' 'coolstuff' 'all' '2'
+insertpackage 'unstable' 'super' 'all' '2'
+
+insertinstalledpackage 'tighten-cool' 'all' '1' 'Recommends: cool (>= 1)'
+insertpackage 'unstable' 'tighten-cool' 'all' '2' 'Recommends: cool (>= 2)'
+
+insertinstalledpackage 'tighten-coolorstuff' 'all' '1' 'Recommends: cool (>= 1) | stuff (>= 1)'
+insertpackage 'unstable' 'tighten-coolorstuff' 'all' '2' 'Recommends: stuff (>= 2) | cool (>= 2)'
+
+insertinstalledpackage 'tighten-coolorstuff2' 'all' '1' 'Recommends: cool (>= 1) | stuff (>= 1)'
+insertpackage 'unstable' 'tighten-coolorstuff2' 'all' '2' 'Recommends: stuff2 (>= 2) | cool (>= 2)'
+
+insertinstalledpackage 'newrec-cool' 'all' '1'
+insertpackage 'unstable' 'newrec-cool' 'all' '2' 'Recommends: cool (>= 2)'
+
+insertinstalledpackage 'newrec-super' 'all' '1'
+insertpackage 'unstable' 'newrec-super' 'all' '2' 'Recommends: super'
+
+insertinstalledpackage 'newrec-coolorstuff' 'all' '1'
+insertpackage 'unstable' 'newrec-coolorstuff' 'all' '2' 'Recommends: cool (>= 2) | stuff (>= 2)'
+
+insertinstalledpackage 'cool-gone' 'all' '1' 'Recommends: cool (>= 1) | stuff (>= 2)'
+insertpackage 'unstable' 'cool-gone' 'all' '2' 'Recommends: stuff (>= 2)'
+
+insertinstalledpackage 'super-overtake' 'all' '1' 'Recommends: cool | super, stuff | super'
+insertpackage 'unstable' 'super-overtake' 'all' '2' 'Recommends: stuff (>= 3) | super, super | cool (>= 2)'
+
+insertinstalledpackage 'upgrade-over-new' 'all' '1' 'Recommends: cool'
+insertpackage 'unstable' 'upgrade-over-new' 'all' '2' 'Recommends: cool (>= 2) | super'
+
+insertinstalledpackage 'now-satisfiable' 'all' '1' 'Recommends: cool (>= 3)'
+insertpackage 'unstable' 'now-satisfiable' 'all' '2' 'Recommends: cool (>= 2)'
+
+setupaptarchive
+
+testequal 'Reading package lists...
+Building dependency tree...
+The following extra packages will be installed:
+  cool
+The following packages will be upgraded:
+  cool tighten-cool
+2 upgraded, 0 newly installed, 0 to remove and 11 not upgraded.
+Inst cool [1] (2 unstable [all])
+Inst tighten-cool [1] (2 unstable [all])
+Conf cool (2 unstable [all])
+Conf tighten-cool (2 unstable [all])' aptget install tighten-cool -s
+
+testequal 'Reading package lists...
+Building dependency tree...
+The following extra packages will be installed:
+  stuff
+The following packages will be upgraded:
+  stuff tighten-coolorstuff
+2 upgraded, 0 newly installed, 0 to remove and 11 not upgraded.
+Inst stuff [1] (2 unstable [all])
+Inst tighten-coolorstuff [1] (2 unstable [all])
+Conf stuff (2 unstable [all])
+Conf tighten-coolorstuff (2 unstable [all])' aptget install tighten-coolorstuff -s
+
+testequal 'Reading package lists...
+Building dependency tree...
+The following extra packages will be installed:
+  cool
+The following packages will be upgraded:
+  cool tighten-coolorstuff2
+2 upgraded, 0 newly installed, 0 to remove and 11 not upgraded.
+Inst cool [1] (2 unstable [all])
+Inst tighten-coolorstuff2 [1] (2 unstable [all])
+Conf cool (2 unstable [all])
+Conf tighten-coolorstuff2 (2 unstable [all])' aptget install tighten-coolorstuff2 -s
+
+testequal 'Reading package lists...
+Building dependency tree...
+The following extra packages will be installed:
+  cool
+The following packages will be upgraded:
+  cool newrec-cool
+2 upgraded, 0 newly installed, 0 to remove and 11 not upgraded.
+Inst cool [1] (2 unstable [all])
+Inst newrec-cool [1] (2 unstable [all])
+Conf cool (2 unstable [all])
+Conf newrec-cool (2 unstable [all])' aptget install newrec-cool -s
+
+testequal 'Reading package lists...
+Building dependency tree...
+The following extra packages will be installed:
+  super
+The following NEW packages will be installed:
+  super
+The following packages will be upgraded:
+  newrec-super
+1 upgraded, 1 newly installed, 0 to remove and 12 not upgraded.
+Inst newrec-super [1] (2 unstable [all])
+Inst super (2 unstable [all])
+Conf newrec-super (2 unstable [all])
+Conf super (2 unstable [all])' aptget install newrec-super -s
+
+testequal 'Reading package lists...
+Building dependency tree...
+The following extra packages will be installed:
+  cool
+The following packages will be upgraded:
+  cool newrec-coolorstuff
+2 upgraded, 0 newly installed, 0 to remove and 11 not upgraded.
+Inst cool [1] (2 unstable [all])
+Inst newrec-coolorstuff [1] (2 unstable [all])
+Conf cool (2 unstable [all])
+Conf newrec-coolorstuff (2 unstable [all])' aptget install newrec-coolorstuff -s
+
+testequal 'Reading package lists...
+Building dependency tree...
+The following extra packages will be installed:
+  stuff
+The following packages will be upgraded:
+  cool-gone stuff
+2 upgraded, 0 newly installed, 0 to remove and 11 not upgraded.
+Inst cool-gone [1] (2 unstable [all])
+Inst stuff [1] (2 unstable [all])
+Conf cool-gone (2 unstable [all])
+Conf stuff (2 unstable [all])' aptget install cool-gone -s
+
+testequal 'Reading package lists...
+Building dependency tree...
+The following extra packages will be installed:
+  super
+The following NEW packages will be installed:
+  super
+The following packages will be upgraded:
+  super-overtake
+1 upgraded, 1 newly installed, 0 to remove and 12 not upgraded.
+Inst super (2 unstable [all])
+Inst super-overtake [1] (2 unstable [all])
+Conf super (2 unstable [all])
+Conf super-overtake (2 unstable [all])' aptget install super-overtake -s
+
+# if super would be in front, we would get a new here as it is new and
+# the first option in an or-group should be the preferred one…
+testequal 'Reading package lists...
+Building dependency tree...
+The following extra packages will be installed:
+  cool
+The following packages will be upgraded:
+  cool upgrade-over-new
+2 upgraded, 0 newly installed, 0 to remove and 11 not upgraded.
+Inst cool [1] (2 unstable [all])
+Inst upgrade-over-new [1] (2 unstable [all])
+Conf cool (2 unstable [all])
+Conf upgrade-over-new (2 unstable [all])' aptget install upgrade-over-new -s
+
+# the recommends wasn't used before so while we could do it now,
+# the user doesn't seem to need it so avoid upgrading it
+testequal 'Reading package lists...
+Building dependency tree...
+The following packages will be upgraded:
+  now-satisfiable
+1 upgraded, 0 newly installed, 0 to remove and 12 not upgraded.
+Inst now-satisfiable [1] (2 unstable [all])
+Conf now-satisfiable (2 unstable [all])' aptget install now-satisfiable -s
index 3112e618c4df10b04cd8f05962cf9df3933f54f8..8efd1687acc311ec336bec7530f1948f4bffc4f8 100755 (executable)
@@ -13,9 +13,9 @@ insertpackage 'unstable' 'libreoffice-common' 'all' '1:3.3.0-2' 'Conflicts: open
 setupaptarchive
 
 touch rootdir/var/lib/apt/extended_states
-aptmark markauto python-uno ure uno-libs3 openoffice.org-common openoffice.org-style-galaxy
+aptmark markauto python-uno openoffice.org-common
 #aptmark unmarkauto openoffice.org-emailmerge
-testmarkedauto python-uno ure uno-libs3 openoffice.org-common openoffice.org-style-galaxy
+testmarkedauto python-uno openoffice.org-common
 
 testequal 'Reading package lists...
 Building dependency tree...
@@ -33,7 +33,7 @@ After this operation, 53.2 MB disk space will be freed.
 E: Trivial Only specified but this is not a trivial operation.' aptget --trivial-only install python-uno
 
 aptmark markauto openoffice.org-emailmerge
-testmarkedauto python-uno ure uno-libs3 openoffice.org-common openoffice.org-style-galaxy openoffice.org-emailmerge
+testmarkedauto python-uno openoffice.org-common openoffice.org-emailmerge
 
 testequal 'Reading package lists...
 Building dependency tree...
diff --git a/test/integration/test-bug-618288-multiarch-same-lockstep b/test/integration/test-bug-618288-multiarch-same-lockstep
new file mode 100755 (executable)
index 0000000..7e384e4
--- /dev/null
@@ -0,0 +1,32 @@
+#!/bin/sh
+set -e
+
+TESTDIR=$(readlink -f $(dirname $0))
+. $TESTDIR/framework
+setupenvironment
+configarchitecture 'amd64' 'i386'
+
+insertinstalledpackage 'libsame' 'i386,amd64' '1' 'Multi-Arch: same' 'required'
+insertinstalledpackage 'apt' 'i386' '1' 'Depends: libsame (= 1)
+Essential: yes' 'required'
+insertinstalledpackage 'apt2' 'amd64' '1' 'Depends: libsame (= 1)
+Essential: yes' 'required'
+buildsimplenativepackage 'libsame' 'i386,amd64' '2' 'unstable' 'Multi-Arch: same' '' 'required'
+buildsimplenativepackage 'apt' 'i386' '2' 'unstable' 'Depends: libsame (= 2)' '' 'required'
+buildsimplenativepackage 'apt2' 'amd64' '2' 'unstable' 'Depends: libsame (= 2)' '' 'required'
+
+setupaptarchive
+
+testequal 'Reading package lists...
+Building dependency tree...
+The following packages will be upgraded:
+  apt:i386 apt2 libsame libsame:i386
+4 upgraded, 0 newly installed, 0 to remove and 0 not upgraded.
+Inst libsame [1] (2 unstable [amd64]) [libsame:amd64 on libsame:i386] [libsame:i386 on libsame:amd64] [libsame:i386 apt2:amd64 ]
+Inst libsame:i386 [1] (2 unstable [i386]) [apt2:amd64 apt:i386 ]
+Conf libsame:i386 (2 unstable [i386]) [apt2:amd64 apt:i386 ]
+Conf libsame (2 unstable [amd64]) [apt2:amd64 apt:i386 ]
+Inst apt2 [1] (2 unstable [amd64]) [apt:i386 ]
+Conf apt2 (2 unstable [amd64]) [apt:i386 ]
+Inst apt:i386 [1] (2 unstable [i386])
+Conf apt:i386 (2 unstable [i386])' aptget dist-upgrade -s
diff --git a/test/integration/test-handling-broken-orgroups b/test/integration/test-handling-broken-orgroups
new file mode 100755 (executable)
index 0000000..d88ad00
--- /dev/null
@@ -0,0 +1,108 @@
+#!/bin/sh
+set -e
+
+TESTDIR=$(readlink -f $(dirname $0))
+. $TESTDIR/framework
+setupenvironment
+configarchitecture 'i386'
+
+insertpackage 'unstable' 'cool' 'all' '1.0-1'
+insertpackage 'unstable' 'stuff' 'all' '1.0-1'
+insertpackage 'unstable' 'coolstuff' 'all' '1.0-1' 'Depends: cool | stuff'
+insertpackage 'unstable' 'coolstuff2' 'all' '1.0-1' 'Depends: cool2 | stuff'
+insertpackage 'unstable' 'coolstuff-broken' 'all' '1.0-1' 'Depends: cool2 | stuff2'
+insertpackage 'unstable' 'coolstuff-brokenrec' 'all' '1.0-1' 'Recommends: cool2 | stuff2'
+insertpackage 'unstable' 'coolstuff-conflict' 'all' '1.0-1' 'Depends: cool | stuff
+Conflicts: cool'
+insertpackage 'unstable' 'coolstuff-provided' 'all' '1.0-1' 'Depends: cool2 | stuff-abi'
+insertpackage 'unstable' 'extrastuff' 'all' '1.0-1' 'Provides: stuff-abi'
+
+insertpackage 'unstable' 'coolstuff-provided-broken' 'all' '1.0-1' 'Depends: cool2 | stuff-abi-2'
+insertpackage 'unstable' 'extrastuff' 'all' '1.0-1' 'Depends: stuff2
+Provides: stuff-abi-2'
+
+setupaptarchive
+
+testequal 'Reading package lists...
+Building dependency tree...
+The following extra packages will be installed:
+  cool
+The following NEW packages will be installed:
+  cool coolstuff
+0 upgraded, 2 newly installed, 0 to remove and 0 not upgraded.
+Inst cool (1.0-1 unstable [all])
+Inst coolstuff (1.0-1 unstable [all])
+Conf cool (1.0-1 unstable [all])
+Conf coolstuff (1.0-1 unstable [all])' aptget install coolstuff -s
+
+testequal 'Reading package lists...
+Building dependency tree...
+The following extra packages will be installed:
+  stuff
+The following NEW packages will be installed:
+  coolstuff2 stuff
+0 upgraded, 2 newly installed, 0 to remove and 0 not upgraded.
+Inst stuff (1.0-1 unstable [all])
+Inst coolstuff2 (1.0-1 unstable [all])
+Conf stuff (1.0-1 unstable [all])
+Conf coolstuff2 (1.0-1 unstable [all])' aptget install coolstuff2 -s
+
+testequal 'Reading package lists...
+Building dependency tree...
+Some packages could not be installed. This may mean that you have
+requested an impossible situation or if you are using the unstable
+distribution that some required packages have not yet been created
+or been moved out of Incoming.
+The following information may help to resolve the situation:
+
+The following packages have unmet dependencies:
+ coolstuff-broken : Depends: cool2 but it is not installable or
+                             stuff2 but it is not installable
+E: Broken packages' aptget install coolstuff-broken -s
+
+testequal 'Reading package lists...
+Building dependency tree...
+Recommended packages:
+  cool2 stuff2
+The following NEW packages will be installed:
+  coolstuff-brokenrec
+0 upgraded, 1 newly installed, 0 to remove and 0 not upgraded.
+Inst coolstuff-brokenrec (1.0-1 unstable [all])
+Conf coolstuff-brokenrec (1.0-1 unstable [all])' aptget install coolstuff-brokenrec -s
+
+testequal 'Reading package lists...
+Building dependency tree...
+The following extra packages will be installed:
+  stuff
+The following NEW packages will be installed:
+  coolstuff-conflict stuff
+0 upgraded, 2 newly installed, 0 to remove and 0 not upgraded.
+Inst stuff (1.0-1 unstable [all])
+Inst coolstuff-conflict (1.0-1 unstable [all])
+Conf stuff (1.0-1 unstable [all])
+Conf coolstuff-conflict (1.0-1 unstable [all])' aptget install coolstuff-conflict -s
+
+testequal 'Reading package lists...
+Building dependency tree...
+The following extra packages will be installed:
+  extrastuff
+The following NEW packages will be installed:
+  coolstuff-provided extrastuff
+0 upgraded, 2 newly installed, 0 to remove and 0 not upgraded.
+Inst extrastuff (1.0-1 unstable [all])
+Inst coolstuff-provided (1.0-1 unstable [all])
+Conf extrastuff (1.0-1 unstable [all])
+Conf coolstuff-provided (1.0-1 unstable [all])' aptget install coolstuff-provided -s
+
+testequal 'Reading package lists...
+Building dependency tree...
+Some packages could not be installed. This may mean that you have
+requested an impossible situation or if you are using the unstable
+distribution that some required packages have not yet been created
+or been moved out of Incoming.
+The following information may help to resolve the situation:
+
+The following packages have unmet dependencies:
+ coolstuff-provided-broken : Depends: cool2 but it is not installable or
+                                      stuff-abi-2
+E: Broken packages' aptget install coolstuff-provided-broken -s
diff --git a/test/integration/test-ubuntu-bug-761175-remove-purge b/test/integration/test-ubuntu-bug-761175-remove-purge
new file mode 100755 (executable)
index 0000000..93b67fc
--- /dev/null
@@ -0,0 +1,38 @@
+#!/bin/sh
+set -e
+
+TESTDIR=$(readlink -f $(dirname $0))
+. $TESTDIR/framework
+setupenvironment
+configarchitecture 'i386'
+
+setupsimplenativepackage 'compiz-core' 'i386' '1.0' 'unstable'
+BUILDDIR='incoming/compiz-core-1.0'
+mkdir -p ${BUILDDIR}/debian/compiz-core/etc
+echo 'foo=bar;' > ${BUILDDIR}/compiz.conf
+echo 'compiz.conf      /etc/compiz.conf' >> ${BUILDDIR}/debian/install
+buildpackage "$BUILDDIR" 'unstable' 'main'
+rm -rf "$BUILDDIR"
+
+setupaptarchive
+
+
+testdpkgnotinstalled compiz-core
+msgtest 'Install package' 'compiz-core'
+aptget install compiz-core -qq 2>&1 >/dev/null && msgpass || msgfail
+testdpkginstalled compiz-core
+
+msgtest 'Remove package' 'compiz-core'
+aptget remove compiz-core -y -qq 2>&1 >/dev/null && msgpass || msgfail
+testdpkgnotinstalled compiz-core
+
+msgtest 'Check that conffiles are still around for' 'compiz-core'
+dpkg -l compiz-core | grep '^rc' 2>&1 >/dev/null && msgpass || msgfail
+
+testequal 'Reading package lists...
+Building dependency tree...
+Reading state information...
+The following packages will be REMOVED:
+  compiz-core*
+0 upgraded, 0 newly installed, 1 to remove and 0 not upgraded.
+Purg compiz-core' aptget purge compiz-core -s
index 1c738aab99b4608f952ec9882b29fad69c2cf2cb..b790df618f7b27871125b0c0a687280989f4edbb 100644 (file)
@@ -71,9 +71,12 @@ bool Go(int argc,char *argv[])
               Itm.Type = pkgDirStream::Item::Directory;
 
            int Fd;
-           if (Extract.DoItem(Itm,Fd) == false)
+           if (Extract.DoItem(Itm,Fd) == false) {
+              fclose(F);
               return false;
-        }       
+           }
+        }
+        fclose(F);
       }
       else
         if (Deb.ExtractArchive(Extract) == false)
index 2d09676456de408082f2e5cf1ec0a6cb37677d54..8dd8ebdc9128acbfec1334fb78fe885c989c7c1c 100644 (file)
 1.3 1.2.2 1
 
 # Important attributes
-# disabled as dpkg --compare-versions doesn't like them…
+# disabled as dpkg --compare-versions doesn't like them… (versions have to start with a number)
 #- . -1
 #p - -1
 #a - -1
 #z - -1
-a . -1
-z . -1
+#a . -1
+#z . -1
+
+# disabled as dpkg --compare-versions doesn't like them… (versions have to start with a number)
+#III-alpha9.8 III-alpha9.8-1.5 -1
 
 # Epochs
 1:0.4 10.3 1
@@ -49,9 +52,6 @@ z . -1
 
 1:3.0.5-2 1:3.0.5.1 -1
 
-# #194327
-III-alpha9.8 III-alpha9.8-1.5 -1
-
 # #205960
 3.0~rc1-1 3.0-1 -1