diff options
author | Michael Vogt <michael.vogt@ubuntu.com> | 2007-02-06 15:04:47 +0100 |
---|---|---|
committer | Michael Vogt <michael.vogt@ubuntu.com> | 2007-02-06 15:04:47 +0100 |
commit | a577a938d4b957b5462a830b21d509fa754b33d5 (patch) | |
tree | fd3ab848593a0818ae5be30508b6a469557d9a1a | |
parent | 78a9df8a467d9f240df81c236f233a38f450e60a (diff) | |
parent | 39e1be0ff93e3084b7cb98b6a7d0c272a8b296b0 (diff) |
* merged the apt--mirror branch
-rw-r--r-- | apt-pkg/acquire-item.cc | 56 | ||||
-rw-r--r-- | apt-pkg/acquire-item.h | 4 | ||||
-rw-r--r-- | apt-pkg/acquire-method.cc | 21 | ||||
-rw-r--r-- | apt-pkg/acquire-method.h | 15 | ||||
-rw-r--r-- | apt-pkg/init.cc | 1 | ||||
-rwxr-xr-x | cmdline/apt-report-mirror-failure | 24 | ||||
-rw-r--r-- | cmdline/makefile | 6 | ||||
-rw-r--r-- | configure.in | 2 | ||||
-rw-r--r-- | debian/apt.dirs | 1 | ||||
-rw-r--r-- | debian/changelog | 12 | ||||
-rwxr-xr-x | debian/rules | 4 | ||||
-rw-r--r-- | doc/examples/configure-index | 14 | ||||
-rw-r--r-- | methods/connect.cc | 18 | ||||
-rw-r--r-- | methods/http.cc | 16 | ||||
-rw-r--r-- | methods/http.h | 7 | ||||
-rw-r--r-- | methods/http_main.cc | 15 | ||||
-rw-r--r-- | methods/makefile | 9 | ||||
-rw-r--r-- | methods/mirror.cc | 282 | ||||
-rw-r--r-- | methods/mirror.h | 51 | ||||
-rw-r--r-- | mirror-failure.py | 23 | ||||
-rw-r--r-- | po/apt-all.pot | 520 |
21 files changed, 805 insertions, 296 deletions
diff --git a/apt-pkg/acquire-item.cc b/apt-pkg/acquire-item.cc index 94288a132..3be7878bf 100644 --- a/apt-pkg/acquire-item.cc +++ b/apt-pkg/acquire-item.cc @@ -63,6 +63,7 @@ void pkgAcquire::Item::Failed(string Message,pkgAcquire::MethodConfig *Cnf) { Status = StatIdle; ErrorText = LookupTag(Message,"Message"); + UsedMirror = LookupTag(Message,"UsedMirror"); if (QueueCounter <= 1) { /* This indicates that the file is not available right now but might @@ -79,6 +80,13 @@ void pkgAcquire::Item::Failed(string Message,pkgAcquire::MethodConfig *Cnf) Status = StatError; Dequeue(); } + + // report mirror failure back to LP if we actually use a mirror + string FailReason = LookupTag(Message, "FailReason"); + if(FailReason.size() != 0) + ReportMirrorFailure(FailReason); + else + ReportMirrorFailure(ErrorText); } /*}}}*/ // Acquire::Item::Start - Item has begun to download /*{{{*/ @@ -100,6 +108,7 @@ void pkgAcquire::Item::Done(string Message,unsigned long Size,string, { // We just downloaded something.. string FileName = LookupTag(Message,"Filename"); + UsedMirror = LookupTag(Message,"UsedMirror"); if (Complete == false && FileName == DestFile) { if (Owner->Log != 0) @@ -108,7 +117,6 @@ void pkgAcquire::Item::Done(string Message,unsigned long Size,string, if (FileSize == 0) FileSize= Size; - Status = StatDone; ErrorText = string(); Owner->Dequeue(this); @@ -131,6 +139,49 @@ void pkgAcquire::Item::Rename(string From,string To) } /*}}}*/ +void pkgAcquire::Item::ReportMirrorFailure(string FailCode) +{ + // we only act if a mirror was used at all + if(UsedMirror.empty()) + return; +#if 0 + std::cerr << "\nReportMirrorFailure: " + << UsedMirror + << " Uri: " << DescURI() + << " FailCode: " + << FailCode << std::endl; +#endif + const char *Args[40]; + unsigned int i = 0; + string report = _config->Find("Methods::Mirror::ProblemReporting", + "/usr/lib/apt/apt-report-mirror-failure"); + if(!FileExists(report)) + return; + Args[i++] = report.c_str(); + Args[i++] = UsedMirror.c_str(); + Args[i++] = DescURI().c_str(); + Args[i++] = FailCode.c_str(); + Args[i++] = NULL; + pid_t pid = ExecFork(); + if(pid < 0) + { + _error->Error("ReportMirrorFailure Fork failed"); + return; + } + else if(pid == 0) + { + execvp(Args[0], (char**)Args); + std::cerr << "Could not exec " << Args[0] << std::endl; + _exit(100); + } + if(!ExecWait(pid, "report-mirror-failure")) + { + _error->Warning("Couldn't report problem to '%s'", + _config->Find("Methods::Mirror::ProblemReporting").c_str()); + } +} + + // AcqIndex::AcqIndex - Constructor /*{{{*/ // --------------------------------------------------------------------- /* The package file is added to the queue and a second class is @@ -176,7 +227,6 @@ string pkgAcqIndex::Custom600Headers() struct stat Buf; if (stat(Final.c_str(),&Buf) != 0) return "\nIndex-File: true"; - return "\nIndex-File: true\nLast-Modified: " + TimeRFC1123(Buf.st_mtime); } /*}}}*/ @@ -235,6 +285,7 @@ void pkgAcqIndex::Done(string Message,unsigned long Size,string MD5, Status = StatAuthError; ErrorText = _("MD5Sum mismatch"); Rename(DestFile,DestFile + ".FAILED"); + ReportMirrorFailure("HashChecksumFailure"); return; } // Done, move it into position @@ -757,6 +808,7 @@ void pkgAcqMetaIndex::Failed(string Message,pkgAcquire::MethodConfig *Cnf) } // gpgv method failed + ReportMirrorFailure("GPGFailure"); _error->Warning("GPG error: %s: %s", Desc.Description.c_str(), LookupTag(Message,"Message").c_str()); diff --git a/apt-pkg/acquire-item.h b/apt-pkg/acquire-item.h index 3a0a690e1..f659bb459 100644 --- a/apt-pkg/acquire-item.h +++ b/apt-pkg/acquire-item.h @@ -57,6 +57,7 @@ class pkgAcquire::Item unsigned long ID; bool Complete; bool Local; + string UsedMirror; // Number of queues we are inserted into unsigned int QueueCounter; @@ -79,6 +80,9 @@ class pkgAcquire::Item pkgAcquire *GetOwner() {return Owner;}; virtual bool IsTrusted() {return false;}; + // report mirror problems + void ReportMirrorFailure(string FailCode); + Item(pkgAcquire *Owner); virtual ~Item(); }; diff --git a/apt-pkg/acquire-method.cc b/apt-pkg/acquire-method.cc index 41b832f3b..180b52ad7 100644 --- a/apt-pkg/acquire-method.cc +++ b/apt-pkg/acquire-method.cc @@ -99,12 +99,11 @@ void pkgAcqMethod::Fail(string Err,bool Transient) } char S[1024]; + char *End = S; if (Queue != 0) { - snprintf(S,sizeof(S)-50,"400 URI Failure\nURI: %s\n" - "Message: %s %s\n",Queue->Uri.c_str(),Err.c_str(), - FailExtra.c_str()); - + End += snprintf(S,sizeof(S)-50,"400 URI Failure\nURI: %s\n" + "Message: %s %s\n",Queue->Uri.c_str(), Err.c_str(), IP.c_str()); // Dequeue FetchItem *Tmp = Queue; Queue = Queue->Next; @@ -113,10 +112,14 @@ void pkgAcqMethod::Fail(string Err,bool Transient) QueueBack = Queue; } else - snprintf(S,sizeof(S)-50,"400 URI Failure\nURI: <UNKNOWN>\n" - "Message: %s %s\n",Err.c_str(), - FailExtra.c_str()); - + { + End += snprintf(S,sizeof(S)-50,"400 URI Failure\nURI: <UNKNOWN>\n" + "Message: %s\n",Err.c_str()); + } + if(FailReason.empty() == false) + End += snprintf(End,sizeof(S)-50 - (End - S),"FailReason: %s\n",FailReason.c_str()); + if (UsedMirror.empty() == false) + End += snprintf(End,sizeof(S)-50 - (End - S),"UsedMirror: %s\n",UsedMirror.c_str()); // Set the transient flag if (Transient == true) strcat(S,"Transient-Failure: true\n\n"); @@ -182,6 +185,8 @@ void pkgAcqMethod::URIDone(FetchResult &Res, FetchResult *Alt) End += snprintf(End,sizeof(S)-50 - (End - S),"MD5-Hash: %s\n",Res.MD5Sum.c_str()); if (Res.SHA1Sum.empty() == false) End += snprintf(End,sizeof(S)-50 - (End - S),"SHA1-Hash: %s\n",Res.SHA1Sum.c_str()); + if (UsedMirror.empty() == false) + End += snprintf(End,sizeof(S)-50 - (End - S),"UsedMirror: %s\n",UsedMirror.c_str()); if (Res.GPGVOutput.size() > 0) End += snprintf(End,sizeof(S)-50 - (End - S),"GPGVOutput:\n"); for (vector<string>::iterator I = Res.GPGVOutput.begin(); diff --git a/apt-pkg/acquire-method.h b/apt-pkg/acquire-method.h index f46209d12..20691cc2c 100644 --- a/apt-pkg/acquire-method.h +++ b/apt-pkg/acquire-method.h @@ -54,7 +54,9 @@ class pkgAcqMethod vector<string> Messages; FetchItem *Queue; FetchItem *QueueBack; - string FailExtra; + string FailReason; + string UsedMirror; + string IP; // Handlers for messages virtual bool Configuration(string Message); @@ -63,14 +65,14 @@ class pkgAcqMethod // Outgoing messages void Fail(bool Transient = false); inline void Fail(const char *Why, bool Transient = false) {Fail(string(Why),Transient);}; - void Fail(string Why, bool Transient = false); - void URIStart(FetchResult &Res); - void URIDone(FetchResult &Res,FetchResult *Alt = 0); + virtual void Fail(string Why, bool Transient = false); + virtual void URIStart(FetchResult &Res); + virtual void URIDone(FetchResult &Res,FetchResult *Alt = 0); + bool MediaFail(string Required,string Drive); virtual void Exit() {}; public: - enum CnfFlags {SingleInstance = (1<<0), Pipeline = (1<<1), SendConfig = (1<<2), LocalOnly = (1<<3), NeedsCleanup = (1<<4), @@ -80,7 +82,8 @@ class pkgAcqMethod void Status(const char *Format,...); int Run(bool Single = false); - inline void SetFailExtraMsg(string Msg) {FailExtra = Msg;}; + inline void SetFailReason(string Msg) {FailReason = Msg;}; + inline void SetIP(string aIP) {IP = aIP;}; pkgAcqMethod(const char *Ver,unsigned long Flags = 0); virtual ~pkgAcqMethod() {}; diff --git a/apt-pkg/init.cc b/apt-pkg/init.cc index 579a19ab9..0be0aee98 100644 --- a/apt-pkg/init.cc +++ b/apt-pkg/init.cc @@ -56,6 +56,7 @@ bool pkgInitConfig(Configuration &Cnf) Cnf.Set("Dir::State::lists","lists/"); Cnf.Set("Dir::State::cdroms","cdroms.list"); + Cnf.Set("Dir::State::mirrors","mirrors/"); // Cache Cnf.Set("Dir::Cache","var/cache/apt/"); diff --git a/cmdline/apt-report-mirror-failure b/cmdline/apt-report-mirror-failure new file mode 100755 index 000000000..1567e78e3 --- /dev/null +++ b/cmdline/apt-report-mirror-failure @@ -0,0 +1,24 @@ +#!/usr/bin/python + +import sys +import urllib +import apt_pkg + +apt_pkg.init() +url = apt_pkg.Config.Find("Acquire::Mirror::ReportFailures", None) + #"http://people.ubuntu.com:9000/mirror-failure") + #"http://localhost:9000/mirror-failure") +if not url: + sys.exit(0) + +print "Reporting mirror failure to '%s'" % url + +data = {} +data['mirror'] = sys.argv[1] +data['failurl'] = sys.argv[2] +data['error'] = sys.argv[3] +f = urllib.urlopen(url, urllib.urlencode(data)) +f.read() +f.close() + + diff --git a/cmdline/makefile b/cmdline/makefile index 49035be44..2a5bdfbea 100644 --- a/cmdline/makefile +++ b/cmdline/makefile @@ -58,3 +58,9 @@ SOURCE=apt-mark TO=$(BIN) TARGET=program include $(COPY_H) + +# The apt-key program +SOURCE=apt-report-mirror-failure +TO=$(BIN) +TARGET=program +include $(COPY_H) diff --git a/configure.in b/configure.in index 67841b3ef..ce166b31e 100644 --- a/configure.in +++ b/configure.in @@ -18,7 +18,7 @@ AC_CONFIG_AUX_DIR(buildlib) AC_CONFIG_HEADER(include/config.h:buildlib/config.h.in include/apti18n.h:buildlib/apti18n.h.in) dnl -- SET THIS TO THE RELEASE VERSION -- -AC_DEFINE_UNQUOTED(VERSION,"0.6.46.4ubuntu6") +AC_DEFINE_UNQUOTED(VERSION,"0.6.46.4ubuntu7") PACKAGE="apt" AC_DEFINE_UNQUOTED(PACKAGE,"$PACKAGE") AC_SUBST(PACKAGE) diff --git a/debian/apt.dirs b/debian/apt.dirs index 1543e8bb1..025898e84 100644 --- a/debian/apt.dirs +++ b/debian/apt.dirs @@ -6,5 +6,6 @@ etc/apt/apt.conf.d etc/apt/sources.list.d var/cache/apt/archives/partial var/lib/apt/lists/partial +var/lib/apt/mirrors/partial var/lib/apt/periodic usr/share/bug/apt diff --git a/debian/changelog b/debian/changelog index 838567183..6fdf646f0 100644 --- a/debian/changelog +++ b/debian/changelog @@ -1,3 +1,15 @@ +apt (0.6.46.4ubuntu7) feisty; urgency=low + + * Merged the apt--mirror branch. This means that a new 'mirror' + method is available that will allow dynamic mirror updates. + The sources.list entry looks something like this: + "deb mirror://mirrors.lp.net/get_mirror feisty main restricted" + + It also supports error reporting to a configurable url for mirror + problems/failures. + + -- Michael Vogt <michael.vogt@ubuntu.com> Tue, 6 Feb 2007 11:38:06 +0100 + apt (0.6.46.4ubuntu6) feisty; urgency=low * methods/http.cc: diff --git a/debian/rules b/debian/rules index b22b09fd1..3defd3c29 100755 --- a/debian/rules +++ b/debian/rules @@ -219,6 +219,10 @@ apt: build debian/shlibs.local rm -f build/po/*.pot rm -f po/*.pot + # move the mirror failure script in place + mv debian/$@/usr/bin/apt-report-mirror-failure \ + debian/$@/usr/lib/apt/apt-report-mirror-failure \ + dh_installexamples -p$@ $(BLD)/docs/examples/* dh_installman -p$@ dh_installcron -p$@ diff --git a/doc/examples/configure-index b/doc/examples/configure-index index 26d9354fe..4262b479f 100644 --- a/doc/examples/configure-index +++ b/doc/examples/configure-index @@ -180,6 +180,17 @@ Acquire { Options {"--ignore-time-conflict";} // not very usefull on a normal system }; + + mirror + { + RefreshInterval "360"; // refresh interval in minutes + MaxAge "90"; // max age for a mirror file in days before + // it gets deleted + // mirror failure reporting script + ProblemReporting "/usr/lib/apt/apt-report-mirror-failure"; + // mirror failure reporting url + ReportFailures "http://example.com/mirror-failure"; + }; }; // Directory layout @@ -193,6 +204,7 @@ Dir "/" userstatus "status.user"; status "/var/lib/dpkg/status"; cdroms "cdroms.list"; + mirrors "mirrors/"; }; // Location of the cache dir @@ -283,9 +295,9 @@ Debug Acquire::Http "false"; // Show http command traffic Acquire::Https "false"; // Show https debug Acquire::gpgv "false"; // Show the gpgv traffic + Acquire::Mirror "false"; // Show debugging of the mirror method aptcdrom "false"; // Show found package files IdentCdrom "false"; - } /* Whatever you do, do not use this configuration file!! Take out ONLY diff --git a/methods/connect.cc b/methods/connect.cc index 8c2ac6d56..145001fb3 100644 --- a/methods/connect.cc +++ b/methods/connect.cc @@ -18,6 +18,7 @@ #include <stdio.h> #include <errno.h> #include <unistd.h> +#include <sstream> // Internet stuff #include <netinet/in.h> @@ -67,12 +68,10 @@ static bool DoConnect(struct addrinfo *Addr,string Host, wrong this will get tacked onto the end of the error message */ if (LastHostAddr->ai_next != 0) { - char Name2[NI_MAXHOST + NI_MAXSERV + 10]; - snprintf(Name2,sizeof(Name2),_("[IP: %s %s]"),Name,Service); - Owner->SetFailExtraMsg(string(Name2)); - } - else - Owner->SetFailExtraMsg(""); + std::stringstream ss; + ioprintf(ss, _("[IP: %s %s]"),Name,Service); + Owner->SetIP(ss.str()); + } // Get a socket if ((Fd = socket(Addr->ai_family,Addr->ai_socktype, @@ -89,7 +88,7 @@ static bool DoConnect(struct addrinfo *Addr,string Host, /* This implements a timeout for connect by opening the connection nonblocking */ if (WaitFd(Fd,true,TimeOut) == false) { - Owner->SetFailExtraMsg("\nFailReason: Timeout"); + Owner->SetFailReason("Timeout"); return _error->Error(_("Could not connect to %s:%s (%s), " "connection timed out"),Host.c_str(),Service,Name); } @@ -104,7 +103,7 @@ static bool DoConnect(struct addrinfo *Addr,string Host, { errno = Err; if(errno == ECONNREFUSED) - Owner->SetFailExtraMsg("\nFailReason: ConnectionRefused"); + Owner->SetFailReason("ConnectionRefused"); return _error->Errno("connect",_("Could not connect to %s:%s (%s)."),Host.c_str(), Service,Name); } @@ -164,12 +163,13 @@ bool Connect(string Host,int Port,const char *Service,int DefPort,int &Fd, DefPort = 0; continue; } + Owner->SetFailReason("ResolveFailure"); return _error->Error(_("Could not resolve '%s'"),Host.c_str()); } if (Res == EAI_AGAIN) { - Owner->SetFailExtraMsg("\nFailReason: TmpResolveFailure"); + Owner->SetFailReason("TmpResolveFailure"); return _error->Error(_("Temporary failure resolving '%s'"), Host.c_str()); } diff --git a/methods/http.cc b/methods/http.cc index 0eef7a633..ecfb80bd2 100644 --- a/methods/http.cc +++ b/methods/http.cc @@ -38,7 +38,6 @@ #include <stdio.h> #include <errno.h> #include <string.h> -#include <iostream> #include <apti18n.h> // Internet stuff @@ -58,7 +57,7 @@ time_t HttpMethod::FailTime = 0; unsigned long PipelineDepth = 10; unsigned long TimeOut = 120; bool Debug = false; - +URI Proxy; unsigned long CircleBuf::BwReadLimit=0; unsigned long CircleBuf::BwTickReadData=0; @@ -916,6 +915,9 @@ int HttpMethod::DealWithHeaders(FetchResult &Res,ServerState *Srv) failure */ if (Srv->Result < 200 || Srv->Result >= 300) { + char err[255]; + snprintf(err,sizeof(err)-1,"HttpError%i",Srv->Result); + SetFailReason(err); _error->Error("%u %s",Srv->Result,Srv->Code); if (Srv->HaveContent == true) return 4; @@ -991,7 +993,7 @@ void HttpMethod::SigTerm(int) depth. */ bool HttpMethod::Fetch(FetchItem *) { - if (Server == 0) + if (Server == 0) return true; // Queue the requests @@ -1224,13 +1226,5 @@ int HttpMethod::Loop() } /*}}}*/ -int main() -{ - setlocale(LC_ALL, ""); - - HttpMethod Mth; - - return Mth.Loop(); -} diff --git a/methods/http.h b/methods/http.h index 541e2952c..5eac11401 100644 --- a/methods/http.h +++ b/methods/http.h @@ -13,7 +13,7 @@ #define MAXLEN 360 -#include <iostream> + using std::cout; using std::endl; @@ -134,7 +134,6 @@ class HttpMethod : public pkgAcqMethod bool ServerDie(ServerState *Srv); int DealWithHeaders(FetchResult &Res,ServerState *Srv); - virtual bool Fetch(FetchItem *); virtual bool Configuration(string Message); // In the event of a fatal signal this file will be closed and timestamped. @@ -142,6 +141,9 @@ class HttpMethod : public pkgAcqMethod static int FailFd; static time_t FailTime; static void SigTerm(int); + + protected: + virtual bool Fetch(FetchItem *); public: friend class ServerState; @@ -158,6 +160,5 @@ class HttpMethod : public pkgAcqMethod }; }; -URI Proxy; #endif diff --git a/methods/http_main.cc b/methods/http_main.cc new file mode 100644 index 000000000..2c46ab19d --- /dev/null +++ b/methods/http_main.cc @@ -0,0 +1,15 @@ +#include <apt-pkg/fileutl.h> +#include <apt-pkg/acquire-method.h> + +#include "connect.h" +#include "rfc2553emu.h" +#include "http.h" + + +int main() +{ + setlocale(LC_ALL, ""); + + HttpMethod Mth; + return Mth.Loop(); +} diff --git a/methods/makefile b/methods/makefile index 197ddf9ed..f971e56e8 100644 --- a/methods/makefile +++ b/methods/makefile @@ -49,7 +49,7 @@ include $(PROGRAM_H) PROGRAM=http SLIBS = -lapt-pkg $(SOCKETLIBS) LIB_MAKES = apt-pkg/makefile -SOURCE = http.cc rfc2553emu.cc connect.cc +SOURCE = http.cc http_main.cc rfc2553emu.cc connect.cc include $(PROGRAM_H) # The https method @@ -73,6 +73,13 @@ LIB_MAKES = apt-pkg/makefile SOURCE = rsh.cc include $(PROGRAM_H) +# The mirror method +PROGRAM=mirror +SLIBS = -lapt-pkg $(SOCKETLIBS) +LIB_MAKES = apt-pkg/makefile +SOURCE = mirror.cc http.cc rfc2553emu.cc connect.cc +include $(PROGRAM_H) + # SSH and vzip2 method symlink binary: $(BIN)/ssh $(BIN)/bzip2 veryclean: clean-$(BIN)/ssh clean-$(BIN)/bzip2 diff --git a/methods/mirror.cc b/methods/mirror.cc new file mode 100644 index 000000000..9fe64fd70 --- /dev/null +++ b/methods/mirror.cc @@ -0,0 +1,282 @@ +// -*- mode: cpp; mode: fold -*- +// Description /*{{{*/ +// $Id: mirror.cc,v 1.59 2004/05/08 19:42:35 mdz Exp $ +/* ###################################################################### + + Mirror Aquire Method - This is the Mirror aquire method for APT. + + ##################################################################### */ + /*}}}*/ +// Include Files /*{{{*/ +#include <apt-pkg/fileutl.h> +#include <apt-pkg/acquire-method.h> +#include <apt-pkg/acquire-item.h> +#include <apt-pkg/acquire.h> +#include <apt-pkg/error.h> +#include <apt-pkg/hashes.h> +#include <apt-pkg/sourcelist.h> + +#include <fstream> +#include <iostream> +#include <stdarg.h> +#include <sys/stat.h> +#include <sys/types.h> +#include <dirent.h> + +using namespace std; + +#include "mirror.h" +#include "http.h" +#include "apti18n.h" + /*}}}*/ + +/* Done: + * - works with http (only!) + * - always picks the first mirror from the list + * - call out to problem reporting script + * - supports "deb mirror://host/path/to/mirror-list/// dist component" + * - uses pkgAcqMethod::FailReason() to have a string representation + * of the failure that is also send to LP + * + * TODO: + * - deal with runing as non-root because we can't write to the lists + dir then -> use the cached mirror file + * - better method to download than having a pkgAcquire interface here + * and better error handling there! + * - support more than http + * - testing :) + */ + +MirrorMethod::MirrorMethod() + : HttpMethod(), HasMirrorFile(false) +{ +}; + +// HttpMethod::Configuration - Handle a configuration message /*{{{*/ +// --------------------------------------------------------------------- +/* We stash the desired pipeline depth */ +bool MirrorMethod::Configuration(string Message) +{ + if (pkgAcqMethod::Configuration(Message) == false) + return false; + Debug = _config->FindB("Debug::Acquire::mirror",false); + + return true; +} + /*}}}*/ + +// clean the mirrors dir based on ttl information +bool MirrorMethod::Clean(string Dir) +{ + vector<metaIndex *>::const_iterator I; + + if(Debug) + clog << "MirrorMethod::Clean(): " << Dir << endl; + + // read sources.list + pkgSourceList list; + list.ReadMainList(); + + DIR *D = opendir(Dir.c_str()); + if (D == 0) + return _error->Errno("opendir",_("Unable to read %s"),Dir.c_str()); + + string StartDir = SafeGetCWD(); + if (chdir(Dir.c_str()) != 0) + { + closedir(D); + return _error->Errno("chdir",_("Unable to change to %s"),Dir.c_str()); + } + + for (struct dirent *Dir = readdir(D); Dir != 0; Dir = readdir(D)) + { + // Skip some files.. + if (strcmp(Dir->d_name,"lock") == 0 || + strcmp(Dir->d_name,"partial") == 0 || + strcmp(Dir->d_name,".") == 0 || + strcmp(Dir->d_name,"..") == 0) + continue; + + // see if we have that uri + for(I=list.begin(); I != list.end(); I++) + { + string uri = (*I)->GetURI(); + if(uri.substr(0,strlen("mirror://")) != string("mirror://")) + continue; + string BaseUri = uri.substr(0,uri.size()-1); + if (URItoFileName(BaseUri) == Dir->d_name) + break; + } + // nothing found, nuke it + if (I == list.end()) + unlink(Dir->d_name); + }; + + chdir(StartDir.c_str()); + closedir(D); + return true; +} + + +bool MirrorMethod::GetMirrorFile(string mirror_uri_str) +{ + /* + - a mirror_uri_str looks like this: + mirror://people.ubuntu.com/~mvo/apt/mirror/mirrors/dists/feisty/Release.gpg + + - the matching source.list entry + deb mirror://people.ubuntu.com/~mvo/apt/mirror/mirrors feisty main + + - we actually want to go after: + http://people.ubuntu.com/~mvo/apt/mirror/mirrors + + And we need to save the BaseUri for later: + - mirror://people.ubuntu.com/~mvo/apt/mirror/mirrors + + FIXME: what if we have two similar prefixes? + mirror://people.ubuntu.com/~mvo/mirror + mirror://people.ubuntu.com/~mvo/mirror2 + then mirror_uri_str looks like: + mirror://people.ubuntu.com/~mvo/apt/mirror/dists/feisty/Release.gpg + mirror://people.ubuntu.com/~mvo/apt/mirror2/dists/feisty/Release.gpg + we search sources.list and find: + mirror://people.ubuntu.com/~mvo/apt/mirror + in both cases! So we need to apply some domain knowledge here :( and + check for /dists/ or /Release.gpg as suffixes + */ + if(Debug) + std::cerr << "GetMirrorFile: " << mirror_uri_str << std::endl; + + // read sources.list and find match + vector<metaIndex *>::const_iterator I; + pkgSourceList list; + list.ReadMainList(); + for(I=list.begin(); I != list.end(); I++) + { + string uristr = (*I)->GetURI(); + if(Debug) + std::cerr << "Checking: " << uristr << std::endl; + if(uristr.substr(0,strlen("mirror://")) != string("mirror://")) + continue; + // find matching uri in sources.list + if(mirror_uri_str.substr(0,uristr.size()) == uristr) + { + if(Debug) + std::cerr << "found BaseURI: " << uristr << std::endl; + BaseUri = uristr.substr(0,uristr.size()-1); + } + } + string fetch = BaseUri; + fetch.replace(0,strlen("mirror://"),"http://"); + + // get new file + MirrorFile = _config->FindDir("Dir::State::mirrors") + URItoFileName(BaseUri); + + if(Debug) + { + cerr << "base-uri: " << BaseUri << endl; + cerr << "mirror-file: " << MirrorFile << endl; + } + + // check the file, if it is not older than RefreshInterval just use it + // otherwise try to get a new one + if(FileExists(MirrorFile)) + { + struct stat buf; + time_t t,now,refresh; + if(stat(MirrorFile.c_str(), &buf) != 0) + return false; + t = std::max(buf.st_mtime, buf.st_ctime); + now = time(NULL); + refresh = 60*_config->FindI("Acquire::Mirror::RefreshInterval",360); + if(t + refresh > now) + { + if(Debug) + clog << "Mirror file is in RefreshInterval" << endl; + HasMirrorFile = true; + return true; + } + if(Debug) + clog << "Mirror file " << MirrorFile << " older than " << refresh << "min, re-download it" << endl; + } + + // not that great to use pkgAcquire here, but we do not have + // any other way right now + pkgAcquire Fetcher; + new pkgAcqFile(&Fetcher, fetch, "", 0, "", "", "", MirrorFile); + bool res = (Fetcher.Run() == pkgAcquire::Continue); + if(res) + HasMirrorFile = true; + Fetcher.Shutdown(); + return res; +} + +bool MirrorMethod::SelectMirror() +{ + // FIXME: make the mirror selection more clever, do not + // just use the first one! + ifstream in(MirrorFile.c_str()); + getline(in, Mirror); + if(Debug) + cerr << "Using mirror: " << Mirror << endl; + + UsedMirror = Mirror; + return true; +} + +// MirrorMethod::Fetch - Fetch an item /*{{{*/ +// --------------------------------------------------------------------- +/* This adds an item to the pipeline. We keep the pipeline at a fixed + depth. */ +bool MirrorMethod::Fetch(FetchItem *Itm) +{ + // select mirror only once per session + if(!HasMirrorFile) + { + Clean(_config->FindDir("Dir::State::mirrors")); + GetMirrorFile(Itm->Uri); + SelectMirror(); + } + + for (FetchItem *I = Queue; I != 0; I = I->Next) + { + if(I->Uri.find("mirror://") != string::npos) + I->Uri.replace(0,BaseUri.size(),Mirror); + } + + // now run the real fetcher + return HttpMethod::Fetch(Itm); +}; + +void MirrorMethod::Fail(string Err,bool Transient) +{ + if(Queue->Uri.find("http://") != string::npos) + Queue->Uri.replace(0,Mirror.size(), BaseUri); + pkgAcqMethod::Fail(Err, Transient); +} + +void MirrorMethod::URIStart(FetchResult &Res) +{ + if(Queue->Uri.find("http://") != string::npos) + Queue->Uri.replace(0,Mirror.size(), BaseUri); + pkgAcqMethod::URIStart(Res); +} + +void MirrorMethod::URIDone(FetchResult &Res,FetchResult *Alt) +{ + if(Queue->Uri.find("http://") != string::npos) + Queue->Uri.replace(0,Mirror.size(), BaseUri); + pkgAcqMethod::URIDone(Res, Alt); +} + + +int main() +{ + setlocale(LC_ALL, ""); + + MirrorMethod Mth; + + return Mth.Loop(); +} + + diff --git a/methods/mirror.h b/methods/mirror.h new file mode 100644 index 000000000..798f5a9b5 --- /dev/null +++ b/methods/mirror.h @@ -0,0 +1,51 @@ +// -*- mode: cpp; mode: fold -*- +// Description /*{{{*/// $Id: http.h,v 1.12 2002/04/18 05:09:38 jgg Exp $ +// $Id: http.h,v 1.12 2002/04/18 05:09:38 jgg Exp $ +/* ###################################################################### + + MIRROR Aquire Method - This is the MIRROR aquire method for APT. + + ##################################################################### */ + /*}}}*/ + +#ifndef APT_MIRROR_H +#define APT_MIRROR_H + + +#include <iostream> + +using std::cout; +using std::cerr; +using std::endl; + +#include "http.h" + +class MirrorMethod : public HttpMethod +{ + FetchResult Res; + // we simply transform between BaseUri and Mirror + string BaseUri; // the original mirror://... url + string Mirror; // the selected mirror uri (http://...) + string MirrorFile; // + bool HasMirrorFile; + + bool Debug; + + protected: + bool GetMirrorFile(string uri); + bool SelectMirror(); + bool Clean(string dir); + + // we need to overwrite those to transform the url back + virtual void Fail(string Why, bool Transient = false); + virtual void URIStart(FetchResult &Res); + virtual void URIDone(FetchResult &Res,FetchResult *Alt = 0); + virtual bool Configuration(string Message); + + public: + MirrorMethod(); + virtual bool Fetch(FetchItem *Itm); +}; + + +#endif diff --git a/mirror-failure.py b/mirror-failure.py new file mode 100644 index 000000000..e7d2bbf54 --- /dev/null +++ b/mirror-failure.py @@ -0,0 +1,23 @@ +# File: cgihttpserver-example-1.py + +import CGIHTTPServer +import BaseHTTPServer + +class Handler(CGIHTTPServer.CGIHTTPRequestHandler): + #cgi_directories = ["/cgi"] + def do_POST(self): + print "do_POST" + #print self.command + #print self.path + #print self.headers + print self.client_address + data = self.rfile.read(int(self.headers["content-length"])) + print data + self.wfile.write("200 Ok\n"); + +PORT = 8000 + +httpd = BaseHTTPServer.HTTPServer(("", PORT), Handler) +print "serving at port", PORT +httpd.serve_forever() + diff --git a/po/apt-all.pot b/po/apt-all.pot index de72c430e..f2f151dd3 100644 --- a/po/apt-all.pot +++ b/po/apt-all.pot @@ -7,7 +7,7 @@ msgid "" msgstr "" "Project-Id-Version: PACKAGE VERSION\n" "Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2006-08-09 23:46+0200\n" +"POT-Creation-Date: 2007-02-06 11:14+0100\n" "PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n" "Last-Translator: FULL NAME <EMAIL@ADDRESS>\n" "Language-Team: LANGUAGE <LL@li.org>\n" @@ -15,145 +15,153 @@ msgstr "" "Content-Type: text/plain; charset=CHARSET\n" "Content-Transfer-Encoding: 8bit\n" -#: cmdline/apt-cache.cc:135 +#: cmdline/apt-cache.cc:143 #, c-format msgid "Package %s version %s has an unmet dep:\n" msgstr "" -#: cmdline/apt-cache.cc:175 cmdline/apt-cache.cc:527 cmdline/apt-cache.cc:615 -#: cmdline/apt-cache.cc:771 cmdline/apt-cache.cc:989 cmdline/apt-cache.cc:1357 -#: cmdline/apt-cache.cc:1508 +#: cmdline/apt-cache.cc:183 cmdline/apt-cache.cc:552 cmdline/apt-cache.cc:640 +#: cmdline/apt-cache.cc:796 cmdline/apt-cache.cc:1018 +#: cmdline/apt-cache.cc:1419 cmdline/apt-cache.cc:1570 #, c-format msgid "Unable to locate package %s" msgstr "" -#: cmdline/apt-cache.cc:232 +#: cmdline/apt-cache.cc:247 msgid "Total package names : " msgstr "" -#: cmdline/apt-cache.cc:272 +#: cmdline/apt-cache.cc:287 msgid " Normal packages: " msgstr "" -#: cmdline/apt-cache.cc:273 +#: cmdline/apt-cache.cc:288 msgid " Pure virtual packages: " msgstr "" -#: cmdline/apt-cache.cc:274 +#: cmdline/apt-cache.cc:289 msgid " Single virtual packages: " msgstr "" -#: cmdline/apt-cache.cc:275 +#: cmdline/apt-cache.cc:290 msgid " Mixed virtual packages: " msgstr "" -#: cmdline/apt-cache.cc:276 +#: cmdline/apt-cache.cc:291 msgid " Missing: " msgstr "" -#: cmdline/apt-cache.cc:278 +#: cmdline/apt-cache.cc:293 msgid "Total distinct versions: " msgstr "" -#: cmdline/apt-cache.cc:280 +#: cmdline/apt-cache.cc:295 +msgid "Total Distinct Descriptions: " +msgstr "" + +#: cmdline/apt-cache.cc:297 msgid "Total dependencies: " msgstr "" -#: cmdline/apt-cache.cc:283 +#: cmdline/apt-cache.cc:300 msgid "Total ver/file relations: " msgstr "" -#: cmdline/apt-cache.cc:285 +#: cmdline/apt-cache.cc:302 +msgid "Total Desc/File relations: " +msgstr "" + +#: cmdline/apt-cache.cc:304 msgid "Total Provides mappings: " msgstr "" -#: cmdline/apt-cache.cc:297 +#: cmdline/apt-cache.cc:316 msgid "Total globbed strings: " msgstr "" -#: cmdline/apt-cache.cc:311 +#: cmdline/apt-cache.cc:330 msgid "Total dependency version space: " msgstr "" -#: cmdline/apt-cache.cc:316 +#: cmdline/apt-cache.cc:335 msgid "Total slack space: " msgstr "" -#: cmdline/apt-cache.cc:324 +#: cmdline/apt-cache.cc:343 msgid "Total space accounted for: " msgstr "" -#: cmdline/apt-cache.cc:446 cmdline/apt-cache.cc:1189 +#: cmdline/apt-cache.cc:471 cmdline/apt-cache.cc:1218 #, c-format msgid "Package file %s is out of sync." msgstr "" -#: cmdline/apt-cache.cc:1231 +#: cmdline/apt-cache.cc:1293 msgid "You must give exactly one pattern" msgstr "" -#: cmdline/apt-cache.cc:1385 +#: cmdline/apt-cache.cc:1447 msgid "No packages found" msgstr "" -#: cmdline/apt-cache.cc:1462 +#: cmdline/apt-cache.cc:1524 msgid "Package files:" msgstr "" -#: cmdline/apt-cache.cc:1469 cmdline/apt-cache.cc:1555 +#: cmdline/apt-cache.cc:1531 cmdline/apt-cache.cc:1617 msgid "Cache is out of sync, can't x-ref a package file" msgstr "" -#: cmdline/apt-cache.cc:1470 +#: cmdline/apt-cache.cc:1532 #, c-format msgid "%4i %s\n" msgstr "" #. Show any packages have explicit pins -#: cmdline/apt-cache.cc:1482 +#: cmdline/apt-cache.cc:1544 msgid "Pinned packages:" msgstr "" -#: cmdline/apt-cache.cc:1494 cmdline/apt-cache.cc:1535 +#: cmdline/apt-cache.cc:1556 cmdline/apt-cache.cc:1597 msgid "(not found)" msgstr "" #. Installed version -#: cmdline/apt-cache.cc:1515 +#: cmdline/apt-cache.cc:1577 msgid " Installed: " msgstr "" -#: cmdline/apt-cache.cc:1517 cmdline/apt-cache.cc:1525 +#: cmdline/apt-cache.cc:1579 cmdline/apt-cache.cc:1587 msgid "(none)" msgstr "" #. Candidate Version -#: cmdline/apt-cache.cc:1522 +#: cmdline/apt-cache.cc:1584 msgid " Candidate: " msgstr "" -#: cmdline/apt-cache.cc:1532 +#: cmdline/apt-cache.cc:1594 msgid " Package pin: " msgstr "" #. Show the priority tables -#: cmdline/apt-cache.cc:1541 +#: cmdline/apt-cache.cc:1603 msgid " Version table:" msgstr "" -#: cmdline/apt-cache.cc:1556 +#: cmdline/apt-cache.cc:1618 #, c-format msgid " %4i %s\n" msgstr "" -#: cmdline/apt-cache.cc:1652 cmdline/apt-cdrom.cc:138 cmdline/apt-config.cc:70 +#: cmdline/apt-cache.cc:1714 cmdline/apt-cdrom.cc:138 cmdline/apt-config.cc:70 #: cmdline/apt-extracttemplates.cc:225 ftparchive/apt-ftparchive.cc:550 -#: cmdline/apt-get.cc:2462 cmdline/apt-sortpkgs.cc:144 +#: cmdline/apt-get.cc:2549 cmdline/apt-sortpkgs.cc:144 #, c-format msgid "%s %s for %s %s compiled on %s %s\n" msgstr "" -#: cmdline/apt-cache.cc:1659 +#: cmdline/apt-cache.cc:1721 msgid "" "Usage: apt-cache [options] command\n" " apt-cache [options] add file1 [file2 ...]\n" @@ -243,8 +251,7 @@ msgid "" " -o=? Set an arbitrary configuration option, eg -o dir::cache=/tmp\n" msgstr "" -#: cmdline/apt-extracttemplates.cc:267 apt-pkg/pkgcachegen.cc:714 -#: apt-pkg/pkgcachegen.cc:819 +#: cmdline/apt-extracttemplates.cc:267 apt-pkg/pkgcachegen.cc:819 #, c-format msgid "Unable to write to %s" msgstr "" @@ -547,7 +554,7 @@ msgstr "" msgid "Y" msgstr "" -#: cmdline/apt-get.cc:143 cmdline/apt-get.cc:1574 +#: cmdline/apt-get.cc:143 cmdline/apt-get.cc:1662 #, c-format msgid "Regex compilation error - %s" msgstr "" @@ -646,118 +653,118 @@ msgstr "" msgid "%lu not fully installed or removed.\n" msgstr "" -#: cmdline/apt-get.cc:650 +#: cmdline/apt-get.cc:664 msgid "Correcting dependencies..." msgstr "" -#: cmdline/apt-get.cc:653 +#: cmdline/apt-get.cc:667 msgid " failed." msgstr "" -#: cmdline/apt-get.cc:656 +#: cmdline/apt-get.cc:670 msgid "Unable to correct dependencies" msgstr "" -#: cmdline/apt-get.cc:659 +#: cmdline/apt-get.cc:673 msgid "Unable to minimize the upgrade set" msgstr "" -#: cmdline/apt-get.cc:661 +#: cmdline/apt-get.cc:675 msgid " Done" msgstr "" -#: cmdline/apt-get.cc:665 +#: cmdline/apt-get.cc:679 msgid "You might want to run `apt-get -f install' to correct these." msgstr "" -#: cmdline/apt-get.cc:668 +#: cmdline/apt-get.cc:682 msgid "Unmet dependencies. Try using -f." msgstr "" -#: cmdline/apt-get.cc:690 +#: cmdline/apt-get.cc:704 msgid "WARNING: The following packages cannot be authenticated!" msgstr "" -#: cmdline/apt-get.cc:694 +#: cmdline/apt-get.cc:708 msgid "Authentication warning overridden.\n" msgstr "" -#: cmdline/apt-get.cc:701 +#: cmdline/apt-get.cc:715 msgid "Install these packages without verification [y/N]? " msgstr "" -#: cmdline/apt-get.cc:703 +#: cmdline/apt-get.cc:717 msgid "Some packages could not be authenticated" msgstr "" -#: cmdline/apt-get.cc:712 cmdline/apt-get.cc:859 +#: cmdline/apt-get.cc:726 cmdline/apt-get.cc:873 msgid "There are problems and -y was used without --force-yes" msgstr "" -#: cmdline/apt-get.cc:756 +#: cmdline/apt-get.cc:770 msgid "Internal error, InstallPackages was called with broken packages!" msgstr "" -#: cmdline/apt-get.cc:765 +#: cmdline/apt-get.cc:779 msgid "Packages need to be removed but remove is disabled." msgstr "" -#: cmdline/apt-get.cc:776 +#: cmdline/apt-get.cc:790 msgid "Internal error, Ordering didn't finish" msgstr "" -#: cmdline/apt-get.cc:792 cmdline/apt-get.cc:1893 cmdline/apt-get.cc:1926 +#: cmdline/apt-get.cc:806 cmdline/apt-get.cc:1980 cmdline/apt-get.cc:2013 msgid "Unable to lock the download directory" msgstr "" -#: cmdline/apt-get.cc:802 cmdline/apt-get.cc:1974 cmdline/apt-get.cc:2210 +#: cmdline/apt-get.cc:816 cmdline/apt-get.cc:2061 cmdline/apt-get.cc:2297 #: apt-pkg/cachefile.cc:67 msgid "The list of sources could not be read." msgstr "" -#: cmdline/apt-get.cc:817 +#: cmdline/apt-get.cc:831 msgid "How odd.. The sizes didn't match, email apt@packages.debian.org" msgstr "" -#: cmdline/apt-get.cc:822 +#: cmdline/apt-get.cc:836 #, c-format msgid "Need to get %sB/%sB of archives.\n" msgstr "" -#: cmdline/apt-get.cc:825 +#: cmdline/apt-get.cc:839 #, c-format msgid "Need to get %sB of archives.\n" msgstr "" -#: cmdline/apt-get.cc:830 +#: cmdline/apt-get.cc:844 #, c-format msgid "After unpacking %sB of additional disk space will be used.\n" msgstr "" -#: cmdline/apt-get.cc:833 +#: cmdline/apt-get.cc:847 #, c-format msgid "After unpacking %sB disk space will be freed.\n" msgstr "" -#: cmdline/apt-get.cc:847 cmdline/apt-get.cc:2064 +#: cmdline/apt-get.cc:861 cmdline/apt-get.cc:2151 #, c-format msgid "Couldn't determine free space in %s" msgstr "" -#: cmdline/apt-get.cc:850 +#: cmdline/apt-get.cc:864 #, c-format msgid "You don't have enough free space in %s." msgstr "" -#: cmdline/apt-get.cc:865 cmdline/apt-get.cc:885 +#: cmdline/apt-get.cc:879 cmdline/apt-get.cc:899 msgid "Trivial Only specified but this is not a trivial operation." msgstr "" -#: cmdline/apt-get.cc:867 +#: cmdline/apt-get.cc:881 msgid "Yes, do as I say!" msgstr "" -#: cmdline/apt-get.cc:869 +#: cmdline/apt-get.cc:883 #, c-format msgid "" "You are about to do something potentially harmful.\n" @@ -765,74 +772,74 @@ msgid "" " ?] " msgstr "" -#: cmdline/apt-get.cc:875 cmdline/apt-get.cc:894 +#: cmdline/apt-get.cc:889 cmdline/apt-get.cc:908 msgid "Abort." msgstr "" -#: cmdline/apt-get.cc:890 +#: cmdline/apt-get.cc:904 msgid "Do you want to continue [Y/n]? " msgstr "" -#: cmdline/apt-get.cc:962 cmdline/apt-get.cc:1369 cmdline/apt-get.cc:2107 +#: cmdline/apt-get.cc:976 cmdline/apt-get.cc:1383 cmdline/apt-get.cc:2194 #, c-format msgid "Failed to fetch %s %s\n" msgstr "" -#: cmdline/apt-get.cc:980 +#: cmdline/apt-get.cc:994 msgid "Some files failed to download" msgstr "" -#: cmdline/apt-get.cc:981 cmdline/apt-get.cc:2116 +#: cmdline/apt-get.cc:995 cmdline/apt-get.cc:2203 msgid "Download complete and in download only mode" msgstr "" -#: cmdline/apt-get.cc:987 +#: cmdline/apt-get.cc:1001 msgid "" "Unable to fetch some archives, maybe run apt-get update or try with --fix-" "missing?" msgstr "" -#: cmdline/apt-get.cc:991 +#: cmdline/apt-get.cc:1005 msgid "--fix-missing and media swapping is not currently supported" msgstr "" -#: cmdline/apt-get.cc:996 +#: cmdline/apt-get.cc:1010 msgid "Unable to correct missing packages." msgstr "" -#: cmdline/apt-get.cc:997 +#: cmdline/apt-get.cc:1011 msgid "Aborting install." msgstr "" -#: cmdline/apt-get.cc:1031 +#: cmdline/apt-get.cc:1045 #, c-format msgid "Note, selecting %s instead of %s\n" msgstr "" -#: cmdline/apt-get.cc:1041 +#: cmdline/apt-get.cc:1055 #, c-format msgid "Skipping %s, it is already installed and upgrade is not set.\n" msgstr "" -#: cmdline/apt-get.cc:1059 +#: cmdline/apt-get.cc:1073 #, c-format msgid "Package %s is not installed, so not removed\n" msgstr "" -#: cmdline/apt-get.cc:1070 +#: cmdline/apt-get.cc:1084 #, c-format msgid "Package %s is a virtual package provided by:\n" msgstr "" -#: cmdline/apt-get.cc:1082 +#: cmdline/apt-get.cc:1096 msgid " [Installed]" msgstr "" -#: cmdline/apt-get.cc:1087 +#: cmdline/apt-get.cc:1101 msgid "You should explicitly select one to install." msgstr "" -#: cmdline/apt-get.cc:1092 +#: cmdline/apt-get.cc:1106 #, c-format msgid "" "Package %s is not available, but is referred to by another package.\n" @@ -840,97 +847,112 @@ msgid "" "is only available from another source\n" msgstr "" -#: cmdline/apt-get.cc:1111 +#: cmdline/apt-get.cc:1125 msgid "However the following packages replace it:" msgstr "" -#: cmdline/apt-get.cc:1114 +#: cmdline/apt-get.cc:1128 #, c-format msgid "Package %s has no installation candidate" msgstr "" -#: cmdline/apt-get.cc:1134 +#: cmdline/apt-get.cc:1148 #, c-format msgid "Reinstallation of %s is not possible, it cannot be downloaded.\n" msgstr "" -#: cmdline/apt-get.cc:1142 +#: cmdline/apt-get.cc:1156 #, c-format msgid "%s is already the newest version.\n" msgstr "" -#: cmdline/apt-get.cc:1171 +#: cmdline/apt-get.cc:1185 #, c-format msgid "Release '%s' for '%s' was not found" msgstr "" -#: cmdline/apt-get.cc:1173 +#: cmdline/apt-get.cc:1187 #, c-format msgid "Version '%s' for '%s' was not found" msgstr "" -#: cmdline/apt-get.cc:1179 +#: cmdline/apt-get.cc:1193 #, c-format msgid "Selected version %s (%s) for %s\n" msgstr "" -#: cmdline/apt-get.cc:1316 +#: cmdline/apt-get.cc:1330 msgid "The update command takes no arguments" msgstr "" -#: cmdline/apt-get.cc:1329 +#: cmdline/apt-get.cc:1343 msgid "Unable to lock the list directory" msgstr "" -#: cmdline/apt-get.cc:1396 cmdline/apt-get.cc:1398 +#: cmdline/apt-get.cc:1410 cmdline/apt-get.cc:1412 msgid "" "Some index files failed to download, they have been ignored, or old ones " "used instead." msgstr "" -#: cmdline/apt-get.cc:1412 +#: cmdline/apt-get.cc:1433 msgid "We are not supposed to delete stuff, can't start AutoRemover" msgstr "" -#: cmdline/apt-get.cc:1437 +#: cmdline/apt-get.cc:1460 +msgid "" +"The following packages were automatically installed and are no longer " +"required:" +msgstr "" + +#: cmdline/apt-get.cc:1462 +msgid "Use 'apt-get autoremove' to remove them." +msgstr "" + +#: cmdline/apt-get.cc:1467 msgid "" "Hmm, seems like the AutoRemover destroyed something which really\n" "shouldn't happen. Please file a bug report against apt." msgstr "" -#: cmdline/apt-get.cc:1440 cmdline/apt-get.cc:1642 +#: cmdline/apt-get.cc:1470 cmdline/apt-get.cc:1731 msgid "The following information may help to resolve the situation:" msgstr "" -#: cmdline/apt-get.cc:1444 +#: cmdline/apt-get.cc:1474 msgid "Internal Error, AutoRemover broke stuff" msgstr "" -#: cmdline/apt-get.cc:1463 +#: cmdline/apt-get.cc:1493 msgid "Internal error, AllUpgrade broke stuff" msgstr "" -#: cmdline/apt-get.cc:1561 cmdline/apt-get.cc:1597 +#: cmdline/apt-get.cc:1538 +#, c-format +msgid "Couldn't find task %s" +msgstr "" + +#: cmdline/apt-get.cc:1649 cmdline/apt-get.cc:1685 #, c-format msgid "Couldn't find package %s" msgstr "" -#: cmdline/apt-get.cc:1584 +#: cmdline/apt-get.cc:1672 #, c-format msgid "Note, selecting %s for regex '%s'\n" msgstr "" -#: cmdline/apt-get.cc:1614 +#: cmdline/apt-get.cc:1703 msgid "You might want to run `apt-get -f install' to correct these:" msgstr "" -#: cmdline/apt-get.cc:1617 +#: cmdline/apt-get.cc:1706 msgid "" "Unmet dependencies. Try 'apt-get -f install' with no packages (or specify a " "solution)." msgstr "" -#: cmdline/apt-get.cc:1629 +#: cmdline/apt-get.cc:1718 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" @@ -938,159 +960,159 @@ msgid "" "or been moved out of Incoming." msgstr "" -#: cmdline/apt-get.cc:1637 +#: cmdline/apt-get.cc:1726 msgid "" "Since you only requested a single operation it is extremely likely that\n" "the package is simply not installable and a bug report against\n" "that package should be filed." msgstr "" -#: cmdline/apt-get.cc:1645 +#: cmdline/apt-get.cc:1734 msgid "Broken packages" msgstr "" -#: cmdline/apt-get.cc:1676 +#: cmdline/apt-get.cc:1763 msgid "The following extra packages will be installed:" msgstr "" -#: cmdline/apt-get.cc:1765 +#: cmdline/apt-get.cc:1852 msgid "Suggested packages:" msgstr "" -#: cmdline/apt-get.cc:1766 +#: cmdline/apt-get.cc:1853 msgid "Recommended packages:" msgstr "" -#: cmdline/apt-get.cc:1786 +#: cmdline/apt-get.cc:1873 msgid "Calculating upgrade... " msgstr "" -#: cmdline/apt-get.cc:1789 methods/ftp.cc:702 methods/connect.cc:101 +#: cmdline/apt-get.cc:1876 methods/ftp.cc:702 methods/connect.cc:100 msgid "Failed" msgstr "" -#: cmdline/apt-get.cc:1794 +#: cmdline/apt-get.cc:1881 msgid "Done" msgstr "" -#: cmdline/apt-get.cc:1861 cmdline/apt-get.cc:1869 +#: cmdline/apt-get.cc:1948 cmdline/apt-get.cc:1956 msgid "Internal error, problem resolver broke stuff" msgstr "" -#: cmdline/apt-get.cc:1969 +#: cmdline/apt-get.cc:2056 msgid "Must specify at least one package to fetch source for" msgstr "" -#: cmdline/apt-get.cc:1999 cmdline/apt-get.cc:2228 +#: cmdline/apt-get.cc:2086 cmdline/apt-get.cc:2315 #, c-format msgid "Unable to find a source package for %s" msgstr "" -#: cmdline/apt-get.cc:2043 +#: cmdline/apt-get.cc:2130 #, c-format msgid "Skipping already downloaded file '%s'\n" msgstr "" -#: cmdline/apt-get.cc:2067 +#: cmdline/apt-get.cc:2154 #, c-format msgid "You don't have enough free space in %s" msgstr "" -#: cmdline/apt-get.cc:2072 +#: cmdline/apt-get.cc:2159 #, c-format msgid "Need to get %sB/%sB of source archives.\n" msgstr "" -#: cmdline/apt-get.cc:2075 +#: cmdline/apt-get.cc:2162 #, c-format msgid "Need to get %sB of source archives.\n" msgstr "" -#: cmdline/apt-get.cc:2081 +#: cmdline/apt-get.cc:2168 #, c-format msgid "Fetch source %s\n" msgstr "" -#: cmdline/apt-get.cc:2112 +#: cmdline/apt-get.cc:2199 msgid "Failed to fetch some archives." msgstr "" -#: cmdline/apt-get.cc:2140 +#: cmdline/apt-get.cc:2227 #, c-format msgid "Skipping unpack of already unpacked source in %s\n" msgstr "" -#: cmdline/apt-get.cc:2152 +#: cmdline/apt-get.cc:2239 #, c-format msgid "Unpack command '%s' failed.\n" msgstr "" -#: cmdline/apt-get.cc:2153 +#: cmdline/apt-get.cc:2240 #, c-format msgid "Check if the 'dpkg-dev' package is installed.\n" msgstr "" -#: cmdline/apt-get.cc:2170 +#: cmdline/apt-get.cc:2257 #, c-format msgid "Build command '%s' failed.\n" msgstr "" -#: cmdline/apt-get.cc:2189 +#: cmdline/apt-get.cc:2276 msgid "Child process failed" msgstr "" -#: cmdline/apt-get.cc:2205 +#: cmdline/apt-get.cc:2292 msgid "Must specify at least one package to check builddeps for" msgstr "" -#: cmdline/apt-get.cc:2233 +#: cmdline/apt-get.cc:2320 #, c-format msgid "Unable to get build-dependency information for %s" msgstr "" -#: cmdline/apt-get.cc:2253 +#: cmdline/apt-get.cc:2340 #, c-format msgid "%s has no build depends.\n" msgstr "" -#: cmdline/apt-get.cc:2305 +#: cmdline/apt-get.cc:2392 #, c-format msgid "" "%s dependency for %s cannot be satisfied because the package %s cannot be " "found" msgstr "" -#: cmdline/apt-get.cc:2357 +#: cmdline/apt-get.cc:2444 #, c-format msgid "" "%s dependency for %s cannot be satisfied because no available versions of " "package %s can satisfy version requirements" msgstr "" -#: cmdline/apt-get.cc:2392 +#: cmdline/apt-get.cc:2479 #, c-format msgid "Failed to satisfy %s dependency for %s: Installed package %s is too new" msgstr "" -#: cmdline/apt-get.cc:2417 +#: cmdline/apt-get.cc:2504 #, c-format msgid "Failed to satisfy %s dependency for %s: %s" msgstr "" -#: cmdline/apt-get.cc:2431 +#: cmdline/apt-get.cc:2518 #, c-format msgid "Build-dependencies for %s could not be satisfied." msgstr "" -#: cmdline/apt-get.cc:2435 +#: cmdline/apt-get.cc:2522 msgid "Failed to process build dependencies" msgstr "" -#: cmdline/apt-get.cc:2467 +#: cmdline/apt-get.cc:2554 msgid "Supported modules:" msgstr "" -#: cmdline/apt-get.cc:2508 +#: cmdline/apt-get.cc:2595 msgid "" "Usage: apt-get [options] command\n" " apt-get [options] install|remove pkg1 [pkg2 ...]\n" @@ -1345,7 +1367,7 @@ msgstr "" #: apt-inst/extract.cc:467 apt-pkg/contrib/configuration.cc:750 #: apt-pkg/contrib/cdromutl.cc:153 apt-pkg/sourcelist.cc:324 -#: apt-pkg/acquire.cc:421 apt-pkg/clean.cc:38 +#: apt-pkg/acquire.cc:421 apt-pkg/clean.cc:38 methods/mirror.cc:82 #, c-format msgid "Unable to read %s" msgstr "" @@ -1375,9 +1397,7 @@ msgid "The info and temp directories need to be on the same filesystem" msgstr "" #. Build the status cache -#: apt-inst/deb/dpkgdb.cc:139 apt-pkg/pkgcachegen.cc:647 -#: apt-pkg/pkgcachegen.cc:716 apt-pkg/pkgcachegen.cc:721 -#: apt-pkg/pkgcachegen.cc:844 apt-pkg/pkgcachegen.cc:752 +#: apt-inst/deb/dpkgdb.cc:139 apt-pkg/pkgcachegen.cc:752 #: apt-pkg/pkgcachegen.cc:821 apt-pkg/pkgcachegen.cc:826 #: apt-pkg/pkgcachegen.cc:949 msgid "Reading package lists" @@ -1507,13 +1527,12 @@ msgstr "" msgid "File not found" msgstr "" -#: methods/copy.cc:42 methods/gpgv.cc:281 methods/gzip.cc:133 -#: methods/gzip.cc:142 methods/gzip.cc:134 methods/gzip.cc:143 +#: methods/copy.cc:42 methods/gpgv.cc:281 methods/gzip.cc:141 +#: methods/gzip.cc:150 msgid "Failed to stat" msgstr "" -#: methods/copy.cc:79 methods/gpgv.cc:278 methods/gzip.cc:139 -#: methods/gzip.cc:140 +#: methods/copy.cc:79 methods/gpgv.cc:278 methods/gzip.cc:147 msgid "Failed to set modification time" msgstr "" @@ -1639,7 +1658,7 @@ msgstr "" msgid "Unable to accept connection" msgstr "" -#: methods/ftp.cc:864 methods/http.cc:958 methods/rsh.cc:303 +#: methods/ftp.cc:864 methods/http.cc:961 methods/rsh.cc:303 msgid "Problem hashing file" msgstr "" @@ -1666,39 +1685,39 @@ msgstr "" msgid "Unable to invoke " msgstr "" -#: methods/connect.cc:64 +#: methods/connect.cc:65 #, c-format msgid "Connecting to %s (%s)" msgstr "" -#: methods/connect.cc:71 +#: methods/connect.cc:72 #, c-format msgid "[IP: %s %s]" msgstr "" -#: methods/connect.cc:80 +#: methods/connect.cc:79 #, c-format msgid "Could not create a socket for %s (f=%u t=%u p=%u)" msgstr "" -#: methods/connect.cc:86 +#: methods/connect.cc:85 #, c-format msgid "Cannot initiate the connection to %s:%s (%s)." msgstr "" -#: methods/connect.cc:93 +#: methods/connect.cc:92 #, c-format msgid "Could not connect to %s:%s (%s), connection timed out" msgstr "" -#: methods/connect.cc:108 +#: methods/connect.cc:107 #, c-format msgid "Could not connect to %s:%s (%s)." msgstr "" #. We say this mainly because the pause here is for the #. ssh connection that is still going -#: methods/connect.cc:136 methods/rsh.cc:425 +#: methods/connect.cc:135 methods/rsh.cc:425 #, c-format msgid "Connecting to %s" msgstr "" @@ -1760,12 +1779,12 @@ msgid "" "available:\n" msgstr "" -#: methods/gzip.cc:57 +#: methods/gzip.cc:64 #, c-format msgid "Couldn't open pipe for %s" msgstr "" -#: methods/gzip.cc:102 +#: methods/gzip.cc:109 #, c-format msgid "Read error from %s process" msgstr "" @@ -1831,15 +1850,15 @@ msgstr "" msgid "Error reading from server" msgstr "" -#: methods/http.cc:1107 +#: methods/http.cc:1110 msgid "Bad header data" msgstr "" -#: methods/http.cc:1124 +#: methods/http.cc:1127 msgid "Connection failed" msgstr "" -#: methods/http.cc:1215 +#: methods/http.cc:1218 msgid "Internal error" msgstr "" @@ -1852,7 +1871,7 @@ msgstr "" msgid "Couldn't make mmap of %lu bytes" msgstr "" -#: apt-pkg/contrib/strutl.cc:938 apt-pkg/contrib/strutl.cc:981 +#: apt-pkg/contrib/strutl.cc:981 #, c-format msgid "Selection %s not found" msgstr "" @@ -1912,12 +1931,12 @@ msgstr "" msgid "Syntax error %s:%u: Extra junk at end of file" msgstr "" -#: apt-pkg/contrib/progress.cc:154 +#: apt-pkg/contrib/progress.cc:155 #, c-format msgid "%c%s... Error!" msgstr "" -#: apt-pkg/contrib/progress.cc:156 +#: apt-pkg/contrib/progress.cc:157 #, c-format msgid "%c%s... Done" msgstr "" @@ -1974,6 +1993,7 @@ msgid "Unable to stat the mount point %s" msgstr "" #: apt-pkg/contrib/cdromutl.cc:149 apt-pkg/acquire.cc:427 apt-pkg/clean.cc:44 +#: methods/mirror.cc:88 #, c-format msgid "Unable to change to %s" msgstr "" @@ -2049,72 +2069,76 @@ msgstr "" msgid "Problem syncing the file" msgstr "" -#: apt-pkg/pkgcache.cc:126 apt-pkg/pkgcache.cc:137 +#: apt-pkg/pkgcache.cc:137 msgid "Empty package cache" msgstr "" -#: apt-pkg/pkgcache.cc:132 apt-pkg/pkgcache.cc:143 +#: apt-pkg/pkgcache.cc:143 msgid "The package cache file is corrupted" msgstr "" -#: apt-pkg/pkgcache.cc:137 apt-pkg/pkgcache.cc:148 +#: apt-pkg/pkgcache.cc:148 msgid "The package cache file is an incompatible version" msgstr "" -#: apt-pkg/pkgcache.cc:142 apt-pkg/pkgcache.cc:153 +#: apt-pkg/pkgcache.cc:153 #, c-format msgid "This APT does not support the versioning system '%s'" msgstr "" -#: apt-pkg/pkgcache.cc:147 apt-pkg/pkgcache.cc:158 +#: apt-pkg/pkgcache.cc:158 msgid "The package cache was built for a different architecture" msgstr "" -#: apt-pkg/pkgcache.cc:218 apt-pkg/pkgcache.cc:229 +#: apt-pkg/pkgcache.cc:229 msgid "Depends" msgstr "" -#: apt-pkg/pkgcache.cc:218 apt-pkg/pkgcache.cc:229 +#: apt-pkg/pkgcache.cc:229 msgid "PreDepends" msgstr "" -#: apt-pkg/pkgcache.cc:218 apt-pkg/pkgcache.cc:229 +#: apt-pkg/pkgcache.cc:229 msgid "Suggests" msgstr "" -#: apt-pkg/pkgcache.cc:219 apt-pkg/pkgcache.cc:230 +#: apt-pkg/pkgcache.cc:230 msgid "Recommends" msgstr "" -#: apt-pkg/pkgcache.cc:219 apt-pkg/pkgcache.cc:230 +#: apt-pkg/pkgcache.cc:230 msgid "Conflicts" msgstr "" -#: apt-pkg/pkgcache.cc:219 apt-pkg/pkgcache.cc:230 +#: apt-pkg/pkgcache.cc:230 msgid "Replaces" msgstr "" -#: apt-pkg/pkgcache.cc:220 apt-pkg/pkgcache.cc:231 +#: apt-pkg/pkgcache.cc:231 msgid "Obsoletes" msgstr "" -#: apt-pkg/pkgcache.cc:231 apt-pkg/pkgcache.cc:242 +#: apt-pkg/pkgcache.cc:231 +msgid "Breaks" +msgstr "" + +#: apt-pkg/pkgcache.cc:242 msgid "important" msgstr "" -#: apt-pkg/pkgcache.cc:231 apt-pkg/pkgcache.cc:242 +#: apt-pkg/pkgcache.cc:242 msgid "required" msgstr "" -#: apt-pkg/pkgcache.cc:231 apt-pkg/pkgcache.cc:242 +#: apt-pkg/pkgcache.cc:242 msgid "standard" msgstr "" -#: apt-pkg/pkgcache.cc:232 apt-pkg/pkgcache.cc:243 +#: apt-pkg/pkgcache.cc:243 msgid "optional" msgstr "" -#: apt-pkg/pkgcache.cc:232 apt-pkg/pkgcache.cc:243 +#: apt-pkg/pkgcache.cc:243 msgid "extra" msgstr "" @@ -2144,12 +2168,12 @@ msgstr "" msgid "Failed to write temporary StateFile %s" msgstr "" -#: apt-pkg/tagfile.cc:85 apt-pkg/tagfile.cc:92 apt-pkg/tagfile.cc:73 +#: apt-pkg/tagfile.cc:106 #, c-format msgid "Unable to parse package file %s (1)" msgstr "" -#: apt-pkg/tagfile.cc:186 apt-pkg/tagfile.cc:160 +#: apt-pkg/tagfile.cc:193 #, c-format msgid "Unable to parse package file %s (2)" msgstr "" @@ -2184,7 +2208,7 @@ msgstr "" msgid "Opening %s" msgstr "" -#: apt-pkg/sourcelist.cc:220 apt-pkg/cdrom.cc:426 apt-pkg/cdrom.cc:450 +#: apt-pkg/sourcelist.cc:220 apt-pkg/cdrom.cc:450 #, c-format msgid "Line %u too long in source list %s." msgstr "" @@ -2217,19 +2241,19 @@ msgstr "" msgid "Index file type '%s' is not supported" msgstr "" -#: apt-pkg/algorithms.cc:245 apt-pkg/algorithms.cc:248 +#: apt-pkg/algorithms.cc:248 #, c-format msgid "" "The package %s needs to be reinstalled, but I can't find an archive for it." msgstr "" -#: apt-pkg/algorithms.cc:1075 apt-pkg/algorithms.cc:1096 +#: apt-pkg/algorithms.cc:1104 msgid "" "Error, pkgProblemResolver::Resolve generated breaks, this may be caused by " "held packages." msgstr "" -#: apt-pkg/algorithms.cc:1077 apt-pkg/algorithms.cc:1098 +#: apt-pkg/algorithms.cc:1106 msgid "Unable to correct problems, you have held broken packages." msgstr "" @@ -2270,12 +2294,12 @@ msgstr "" msgid "Please insert the disc labeled: '%s' in the drive '%s' and press enter." msgstr "" -#: apt-pkg/init.cc:122 apt-pkg/init.cc:125 +#: apt-pkg/init.cc:126 #, c-format msgid "Packaging system '%s' is not supported" msgstr "" -#: apt-pkg/init.cc:138 apt-pkg/init.cc:141 +#: apt-pkg/init.cc:142 msgid "Unable to determine a suitable packaging system type" msgstr "" @@ -2318,112 +2342,124 @@ msgstr "" msgid "Error occurred while processing %s (NewPackage)" msgstr "" -#: apt-pkg/pkgcachegen.cc:131 apt-pkg/pkgcachegen.cc:134 +#: apt-pkg/pkgcachegen.cc:134 #, c-format msgid "Error occurred while processing %s (UsePackage1)" msgstr "" -#: apt-pkg/pkgcachegen.cc:152 apt-pkg/pkgcachegen.cc:182 +#: apt-pkg/pkgcachegen.cc:157 +#, c-format +msgid "Error occured while processing %s (NewFileDesc1)" +msgstr "" + +#: apt-pkg/pkgcachegen.cc:182 #, c-format msgid "Error occurred while processing %s (UsePackage2)" msgstr "" -#: apt-pkg/pkgcachegen.cc:156 apt-pkg/pkgcachegen.cc:186 +#: apt-pkg/pkgcachegen.cc:186 #, c-format msgid "Error occurred while processing %s (NewFileVer1)" msgstr "" -#: apt-pkg/pkgcachegen.cc:186 apt-pkg/pkgcachegen.cc:217 +#: apt-pkg/pkgcachegen.cc:217 #, c-format msgid "Error occurred while processing %s (NewVersion1)" msgstr "" -#: apt-pkg/pkgcachegen.cc:190 apt-pkg/pkgcachegen.cc:221 +#: apt-pkg/pkgcachegen.cc:221 #, c-format msgid "Error occurred while processing %s (UsePackage3)" msgstr "" -#: apt-pkg/pkgcachegen.cc:194 apt-pkg/pkgcachegen.cc:225 +#: apt-pkg/pkgcachegen.cc:225 #, c-format msgid "Error occurred while processing %s (NewVersion2)" msgstr "" -#: apt-pkg/pkgcachegen.cc:209 apt-pkg/pkgcachegen.cc:255 +#: apt-pkg/pkgcachegen.cc:249 +#, c-format +msgid "Error occured while processing %s (NewFileDesc2)" +msgstr "" + +#: apt-pkg/pkgcachegen.cc:255 msgid "Wow, you exceeded the number of package names this APT is capable of." msgstr "" -#: apt-pkg/pkgcachegen.cc:212 apt-pkg/pkgcachegen.cc:258 +#: apt-pkg/pkgcachegen.cc:258 msgid "Wow, you exceeded the number of versions this APT is capable of." msgstr "" -#: apt-pkg/pkgcachegen.cc:215 apt-pkg/pkgcachegen.cc:264 +#: apt-pkg/pkgcachegen.cc:261 +msgid "Wow, you exceeded the number of descriptions this APT is capable of." +msgstr "" + +#: apt-pkg/pkgcachegen.cc:264 msgid "Wow, you exceeded the number of dependencies this APT is capable of." msgstr "" -#: apt-pkg/pkgcachegen.cc:243 apt-pkg/pkgcachegen.cc:292 +#: apt-pkg/pkgcachegen.cc:292 #, c-format msgid "Error occurred while processing %s (FindPkg)" msgstr "" -#: apt-pkg/pkgcachegen.cc:256 apt-pkg/pkgcachegen.cc:305 +#: apt-pkg/pkgcachegen.cc:305 #, c-format msgid "Error occurred while processing %s (CollectFileProvides)" msgstr "" -#: apt-pkg/pkgcachegen.cc:262 apt-pkg/pkgcachegen.cc:311 +#: apt-pkg/pkgcachegen.cc:311 #, c-format msgid "Package %s %s was not found while processing file dependencies" msgstr "" -#: apt-pkg/pkgcachegen.cc:577 apt-pkg/pkgcachegen.cc:682 +#: apt-pkg/pkgcachegen.cc:682 #, c-format msgid "Couldn't stat source package list %s" msgstr "" -#: apt-pkg/pkgcachegen.cc:662 apt-pkg/pkgcachegen.cc:767 +#: apt-pkg/pkgcachegen.cc:767 msgid "Collecting File Provides" msgstr "" -#: apt-pkg/pkgcachegen.cc:789 apt-pkg/pkgcachegen.cc:796 #: apt-pkg/pkgcachegen.cc:894 apt-pkg/pkgcachegen.cc:901 msgid "IO Error saving source cache" msgstr "" -#: apt-pkg/acquire-item.cc:126 +#: apt-pkg/acquire-item.cc:134 #, c-format msgid "rename failed, %s (%s -> %s)." msgstr "" -#: apt-pkg/acquire-item.cc:236 apt-pkg/acquire-item.cc:951 -#: apt-pkg/acquire-item.cc:980 +#: apt-pkg/acquire-item.cc:286 apt-pkg/acquire-item.cc:1032 msgid "MD5Sum mismatch" msgstr "" -#: apt-pkg/acquire-item.cc:646 apt-pkg/acquire-item.cc:675 -msgid "There are no public key available for the following key IDs:\n" +#: apt-pkg/acquire-item.cc:726 +msgid "There is no public key available for the following key IDs:\n" msgstr "" -#: apt-pkg/acquire-item.cc:759 apt-pkg/acquire-item.cc:788 +#: apt-pkg/acquire-item.cc:840 #, 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 "" -#: apt-pkg/acquire-item.cc:818 apt-pkg/acquire-item.cc:847 +#: apt-pkg/acquire-item.cc:899 #, c-format msgid "" "I wasn't able to locate file for the %s package. This might mean you need to " "manually fix this package." msgstr "" -#: apt-pkg/acquire-item.cc:854 apt-pkg/acquire-item.cc:883 +#: apt-pkg/acquire-item.cc:935 #, c-format msgid "" "The package index files are corrupted. No Filename: field for package %s." msgstr "" -#: apt-pkg/acquire-item.cc:941 apt-pkg/acquire-item.cc:970 +#: apt-pkg/acquire-item.cc:1022 msgid "Size mismatch" msgstr "" @@ -2432,93 +2468,94 @@ msgstr "" msgid "Vendor block %s contains no fingerprint" msgstr "" -#: apt-pkg/cdrom.cc:507 apt-pkg/cdrom.cc:531 +#: apt-pkg/cdrom.cc:531 #, c-format msgid "" "Using CD-ROM mount point %s\n" "Mounting CD-ROM\n" msgstr "" -#: apt-pkg/cdrom.cc:516 apt-pkg/cdrom.cc:598 apt-pkg/cdrom.cc:540 -#: apt-pkg/cdrom.cc:622 +#: apt-pkg/cdrom.cc:540 apt-pkg/cdrom.cc:622 msgid "Identifying.. " msgstr "" -#: apt-pkg/cdrom.cc:541 apt-pkg/cdrom.cc:565 +#: apt-pkg/cdrom.cc:565 #, c-format msgid "Stored label: %s \n" msgstr "" -#: apt-pkg/cdrom.cc:561 apt-pkg/cdrom.cc:585 +#: apt-pkg/cdrom.cc:585 #, c-format msgid "Using CD-ROM mount point %s\n" msgstr "" -#: apt-pkg/cdrom.cc:579 apt-pkg/cdrom.cc:603 +#: apt-pkg/cdrom.cc:603 msgid "Unmounting CD-ROM\n" msgstr "" -#: apt-pkg/cdrom.cc:583 apt-pkg/cdrom.cc:607 +#: apt-pkg/cdrom.cc:607 msgid "Waiting for disc...\n" msgstr "" #. Mount the new CDROM -#: apt-pkg/cdrom.cc:591 apt-pkg/cdrom.cc:615 +#: apt-pkg/cdrom.cc:615 msgid "Mounting CD-ROM...\n" msgstr "" -#: apt-pkg/cdrom.cc:609 apt-pkg/cdrom.cc:633 +#: apt-pkg/cdrom.cc:633 msgid "Scanning disc for index files..\n" msgstr "" -#: apt-pkg/cdrom.cc:647 +#: apt-pkg/cdrom.cc:673 #, c-format -msgid "Found %i package indexes, %i source indexes and %i signatures\n" +msgid "" +"Found %i package indexes, %i source indexes, %i translation indexes and %i " +"signatures\n" msgstr "" -#: apt-pkg/cdrom.cc:710 apt-pkg/cdrom.cc:737 +#: apt-pkg/cdrom.cc:737 msgid "That is not a valid name, try again.\n" msgstr "" -#: apt-pkg/cdrom.cc:726 apt-pkg/cdrom.cc:753 +#: apt-pkg/cdrom.cc:753 #, c-format msgid "" "This disc is called: \n" "'%s'\n" msgstr "" -#: apt-pkg/cdrom.cc:730 apt-pkg/cdrom.cc:757 +#: apt-pkg/cdrom.cc:757 msgid "Copying package lists..." msgstr "" -#: apt-pkg/cdrom.cc:754 apt-pkg/cdrom.cc:783 +#: apt-pkg/cdrom.cc:783 msgid "Writing new source list\n" msgstr "" -#: apt-pkg/cdrom.cc:763 apt-pkg/cdrom.cc:792 +#: apt-pkg/cdrom.cc:792 msgid "Source list entries for this disc are:\n" msgstr "" -#: apt-pkg/cdrom.cc:803 apt-pkg/cdrom.cc:832 +#: apt-pkg/cdrom.cc:832 msgid "Unmounting CD-ROM..." msgstr "" -#: apt-pkg/indexcopy.cc:261 apt-pkg/indexcopy.cc:263 apt-pkg/indexcopy.cc:830 +#: apt-pkg/indexcopy.cc:263 apt-pkg/indexcopy.cc:830 #, c-format msgid "Wrote %i records.\n" msgstr "" -#: apt-pkg/indexcopy.cc:263 apt-pkg/indexcopy.cc:265 apt-pkg/indexcopy.cc:832 +#: apt-pkg/indexcopy.cc:265 apt-pkg/indexcopy.cc:832 #, c-format msgid "Wrote %i records with %i missing files.\n" msgstr "" -#: apt-pkg/indexcopy.cc:266 apt-pkg/indexcopy.cc:268 apt-pkg/indexcopy.cc:835 +#: apt-pkg/indexcopy.cc:268 apt-pkg/indexcopy.cc:835 #, c-format msgid "Wrote %i records with %i mismatched files\n" msgstr "" -#: apt-pkg/indexcopy.cc:269 apt-pkg/indexcopy.cc:271 apt-pkg/indexcopy.cc:838 +#: apt-pkg/indexcopy.cc:271 apt-pkg/indexcopy.cc:838 #, c-format msgid "Wrote %i records with %i missing files and %i mismatched files\n" msgstr "" @@ -2576,28 +2613,3 @@ msgstr "" #: methods/rsh.cc:330 msgid "Connection closed prematurely" msgstr "" - -#: apt-pkg/pkgcache.cc:231 -msgid "Breaks" -msgstr "" - -#: apt-pkg/pkgcachegen.cc:157 -#, c-format -msgid "Error occured while processing %s (NewFileDesc1)" -msgstr "" - -#: apt-pkg/pkgcachegen.cc:249 -#, c-format -msgid "Error occured while processing %s (NewFileDesc2)" -msgstr "" - -#: apt-pkg/pkgcachegen.cc:261 -msgid "Wow, you exceeded the number of descriptions this APT is capable of." -msgstr "" - -#: apt-pkg/cdrom.cc:673 -#, c-format -msgid "" -"Found %i package indexes, %i source indexes, %i translation indexes and %i " -"signatures\n" -msgstr "" |