summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--apt-inst/contrib/extracttar.cc2
-rw-r--r--apt-inst/dirstream.cc14
-rw-r--r--apt-pkg/acquire-item.cc24
-rw-r--r--apt-pkg/acquire-method.cc247
-rw-r--r--apt-pkg/acquire-method.h3
-rw-r--r--apt-pkg/acquire-worker.cc11
-rw-r--r--apt-pkg/algorithms.cc105
-rw-r--r--apt-pkg/algorithms.h1
-rw-r--r--apt-pkg/aptconfiguration.cc2
-rw-r--r--apt-pkg/cacheiterators.h1
-rw-r--r--apt-pkg/cacheset.h26
-rw-r--r--apt-pkg/cdrom.cc88
-rw-r--r--apt-pkg/contrib/cdromutl.cc16
-rw-r--r--apt-pkg/contrib/error.cc2
-rw-r--r--apt-pkg/contrib/mmap.cc8
-rw-r--r--apt-pkg/contrib/netrc.cc12
-rw-r--r--apt-pkg/contrib/progress.cc27
-rw-r--r--apt-pkg/contrib/progress.h3
-rw-r--r--apt-pkg/contrib/strutl.cc8
-rw-r--r--apt-pkg/deb/deblistparser.cc12
-rw-r--r--apt-pkg/deb/debmetaindex.cc5
-rw-r--r--apt-pkg/deb/dpkgpm.cc5
-rw-r--r--apt-pkg/depcache.cc137
-rw-r--r--apt-pkg/depcache.h1
-rw-r--r--apt-pkg/edsp.cc439
-rw-r--r--apt-pkg/edsp.h197
-rw-r--r--apt-pkg/edsp/edsplistparser.cc7
-rw-r--r--apt-pkg/indexcopy.cc10
-rw-r--r--apt-pkg/init.cc2
-rw-r--r--apt-pkg/orderlist.cc18
-rw-r--r--apt-pkg/packagemanager.cc44
-rw-r--r--apt-pkg/packagemanager.h2
-rw-r--r--apt-pkg/pkgcache.cc46
-rw-r--r--apt-pkg/pkgcache.h6
-rw-r--r--apt-pkg/pkgcachegen.cc5
-rw-r--r--apt-pkg/policy.cc14
-rw-r--r--cmdline/apt-cache.cc24
-rw-r--r--cmdline/apt-dump-solver.cc50
-rw-r--r--cmdline/apt-get.cc36
-rw-r--r--cmdline/apt-internal-solver.cc71
-rwxr-xr-xcmdline/apt-mark101
-rw-r--r--cmdline/apt-mark.cc373
-rw-r--r--cmdline/makefile16
-rw-r--r--debian/apt-utils.dirs2
-rw-r--r--debian/apt-utils.links1
-rw-r--r--debian/apt-utils.symbols6
-rw-r--r--debian/apt.cron.daily40
-rw-r--r--debian/apt.dirs1
-rw-r--r--debian/apt.lintian-overrides3
-rw-r--r--debian/apt.symbols83
-rw-r--r--debian/changelog145
-rw-r--r--debian/control5
-rwxr-xr-xdebian/rules9
-rw-r--r--doc/apt-key.8.xml16
-rw-r--r--doc/apt-mark.8.xml67
-rw-r--r--doc/apt_preferences.5.xml43
-rw-r--r--doc/po/de.po2
-rw-r--r--methods/http.cc33
-rw-r--r--methods/http.h2
-rw-r--r--methods/mirror.cc18
-rw-r--r--po/apt-all.pot4
-rw-r--r--po/ar.po4
-rw-r--r--po/ast.po4
-rw-r--r--po/bg.po4
-rw-r--r--po/bs.po4
-rw-r--r--po/ca.po4
-rw-r--r--po/cs.po4
-rw-r--r--po/cy.po4
-rw-r--r--po/da.po4
-rw-r--r--po/de.po4
-rw-r--r--po/dz.po4
-rw-r--r--po/el.po4
-rw-r--r--po/es.po4
-rw-r--r--po/eu.po4
-rw-r--r--po/fi.po4
-rw-r--r--po/fr.po4
-rw-r--r--po/gl.po1933
-rw-r--r--po/he.po4
-rw-r--r--po/hu.po4
-rw-r--r--po/it.po4
-rw-r--r--po/ja.po4
-rw-r--r--po/km.po4
-rw-r--r--po/ko.po4
-rw-r--r--po/ku.po4
-rw-r--r--po/lt.po4
-rw-r--r--po/mr.po4
-rw-r--r--po/nb.po4
-rw-r--r--po/ne.po4
-rw-r--r--po/nl.po4
-rw-r--r--po/nn.po4
-rw-r--r--po/pl.po4
-rw-r--r--po/pt.po4
-rw-r--r--po/pt_BR.po4
-rw-r--r--po/ro.po4
-rw-r--r--po/ru.po4
-rw-r--r--po/sk.po4
-rw-r--r--po/sl.po4
-rw-r--r--po/sv.po4
-rw-r--r--po/th.po4
-rw-r--r--po/tl.po4
-rw-r--r--po/uk.po4
-rw-r--r--po/vi.po4
-rw-r--r--po/zh_CN.po4
-rw-r--r--po/zh_TW.po4
-rw-r--r--test/integration/framework75
-rwxr-xr-xtest/integration/skip-bug-602412-dequote-redirect36
-rwxr-xr-xtest/integration/test-bug-470115-new-and-tighten-recommends172
-rwxr-xr-xtest/integration/test-bug-612557-garbage-upgrade6
-rwxr-xr-xtest/integration/test-bug-618288-multiarch-same-lockstep32
-rwxr-xr-xtest/integration/test-handling-broken-orgroups108
-rwxr-xr-xtest/integration/test-ubuntu-bug-761175-remove-purge38
-rw-r--r--test/testextract.cc7
-rw-r--r--test/versions.lst12
113 files changed, 3501 insertions, 1787 deletions
diff --git a/apt-inst/contrib/extracttar.cc b/apt-inst/contrib/extracttar.cc
index 1a358d57e..01b6b3836 100644
--- a/apt-inst/contrib/extracttar.cc
+++ b/apt-inst/contrib/extracttar.cc
@@ -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;
diff --git a/apt-inst/dirstream.cc b/apt-inst/dirstream.cc
index 586bbf739..9b6a56848 100644
--- a/apt-inst/dirstream.cc
+++ b/apt-inst/dirstream.cc
@@ -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;
}
diff --git a/apt-pkg/acquire-item.cc b/apt-pkg/acquire-item.cc
index cf88ded7b..6785b4e1b 100644
--- a/apt-pkg/acquire-item.cc
+++ b/apt-pkg/acquire-item.cc
@@ -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 a file for the %s package. "
"This might mean you need to manually fix this package."),
Version.ParentPkg().Name());
}
diff --git a/apt-pkg/acquire-method.cc b/apt-pkg/acquire-method.cc
index fb45d9ee7..e9e102488 100644
--- a/apt-pkg/acquire-method.cc
+++ b/apt-pkg/acquire-method.cc
@@ -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;
diff --git a/apt-pkg/acquire-method.h b/apt-pkg/acquire-method.h
index 03851e823..72efa8065 100644
--- a/apt-pkg/acquire-method.h
+++ b/apt-pkg/acquire-method.h
@@ -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),
diff --git a/apt-pkg/acquire-worker.cc b/apt-pkg/acquire-worker.cc
index ddd8e3101..75e03232a 100644
--- a/apt-pkg/acquire-worker.cc
+++ b/apt-pkg/acquire-worker.cc
@@ -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
diff --git a/apt-pkg/algorithms.cc b/apt-pkg/algorithms.cc
index bbe315ef7..6f1f82d50 100644
--- a/apt-pkg/algorithms.cc
+++ b/apt-pkg/algorithms.cc
@@ -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)
@@ -332,6 +330,12 @@ bool pkgFixBroken(pkgDepCache &Cache)
*/
bool pkgDistUpgrade(pkgDepCache &Cache)
{
+ std::string const solver = _config->Find("APT::Solver::Name", "internal");
+ if (solver != "internal") {
+ OpTextProgress Prog(*_config);
+ return EDSP::ResolveExternal(solver.c_str(), Cache, false, true, false, &Prog);
+ }
+
pkgDepCache::ActionGroup group(Cache);
/* Upgrade all installed packages first without autoinst to help the resolver
@@ -384,6 +388,12 @@ bool pkgDistUpgrade(pkgDepCache &Cache)
to install packages not marked for install */
bool pkgAllUpgrade(pkgDepCache &Cache)
{
+ std::string const solver = _config->Find("APT::Solver::Name", "internal");
+ if (solver != "internal") {
+ OpTextProgress Prog(*_config);
+ return EDSP::ResolveExternal(solver.c_str(), Cache, true, false, false, &Prog);
+ }
+
pkgDepCache::ActionGroup group(Cache);
pkgProblemResolver Fix(&Cache);
@@ -650,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;
}
@@ -700,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)
@@ -740,46 +746,9 @@ bool pkgProblemResolver::DoUpgrade(pkgCache::PkgIterator Pkg)
bool pkgProblemResolver::Resolve(bool BrokenFix)
{
std::string const solver = _config->Find("APT::Solver::Name", "internal");
-
- if (solver != "internal")
- {
-// std::string const file = _config->FindDir("Dir::Bin::Solvers") + solver;
- std::string const file = solver;
- if (RealFileExists(file.c_str()) == false)
- return _error->Error("Can't call external solver '%s' as it is not available: %s", solver.c_str(), file.c_str());
- int external[4] = {-1, -1, -1, -1};
- if (pipe(external) != 0 || pipe(external + 2) != 0)
- return _error->Errno("Resolve", "Can't create needed IPC pipes for EDSP");
- for (int i = 0; i < 4; ++i)
- SetCloseExec(external[i], true);
-
- pid_t Solver = ExecFork();
- if (Solver == 0)
- {
- dup2(external[0], STDIN_FILENO);
- dup2(external[3], STDOUT_FILENO);
- const char* calling[2] = { file.c_str(), 0 };
- execv(calling[0], (char**) calling);
- std::cerr << "Failed to execute solver '" << solver << "'!" << std::endl;
- _exit(100);
- }
- close(external[0]);
- close(external[3]);
-
- if (WaitFd(external[1], true, 5) == false)
- return _error->Errno("Resolve", "Waiting on availability of solver stdin timed out");
-
- FILE* output = fdopen(external[1], "w");
- if (output == NULL)
- return _error->Errno("Resolve", "fdopen on solver stdin failed");
- EDSP::WriteRequest(Cache, output);
- EDSP::WriteScenario(Cache, output);
- fclose(output);
-
- if (EDSP::ReadResponse(external[2], Cache) == false)
- return _error->Error("Reading solver response failed");
-
- return ExecWait(Solver, solver.c_str(), false);
+ if (solver != "internal") {
+ OpTextProgress Prog(*_config);
+ return EDSP::ResolveExternal(solver.c_str(), Cache, false, false, false, &Prog);
}
return ResolveInternal(BrokenFix);
}
@@ -981,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)
@@ -1008,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 "
@@ -1029,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)
@@ -1138,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();
@@ -1187,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;
@@ -1253,6 +1211,21 @@ bool pkgProblemResolver::ResolveInternal(bool const BrokenFix)
system was non-broken previously. */
bool pkgProblemResolver::ResolveByKeep()
{
+ std::string const solver = _config->Find("APT::Solver::Name", "internal");
+ if (solver != "internal") {
+ OpTextProgress Prog(*_config);
+ return EDSP::ResolveExternal(solver.c_str(), Cache, true, false, false, &Prog);
+ }
+ return ResolveByKeepInternal();
+}
+ /*}}}*/
+// ProblemResolver::ResolveByKeepInternal - Resolve problems using keep /*{{{*/
+// ---------------------------------------------------------------------
+/* This is the work horse of the soft upgrade routine. It is very gental
+ in that it does not install or remove any packages. It is assumed that the
+ system was non-broken previously. */
+bool pkgProblemResolver::ResolveByKeepInternal()
+{
pkgDepCache::ActionGroup group(Cache);
unsigned long Size = Cache.Head().PackageCount;
diff --git a/apt-pkg/algorithms.h b/apt-pkg/algorithms.h
index 0778ec722..582cbc527 100644
--- a/apt-pkg/algorithms.h
+++ b/apt-pkg/algorithms.h
@@ -107,6 +107,7 @@ class pkgProblemResolver /*{{{*/
bool DoUpgrade(pkgCache::PkgIterator Pkg);
bool ResolveInternal(bool const BrokenFix = false);
+ bool ResolveByKeepInternal();
public:
diff --git a/apt-pkg/aptconfiguration.cc b/apt-pkg/aptconfiguration.cc
index 14ee09e0d..ca602d4bf 100644
--- a/apt-pkg/aptconfiguration.cc
+++ b/apt-pkg/aptconfiguration.cc
@@ -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)));
diff --git a/apt-pkg/cacheiterators.h b/apt-pkg/cacheiterators.h
index 8f9f811da..0c9813c6d 100644
--- a/apt-pkg/cacheiterators.h
+++ b/apt-pkg/cacheiterators.h
@@ -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;
diff --git a/apt-pkg/cacheset.h b/apt-pkg/cacheset.h
index e690d660c..eb4f04d72 100644
--- a/apt-pkg/cacheset.h
+++ b/apt-pkg/cacheset.h
@@ -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);
}
/*}}}*/
diff --git a/apt-pkg/cdrom.cc b/apt-pkg/cdrom.cc
index 36a1d7f12..2a914c665 100644
--- a/apt-pkg/cdrom.cc
+++ b/apt-pkg/cdrom.cc
@@ -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);
}
diff --git a/apt-pkg/contrib/cdromutl.cc b/apt-pkg/contrib/cdromutl.cc
index 83c324f54..821e6d688 100644
--- a/apt-pkg/contrib/cdromutl.cc
+++ b/apt-pkg/contrib/cdromutl.cc
@@ -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();
}
-
-
+ /*}}}*/
diff --git a/apt-pkg/contrib/error.cc b/apt-pkg/contrib/error.cc
index fe50e606b..18810d2a4 100644
--- a/apt-pkg/contrib/error.cc
+++ b/apt-pkg/contrib/error.cc
@@ -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;
}
diff --git a/apt-pkg/contrib/mmap.cc b/apt-pkg/contrib/mmap.cc
index 9945b1606..19381ae47 100644
--- a/apt-pkg/contrib/mmap.cc
+++ b/apt-pkg/contrib/mmap.cc
@@ -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);
diff --git a/apt-pkg/contrib/netrc.cc b/apt-pkg/contrib/netrc.cc
index d8027fc24..34f472ee1 100644
--- a/apt-pkg/contrib/netrc.cc
+++ b/apt-pkg/contrib/netrc.cc
@@ -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);
}
}
}
diff --git a/apt-pkg/contrib/progress.cc b/apt-pkg/contrib/progress.cc
index 45e81edcb..84ee4c124 100644
--- a/apt-pkg/contrib/progress.cc
+++ b/apt-pkg/contrib/progress.cc
@@ -65,27 +65,18 @@ void OpProgress::OverallProgress(unsigned long Current, unsigned long Total,
// OpProgress::SubProgress - Set the sub progress state /*{{{*/
// ---------------------------------------------------------------------
/* */
-void OpProgress::SubProgress(unsigned long SubTotal,const string &Op)
+void OpProgress::SubProgress(unsigned long SubTotal,const string &Op,
+ float const Percent)
{
this->SubTotal = SubTotal;
- SubOp = Op;
- if (Total == 0)
- Percent = 0;
+ if (Op.empty() == false)
+ SubOp = Op;
+ if (Total == 0 || Percent == 0)
+ this->Percent = 0;
+ else if (Percent != -1)
+ this->Percent = this->Current += (Size*Percent)/SubTotal;
else
- Percent = Current*100.0/Total;
- Update();
-}
- /*}}}*/
-// OpProgress::SubProgress - Set the sub progress state /*{{{*/
-// ---------------------------------------------------------------------
-/* */
-void OpProgress::SubProgress(unsigned long SubTotal)
-{
- this->SubTotal = SubTotal;
- if (Total == 0)
- Percent = 0;
- else
- Percent = Current*100.0/Total;
+ this->Percent = Current*100.0/Total;
Update();
}
/*}}}*/
diff --git a/apt-pkg/contrib/progress.h b/apt-pkg/contrib/progress.h
index 7dd004f7e..3a914d17f 100644
--- a/apt-pkg/contrib/progress.h
+++ b/apt-pkg/contrib/progress.h
@@ -55,8 +55,7 @@ class OpProgress
public:
void Progress(unsigned long Current);
- void SubProgress(unsigned long SubTotal);
- void SubProgress(unsigned long SubTotal,const string &Op);
+ void SubProgress(unsigned long SubTotal, const string &Op = "", float const Percent = -1);
void OverallProgress(unsigned long Current,unsigned long Total,
unsigned long Size,const string &Op);
virtual void Done() {};
diff --git a/apt-pkg/contrib/strutl.cc b/apt-pkg/contrib/strutl.cc
index 2e2bb5ebc..072dda3ac 100644
--- a/apt-pkg/contrib/strutl.cc
+++ b/apt-pkg/contrib/strutl.cc
@@ -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;
diff --git a/apt-pkg/deb/deblistparser.cc b/apt-pkg/deb/deblistparser.cc
index 4be626741..4a9e94c85 100644
--- a/apt-pkg/deb/deblistparser.cc
+++ b/apt-pkg/deb/deblistparser.cc
@@ -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 == ')')
diff --git a/apt-pkg/deb/debmetaindex.cc b/apt-pkg/deb/debmetaindex.cc
index a6edab6b9..a91cc34e9 100644
--- a/apt-pkg/deb/debmetaindex.cc
+++ b/apt-pkg/deb/debmetaindex.cc
@@ -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();
diff --git a/apt-pkg/deb/dpkgpm.cc b/apt-pkg/deb/dpkgpm.cc
index 01808be24..b37980b7e 100644
--- a/apt-pkg/deb/dpkgpm.cc
+++ b/apt-pkg/deb/dpkgpm.cc
@@ -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)
diff --git a/apt-pkg/depcache.cc b/apt-pkg/depcache.cc
index ed9e2084c..5cb68804d 100644
--- a/apt-pkg/depcache.cc
+++ b/apt-pkg/depcache.cc
@@ -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)
{
- 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) << "previously satisfied important dependency on "
+ << Start.TargetPkg().FullName() << std::endl;
+ }
+ else
+ {
+ 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++)
{
@@ -1609,6 +1605,9 @@ bool pkgDepCache::MarkFollowsSuggests()
// pkgDepCache::MarkRequired - the main mark algorithm /*{{{*/
bool pkgDepCache::MarkRequired(InRootSetFunc &userFunc)
{
+ if (_config->Find("APT::Solver::Name", "internal") != "internal")
+ return true;
+
bool follow_recommends;
bool follow_suggests;
bool debug_autoremove = _config->FindB("Debug::pkgAutoRemove",false);
diff --git a/apt-pkg/depcache.h b/apt-pkg/depcache.h
index b15cd527d..f95ad9a14 100644
--- a/apt-pkg/depcache.h
+++ b/apt-pkg/depcache.h
@@ -232,6 +232,7 @@ class pkgDepCache : protected pkgCache::Namespace
inline bool NewInstall() const {return Status == 2 && Mode == ModeInstall;};
inline bool Delete() const {return Mode == ModeDelete;};
inline bool Keep() const {return Mode == ModeKeep;};
+ inline bool Protect() const {return (iFlags & Protected) == Protected;};
inline bool Upgrade() const {return Status > 0 && Mode == ModeInstall;};
inline bool Upgradable() const {return Status >= 1;};
inline bool Downgrade() const {return Status < 0 && Mode == ModeInstall;};
diff --git a/apt-pkg/edsp.cc b/apt-pkg/edsp.cc
index e6dc16536..218ce9f24 100644
--- a/apt-pkg/edsp.cc
+++ b/apt-pkg/edsp.cc
@@ -18,97 +18,196 @@
#include <stdio.h>
/*}}}*/
+// we could use pkgCache::DepType and ::Priority, but these would be localized strings…
+const char * const EDSP::PrioMap[] = {0, "important", "required", "standard",
+ "optional", "extra"};
+const char * const EDSP::DepMap[] = {"", "Depends", "Pre-Depends", "Suggests",
+ "Recommends" , "Conflicts", "Replaces",
+ "Obsoletes", "Breaks", "Enhances"};
+
// EDSP::WriteScenario - to the given file descriptor /*{{{*/
-bool EDSP::WriteScenario(pkgDepCache &Cache, FILE* output)
+bool EDSP::WriteScenario(pkgDepCache &Cache, FILE* output, OpProgress *Progress)
{
- // we could use pkgCache::DepType and ::Priority, but these would be lokalized strings…
- const char * const PrioMap[] = {0, "important", "required", "standard",
- "optional", "extra"};
- const char * const DepMap[] = {"", "Depends", "PreDepends", "Suggests",
- "Recommends" , "Conflicts", "Replaces",
- "Obsoletes", "Breaks", "Enhances"};
-
+ if (Progress != NULL)
+ Progress->SubProgress(Cache.Head().VersionCount, _("Send scenario to solver"));
+ unsigned long p = 0;
for (pkgCache::PkgIterator Pkg = Cache.PkgBegin(); Pkg.end() == false; ++Pkg)
- {
+ for (pkgCache::VerIterator Ver = Pkg.VersionList(); Ver.end() == false; ++Ver, ++p)
+ {
+ WriteScenarioVersion(Cache, output, Pkg, Ver);
+ WriteScenarioDependency(Cache, output, Pkg, Ver);
+ fprintf(output, "\n");
+ if (Progress != NULL && p % 100 == 0)
+ Progress->Progress(p);
+ }
+ return true;
+}
+ /*}}}*/
+// EDSP::WriteLimitedScenario - to the given file descriptor /*{{{*/
+bool EDSP::WriteLimitedScenario(pkgDepCache &Cache, FILE* output,
+ APT::PackageSet const &pkgset,
+ OpProgress *Progress)
+{
+ if (Progress != NULL)
+ Progress->SubProgress(Cache.Head().VersionCount, _("Send scenario to solver"));
+ unsigned long p = 0;
+ for (APT::PackageSet::const_iterator Pkg = pkgset.begin(); Pkg != pkgset.end(); ++Pkg, ++p)
for (pkgCache::VerIterator Ver = Pkg.VersionList(); Ver.end() == false; ++Ver)
{
- fprintf(output, "Package: %s\n", Pkg.Name());
- fprintf(output, "Architecture: %s\n", Ver.Arch());
- fprintf(output, "Version: %s\n", Ver.VerStr());
- if (Pkg.CurrentVer() == Ver)
- fprintf(output, "Installed: yes\n");
- if (Pkg->SelectedState == pkgCache::State::Hold)
- fprintf(output, "Hold: yes\n");
- fprintf(output, "APT-ID: %u\n", Ver->ID);
- fprintf(output, "Priority: %s\n", PrioMap[Ver->Priority]);
- if ((Pkg->Flags & pkgCache::Flag::Essential) == pkgCache::Flag::Essential)
- fprintf(output, "Essential: yes\n");
- fprintf(output, "Section: %s\n", Ver.Section());
- if (Ver->MultiArch == pkgCache::Version::Allowed || Ver->MultiArch == pkgCache::Version::AllAllowed)
- fprintf(output, "Multi-Arch: allowed\n");
- else if (Ver->MultiArch == pkgCache::Version::Foreign || Ver->MultiArch == pkgCache::Version::AllForeign)
- fprintf(output, "Multi-Arch: foreign\n");
- else if (Ver->MultiArch == pkgCache::Version::Same)
- fprintf(output, "Multi-Arch: same\n");
- signed short Pin = std::numeric_limits<signed short>::min();
- for (pkgCache::VerFileIterator File = Ver.FileList(); File.end() == false; ++File) {
- signed short const p = Cache.GetPolicy().GetPriority(File.File());
- if (Pin < p)
- Pin = p;
- }
- fprintf(output, "APT-Pin: %d\n", Pin);
- if (Cache.GetCandidateVer(Pkg) == Ver)
- fprintf(output, "APT-Candidate: yes\n");
- if ((Cache[Pkg].Flags & pkgCache::Flag::Auto) == pkgCache::Flag::Auto)
- fprintf(output, "APT-Automatic: yes\n");
- std::string dependencies[pkgCache::Dep::Enhances + 1];
- bool orGroup = false;
- for (pkgCache::DepIterator Dep = Ver.DependsList(); Dep.end() == false; ++Dep)
- {
- // Ignore implicit dependencies for multiarch here
- if (strcmp(Pkg.Arch(), Dep.TargetPkg().Arch()) != 0)
- continue;
- if (orGroup == false)
- dependencies[Dep->Type].append(", ");
- dependencies[Dep->Type].append(Dep.TargetPkg().Name());
- if (Dep->Version != 0)
- dependencies[Dep->Type].append(" (").append(pkgCache::CompTypeDeb(Dep->CompareOp)).append(" ").append(Dep.TargetVer()).append(")");
- if ((Dep->CompareOp & pkgCache::Dep::Or) == pkgCache::Dep::Or)
- {
- dependencies[Dep->Type].append(" | ");
- orGroup = true;
- }
- else
- orGroup = false;
- }
- for (int i = 1; i < pkgCache::Dep::Enhances + 1; ++i)
- if (dependencies[i].empty() == false)
- fprintf(output, "%s: %s\n", DepMap[i], dependencies[i].c_str()+2);
- string provides;
- for (pkgCache::PrvIterator Prv = Ver.ProvidesList(); Prv.end() == false; ++Prv)
- {
- // Ignore implicit provides for multiarch here
- if (strcmp(Pkg.Arch(), Prv.ParentPkg().Arch()) != 0 || strcmp(Pkg.Name(),Prv.Name()) == 0)
- continue;
- provides.append(", ").append(Prv.Name());
- }
- if (provides.empty() == false)
- fprintf(output, "Provides: %s\n", provides.c_str()+2);
-
-
+ WriteScenarioVersion(Cache, output, Pkg, Ver);
+ WriteScenarioLimitedDependency(Cache, output, Pkg, Ver, pkgset);
fprintf(output, "\n");
+ if (Progress != NULL && p % 100 == 0)
+ Progress->Progress(p);
}
- }
+ if (Progress != NULL)
+ Progress->Done();
return true;
}
/*}}}*/
+// EDSP::WriteScenarioVersion /*{{{*/
+void EDSP::WriteScenarioVersion(pkgDepCache &Cache, FILE* output, pkgCache::PkgIterator const &Pkg,
+ pkgCache::VerIterator const &Ver)
+{
+ fprintf(output, "Package: %s\n", Pkg.Name());
+ fprintf(output, "Architecture: %s\n", Ver.Arch());
+ fprintf(output, "Version: %s\n", Ver.VerStr());
+ if (Pkg.CurrentVer() == Ver)
+ fprintf(output, "Installed: yes\n");
+ if (Pkg->SelectedState == pkgCache::State::Hold ||
+ (Cache[Pkg].Keep() == true && Cache[Pkg].Protect() == true))
+ fprintf(output, "Hold: yes\n");
+ fprintf(output, "APT-ID: %d\n", Ver->ID);
+ fprintf(output, "Priority: %s\n", PrioMap[Ver->Priority]);
+ if ((Pkg->Flags & pkgCache::Flag::Essential) == pkgCache::Flag::Essential)
+ fprintf(output, "Essential: yes\n");
+ fprintf(output, "Section: %s\n", Ver.Section());
+ if (Ver->MultiArch == pkgCache::Version::Allowed || Ver->MultiArch == pkgCache::Version::AllAllowed)
+ fprintf(output, "Multi-Arch: allowed\n");
+ else if (Ver->MultiArch == pkgCache::Version::Foreign || Ver->MultiArch == pkgCache::Version::AllForeign)
+ fprintf(output, "Multi-Arch: foreign\n");
+ else if (Ver->MultiArch == pkgCache::Version::Same)
+ fprintf(output, "Multi-Arch: same\n");
+ signed short Pin = std::numeric_limits<signed short>::min();
+ for (pkgCache::VerFileIterator File = Ver.FileList(); File.end() == false; ++File) {
+ signed short const p = Cache.GetPolicy().GetPriority(File.File());
+ if (Pin < p)
+ Pin = p;
+ }
+ fprintf(output, "APT-Pin: %d\n", Pin);
+ if (Cache.GetCandidateVer(Pkg) == Ver)
+ fprintf(output, "APT-Candidate: yes\n");
+ if ((Cache[Pkg].Flags & pkgCache::Flag::Auto) == pkgCache::Flag::Auto)
+ fprintf(output, "APT-Automatic: yes\n");
+}
+ /*}}}*/
+// EDSP::WriteScenarioDependency /*{{{*/
+void EDSP::WriteScenarioDependency(pkgDepCache &Cache, FILE* output, pkgCache::PkgIterator const &Pkg,
+ pkgCache::VerIterator const &Ver)
+{
+ std::string dependencies[pkgCache::Dep::Enhances + 1];
+ bool orGroup = false;
+ for (pkgCache::DepIterator Dep = Ver.DependsList(); Dep.end() == false; ++Dep)
+ {
+ // Ignore implicit dependencies for multiarch here
+ if (strcmp(Pkg.Arch(), Dep.TargetPkg().Arch()) != 0)
+ continue;
+ if (orGroup == false)
+ dependencies[Dep->Type].append(", ");
+ dependencies[Dep->Type].append(Dep.TargetPkg().Name());
+ if (Dep->Version != 0)
+ dependencies[Dep->Type].append(" (").append(pkgCache::CompTypeDeb(Dep->CompareOp)).append(" ").append(Dep.TargetVer()).append(")");
+ if ((Dep->CompareOp & pkgCache::Dep::Or) == pkgCache::Dep::Or)
+ {
+ dependencies[Dep->Type].append(" | ");
+ orGroup = true;
+ }
+ else
+ orGroup = false;
+ }
+ for (int i = 1; i < pkgCache::Dep::Enhances + 1; ++i)
+ if (dependencies[i].empty() == false)
+ fprintf(output, "%s: %s\n", DepMap[i], dependencies[i].c_str()+2);
+ string provides;
+ for (pkgCache::PrvIterator Prv = Ver.ProvidesList(); Prv.end() == false; ++Prv)
+ {
+ // Ignore implicit provides for multiarch here
+ if (strcmp(Pkg.Arch(), Prv.ParentPkg().Arch()) != 0 || strcmp(Pkg.Name(),Prv.Name()) == 0)
+ continue;
+ provides.append(", ").append(Prv.Name());
+ }
+ if (provides.empty() == false)
+ fprintf(output, "Provides: %s\n", provides.c_str()+2);
+}
+ /*}}}*/
+// EDSP::WriteScenarioLimitedDependency /*{{{*/
+void EDSP::WriteScenarioLimitedDependency(pkgDepCache &Cache, FILE* output,
+ pkgCache::PkgIterator const &Pkg,
+ pkgCache::VerIterator const &Ver,
+ APT::PackageSet const &pkgset)
+{
+ std::string dependencies[pkgCache::Dep::Enhances + 1];
+ bool orGroup = false;
+ for (pkgCache::DepIterator Dep = Ver.DependsList(); Dep.end() == false; ++Dep)
+ {
+ // Ignore implicit dependencies for multiarch here
+ if (strcmp(Pkg.Arch(), Dep.TargetPkg().Arch()) != 0)
+ continue;
+ if (orGroup == false)
+ {
+ if (pkgset.find(Dep.TargetPkg()) == pkgset.end())
+ continue;
+ dependencies[Dep->Type].append(", ");
+ }
+ else if (pkgset.find(Dep.TargetPkg()) == pkgset.end())
+ {
+ if ((Dep->CompareOp & pkgCache::Dep::Or) == pkgCache::Dep::Or)
+ continue;
+ dependencies[Dep->Type].erase(dependencies[Dep->Type].end()-3, dependencies[Dep->Type].end());
+ orGroup = false;
+ continue;
+ }
+ dependencies[Dep->Type].append(Dep.TargetPkg().Name());
+ if (Dep->Version != 0)
+ dependencies[Dep->Type].append(" (").append(pkgCache::CompTypeDeb(Dep->CompareOp)).append(" ").append(Dep.TargetVer()).append(")");
+ if ((Dep->CompareOp & pkgCache::Dep::Or) == pkgCache::Dep::Or)
+ {
+ dependencies[Dep->Type].append(" | ");
+ orGroup = true;
+ }
+ else
+ orGroup = false;
+ }
+ for (int i = 1; i < pkgCache::Dep::Enhances + 1; ++i)
+ if (dependencies[i].empty() == false)
+ fprintf(output, "%s: %s\n", DepMap[i], dependencies[i].c_str()+2);
+ string provides;
+ for (pkgCache::PrvIterator Prv = Ver.ProvidesList(); Prv.end() == false; ++Prv)
+ {
+ // Ignore implicit provides for multiarch here
+ if (strcmp(Pkg.Arch(), Prv.ParentPkg().Arch()) != 0 || strcmp(Pkg.Name(),Prv.Name()) == 0)
+ continue;
+ if (pkgset.find(Prv.ParentPkg()) == pkgset.end())
+ continue;
+ provides.append(", ").append(Prv.Name());
+ }
+ if (provides.empty() == false)
+ fprintf(output, "Provides: %s\n", provides.c_str()+2);
+}
+ /*}}}*/
// EDSP::WriteRequest - to the given file descriptor /*{{{*/
bool EDSP::WriteRequest(pkgDepCache &Cache, FILE* output, bool const Upgrade,
- bool const DistUpgrade, bool const AutoRemove)
+ bool const DistUpgrade, bool const AutoRemove,
+ OpProgress *Progress)
{
+ if (Progress != NULL)
+ Progress->SubProgress(Cache.Head().PackageCount, _("Send request to solver"));
+ unsigned long p = 0;
string del, inst;
- for (pkgCache::PkgIterator Pkg = Cache.PkgBegin(); Pkg.end() == false; ++Pkg)
+ for (pkgCache::PkgIterator Pkg = Cache.PkgBegin(); Pkg.end() == false; ++Pkg, ++p)
{
+ if (Progress != NULL && p % 100 == 0)
+ Progress->Progress(p);
string* req;
if (Cache[Pkg].Delete() == true)
req = &del;
@@ -118,7 +217,7 @@ bool EDSP::WriteRequest(pkgDepCache &Cache, FILE* output, bool const Upgrade,
continue;
req->append(" ").append(Pkg.FullName());
}
- fprintf(output, "Request: EDSP 0.2\n");
+ fprintf(output, "Request: EDSP 0.4\n");
if (del.empty() == false)
fprintf(output, "Remove: %s\n", del.c_str()+1);
if (inst.empty() == false)
@@ -141,26 +240,76 @@ bool EDSP::WriteRequest(pkgDepCache &Cache, FILE* output, bool const Upgrade,
}
/*}}}*/
// EDSP::ReadResponse - from the given file descriptor /*{{{*/
-bool EDSP::ReadResponse(int const input, pkgDepCache &Cache) {
+bool EDSP::ReadResponse(int const input, pkgDepCache &Cache, OpProgress *Progress) {
+ /* We build an map id to mmap offset here
+ In theory we could use the offset as ID, but then VersionCount
+ couldn't be used to create other versionmappings anymore and it
+ would be too easy for a (buggy) solver to segfault APT… */
+ unsigned long long const VersionCount = Cache.Head().VersionCount;
+ unsigned long VerIdx[VersionCount];
+ for (pkgCache::PkgIterator P = Cache.PkgBegin(); P.end() == false; ++P) {
+ for (pkgCache::VerIterator V = P.VersionList(); V.end() == false; ++V)
+ VerIdx[V->ID] = V.Index();
+ Cache[P].Marked = true;
+ Cache[P].Garbage = false;
+ }
+
FileFd in;
in.OpenDescriptor(input, FileFd::ReadOnly);
- pkgTagFile response(&in);
+ pkgTagFile response(&in, 100);
pkgTagSection section;
+
while (response.Step(section) == true) {
std::string type;
if (section.Exists("Install") == true)
type = "Install";
else if (section.Exists("Remove") == true)
type = "Remove";
- //FIXME: handle progress
+ else if (section.Exists("Progress") == true) {
+ if (Progress != NULL) {
+ string msg = section.FindS("Message");
+ if (msg.empty() == true)
+ msg = _("Prepare for receiving solution");
+ Progress->SubProgress(100, msg, section.FindI("Percentage", 0));
+ }
+ continue;
+ } else if (section.Exists("Error") == true) {
+ std::string msg = SubstVar(SubstVar(section.FindS("Message"), "\n .\n", "\n\n"), "\n ", "\n");
+ if (msg.empty() == true) {
+ msg = _("External solver failed without a proper error message");
+ _error->Error(msg.c_str());
+ } else
+ _error->Error("External solver failed with: %s", msg.substr(0,msg.find('\n')).c_str());
+ if (Progress != NULL)
+ Progress->Done();
+ std::cerr << "The solver encountered an error of type: " << section.FindS("Error") << std::endl;
+ std::cerr << "The following information might help you to understand what is wrong:" << std::endl;
+ std::cerr << msg << std::endl << std::endl;
+ return false;
+ } else if (section.Exists("Autoremove") == true)
+ type = "Autoremove";
else
continue;
- int const id = section.FindI(type.c_str(), -1);
- if (id == -1)
- return _error->Error("Unable to parse %s request!", type.c_str());
+ size_t const id = section.FindULL(type.c_str(), VersionCount);
+ if (id == VersionCount) {
+ _error->Warning("Unable to parse %s request with id value '%s'!", type.c_str(), section.FindS(type.c_str()).c_str());
+ continue;
+ } else if (id > Cache.Head().VersionCount) {
+ _error->Warning("ID value '%s' in %s request stanza is to high to refer to a known version!", section.FindS(type.c_str()).c_str(), type.c_str());
+ continue;
+ }
- //FIXME: find version by id and mark it correctly
+ pkgCache::VerIterator Ver(Cache.GetCache(), Cache.GetCache().VerP + VerIdx[id]);
+ Cache.SetCandidateVersion(Ver);
+ if (type == "Install")
+ Cache.MarkInstall(Ver.ParentPkg(), false, 0, false);
+ else if (type == "Remove")
+ Cache.MarkDelete(Ver.ParentPkg(), false);
+ else if (type == "Autoremove") {
+ Cache[Ver.ParentPkg()].Marked = false;
+ Cache[Ver.ParentPkg()].Garbage = true;
+ }
}
return true;
}
@@ -277,12 +426,22 @@ bool EDSP::ApplyRequest(std::list<std::string> const &install,
pkgDepCache &Cache)
{
for (std::list<std::string>::const_iterator i = install.begin();
- i != install.end(); ++i)
- Cache.MarkInstall(Cache.FindPkg(*i), false);
+ i != install.end(); ++i) {
+ pkgCache::PkgIterator P = Cache.FindPkg(*i);
+ if (P.end() == true)
+ _error->Warning("Package %s is not known, so can't be installed", i->c_str());
+ else
+ Cache.MarkInstall(P, false);
+ }
for (std::list<std::string>::const_iterator i = remove.begin();
- i != remove.end(); ++i)
- Cache.MarkDelete(Cache.FindPkg(*i));
+ i != remove.end(); ++i) {
+ pkgCache::PkgIterator P = Cache.FindPkg(*i);
+ if (P.end() == true)
+ _error->Warning("Package %s is not known, so can't be installed", i->c_str());
+ else
+ Cache.MarkDelete(P);
+ }
return true;
}
/*}}}*/
@@ -293,17 +452,113 @@ bool EDSP::WriteSolution(pkgDepCache &Cache, FILE* output)
for (pkgCache::PkgIterator Pkg = Cache.PkgBegin(); Pkg.end() == false; ++Pkg)
{
if (Cache[Pkg].Delete() == true)
- fprintf(output, "Remove: %d\n", Cache.GetCandidateVer(Pkg)->ID);
+ {
+ fprintf(output, "Remove: %d\n", Pkg.CurrentVer()->ID);
+ if (Debug == true)
+ fprintf(output, "Package: %s\nVersion: %s\n", Pkg.FullName().c_str(), Pkg.CurrentVer().VerStr());
+ }
else if (Cache[Pkg].NewInstall() == true || Cache[Pkg].Upgrade() == true)
+ {
fprintf(output, "Install: %d\n", Cache.GetCandidateVer(Pkg)->ID);
+ if (Debug == true)
+ fprintf(output, "Package: %s\nVersion: %s\n", Pkg.FullName().c_str(), Cache.GetCandidateVer(Pkg).VerStr());
+ }
+ else if (Cache[Pkg].Garbage == true)
+ {
+ fprintf(output, "Autoremove: %d\n", Pkg.CurrentVer()->ID);
+ if (Debug == true)
+ fprintf(output, "Package: %s\nVersion: %s\n", Pkg.FullName().c_str(), Pkg.CurrentVer().VerStr());
+ fprintf(stderr, "Autoremove: %s\nVersion: %s\n", Pkg.FullName().c_str(), Pkg.CurrentVer().VerStr());
+ }
else
continue;
- if (Debug == true)
- fprintf(output, "Package: %s\nVersion: %s\n", Pkg.FullName().c_str(), Cache.GetCandidateVer(Pkg).VerStr());
fprintf(output, "\n");
}
return true;
}
/*}}}*/
-bool EDSP::WriteError(std::string const &message, FILE* output) { return false; }
+// EDSP::WriteProgess - pulse to the given file descriptor /*{{{*/
+bool EDSP::WriteProgress(unsigned short const percent, const char* const message, FILE* output) {
+ fprintf(output, "Progress: %s\n", TimeRFC1123(time(NULL)).c_str());
+ fprintf(output, "Percentage: %d\n", percent);
+ fprintf(output, "Message: %s\n\n", message);
+ fflush(output);
+ return true;
+}
+ /*}}}*/
+// EDSP::WriteError - format an error message to be send to file descriptor /*{{{*/
+bool EDSP::WriteError(char const * const uuid, std::string const &message, FILE* output) {
+ fprintf(output, "Error: %s\n", uuid);
+ fprintf(output, "Message: %s\n\n", SubstVar(SubstVar(message, "\n\n", "\n.\n"), "\n", "\n ").c_str());
+ return true;
+}
+ /*}}}*/
+// EDSP::ExecuteSolver - fork requested solver and setup ipc pipes {{{*/
+bool EDSP::ExecuteSolver(const char* const solver, int *solver_in, int *solver_out) {
+ std::vector<std::string> const solverDirs = _config->FindVector("Dir::Bin::Solvers");
+ std::string file;
+ for (std::vector<std::string>::const_iterator dir = solverDirs.begin();
+ dir != solverDirs.end(); ++dir) {
+ file = flCombine(*dir, solver);
+ if (RealFileExists(file.c_str()) == true)
+ break;
+ file.clear();
+ }
+
+ if (file.empty() == true)
+ return _error->Error("Can't call external solver '%s' as it is not in a configured directory!", solver);
+ int external[4] = {-1, -1, -1, -1};
+ if (pipe(external) != 0 || pipe(external + 2) != 0)
+ return _error->Errno("Resolve", "Can't create needed IPC pipes for EDSP");
+ for (int i = 0; i < 4; ++i)
+ SetCloseExec(external[i], true);
+
+ pid_t Solver = ExecFork();
+ if (Solver == 0) {
+ dup2(external[0], STDIN_FILENO);
+ dup2(external[3], STDOUT_FILENO);
+ const char* calling[2] = { file.c_str(), 0 };
+ execv(calling[0], (char**) calling);
+ std::cerr << "Failed to execute solver '" << solver << "'!" << std::endl;
+ _exit(100);
+ }
+ close(external[0]);
+ close(external[3]);
+
+ if (WaitFd(external[1], true, 5) == false)
+ return _error->Errno("Resolve", "Timed out while Waiting on availability of solver stdin");
+
+ *solver_in = external[1];
+ *solver_out = external[2];
+ return true;
+}
+ /*}}}*/
+// EDSP::ResolveExternal - resolve problems by asking external for help {{{*/
+bool EDSP::ResolveExternal(const char* const solver, pkgDepCache &Cache,
+ bool const upgrade, bool const distUpgrade,
+ bool const autoRemove, OpProgress *Progress) {
+ int solver_in, solver_out;
+ if (EDSP::ExecuteSolver(solver, &solver_in, &solver_out) == false)
+ return false;
+
+ FILE* output = fdopen(solver_in, "w");
+ if (output == NULL)
+ return _error->Errno("Resolve", "fdopen on solver stdin failed");
+
+ if (Progress != NULL)
+ Progress->OverallProgress(0, 100, 5, _("Execute external solver"));
+ EDSP::WriteRequest(Cache, output, upgrade, distUpgrade, autoRemove, Progress);
+ if (Progress != NULL)
+ Progress->OverallProgress(5, 100, 20, _("Execute external solver"));
+ EDSP::WriteScenario(Cache, output, Progress);
+ fclose(output);
+
+ if (Progress != NULL)
+ Progress->OverallProgress(25, 100, 75, _("Execute external solver"));
+ if (EDSP::ReadResponse(solver_out, Cache, Progress) == false)
+ return false;
+
+ return true;
+}
+ /*}}}*/
diff --git a/apt-pkg/edsp.h b/apt-pkg/edsp.h
index 31f8891f3..743c3f5d1 100644
--- a/apt-pkg/edsp.h
+++ b/apt-pkg/edsp.h
@@ -1,39 +1,222 @@
// -*- mode: cpp; mode: fold -*-
-// Description /*{{{*/
-/* ######################################################################
+/** Description \file edsp.h {{{
+ ######################################################################
Set of methods to help writing and reading everything needed for EDSP
+ with the noteable exception of reading a scenario for conversion into
+ a Cache as this is handled by edsp interface for listparser and friends
##################################################################### */
/*}}}*/
#ifndef PKGLIB_EDSP_H
#define PKGLIB_EDSP_H
#include <apt-pkg/depcache.h>
+#include <apt-pkg/cacheset.h>
+#include <apt-pkg/progress.h>
#include <string>
class EDSP /*{{{*/
{
+ // we could use pkgCache::DepType and ::Priority, but these would be localized strings…
+ static const char * const PrioMap[];
+ static const char * const DepMap[];
+
bool static ReadLine(int const input, std::string &line);
bool static StringToBool(char const *answer, bool const defValue);
+ void static WriteScenarioVersion(pkgDepCache &Cache, FILE* output,
+ pkgCache::PkgIterator const &Pkg,
+ pkgCache::VerIterator const &Ver);
+ void static WriteScenarioDependency(pkgDepCache &Cache, FILE* output,
+ pkgCache::PkgIterator const &Pkg,
+ pkgCache::VerIterator const &Ver);
+ void static WriteScenarioLimitedDependency(pkgDepCache &Cache, FILE* output,
+ pkgCache::PkgIterator const &Pkg,
+ pkgCache::VerIterator const &Ver,
+ APT::PackageSet const &pkgset);
public:
+ /** \brief creates the EDSP request stanza
+ *
+ * In the EDSP protocol the first thing send to the resolver is a stanza
+ * encoding the request. This method will write this stanza by looking at
+ * the given Cache and requests the installation of all packages which were
+ * marked for installation in it (equally for remove).
+ *
+ * \param Cache in which the request is encoded
+ * \param output is written to this "file"
+ * \param upgrade is true if it is an request like apt-get upgrade
+ * \param distUpgrade is true if it is a request like apt-get dist-upgrade
+ * \param autoRemove is true if removal of unneeded packages should be performed
+ * \param Progress is an instance to report progress to
+ *
+ * \return true if request was composed successfully, otherwise false
+ */
bool static WriteRequest(pkgDepCache &Cache, FILE* output,
bool const upgrade = false,
bool const distUpgrade = false,
- bool const autoRemove = false);
- bool static WriteScenario(pkgDepCache &Cache, FILE* output);
- bool static ReadResponse(int const input, pkgDepCache &Cache);
+ bool const autoRemove = false,
+ OpProgress *Progress = NULL);
+
+ /** \brief creates the scenario representing the package universe
+ *
+ * After the request all known information about a package are send
+ * to the solver. The output looks similar to a Packages or status file
+ *
+ * All packages and version included in this Cache are send, even if
+ * it doesn't make sense from an APT resolver point of view like versions
+ * with a negative pin to enable the solver to propose even that as a
+ * solution or at least to be able to give a hint what can be done to
+ * statisfy a request.
+ *
+ * \param Cache is the known package universe
+ * \param output is written to this "file"
+ * \param Progress is an instance to report progress to
+ *
+ * \return true if universe was composed successfully, otherwise false
+ */
+ bool static WriteScenario(pkgDepCache &Cache, FILE* output, OpProgress *Progress = NULL);
+
+ /** \brief creates a limited scenario representing the package universe
+ *
+ * This method works similar to #WriteScenario as it works in the same
+ * way but doesn't send the complete universe to the solver but only
+ * packages included in the pkgset which will have only dependencies
+ * on packages which are in the given set. All other dependencies will
+ * be removed, so that this method can be used to create testcases
+ *
+ * \param Cache is the known package universe
+ * \param output is written to this "file"
+ * \param pkgset is a set of packages the universe should be limited to
+ * \param Progress is an instance to report progress to
+ *
+ * \return true if universe was composed successfully, otherwise false
+ */
+ bool static WriteLimitedScenario(pkgDepCache &Cache, FILE* output,
+ APT::PackageSet const &pkgset,
+ OpProgress *Progress = NULL);
- // ReadScenario is provided by the listparser infrastructure
+ /** \brief waits and acts on the information returned from the solver
+ *
+ * This method takes care of interpreting whatever the solver sends
+ * through the standard output like a solution, progress or an error.
+ * The main thread should handle his control over to this method to
+ * wait for the solver to finish the given task
+ *
+ * \param input file descriptor with the response from the solver
+ * \param Cache the solution should be applied on if any
+ * \param Progress is an instance to report progress to
+ *
+ * \return true if a solution is found and applied correctly, otherwise false
+ */
+ bool static ReadResponse(int const input, pkgDepCache &Cache, OpProgress *Progress = NULL);
+
+ /** \brief search and read the request stanza for action later
+ *
+ * This method while ignore the input up to the point it finds the
+ * Request: line as an indicator for the Request stanza.
+ * The request is stored in the parameters install and remove then,
+ * as the cache isn't build yet as the scenario follows the request.
+ *
+ * \param input file descriptor with the edsp input for the solver
+ * \param[out] install is a list which gets populated with requested installs
+ * \param[out] remove is a list which gets populated with requested removals
+ * \param[out] upgrade is true if it is a request like apt-get upgrade
+ * \param[out] distUpgrade is true if it is a request like apt-get dist-upgrade
+ * \param[out] autoRemove is true if removal of uneeded packages should be performed
+ *
+ * \return true if the request could be found and worked on, otherwise false
+ */
bool static ReadRequest(int const input, std::list<std::string> &install,
std::list<std::string> &remove, bool &upgrade,
bool &distUpgrade, bool &autoRemove);
+
+ /** \brief takes the request lists and applies it on the cache
+ *
+ * The lists as created by #ReadRequest will be used to find the
+ * packages in question and mark them for install/remove.
+ * No solving is done and no auto-install/-remove.
+ *
+ * \param install is a list of packages to mark for installation
+ * \param remove is a list of packages to mark for removal
+ * \param Cache is there the markers should be set
+ *
+ * \return false if the request couldn't be applied, true otherwise
+ */
bool static ApplyRequest(std::list<std::string> const &install,
std::list<std::string> const &remove,
pkgDepCache &Cache);
+
+ /** \brief encodes the changes in the Cache as a EDSP solution
+ *
+ * The markers in the Cache are observed and send to given
+ * file. The solution isn't checked for consistency or alike,
+ * so even broken solutions can be written successfully,
+ * but the front-end revicing it will properly fail then.
+ *
+ * \param Cache which represents the solution
+ * \param output to write the stanzas forming the solution to
+ *
+ * \return true if solution could be written, otherwise false
+ */
bool static WriteSolution(pkgDepCache &Cache, FILE* output);
- bool static WriteError(std::string const &message, FILE* output);
+ /** \brief sends a progress report
+ *
+ * \param percent of the solving completed
+ * \param message the solver wants the user to see
+ * \param output the front-end listens for progress report
+ */
+ bool static WriteProgress(unsigned short const percent, const char* const message, FILE* output);
+
+ /** \brief sends an error report
+ *
+ * Solvers are expected to execute successfully even if
+ * they were unable to calculate a solution for a given task.
+ * Obviously they can't send a solution through, so this
+ * methods deals with formatting an error message correctly
+ * so that the front-ends can recieve and display it.
+ *
+ * The first line of the message should be a short description
+ * of the error so it can be used for dialog titles or alike
+ *
+ * \param uuid of this error message
+ * \param message is free form text to discribe the error
+ * \param output the front-end listens for error messages
+ */
+ bool static WriteError(char const * const uuid, std::string const &message, FILE* output);
+
+
+ /** \brief executes the given solver and returns the pipe ends
+ *
+ * The given solver is executed if it can be found in one of the
+ * configured directories and setup for it is performed.
+ *
+ * \param solver to execute
+ * \param[out] solver_in will be the stdin of the solver
+ * \param[out] solver_out will be the stdout of the solver
+ *
+ * \return true if the solver could be started and the pipes
+ * are set up correctly, otherwise false and the pipes are invalid
+ */
+ bool static ExecuteSolver(const char* const solver, int *solver_in, int *solver_out);
+
+ /** \brief call an external resolver to handle the request
+ *
+ * This method wraps all the methods above to call an external solver
+ *
+ * \param solver to execute
+ * \param Cache with the problem and as universe to work in
+ * \param upgrade is true if it is a request like apt-get upgrade
+ * \param distUpgrade is true if it is a request like apt-get dist-upgrade
+ * \param autoRemove is true if unneeded packages should be removed
+ * \param Progress is an instance to report progress to
+ *
+ * \return true if the solver has successfully solved the problem,
+ * otherwise false
+ */
+ bool static ResolveExternal(const char* const solver, pkgDepCache &Cache,
+ bool const upgrade, bool const distUpgrade,
+ bool const autoRemove, OpProgress *Progress = NULL);
};
/*}}}*/
#endif
diff --git a/apt-pkg/edsp/edsplistparser.cc b/apt-pkg/edsp/edsplistparser.cc
index 913455efa..3349e8cce 100644
--- a/apt-pkg/edsp/edsplistparser.cc
+++ b/apt-pkg/edsp/edsplistparser.cc
@@ -63,10 +63,13 @@ unsigned short edspListParser::VersionHash()
bool edspListParser::ParseStatus(pkgCache::PkgIterator &Pkg,
pkgCache::VerIterator &Ver)
{
- if (Section.FindFlag("Hold",Pkg->Flags,pkgCache::State::Installed) == false)
+ unsigned long state = 0;
+ if (Section.FindFlag("Hold",state,pkgCache::State::Hold) == false)
return false;
+ if (state != 0)
+ Pkg->SelectedState = pkgCache::State::Hold;
- unsigned long state = 0;
+ state = 0;
if (Section.FindFlag("Installed",state,pkgCache::State::Installed) == false)
return false;
if (state != 0)
diff --git a/apt-pkg/indexcopy.cc b/apt-pkg/indexcopy.cc
index c2ee1c347..064fb007c 100644
--- a/apt-pkg/indexcopy.cc
+++ b/apt-pkg/indexcopy.cc
@@ -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();
diff --git a/apt-pkg/init.cc b/apt-pkg/init.cc
index a30f27844..aff585e3b 100644
--- a/apt-pkg/init.cc
+++ b/apt-pkg/init.cc
@@ -72,7 +72,9 @@ bool pkgInitConfig(Configuration &Cnf)
Cnf.Set("Dir::Etc::preferencesparts","preferences.d");
Cnf.Set("Dir::Etc::trusted", "trusted.gpg");
Cnf.Set("Dir::Etc::trustedparts","trusted.gpg.d");
+
Cnf.Set("Dir::Bin::methods","/usr/lib/apt/methods");
+ Cnf.Set("Dir::Bin::solvers::","/usr/lib/apt/solvers");
Cnf.Set("Dir::Media::MountPath","/media/apt");
// State
diff --git a/apt-pkg/orderlist.cc b/apt-pkg/orderlist.cc
index d5bd19581..ba43bc757 100644
--- a/apt-pkg/orderlist.cc
+++ b/apt-pkg/orderlist.cc
@@ -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 */
diff --git a/apt-pkg/packagemanager.cc b/apt-pkg/packagemanager.cc
index 4c655cb7b..fe9f6eb68 100644
--- a/apt-pkg/packagemanager.cc
+++ b/apt-pkg/packagemanager.cc
@@ -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'. "
@@ -475,21 +486,28 @@ 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);
diff --git a/apt-pkg/packagemanager.h b/apt-pkg/packagemanager.h
index efd2cfac6..053b4dc13 100644
--- a/apt-pkg/packagemanager.h
+++ b/apt-pkg/packagemanager.h
@@ -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);
diff --git a/apt-pkg/pkgcache.cc b/apt-pkg/pkgcache.cc
index c6326abf1..38e4e904e 100644
--- a/apt-pkg/pkgcache.cc
+++ b/apt-pkg/pkgcache.cc
@@ -211,12 +211,18 @@ pkgCache::PkgIterator pkgCache::SingleArchFindPkg(const string &Name)
// ---------------------------------------------------------------------
/* Returns 0 on error, pointer to the package otherwise */
pkgCache::PkgIterator pkgCache::FindPkg(const string &Name) {
- if (MultiArchCache() == false)
- return SingleArchFindPkg(Name);
size_t const found = Name.find(':');
if (found == string::npos)
- return FindPkg(Name, "native");
+ {
+ if (MultiArchCache() == false)
+ return SingleArchFindPkg(Name);
+ else
+ 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);
@@ -228,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);
@@ -322,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
@@ -503,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;
}
@@ -514,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
@@ -600,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;
@@ -617,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;
diff --git a/apt-pkg/pkgcache.h b/apt-pkg/pkgcache.h
index d654a2976..1b1743724 100644
--- a/apt-pkg/pkgcache.h
+++ b/apt-pkg/pkgcache.h
@@ -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()
diff --git a/apt-pkg/pkgcachegen.cc b/apt-pkg/pkgcachegen.cc
index 46dd22007..8e088ba68 100644
--- a/apt-pkg/pkgcachegen.cc
+++ b/apt-pkg/pkgcachegen.cc
@@ -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
diff --git a/apt-pkg/policy.cc b/apt-pkg/policy.cc
index 4e4077feb..4fc272a74 100644
--- a/apt-pkg/policy.cc
+++ b/apt-pkg/policy.cc
@@ -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;
diff --git a/cmdline/apt-cache.cc b/cmdline/apt-cache.cc
index 01e0d22e0..232bb93ec 100644
--- a/cmdline/apt-cache.cc
+++ b/cmdline/apt-cache.cc
@@ -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"
diff --git a/cmdline/apt-dump-solver.cc b/cmdline/apt-dump-solver.cc
new file mode 100644
index 000000000..dab0cc6fd
--- /dev/null
+++ b/cmdline/apt-dump-solver.cc
@@ -0,0 +1,50 @@
+// -*- mode: cpp; mode: fold -*-
+// Description /*{{{*/
+/* #####################################################################
+
+ dummy solver to get quickly a scenario file out of APT
+
+ ##################################################################### */
+ /*}}}*/
+// Include Files /*{{{*/
+#include <apt-pkg/edsp.h>
+
+#include <config.h>
+
+#include <cstdio>
+ /*}}}*/
+
+// ShowHelp - Show a help screen /*{{{*/
+// ---------------------------------------------------------------------
+/* */
+bool ShowHelp() {
+
+ std::cout <<
+ PACKAGE " " VERSION " for " COMMON_ARCH " compiled on " __DATE__ " " __TIME__ << std::endl <<
+ "Usage: apt-dump-resolver\n"
+ "\n"
+ "apt-dump-resolver is a dummy solver who just dumps its input to the\n"
+ "file /tmp/dump.edsp and exists with a proper EDSP error.\n"
+ "\n"
+ " This dump has lost Super Cow Powers.\n";
+ return true;
+}
+ /*}}}*/
+int main(int argc,const char *argv[]) /*{{{*/
+{
+ if (argc > 1 && (strcmp(argv[1], "--help") == 0 || strcmp(argv[1],"-h") == 0 ||
+ strcmp(argv[1],"-v") == 0 || strcmp(argv[1],"--version") == 0)) {
+ ShowHelp();
+ return 0;
+ }
+
+ FILE* input = fdopen(STDIN_FILENO, "r");
+ FILE* output = fopen("/tmp/dump.edsp", "w");
+ char buffer[400];
+ while (fgets(buffer, sizeof(buffer), input) != NULL)
+ fputs(buffer, output);
+ fclose(output);
+ fclose(input);
+
+ EDSP::WriteError("ERR_JUST_DUMPING", "I am too dumb, i can just dump!\nPlease use one of my friends instead!", stdout);
+}
diff --git a/cmdline/apt-get.cc b/cmdline/apt-get.cc
index a1264f54a..fdb1033a1 100644
--- a/cmdline/apt-get.cc
+++ b/cmdline/apt-get.cc
@@ -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"
@@ -3253,6 +3270,7 @@ int main(int argc,const char *argv[]) /*{{{*/
{0,"install-recommends","APT::Install-Recommends",CommandLine::Boolean},
{0,"install-suggests","APT::Install-Suggests",CommandLine::Boolean},
{0,"fix-policy","APT::Get::Fix-Policy-Broken",0},
+ {0,"solver","APT::Solver::Name",CommandLine::HasArg},
{'c',"config-file",0,CommandLine::ConfigFile},
{'o',"option",0,CommandLine::ArbItem},
{0,0,0,0}};
diff --git a/cmdline/apt-internal-solver.cc b/cmdline/apt-internal-solver.cc
index 83d79e42a..ad00a0e23 100644
--- a/cmdline/apt-internal-solver.cc
+++ b/cmdline/apt-internal-solver.cc
@@ -53,6 +53,8 @@ int main(int argc,const char *argv[]) /*{{{*/
{'v',"version","version",0},
{'q',"quiet","quiet",CommandLine::IntLevel},
{'q',"silent","quiet",CommandLine::IntLevel},
+ {'c',"config-file",0,CommandLine::ConfigFile},
+ {'o',"option",0,CommandLine::ArbItem},
{0,0,0,0}};
CommandLine CmdL(Args,_config);
@@ -69,6 +71,25 @@ int main(int argc,const char *argv[]) /*{{{*/
return 1;
}
+ if (CmdL.FileList[0] != 0 && strcmp(CmdL.FileList[0], "scenario") == 0)
+ {
+ if (pkgInitSystem(*_config,_system) == false) {
+ std::cerr << "System could not be initialized!" << std::endl;
+ return 1;
+ }
+ pkgCacheFile CacheFile;
+ CacheFile.Open(NULL, false);
+ APT::PackageSet pkgset = APT::PackageSet::FromCommandLine(CacheFile, CmdL.FileList + 1);
+ FILE* output = stdout;
+ if (pkgset.empty() == true)
+ EDSP::WriteScenario(CacheFile, output);
+ else
+ EDSP::WriteLimitedScenario(CacheFile, output, pkgset);
+ fclose(output);
+ _error->DumpErrors(std::cerr);
+ return 0;
+ }
+
// Deal with stdout not being a tty
if (!isatty(STDOUT_FILENO) && _config->FindI("quiet", -1) == -1)
_config->Set("quiet","1");
@@ -82,11 +103,15 @@ int main(int argc,const char *argv[]) /*{{{*/
FILE* output = stdout;
SetNonBlock(input, false);
+ EDSP::WriteProgress(0, "Start up solver…", output);
+
if (pkgInitSystem(*_config,_system) == false) {
std::cerr << "System could not be initialized!" << std::endl;
return 1;
}
+ EDSP::WriteProgress(1, "Read request…", output);
+
if (WaitFd(input, false, 5) == false)
std::cerr << "WAIT timed out in the resolver" << std::endl;
@@ -97,33 +122,69 @@ int main(int argc,const char *argv[]) /*{{{*/
return 2;
}
+ EDSP::WriteProgress(5, "Read scenario…", output);
+
pkgCacheFile CacheFile;
CacheFile.Open(NULL, false);
+ EDSP::WriteProgress(50, "Apply request on scenario…", output);
+
if (EDSP::ApplyRequest(install, remove, CacheFile) == false) {
std::cerr << "Failed to apply request to depcache!" << std::endl;
return 3;
}
+
+ pkgProblemResolver Fix(CacheFile);
+ for (std::list<std::string>::const_iterator i = remove.begin();
+ i != remove.end(); ++i) {
+ pkgCache::PkgIterator P = CacheFile->FindPkg(*i);
+ Fix.Clear(P);
+ Fix.Protect(P);
+ Fix.Remove(P);
+ }
+
+ for (std::list<std::string>::const_iterator i = install.begin();
+ i != install.end(); ++i) {
+ pkgCache::PkgIterator P = CacheFile->FindPkg(*i);
+ Fix.Clear(P);
+ Fix.Protect(P);
+ }
+
for (std::list<std::string>::const_iterator i = install.begin();
i != install.end(); ++i)
CacheFile->MarkInstall(CacheFile->FindPkg(*i), true);
- pkgProblemResolver Fix(CacheFile);
- if (Fix.Resolve() == false) {
- EDSP::WriteError("An error occured", output);
+ EDSP::WriteProgress(60, "Call problemresolver on current scenario…", output);
+
+ if (upgrade == true) {
+ if (pkgAllUpgrade(CacheFile) == false) {
+ EDSP::WriteError("ERR_UNSOLVABLE_UPGRADE", "An upgrade error occured", output);
+ return 0;
+ }
+ } else if (distUpgrade == true) {
+ if (pkgDistUpgrade(CacheFile) == false) {
+ EDSP::WriteError("ERR_UNSOLVABLE_DIST_UPGRADE", "An dist-upgrade error occured", output);
+ return 0;
+ }
+ } else if (Fix.Resolve() == false) {
+ EDSP::WriteError("ERR_UNSOLVABLE", "An error occured", output);
return 0;
}
+ EDSP::WriteProgress(95, "Write solution…", output);
+
if (EDSP::WriteSolution(CacheFile, output) == false) {
std::cerr << "Failed to output the solution!" << std::endl;
return 4;
}
+ EDSP::WriteProgress(100, "Done", output);
+
bool const Errors = _error->PendingError();
if (_config->FindI("quiet",0) > 0)
- _error->DumpErrors();
+ _error->DumpErrors(std::cerr);
else
- _error->DumpErrors(GlobalError::DEBUG);
+ _error->DumpErrors(std::cerr, GlobalError::DEBUG);
return Errors == true ? 100 : 0;
}
/*}}}*/
diff --git a/cmdline/apt-mark b/cmdline/apt-mark
deleted file mode 100755
index c64d4356c..000000000
--- a/cmdline/apt-mark
+++ /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
index 000000000..b2c664979
--- /dev/null
+++ b/cmdline/apt-mark.cc
@@ -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;
+}
+ /*}}}*/
diff --git a/cmdline/makefile b/cmdline/makefile
index 4462ccaf4..6d988a8f5 100644
--- a/cmdline/makefile
+++ b/cmdline/makefile
@@ -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
@@ -71,3 +72,10 @@ SLIBS = -lapt-pkg $(INTLLIBS)
LIB_MAKES = apt-pkg/makefile
SOURCE = apt-internal-solver.cc
include $(PROGRAM_H)
+
+# The internal solver acting as an external
+PROGRAM=apt-dump-solver
+SLIBS = -lapt-pkg $(INTLLIBS)
+LIB_MAKES = apt-pkg/makefile
+SOURCE = apt-dump-solver.cc
+include $(PROGRAM_H)
diff --git a/debian/apt-utils.dirs b/debian/apt-utils.dirs
index 14f5b95d7..681e55192 100644
--- a/debian/apt-utils.dirs
+++ b/debian/apt-utils.dirs
@@ -1,2 +1,2 @@
-usr/lib
+usr/lib/apt/solvers
usr/bin
diff --git a/debian/apt-utils.links b/debian/apt-utils.links
new file mode 100644
index 000000000..5bf138c4a
--- /dev/null
+++ b/debian/apt-utils.links
@@ -0,0 +1 @@
+usr/bin/apt-internal-solver usr/lib/apt/solvers/apt
diff --git a/debian/apt-utils.symbols b/debian/apt-utils.symbols
index 2f57eb10a..9ba283a51 100644
--- a/debian/apt-utils.symbols
+++ b/debian/apt-utils.symbols
@@ -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
###
diff --git a/debian/apt.cron.daily b/debian/apt.cron.daily
index c61bfb9bb..69f97a36b 100644
--- a/debian/apt.cron.daily
+++ b/debian/apt.cron.daily
@@ -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.dirs b/debian/apt.dirs
index 2770d79bb..f9c0b6c3e 100644
--- a/debian/apt.dirs
+++ b/debian/apt.dirs
@@ -1,5 +1,6 @@
usr/bin
usr/lib/apt/methods
+usr/lib/apt/solvers
usr/lib/dpkg/methods/apt
etc/apt
etc/apt/apt.conf.d
diff --git a/debian/apt.lintian-overrides b/debian/apt.lintian-overrides
deleted file mode 100644
index 49c5ce53c..000000000
--- a/debian/apt.lintian-overrides
+++ /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
diff --git a/debian/apt.symbols b/debian/apt.symbols
index 1c108fb69..bb60c22be 100644
--- a/debian/apt.symbols
+++ b/debian/apt.symbols
@@ -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
diff --git a/debian/changelog b/debian/changelog
index e669077fe..1b691a33d 100644
--- a/debian/changelog
+++ b/debian/changelog
@@ -1,4 +1,138 @@
-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
+
+ [ Stefano Zacchiroli ]
+ * doc/external-dependency-solver-protocol.txt:
+ - describe EDSP and the configuration interface around it
+
+
+ -- David Kalnischkies <kalnischkies@gmail.com> Tue, 17 May 2011 17:34:56 +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 +166,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
diff --git a/debian/control b/debian/control
index ba0901538..6d0f16b70 100644
--- a/debian/control
+++ b/debian/control
@@ -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~)
diff --git a/debian/rules b/debian/rules
index 640900678..6c58d82bb 100755
--- a/debian/rules
+++ b/debian/rules
@@ -62,7 +62,7 @@ configure.in:
endif
# APT Programs in apt-utils
-APT_UTILS=ftparchive sortpkgs extracttemplates
+APT_UTILS=ftparchive sortpkgs extracttemplates internal-solver
# Uncomment this to turn on verbose mode.
#export DH_VERBOSE=1
@@ -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* \
@@ -182,7 +185,7 @@ apt: build build-doc
dh_install -p$@ --sourcedir=$(BLD)
# Remove the bits that are in apt-utils
- rm $(addprefix debian/$@/usr/bin/apt-,$(APT_UTILS))
+ rm $(addprefix debian/$@/usr/bin/apt-,$(APT_UTILS) dump-solver)
# https has its own package
rm debian/$@/usr/lib/apt/methods/https
@@ -236,8 +239,10 @@ apt-utils: build
dh_installdirs -p$@
cp $(addprefix $(BLD)/bin/apt-,$(APT_UTILS)) debian/$@/usr/bin/
+ cp $(BLD)/bin/apt-dump-solver debian/$@/usr/lib/apt/solvers/dump
dh_install -p$@ --sourcedir=$(BLD)
+ dh_link -p$@
dh_installdocs -p$@
dh_installexamples -p$@
diff --git a/doc/apt-key.8.xml b/doc/apt-key.8.xml
index f1cc3ac02..9bfab84b6 100644
--- a/doc/apt-key.8.xml
+++ b/doc/apt-key.8.xml
@@ -136,6 +136,22 @@
</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>
diff --git a/doc/apt-mark.8.xml b/doc/apt-mark.8.xml
index ec50d6f76..01c8665dd 100644
--- a/doc/apt-mark.8.xml
+++ b/doc/apt-mark.8.xml
@@ -18,7 +18,7 @@
&apt-email;
&apt-product;
<!-- The last update date -->
- <date>9 August 2009</date>
+ <date>21 April 2011</date>
</refentryinfo>
<refmeta>
@@ -42,12 +42,13 @@
<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>
@@ -65,27 +66,60 @@
<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>
@@ -102,23 +136,8 @@
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>
diff --git a/doc/apt_preferences.5.xml b/doc/apt_preferences.5.xml
index 219da7cd1..55504f3e5 100644
--- a/doc/apt_preferences.5.xml
+++ b/doc/apt_preferences.5.xml
@@ -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>
diff --git a/doc/po/de.po b/doc/po/de.po
index 75595df07..891e69964 100644
--- a/doc/po/de.po
+++ b/doc/po/de.po
@@ -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
diff --git a/methods/http.cc b/methods/http.cc
index dfc1619e3..13f9cbe06 100644
--- a/methods/http.cc
+++ b/methods/http.cc
@@ -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;
diff --git a/methods/http.h b/methods/http.h
index 0bc019e77..aa96c6810 100644
--- a/methods/http.h
+++ b/methods/http.h
@@ -182,7 +182,7 @@ class HttpMethod : public pkgAcqMethod
string AutoDetectProxyCmd;
public:
- friend class ServerState;
+ friend struct ServerState;
FileFd *File;
ServerState *Server;
diff --git a/methods/mirror.cc b/methods/mirror.cc
index e499b054b..2cf5c9ce1 100644
--- a/methods/mirror.cc
+++ b/methods/mirror.cc
@@ -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()) {
diff --git a/po/apt-all.pot b/po/apt-all.pot
index 4634bf64c..73ed82195 100644
--- a/po/apt-all.pot
+++ b/po/apt-all.pot
@@ -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
diff --git a/po/ar.po b/po/ar.po
index d19ba61fb..6b2f1f134 100644
--- 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
diff --git a/po/ast.po b/po/ast.po
index a7e5a2439..593fc6e39 100644
--- 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"
diff --git a/po/bg.po b/po/bg.po
index 69628a4d6..6946e76d2 100644
--- 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. Това може да означава, че трябва "
"ръчно да оправите този пакет."
diff --git a/po/bs.po b/po/bs.po
index 28011b17b..7736af3d0 100644
--- 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
diff --git a/po/ca.po b/po/ca.po
index 4692b03c9..990f85555 100644
--- 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."
diff --git a/po/cs.po b/po/cs.po
index a25e28b2d..a3285a490 100644
--- 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ě."
diff --git a/po/cy.po b/po/cy.po
index cea53f567..4df1dc35f 100644
--- 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."
diff --git a/po/da.po b/po/da.po
index a15063f2d..b26b10a94 100644
--- 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."
diff --git a/po/de.po b/po/de.po
index 267715718..8732f2900 100644
--- 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."
diff --git a/po/dz.po b/po/dz.po
index 0fd423cc0..f569e0fbe 100644
--- 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་ཐུམ་སྒྲིལ་གི་དོན་ལུ་ང་་གི་ཡིག་སྣོད་ཅིག་ག་ཡོད་འཚོལ་མི་འཐོབ་པས། འདི་འབདཝ་ལས་ཁྱོད་ཀྱི་ལག་ཐོག་ལས་ "
"འ་ནི་ཐུམ་སྒྲིལ་འདི་གི་དཀའ་ངལ་སེལ་དགོཔ་འདུག "
diff --git a/po/el.po b/po/el.po
index 2192fd287..8a40c5cf7 100644
--- 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. Αυτό ίσως σημαίνει ότι "
"χρειάζεται να διορθώσετε χειροκίνητα το πακέτο."
diff --git a/po/es.po b/po/es.po
index dae1712c4..595040a52 100644
--- 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."
diff --git a/po/eu.po b/po/eu.po
index 825e7de6a..7e8c5838f 100644
--- 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."
diff --git a/po/fi.po b/po/fi.po
index faf9885c8..ef085b171 100644
--- 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."
diff --git a/po/fr.po b/po/fr.po
index f3fe11e56..9a67d3448 100644
--- 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."
diff --git a/po/gl.po b/po/gl.po
index 7d23e7a11..7de0e5d8c 100644
--- 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 "
-"o 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 a 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"
diff --git a/po/he.po b/po/he.po
index 09e89df06..e05730472 100644
--- 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
diff --git a/po/hu.po b/po/hu.po
index a4dde56d5..45da05979 100644
--- 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."
diff --git a/po/it.po b/po/it.po
index 1f2e08bf3..a9615bfad 100644
--- 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."
diff --git a/po/ja.po b/po/ja.po
index c9be076fc..99db2d6d8 100644
--- 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 のファイルの位置を特定できません。おそらくこのパッケージを手動"
"で修正する必要があります。"
diff --git a/po/km.po b/po/km.po
index f10efe06d..53d5dd08a 100644
--- 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 បានទេ ។ ​មាន​ន័យ​ថា​អ្នក​ត្រូវការ​ជួសជុល​កញ្ចប់​នេះ​ដោយ​ដៃ ។"
diff --git a/po/ko.po b/po/ko.po
index 65439cced..30ef7092e 100644
--- 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 패키지의 파일을 찾을 수 없습니다. 수동으로 이 패키지를 고쳐야 할 수도 있습"
"니다."
diff --git a/po/ku.po b/po/ku.po
index a17e00f09..a0979d13b 100644
--- 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
diff --git a/po/lt.po b/po/lt.po
index 0a4b58a5c..22bf253ef 100644
--- 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
diff --git a/po/mr.po b/po/mr.po
index c11620b3d..b0a17df80 100644
--- 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 पॅकेजकरीता संचिका शोधण्यास समर्थ नव्हतो. याचा अर्थ असाकी तुम्हालाहे पॅकेज स्वहस्ते "
"स्थिर/निश्चित करण्याची गरज आहे."
diff --git a/po/nb.po b/po/nb.po
index 42fa7c0ae..fbd0c7cf0 100644
--- 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."
diff --git a/po/ne.po b/po/ne.po
index 733618227..dfd787a1b 100644
--- 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 प्याकेजको लागि मैले फाइल स्थित गर्न सकिन । यसको मतलब तपाईँले म्यानुल्ली यो प्याकेज "
"निश्चित गर्नुहोस् ।"
diff --git a/po/nl.po b/po/nl.po
index 54f0039a6..58506d72c 100644
--- 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."
diff --git a/po/nn.po b/po/nn.po
index e33aa27c7..da14705ba 100644
--- 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 sjlv."
diff --git a/po/pl.po b/po/pl.po
index fad4e96df..64bd2443f 100644
--- 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."
diff --git a/po/pt.po b/po/pt.po
index b1286d961..946d54145 100644
--- 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."
diff --git a/po/pt_BR.po b/po/pt_BR.po
index 3c883ea92..b94038fdb 100644
--- a/po/pt_BR.po
+++ b/po/pt_BR.po
@@ -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."
diff --git a/po/ro.po b/po/ro.po
index d3ac7e8f0..9d7319068 100644
--- 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."
diff --git a/po/ru.po b/po/ru.po
index e86d17bc7..bda3ce7c7 100644
--- 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. Это может означать, что вам придётся "
"вручную исправить этот пакет."
diff --git a/po/sk.po b/po/sk.po
index ea0594aa1..0f35324cb 100644
--- 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."
diff --git a/po/sl.po b/po/sl.po
index 33e8e009b..9b497f93b 100644
--- 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."
diff --git a/po/sv.po b/po/sv.po
index eef777133..3f3f3cd78 100644
--- 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."
diff --git a/po/th.po b/po/th.po
index c9c11a4e4..f5c67f373 100644
--- 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
diff --git a/po/tl.po b/po/tl.po
index 32c86f61e..b3831a7e8 100644
--- 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."
diff --git a/po/uk.po b/po/uk.po
index d4d2fb6e6..960681c47 100644
--- 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. Можливо, Ви захочете власноруч "
"виправити цей пакунок."
diff --git a/po/vi.po b/po/vi.po
index 65ed46f69..fec6dc3bb 100644
--- 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."
diff --git a/po/zh_CN.po b/po/zh_CN.po
index 72caa48cb..fa88993dd 100644
--- a/po/zh_CN.po
+++ b/po/zh_CN.po
@@ -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 软件包的文件。在这种情况下您可能需要手动修正这个软件包。"
diff --git a/po/zh_TW.po b/po/zh_TW.po
index c0ef69f76..1dcaf49ce 100644
--- a/po/zh_TW.po
+++ b/po/zh_TW.po
@@ -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
diff --git a/test/integration/framework b/test/integration/framework
index 013a71ec0..cc5af798c 100644
--- a/test/integration/framework
+++ b/test/integration/framework
@@ -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
index 000000000..a63d36246
--- /dev/null
+++ b/test/integration/skip-bug-602412-dequote-redirect
@@ -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
index 000000000..6bc22ea7b
--- /dev/null
+++ b/test/integration/test-bug-470115-new-and-tighten-recommends
@@ -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
diff --git a/test/integration/test-bug-612557-garbage-upgrade b/test/integration/test-bug-612557-garbage-upgrade
index 3112e618c..8efd1687a 100755
--- a/test/integration/test-bug-612557-garbage-upgrade
+++ b/test/integration/test-bug-612557-garbage-upgrade
@@ -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
index 000000000..7e384e428
--- /dev/null
+++ b/test/integration/test-bug-618288-multiarch-same-lockstep
@@ -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
index 000000000..d88ad0000
--- /dev/null
+++ b/test/integration/test-handling-broken-orgroups
@@ -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
index 000000000..93b67fc02
--- /dev/null
+++ b/test/integration/test-ubuntu-bug-761175-remove-purge
@@ -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
diff --git a/test/testextract.cc b/test/testextract.cc
index 1c738aab9..b790df618 100644
--- a/test/testextract.cc
+++ b/test/testextract.cc
@@ -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)
diff --git a/test/versions.lst b/test/versions.lst
index 2d0967645..8dd8ebdc9 100644
--- a/test/versions.lst
+++ b/test/versions.lst
@@ -10,13 +10,16 @@
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