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