diff options
158 files changed, 9830 insertions, 6797 deletions
@@ -0,0 +1,9 @@ + +DDTP problems: +-------------- +- apt-get update clean the /var/lib/apt/lists dir + from all Translation-$index that are not in the current + enviroment or Translations apt variable +- there needs to be a list of locales (pt, sv, en) that need + both language and country code to get the right file + (is in the code in indexfile::LanguageCode(), just a bit ugly @@ -26,7 +26,7 @@ maintainer-clean dist-clean distclean pristine sanity: veryclean # The startup target builds the necessary configure scripts. It should # be used after a CVS checkout. -CONVERTED=environment.mak include/config.h include/apti18n.h makefile +CONVERTED=environment.mak include/config.h include/apti18n.h build/doc/Doxyfile makefile include buildlib/configure.mak $(BUILDDIR)/include/config.h: buildlib/config.h.in $(BUILDDIR)/include/apti18n.h: buildlib/apti18n.h.in diff --git a/README.ddtp b/README.ddtp new file mode 100644 index 000000000..98f6109aa --- /dev/null +++ b/README.ddtp @@ -0,0 +1,74 @@ +TODO: +- URL-Remap for the translation files (to hack around the problem that + they are not on any ftp server yet but only on http://ddtp.debian.org/) + +Here is the original announcement of the ddtp support: + +* To: debian-devel-announce@lists.debian.org +* Subject: Translate files +* From: Michael Bramer <grisu@debian.org> +* Date: Sun, 6 Oct 2002 21:56:06 +0200 +* Mail-followup-to: debian-devel@lists.debian.org +* Message-id: <20021006195605.GA30516@home.debsupport.de> +* Old-return-path: <michael@home.debsupport.de> +* User-agent: Mutt/1.3.28i + +Hello all + +After some discussion between Anthony Towns (a ftpmaster), Jason +Gunthorpe (APT Developer) and some DDTP Coordinators we find a way to +transfer the translated package descriptions from the archive to the +user. + +The translated descriptions need to be downloadable befor any +installation process, like the other package meta information. We +choose a new file per languages with all translated package +descriptions. The package system can download one or more of this +files at 'apt-get update' time and know the translations. + +The new files are names 'Translate-$lang' and the file have this +rfc822-format: + Package: <package-name> + Description-md5: <the md5 checksum of the english description> + Description-$lang.$encoding: <translated headline> + <translated section> + +The encoding of the Description is 'UTF-8' in all languages normal. +The files will be located at 'debian/dists/sid/main/i18n/' on the ftp +server (for all architecture). In addition of the plain +'Translate-$lang' file, there will be a 'gz' and a 'bz2' version and +in future also the new incremental format version. + +The <the md5 checksum of the english description> is the md5 checksum +of the full english description, without the 'Description: '-tag and +with all spaces and newlines. Look at this example: + Description: XXX + YYY + . + ZZZ +is md5("XXX\n YYY\n .\n ZZZ\n") (perl-syntax). + + +A future APT version will download one or some 'Translate-$lang' +file(s) at 'update'-time. After this download it show a translated +description instead of the english form, if it found a translated +description of the package with the right md5 chechsum. The enviroment +of the user will controlled this process (LANG, LANGUAGE, LC_MESSAGES, +etc). With this the package system will never show a outdated +translation. + +The translations come all from the DDTP. A daily process on +ddtp.debian.org make new 'Translated-$lang' files and a script on +ftp-master request this files and move this to the debian archive. +Now the first files are accessable at + <a href="http://ddtp.debian.org/pdesc/translatefiles/">http://ddtp.debian.org/pdesc/translatefiles/</a> + +If you found wrong translations, please read the guides on +ddtp.debian.org, make a better translation and send this per mail to +the DDTP server. Don't bug the package maintainer! + +Thanks +Grisu +-- +Michael Bramer - a Debian Linux Developer <a href="http://www.debsupport.de">http://www.debsupport.de</a> +PGP: finger grisu@db.debian.org -- Linux Sysadmin -- Use Debian Linux diff --git a/apt-inst/contrib/arfile.h b/apt-inst/contrib/arfile.h index 6c54d3e6b..96e18bc60 100644 --- a/apt-inst/contrib/arfile.h +++ b/apt-inst/contrib/arfile.h @@ -15,9 +15,6 @@ #ifndef PKGLIB_ARFILE_H #define PKGLIB_ARFILE_H -#ifdef __GNUG__ -#pragma interface "apt-pkg/arfile.h" -#endif #include <string> #include <apt-pkg/fileutl.h> diff --git a/apt-inst/contrib/extracttar.h b/apt-inst/contrib/extracttar.h index 6daf00a27..42f8ef534 100644 --- a/apt-inst/contrib/extracttar.h +++ b/apt-inst/contrib/extracttar.h @@ -14,10 +14,6 @@ #ifndef PKGLIB_EXTRACTTAR_H #define PKGLIB_EXTRACTTAR_H -#ifdef __GNUG__ -#pragma interface "apt-pkg/extracttar.h" -#endif - #include <apt-pkg/fileutl.h> #include <apt-pkg/dirstream.h> diff --git a/apt-inst/database.h b/apt-inst/database.h index 0972d40cd..ef45bc2d6 100644 --- a/apt-inst/database.h +++ b/apt-inst/database.h @@ -21,10 +21,6 @@ #ifndef PKGLIB_DATABASE_H #define PKGLIB_DATABASE_H -#ifdef __GNUG__ -#pragma interface "apt-pkg/database.h" -#endif - #include <apt-pkg/filelist.h> #include <apt-pkg/pkgcachegen.h> diff --git a/apt-inst/deb/debfile.h b/apt-inst/deb/debfile.h index d89b85268..6b9f8ffc8 100644 --- a/apt-inst/deb/debfile.h +++ b/apt-inst/deb/debfile.h @@ -23,9 +23,6 @@ #ifndef PKGLIB_DEBFILE_H #define PKGLIB_DEBFILE_H -#ifdef __GNUG__ -#pragma interface "apt-pkg/debfile.h" -#endif #include <apt-pkg/arfile.h> #include <apt-pkg/database.h> diff --git a/apt-inst/deb/dpkgdb.h b/apt-inst/deb/dpkgdb.h index ddbb6d6f2..125845f96 100644 --- a/apt-inst/deb/dpkgdb.h +++ b/apt-inst/deb/dpkgdb.h @@ -19,9 +19,6 @@ #ifndef PKGLIB_DPKGDB_H #define PKGLIB_DPKGDB_H -#ifdef __GNUG__ -#pragma interface "apt-pkg/dpkgdb.h" -#endif #include <apt-pkg/database.h> diff --git a/apt-inst/dirstream.h b/apt-inst/dirstream.h index dfb480bd4..9d1af2188 100644 --- a/apt-inst/dirstream.h +++ b/apt-inst/dirstream.h @@ -25,9 +25,6 @@ #ifndef PKGLIB_DIRSTREAM_H #define PKGLIB_DIRSTREAM_H -#ifdef __GNUG__ -#pragma interface "apt-pkg/dirstream.h" -#endif class pkgDirStream { diff --git a/apt-inst/extract.h b/apt-inst/extract.h index a9152a26f..71222983c 100644 --- a/apt-inst/extract.h +++ b/apt-inst/extract.h @@ -17,9 +17,7 @@ #ifndef PKGLIB_EXTRACT_H #define PKGLIB_EXTRACT_H -#ifdef __GNUG__ -#pragma interface "apt-pkg/extract.h" -#endif + #include <apt-pkg/dirstream.h> #include <apt-pkg/filelist.h> diff --git a/apt-inst/filelist.h b/apt-inst/filelist.h index 7536a2f63..86766254f 100644 --- a/apt-inst/filelist.h +++ b/apt-inst/filelist.h @@ -28,9 +28,7 @@ #ifndef PKGLIB_FILELIST_H #define PKGLIB_FILELIST_H -#ifdef __GNUG__ -#pragma interface "apt-pkg/filelist.h" -#endif + #include <apt-pkg/mmap.h> diff --git a/apt-pkg/acquire-item.cc b/apt-pkg/acquire-item.cc index 8ec4ba2c0..3fd2304d2 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> /*}}}*/ @@ -75,7 +78,7 @@ void pkgAcquire::Item::Failed(string Message,pkgAcquire::MethodConfig *Cnf) Dequeue(); return; } - + Status = StatError; Dequeue(); } @@ -100,7 +103,8 @@ void pkgAcquire::Item::Done(string Message,unsigned long Size,string, { // We just downloaded something.. string FileName = LookupTag(Message,"Filename"); - if (Complete == false && FileName == DestFile) + // we only inform the Log class if it was actually not a local thing + if (Complete == false && !Local && FileName == DestFile) { if (Owner->Log != 0) Owner->Log->Fetched(Size,atoi(LookupTag(Message,"Resume-Point","0").c_str())); @@ -131,14 +135,433 @@ 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); + + // FIXME: this file:/ check is a hack to prevent fetching + // from local sources. this is really silly, and + // should be fixed cleanly as soon as possible + if(!FileExists(CurrentPackagesFile) || + Desc.URI.substr(0,strlen("file:/")) == "file:/") + { + // we don't have a pkg file or we don't want to queue + if(Debug) + std::clog << "No index file, local 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) + { + // we have the same sha1 as the server + 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); + } + } + } + + // we have something, queue the next diff + if(found) + { + // queue the diffs + int last_space = Description.rfind(" "); + if(last_space != string::npos) + Description.erase(last_space, Description.size()-last_space); + new pkgAcqIndexDiffs(Owner, RealURI, Description, Desc.ShortDesc, + ExpectedMD5, available_patches); + Complete = false; + Status = StatDone; + Dequeue(); + return true; + } + } + + // Nothing found, report and return false + // Failing here is ok, if we return false later, the full + // IndexFile is queued + if(Debug) + std::clog << "Can't find a patch in the index file" << std::endl; + 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); + + 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) + { + DestFile = _config->FindDir("Dir::State::lists"); + DestFile += URItoFileName(RealURI); + + // do the final md5sum checking + MD5Summation sum; + FileFd Fd(DestFile, FileFd::ReadOnly); + sum.AddFD(Fd.Fd(), Fd.Size()); + Fd.Close(); + string MD5 = (string)sum.Result(); + + if (!ExpectedMD5.empty() && MD5 != ExpectedMD5) + { + Status = StatAuthError; + ErrorText = _("MD5Sum mismatch"); + Rename(DestFile,DestFile + ".FAILED"); + Dequeue(); + return; + } + + // this is for the "real" finish + 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 = 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; + Local = true; + 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; + Local = true; + 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); + chmod(FinalFile.c_str(),0644); + + // 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; @@ -183,6 +606,7 @@ string pkgAcqIndex::Custom600Headers() void pkgAcqIndex::Failed(string Message,pkgAcquire::MethodConfig *Cnf) { + // no .bz2 found, retry with .gz if(Desc.URI.substr(Desc.URI.size()-3) == "bz2") { Desc.URI = Desc.URI.substr(0,Desc.URI.size()-3) + "gz"; @@ -194,9 +618,15 @@ void pkgAcqIndex::Failed(string Message,pkgAcquire::MethodConfig *Cnf) Complete = false; Dequeue(); return; + } + + // on decompression failure, remove bad versions in partial/ + if(Decompression && Erase) { + string s = _config->FindDir("Dir::State::lists") + "partial/"; + s += URItoFileName(RealURI); + unlink(s.c_str()); } - Item::Failed(Message,Cnf); } @@ -308,6 +738,35 @@ void pkgAcqIndex::Done(string Message,unsigned long Size,string MD5, Mode = decompProg; } +// AcqIndexTrans::pkgAcqIndexTrans - Constructor /*{{{*/ +// --------------------------------------------------------------------- +/* The Translation file is added to the queue */ +pkgAcqIndexTrans::pkgAcqIndexTrans(pkgAcquire *Owner, + string URI,string URIDesc,string ShortDesc) : + pkgAcqIndex(Owner, URI, URIDesc, ShortDesc, "", "") +{ +} + + /*}}}*/ +// AcqIndexTrans::Failed - Silence failure messages for missing files /*{{{*/ +// --------------------------------------------------------------------- +/* */ +void pkgAcqIndexTrans::Failed(string Message,pkgAcquire::MethodConfig *Cnf) +{ + if (Cnf->LocalOnly == true || + StringToBool(LookupTag(Message,"Transient-Failure"),false) == false) + { + // Ignore this + Status = StatDone; + Complete = false; + Dequeue(); + return; + } + + Item::Failed(Message,Cnf); +} + /*}}}*/ + pkgAcqMetaSig::pkgAcqMetaSig(pkgAcquire *Owner, string URI,string URIDesc,string ShortDesc, string MetaIndexURI, string MetaIndexURIDesc, @@ -321,8 +780,9 @@ pkgAcqMetaSig::pkgAcqMetaSig(pkgAcquire *Owner, DestFile = _config->FindDir("Dir::State::lists") + "partial/"; DestFile += URItoFileName(URI); - // remove any partial downloaded sig-file. it may confuse proxies - // and is too small to warrant a partial download anyway + // remove any partial downloaded sig-file in partial/. + // it may confuse proxies and is too small to warrant a + // partial download anyway unlink(DestFile.c_str()); // Create the item @@ -389,17 +849,22 @@ void pkgAcqMetaSig::Done(string Message,unsigned long Size,string MD5, /*}}}*/ void pkgAcqMetaSig::Failed(string Message,pkgAcquire::MethodConfig *Cnf) { + string Final = _config->FindDir("Dir::State::lists") + URItoFileName(RealURI); // if we get a network error we fail gracefully - if(LookupTag(Message,"FailReason") == "Timeout" || - LookupTag(Message,"FailReason") == "TmpResolveFailure" || - LookupTag(Message,"FailReason") == "ConnectionRefused") { + if(Status == StatTransientNetworkError) + { Item::Failed(Message,Cnf); + // move the sigfile back on network failures (and re-authenticated?) + if(FileExists(DestFile)) + Rename(DestFile,Final); + + // set the status back to , Item::Failed likes to reset it + Status = pkgAcquire::Item::StatTransientNetworkError; return; } // Delete any existing sigfile when the acquire failed - string Final = _config->FindDir("Dir::State::lists") + URItoFileName(RealURI); unlink(Final.c_str()); // queue a pkgAcqMetaIndex with no sigfile @@ -532,6 +997,7 @@ void pkgAcqMetaIndex::RetrievalDone(string Message) // Move it into position Rename(DestFile,FinalFile); } + chmod(FinalFile.c_str(),0644); DestFile = FinalFile; } @@ -601,9 +1067,14 @@ void pkgAcqMetaIndex::QueueIndexes(bool verify) } } - // Queue Packages file - new pkgAcqIndex(Owner, (*Target)->URI, (*Target)->Description, - (*Target)->ShortDesc, ExpectedIndexMD5); + // Queue Packages file (either diff or full packages files, depending + // on the users option) + if(_config->FindB("Acquire::PDiffs",true) == true) + new pkgAcqDiffIndex(Owner, (*Target)->URI, (*Target)->Description, + (*Target)->ShortDesc, ExpectedIndexMD5); + else + new pkgAcqIndex(Owner, (*Target)->URI, (*Target)->Description, + (*Target)->ShortDesc, ExpectedIndexMD5); } } diff --git a/apt-pkg/acquire-item.h b/apt-pkg/acquire-item.h index da1bea801..f5272ed86 100644 --- a/apt-pkg/acquire-item.h +++ b/apt-pkg/acquire-item.h @@ -9,8 +9,8 @@ the Owner Acquire class. Derived classes will then call QueueURI to register all the URI's they wish to fetch at the initial moment. - Two item classes are provided to provide functionality for downloading - of Index files and downloading of Packages. + Three item classes are provided to provide functionality for + downloading of Index, Translation and Packages files. A Archive class is provided for downloading .deb files. It does Md5 checking and source location as well as a retry algorithm. @@ -27,71 +27,492 @@ #include <apt-pkg/pkgrecords.h> #include <apt-pkg/indexrecords.h> -#ifdef __GNUG__ -#pragma interface "apt-pkg/acquire-item.h" -#endif -// Item to acquire +/** \addtogroup acquire + * @{ + * + * \file acquire-item.h + */ + +/** \brief Represents the process by which a pkgAcquire object should + * retrieve a file or a collection of files. + * + * By convention, Item subclasses should insert themselves into the + * acquire queue when they are created by calling QueueURI(), and + * remove themselves by calling Dequeue() when either Done() or + * Failed() is invoked. Item objects are also responsible for + * notifying the download progress indicator (accessible via + * #Owner->Log) of their status. + * + * \see pkgAcquire + */ class pkgAcquire::Item { protected: - // Some private helper methods for registering URIs + /** \brief The acquire object with which this item is associated. */ pkgAcquire *Owner; + + /** \brief Insert this item into its owner's queue. + * + * \param ItemDesc Metadata about this item (its URI and + * description). + */ inline void QueueURI(ItemDesc &Item) {Owner->Enqueue(Item);}; + + /** \brief Remove this item from its owner's queue. */ inline void Dequeue() {Owner->Dequeue(this);}; - // Safe rename function with timestamp preservation + /** \brief Rename a file without modifying its timestamp. + * + * Many item methods call this as their final action. + * + * \param From The file to be renamed. + * + * \param To The new name of #From. If #To exists it will be + * overwritten. + */ void Rename(string From,string To); public: - // State of the item - enum {StatIdle, StatFetching, StatDone, StatError, StatAuthError} Status; + /** \brief The current status of this item. */ + enum ItemState + { + /** \brief The item is waiting to be downloaded. */ + StatIdle, + + /** \brief The item is currently being downloaded. */ + StatFetching, + + /** \brief The item has been successfully downloaded. */ + StatDone, + + /** \brief An error was encountered while downloading this + * item. + */ + StatError, + + /** \brief The item was downloaded but its authenticity could + * not be verified. + */ + StatAuthError, + + /** \brief The item was could not be downloaded because of + * a transient network error (e.g. network down) + */ + StatTransientNetworkError + } Status; + + /** \brief Contains a textual description of the error encountered + * if #Status is #StatError or #StatAuthError. + */ string ErrorText; + + /** \brief The size of the object to fetch. */ unsigned long FileSize; - unsigned long PartialSize; + + /** \brief How much of the object was already fetched. */ + unsigned long PartialSize; + + /** \brief If not \b NULL, contains the name of a subprocess that + * is operating on this object (for instance, "gzip" or "gpgv"). + */ const char *Mode; + + /** \brief A client-supplied unique identifier. + * + * This field is initalized to 0; it is meant to be filled in by + * clients that wish to use it to uniquely identify items. + * + * \todo it's unused in apt itself + */ unsigned long ID; + + /** \brief If \b true, the entire object has been successfully fetched. + * + * Subclasses should set this to \b true when appropriate. + */ bool Complete; + + /** \brief If \b true, the URI of this object is "local". + * + * The only effect of this field is to exclude the object from the + * download progress indicator's overall statistics. + */ bool Local; - // Number of queues we are inserted into + /** \brief The number of fetch queues into which this item has been + * inserted. + * + * There is one queue for each source from which an item could be + * downloaded. + * + * \sa pkgAcquire + */ unsigned int QueueCounter; - // File to write the fetch into + /** \brief The name of the file into which the retrieved object + * will be written. + */ string DestFile; - // Action members invoked by the worker + /** \brief Invoked by the acquire worker when the object couldn't + * be fetched. + * + * This is a branch of the continuation of the fetch process. + * + * \param Message An RFC822-formatted message from the acquire + * method describing what went wrong. Use LookupTag() to parse + * it. + * + * \param Cnf The method via which the worker tried to fetch this object. + * + * \sa pkgAcqMethod + */ virtual void Failed(string Message,pkgAcquire::MethodConfig *Cnf); + + /** \brief Invoked by the acquire worker when the object was + * fetched successfully. + * + * Note that the object might \e not have been written to + * DestFile; check for the presence of an Alt-Filename entry in + * Message to find the file to which it was really written. + * + * Done is often used to switch from one stage of the processing + * to the next (e.g. fetching, unpacking, copying). It is one + * branch of the continuation of the fetch process. + * + * \param Message Data from the acquire method. Use LookupTag() + * to parse it. + * \param Size The size of the object that was fetched. + * \param Md5Hash The MD5Sum of the object that was fetched. + * \param Cnf The method via which the object was fetched. + * + * \sa pkgAcqMethod + */ virtual void Done(string Message,unsigned long Size,string Md5Hash, pkgAcquire::MethodConfig *Cnf); + + /** \brief Invoked when the worker starts to fetch this object. + * + * \param Message RFC822-formatted data from the worker process. + * Use LookupTag() to parse it. + * + * \param Size The size of the object being fetched. + * + * \sa pkgAcqMethod + */ virtual void Start(string Message,unsigned long Size); + + /** \brief Custom headers to be sent to the fetch process. + * + * \return a string containing RFC822-style headers that are to be + * inserted into the 600 URI Acquire message sent to the fetch + * subprocess. The headers are inserted after a newline-less + * line, so they should (if nonempty) have a leading newline and + * no trailing newline. + */ virtual string Custom600Headers() {return string();}; + + /** \brief A "descriptive" URI-like string. + * + * \return a URI that should be used to describe what is being fetched. + */ virtual string DescURI() = 0; + /** \brief Short item description. + * + * \return a brief description of the object being fetched. + */ virtual string ShortDesc() {return DescURI();} + + /** \brief Invoked by the worker when the download is completely done. */ virtual void Finished() {}; - // Inquire functions + /** \brief MD5Sum. + * + * \return the MD5Sum of this object, if applicable; otherwise, an + * empty string. + */ virtual string MD5Sum() {return string();}; + + /** \return the acquire process with which this item is associated. */ pkgAcquire *GetOwner() {return Owner;}; + + /** \return \b true if this object is being fetched from a trusted source. */ virtual bool IsTrusted() {return false;}; - + + /** \brief Initialize an item. + * + * Adds the item to the list of items known to the acquire + * process, but does not place it into any fetch queues (you must + * manually invoke QueueURI() to do so). + * + * Initializes all fields of the item other than Owner to 0, + * false, or the empty string. + * + * \param Owner The new owner of this item. + */ Item(pkgAcquire *Owner); + + /** \brief Remove this item from its owner's queue by invoking + * pkgAcquire::Remove. + */ virtual ~Item(); }; -// Item class for index files -class pkgAcqIndex : public pkgAcquire::Item +/** \brief Information about an index patch (aka diff). */ +struct DiffInfo { + /** The filename of the diff. */ + string file; + + /** The sha1 hash of the diff. */ + string sha1; + + /** The size of the diff. */ + unsigned long size; +}; + +/** \brief An item that is responsible for fetching an index file of + * package list diffs and starting the package list's download. + * + * This item downloads the Index file and parses it, then enqueues + * additional downloads of either the individual patches (using + * pkgAcqIndexDiffs) or the entire Packages file (using pkgAcqIndex). + * + * \sa pkgAcqIndexDiffs, pkgAcqIndex + */ +class pkgAcqDiffIndex : public pkgAcquire::Item { + protected: + /** \brief If \b true, debugging information will be written to std::clog. */ + bool Debug; + + /** \brief The item that is currently being downloaded. */ + pkgAcquire::ItemDesc Desc; + + /** \brief The URI of the index file to recreate at our end (either + * by downloading it or by applying partial patches). + */ + string RealURI; + + /** \brief The MD5Sum that the real index file should have after + * all patches have been applied. + */ + string ExpectedMD5; + + /** \brief The index file which will be patched to generate the new + * file. + */ + string CurrentPackagesFile; + + /** \brief A description of the Packages file (stored in + * pkgAcquire::ItemDesc::Description). + */ + 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(); + + /** \brief Parse the Index file for a set of Packages diffs. + * + * Parses the Index file and creates additional download items as + * necessary. + * + * \param IndexDiffFile The name of the Index file. + * + * \return \b true if the Index file was successfully parsed, \b + * false otherwise. + */ + bool ParseDiffIndex(string IndexDiffFile); + + + /** \brief Create a new pkgAcqDiffIndex. + * + * \param Owner The Acquire object that owns this item. + * + * \param URI The URI of the list file to download. + * + * \param URIDesc A long description of the list file to download. + * + * \param ShortDesc A short description of the list file to download. + * + * \param ExpectedMD5 The list file's MD5 signature. + */ + pkgAcqDiffIndex(pkgAcquire *Owner,string URI,string URIDesc, + string ShortDesc, string ExpectedMD5); +}; + +/** \brief An item that is responsible for fetching all the patches + * that need to be applied to a given package index file. + * + * After downloading and applying a single patch, this item will + * enqueue a new pkgAcqIndexDiffs to download and apply the remaining + * patches. If no patch can be found that applies to an intermediate + * file or if one of the patches cannot be downloaded, falls back to + * downloading the entire package index file using pkgAcqIndex. + * + * \sa pkgAcqDiffIndex, pkgAcqIndex + */ +class pkgAcqIndexDiffs : public pkgAcquire::Item +{ + private: + + /** \brief Queue up the next diff download. + * + * Search for the next available diff that applies to the file + * that currently exists on disk, and enqueue it by calling + * QueueURI(). + * + * \return \b true if an applicable diff was found, \b false + * otherwise. + */ + bool QueueNextDiff(); + + /** \brief Handle tasks that must be performed after the item + * finishes downloading. + * + * Dequeues the item and checks the resulting file's md5sum + * against ExpectedMD5 after the last patch was applied. + * There is no need to check the md5/sha1 after a "normal" + * patch because QueueNextDiff() will check the sha1 later. + * + * \param allDone If \b true, the file was entirely reconstructed, + * and its md5sum is verified. + */ + void Finish(bool allDone=false); + protected: + + /** \brief If \b true, debugging output will be written to + * std::clog. + */ + bool Debug; + + /** \brief A description of the item that is currently being + * downloaded. + */ + pkgAcquire::ItemDesc Desc; + + /** \brief The URI of the package index file that is being + * reconstructed. + */ + string RealURI; + + /** \brief The MD5Sum of the package index file that is being + * reconstructed. + */ + string ExpectedMD5; + + /** A description of the file being downloaded. */ + string Description; + + /** The patches that remain to be downloaded, including the patch + * being downloaded right now. This list should be ordered so + * that each diff appears before any diff that depends on it. + * + * \todo These are indexed by sha1sum; why not use some sort of + * dictionary instead of relying on ordering and stripping them + * off the front? + */ + vector<DiffInfo> available_patches; + /** The current status of this patch. */ + enum DiffState + { + /** \brief The diff is in an unknown state. */ + StateFetchUnkown, + + /** \brief The diff is currently being fetched. */ + StateFetchDiff, + + /** \brief The diff is currently being uncompressed. */ + StateUnzipDiff, + + /** \brief The diff is currently being applied. */ + StateApplyDiff + } State; + + public: + /** \brief Called when the patch file failed to be downloaded. + * + * This method will fall back to downloading the whole index file + * outright; its arguments are ignored. + */ + 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";}; + + /** \brief Create an index diff item. + * + * After filling in its basic fields, this invokes Finish(true) if + * #diffs is empty, or QueueNextDiff() otherwise. + * + * \param Owner The pkgAcquire object that owns this item. + * + * \param URI The URI of the package index file being + * reconstructed. + * + * \param URIDesc A long description of this item. + * + * \param ShortDesc A brief description of this item. + * + * \param ExpectedMD5 The expected md5sum of the completely + * reconstructed package index file; the index file will be tested + * against this value when it is entirely reconstructed. + * + * \param diffs The remaining diffs from the index of diffs. They + * should be ordered so that each diff appears before any diff + * that depends on it. + */ + pkgAcqIndexDiffs(pkgAcquire *Owner,string URI,string URIDesc, + string ShortDesc, string ExpectedMD5, + vector<DiffInfo> diffs=vector<DiffInfo>()); +}; + +/** \brief An acquire item that is responsible for fetching an index + * file (e.g., Packages or Sources). + * + * \sa pkgAcqDiffIndex, pkgAcqIndexDiffs, pkgAcqIndexTrans + * + * \todo Why does pkgAcqIndex have protected members? + */ +class pkgAcqIndex : public pkgAcquire::Item +{ + protected: + + /** \brief If \b true, the index file has been decompressed. */ bool Decompression; + + /** \brief If \b true, the partially downloaded file will be + * removed when the download completes. + */ bool Erase; + + /** \brief The download request that is currently being + * processed. + */ pkgAcquire::ItemDesc Desc; + + /** \brief The object that is actually being fetched (minus any + * compression-related extensions). + */ string RealURI; + + /** \brief The expected md5sum of the decompressed index file. */ string ExpectedMD5; + + /** \brief The compression-related file extension that is being + * added to the downloaded file (e.g., ".gz" or ".bz2"). + */ string CompressionExtension; public: @@ -103,26 +524,120 @@ class pkgAcqIndex : public pkgAcquire::Item virtual string Custom600Headers(); virtual string DescURI() {return RealURI + CompressionExtension;}; + /** \brief Create a pkgAcqIndex. + * + * \param Owner The pkgAcquire object with which this item is + * associated. + * + * \param URI The URI of the index file that is to be downloaded. + * + * \param URIDesc A "URI-style" description of this index file. + * + * \param ShortDesc A brief description of this index file. + * + * \param ExpectedMD5 The expected md5sum of this index file. + * + * \param compressExt The compression-related extension with which + * this index file should be downloaded, or "" to autodetect + * (".bz2" is used if bzip2 is installed, ".gz" otherwise). + */ pkgAcqIndex(pkgAcquire *Owner,string URI,string URIDesc, - string ShortDesct, string ExpectedMD5, string compressExt=""); + string ShortDesc, string ExpectedMD5, string compressExt=""); +}; + +/** \brief An acquire item that is responsible for fetching a + * translated index file. + * + * The only difference from pkgAcqIndex is that transient failures + * are suppressed: no error occurs if the translated index file is + * missing. + */ +class pkgAcqIndexTrans : public pkgAcqIndex +{ + public: + + virtual void Failed(string Message,pkgAcquire::MethodConfig *Cnf); + + /** \brief Create a pkgAcqIndexTrans. + * + * \param Owner The pkgAcquire object with which this item is + * associated. + * + * \param URI The URI of the index file that is to be downloaded. + * + * \param URIDesc A "URI-style" description of this index file. + * + * \param ShortDesc A brief description of this index file. + * + * \param ExpectedMD5 The expected md5sum of this index file. + * + * \param compressExt The compression-related extension with which + * this index file should be downloaded, or "" to autodetect + * (".bz2" is used if bzip2 is installed, ".gz" otherwise). + */ + pkgAcqIndexTrans(pkgAcquire *Owner,string URI,string URIDesc, + string ShortDesc); }; +/** \brief Information about an index file. */ struct IndexTarget { + /** \brief A URI from which the index file can be downloaded. */ string URI; + + /** \brief A description of the index file. */ string Description; + + /** \brief A shorter description of the index file. */ string ShortDesc; + + /** \brief The key by which this index file should be + * looked up within the meta signature file. + */ string MetaKey; }; -// Item class for index signatures +/** \brief An acquire item that downloads the detached signature + * of a meta-index (Release) file, then queues up the release + * file itself. + * + * \todo Why protected members? + * + * \sa pkgAcqMetaIndex + */ class pkgAcqMetaSig : public pkgAcquire::Item { protected: - + /** \brief The fetch request that is currently being processed. */ pkgAcquire::ItemDesc Desc; - string RealURI,MetaIndexURI,MetaIndexURIDesc,MetaIndexShortDesc; + + /** \brief The URI of the signature file. Unlike Desc.URI, this is + * never modified; it is used to determine the file that is being + * downloaded. + */ + string RealURI; + + /** \brief The URI of the meta-index file to be fetched after the signature. */ + string MetaIndexURI; + + /** \brief A "URI-style" description of the meta-index file to be + * fetched after the signature. + */ + string MetaIndexURIDesc; + + /** \brief A brief description of the meta-index file to be fetched + * after the signature. + */ + string MetaIndexShortDesc; + + /** \brief A package-system-specific parser for the meta-index file. */ indexRecords* MetaIndexParser; + + /** \brief The index files which should be looked up in the meta-index + * and then downloaded. + * + * \todo Why a list of pointers instead of a list of structs? + */ const vector<struct IndexTarget*>* IndexTargets; public: @@ -134,29 +649,90 @@ class pkgAcqMetaSig : public pkgAcquire::Item virtual string Custom600Headers(); virtual string DescURI() {return RealURI; }; + /** \brief Create a new pkgAcqMetaSig. */ pkgAcqMetaSig(pkgAcquire *Owner,string URI,string URIDesc, string ShortDesc, string MetaIndexURI, string MetaIndexURIDesc, string MetaIndexShortDesc, const vector<struct IndexTarget*>* IndexTargets, indexRecords* MetaIndexParser); }; -// Item class for index signatures +/** \brief An item that is responsible for downloading the meta-index + * file (i.e., Release) itself and verifying its signature. + * + * Once the download and verification are complete, the downloads of + * the individual index files are queued up using pkgAcqDiffIndex. + * If the meta-index file had a valid signature, the expected md5sums + * of the index files will be the md5sums listed in the meta-index; + * otherwise, the expected md5sums will be "" (causing the + * authentication of the index files to be bypassed). + */ class pkgAcqMetaIndex : public pkgAcquire::Item { protected: - + /** \brief The fetch command that is currently being processed. */ pkgAcquire::ItemDesc Desc; - string RealURI; // FIXME: is this redundant w/ Desc.URI? + + /** \brief The URI that is actually being downloaded; never + * modified by pkgAcqMetaIndex. + */ + string RealURI; + + /** \brief The file in which the signature for this index was stored. + * + * If empty, the signature and the md5sums of the individual + * indices will not be checked. + */ string SigFile; + + /** \brief The index files to download. */ const vector<struct IndexTarget*>* IndexTargets; + + /** \brief The parser for the meta-index file. */ indexRecords* MetaIndexParser; + + /** \brief If \b true, the index's signature is currently being verified. + */ bool AuthPass; // required to deal gracefully with problems caused by incorrect ims hits bool IMSHit; + /** \brief Check that the release file is a release file for the + * correct distribution. + * + * \return \b true if no fatal errors were encountered. + */ bool VerifyVendor(string Message); + + /** \brief Called when a file is finished being retrieved. + * + * If the file was not downloaded to DestFile, a copy process is + * set up to copy it to DestFile; otherwise, Complete is set to \b + * true and the file is moved to its final location. + * + * \param Message The message block received from the fetch + * subprocess. + */ void RetrievalDone(string Message); + + /** \brief Called when authentication succeeded. + * + * Sanity-checks the authenticated file, queues up the individual + * index files for download, and saves the signature in the lists + * directory next to the authenticated list file. + * + * \param Message The message block received from the fetch + * subprocess. + */ void AuthDone(string Message); + + /** \brief Starts downloading the individual index files. + * + * \param verify If \b true, only indices whose expected md5sum + * can be determined from the meta-index will be downloaded, and + * the md5sums of indices will be checked (reporting + * #StatAuthError if there is a mismatch). If verify is \b false, + * no md5sum checking will be performed. + */ void QueueIndexes(bool verify); public: @@ -168,6 +744,7 @@ class pkgAcqMetaIndex : public pkgAcquire::Item virtual string Custom600Headers(); virtual string DescURI() {return RealURI; }; + /** \brief Create a new pkgAcqMetaIndex. */ pkgAcqMetaIndex(pkgAcquire *Owner, string URI,string URIDesc, string ShortDesc, string SigFile, @@ -175,28 +752,58 @@ class pkgAcqMetaIndex : public pkgAcquire::Item indexRecords* MetaIndexParser); }; -// Item class for archive files +/** \brief An item that is responsible for fetching a package file. + * + * If the package file already exists in the cache, nothing will be + * done. + */ class pkgAcqArchive : public pkgAcquire::Item { protected: - - // State information for the retry mechanism + /** \brief The package version being fetched. */ pkgCache::VerIterator Version; + + /** \brief The fetch command that is currently being processed. */ pkgAcquire::ItemDesc Desc; + + /** \brief The list of sources from which to pick archives to + * download this package from. + */ pkgSourceList *Sources; + + /** \brief A package records object, used to look up the file + * corresponding to each version of the package. + */ pkgRecords *Recs; + + /** \brief The md5sum of this package. */ string MD5; + + /** \brief A location in which the actual filename of the package + * should be stored. + */ string &StoreFilename; + + /** \brief The next file for this version to try to download. */ pkgCache::VerFileIterator Vf; + + /** \brief How many (more) times to try to find a new source from + * which to download this package version if it fails. + * + * Set from Acquire::Retries. + */ unsigned int Retries; + + /** \brief \b true if this version file is being downloaded from a + * trusted source. + */ bool Trusted; - // Queue the next available file for download. + /** \brief Queue up the next available file for this version. */ bool QueueNext(); 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); @@ -204,18 +811,49 @@ class pkgAcqArchive : public pkgAcquire::Item virtual string DescURI() {return Desc.URI;}; virtual string ShortDesc() {return Desc.ShortDesc;}; virtual void Finished(); + virtual bool IsTrusted(); + /** \brief Create a new pkgAcqArchive. + * + * \param Owner The pkgAcquire object with which this item is + * associated. + * + * \param Sources The sources from which to download version + * files. + * + * \param Recs A package records object, used to look up the file + * corresponding to each version of the package. + * + * \param Version The package version to download. + * + * \param StoreFilename A location in which the actual filename of + * the package should be stored. It will be set to a guessed + * basename in the constructor, and filled in with a fully + * qualified filename once the download finishes. + */ pkgAcqArchive(pkgAcquire *Owner,pkgSourceList *Sources, pkgRecords *Recs,pkgCache::VerIterator const &Version, string &StoreFilename); }; -// Fetch a generic file to the current directory +/** \brief Retrieve an arbitrary file to the current directory. + * + * The file is retrieved even if it is accessed via a URL type that + * normally is a NOP, such as "file". If the download fails, the + * partial file is renamed to get a ".FAILED" extension. + */ class pkgAcqFile : public pkgAcquire::Item { + /** \brief The currently active download process. */ pkgAcquire::ItemDesc Desc; + + /** \brief The md5sum of the file to download, if it is known. */ string Md5Hash; + + /** \brief How many times to retry the download, set from + * Acquire::Retries. + */ unsigned int Retries; public: @@ -227,13 +865,40 @@ class pkgAcqFile : public pkgAcquire::Item virtual string MD5Sum() {return Md5Hash;}; virtual string DescURI() {return Desc.URI;}; - // If DestFilename is empty, download to DestDir/<basename> if - // DestDir is non-empty, $CWD/<basename> otherwise. If - // DestFilename is NOT empty, DestDir is ignored and DestFilename - // is the absolute name to which the file should be downloaded. + /** \brief Create a new pkgAcqFile object. + * + * \param Owner The pkgAcquire object with which this object is + * associated. + * + * \param URI The URI to download. + * + * \param MD5 The md5sum of the file to download, if it is known; + * otherwise "". + * + * \param Size The size of the file to download, if it is known; + * otherwise 0. + * + * \param Desc A description of the file being downloaded. + * + * \param ShortDesc A brief description of the file being + * downloaded. + * + * \param DestDir The directory the file should be downloaded into. + * + * \param DestFilename The filename+path the file is downloaded to. + * + * + * If DestFilename is empty, download to DestDir/<basename> if + * DestDir is non-empty, $CWD/<basename> otherwise. If + * DestFilename is NOT empty, DestDir is ignored and DestFilename + * is the absolute name to which the file should be downloaded. + */ + pkgAcqFile(pkgAcquire *Owner, string URI, string MD5, unsigned long Size, string Desc, string ShortDesc, const string &DestDir="", const string &DestFilename=""); }; +/** @} */ + #endif diff --git a/apt-pkg/acquire-method.h b/apt-pkg/acquire-method.h index f46209d12..0fd846f54 100644 --- a/apt-pkg/acquire-method.h +++ b/apt-pkg/acquire-method.h @@ -10,15 +10,19 @@ ##################################################################### */ /*}}}*/ + +/** \addtogroup acquire + * @{ + * + * \file acquire-method.h + */ + #ifndef PKGLIB_ACQUIRE_METHOD_H #define PKGLIB_ACQUIRE_METHOD_H #include <apt-pkg/configuration.h> #include <apt-pkg/strutl.h> -#ifdef __GNUG__ -#pragma interface "apt-pkg/acquire-method.h" -#endif class Hashes; class pkgAcqMethod @@ -86,4 +90,6 @@ class pkgAcqMethod virtual ~pkgAcqMethod() {}; }; +/** @} */ + #endif diff --git a/apt-pkg/acquire-worker.cc b/apt-pkg/acquire-worker.cc index d06024178..8ab67778b 100644 --- a/apt-pkg/acquire-worker.cc +++ b/apt-pkg/acquire-worker.cc @@ -307,6 +307,13 @@ bool pkgAcquire::Worker::RunMessages() pkgAcquire::Item *Owner = Itm->Owner; pkgAcquire::ItemDesc Desc = *Itm; OwnerQ->ItemDone(Itm); + + // set some status + if(LookupTag(Message,"FailReason") == "Timeout" || + LookupTag(Message,"FailReason") == "TmpResolveFailure" || + LookupTag(Message,"FailReason") == "ConnectionRefused") + Owner->Status = pkgAcquire::Item::StatTransientNetworkError; + Owner->Failed(Message,Config); ItemDone(); diff --git a/apt-pkg/acquire-worker.h b/apt-pkg/acquire-worker.h index 6e1952202..2942df69f 100644 --- a/apt-pkg/acquire-worker.h +++ b/apt-pkg/acquire-worker.h @@ -9,16 +9,38 @@ ##################################################################### */ /*}}}*/ + +/** \addtogroup acquire + * @{ + * + * \file acquire-worker.h + */ + #ifndef PKGLIB_ACQUIRE_WORKER_H #define PKGLIB_ACQUIRE_WORKER_H #include <apt-pkg/acquire.h> -#ifdef __GNUG__ -#pragma interface "apt-pkg/acquire-worker.h" -#endif -// Interfacing to the method process +/** \brief A fetch subprocess. + * + * A worker process is responsible for one stage of the fetch. This + * class encapsulates the communications protocol between the master + * process and the worker, from the master end. + * + * Each worker is intrinsically placed on two linked lists. The + * Queue list (maintained in the #NextQueue variable) is maintained + * by the pkgAcquire::Queue class; it represents the set of workers + * assigned to a particular queue. The Acquire list (maintained in + * the #NextAcquire variable) is maintained by the pkgAcquire class; + * it represents the set of active workers for a particular + * pkgAcquire object. + * + * \todo Like everything else in the Acquire system, this has way too + * many protected items. + * + * \sa pkgAcqMethod, pkgAcquire::Item, pkgAcquire + */ class pkgAcquire::Worker { friend class pkgAcquire; @@ -26,64 +48,274 @@ class pkgAcquire::Worker protected: friend class Queue; - /* Linked list starting at a Queue and a linked list starting - at Acquire */ + /** \brief The next link on the Queue list. + * + * \todo This is always NULL; is it just for future use? + */ Worker *NextQueue; + + /** \brief The next link on the Acquire list. */ Worker *NextAcquire; - // The access association + /** \brief The Queue with which this worker is associated. */ Queue *OwnerQ; + + /** \brief The download progress indicator to which progress + * messages should be sent. + */ pkgAcquireStatus *Log; + + /** \brief The configuration of this method. On startup, the + * target of this pointer is filled in with basic data about the + * method, as reported by the worker. + */ MethodConfig *Config; + + /** \brief The access method to be used by this worker. + * + * \todo Doesn't this duplicate Config->Access? + */ string Access; - // This is the subprocess IPC setup + /** \brief The PID of the subprocess. */ pid_t Process; + + /** \brief A file descriptor connected to the standard output of + * the subprocess. + * + * Used to read messages and data from the subprocess. + */ int InFd; + + /** \brief A file descriptor connected to the standard input of the + * subprocess. + * + * Used to send commands and configuration data to the subprocess. + */ int OutFd; + + /** \brief Set to \b true if the worker is in a state in which it + * might generate data or command responses. + * + * \todo Is this right? It's a guess. + */ bool InReady; + + /** \brief Set to \b true if the worker is in a state in which it + * is legal to send commands to it. + * + * \todo Is this right? + */ bool OutReady; - // Various internal things + /** If \b true, debugging output will be sent to std::clog. */ bool Debug; + + /** \brief The raw text values of messages received from the + * worker, in sequence. + */ vector<string> MessageQueue; + + /** \brief Buffers pending writes to the subprocess. + * + * \todo Wouldn't a std::dequeue be more appropriate? + */ string OutQueue; - // Private constructor helper + /** \brief Common code for the constructor. + * + * Initializes NextQueue and NextAcquire to NULL; Process, InFd, + * and OutFd to -1, OutReady and InReady to \b false, and Debug + * from _config. + */ void Construct(); - // Message handling things + /** \brief Retrieve any available messages from the subprocess. + * + * The messages are retrieved as in ::ReadMessages(), and + * MessageFailure() is invoked if an error occurs; in particular, + * if the pipe to the subprocess dies unexpectedly while a message + * is being read. + * + * \return \b true if the messages were successfully read, \b + * false otherwise. + */ bool ReadMessages(); + + /** \brief Parse and dispatch pending messages. + * + * This dispatches the message in a manner appropriate for its + * type. + * + * \todo Several message types lack separate handlers. + * + * \sa Capabilities(), SendConfiguration(), MediaChange() + */ bool RunMessages(); + + /** \brief Read and dispatch any pending messages from the + * subprocess. + * + * \return \b false if the subprocess died unexpectedly while a + * message was being transmitted. + */ bool InFdReady(); + + /** \brief Send any pending commands to the subprocess. + * + * This method will fail if there is no pending output. + * + * \return \b true if all commands were succeeded, \b false if an + * error occurred (in which case MethodFailure() will be invoked). + */ bool OutFdReady(); - // The message handlers + /** \brief Handle a 100 Capabilities response from the subprocess. + * + * \param Message the raw text of the message from the subprocess. + * + * The message will be parsed and its contents used to fill + * #Config. If #Config is NULL, this routine is a NOP. + * + * \return \b true. + */ bool Capabilities(string Message); + + /** \brief Send a 601 Configuration message (containing the APT + * configuration) to the subprocess. + * + * The APT configuration will be send to the subprocess in a + * message of the following form: + * + * <pre> + * 601 Configuration + * Config-Item: Fully-Qualified-Item=Val + * Config-Item: Fully-Qualified-Item=Val + * ... + * </pre> + * + * \return \b true if the command was successfully sent, \b false + * otherwise. + */ bool SendConfiguration(); + + /** \brief Handle a 403 Media Change message. + * + * \param Message the raw text of the message; the Media field + * indicates what type of media should be changed, and the Drive + * field indicates where the media is located. + * + * Invokes pkgAcquireStatus::MediaChange(Media, Drive) to ask the + * user to swap disks; informs the subprocess of the result (via + * 603 Media Changed, with the Failed field set to \b true if the + * user cancelled the media change). + */ bool MediaChange(string Message); + /** \brief Invoked when the worked process dies unexpectedly. + * + * Waits for the subprocess to terminate and generates an error if + * it terminated abnormally, then closes and blanks out all file + * descriptors. Discards all pending messages from the + * subprocess. + * + * \return \b false. + */ bool MethodFailure(); + + /** \brief Invoked when a fetch job is completed, either + * successfully or unsuccessfully. + * + * Resets the status information for the worker process. + */ void ItemDone(); public: - // The curent method state + /** \brief The queue entry that is currently being downloaded. */ pkgAcquire::Queue::QItem *CurrentItem; + + /** \brief The most recent status string received from the + * subprocess. + */ string Status; + + /** \brief How many bytes of the file have been downloaded. Zero + * if the current progress of the file cannot be determined. + */ unsigned long CurrentSize; + + /** \brief The total number of bytes to be downloaded. Zero if the + * total size of the final is unknown. + */ unsigned long TotalSize; + + /** \brief How much of the file was already downloaded prior to + * starting this worker. + */ unsigned long ResumePoint; - // Load the method and do the startup + /** \brief Tell the subprocess to download the given item. + * + * \param Item the item to queue up. + * \return \b true if the item was successfully enqueued. + * + * Queues up a 600 URI Acquire message for the given item to be + * sent at the next possible moment. Does \e not flush the output + * queue. + */ bool QueueItem(pkgAcquire::Queue::QItem *Item); + + /** \brief Start up the worker and fill in #Config. + * + * Reads the first message from the worker, which is assumed to be + * a 100 Capabilities message. + * + * \return \b true if all operations completed successfully. + */ bool Start(); + + /** \brief Update the worker statistics (CurrentSize, TotalSize, + * etc). + */ void Pulse(); + + /** \return The fetch method configuration. */ inline const MethodConfig *GetConf() const {return Config;}; - + + /** \brief Create a new Worker to download files. + * + * \param OwnerQ The queue into which this worker should be + * placed. + * + * \param Config A location in which to store information about + * the fetch method. + * + * \param Log The download progress indicator that should be used + * to report the progress of this worker. + */ Worker(Queue *OwnerQ,MethodConfig *Config,pkgAcquireStatus *Log); + + /** \brief Create a new Worker that should just retrieve + * information about the fetch method. + * + * Nothing in particular forces you to refrain from actually + * downloading stuff, but the various status callbacks won't be + * invoked. + * + * \param Config A location in which to store information about + * the fetch method. + */ Worker(MethodConfig *Config); + + /** \brief Clean up this worker. + * + * Closes the file descriptors; if MethodConfig::NeedsCleanup is + * \b false, also rudely interrupts the worker with a SIGINT. + */ ~Worker(); }; +/** @} */ + #endif diff --git a/apt-pkg/acquire.cc b/apt-pkg/acquire.cc index fff1b2b6a..e1dccf25a 100644 --- a/apt-pkg/acquire.cc +++ b/apt-pkg/acquire.cc @@ -193,9 +193,9 @@ void pkgAcquire::Enqueue(ItemDesc &Item) Item.Owner->Status = Item::StatIdle; // Queue it into the named queue - I->Enqueue(Item); - ToFetch++; - + if(I->Enqueue(Item)) + ToFetch++; + // Some trace stuff if (Debug == true) { @@ -549,11 +549,17 @@ pkgAcquire::Queue::~Queue() // Queue::Enqueue - Queue an item to the queue /*{{{*/ // --------------------------------------------------------------------- /* */ -void pkgAcquire::Queue::Enqueue(ItemDesc &Item) +bool pkgAcquire::Queue::Enqueue(ItemDesc &Item) { QItem **I = &Items; - for (; *I != 0; I = &(*I)->Next); - + // move to the end of the queue and check for duplicates here + for (; *I != 0; I = &(*I)->Next) + if (Item.URI == (*I)->URI) + { + Item.Owner->Status = Item::StatDone; + return false; + } + // Create a new item QItem *Itm = new QItem; *Itm = Item; @@ -563,6 +569,7 @@ void pkgAcquire::Queue::Enqueue(ItemDesc &Item) Item.Owner->QueueCounter++; if (Items->Next == 0) Cycle(); + return true; } /*}}}*/ // Queue::Dequeue - Remove an item from the queue /*{{{*/ diff --git a/apt-pkg/acquire.h b/apt-pkg/acquire.h index 27bb3d363..1de6f5e44 100644 --- a/apt-pkg/acquire.h +++ b/apt-pkg/acquire.h @@ -29,6 +29,40 @@ ##################################################################### */ /*}}}*/ + +/** \defgroup acquire Acquire system + * + * \brief The Acquire system is responsible for retrieving files from + * local or remote URIs and postprocessing them (for instance, + * verifying their authenticity). The core class in this system is + * pkgAcquire, which is responsible for managing the download queues + * during the download. There is at least one download queue for + * each supported protocol; protocols such as http may provide one + * queue per host. + * + * Each file to download is represented by a subclass of + * pkgAcquire::Item. The files add themselves to the download + * queue(s) by providing their URI information to + * pkgAcquire::Item::QueueURI, which calls pkgAcquire::Enqueue. + * + * Once the system is set up, the Run method will spawn subprocesses + * to handle the enqueued URIs; the scheduler will then take items + * from the queues and feed them into the handlers until the queues + * are empty. + * + * \todo Acquire supports inserting an object into several queues at + * once, but it is not clear what its behavior in this case is, and + * no subclass of pkgAcquire::Item seems to actually use this + * capability. + */ + +/** \addtogroup acquire + * + * @{ + * + * \file acquire.h + */ + #ifndef PKGLIB_ACQUIRE_H #define PKGLIB_ACQUIRE_H @@ -38,14 +72,20 @@ using std::vector; using std::string; -#ifdef __GNUG__ -#pragma interface "apt-pkg/acquire.h" -#endif #include <sys/time.h> #include <unistd.h> class pkgAcquireStatus; + +/** \brief The core download scheduler. + * + * This class represents an ongoing download. It manages the lists + * of active and pending downloads and handles setting up and tearing + * down download-related structures. + * + * \todo Why all the protected data items and methods? + */ class pkgAcquire { public: @@ -60,97 +100,299 @@ class pkgAcquire typedef vector<Item *>::iterator ItemIterator; typedef vector<Item *>::const_iterator ItemCIterator; - + protected: - // List of items to fetch + /** \brief A list of items to download. + * + * This is built monotonically as items are created and only + * emptied when the download shuts down. + */ vector<Item *> Items; - // List of active queues and fetched method configuration parameters + /** \brief The head of the list of active queues. + * + * \todo why a hand-managed list of queues instead of std::list or + * std::set? + */ Queue *Queues; + + /** \brief The head of the list of active workers. + * + * \todo why a hand-managed list of workers instead of std::list + * or std::set? + */ Worker *Workers; + + /** \brief The head of the list of acquire method configurations. + * + * Each protocol (http, ftp, gzip, etc) via which files can be + * fetched can have a representation in this list. The + * configuration data is filled in by parsing the 100 Capabilities + * string output by a method on startup (see + * pkgAcqMethod::pkgAcqMethod and pkgAcquire::GetConfig). + * + * \todo why a hand-managed config dictionary instead of std::map? + */ MethodConfig *Configs; + + /** \brief The progress indicator for this download. */ pkgAcquireStatus *Log; + + /** \brief The total size of the files which are to be fetched. + * + * This is not necessarily the total number of bytes to download + * when, e.g., download resumption and list updates via patches + * are taken into account. + */ unsigned long ToFetch; - // Configurable parameters for the schedular - enum {QueueHost,QueueAccess} QueueMode; + // Configurable parameters for the scheduler + + /** \brief Represents the queuing strategy for remote URIs. */ + enum QueueStrategy { + /** \brief Generate one queue for each protocol/host combination; downloads from + * multiple hosts can proceed in parallel. + */ + QueueHost, + /** \brief Generate a single queue for each protocol; serialize + * downloads from multiple hosts. + */ + QueueAccess} QueueMode; + + /** \brief If \b true, debugging information will be dumped to std::clog. */ bool Debug; + /** \brief If \b true, a download is currently in progress. */ bool Running; - + + /** \brief Add the given item to the list of items. */ void Add(Item *Item); + + /** \brief Remove the given item from the list of items. */ void Remove(Item *Item); + + /** \brief Add the given worker to the list of workers. */ void Add(Worker *Work); + + /** \brief Remove the given worker from the list of workers. */ void Remove(Worker *Work); + /** \brief Insert the given fetch request into the appropriate queue. + * + * \param Item The URI to download and the item to download it + * for. Copied by value into the queue; no reference to Item is + * retained. + */ void Enqueue(ItemDesc &Item); + + /** \brief Remove all fetch requests for this item from all queues. */ void Dequeue(Item *Item); + + /** \brief Determine the fetch method and queue of a URI. + * + * \param URI The URI to fetch. + * + * \param[out] Config A location in which to place the method via + * which the URI is to be fetched. + * + * \return the string-name of the queue in which a fetch request + * for the given URI should be placed. + */ string QueueName(string URI,MethodConfig const *&Config); - // FDSET managers for derived classes + /** \brief Build up the set of file descriptors upon which select() should + * block. + * + * The default implementation inserts the file descriptors + * corresponding to active downloads. + * + * \param[out] Fd The largest file descriptor in the generated sets. + * + * \param[out] RSet The set of file descriptors that should be + * watched for input. + * + * \param[out] WSet The set of file descriptors that should be + * watched for output. + */ virtual void SetFds(int &Fd,fd_set *RSet,fd_set *WSet); + + /** Handle input from and output to file descriptors which select() + * has determined are ready. The default implementation + * dispatches to all active downloads. + * + * \param RSet The set of file descriptors that are ready for + * input. + * + * \param WSet The set of file descriptors that are ready for + * output. + */ virtual void RunFds(fd_set *RSet,fd_set *WSet); - // A queue calls this when it dequeues an item + /** \brief Check for idle queues with ready-to-fetch items. + * + * Called by pkgAcquire::Queue::Done each time an item is dequeued + * but remains on some queues; i.e., another queue should start + * fetching it. + */ void Bump(); public: + /** \brief Retrieve information about a fetch method by name. + * + * \param Access The name of the method to look up. + * + * \return the method whose name is Access, or \b NULL if no such method exists. + */ MethodConfig *GetConfig(string Access); - enum RunResult {Continue,Failed,Cancelled}; + /** \brief Provides information on how a download terminated. */ + enum RunResult { + /** \brief All files were fetched successfully. */ + Continue, + + /** \brief Some files failed to download. */ + Failed, + + /** \brief The download was cancelled by the user (i.e., #Log's + * pkgAcquireStatus::Pulse() method returned \b false). + */ + Cancelled}; + + /** \brief Download all the items that have been Add()ed to this + * download process. + * + * This method will block until the download completes, invoking + * methods on #Log to report on the progress of the download. + * + * \param PulseInterval The method pkgAcquireStatus::Pulse will be + * invoked on #Log at intervals of PulseInterval milliseconds. + * + * \return the result of the download. + */ + RunResult Run(int PulseInterval=500000); - RunResult Run(int PulseIntervall=500000); + /** \brief Remove all items from this download process, terminate + * all download workers, and empty all queues. + */ void Shutdown(); - // Simple iteration mechanism + /** \brief Get the first #Worker object. + * + * \return the first active worker in this download process. + */ inline Worker *WorkersBegin() {return Workers;}; + + /** \brief Advance to the next #Worker object. + * + * \return the worker immediately following I, or \b NULL if none + * exists. + */ Worker *WorkerStep(Worker *I); + + /** \brief Get the head of the list of items. */ inline ItemIterator ItemsBegin() {return Items.begin();}; + + /** \brief Get the end iterator of the list of items. */ inline ItemIterator ItemsEnd() {return Items.end();}; // Iterate over queued Item URIs class UriIterator; + /** \brief Get the head of the list of enqueued item URIs. + * + * This iterator will step over every element of every active + * queue. + */ UriIterator UriBegin(); + /** \brief Get the end iterator of the list of enqueued item URIs. */ UriIterator UriEnd(); - // Cleans out the download dir + /** Deletes each entry in the given directory that is not being + * downloaded by this object. For instance, when downloading new + * list files, calling Clean() will delete the old ones. + * + * \param Dir The directory to be cleaned out. + * + * \return \b true if the directory exists and is readable. + */ bool Clean(string Dir); - // Returns the size of the total download set + /** \return the total size in bytes of all the items included in + * this download. + */ double TotalNeeded(); + + /** \return the size in bytes of all non-local items included in + * this download. + */ double FetchNeeded(); + + /** \return the amount of data to be fetched that is already + * present on the filesystem. + */ double PartialPresent(); + /** \brief Construct a new pkgAcquire. + * + * \param Log The progress indicator associated with this + * download, or \b NULL for none. This object is not owned by the + * download process and will not be deleted when the pkgAcquire + * object is destroyed. Naturally, it should live for at least as + * long as the pkgAcquire object does. + */ pkgAcquire(pkgAcquireStatus *Log = 0); + + /** \brief Destroy this pkgAcquire object. + * + * Destroys all queue, method, and item objects associated with + * this download. + */ virtual ~pkgAcquire(); }; -// Description of an Item+URI +/** \brief Represents a single download source from which an item + * should be downloaded. + * + * An item may have several assocated ItemDescs over its lifetime. + */ struct pkgAcquire::ItemDesc { + /** \brief The URI from which to download this item. */ string URI; + /** brief A description of this item. */ string Description; + /** brief A shorter description of this item. */ string ShortDesc; + /** brief The underlying item which is to be downloaded. */ Item *Owner; }; -// List of possible items queued for download. +/** \brief A single download queue in a pkgAcquire object. + * + * \todo Why so many protected values? + */ class pkgAcquire::Queue { friend class pkgAcquire; friend class pkgAcquire::UriIterator; friend class pkgAcquire::Worker; + + /** \brief The next queue in the pkgAcquire object's list of queues. */ Queue *Next; protected: - // Queued item + /** \brief A single item placed in this queue. */ struct QItem : pkgAcquire::ItemDesc { - QItem *Next; + /** \brief The next item in the queue. */ + QItem *Next; + /** \brief The worker associated with this item, if any. */ pkgAcquire::Worker *Worker; - + + /** \brief Assign the ItemDesc portion of this QItem from + * another ItemDesc + */ void operator =(pkgAcquire::ItemDesc const &I) { URI = I.URI; @@ -160,45 +402,145 @@ class pkgAcquire::Queue }; }; - // Name of the queue + /** \brief The name of this queue. */ string Name; - // Items queued into this queue + /** \brief The head of the list of items contained in this queue. + * + * \todo why a by-hand list instead of an STL structure? + */ QItem *Items; + + /** \brief The head of the list of workers associated with this queue. + * + * \todo This is plural because support exists in Queue for + * multiple workers. However, it does not appear that there is + * any way to actually associate more than one worker with a + * queue. + * + * \todo Why not just use a std::set? + */ pkgAcquire::Worker *Workers; + + /** \brief the download scheduler with which this queue is associated. */ pkgAcquire *Owner; + + /** \brief The number of entries in this queue that are currently + * being downloaded. + */ signed long PipeDepth; + + /** \brief The maximum number of entries that this queue will + * attempt to download at once. + */ unsigned long MaxPipeDepth; public: - // Put an item into this queue - void Enqueue(ItemDesc &Item); + /** \brief Insert the given fetch request into this queue. + * + * \return \b true if the queuing was successful. May return + * \b false if the Item is already in the queue + */ + bool Enqueue(ItemDesc &Item); + + /** \brief Remove all fetch requests for the given item from this queue. + * + * \return \b true if at least one request was removed from the queue. + */ bool Dequeue(Item *Owner); - // Find a Queued item + /** \brief Locate an item in this queue. + * + * \param URI A URI to match against. + * \param Owner A pkgAcquire::Worker to match against. + * + * \return the first item in the queue whose URI is #URI and that + * is being downloaded by #Owner. + */ QItem *FindItem(string URI,pkgAcquire::Worker *Owner); + + /** Presumably this should start downloading an item? + * + * \todo Unimplemented. Implement it or remove? + */ bool ItemStart(QItem *Itm,unsigned long Size); + + /** \brief Remove the given item from this queue and set its state + * to pkgAcquire::Item::StatDone. + * + * If this is the only queue containing the item, the item is also + * removed from the main queue by calling pkgAcquire::Dequeue. + * + * \param Itm The item to remove. + * + * \return \b true if no errors are encountered. + */ bool ItemDone(QItem *Itm); + /** \brief Start the worker process associated with this queue. + * + * If a worker process is already associated with this queue, + * this is equivalent to calling Cycle(). + * + * \return \b true if the startup was successful. + */ bool Startup(); + + /** \brief Shut down the worker process associated with this queue. + * + * \param Final If \b true, then the process is stopped unconditionally. + * Otherwise, it is only stopped if it does not need cleanup + * as indicated by the pkgAcqMethod::NeedsCleanup member of + * its configuration. + * + * \return \b true. + */ bool Shutdown(bool Final); + + /** \brief Send idle items to the worker process. + * + * Fills up the pipeline by inserting idle items into the worker's queue. + */ bool Cycle(); + + /** \brief Check for items that could be enqueued. + * + * Call this after an item placed in multiple queues has gone from + * the pkgAcquire::Item::StatFetching state to the + * pkgAcquire::Item::StatIdle state, to possibly refill an empty queue. + * This is an alias for Cycle(). + * + * \todo Why both this and Cycle()? Are they expected to be + * different someday? + */ void Bump(); + /** \brief Create a new Queue. + * + * \param Name The name of the new queue. + * \param Owner The download process that owns the new queue. + */ Queue(string Name,pkgAcquire *Owner); + + /** Shut down all the worker processes associated with this queue + * and empty the queue. + */ ~Queue(); }; +/** \brief Iterates over all the URIs being fetched by a pkgAcquire object. */ class pkgAcquire::UriIterator { + /** The next queue to iterate over. */ pkgAcquire::Queue *CurQ; + /** The item that we currently point at. */ pkgAcquire::Queue::QItem *CurItem; public: - // Advance to the next item inline void operator ++() {operator ++();}; + void operator ++(int) { CurItem = CurItem->Next; @@ -209,11 +551,14 @@ class pkgAcquire::UriIterator } }; - // Accessors inline pkgAcquire::ItemDesc const *operator ->() const {return CurItem;}; inline bool operator !=(UriIterator const &rhs) const {return rhs.CurQ != CurQ || rhs.CurItem != CurItem;}; inline bool operator ==(UriIterator const &rhs) const {return rhs.CurQ == CurQ && rhs.CurItem == CurItem;}; + /** \brief Create a new UriIterator. + * + * \param Q The queue over which this UriIterator should iterate. + */ UriIterator(pkgAcquire::Queue *Q) : CurQ(Q), CurItem(0) { while (CurItem == 0 && CurQ != 0) @@ -224,61 +569,200 @@ class pkgAcquire::UriIterator } }; -// Configuration information from each method +/** \brief Information about the properties of a single acquire method. */ struct pkgAcquire::MethodConfig { + /** \brief The next link on the acquire method list. + * + * \todo Why not an STL container? + */ MethodConfig *Next; + /** \brief The name of this acquire method (e.g., http). */ string Access; + /** \brief The implementation version of this acquire method. */ string Version; + + /** \brief If \b true, only one download queue should be created for this + * method. + */ bool SingleInstance; + + /** \brief If \b true, this method supports pipelined downloading. */ bool Pipeline; + + /** \brief If \b true, the worker process should send the entire + * APT configuration tree to the fetch subprocess when it starts + * up. + */ bool SendConfig; + + /** \brief If \b true, this fetch method does not require network access; + * all files are to be acquired from the local disk. + */ bool LocalOnly; + + /** \brief If \b true, the subprocess has to carry out some cleanup + * actions before shutting down. + * + * For instance, the cdrom method needs to unmount the CD after it + * finishes. + */ bool NeedsCleanup; + + /** \brief If \b true, this fetch method acquires files from removable media. */ bool Removable; + /** \brief Set up the default method parameters. + * + * All fields are initialized to NULL, "", or \b false as + * appropriate. + */ MethodConfig(); }; +/** \brief A monitor object for downloads controlled by the pkgAcquire class. + * + * \todo Why protected members? + * + * \todo Should the double members be uint64_t? + */ class pkgAcquireStatus { protected: + /** \brief The last time at which this monitor object was updated. */ struct timeval Time; + + /** \brief The time at which the download started. */ struct timeval StartTime; + + /** \brief The number of bytes fetched as of the previous call to + * pkgAcquireStatus::Pulse, including local items. + */ double LastBytes; + + /** \brief The current rate of download as of the most recent call + * to pkgAcquireStatus::Pulse, in bytes per second. + */ double CurrentCPS; + + /** \brief The number of bytes fetched as of the most recent call + * to pkgAcquireStatus::Pulse, including local items. + */ double CurrentBytes; + + /** \brief The total number of bytes that need to be fetched. + * + * \warning This member is inaccurate, as new items might be + * enqueued while the download is in progress! + */ double TotalBytes; + + /** \brief The total number of bytes accounted for by items that + * were successfully fetched. + */ double FetchedBytes; + + /** \brief The amount of time that has elapsed since the download + * started. + */ unsigned long ElapsedTime; + + /** \brief The total number of items that need to be fetched. + * + * \warning This member is inaccurate, as new items might be + * enqueued while the download is in progress! + */ unsigned long TotalItems; + + /** \brief The number of items that have been successfully downloaded. */ unsigned long CurrentItems; public: + /** \brief If \b true, the download scheduler should call Pulse() + * at the next available opportunity. + */ bool Update; + + /** \brief If \b true, extra Pulse() invocations will be performed. + * + * With this option set, Pulse() will be called every time that a + * download item starts downloading, finishes downloading, or + * terminates with an error. + */ bool MorePulses; - // Called by items when they have finished a real download + /** \brief Invoked when a local or remote file has been completely fetched. + * + * \param Size The size of the file fetched. + * + * \param ResumePoint How much of the file was already fetched. + */ virtual void Fetched(unsigned long Size,unsigned long ResumePoint); - // Called to change media + /** \brief Invoked when the user should be prompted to change the + * inserted removable media. + * + * This method should not return until the user has confirmed to + * the user interface that the media change is complete. + * + * \param Media The name of the media type that should be changed. + * + * \param Drive The identifying name of the drive whose media + * should be changed. + * + * \return \b true if the user confirms the media change, \b + * false if it is cancelled. + * + * \todo This is a horrible blocking monster; it should be CPSed + * with prejudice. + */ virtual bool MediaChange(string Media,string Drive) = 0; - // Each of these is called by the workers when an event occures + /** \brief Invoked when an item is confirmed to be up-to-date. + + * For instance, when an HTTP download is informed that the file on + * the server was not modified. + */ virtual void IMSHit(pkgAcquire::ItemDesc &/*Itm*/) {}; + + /** \brief Invoked when some of an item's data is fetched. */ virtual void Fetch(pkgAcquire::ItemDesc &/*Itm*/) {}; + + /** \brief Invoked when an item is successfully and completely fetched. */ virtual void Done(pkgAcquire::ItemDesc &/*Itm*/) {}; + + /** \brief Invoked when the process of fetching an item encounters + * a fatal error. + */ virtual void Fail(pkgAcquire::ItemDesc &/*Itm*/) {}; - virtual bool Pulse(pkgAcquire *Owner); // returns false on user cancel + + /** \brief Periodically invoked while the Acquire process is underway. + * + * Subclasses should first call pkgAcquireStatus::Pulse(), then + * update their status output. The download process is blocked + * while Pulse() is being called. + * + * \return \b false if the user asked to cancel the whole Acquire process. + * + * \see pkgAcquire::Run + */ + virtual bool Pulse(pkgAcquire *Owner); + + /** \brief Invoked when the Acquire process starts running. */ virtual void Start(); + + /** \brief Invoked when the Acquire process stops running. */ virtual void Stop(); + /** \brief Initialize all counters to 0 and the time to the current time. */ pkgAcquireStatus(); virtual ~pkgAcquireStatus() {}; }; +/** @} */ + #endif diff --git a/apt-pkg/algorithms.cc b/apt-pkg/algorithms.cc index 0d486d102..bd8147291 100644 --- a/apt-pkg/algorithms.cc +++ b/apt-pkg/algorithms.cc @@ -20,10 +20,12 @@ #include <apt-pkg/algorithms.h> #include <apt-pkg/error.h> #include <apt-pkg/configuration.h> +#include <apt-pkg/version.h> #include <apt-pkg/sptr.h> + #include <apti18n.h> - +#include <sys/types.h> #include <iostream> /*}}}*/ using namespace std; @@ -100,6 +102,7 @@ bool pkgSimulate::Install(PkgIterator iPkg,string /*File*/) DepIterator End; D.GlobOr(Start,End); if (Start->Type == pkgCache::Dep::Conflicts || + Start->Type == pkgCache::Dep::DpkgBreaks || Start->Type == pkgCache::Dep::Obsoletes || End->Type == pkgCache::Dep::PreDepends) { @@ -149,6 +152,8 @@ bool pkgSimulate::Configure(PkgIterator iPkg) cout << " Obsoletes:" << D.TargetPkg().Name(); else if (D->Type == pkgCache::Dep::Conflicts) cout << " Conflicts:" << D.TargetPkg().Name(); + else if (D->Type == pkgCache::Dep::DpkgBreaks) + cout << " Breaks:" << D.TargetPkg().Name(); else cout << " Depends:" << D.TargetPkg().Name(); } @@ -220,6 +225,8 @@ void pkgSimulate::ShortBreaks() the necessary calculations to deal with the problems. */ bool pkgApplyStatus(pkgDepCache &Cache) { + pkgDepCache::ActionGroup group(Cache); + for (pkgCache::PkgIterator I = Cache.PkgBegin(); I.end() == false; I++) { if (I->VersionList == 0) @@ -230,13 +237,13 @@ bool pkgApplyStatus(pkgDepCache &Cache) I->InstState == pkgCache::State::HoldReInstReq) { if (I->CurrentVer != 0 && I.CurrentVer().Downloadable() == true) - Cache.MarkKeep(I); + Cache.MarkKeep(I, false, false); else { // Is this right? Will dpkg choke on an upgrade? if (Cache[I].CandidateVer != 0 && Cache[I].CandidateVerIter(Cache).Downloadable() == true) - Cache.MarkInstall(I); + Cache.MarkInstall(I, false, 0, false); else return _error->Error(_("The package %s needs to be reinstalled, " "but I can't find an archive for it."),I.Name()); @@ -253,12 +260,12 @@ bool pkgApplyStatus(pkgDepCache &Cache) case pkgCache::State::HalfConfigured: if ((I->CurrentVer != 0 && I.CurrentVer().Downloadable() == true) || I.State() != pkgCache::PkgIterator::NeedsUnpack) - Cache.MarkKeep(I); + Cache.MarkKeep(I, false, false); else { if (Cache[I].CandidateVer != 0 && Cache[I].CandidateVerIter(Cache).Downloadable() == true) - Cache.MarkInstall(I); + Cache.MarkInstall(I, true, 0, false); else Cache.MarkDelete(I); } @@ -284,10 +291,12 @@ bool pkgApplyStatus(pkgDepCache &Cache) on the result. */ bool pkgFixBroken(pkgDepCache &Cache) { + pkgDepCache::ActionGroup group(Cache); + // Auto upgrade all broken packages for (pkgCache::PkgIterator I = Cache.PkgBegin(); I.end() == false; I++) if (Cache[I].NowBroken() == true) - Cache.MarkInstall(I,true); + Cache.MarkInstall(I, true, 0, false); /* Fix packages that are in a NeedArchive state but don't have a downloadable install version */ @@ -300,7 +309,7 @@ bool pkgFixBroken(pkgDepCache &Cache) if (Cache[I].InstVerIter(Cache).Downloadable() == false) continue; - Cache.MarkInstall(I,true); + Cache.MarkInstall(I, true, 0, false); } pkgProblemResolver Fix(&Cache); @@ -317,23 +326,25 @@ bool pkgFixBroken(pkgDepCache &Cache) */ bool pkgDistUpgrade(pkgDepCache &Cache) { + pkgDepCache::ActionGroup group(Cache); + /* Auto upgrade all installed packages, this provides the basis for the installation */ for (pkgCache::PkgIterator I = Cache.PkgBegin(); I.end() == false; I++) if (I->CurrentVer != 0) - Cache.MarkInstall(I,true); + Cache.MarkInstall(I, true, 0, false); /* Now, auto upgrade all essential packages - this ensures that the essential packages are present and working */ for (pkgCache::PkgIterator I = Cache.PkgBegin(); I.end() == false; I++) if ((I->Flags & pkgCache::Flag::Essential) == pkgCache::Flag::Essential) - Cache.MarkInstall(I,true); + Cache.MarkInstall(I, true, 0, false); /* We do it again over all previously installed packages to force conflict resolution on them all. */ for (pkgCache::PkgIterator I = Cache.PkgBegin(); I.end() == false; I++) if (I->CurrentVer != 0) - Cache.MarkInstall(I,false); + Cache.MarkInstall(I, false, 0, false); pkgProblemResolver Fix(&Cache); @@ -345,7 +356,7 @@ bool pkgDistUpgrade(pkgDepCache &Cache) if (I->SelectedState == pkgCache::State::Hold) { Fix.Protect(I); - Cache.MarkKeep(I); + Cache.MarkKeep(I, false, false); } } } @@ -360,6 +371,8 @@ bool pkgDistUpgrade(pkgDepCache &Cache) to install packages not marked for install */ bool pkgAllUpgrade(pkgDepCache &Cache) { + pkgDepCache::ActionGroup group(Cache); + pkgProblemResolver Fix(&Cache); if (Cache.BrokenCount() != 0) @@ -376,7 +389,7 @@ bool pkgAllUpgrade(pkgDepCache &Cache) continue; if (I->CurrentVer != 0 && Cache[I].InstallVer != 0) - Cache.MarkInstall(I,false); + Cache.MarkInstall(I, false, 0, false); } return Fix.ResolveByKeep(); @@ -389,6 +402,8 @@ bool pkgAllUpgrade(pkgDepCache &Cache) the package is restored. */ bool pkgMinimizeUpgrade(pkgDepCache &Cache) { + pkgDepCache::ActionGroup group(Cache); + if (Cache.BrokenCount() != 0) return false; @@ -405,9 +420,9 @@ bool pkgMinimizeUpgrade(pkgDepCache &Cache) continue; // Keep it and see if that is OK - Cache.MarkKeep(I); + Cache.MarkKeep(I, false, false); if (Cache.BrokenCount() != 0) - Cache.MarkInstall(I,false); + Cache.MarkInstall(I, false, 0, false); else { // If keep didnt actually do anything then there was no change.. @@ -497,7 +512,7 @@ void pkgProblemResolver::MakeScores() on the same level. We enhance the score of installed packages if those are not obsolete */ - if (I->CurrentVer != 0 && Cache[I].CandidateVerIter(Cache).Downloadable()) + if (I->CurrentVer != 0 && Cache[I].CandidateVer != 0 && Cache[I].CandidateVerIter(Cache).Downloadable()) Score += 1; } @@ -567,6 +582,8 @@ void pkgProblemResolver::MakeScores() installable */ bool pkgProblemResolver::DoUpgrade(pkgCache::PkgIterator Pkg) { + pkgDepCache::ActionGroup group(Cache); + if ((Flags[Pkg->ID] & Upgradable) == 0 || Cache[Pkg].Upgradable() == false) return false; if ((Flags[Pkg->ID] & Protected) == Protected) @@ -575,7 +592,7 @@ bool pkgProblemResolver::DoUpgrade(pkgCache::PkgIterator Pkg) Flags[Pkg->ID] &= ~Upgradable; bool WasKept = Cache[Pkg].Keep(); - Cache.MarkInstall(Pkg,false); + Cache.MarkInstall(Pkg, false, 0, false); // This must be a virtual package or something like that. if (Cache[Pkg].InstVerIter(Cache).end() == true) @@ -639,6 +656,7 @@ bool pkgProblemResolver::DoUpgrade(pkgCache::PkgIterator Pkg) /* We let the algorithm deal with conflicts on its next iteration, it is much smarter than us */ if (Start->Type == pkgCache::Dep::Conflicts || + Start->Type == pkgCache::Dep::DpkgBreaks || Start->Type == pkgCache::Dep::Obsoletes) break; @@ -660,7 +678,7 @@ bool pkgProblemResolver::DoUpgrade(pkgCache::PkgIterator Pkg) if (Fail == true) { if (WasKept == true) - Cache.MarkKeep(Pkg); + Cache.MarkKeep(Pkg, false, false); else Cache.MarkDelete(Pkg); return false; @@ -687,6 +705,8 @@ bool pkgProblemResolver::DoUpgrade(pkgCache::PkgIterator Pkg) upgrade packages to advoid problems. */ bool pkgProblemResolver::Resolve(bool BrokenFix) { + pkgDepCache::ActionGroup group(Cache); + unsigned long Size = Cache.Head().PackageCount; // Record which packages are marked for install @@ -702,7 +722,7 @@ bool pkgProblemResolver::Resolve(bool BrokenFix) { if (Cache[I].InstBroken() == true && BrokenFix == true) { - Cache.MarkInstall(I,false); + Cache.MarkInstall(I, false, 0, false); if (Cache[I].Install() == true) Again = true; } @@ -768,14 +788,14 @@ bool pkgProblemResolver::Resolve(bool BrokenFix) pkgCache::Version *OldVer = Cache[I].InstallVer; Flags[I->ID] &= ReInstateTried; - Cache.MarkInstall(I,false); + Cache.MarkInstall(I, false, 0, false); if (Cache[I].InstBroken() == true || OldBreaks < Cache.BrokenCount()) { if (OldVer == 0) Cache.MarkDelete(I); else - Cache.MarkKeep(I); + Cache.MarkKeep(I, false, false); } else if (Debug == true) @@ -820,7 +840,7 @@ bool pkgProblemResolver::Resolve(bool BrokenFix) { if (Debug == true) clog << " Or group keep for " << I.Name() << endl; - Cache.MarkKeep(I); + Cache.MarkKeep(I, false, false); Change = true; } } @@ -841,7 +861,12 @@ bool pkgProblemResolver::Resolve(bool BrokenFix) OldEnd = LEnd; } else + { Start++; + // We only worry about critical deps. + if (Start.IsCritical() != true) + continue; + } // Dep is ok if ((Cache[End] & pkgDepCache::DepGInstall) == pkgDepCache::DepGInstall) @@ -859,6 +884,7 @@ bool pkgProblemResolver::Resolve(bool BrokenFix) SPtrArray<pkgCache::Version *> VList = Start.AllTargets(); if (*VList == 0 && (Flags[I->ID] & Protected) != Protected && Start->Type != pkgCache::Dep::Conflicts && + Start->Type != pkgCache::Dep::DpkgBreaks && Start->Type != pkgCache::Dep::Obsoletes && Cache[I].NowBroken() == false) { @@ -870,7 +896,7 @@ bool pkgProblemResolver::Resolve(bool BrokenFix) } Change = true; - Cache.MarkKeep(I); + Cache.MarkKeep(I, false, false); break; } @@ -889,6 +915,7 @@ bool pkgProblemResolver::Resolve(bool BrokenFix) if (Scores[I->ID] <= Scores[Pkg->ID] || ((Cache[Start] & pkgDepCache::DepNow) == 0 && End->Type != pkgCache::Dep::Conflicts && + End->Type != pkgCache::Dep::DpkgBreaks && End->Type != pkgCache::Dep::Obsoletes)) { // Try a little harder to fix protected packages.. @@ -907,7 +934,7 @@ bool pkgProblemResolver::Resolve(bool BrokenFix) /* See if a keep will do, unless the package is protected, then installing it will be necessary */ bool Installed = Cache[I].Install(); - Cache.MarkKeep(I); + Cache.MarkKeep(I, false, false); if (Cache[I].InstBroken() == false) { // Unwind operation will be keep now @@ -916,7 +943,7 @@ bool pkgProblemResolver::Resolve(bool BrokenFix) // Restore if (InOr == true && Installed == true) - Cache.MarkInstall(I,false); + Cache.MarkInstall(I, false, 0, false); if (Debug == true) clog << " Holding Back " << I.Name() << " rather than change " << Start.TargetPkg().Name() << endl; @@ -954,7 +981,22 @@ bool pkgProblemResolver::Resolve(bool BrokenFix) (Start->Type == pkgCache::Dep::Conflicts || Start->Type == pkgCache::Dep::Obsoletes)) continue; - + + if (Start->Type == pkgCache::Dep::DpkgBreaks) + { + /* Would it help if we upgraded? */ + if (Cache[End] & pkgDepCache::DepGCVer) { + if (Debug) + clog << " Upgrading " << Pkg.Name() << " due to Breaks field in " << I.Name() << endl; + Cache.MarkInstall(Pkg, false, 0, false); + continue; + } + if (Debug) + clog << " Will not break " << Pkg.Name() << " as stated in Breaks field in " << I.Name() <<endl; + Cache.MarkKeep(I, false, false); + continue; + } + // Skip adding to the kill list if it is protected if ((Flags[Pkg->ID] & Protected) != 0) continue; @@ -975,6 +1017,7 @@ bool pkgProblemResolver::Resolve(bool BrokenFix) // Hm, nothing can possibly satisify this dep. Nuke it. if (VList[0] == 0 && Start->Type != pkgCache::Dep::Conflicts && + Start->Type != pkgCache::Dep::DpkgBreaks && Start->Type != pkgCache::Dep::Obsoletes && (Flags[I->ID] & Protected) != Protected) { @@ -988,7 +1031,7 @@ bool pkgProblemResolver::Resolve(bool BrokenFix) // Restore if (InOr == true && Installed == true) - Cache.MarkInstall(I,false); + Cache.MarkInstall(I, false, 0, false); if (Debug == true) clog << " Holding Back " << I.Name() << " because I can't find " << Start.TargetPkg().Name() << endl; @@ -1033,7 +1076,7 @@ bool pkgProblemResolver::Resolve(bool BrokenFix) { if (Debug == true) clog << " Fixing " << I.Name() << " via keep of " << J->Pkg.Name() << endl; - Cache.MarkKeep(J->Pkg); + Cache.MarkKeep(J->Pkg, false, false); } if (Counter > 1) @@ -1063,6 +1106,20 @@ bool pkgProblemResolver::Resolve(bool BrokenFix) return _error->Error(_("Unable to correct problems, you have held broken packages.")); } + // set the auto-flags (mvo: I'm not sure if we _really_ need this, but + // I didn't managed + pkgCache::PkgIterator I = Cache.PkgBegin(); + for (;I.end() != true; I++) { + if (Cache[I].NewInstall() && !(Flags[I->ID] & PreInstalled)) { + if(_config->FindI("Debug::pkgAutoRemove",false)) { + std::clog << "Resolve installed new pkg: " << I.Name() + << " (now marking it as auto)" << std::endl; + } + Cache[I].Flags |= pkgCache::Flag::Auto; + } + } + + return true; } /*}}}*/ @@ -1073,6 +1130,8 @@ bool pkgProblemResolver::Resolve(bool BrokenFix) system was non-broken previously. */ bool pkgProblemResolver::ResolveByKeep() { + pkgDepCache::ActionGroup group(Cache); + unsigned long Size = Cache.Head().PackageCount; if (Debug == true) @@ -1106,7 +1165,7 @@ bool pkgProblemResolver::ResolveByKeep() { if (Debug == true) clog << "Keeping package " << I.Name() << endl; - Cache.MarkKeep(I); + Cache.MarkKeep(I, false, false); if (Cache[I].InstBroken() == false) { K = PList - 1; @@ -1154,7 +1213,7 @@ bool pkgProblemResolver::ResolveByKeep() { if (Debug == true) clog << " Keeping Package " << Pkg.Name() << " due to dep" << endl; - Cache.MarkKeep(Pkg); + Cache.MarkKeep(Pkg, false, false); } if (Cache[I].InstBroken() == false) @@ -1191,14 +1250,21 @@ bool pkgProblemResolver::ResolveByKeep() /* This is used to make sure protected packages are installed */ void pkgProblemResolver::InstallProtect() { + pkgDepCache::ActionGroup group(Cache); + for (pkgCache::PkgIterator I = Cache.PkgBegin(); I.end() == false; I++) { if ((Flags[I->ID] & Protected) == Protected) { if ((Flags[I->ID] & ToRemove) == ToRemove) Cache.MarkDelete(I); - else - Cache.MarkInstall(I,false); + else + { + // preserver the information if the package was auto + // or manual installed + bool autoInst = (Cache[I].Flags & pkgCache::Flag::Auto); + Cache.MarkInstall(I, false, 0, !autoInst); + } } } } @@ -1234,3 +1300,4 @@ void pkgPrioSortList(pkgCache &Cache,pkgCache::Version **List) qsort(List,Count,sizeof(*List),PrioComp); } /*}}}*/ + diff --git a/apt-pkg/algorithms.h b/apt-pkg/algorithms.h index b95218061..b72874d8e 100644 --- a/apt-pkg/algorithms.h +++ b/apt-pkg/algorithms.h @@ -30,9 +30,6 @@ #ifndef PKGLIB_ALGORITHMS_H #define PKGLIB_ALGORITHMS_H -#ifdef __GNUG__ -#pragma interface "apt-pkg/algorithms.h" -#endif #include <apt-pkg/packagemanager.h> #include <apt-pkg/depcache.h> diff --git a/apt-pkg/cachefile.h b/apt-pkg/cachefile.h index a128c29ab..d23841e5e 100644 --- a/apt-pkg/cachefile.h +++ b/apt-pkg/cachefile.h @@ -17,9 +17,6 @@ #ifndef PKGLIB_CACHEFILE_H #define PKGLIB_CACHEFILE_H -#ifdef __GNUG__ -#pragma interface "apt-pkg/cachefile.h" -#endif #include <apt-pkg/depcache.h> diff --git a/apt-pkg/cacheiterators.h b/apt-pkg/cacheiterators.h index 2b326bd65..08eafca0f 100644 --- a/apt-pkg/cacheiterators.h +++ b/apt-pkg/cacheiterators.h @@ -31,9 +31,6 @@ #ifndef PKGLIB_CACHEITERATORS_H #define PKGLIB_CACHEITERATORS_H -#ifdef __GNUG__ -#pragma interface "apt-pkg/cacheiterators.h" -#endif // Package Iterator class pkgCache::PkgIterator @@ -99,7 +96,7 @@ class pkgCache::VerIterator { Version *Ver; pkgCache *Owner; - + void _dummy(); public: @@ -128,6 +125,8 @@ class pkgCache::VerIterator inline const char *Section() const {return Ver->Section == 0?0:Owner->StrP + Ver->Section;}; inline const char *Arch() const {return Ver->Arch == 0?0:Owner->StrP + Ver->Arch;}; inline PkgIterator ParentPkg() const {return PkgIterator(*Owner,Owner->PkgP + Ver->ParentPkg);}; + inline DescIterator DescriptionList() const; + DescIterator TranslatedDescription() const; inline DepIterator DependsList() const; inline PrvIterator ProvidesList() const; inline VerFileIterator FileList() const; @@ -148,6 +147,50 @@ class pkgCache::VerIterator }; }; +// Description Iterator +class pkgCache::DescIterator +{ + Description *Desc; + pkgCache *Owner; + + void _dummy(); + + public: + + // Iteration + void operator ++(int) {if (Desc != Owner->DescP) Desc = Owner->DescP + Desc->NextDesc;}; + inline void operator ++() {operator ++(0);}; + inline bool end() const {return Desc == Owner->DescP?true:false;}; + inline void operator =(const DescIterator &B) {Desc = B.Desc; Owner = B.Owner;}; + + // Comparison + inline bool operator ==(const DescIterator &B) const {return Desc == B.Desc;}; + inline bool operator !=(const DescIterator &B) const {return Desc != B.Desc;}; + int CompareDesc(const DescIterator &B) const; + + // Accessors + inline Description *operator ->() {return Desc;}; + inline Description const *operator ->() const {return Desc;}; + inline Description &operator *() {return *Desc;}; + inline Description const &operator *() const {return *Desc;}; + inline operator Description *() {return Desc == Owner->DescP?0:Desc;}; + inline operator Description const *() const {return Desc == Owner->DescP?0:Desc;}; + inline pkgCache *Cache() {return Owner;}; + + inline const char *LanguageCode() const {return Owner->StrP + Desc->language_code;}; + inline const char *md5() const {return Owner->StrP + Desc->md5sum;}; + inline DescFileIterator FileList() const; + inline unsigned long Index() const {return Desc - Owner->DescP;}; + + inline DescIterator() : Desc(0), Owner(0) {}; + inline DescIterator(pkgCache &Owner,Description *Trg = 0) : Desc(Trg), + Owner(&Owner) + { + if (Desc == 0) + Desc = Owner.DescP; + }; +}; + // Dependency iterator class pkgCache::DepIterator { @@ -338,6 +381,38 @@ class pkgCache::VerFileIterator inline VerFileIterator(pkgCache &Owner,VerFile *Trg) : Owner(&Owner), FileP(Trg) {}; }; +// Description File +class pkgCache::DescFileIterator +{ + pkgCache *Owner; + DescFile *FileP; + + public: + + // Iteration + void operator ++(int) {if (FileP != Owner->DescFileP) FileP = Owner->DescFileP + FileP->NextFile;}; + inline void operator ++() {operator ++(0);}; + inline bool end() const {return FileP == Owner->DescFileP?true:false;}; + + // Comparison + inline bool operator ==(const DescFileIterator &B) const {return FileP == B.FileP;}; + inline bool operator !=(const DescFileIterator &B) const {return FileP != B.FileP;}; + + // Accessors + inline DescFile *operator ->() {return FileP;}; + inline DescFile const *operator ->() const {return FileP;}; + inline DescFile const &operator *() const {return *FileP;}; + inline operator DescFile *() {return FileP == Owner->DescFileP?0:FileP;}; + inline operator DescFile const *() const {return FileP == Owner->DescFileP?0:FileP;}; + inline pkgCache *Cache() {return Owner;}; + + inline PkgFileIterator File() const {return PkgFileIterator(*Owner,FileP->File + Owner->PkgFileP);}; + inline unsigned long Index() const {return FileP - Owner->DescFileP;}; + + inline DescFileIterator() : Owner(0), FileP(0) {}; + inline DescFileIterator(pkgCache &Owner,DescFile *Trg) : Owner(&Owner), FileP(Trg) {}; +}; + // Inlined Begin functions cant be in the class because of order problems inline pkgCache::VerIterator pkgCache::PkgIterator::VersionList() const {return VerIterator(*Owner,Owner->VerP + Pkg->VersionList);}; @@ -347,11 +422,15 @@ inline pkgCache::DepIterator pkgCache::PkgIterator::RevDependsList() const {return DepIterator(*Owner,Owner->DepP + Pkg->RevDepends,Pkg);}; inline pkgCache::PrvIterator pkgCache::PkgIterator::ProvidesList() const {return PrvIterator(*Owner,Owner->ProvideP + Pkg->ProvidesList,Pkg);}; +inline pkgCache::DescIterator pkgCache::VerIterator::DescriptionList() const + {return DescIterator(*Owner,Owner->DescP + Ver->DescriptionList);}; inline pkgCache::PrvIterator pkgCache::VerIterator::ProvidesList() const {return PrvIterator(*Owner,Owner->ProvideP + Ver->ProvidesList,Ver);}; inline pkgCache::DepIterator pkgCache::VerIterator::DependsList() const {return DepIterator(*Owner,Owner->DepP + Ver->DependsList,Ver);}; inline pkgCache::VerFileIterator pkgCache::VerIterator::FileList() const {return VerFileIterator(*Owner,Owner->VerFileP + Ver->FileList);}; +inline pkgCache::DescFileIterator pkgCache::DescIterator::FileList() const + {return DescFileIterator(*Owner,Owner->DescFileP + Desc->FileList);}; #endif diff --git a/apt-pkg/cdrom.cc b/apt-pkg/cdrom.cc index ce1beb39b..aefe9c9e9 100644 --- a/apt-pkg/cdrom.cc +++ b/apt-pkg/cdrom.cc @@ -30,12 +30,16 @@ using namespace std; search that short circuits when it his a package file in the dir. This speeds it up greatly as the majority of the size is in the binary-* sub dirs. */ -bool pkgCdrom::FindPackages(string CD,vector<string> &List, - vector<string> &SList, vector<string> &SigList, +bool pkgCdrom::FindPackages(string CD, + vector<string> &List, + vector<string> &SList, + vector<string> &SigList, + vector<string> &TransList, string &InfoDir, pkgCdromStatus *log, unsigned int Depth) { static ino_t Inodes[9]; + DIR *D; // if we have a look we "pulse" now if(log) @@ -90,8 +94,28 @@ bool pkgCdrom::FindPackages(string CD,vector<string> &List, if (_config->FindB("APT::CDROM::Thorough",false) == false) return true; } + + // see if we find translatin indexes + if (stat("i18n",&Buf) == 0) + { + D = opendir("i18n"); + for (struct dirent *Dir = readdir(D); Dir != 0; Dir = readdir(D)) + { + if(strstr(Dir->d_name,"Translation") != NULL) + { + if (_config->FindB("Debug::aptcdrom",false) == true) + std::clog << "found translations: " << Dir->d_name << "\n"; + string file = Dir->d_name; + if(file.substr(file.size()-3,file.size()) == ".gz") + file = file.substr(0,file.size()-3); + TransList.push_back(CD+"i18n/"+ file); + } + } + closedir(D); + } + - DIR *D = opendir("."); + D = opendir("."); if (D == 0) return _error->Errno("opendir","Unable to read %s",CD.c_str()); @@ -127,7 +151,7 @@ bool pkgCdrom::FindPackages(string CD,vector<string> &List, Inodes[Depth] = Buf.st_ino; // Descend - if (FindPackages(CD + Dir->d_name,List,SList,SigList,InfoDir,log,Depth+1) == false) + if (FindPackages(CD + Dir->d_name,List,SList,SigList,TransList,InfoDir,log,Depth+1) == false) break; if (chdir(CD.c_str()) != 0) @@ -612,9 +636,10 @@ bool pkgCdrom::Add(pkgCdromStatus *log) vector<string> List; vector<string> SourceList; vector<string> SigList; + vector<string> TransList; string StartDir = SafeGetCWD(); string InfoDir; - if (FindPackages(CDROM,List,SourceList, SigList,InfoDir,log) == false) + if (FindPackages(CDROM,List,SourceList, SigList,TransList,InfoDir,log) == false) { log->Update("\n"); return false; @@ -642,17 +667,20 @@ bool pkgCdrom::Add(pkgCdromStatus *log) DropRepeats(List,"Packages"); DropRepeats(SourceList,"Sources"); DropRepeats(SigList,"Release.gpg"); + DropRepeats(TransList,""); if(log) { msg.str(""); - ioprintf(msg, _("Found %i package indexes, %i source indexes and " - "%i signatures\n"), - List.size(), SourceList.size(), SigList.size()); + ioprintf(msg, _("Found %i package indexes, %i source indexes, " + "%i translation indexes and %i signatures\n"), + List.size(), SourceList.size(), TransList.size(), + SigList.size()); log->Update(msg.str(), STEP_SCAN); } if (List.size() == 0 && SourceList.size() == 0) { - UnmountCdrom(CDROM); + if (_config->FindB("APT::CDROM::NoMount",false) == false) + UnmountCdrom(CDROM); return _error->Error("Unable to locate any package files, perhaps this is not a Debian Disc"); } @@ -691,7 +719,8 @@ bool pkgCdrom::Add(pkgCdromStatus *log) { if(!log) { - UnmountCdrom(CDROM); + if (_config->FindB("APT::CDROM::NoMount",false) == false) + UnmountCdrom(CDROM); return _error->Error("No disc name found and no way to ask for it"); } @@ -736,8 +765,10 @@ bool pkgCdrom::Add(pkgCdromStatus *log) // Copy the package files to the state directory PackageCopy Copy; SourceCopy SrcCopy; + TranslationsCopy TransCopy; if (Copy.CopyPackages(CDROM,Name,List, log) == false || - SrcCopy.CopyPackages(CDROM,Name,SourceList, log) == false) + SrcCopy.CopyPackages(CDROM,Name,SourceList, log) == false || + TransCopy.CopyTranslations(CDROM,Name,TransList, log) == false) return false; // reduce the List so that it takes less space in sources.list @@ -767,7 +798,8 @@ bool pkgCdrom::Add(pkgCdromStatus *log) string::size_type Space = (*I).find(' '); if (Space == string::npos) { - UnmountCdrom(CDROM); + if (_config->FindB("APT::CDROM::NoMount",false) == false) + UnmountCdrom(CDROM); return _error->Error("Internal error"); } @@ -784,7 +816,8 @@ bool pkgCdrom::Add(pkgCdromStatus *log) string::size_type Space = (*I).find(' '); if (Space == string::npos) { - UnmountCdrom(CDROM); + if (_config->FindB("APT::CDROM::NoMount",false) == false) + UnmountCdrom(CDROM); return _error->Error("Internal error"); } diff --git a/apt-pkg/cdrom.h b/apt-pkg/cdrom.h index 085eb64e2..68d61c098 100644 --- a/apt-pkg/cdrom.h +++ b/apt-pkg/cdrom.h @@ -5,9 +5,6 @@ #include<string> #include<vector> -#ifdef __GNUG__ -#pragma interface "apt-pkg/cdrom.h" -#endif using namespace std; @@ -50,8 +47,11 @@ class pkgCdrom }; - bool FindPackages(string CD,vector<string> &List, - vector<string> &SList, vector<string> &SigList, + bool FindPackages(string CD, + vector<string> &List, + vector<string> &SList, + vector<string> &SigList, + vector<string> &TransList, string &InfoDir, pkgCdromStatus *log, unsigned int Depth = 0); bool DropBinaryArch(vector<string> &List); diff --git a/apt-pkg/clean.h b/apt-pkg/clean.h index 43164e250..2aee2bf54 100644 --- a/apt-pkg/clean.h +++ b/apt-pkg/clean.h @@ -10,9 +10,6 @@ #ifndef APTPKG_CLEAN_H #define APTPKG_CLEAN_H -#ifdef __GNUG__ -#pragma interface "apt-pkg/clean.h" -#endif #include <apt-pkg/pkgcache.h> diff --git a/apt-pkg/contrib/cdromutl.h b/apt-pkg/contrib/cdromutl.h index 3180a03c7..f24bb8c70 100644 --- a/apt-pkg/contrib/cdromutl.h +++ b/apt-pkg/contrib/cdromutl.h @@ -8,18 +8,15 @@ ##################################################################### */ /*}}}*/ #ifndef PKGLIB_CDROMUTL_H -#define PKGLIB_ACQUIRE_METHOD_H +#define PKGLIB_CDROMUTL_H #include <string> using std::string; -#ifdef __GNUG__ -#pragma interface "apt-pkg/cdromutl.h" -#endif - bool MountCdrom(string Path); bool UnmountCdrom(string Path); bool IdentCdrom(string CD,string &Res,unsigned int Version = 2); +bool IsMounted(string &Path); #endif diff --git a/apt-pkg/contrib/cmndline.h b/apt-pkg/contrib/cmndline.h index 8f461296f..fad6d1da9 100644 --- a/apt-pkg/contrib/cmndline.h +++ b/apt-pkg/contrib/cmndline.h @@ -44,9 +44,7 @@ #ifndef PKGLIB_CMNDLINE_H #define PKGLIB_CMNDLINE_H -#ifdef __GNUG__ -#pragma interface "apt-pkg/cmndline.h" -#endif + #include <apt-pkg/configuration.h> diff --git a/apt-pkg/contrib/configuration.h b/apt-pkg/contrib/configuration.h index 0d4078dab..2534692a3 100644 --- a/apt-pkg/contrib/configuration.h +++ b/apt-pkg/contrib/configuration.h @@ -28,9 +28,7 @@ #ifndef PKGLIB_CONFIGURATION_H #define PKGLIB_CONFIGURATION_H -#ifdef __GNUG__ -#pragma interface "apt-pkg/configuration.h" -#endif + #include <string> #include <iostream> diff --git a/apt-pkg/contrib/crc-16.h b/apt-pkg/contrib/crc-16.h index 757104c54..f30678bac 100644 --- a/apt-pkg/contrib/crc-16.h +++ b/apt-pkg/contrib/crc-16.h @@ -10,10 +10,6 @@ #ifndef APTPKG_CRC16_H #define APTPKG_CRC16_H -#ifdef __GNUG__ -#pragma interface "apt-pkg/crc-16.h" -#endif - #define INIT_FCS 0xffff unsigned short AddCRC16(unsigned short fcs, void const *buf, unsigned long len); diff --git a/apt-pkg/contrib/error.h b/apt-pkg/contrib/error.h index a5fc1a223..a3be6a575 100644 --- a/apt-pkg/contrib/error.h +++ b/apt-pkg/contrib/error.h @@ -40,9 +40,7 @@ #ifndef PKGLIB_ERROR_H #define PKGLIB_ERROR_H -#ifdef __GNUG__ -#pragma interface "apt-pkg/error.h" -#endif + #ifdef __GNUG__ // Methods have a hidden this parameter that is visible to this attribute diff --git a/apt-pkg/contrib/fileutl.h b/apt-pkg/contrib/fileutl.h index 041aa3309..48bd95537 100644 --- a/apt-pkg/contrib/fileutl.h +++ b/apt-pkg/contrib/fileutl.h @@ -21,9 +21,6 @@ #ifndef PKGLIB_FILEUTL_H #define PKGLIB_FILEUTL_H -#ifdef __GNUG__ -#pragma interface "apt-pkg/fileutl.h" -#endif #include <string> diff --git a/apt-pkg/contrib/hashes.h b/apt-pkg/contrib/hashes.h index eefa7bf41..b09ea9f6b 100644 --- a/apt-pkg/contrib/hashes.h +++ b/apt-pkg/contrib/hashes.h @@ -13,9 +13,6 @@ #ifndef APTPKG_HASHES_H #define APTPKG_HASHES_H -#ifdef __GNUG__ -#pragma interface "apt-pkg/hashes.h" -#endif #include <apt-pkg/md5.h> #include <apt-pkg/sha1.h> diff --git a/apt-pkg/contrib/md5.h b/apt-pkg/contrib/md5.h index e280d714e..247b3fab9 100644 --- a/apt-pkg/contrib/md5.h +++ b/apt-pkg/contrib/md5.h @@ -23,9 +23,6 @@ #ifndef APTPKG_MD5_H #define APTPKG_MD5_H -#ifdef __GNUG__ -#pragma interface "apt-pkg/md5.h" -#endif #include <string> #include <algorithm> diff --git a/apt-pkg/contrib/mmap.h b/apt-pkg/contrib/mmap.h index e329b167a..19cf7582d 100644 --- a/apt-pkg/contrib/mmap.h +++ b/apt-pkg/contrib/mmap.h @@ -25,9 +25,6 @@ #ifndef PKGLIB_MMAP_H #define PKGLIB_MMAP_H -#ifdef __GNUG__ -#pragma interface "apt-pkg/mmap.h" -#endif #include <string> #include <apt-pkg/fileutl.h> diff --git a/apt-pkg/contrib/progress.h b/apt-pkg/contrib/progress.h index 20caf4cdf..7dd004f7e 100644 --- a/apt-pkg/contrib/progress.h +++ b/apt-pkg/contrib/progress.h @@ -21,9 +21,6 @@ #ifndef PKGLIB_PROGRESS_H #define PKGLIB_PROGRESS_H -#ifdef __GNUG__ -#pragma interface "apt-pkg/progress.h" -#endif #include <string> #include <sys/time.h> diff --git a/apt-pkg/contrib/sha1.h b/apt-pkg/contrib/sha1.h index db8ca7893..010ef802e 100644 --- a/apt-pkg/contrib/sha1.h +++ b/apt-pkg/contrib/sha1.h @@ -14,10 +14,6 @@ #ifndef APTPKG_SHA1_H #define APTPKG_SHA1_H -#ifdef __GNUG__ -#pragma interface "apt-pkg/sha1.h" -#endif - #include <string> #include <algorithm> diff --git a/apt-pkg/contrib/sha256.h b/apt-pkg/contrib/sha256.h index 70b3ae2ad..c490bfa4d 100644 --- a/apt-pkg/contrib/sha256.h +++ b/apt-pkg/contrib/sha256.h @@ -14,10 +14,6 @@ #ifndef APTPKG_SHA256_H #define APTPKG_SHA256_H -#ifdef __GNUG__ -#pragma interface "apt-pkg/sha256.h" -#endif - #include <string> #include <algorithm> diff --git a/apt-pkg/contrib/strutl.cc b/apt-pkg/contrib/strutl.cc index d96155917..37d263794 100644 --- a/apt-pkg/contrib/strutl.cc +++ b/apt-pkg/contrib/strutl.cc @@ -32,12 +32,55 @@ #include <regex.h> #include <errno.h> #include <stdarg.h> +#include <iconv.h> #include "config.h" using namespace std; /*}}}*/ +// UTF8ToCodeset - Convert some UTF-8 string for some codeset /*{{{*/ +// --------------------------------------------------------------------- +/* This is handy to use before display some information for enduser */ +bool UTF8ToCodeset(const char *codeset, const string &orig, string *dest) +{ + iconv_t cd; + const char *inbuf; + char *inptr, *outbuf, *outptr; + size_t insize, outsize; + + cd = iconv_open(codeset, "UTF-8"); + if (cd == (iconv_t)(-1)) { + // Something went wrong + if (errno == EINVAL) + _error->Error("conversion from 'UTF-8' to '%s' not available", + codeset); + else + perror("iconv_open"); + + // Clean the destination string + *dest = ""; + + return false; + } + + insize = outsize = orig.size(); + inbuf = orig.data(); + inptr = (char *)inbuf; + outbuf = new char[insize+1]; + outptr = outbuf; + + iconv(cd, &inptr, &insize, &outptr, &outsize); + *outptr = '\0'; + + *dest = outbuf; + delete[] outbuf; + + iconv_close(cd); + + return true; +} + /*}}}*/ // strstrip - Remove white space from the front and back of a string /*{{{*/ // --------------------------------------------------------------------- /* This is handy to use when parsing a file. It also removes \n's left diff --git a/apt-pkg/contrib/strutl.h b/apt-pkg/contrib/strutl.h index 6ec2b7811..ae1244ecd 100644 --- a/apt-pkg/contrib/strutl.h +++ b/apt-pkg/contrib/strutl.h @@ -16,9 +16,7 @@ #ifndef STRUTL_H #define STRUTL_H -#ifdef __GNUG__ -#pragma interface "apt-pkg/strutl.h" -#endif + #include <stdlib.h> #include <string> @@ -38,7 +36,8 @@ using std::ostream; #define APT_FORMAT2 #define APT_FORMAT3 #endif - + +bool UTF8ToCodeset(const char *codeset, const string &orig, string *dest); char *_strstrip(char *String); char *_strtabexpand(char *String,size_t Len); bool ParseQuoteWord(const char *&String,string &Res); diff --git a/apt-pkg/deb/debindexfile.cc b/apt-pkg/deb/debindexfile.cc index 234521efe..9f435bba5 100644 --- a/apt-pkg/deb/debindexfile.cc +++ b/apt-pkg/deb/debindexfile.cc @@ -320,6 +320,170 @@ pkgCache::PkgFileIterator debPackagesIndex::FindInCache(pkgCache &Cache) const } /*}}}*/ +// TranslationsIndex::debTranslationsIndex - Contructor /*{{{*/ +// --------------------------------------------------------------------- +/* */ +debTranslationsIndex::debTranslationsIndex(string URI,string Dist,string Section) : + pkgIndexFile(true), URI(URI), Dist(Dist), Section(Section) +{ +} + /*}}}*/ +// TranslationIndex::Trans* - Return the URI to the translation files /*{{{*/ +// --------------------------------------------------------------------- +/* */ +inline string debTranslationsIndex::IndexFile(const char *Type) const +{ + return _config->FindDir("Dir::State::lists") + URItoFileName(IndexURI(Type)); +} +string debTranslationsIndex::IndexURI(const char *Type) const +{ + string Res; + if (Dist[Dist.size() - 1] == '/') + { + if (Dist != "/") + Res = URI + Dist; + else + Res = URI; + } + else + Res = URI + "dists/" + Dist + '/' + Section + + "/i18n/Translation-"; + + Res += Type; + return Res; +} + /*}}}*/ +// TranslationsIndex::GetIndexes - Fetch the index files /*{{{*/ +// --------------------------------------------------------------------- +/* */ +bool debTranslationsIndex::GetIndexes(pkgAcquire *Owner) const +{ + if (TranslationsAvailable()) { + string TranslationFile = "Translation-" + LanguageCode(); + new pkgAcqIndexTrans(Owner, IndexURI(LanguageCode().c_str()), + Info(TranslationFile.c_str()), + TranslationFile); + } + + return true; +} + /*}}}*/ +// TranslationsIndex::Describe - Give a descriptive path to the index /*{{{*/ +// --------------------------------------------------------------------- +/* This should help the user find the index in the sources.list and + in the filesystem for problem solving */ +string debTranslationsIndex::Describe(bool Short) const +{ + char S[300]; + if (Short == true) + snprintf(S,sizeof(S),"%s",Info(TranslationFile().c_str()).c_str()); + else + snprintf(S,sizeof(S),"%s (%s)",Info(TranslationFile().c_str()).c_str(), + IndexFile(LanguageCode().c_str()).c_str()); + return S; +} + /*}}}*/ +// TranslationsIndex::Info - One liner describing the index URI /*{{{*/ +// --------------------------------------------------------------------- +/* */ +string debTranslationsIndex::Info(const char *Type) const +{ + string Info = ::URI::SiteOnly(URI) + ' '; + if (Dist[Dist.size() - 1] == '/') + { + if (Dist != "/") + Info += Dist; + } + else + Info += Dist + '/' + Section; + Info += " "; + Info += Type; + return Info; +} + /*}}}*/ +bool debTranslationsIndex::HasPackages() const +{ + if(!TranslationsAvailable()) + return false; + + return FileExists(IndexFile(LanguageCode().c_str())); +} + +// TranslationsIndex::Exists - Check if the index is available /*{{{*/ +// --------------------------------------------------------------------- +/* */ +bool debTranslationsIndex::Exists() const +{ + return FileExists(IndexFile(LanguageCode().c_str())); +} + /*}}}*/ +// TranslationsIndex::Size - Return the size of the index /*{{{*/ +// --------------------------------------------------------------------- +/* This is really only used for progress reporting. */ +unsigned long debTranslationsIndex::Size() const +{ + struct stat S; + if (stat(IndexFile(LanguageCode().c_str()).c_str(),&S) != 0) + return 0; + return S.st_size; +} + /*}}}*/ +// TranslationsIndex::Merge - Load the index file into a cache /*{{{*/ +// --------------------------------------------------------------------- +/* */ +bool debTranslationsIndex::Merge(pkgCacheGenerator &Gen,OpProgress &Prog) const +{ + // Check the translation file, if in use + string TranslationFile = IndexFile(LanguageCode().c_str()); + if (TranslationsAvailable() && FileExists(TranslationFile)) + { + FileFd Trans(TranslationFile,FileFd::ReadOnly); + debListParser TransParser(&Trans); + if (_error->PendingError() == true) + return false; + + Prog.SubProgress(0, Info(TranslationFile.c_str())); + if (Gen.SelectFile(TranslationFile,string(),*this) == false) + return _error->Error("Problem with SelectFile %s",TranslationFile.c_str()); + + // Store the IMS information + pkgCache::PkgFileIterator TransFile = Gen.GetCurFile(); + struct stat TransSt; + if (fstat(Trans.Fd(),&TransSt) != 0) + return _error->Errno("fstat","Failed to stat"); + TransFile->Size = TransSt.st_size; + TransFile->mtime = TransSt.st_mtime; + + if (Gen.MergeList(TransParser) == false) + return _error->Error("Problem with MergeList %s",TranslationFile.c_str()); + } + + return true; +} + /*}}}*/ +// TranslationsIndex::FindInCache - Find this index /*{{{*/ +// --------------------------------------------------------------------- +/* */ +pkgCache::PkgFileIterator debTranslationsIndex::FindInCache(pkgCache &Cache) const +{ + string FileName = IndexFile(LanguageCode().c_str()); + + pkgCache::PkgFileIterator File = Cache.FileBegin(); + for (; File.end() == false; File++) + { + if (FileName != File.FileName()) + continue; + + struct stat St; + if (stat(File.FileName(),&St) != 0) + return pkgCache::PkgFileIterator(Cache); + if ((unsigned)St.st_size != File->Size || St.st_mtime != File->mtime) + return pkgCache::PkgFileIterator(Cache); + return File; + } + return File; +} + /*}}}*/ // StatusIndex::debStatusIndex - Constructor /*{{{*/ // --------------------------------------------------------------------- /* */ @@ -416,6 +580,11 @@ class debIFTypePkg : public pkgIndexFile::Type }; debIFTypePkg() {Label = "Debian Package Index";}; }; +class debIFTypeTrans : public debIFTypePkg +{ + public: + debIFTypeTrans() {Label = "Debian Translation Index";}; +}; class debIFTypeStatus : public pkgIndexFile::Type { public: @@ -428,6 +597,7 @@ class debIFTypeStatus : public pkgIndexFile::Type }; static debIFTypeSrc _apt_Src; static debIFTypePkg _apt_Pkg; +static debIFTypeTrans _apt_Trans; static debIFTypeStatus _apt_Status; const pkgIndexFile::Type *debSourcesIndex::GetType() const @@ -438,6 +608,10 @@ const pkgIndexFile::Type *debPackagesIndex::GetType() const { return &_apt_Pkg; } +const pkgIndexFile::Type *debTranslationsIndex::GetType() const +{ + return &_apt_Trans; +} const pkgIndexFile::Type *debStatusIndex::GetType() const { return &_apt_Status; diff --git a/apt-pkg/deb/debindexfile.h b/apt-pkg/deb/debindexfile.h index a1b9583a4..b0012c96b 100644 --- a/apt-pkg/deb/debindexfile.h +++ b/apt-pkg/deb/debindexfile.h @@ -16,9 +16,7 @@ #ifndef PKGLIB_DEBINDEXFILE_H #define PKGLIB_DEBINDEXFILE_H -#ifdef __GNUG__ -#pragma interface "apt-pkg/debindexfile.h" -#endif + #include <apt-pkg/indexfile.h> @@ -74,6 +72,36 @@ class debPackagesIndex : public pkgIndexFile debPackagesIndex(string URI,string Dist,string Section,bool Trusted); }; +class debTranslationsIndex : public pkgIndexFile +{ + string URI; + string Dist; + string Section; + + string Info(const char *Type) const; + string IndexFile(const char *Type) const; + string IndexURI(const char *Type) const; + + inline string TranslationFile() const {return "Translation-" + LanguageCode();}; + + public: + + virtual const Type *GetType() const; + + // Interface for acquire + virtual string Describe(bool Short) const; + virtual bool GetIndexes(pkgAcquire *Owner) const; + + // Interface for the Cache Generator + virtual bool Exists() const; + virtual bool HasPackages() const; + virtual unsigned long Size() const; + virtual bool Merge(pkgCacheGenerator &Gen,OpProgress &Prog) const; + virtual pkgCache::PkgFileIterator FindInCache(pkgCache &Cache) const; + + debTranslationsIndex(string URI,string Dist,string Section); +}; + class debSourcesIndex : public pkgIndexFile { string URI; diff --git a/apt-pkg/deb/deblistparser.cc b/apt-pkg/deb/deblistparser.cc index d0dc7a260..074abea6d 100644 --- a/apt-pkg/deb/deblistparser.cc +++ b/apt-pkg/deb/deblistparser.cc @@ -15,6 +15,7 @@ #include <apt-pkg/configuration.h> #include <apt-pkg/strutl.h> #include <apt-pkg/crc-16.h> +#include <apt-pkg/md5.h> #include <ctype.h> @@ -104,6 +105,8 @@ bool debListParser::NewVersion(pkgCache::VerIterator Ver) return false; if (ParseDepends(Ver,"Conflicts",pkgCache::Dep::Conflicts) == false) return false; + if (ParseDepends(Ver,"Breaks",pkgCache::Dep::DpkgBreaks) == false) + return false; if (ParseDepends(Ver,"Replaces",pkgCache::Dep::Replaces) == false) return false; @@ -117,6 +120,48 @@ bool debListParser::NewVersion(pkgCache::VerIterator Ver) return true; } /*}}}*/ +// ListParser::Description - Return the description string /*{{{*/ +// --------------------------------------------------------------------- +/* This is to return the string describing the package in debian + form. If this returns the blank string then the entry is assumed to + only describe package properties */ +string debListParser::Description() +{ + if (DescriptionLanguage().empty()) + return Section.FindS("Description"); + else + return Section.FindS(("Description-" + pkgIndexFile::LanguageCode()).c_str()); +} + /*}}}*/ +// ListParser::DescriptionLanguage - Return the description lang string /*{{{*/ +// --------------------------------------------------------------------- +/* This is to return the string describing the language of + description. If this returns the blank string then the entry is + assumed to describe original description. */ +string debListParser::DescriptionLanguage() +{ + return Section.FindS("Description").empty() ? pkgIndexFile::LanguageCode() : ""; +} + /*}}}*/ +// ListParser::Description - Return the description_md5 MD5SumValue /*{{{*/ +// --------------------------------------------------------------------- +/* This is to return the md5 string to allow the check if it is the right + description. If no Description-md5 is found in the section it will be + calculated. + */ +MD5SumValue debListParser::Description_md5() +{ + string value = Section.FindS("Description-md5"); + + if (value.empty()) + { + MD5Summation md5; + md5.Add((Description() + "\n").c_str()); + return md5.Result(); + } else + return MD5SumValue(value); +} + /*}}}*/ // ListParser::UsePackage - Update a package structure /*{{{*/ // --------------------------------------------------------------------- /* This is called to update the package with any new information @@ -150,6 +195,7 @@ unsigned short debListParser::VersionHash() // "Suggests", // "Recommends", "Conflicts", + "Breaks", "Replaces",0}; unsigned long Result = INIT_FCS; char S[1024]; diff --git a/apt-pkg/deb/deblistparser.h b/apt-pkg/deb/deblistparser.h index 3a0e0421b..34bb29c72 100644 --- a/apt-pkg/deb/deblistparser.h +++ b/apt-pkg/deb/deblistparser.h @@ -12,6 +12,7 @@ #define PKGLIB_DEBLISTPARSER_H #include <apt-pkg/pkgcachegen.h> +#include <apt-pkg/indexfile.h> #include <apt-pkg/tagfile.h> class debListParser : public pkgCacheGenerator::ListParser @@ -47,6 +48,9 @@ class debListParser : public pkgCacheGenerator::ListParser virtual string Package(); virtual string Version(); virtual bool NewVersion(pkgCache::VerIterator Ver); + virtual string Description(); + virtual string DescriptionLanguage(); + virtual MD5SumValue Description_md5(); virtual unsigned short VersionHash(); virtual bool UsePackage(pkgCache::PkgIterator Pkg, pkgCache::VerIterator Ver); diff --git a/apt-pkg/deb/debmetaindex.cc b/apt-pkg/deb/debmetaindex.cc index 85e5b16b3..8cf31b326 100644 --- a/apt-pkg/deb/debmetaindex.cc +++ b/apt-pkg/deb/debmetaindex.cc @@ -157,6 +157,16 @@ bool debReleaseIndex::GetIndexes(pkgAcquire *Owner, bool GetAll) const ComputeIndexTargets(), new indexRecords (Dist)); + // Queue the translations + for (vector<const debSectionEntry *>::const_iterator I = SectionEntries.begin(); + I != SectionEntries.end(); I++) { + + if((*I)->IsSrc) + continue; + debTranslationsIndex i = debTranslationsIndex(URI,Dist,(*I)->Section); + i.GetIndexes(Owner); + } + return true; } @@ -181,11 +191,16 @@ vector <pkgIndexFile *> *debReleaseIndex::GetIndexFiles() Indexes = new vector <pkgIndexFile*>; for (vector<const debSectionEntry *>::const_iterator I = SectionEntries.begin(); - I != SectionEntries.end(); I++) + I != SectionEntries.end(); I++) { if ((*I)->IsSrc) Indexes->push_back(new debSourcesIndex (URI, Dist, (*I)->Section, IsTrusted())); else + { Indexes->push_back(new debPackagesIndex (URI, Dist, (*I)->Section, IsTrusted())); + Indexes->push_back(new debTranslationsIndex(URI, Dist, (*I)->Section)); + } + } + return Indexes; } diff --git a/apt-pkg/deb/debmetaindex.h b/apt-pkg/deb/debmetaindex.h index 2b9922987..c021a1b5a 100644 --- a/apt-pkg/deb/debmetaindex.h +++ b/apt-pkg/deb/debmetaindex.h @@ -2,10 +2,6 @@ #ifndef PKGLIB_DEBMETAINDEX_H #define PKGLIB_DEBMETAINDEX_H -#ifdef __GNUG__ -#pragma interface "apt-pkg/debmetaindex.h" -#endif - #include <apt-pkg/metaindex.h> #include <apt-pkg/sourcelist.h> diff --git a/apt-pkg/deb/debrecords.cc b/apt-pkg/deb/debrecords.cc index 6652a6ad9..5eb2d67bb 100644 --- a/apt-pkg/deb/debrecords.cc +++ b/apt-pkg/deb/debrecords.cc @@ -12,7 +12,9 @@ #pragma implementation "apt-pkg/debrecords.h" #endif #include <apt-pkg/debrecords.h> +#include <apt-pkg/strutl.h> #include <apt-pkg/error.h> +#include <langinfo.h> /*}}}*/ // RecordParser::debRecordParser - Constructor /*{{{*/ @@ -31,6 +33,10 @@ bool debRecordParser::Jump(pkgCache::VerFileIterator const &Ver) { return Tags.Jump(Section,Ver->Offset); } +bool debRecordParser::Jump(pkgCache::DescFileIterator const &Desc) +{ + return Tags.Jump(Section,Desc->Offset); +} /*}}}*/ // RecordParser::FileName - Return the archive filename on the site /*{{{*/ // --------------------------------------------------------------------- @@ -61,7 +67,7 @@ string debRecordParser::MD5Hash() /* */ string debRecordParser::SHA1Hash() { - return Section.FindS("SHA1Sum"); + return Section.FindS("SHA1"); } /*}}}*/ // RecordParser::Maintainer - Return the maintainer email /*{{{*/ @@ -77,7 +83,7 @@ string debRecordParser::Maintainer() /* */ string debRecordParser::ShortDesc() { - string Res = Section.FindS("Description"); + string Res = LongDesc(); string::size_type Pos = Res.find('\n'); if (Pos == string::npos) return Res; @@ -89,7 +95,20 @@ string debRecordParser::ShortDesc() /* */ string debRecordParser::LongDesc() { - return Section.FindS("Description"); + string orig, dest; + char *codeset = nl_langinfo(CODESET); + + if (!Section.FindS("Description").empty()) + orig = Section.FindS("Description").c_str(); + else + orig = Section.FindS(("Description-" + pkgIndexFile::LanguageCode()).c_str()).c_str(); + + if (strcmp(codeset,"UTF-8") != 0) { + UTF8ToCodeset(codeset, orig, &dest); + orig = dest; + } + + return orig; } /*}}}*/ // RecordParser::SourcePkg - Return the source package name if any /*{{{*/ diff --git a/apt-pkg/deb/debrecords.h b/apt-pkg/deb/debrecords.h index efef2e588..fdf8d762b 100644 --- a/apt-pkg/deb/debrecords.h +++ b/apt-pkg/deb/debrecords.h @@ -14,11 +14,8 @@ #ifndef PKGLIB_DEBRECORDS_H #define PKGLIB_DEBRECORDS_H -#ifdef __GNUG__ -#pragma interface "apt-pkg/debrecords.h" -#endif - #include <apt-pkg/pkgrecords.h> +#include <apt-pkg/indexfile.h> #include <apt-pkg/tagfile.h> class debRecordParser : public pkgRecords::Parser @@ -30,6 +27,7 @@ class debRecordParser : public pkgRecords::Parser protected: virtual bool Jump(pkgCache::VerFileIterator const &Ver); + virtual bool Jump(pkgCache::DescFileIterator const &Desc); public: diff --git a/apt-pkg/deb/debsrcrecords.cc b/apt-pkg/deb/debsrcrecords.cc index 9e87ee5da..7d5dab747 100644 --- a/apt-pkg/deb/debsrcrecords.cc +++ b/apt-pkg/deb/debsrcrecords.cc @@ -40,7 +40,7 @@ const char **debSrcRecordParser::Binaries() { delete [] Buffer; // allocate new size based on buffer (but never smaller than 4000) - BufSize = max((unsigned long)4000, max((unsigned long)Bins.length()+1,2*BufSize)); + BufSize = max((unsigned int)4000, max((unsigned int)Bins.length()+1,2*BufSize)); Buffer = new char[BufSize]; } diff --git a/apt-pkg/deb/debsrcrecords.h b/apt-pkg/deb/debsrcrecords.h index f4e2cb46c..8b1237ccd 100644 --- a/apt-pkg/deb/debsrcrecords.h +++ b/apt-pkg/deb/debsrcrecords.h @@ -11,9 +11,6 @@ #ifndef PKGLIB_DEBSRCRECORDS_H #define PKGLIB_DEBSRCRECORDS_H -#ifdef __GNUG__ -#pragma interface "apt-pkg/debsrcrecords.h" -#endif #include <apt-pkg/srcrecords.h> #include <apt-pkg/tagfile.h> @@ -27,7 +24,7 @@ class debSrcRecordParser : public pkgSrcRecords::Parser char *StaticBinList[400]; unsigned long iOffset; char *Buffer; - unsigned long BufSize; + unsigned int BufSize; public: diff --git a/apt-pkg/deb/debsystem.h b/apt-pkg/deb/debsystem.h index 84e57e74a..5f9995e5d 100644 --- a/apt-pkg/deb/debsystem.h +++ b/apt-pkg/deb/debsystem.h @@ -10,10 +10,6 @@ #ifndef PKGLIB_DEBSYSTEM_H #define PKGLIB_DEBSYSTEM_H -#ifdef __GNUG__ -#pragma interface "apt-pkg/debsystem.h" -#endif - #include <apt-pkg/pkgsystem.h> class debStatusIndex; diff --git a/apt-pkg/deb/debversion.h b/apt-pkg/deb/debversion.h index 00a8832a8..56fb67887 100644 --- a/apt-pkg/deb/debversion.h +++ b/apt-pkg/deb/debversion.h @@ -12,9 +12,7 @@ #ifndef PKGLIB_DEBVERSION_H #define PKGLIB_DEBVERSION_H -#ifdef __GNUG__ -#pragma interface "apt-pkg/debversion.h" -#endif + #include <apt-pkg/version.h> diff --git a/apt-pkg/deb/dpkgpm.cc b/apt-pkg/deb/dpkgpm.cc index 3204fc1bb..cebdafe7d 100644 --- a/apt-pkg/deb/dpkgpm.cc +++ b/apt-pkg/deb/dpkgpm.cc @@ -474,6 +474,8 @@ bool pkgDPkgPM::Go(int OutStatusFd) case Item::Install: Args[n++] = "--unpack"; Size += strlen(Args[n-1]); + Args[n++] = "--auto-deconfigure"; + Size += strlen(Args[n-1]); break; } diff --git a/apt-pkg/deb/dpkgpm.h b/apt-pkg/deb/dpkgpm.h index 2ff8a9ac7..7da729904 100644 --- a/apt-pkg/deb/dpkgpm.h +++ b/apt-pkg/deb/dpkgpm.h @@ -10,10 +10,6 @@ #ifndef PKGLIB_DPKGPM_H #define PKGLIB_DPKGPM_H -#ifdef __GNUG__ -#pragma interface "apt-pkg/dpkgpm.h" -#endif - #include <apt-pkg/packagemanager.h> #include <vector> #include <stdio.h> @@ -47,7 +43,7 @@ class pkgDPkgPM : public pkgPackageManager bool RunScripts(const char *Cnf); bool RunScriptsWithPkgs(const char *Cnf); bool SendV2Pkgs(FILE *F); - + // The Actuall installation implementation virtual bool Install(PkgIterator Pkg,string File); virtual bool Configure(PkgIterator Pkg); diff --git a/apt-pkg/depcache.cc b/apt-pkg/depcache.cc index 58d1d25e5..ac667d51d 100644 --- a/apt-pkg/depcache.cc +++ b/apt-pkg/depcache.cc @@ -8,24 +8,57 @@ ##################################################################### */ /*}}}*/ // Include Files /*{{{*/ -#ifdef __GNUG__ -#pragma implementation "apt-pkg/depcache.h" -#endif #include <apt-pkg/depcache.h> #include <apt-pkg/version.h> #include <apt-pkg/error.h> #include <apt-pkg/sptr.h> #include <apt-pkg/algorithms.h> + +#include <apt-pkg/fileutl.h> #include <apt-pkg/configuration.h> +#include <apt-pkg/pkgsystem.h> +#include <apt-pkg/tagfile.h> + +#include <iostream> +#include <sstream> +#include <set> #include <apti18n.h> - /*}}}*/ + +pkgDepCache::ActionGroup::ActionGroup(pkgDepCache &cache) : + cache(cache), released(false) +{ + ++cache.group_level; +} + +void pkgDepCache::ActionGroup::release() +{ + if(!released) + { + if(cache.group_level == 0) + std::cerr << "W: Unbalanced action groups, expect badness" << std::endl; + else + { + --cache.group_level; + + if(cache.group_level == 0) + cache.MarkAndSweep(); + } + + released = false; + } +} + +pkgDepCache::ActionGroup::~ActionGroup() +{ + release(); +} // DepCache::pkgDepCache - Constructors /*{{{*/ // --------------------------------------------------------------------- /* */ pkgDepCache::pkgDepCache(pkgCache *pCache,Policy *Plcy) : - Cache(pCache), PkgState(0), DepState(0) + group_level(0), Cache(pCache), PkgState(0), DepState(0) { delLocalPolicy = 0; LocalPolicy = Plcy; @@ -48,6 +81,10 @@ pkgDepCache::~pkgDepCache() /* This allocats the extension buffers and initializes them. */ bool pkgDepCache::Init(OpProgress *Prog) { + // Suppress mark updates during this operation (just in case) and + // run a mark operation when Init terminates. + ActionGroup actions(*this); + delete [] PkgState; delete [] DepState; PkgState = new StateCache[Head().PackageCount]; @@ -73,7 +110,7 @@ bool pkgDepCache::Init(OpProgress *Prog) // Find the proper cache slot StateCache &State = PkgState[I->ID]; State.iFlags = 0; - + // Figure out the install version State.CandidateVer = GetCandidateVer(I); State.InstallVer = I.CurrentVer(); @@ -95,11 +132,130 @@ bool pkgDepCache::Init(OpProgress *Prog) if(Prog != 0) Prog->Done(); - + return true; } /*}}}*/ +bool pkgDepCache::readStateFile(OpProgress *Prog) +{ + FileFd state_file; + string state = _config->FindDir("Dir::State") + "extended_states"; + if(FileExists(state)) { + state_file.Open(state, FileFd::ReadOnly); + int file_size = state_file.Size(); + if(Prog != NULL) + Prog->OverallProgress(0, file_size, 1, + _("Reading state information")); + + pkgTagFile tagfile(&state_file); + pkgTagSection section; + int amt=0; + while(tagfile.Step(section)) { + string pkgname = section.FindS("Package"); + pkgCache::PkgIterator pkg=Cache->FindPkg(pkgname); + // Silently ignore unknown packages and packages with no actual + // version. + if(!pkg.end() && !pkg.VersionList().end()) { + short reason = section.FindI("Auto-Installed", 0); + if(reason > 0) + PkgState[pkg->ID].Flags |= Flag::Auto; + if(_config->FindB("Debug::pkgAutoRemove",false)) + std::cout << "Auto-Installed : " << pkgname << std::endl; + amt+=section.size(); + if(Prog != NULL) + Prog->OverallProgress(amt, file_size, 1, + _("Reading state information")); + } + if(Prog != NULL) + Prog->OverallProgress(file_size, file_size, 1, + _("Reading state information")); + } + } + + return true; +} + +bool pkgDepCache::writeStateFile(OpProgress *prog) +{ + if(_config->FindB("Debug::pkgAutoRemove",false)) + std::clog << "pkgDepCache::writeStateFile()" << std::endl; + + FileFd StateFile; + string state = _config->FindDir("Dir::State") + "extended_states"; + + // if it does not exist, create a empty one + if(!FileExists(state)) + { + StateFile.Open(state, FileFd::WriteEmpty); + StateFile.Close(); + } + + // open it + if(!StateFile.Open(state, FileFd::ReadOnly)) + return _error->Error(_("Failed to open StateFile %s"), + state.c_str()); + + FILE *OutFile; + string outfile = state + ".tmp"; + if((OutFile = fopen(outfile.c_str(),"w")) == NULL) + return _error->Error(_("Failed to write temporary StateFile %s"), + outfile.c_str()); + + // first merge with the existing sections + pkgTagFile tagfile(&StateFile); + pkgTagSection section; + std::set<string> pkgs_seen; + const char *nullreorderlist[] = {0}; + while(tagfile.Step(section)) { + string pkgname = section.FindS("Package"); + // Silently ignore unknown packages and packages with no actual + // version. + pkgCache::PkgIterator pkg=Cache->FindPkg(pkgname); + if(pkg.end() || pkg.VersionList().end()) + continue; + bool oldAuto = section.FindI("Auto-Installed"); + bool newAuto = (PkgState[pkg->ID].Flags & Flag::Auto); + if(_config->FindB("Debug::pkgAutoRemove",false)) + std::clog << "Update exisiting AutoInstall info: " + << pkg.Name() << std::endl; + TFRewriteData rewrite[2]; + rewrite[0].Tag = "Auto-Installed"; + rewrite[0].Rewrite = newAuto ? "1" : "0"; + rewrite[0].NewTag = 0; + rewrite[1].Tag = 0; + TFRewrite(OutFile, section, nullreorderlist, rewrite); + fprintf(OutFile,"\n"); + pkgs_seen.insert(pkgname); + } + + // then write the ones we have not seen yet + std::ostringstream ostr; + for(pkgCache::PkgIterator pkg=Cache->PkgBegin(); !pkg.end(); pkg++) { + if(PkgState[pkg->ID].Flags & Flag::Auto) { + if (pkgs_seen.find(pkg.Name()) != pkgs_seen.end()) { + if(_config->FindB("Debug::pkgAutoRemove",false)) + std::clog << "Skipping already written " << pkg.Name() << std::endl; + continue; + } + if(_config->FindB("Debug::pkgAutoRemove",false)) + std::clog << "Writing new AutoInstall: " + << pkg.Name() << std::endl; + ostr.str(string("")); + ostr << "Package: " << pkg.Name() + << "\nAuto-Installed: 1\n\n"; + fprintf(OutFile,ostr.str().c_str()); + fprintf(OutFile,"\n"); + } + } + fclose(OutFile); + + // move the outfile over the real file + rename(outfile.c_str(), state.c_str()); + + return true; +} + // DepCache::CheckDep - Checks a single dependency /*{{{*/ // --------------------------------------------------------------------- /* This first checks the dependency against the main target package and @@ -114,7 +270,7 @@ bool pkgDepCache::CheckDep(DepIterator Dep,int Type,PkgIterator &Res) we allow it anyhow because dpkg does. Technically it is a packaging bug. Conflicts may never self match */ if (Dep.TargetPkg() != Dep.ParentPkg() || - (Dep->Type != Dep::Conflicts && Dep->Type != Dep::Obsoletes)) + (Dep->Type != Dep::Conflicts && Dep->Type != Dep::DpkgBreaks && Dep->Type != Dep::Obsoletes)) { PkgIterator Pkg = Dep.TargetPkg(); // Check the base package @@ -144,7 +300,8 @@ bool pkgDepCache::CheckDep(DepIterator Dep,int Type,PkgIterator &Res) { /* Provides may never be applied against the same package if it is a conflicts. See the comment above. */ - if (P.OwnerPkg() == Pkg && Dep->Type == Dep::Conflicts) + if (P.OwnerPkg() == Pkg && + (Dep->Type == Dep::Conflicts || Dep->Type == Dep::DpkgBreaks)) continue; // Check if the provides is a hit @@ -240,9 +397,11 @@ void pkgDepCache::AddStates(const PkgIterator &Pkg,int Add) { StateCache &State = PkgState[Pkg->ID]; - // The Package is broken + // The Package is broken (either minimal dep or policy dep) if ((State.DepState & DepInstMin) != DepInstMin) iBrokenCount += Add; + if ((State.DepState & DepInstPolicy) != DepInstPolicy) + iPolicyBrokenCount += Add; // Bad state if (Pkg.State() != PkgIterator::NeedsNothing) @@ -296,7 +455,9 @@ void pkgDepCache::BuildGroupOrs(VerIterator const &V) /* Invert for Conflicts. We have to do this twice to get the right sense for a conflicts group */ - if (D->Type == Dep::Conflicts || D->Type == Dep::Obsoletes) + if (D->Type == Dep::Conflicts || + D->Type == Dep::DpkgBreaks || + D->Type == Dep::Obsoletes) State = ~State; // Add to the group if we are within an or.. @@ -307,7 +468,9 @@ void pkgDepCache::BuildGroupOrs(VerIterator const &V) Group = 0; // Invert for Conflicts - if (D->Type == Dep::Conflicts || D->Type == Dep::Obsoletes) + if (D->Type == Dep::Conflicts || + D->Type == Dep::DpkgBreaks || + D->Type == Dep::Obsoletes) State = ~State; } } @@ -440,7 +603,9 @@ void pkgDepCache::Update(OpProgress *Prog) Group = 0; // Invert for Conflicts - if (D->Type == Dep::Conflicts || D->Type == Dep::Obsoletes) + if (D->Type == Dep::Conflicts || + D->Type == Dep::DpkgBreaks || + D->Type == Dep::Obsoletes) State = ~State; } } @@ -453,12 +618,14 @@ void pkgDepCache::Update(OpProgress *Prog) if (Prog != 0) Prog->Progress(Done); + + readStateFile(Prog); } /*}}}*/ // DepCache::Update - Update the deps list of a package /*{{{*/ // --------------------------------------------------------------------- /* This is a helper for update that only does the dep portion of the scan. - It is mainly ment to scan reverse dependencies. */ + It is mainly meant to scan reverse dependencies. */ void pkgDepCache::Update(DepIterator D) { // Update the reverse deps @@ -468,7 +635,9 @@ void pkgDepCache::Update(DepIterator D) State = DependencyState(D); // Invert for Conflicts - if (D->Type == Dep::Conflicts || D->Type == Dep::Obsoletes) + if (D->Type == Dep::Conflicts || + D->Type == Dep::DpkgBreaks || + D->Type == Dep::Obsoletes) State = ~State; RemoveStates(D.ParentPkg()); @@ -510,7 +679,7 @@ void pkgDepCache::Update(PkgIterator const &Pkg) // DepCache::MarkKeep - Put the package in the keep state /*{{{*/ // --------------------------------------------------------------------- /* */ -void pkgDepCache::MarkKeep(PkgIterator const &Pkg,bool Soft) +void pkgDepCache::MarkKeep(PkgIterator const &Pkg, bool Soft, bool FromUser) { // Simplifies other routines. if (Pkg.end() == true) @@ -522,6 +691,9 @@ void pkgDepCache::MarkKeep(PkgIterator const &Pkg,bool Soft) Pkg.CurrentVer().Downloadable() == false) return; + /** \todo Can this be moved later in the method? */ + ActionGroup group(*this); + /* We changed the soft state all the time so the UI is a bit nicer to use */ StateCache &P = PkgState[Pkg->ID]; @@ -537,8 +709,17 @@ void pkgDepCache::MarkKeep(PkgIterator const &Pkg,bool Soft) // We dont even try to keep virtual packages.. if (Pkg->VersionList == 0) return; - - P.Flags &= ~Flag::Auto; +#if 0 // reseting the autoflag here means we lose the + // auto-mark information if a user selects a package for removal + // but changes his mind then and sets it for keep again + // - this makes sense as default when all Garbage dependencies + // are automatically marked for removal (as aptitude does). + // setting a package for keep then makes it no longer autoinstalled + // for all other use-case this action is rather suprising + if(FromUser && !P.Marked) + P.Flags &= ~Flag::Auto; +#endif + RemoveSizes(Pkg); RemoveStates(Pkg); @@ -564,6 +745,8 @@ void pkgDepCache::MarkDelete(PkgIterator const &Pkg, bool rPurge) if (Pkg.end() == true) return; + ActionGroup group(*this); + // Check that it is not already marked for delete StateCache &P = PkgState[Pkg->ID]; P.iFlags &= ~(AutoKept | Purge); @@ -586,7 +769,6 @@ void pkgDepCache::MarkDelete(PkgIterator const &Pkg, bool rPurge) else P.Mode = ModeDelete; P.InstallVer = 0; - P.Flags &= Flag::Auto; AddStates(Pkg); Update(Pkg); @@ -597,7 +779,8 @@ void pkgDepCache::MarkDelete(PkgIterator const &Pkg, bool rPurge) // --------------------------------------------------------------------- /* */ void pkgDepCache::MarkInstall(PkgIterator const &Pkg,bool AutoInst, - unsigned long Depth) + unsigned long Depth, bool FromUser, + bool ForceImportantDeps) { if (Depth > 100) return; @@ -606,26 +789,27 @@ void pkgDepCache::MarkInstall(PkgIterator const &Pkg,bool AutoInst, if (Pkg.end() == true) return; + ActionGroup group(*this); + /* Check that it is not already marked for install and that it can be installed */ StateCache &P = PkgState[Pkg->ID]; P.iFlags &= ~AutoKept; - if (P.InstBroken() == false && (P.Mode == ModeInstall || + if ((P.InstPolicyBroken() == false && P.InstBroken() == false) && + (P.Mode == ModeInstall || P.CandidateVer == (Version *)Pkg.CurrentVer())) { if (P.CandidateVer == (Version *)Pkg.CurrentVer() && P.InstallVer == 0) - MarkKeep(Pkg); + MarkKeep(Pkg, false, FromUser); return; } // See if there is even any possible instalation candidate if (P.CandidateVer == 0) return; - // We dont even try to install virtual packages.. if (Pkg->VersionList == 0) return; - /* Target the candidate version and remove the autoflag. We reset the autoflag below if this was called recursively. Otherwise the user should have the ability to de-auto a package by changing its state */ @@ -634,7 +818,20 @@ void pkgDepCache::MarkInstall(PkgIterator const &Pkg,bool AutoInst, P.Mode = ModeInstall; P.InstallVer = P.CandidateVer; - P.Flags &= ~Flag::Auto; + + if(FromUser) + { + // Set it to manual if it's a new install or cancelling the + // removal of a garbage package. + if(P.Status == 2 || (!Pkg.CurrentVer().end() && !P.Marked)) + P.Flags &= ~Flag::Auto; + } + else + { + // Set it to auto if this is a new install. + if(P.Status == 2) + P.Flags |= Flag::Auto; + } if (P.CandidateVer == (Version *)Pkg.CurrentVer()) P.Mode = ModeKeep; @@ -666,10 +863,43 @@ void pkgDepCache::MarkInstall(PkgIterator const &Pkg,bool AutoInst, /* Check if this dep should be consider for install. If it is a user defined important dep and we are installed a new package then - it will be installed. Otherwise we only worry about critical deps */ + it will be installed. Otherwise we only check for important + deps that have changed from the installed version + */ if (IsImportantDep(Start) == false) continue; - if (Pkg->CurrentVer != 0 && Start.IsCritical() == false) + + /* check if any ImportantDep() (but not Critial) where added + * since we installed the package + */ + bool isNewImportantDep = false; + if(!ForceImportantDeps && !Start.IsCritical()) + { + bool found=false; + VerIterator instVer = Pkg.CurrentVer(); + if(!instVer.end()) + { + for (DepIterator D = instVer.DependsList(); D.end() != true; D++) + { + //FIXME: deal better with or-groups(?) + DepIterator LocalStart = D; + + if(IsImportantDep(D) && Start.TargetPkg() == D.TargetPkg()) + found=true; + } + // this is a new dep if it was not found to be already + // a important dep of the installed pacakge + isNewImportantDep = !found; + } + } + if(isNewImportantDep) + if(_config->FindB("Debug::pkgDepCache::AutoInstall",false) == true) + std::clog << "new important dependency: " + << Start.TargetPkg().Name() << std::endl; + + // skip important deps if the package is already installed + if (Pkg->CurrentVer != 0 && Start.IsCritical() == false + && !isNewImportantDep && !ForceImportantDeps) continue; /* If we are in an or group locate the first or that can @@ -680,7 +910,8 @@ void pkgDepCache::MarkInstall(PkgIterator const &Pkg,bool AutoInst, /* This bit is for processing the possibilty of an install/upgrade fixing the problem */ SPtrArray<Version *> List = Start.AllTargets(); - if ((DepState[Start->ID] & DepCVer) == DepCVer) + if (Start->Type != Dep::DpkgBreaks && + (DepState[Start->ID] & DepCVer) == DepCVer) { // Right, find the best version to install.. Version **Cur = List; @@ -711,33 +942,48 @@ void pkgDepCache::MarkInstall(PkgIterator const &Pkg,bool AutoInst, } } - if (InstPkg.end() == false) + if (InstPkg.end() == false) { if(_config->FindB("Debug::pkgDepCache::AutoInstall",false) == true) std::clog << "Installing " << InstPkg.Name() << " as dep of " << Pkg.Name() << std::endl; - MarkInstall(InstPkg,true,Depth + 1); - - // Set the autoflag, after MarkInstall because MarkInstall unsets it - if (P->CurrentVer == 0) - PkgState[InstPkg->ID].Flags |= Flag::Auto; + // now check if we should consider it a automatic dependency or not + string sec = _config->Find("APT::Never-MarkAuto-Section",""); + if(Pkg.Section() && (string(Pkg.Section()) == sec)) + { + if(_config->FindB("Debug::pkgDepCache::AutoInstall",false) == true) + std::clog << "Setting NOT as auto-installed because its a direct dep of a package in section " << sec << std::endl; + MarkInstall(InstPkg,true,Depth + 1, true); + } + else + { + // mark automatic dependency + MarkInstall(InstPkg,true,Depth + 1, false, ForceImportantDeps); + // Set the autoflag, after MarkInstall because MarkInstall unsets it + if (P->CurrentVer == 0) + PkgState[InstPkg->ID].Flags |= Flag::Auto; + } } - continue; } - + /* For conflicts we just de-install the package and mark as auto, - Conflicts may not have or groups */ - if (Start->Type == Dep::Conflicts || Start->Type == Dep::Obsoletes) + Conflicts may not have or groups. For dpkg's Breaks we try to + upgrade the package. */ + if (Start->Type == Dep::Conflicts || Start->Type == Dep::Obsoletes || + Start->Type == Dep::DpkgBreaks) { for (Version **I = List; *I != 0; I++) { VerIterator Ver(*this,*I); PkgIterator Pkg = Ver.ParentPkg(); - - MarkDelete(Pkg); - PkgState[Pkg->ID].Flags |= Flag::Auto; + + if (Start->Type != Dep::DpkgBreaks) + MarkDelete(Pkg); + else + if (PkgState[Pkg->ID].CandidateVer != *I) + MarkInstall(Pkg,true,Depth + 1, false, ForceImportantDeps); } continue; } @@ -749,6 +995,8 @@ void pkgDepCache::MarkInstall(PkgIterator const &Pkg,bool AutoInst, /* */ void pkgDepCache::SetReInstall(PkgIterator const &Pkg,bool To) { + ActionGroup group(*this); + RemoveSizes(Pkg); RemoveStates(Pkg); @@ -767,9 +1015,11 @@ void pkgDepCache::SetReInstall(PkgIterator const &Pkg,bool To) /* */ void pkgDepCache::SetCandidateVersion(VerIterator TargetVer) { + ActionGroup group(*this); + pkgCache::PkgIterator Pkg = TargetVer.ParentPkg(); StateCache &P = PkgState[Pkg->ID]; - + RemoveSizes(Pkg); RemoveStates(Pkg); @@ -782,6 +1032,18 @@ void pkgDepCache::SetCandidateVersion(VerIterator TargetVer) Update(Pkg); AddSizes(Pkg); } + +void pkgDepCache::MarkAuto(const PkgIterator &Pkg, bool Auto) +{ + StateCache &state = PkgState[Pkg->ID]; + + ActionGroup group(*this); + + if(Auto) + state.Flags |= Flag::Auto; + else + state.Flags &= ~Flag::Auto; +} /*}}}*/ // StateCache::Update - Compute the various static display things /*{{{*/ // --------------------------------------------------------------------- @@ -869,6 +1131,244 @@ pkgCache::VerIterator pkgDepCache::Policy::GetCandidateVer(PkgIterator Pkg) /* */ bool pkgDepCache::Policy::IsImportantDep(DepIterator Dep) { - return Dep.IsCritical(); + if(Dep.IsCritical()) + return true; + else if(Dep->Type == pkgCache::Dep::Recommends) + { + if ( _config->FindB("APT::Install-Recommends", false)) + return true; + // we suport a special mode to only install-recommends for certain + // sections + // FIXME: this is a meant as a temporarly solution until the + // recommends are cleaned up + string s = _config->Find("APT::Install-Recommends-Section",""); + if(s.size() > 0) + { + const char *sec = Dep.TargetPkg().Section(); + if (sec && strcmp(sec, s.c_str()) == 0) + return true; + } + } + else if(Dep->Type == pkgCache::Dep::Suggests) + return _config->FindB("APT::Install-Suggests", false); + + return false; } /*}}}*/ + +pkgDepCache::DefaultRootSetFunc::DefaultRootSetFunc() + : constructedSuccessfully(false) +{ + Configuration::Item const *Opts; + Opts = _config->Tree("APT::NeverAutoRemove"); + if (Opts != 0 && Opts->Child != 0) + { + Opts = Opts->Child; + for (; Opts != 0; Opts = Opts->Next) + { + if (Opts->Value.empty() == true) + continue; + + regex_t *p = new regex_t; + if(regcomp(p,Opts->Value.c_str(), + REG_EXTENDED | REG_ICASE | REG_NOSUB) != 0) + { + regfree(p); + delete p; + _error->Error("Regex compilation error for APT::NeverAutoRemove"); + return; + } + + rootSetRegexp.push_back(p); + } + } + + constructedSuccessfully = true; +} + +pkgDepCache::DefaultRootSetFunc::~DefaultRootSetFunc() +{ + for(unsigned int i = 0; i < rootSetRegexp.size(); i++) + { + regfree(rootSetRegexp[i]); + delete rootSetRegexp[i]; + } +} + + +bool pkgDepCache::DefaultRootSetFunc::InRootSet(const pkgCache::PkgIterator &pkg) +{ + for(unsigned int i = 0; i < rootSetRegexp.size(); i++) + if (regexec(rootSetRegexp[i], pkg.Name(), 0, 0, 0) == 0) + return true; + + return false; +} + +pkgDepCache::InRootSetFunc *pkgDepCache::GetRootSetFunc() +{ + DefaultRootSetFunc *f = new DefaultRootSetFunc; + if(f->wasConstructedSuccessfully()) + return f; + else + { + delete f; + return NULL; + } +} + +bool pkgDepCache::MarkFollowsRecommends() +{ + return _config->FindB("APT::AutoRemove::RecommendsImportant", true); +} + +bool pkgDepCache::MarkFollowsSuggests() +{ + return _config->FindB("APT::AutoRemove::SuggestsImportant", false); +} + +// the main mark algorithm +bool pkgDepCache::MarkRequired(InRootSetFunc &userFunc) +{ + bool follow_recommends; + bool follow_suggests; + + // init the states + for(PkgIterator p = PkgBegin(); !p.end(); ++p) + { + PkgState[p->ID].Marked = false; + PkgState[p->ID].Garbage = false; + + // debug output + if(_config->FindB("Debug::pkgAutoRemove",false) + && PkgState[p->ID].Flags & Flag::Auto) + std::clog << "AutoDep: " << p.Name() << std::endl; + } + + // init vars + follow_recommends = MarkFollowsRecommends(); + follow_suggests = MarkFollowsSuggests(); + + + + // do the mark part, this is the core bit of the algorithm + for(PkgIterator p = PkgBegin(); !p.end(); ++p) + { + if(!(PkgState[p->ID].Flags & Flag::Auto) || + (p->Flags & Flag::Essential) || + userFunc.InRootSet(p)) + + { + // the package is installed (and set to keep) + if(PkgState[p->ID].Keep() && !p.CurrentVer().end()) + MarkPackage(p, p.CurrentVer(), + follow_recommends, follow_suggests); + // the package is to be installed + else if(PkgState[p->ID].Install()) + MarkPackage(p, PkgState[p->ID].InstVerIter(*this), + follow_recommends, follow_suggests); + } + } + + return true; +} + +// mark a single package in Mark-and-Sweep +void pkgDepCache::MarkPackage(const pkgCache::PkgIterator &pkg, + const pkgCache::VerIterator &ver, + bool follow_recommends, + bool follow_suggests) +{ + pkgDepCache::StateCache &state = PkgState[pkg->ID]; + VerIterator candver = state.CandidateVerIter(*this); + VerIterator instver = state.InstVerIter(*this); + +#if 0 + // If a package was garbage-collected but is now being marked, we + // should re-select it + // For cases when a pkg is set to upgrade and this trigger the + // removal of a no-longer used dependency. if the pkg is set to + // keep again later it will result in broken deps + if(state.Delete() && state.RemoveReason = Unused) + { + if(ver==candver) + mark_install(pkg, false, false, NULL); + else if(ver==pkg.CurrentVer()) + MarkKeep(pkg, false, false); + + instver=state.InstVerIter(*this); + } +#endif + + // Ignore versions other than the InstVer, and ignore packages + // that are already going to be removed or just left uninstalled. + if(!(ver == instver && !instver.end())) + return; + + // if we are marked already we are done + if(state.Marked) + return; + + //std::cout << "Setting Marked for: " << pkg.Name() << std::endl; + state.Marked=true; + + if(!ver.end()) + { + for(DepIterator d = ver.DependsList(); !d.end(); ++d) + { + if(d->Type == Dep::Depends || + d->Type == Dep::PreDepends || + (follow_recommends && + d->Type == Dep::Recommends) || + (follow_suggests && + d->Type == Dep::Suggests)) + { + // Try all versions of this package. + for(VerIterator V = d.TargetPkg().VersionList(); + !V.end(); ++V) + { + if(_system->VS->CheckDep(V.VerStr(), d->CompareOp, d.TargetVer())) + { + MarkPackage(V.ParentPkg(), V, + follow_recommends, follow_suggests); + } + } + // Now try virtual packages + for(PrvIterator prv=d.TargetPkg().ProvidesList(); + !prv.end(); ++prv) + { + if(_system->VS->CheckDep(prv.ProvideVersion(), d->CompareOp, + d.TargetVer())) + { + MarkPackage(prv.OwnerPkg(), prv.OwnerVer(), + follow_recommends, follow_suggests); + } + } + } + } + } +} + +bool pkgDepCache::Sweep() +{ + // do the sweep + for(PkgIterator p=PkgBegin(); !p.end(); ++p) + { + StateCache &state=PkgState[p->ID]; + + // skip required packages + if (!p.CurrentVer().end() && + (p.CurrentVer()->Priority == pkgCache::State::Required)) + continue; + + // if it is not marked and it is installed, it's garbage + if(!state.Marked && (!p.CurrentVer().end() || state.Install())) + { + state.Garbage=true; + if(_config->FindB("Debug::pkgAutoRemove",false)) + std::cout << "Garbage: " << p.Name() << std::endl; + } + } + + return true; +} diff --git a/apt-pkg/depcache.h b/apt-pkg/depcache.h index 6d51920e9..b2bcfb58a 100644 --- a/apt-pkg/depcache.h +++ b/apt-pkg/depcache.h @@ -1,4 +1,4 @@ -// -*- mode: cpp; mode: fold -*- +// -*- mode: c++; mode: fold -*- // Description /*{{{*/ // $Id: depcache.h,v 1.14 2001/02/20 07:03:17 jgg Exp $ /* ###################################################################### @@ -38,16 +38,75 @@ #ifndef PKGLIB_DEPCACHE_H #define PKGLIB_DEPCACHE_H -#ifdef __GNUG__ -#pragma interface "apt-pkg/depcache.h" -#endif #include <apt-pkg/pkgcache.h> #include <apt-pkg/progress.h> +#include <regex.h> + +#include <vector> + class pkgDepCache : protected pkgCache::Namespace { public: + + /** \brief An arbitrary predicate on packages. */ + class InRootSetFunc + { + public: + virtual bool InRootSet(const pkgCache::PkgIterator &pkg) {return false;}; + virtual ~InRootSetFunc() {}; + }; + + private: + /** \brief Mark a single package and all its unmarked important + * dependencies during mark-and-sweep. + * + * Recursively invokes itself to mark all dependencies of the + * package. + * + * \param pkg The package to mark. + * + * \param ver The version of the package that is to be marked. + * + * \param follow_recommends If \b true, recommendations of the + * package will be recursively marked. + * + * \param follow_suggests If \b true, suggestions of the package + * will be recursively marked. + */ + void MarkPackage(const pkgCache::PkgIterator &pkg, + const pkgCache::VerIterator &ver, + bool follow_recommends, + bool follow_suggests); + + /** \brief Update the Marked field of all packages. + * + * Each package's StateCache::Marked field will be set to \b true + * if and only if it can be reached from the root set. By + * default, the root set consists of the set of manually installed + * or essential packages, but it can be extended using the + * parameter #rootFunc. + * + * \param rootFunc A callback that can be used to add extra + * packages to the root set. + * + * \return \b false if an error occured. + */ + bool MarkRequired(InRootSetFunc &rootFunc); + + /** \brief Set the StateCache::Garbage flag on all packages that + * should be removed. + * + * Packages that were not marked by the last call to #MarkRequired + * are tested to see whether they are actually garbage. If so, + * they are marked as such. + * + * \return \b false if an error occured. + */ + bool Sweep(); + + public: // These flags are used in DepState enum DepFlags {DepNow = (1 << 0),DepInstall = (1 << 1),DepCVer = (1 << 2), @@ -63,6 +122,84 @@ class pkgDepCache : protected pkgCache::Namespace enum VersionTypes {NowVersion, InstallVersion, CandidateVersion}; enum ModeList {ModeDelete = 0, ModeKeep = 1, ModeInstall = 2}; + + /** \brief Represents an active action group. + * + * An action group is a group of actions that are currently being + * performed. While an active group is active, certain routine + * clean-up actions that would normally be performed after every + * cache operation are delayed until the action group is + * completed. This is necessary primarily to avoid inefficiencies + * when modifying a large number of packages at once. + * + * This class represents an active action group. Creating an + * instance will create an action group; destroying one will + * destroy the corresponding action group. + * + * The following operations are suppressed by this class: + * + * - Keeping the Marked and Garbage flags up to date. + * + * \note This can be used in the future to easily accumulate + * atomic actions for undo or to display "what apt did anyway"; + * e.g., change the counter of how many action groups are active + * to a std::set of pointers to them and use those to store + * information about what happened in a group in the group. + */ + class ActionGroup + { + pkgDepCache &cache; + + bool released; + + /** Action groups are noncopyable. */ + ActionGroup(const ActionGroup &other); + public: + /** \brief Create a new ActionGroup. + * + * \param cache The cache that this ActionGroup should + * manipulate. + * + * As long as this object exists, no automatic cleanup + * operations will be undertaken. + */ + ActionGroup(pkgDepCache &cache); + + /** \brief Clean up the action group before it is destroyed. + * + * If it is destroyed later, no second cleanup wil be run. + */ + void release(); + + /** \brief Destroy the action group. + * + * If this is the last action group, the automatic cache + * cleanup operations will be undertaken. + */ + ~ActionGroup(); + }; + + /** \brief Returns \b true for packages matching a regular + * expression in APT::NeverAutoRemove. + */ + class DefaultRootSetFunc : public InRootSetFunc + { + std::vector<regex_t *> rootSetRegexp; + bool constructedSuccessfully; + + public: + DefaultRootSetFunc(); + ~DefaultRootSetFunc(); + + /** \return \b true if the class initialized successfully, \b + * false otherwise. Used to avoid throwing an exception, since + * APT classes generally don't. + */ + bool wasConstructedSuccessfully() const { return constructedSuccessfully; } + + bool InRootSet(const pkgCache::PkgIterator &pkg); + }; + struct StateCache { // Epoch stripped text versions of the two version fields @@ -79,6 +216,17 @@ class pkgDepCache : protected pkgCache::Namespace unsigned short Flags; unsigned short iFlags; // Internal flags + /** \brief \b true if this package can be reached from the root set. */ + bool Marked; + + /** \brief \b true if this package is unused and should be removed. + * + * This differs from !#Marked, because it is possible that some + * unreachable packages will be protected from becoming + * garbage. + */ + bool Garbage; + // Various tree indicators signed char Status; // -1,0,1,2 unsigned char Mode; // ModeList @@ -97,7 +245,9 @@ class pkgDepCache : protected pkgCache::Namespace inline bool Downgrade() const {return Status < 0 && Mode == ModeInstall;}; inline bool Held() const {return Status != 0 && Keep();}; inline bool NowBroken() const {return (DepState & DepNowMin) != DepNowMin;}; + inline bool NowPolicyBroken() const {return (DepState & DepNowPolicy) != DepNowPolicy;}; inline bool InstBroken() const {return (DepState & DepInstMin) != DepInstMin;}; + inline bool InstPolicyBroken() const {return (DepState & DepInstPolicy) != DepInstPolicy;}; inline bool Install() const {return Mode == ModeInstall;}; inline VerIterator InstVerIter(pkgCache &Cache) {return VerIterator(Cache,InstallVer);}; @@ -119,6 +269,14 @@ class pkgDepCache : protected pkgCache::Namespace virtual ~Policy() {}; }; + + private: + /** The number of open "action groups"; certain post-action + * operations are suppressed if this number is > 0. + */ + int group_level; + + friend class ActionGroup; protected: @@ -133,6 +291,7 @@ class pkgDepCache : protected pkgCache::Namespace unsigned long iDelCount; unsigned long iKeepCount; unsigned long iBrokenCount; + unsigned long iPolicyBrokenCount; unsigned long iBadCount; Policy *delLocalPolicy; // For memory clean up.. @@ -182,16 +341,69 @@ class pkgDepCache : protected pkgCache::Namespace inline StateCache &operator [](PkgIterator const &I) {return PkgState[I->ID];}; inline unsigned char &operator [](DepIterator const &I) {return DepState[I->ID];}; - // Manipulators - void MarkKeep(PkgIterator const &Pkg,bool Soft = false); + /** \return A function identifying packages in the root set other + * than manually installed packages and essential packages, or \b + * NULL if an error occurs. + * + * \todo Is this the best place for this function? Perhaps the + * settings for mark-and-sweep should be stored in a single + * external class? + */ + virtual InRootSetFunc *GetRootSetFunc(); + + /** \return \b true if the garbage collector should follow recommendations. + */ + virtual bool MarkFollowsRecommends(); + + /** \return \b true if the garbage collector should follow suggestions. + */ + virtual bool MarkFollowsSuggests(); + + /** \brief Update the Marked and Garbage fields of all packages. + * + * This routine is implicitly invoked after all state manipulators + * and when an ActionGroup is destroyed. It invokes #MarkRequired + * and #Sweep to do its dirty work. + * + * \param rootFunc A predicate that returns \b true for packages + * that should be added to the root set. + */ + bool MarkAndSweep(InRootSetFunc &rootFunc) + { + return MarkRequired(rootFunc) && Sweep(); + } + + bool MarkAndSweep() + { + std::auto_ptr<InRootSetFunc> f(GetRootSetFunc()); + if(f.get() != NULL) + return MarkAndSweep(*f.get()); + else + return false; + } + + /** \name State Manipulators + */ + // @{ + void MarkKeep(PkgIterator const &Pkg, bool Soft = false, + bool FromUser = true); void MarkDelete(PkgIterator const &Pkg,bool Purge = false); void MarkInstall(PkgIterator const &Pkg,bool AutoInst = true, - unsigned long Depth = 0); + unsigned long Depth = 0, bool FromUser = true, + bool ForceImportantDeps = false); void SetReInstall(PkgIterator const &Pkg,bool To); void SetCandidateVersion(VerIterator TargetVer); + + /** Set the "is automatically installed" flag of Pkg. */ + void MarkAuto(const PkgIterator &Pkg, bool Auto); + // @} // This is for debuging void Update(OpProgress *Prog = 0); + + // read persistent states + bool readStateFile(OpProgress *prog); + bool writeStateFile(OpProgress *prog); // Size queries inline double UsrSize() {return iUsrSize;}; @@ -200,6 +412,7 @@ class pkgDepCache : protected pkgCache::Namespace inline unsigned long KeepCount() {return iKeepCount;}; inline unsigned long InstCount() {return iInstCount;}; inline unsigned long BrokenCount() {return iBrokenCount;}; + inline unsigned long PolicyBrokenCount() {return iPolicyBrokenCount;}; inline unsigned long BadCount() {return iBadCount;}; bool Init(OpProgress *Prog); diff --git a/apt-pkg/indexcopy.cc b/apt-pkg/indexcopy.cc index 1f65062f7..c9dded134 100644 --- a/apt-pkg/indexcopy.cc +++ b/apt-pkg/indexcopy.cc @@ -32,6 +32,8 @@ using namespace std; + + // IndexCopy::CopyPackages - Copy the package files from the CD /*{{{*/ // --------------------------------------------------------------------- /* */ @@ -512,10 +514,10 @@ bool SourceCopy::RewriteEntry(FILE *Target,string File) fputc('\n',Target); return true; } - - /*}}}*/ - +// SigVerify::Verify - Verify a files md5sum against its metaindex /*{{{*/ +// --------------------------------------------------------------------- +/* */ bool SigVerify::Verify(string prefix, string file, indexRecords *MetaIndex) { const indexRecords::checkSum *Record = MetaIndex->Lookup(file); @@ -670,3 +672,178 @@ bool SigVerify::CopyAndVerify(string CDROM,string Name,vector<string> &SigList, return true; } + + +bool TranslationsCopy::CopyTranslations(string CDROM,string Name,vector<string> &List, + pkgCdromStatus *log) +{ + OpProgress *Progress = NULL; + if (List.size() == 0) + return true; + + if(log) + Progress = log->GetOpProgress(); + + bool Debug = _config->FindB("Debug::aptcdrom",false); + + // Prepare the progress indicator + unsigned long TotalSize = 0; + for (vector<string>::iterator I = List.begin(); I != List.end(); I++) + { + struct stat Buf; + if (stat(string(*I).c_str(),&Buf) != 0 && + stat(string(*I + ".gz").c_str(),&Buf) != 0) + return _error->Errno("stat","Stat failed for %s", + string(*I).c_str()); + TotalSize += Buf.st_size; + } + + unsigned long CurrentSize = 0; + unsigned int NotFound = 0; + unsigned int WrongSize = 0; + unsigned int Packages = 0; + for (vector<string>::iterator I = List.begin(); I != List.end(); I++) + { + string OrigPath = string(*I,CDROM.length()); + unsigned long FileSize = 0; + + // Open the package file + FileFd Pkg; + if (FileExists(*I) == true) + { + Pkg.Open(*I,FileFd::ReadOnly); + FileSize = Pkg.Size(); + } + else + { + FileFd From(*I + ".gz",FileFd::ReadOnly); + if (_error->PendingError() == true) + return false; + FileSize = From.Size(); + + // Get a temp file + FILE *tmp = tmpfile(); + if (tmp == 0) + return _error->Errno("tmpfile","Unable to create a tmp file"); + Pkg.Fd(dup(fileno(tmp))); + fclose(tmp); + + // Fork gzip + pid_t Process = fork(); + if (Process < 0) + return _error->Errno("fork","Couldn't fork gzip"); + + // The child + if (Process == 0) + { + dup2(From.Fd(),STDIN_FILENO); + dup2(Pkg.Fd(),STDOUT_FILENO); + SetCloseExec(STDIN_FILENO,false); + SetCloseExec(STDOUT_FILENO,false); + + const char *Args[3]; + string Tmp = _config->Find("Dir::bin::gzip","gzip"); + Args[0] = Tmp.c_str(); + Args[1] = "-d"; + Args[2] = 0; + execvp(Args[0],(char **)Args); + exit(100); + } + + // Wait for gzip to finish + if (ExecWait(Process,_config->Find("Dir::bin::gzip","gzip").c_str(),false) == false) + return _error->Error("gzip failed, perhaps the disk is full."); + + Pkg.Seek(0); + } + pkgTagFile Parser(&Pkg); + if (_error->PendingError() == true) + return false; + + // Open the output file + char S[400]; + snprintf(S,sizeof(S),"cdrom:[%s]/%s",Name.c_str(), + (*I).c_str() + CDROM.length()); + string TargetF = _config->FindDir("Dir::State::lists") + "partial/"; + TargetF += URItoFileName(S); + if (_config->FindB("APT::CDROM::NoAct",false) == true) + TargetF = "/dev/null"; + FileFd Target(TargetF,FileFd::WriteEmpty); + FILE *TargetFl = fdopen(dup(Target.Fd()),"w"); + if (_error->PendingError() == true) + return false; + if (TargetFl == 0) + return _error->Errno("fdopen","Failed to reopen fd"); + + // Setup the progress meter + if(Progress) + Progress->OverallProgress(CurrentSize,TotalSize,FileSize, + string("Reading Translation Indexes")); + + // Parse + if(Progress) + Progress->SubProgress(Pkg.Size()); + pkgTagSection Section; + this->Section = &Section; + string Prefix; + unsigned long Hits = 0; + unsigned long Chop = 0; + while (Parser.Step(Section) == true) + { + if(Progress) + Progress->Progress(Parser.Offset()); + + const char *Start; + const char *Stop; + Section.GetSection(Start,Stop); + fwrite(Start,Stop-Start, 1, TargetFl); + fputc('\n',TargetFl); + + Packages++; + Hits++; + } + fclose(TargetFl); + + if (Debug == true) + cout << " Processed by using Prefix '" << Prefix << "' and chop " << Chop << endl; + + if (_config->FindB("APT::CDROM::NoAct",false) == false) + { + // Move out of the partial directory + Target.Close(); + string FinalF = _config->FindDir("Dir::State::lists"); + FinalF += URItoFileName(S); + if (rename(TargetF.c_str(),FinalF.c_str()) != 0) + return _error->Errno("rename","Failed to rename"); + } + + + CurrentSize += FileSize; + } + if(Progress) + Progress->Done(); + + // Some stats + if(log) { + stringstream msg; + if(NotFound == 0 && WrongSize == 0) + ioprintf(msg, _("Wrote %i records.\n"), Packages); + else if (NotFound != 0 && WrongSize == 0) + ioprintf(msg, _("Wrote %i records with %i missing files.\n"), + Packages, NotFound); + else if (NotFound == 0 && WrongSize != 0) + ioprintf(msg, _("Wrote %i records with %i mismatched files\n"), + Packages, WrongSize); + if (NotFound != 0 && WrongSize != 0) + ioprintf(msg, _("Wrote %i records with %i missing files and %i mismatched files\n"), Packages, NotFound, WrongSize); + } + + if (Packages == 0) + _error->Warning("No valid records were found."); + + if (NotFound + WrongSize > 10) + _error->Warning("Alot of entries were discarded, something may be wrong.\n"); + + + return true; +} diff --git a/apt-pkg/indexcopy.h b/apt-pkg/indexcopy.h index 4dcb2b46d..7778ae595 100644 --- a/apt-pkg/indexcopy.h +++ b/apt-pkg/indexcopy.h @@ -70,6 +70,17 @@ class SourceCopy : public IndexCopy public: }; +class TranslationsCopy +{ + protected: + pkgTagSection *Section; + + public: + bool CopyTranslations(string CDROM,string Name,vector<string> &List, + pkgCdromStatus *log); +}; + + class SigVerify { bool Verify(string prefix,string file, indexRecords *records); @@ -81,4 +92,6 @@ class SigVerify vector<string> PkgList,vector<string> SrcList); }; + + #endif diff --git a/apt-pkg/indexfile.cc b/apt-pkg/indexfile.cc index 49665161d..bb2210bf6 100644 --- a/apt-pkg/indexfile.cc +++ b/apt-pkg/indexfile.cc @@ -12,8 +12,11 @@ #pragma implementation "apt-pkg/indexfile.h" #endif +#include <apt-pkg/configuration.h> #include <apt-pkg/indexfile.h> #include <apt-pkg/error.h> + +#include <clocale> /*}}}*/ // Global list of Item supported @@ -67,3 +70,63 @@ string pkgIndexFile::SourceInfo(pkgSrcRecords::Parser const &Record, return string(); } /*}}}*/ +// IndexFile::TranslationsAvailable - Check if will use Translation /*{{{*/ +// --------------------------------------------------------------------- +/* */ +bool pkgIndexFile::TranslationsAvailable() +{ + const string Translation = _config->Find("APT::Acquire::Translation"); + + if (Translation.compare("none") != 0) + return CheckLanguageCode(LanguageCode().c_str()); + else + return false; +} + /*}}}*/ +// IndexFile::CheckLanguageCode - Check the Language Code /*{{{*/ +// --------------------------------------------------------------------- +/* */ +/* common cases: de_DE, de_DE@euro, de_DE.UTF-8, de_DE.UTF-8@euro, + de_DE.ISO8859-1, tig_ER + more in /etc/gdm/locale.conf +*/ + +bool pkgIndexFile::CheckLanguageCode(const char *Lang) +{ + if (strlen(Lang) == 2 || (strlen(Lang) == 5 && Lang[2] == '_')) + return true; + + if (strcmp(Lang,"C") != 0) + _error->Warning("Wrong language code %s", Lang); + + return false; +} + /*}}}*/ +// IndexFile::LanguageCode - Return the Language Code /*{{{*/ +// --------------------------------------------------------------------- +/* return the language code */ +string pkgIndexFile::LanguageCode() +{ + const string Translation = _config->Find("APT::Acquire::Translation"); + + if (Translation.compare("environment") == 0) + { + string lang = std::setlocale(LC_MESSAGES,NULL); + + // we have a mapping of the language codes that contains all the language + // codes that need the country code as well + // (like pt_BR, pt_PT, sv_SE, zh_*, en_*) + char *need_full_langcode[] = { "pt","sv","zh","en", NULL }; + for(char **s = need_full_langcode;*s != NULL; s++) + if(lang.find(*s) == 0) + return lang.substr(0,5); + + if(lang.size() > 2) + return lang.substr(0,2); + else + return lang; + } + else + return Translation; +} + /*}}}*/ diff --git a/apt-pkg/indexfile.h b/apt-pkg/indexfile.h index 61049f4bd..3cc501629 100644 --- a/apt-pkg/indexfile.h +++ b/apt-pkg/indexfile.h @@ -5,10 +5,11 @@ Index File - Abstraction for an index of archive/source file. - There are 3 primary sorts of index files, all represented by this + There are 4 primary sorts of index files, all represented by this class: Binary index files + Binary translation files Bianry index files decribing the local system Source index files @@ -21,9 +22,6 @@ #ifndef PKGLIB_INDEXFILE_H #define PKGLIB_INDEXFILE_H -#ifdef __GNUG__ -#pragma interface "apt-pkg/indexfile.h" -#endif #include <string> #include <apt-pkg/pkgcache.h> @@ -80,6 +78,10 @@ class pkgIndexFile virtual bool MergeFileProvides(pkgCacheGenerator &/*Gen*/,OpProgress &/*Prog*/) const {return true;}; virtual pkgCache::PkgFileIterator FindInCache(pkgCache &Cache) const; + static bool TranslationsAvailable(); + static bool CheckLanguageCode(const char *Lang); + static string LanguageCode(); + bool IsTrusted() const { return Trusted; }; pkgIndexFile(bool Trusted): Trusted(Trusted) {}; diff --git a/apt-pkg/indexrecords.h b/apt-pkg/indexrecords.h index 414faceaa..ac0df470c 100644 --- a/apt-pkg/indexrecords.h +++ b/apt-pkg/indexrecords.h @@ -5,9 +5,7 @@ #ifndef PKGLIB_INDEXRECORDS_H #define PKGLIB_INDEXRECORDS_H -#ifdef __GNUG__ -#pragma interface "apt-pkg/indexrecords.h" -#endif + #include <apt-pkg/pkgcache.h> #include <apt-pkg/fileutl.h> diff --git a/apt-pkg/init.cc b/apt-pkg/init.cc index b47378d4a..579a19ab9 100644 --- a/apt-pkg/init.cc +++ b/apt-pkg/init.cc @@ -40,6 +40,8 @@ bool pkgInitConfig(Configuration &Cnf) else Cnf.Set("APT::Architecture",COMMON_OS "-" COMMON_CPU); Cnf.Set("APT::Build-Essential::", "build-essential"); + Cnf.Set("APT::Install-Recommends", false); + Cnf.Set("APT::Install-Suggests", false); Cnf.Set("Dir","/"); // State @@ -102,6 +104,9 @@ bool pkgInitConfig(Configuration &Cnf) bindtextdomain(textdomain(0),Cnf.FindDir("Dir::Locale").c_str()); } #endif + + // Translation + Cnf.Set("APT::Acquire::Translation", "environment"); return true; } diff --git a/apt-pkg/init.h b/apt-pkg/init.h index 8255b406a..bc0e55036 100644 --- a/apt-pkg/init.h +++ b/apt-pkg/init.h @@ -17,8 +17,8 @@ #include <apt-pkg/pkgsystem.h> // See the makefile -#define APT_PKG_MAJOR 3 -#define APT_PKG_MINOR 11 +#define APT_PKG_MAJOR 4 +#define APT_PKG_MINOR 4 #define APT_PKG_RELEASE 0 extern const char *pkgVersion; diff --git a/apt-pkg/makefile b/apt-pkg/makefile index 7e5feae53..df9954f67 100644 --- a/apt-pkg/makefile +++ b/apt-pkg/makefile @@ -13,7 +13,7 @@ include ../buildlib/defaults.mak # methods/makefile - FIXME LIBRARY=apt-pkg LIBEXT=$(GLIBC_VER)$(LIBSTDCPP_VER) -MAJOR=3.11 +MAJOR=4.4 MINOR=0 SLIBS=$(PTHREADLIB) $(INTLLIBS) APT_DOMAIN:=libapt-pkg$(MAJOR) diff --git a/apt-pkg/metaindex.h b/apt-pkg/metaindex.h index 8ebf23541..2b87d7da9 100644 --- a/apt-pkg/metaindex.h +++ b/apt-pkg/metaindex.h @@ -1,9 +1,6 @@ #ifndef PKGLIB_METAINDEX_H #define PKGLIB_METAINDEX_H -/* #ifdef __GNUG__ */ -/* #pragma interface "apt-pkg/metaindex.h" */ -/* #endif */ #include <string> #include <apt-pkg/pkgcache.h> diff --git a/apt-pkg/orderlist.cc b/apt-pkg/orderlist.cc index 8d3a97983..61d8d914e 100644 --- a/apt-pkg/orderlist.cc +++ b/apt-pkg/orderlist.cc @@ -491,11 +491,13 @@ bool pkgOrderList::VisitProvides(DepIterator D,bool Critical) continue; if (D->Type != pkgCache::Dep::Conflicts && + D->Type != pkgCache::Dep::DpkgBreaks && D->Type != pkgCache::Dep::Obsoletes && Cache[Pkg].InstallVer != *I) continue; if ((D->Type == pkgCache::Dep::Conflicts || + D->Type == pkgCache::Dep::DpkgBreaks || D->Type == pkgCache::Dep::Obsoletes) && (Version *)Pkg.CurrentVer() != *I) continue; @@ -630,6 +632,7 @@ bool pkgOrderList::DepUnPackCrit(DepIterator D) /* Forward critical dependencies MUST be correct before the package can be unpacked. */ if (D->Type != pkgCache::Dep::Conflicts && + D->Type != pkgCache::Dep::DpkgBreaks && D->Type != pkgCache::Dep::Obsoletes && D->Type != pkgCache::Dep::PreDepends) continue; @@ -668,7 +671,7 @@ bool pkgOrderList::DepUnPackCrit(DepIterator D) } return true; } - /*}}}*/ + // OrderList::DepUnPackPreD - Critical UnPacking ordering with depends /*{{{*/ // --------------------------------------------------------------------- /* Critical PreDepends (also configure immediate and essential) strives to @@ -803,9 +806,20 @@ bool pkgOrderList::DepUnPackDep(DepIterator D) return false; } else + { if (D->Type == pkgCache::Dep::Depends) if (VisitProvides(D,false) == false) return false; + + if (D->Type == pkgCache::Dep::DpkgBreaks) + { + if (CheckDep(D) == true) + continue; + + if (VisitNode(D.TargetPkg()) == false) + return false; + } + } } return true; } @@ -953,6 +967,7 @@ bool pkgOrderList::CheckDep(DepIterator D) /* Conflicts requires that all versions are not present, depends just needs one */ if (D->Type != pkgCache::Dep::Conflicts && + D->Type != pkgCache::Dep::DpkgBreaks && D->Type != pkgCache::Dep::Obsoletes) { /* Try to find something that does not have the after flag set diff --git a/apt-pkg/orderlist.h b/apt-pkg/orderlist.h index d13301bcf..bbceb3879 100644 --- a/apt-pkg/orderlist.h +++ b/apt-pkg/orderlist.h @@ -16,9 +16,6 @@ #ifndef PKGLIB_ORDERLIST_H #define PKGLIB_ORDERLIST_H -#ifdef __GNUG__ -#pragma interface "apt-pkg/orderlist.h" -#endif #include <apt-pkg/pkgcache.h> diff --git a/apt-pkg/packagemanager.cc b/apt-pkg/packagemanager.cc index 4b3dd8be2..1e57d6455 100644 --- a/apt-pkg/packagemanager.cc +++ b/apt-pkg/packagemanager.cc @@ -95,9 +95,10 @@ bool pkgPackageManager::GetArchives(pkgAcquire *Owner,pkgSourceList *Sources, be downloaded. */ bool pkgPackageManager::FixMissing() { + pkgDepCache::ActionGroup group(Cache); pkgProblemResolver Resolve(&Cache); List->SetFileList(FileNames); - + bool Bad = false; for (PkgIterator I = Cache.PkgBegin(); I.end() == false; I++) { @@ -106,7 +107,7 @@ bool pkgPackageManager::FixMissing() // Okay, this file is missing and we need it. Mark it for keep Bad = true; - Cache.MarkKeep(I); + Cache.MarkKeep(I, false, false); } // We have to empty the list otherwise it will not have the new changes @@ -631,14 +632,11 @@ pkgPackageManager::OrderResult pkgPackageManager::OrderInstall() // --------------------------------------------------------------------- /* This uses the filenames in FileNames and the information in the DepCache to perform the installation of packages.*/ -pkgPackageManager::OrderResult pkgPackageManager::DoInstall(int status_fd) +pkgPackageManager::OrderResult pkgPackageManager::DoInstall(int statusFd) { - OrderResult Res = OrderInstall(); - if(Debug) - std::clog << "OrderInstall() returned: " << Res << std::endl; - if (Res != Failed) - if (Go(status_fd) == false) - return Failed; - return Res; + if(DoInstallPreFork() == Failed) + return Failed; + + return DoInstallPostFork(statusFd); } /*}}}*/ diff --git a/apt-pkg/packagemanager.h b/apt-pkg/packagemanager.h index f64637d03..53600fb61 100644 --- a/apt-pkg/packagemanager.h +++ b/apt-pkg/packagemanager.h @@ -23,12 +23,11 @@ #ifndef PKGLIB_PACKAGEMANAGER_H #define PKGLIB_PACKAGEMANAGER_H -#ifdef __GNUG__ -#pragma interface "apt-pkg/packagemanager.h" -#endif #include <string> +#include <iostream> #include <apt-pkg/pkgcache.h> +#include <apt-pkg/depcache.h> using std::string; @@ -70,13 +69,39 @@ class pkgPackageManager : protected pkgCache::Namespace virtual bool Remove(PkgIterator /*Pkg*/,bool /*Purge*/=false) {return false;}; virtual bool Go(int statusFd=-1) {return true;}; virtual void Reset() {}; - + + // the result of the operation + OrderResult Res; + public: // Main action members bool GetArchives(pkgAcquire *Owner,pkgSourceList *Sources, pkgRecords *Recs); - OrderResult DoInstall(int statusFd=-1); + + // Do the installation + OrderResult DoInstall(int statusFd=-1); + + // stuff that needs to be done before the fork() of a library that + // uses apt + OrderResult DoInstallPreFork() { + Res = OrderInstall(); + return Res; + }; + + // stuff that needs to be done after the fork + OrderResult DoInstallPostFork(int statusFd=-1) { + bool goResult = Go(statusFd); + if(goResult == false) + return Failed; + + // if all was fine update the state file + if(Res == Completed) { + Cache.writeStateFile(NULL); + } + return Res; + }; + bool FixMissing(); pkgPackageManager(pkgDepCache *Cache); diff --git a/apt-pkg/pkgcache.cc b/apt-pkg/pkgcache.cc index 9926befe9..7e3b9d78c 100644 --- a/apt-pkg/pkgcache.cc +++ b/apt-pkg/pkgcache.cc @@ -20,12 +20,8 @@ ##################################################################### */ /*}}}*/ // Include Files /*{{{*/ -#ifdef __GNUG__ -#pragma implementation "apt-pkg/pkgcache.h" -#pragma implementation "apt-pkg/cacheiterators.h" -#endif - #include <apt-pkg/pkgcache.h> +#include <apt-pkg/indexfile.h> #include <apt-pkg/version.h> #include <apt-pkg/error.h> #include <apt-pkg/strutl.h> @@ -43,6 +39,7 @@ using std::string; + // Cache::Header::Header - Constructor /*{{{*/ // --------------------------------------------------------------------- /* Simply initialize the header */ @@ -52,7 +49,7 @@ pkgCache::Header::Header() /* Whenever the structures change the major version should be bumped, whenever the generator changes the minor version should be bumped. */ - MajorVersion = 4; + MajorVersion = 6; MinorVersion = 0; Dirty = false; @@ -60,17 +57,22 @@ pkgCache::Header::Header() PackageSz = sizeof(pkgCache::Package); PackageFileSz = sizeof(pkgCache::PackageFile); VersionSz = sizeof(pkgCache::Version); + DescriptionSz = sizeof(pkgCache::Description); DependencySz = sizeof(pkgCache::Dependency); ProvidesSz = sizeof(pkgCache::Provides); VerFileSz = sizeof(pkgCache::VerFile); + DescFileSz = sizeof(pkgCache::DescFile); PackageCount = 0; VersionCount = 0; + DescriptionCount = 0; DependsCount = 0; PackageFileCount = 0; VerFileCount = 0; + DescFileCount = 0; ProvidesCount = 0; MaxVerFileSize = 0; + MaxDescFileSize = 0; FileList = 0; StringList = 0; @@ -89,8 +91,10 @@ bool pkgCache::Header::CheckSizes(Header &Against) const PackageSz == Against.PackageSz && PackageFileSz == Against.PackageFileSz && VersionSz == Against.VersionSz && + DescriptionSz == Against.DescriptionSz && DependencySz == Against.DependencySz && VerFileSz == Against.VerFileSz && + DescFileSz == Against.DescFileSz && ProvidesSz == Against.ProvidesSz) return true; return false; @@ -115,8 +119,10 @@ bool pkgCache::ReMap() HeaderP = (Header *)Map.Data(); PkgP = (Package *)Map.Data(); VerFileP = (VerFile *)Map.Data(); + DescFileP = (DescFile *)Map.Data(); PkgFileP = (PackageFile *)Map.Data(); VerP = (Version *)Map.Data(); + DescP = (Description *)Map.Data(); ProvideP = (Provides *)Map.Data(); DepP = (Dependency *)Map.Data(); StringItemP = (StringItem *)Map.Data(); @@ -217,8 +223,8 @@ const char *pkgCache::DepType(unsigned char Type) { const char *Types[] = {"",_("Depends"),_("PreDepends"),_("Suggests"), _("Recommends"),_("Conflicts"),_("Replaces"), - _("Obsoletes")}; - if (Type < 8) + _("Obsoletes"),_("Breaks")}; + if (Type < sizeof(Types)/sizeof(*Types)) return Types[Type]; return ""; } @@ -235,11 +241,11 @@ const char *pkgCache::Priority(unsigned char Prio) return 0; } /*}}}*/ - // Bases for iterator classes /*{{{*/ void pkgCache::VerIterator::_dummy() {} void pkgCache::DepIterator::_dummy() {} void pkgCache::PrvIterator::_dummy() {} +void pkgCache::DescIterator::_dummy() {} /*}}}*/ // PkgIterator::operator ++ - Postfix incr /*{{{*/ // --------------------------------------------------------------------- @@ -281,10 +287,11 @@ pkgCache::PkgIterator::OkState pkgCache::PkgIterator::State() const // DepIterator::IsCritical - Returns true if the dep is important /*{{{*/ // --------------------------------------------------------------------- /* Currently critical deps are defined as depends, predepends and - conflicts. */ + conflicts (including dpkg's Breaks fields). */ bool pkgCache::DepIterator::IsCritical() { if (Dep->Type == pkgCache::Dep::Conflicts || + Dep->Type == pkgCache::Dep::DpkgBreaks || Dep->Type == pkgCache::Dep::Obsoletes || Dep->Type == pkgCache::Dep::Depends || Dep->Type == pkgCache::Dep::PreDepends) @@ -370,6 +377,7 @@ pkgCache::Version **pkgCache::DepIterator::AllTargets() continue; if ((Dep->Type == pkgCache::Dep::Conflicts || + Dep->Type == pkgCache::Dep::DpkgBreaks || Dep->Type == pkgCache::Dep::Obsoletes) && ParentPkg() == I.ParentPkg()) continue; @@ -386,6 +394,7 @@ pkgCache::Version **pkgCache::DepIterator::AllTargets() continue; if ((Dep->Type == pkgCache::Dep::Conflicts || + Dep->Type == pkgCache::Dep::DpkgBreaks || Dep->Type == pkgCache::Dep::Obsoletes) && ParentPkg() == I.OwnerPkg()) continue; @@ -599,3 +608,20 @@ string pkgCache::PkgFileIterator::RelStr() return Res; } /*}}}*/ +// VerIterator::TranslatedDescription - Return the a DescIter for locale/*{{{*/ +// --------------------------------------------------------------------- +/* return a DescIter for the current locale or the default if none is + * found + */ +pkgCache::DescIterator pkgCache::VerIterator::TranslatedDescription() const +{ + pkgCache::DescIterator DescDefault = DescriptionList(); + pkgCache::DescIterator Desc = DescDefault; + for (; Desc.end() == false; Desc++) + if (pkgIndexFile::LanguageCode() == Desc.LanguageCode()) + break; + if (Desc.end() == true) Desc = DescDefault; + return Desc; +}; + + /*}}}*/ diff --git a/apt-pkg/pkgcache.h b/apt-pkg/pkgcache.h index 587d97534..83b7548a3 100644 --- a/apt-pkg/pkgcache.h +++ b/apt-pkg/pkgcache.h @@ -19,9 +19,6 @@ #ifndef PKGLIB_PKGCACHE_H #define PKGLIB_PKGCACHE_H -#ifdef __GNUG__ -#pragma interface "apt-pkg/pkgcache.h" -#endif #include <string> #include <time.h> @@ -38,32 +35,42 @@ class pkgCache struct Package; struct PackageFile; struct Version; + struct Description; struct Provides; struct Dependency; struct StringItem; struct VerFile; + struct DescFile; // Iterators class PkgIterator; class VerIterator; + class DescIterator; class DepIterator; class PrvIterator; class PkgFileIterator; class VerFileIterator; + class DescFileIterator; friend class PkgIterator; friend class VerIterator; + friend class DescInterator; friend class DepIterator; friend class PrvIterator; friend class PkgFileIterator; friend class VerFileIterator; + friend class DescFileIterator; class Namespace; // These are all the constants used in the cache structures + + // WARNING - if you change these lists you must also edit + // the stringification in pkgcache.cc and also consider whether + // the cache file will become incompatible. struct Dep { enum DepType {Depends=1,PreDepends=2,Suggests=3,Recommends=4, - Conflicts=5,Replaces=6,Obsoletes=7}; + Conflicts=5,Replaces=6,Obsoletes=7,DpkgBreaks=8}; enum DepCompareOp {Or=0x10,NoOp=0,LessEq=0x1,GreaterEq=0x2,Less=0x3, Greater=0x4,Equals=0x5,NotEquals=0x6}; }; @@ -98,8 +105,10 @@ class pkgCache Header *HeaderP; Package *PkgP; VerFile *VerFileP; + DescFile *DescFileP; PackageFile *PkgFileP; Version *VerP; + Description *DescP; Provides *ProvideP; Dependency *DepP; StringItem *StringItemP; @@ -151,16 +160,20 @@ struct pkgCache::Header unsigned short PackageSz; unsigned short PackageFileSz; unsigned short VersionSz; + unsigned short DescriptionSz; unsigned short DependencySz; unsigned short ProvidesSz; unsigned short VerFileSz; + unsigned short DescFileSz; // Structure counts unsigned long PackageCount; unsigned long VersionCount; + unsigned long DescriptionCount; unsigned long DependsCount; unsigned long PackageFileCount; unsigned long VerFileCount; + unsigned long DescFileCount; unsigned long ProvidesCount; // Offsets @@ -169,10 +182,11 @@ struct pkgCache::Header map_ptrloc VerSysName; // StringTable map_ptrloc Architecture; // StringTable unsigned long MaxVerFileSize; + unsigned long MaxDescFileSize; /* Allocation pools, there should be one of these for each structure excluding the header */ - DynamicMMap::Pool Pools[7]; + DynamicMMap::Pool Pools[8]; // Rapid package name lookup map_ptrloc HashTable[2*1048]; @@ -193,7 +207,7 @@ struct pkgCache::Package map_ptrloc NextPackage; // Package map_ptrloc RevDepends; // Dependency map_ptrloc ProvidesList; // Provides - + // Install/Remove/Purge etc unsigned char SelectedState; // What unsigned char InstState; // Flags @@ -232,6 +246,14 @@ struct pkgCache::VerFile unsigned short Size; }; +struct pkgCache::DescFile +{ + map_ptrloc File; // PackageFile + map_ptrloc NextFile; // PkgVerFile + map_ptrloc Offset; // File offset + unsigned short Size; +}; + struct pkgCache::Version { map_ptrloc VerStr; // Stringtable @@ -241,6 +263,7 @@ struct pkgCache::Version // Lists map_ptrloc FileList; // VerFile map_ptrloc NextVer; // Version + map_ptrloc DescriptionList; // Description map_ptrloc DependsList; // Dependency map_ptrloc ParentPkg; // Package map_ptrloc ProvidesList; // Provides @@ -252,6 +275,22 @@ struct pkgCache::Version unsigned char Priority; }; +struct pkgCache::Description +{ + // Language Code store the description translation language code. If + // the value has a 0 lenght then this is readed using the Package + // file else the Translation-CODE are used. + map_ptrloc language_code; // StringTable + map_ptrloc md5sum; // StringTable + + // Linked list + map_ptrloc FileList; // DescFile + map_ptrloc NextDesc; // Description + map_ptrloc ParentPkg; // Package + + unsigned short ID; +}; + struct pkgCache::Dependency { map_ptrloc Version; // Stringtable @@ -299,11 +338,13 @@ class pkgCache::Namespace typedef pkgCache::PkgIterator PkgIterator; typedef pkgCache::VerIterator VerIterator; + typedef pkgCache::DescIterator DescIterator; typedef pkgCache::DepIterator DepIterator; typedef pkgCache::PrvIterator PrvIterator; typedef pkgCache::PkgFileIterator PkgFileIterator; typedef pkgCache::VerFileIterator VerFileIterator; typedef pkgCache::Version Version; + typedef pkgCache::Description Description; typedef pkgCache::Package Package; typedef pkgCache::Header Header; typedef pkgCache::Dep Dep; diff --git a/apt-pkg/pkgcachegen.cc b/apt-pkg/pkgcachegen.cc index de854bee5..8ec6a1719 100644 --- a/apt-pkg/pkgcachegen.cc +++ b/apt-pkg/pkgcachegen.cc @@ -26,6 +26,8 @@ #include <apt-pkg/sptr.h> #include <apt-pkg/pkgsystem.h> +#include <apt-pkg/tagfile.h> + #include <apti18n.h> #include <vector> @@ -125,16 +127,46 @@ bool pkgCacheGenerator::MergeList(ListParser &List, string Version = List.Version(); if (Version.empty() == true) { + // we first process the package, then the descriptions + // (this has the bonus that we get MMap error when we run out + // of MMap space) if (List.UsePackage(Pkg,pkgCache::VerIterator(Cache)) == false) return _error->Error(_("Error occurred while processing %s (UsePackage1)"), PackageName.c_str()); + + // Find the right version to write the description + MD5SumValue CurMd5 = List.Description_md5(); + pkgCache::VerIterator Ver = Pkg.VersionList(); + map_ptrloc *LastVer = &Pkg->VersionList; + + for (; Ver.end() == false; LastVer = &Ver->NextVer, Ver++) + { + pkgCache::DescIterator Desc = Ver.DescriptionList(); + map_ptrloc *LastDesc = &Ver->DescriptionList; + + for (; Desc.end() == false; LastDesc = &Desc->NextDesc, Desc++) + { + + if (MD5SumValue(Desc.md5()) == CurMd5) + { + // Add new description + *LastDesc = NewDescription(Desc, List.DescriptionLanguage(), CurMd5, *LastDesc); + Desc->ParentPkg = Pkg.Index(); + + if (NewFileDesc(Desc,List) == false) + return _error->Error(_("Error occured while processing %s (NewFileDesc1)"),PackageName.c_str()); + break; + } + } + } + continue; } pkgCache::VerIterator Ver = Pkg.VersionList(); - map_ptrloc *Last = &Pkg->VersionList; + map_ptrloc *LastVer = &Pkg->VersionList; int Res = 1; - for (; Ver.end() == false; Last = &Ver->NextVer, Ver++) + for (; Ver.end() == false; LastVer = &Ver->NextVer, Ver++) { Res = Cache.VS->CmpVersion(Version,Ver.VerStr()); if (Res >= 0) @@ -168,7 +200,7 @@ bool pkgCacheGenerator::MergeList(ListParser &List, // Skip to the end of the same version set. if (Res == 0) { - for (; Ver.end() == false; Last = &Ver->NextVer, Ver++) + for (; Ver.end() == false; LastVer = &Ver->NextVer, Ver++) { Res = Cache.VS->CmpVersion(Version,Ver.VerStr()); if (Res != 0) @@ -177,9 +209,10 @@ bool pkgCacheGenerator::MergeList(ListParser &List, } // Add a new version - *Last = NewVersion(Ver,Version,*Last); + *LastVer = NewVersion(Ver,Version,*LastVer); Ver->ParentPkg = Pkg.Index(); Ver->Hash = Hash; + if (List.NewVersion(Ver) == false) return _error->Error(_("Error occurred while processing %s (NewVersion1)"), PackageName.c_str()); @@ -199,6 +232,21 @@ bool pkgCacheGenerator::MergeList(ListParser &List, FoundFileDeps |= List.HasFileDeps(); return true; } + + /* Record the Description data. Description data always exist in + Packages and Translation-* files. */ + pkgCache::DescIterator Desc = Ver.DescriptionList(); + map_ptrloc *LastDesc = &Ver->DescriptionList; + + // Skip to the end of description set + for (; Desc.end() == false; LastDesc = &Desc->NextDesc, Desc++); + + // Add new description + *LastDesc = NewDescription(Desc, List.DescriptionLanguage(), List.Description_md5(), *LastDesc); + Desc->ParentPkg = Pkg.Index(); + + if (NewFileDesc(Desc,List) == false) + return _error->Error(_("Error occured while processing %s (NewFileDesc2)"),PackageName.c_str()); } FoundFileDeps |= List.HasFileDeps(); @@ -209,6 +257,9 @@ bool pkgCacheGenerator::MergeList(ListParser &List, if (Cache.HeaderP->VersionCount >= (1ULL<<(sizeof(Cache.VerP->ID)*8))-1) return _error->Error(_("Wow, you exceeded the number of versions " "this APT is capable of.")); + if (Cache.HeaderP->DescriptionCount >= (1ULL<<(sizeof(Cache.DescP->ID)*8))-1) + return _error->Error(_("Wow, you exceeded the number of descriptions " + "this APT is capable of.")); if (Cache.HeaderP->DependsCount >= (1ULL<<(sizeof(Cache.DepP->ID)*8))-1ULL) return _error->Error(_("Wow, you exceeded the number of dependencies " "this APT is capable of.")); @@ -271,7 +322,7 @@ bool pkgCacheGenerator::NewPackage(pkgCache::PkgIterator &Pkg,const string &Name Pkg = Cache.FindPkg(Name); if (Pkg.end() == false) return true; - + // Get a structure unsigned long Package = Map.Allocate(sizeof(pkgCache::Package)); if (Package == 0) @@ -349,6 +400,62 @@ unsigned long pkgCacheGenerator::NewVersion(pkgCache::VerIterator &Ver, return Version; } /*}}}*/ +// CacheGenerator::NewFileDesc - Create a new File<->Desc association /*{{{*/ +// --------------------------------------------------------------------- +/* */ +bool pkgCacheGenerator::NewFileDesc(pkgCache::DescIterator &Desc, + ListParser &List) +{ + if (CurrentFile == 0) + return true; + + // Get a structure + unsigned long DescFile = Map.Allocate(sizeof(pkgCache::DescFile)); + if (DescFile == 0) + return 0; + + pkgCache::DescFileIterator DF(Cache,Cache.DescFileP + DescFile); + DF->File = CurrentFile - Cache.PkgFileP; + + // Link it to the end of the list + map_ptrloc *Last = &Desc->FileList; + for (pkgCache::DescFileIterator D = Desc.FileList(); D.end() == false; D++) + Last = &D->NextFile; + + DF->NextFile = *Last; + *Last = DF.Index(); + + DF->Offset = List.Offset(); + DF->Size = List.Size(); + if (Cache.HeaderP->MaxDescFileSize < DF->Size) + Cache.HeaderP->MaxDescFileSize = DF->Size; + Cache.HeaderP->DescFileCount++; + + return true; +} + /*}}}*/ +// CacheGenerator::NewDescription - Create a new Description /*{{{*/ +// --------------------------------------------------------------------- +/* This puts a description structure in the linked list */ +map_ptrloc pkgCacheGenerator::NewDescription(pkgCache::DescIterator &Desc, + const string &Lang, const MD5SumValue &md5sum, + map_ptrloc Next) +{ + // Get a structure + map_ptrloc Description = Map.Allocate(sizeof(pkgCache::Description)); + if (Description == 0) + return 0; + + // Fill it in + Desc = pkgCache::DescIterator(Cache,Cache.DescP + Description); + Desc->NextDesc = Next; + Desc->ID = Cache.HeaderP->DescriptionCount++; + Desc->language_code = Map.WriteString(Lang); + Desc->md5sum = Map.WriteString(md5sum.Value()); + + return Description; +} + /*}}}*/ // ListParser::NewDepends - Create a dependency element /*{{{*/ // --------------------------------------------------------------------- /* This creates a dependency element in the tree. It is linked to the @@ -571,8 +678,10 @@ static bool CheckValidity(const string &CacheFile, FileIterator Start, if ((*Start)->Exists() == false) { +#if 0 // mvo: we no longer give a message here (Default Sources spec) _error->WarningE("stat",_("Couldn't stat source package list %s"), (*Start)->Describe().c_str()); +#endif continue; } @@ -580,7 +689,7 @@ static bool CheckValidity(const string &CacheFile, FileIterator Start, pkgCache::PkgFileIterator File = (*Start)->FindInCache(Cache); if (File.end() == true) return false; - + Visited[File->ID] = true; } @@ -676,7 +785,7 @@ static bool BuildCache(pkgCacheGenerator &Gen, bool pkgMakeStatusCache(pkgSourceList &List,OpProgress &Progress, MMap **OutMap,bool AllowMem) { - unsigned long MapSize = _config->FindI("APT::Cache-Limit",12*1024*1024); + unsigned long MapSize = _config->FindI("APT::Cache-Limit",16*1024*1024); vector<pkgIndexFile *> Files; for (vector<metaIndex *>::const_iterator i = List.begin(); @@ -823,7 +932,7 @@ bool pkgMakeStatusCache(pkgSourceList &List,OpProgress &Progress, /* */ bool pkgMakeOnlyStatusCache(OpProgress &Progress,DynamicMMap **OutMap) { - unsigned long MapSize = _config->FindI("APT::Cache-Limit",8*1024*1024); + unsigned long MapSize = _config->FindI("APT::Cache-Limit",12*1024*1024); vector<pkgIndexFile *> Files; unsigned long EndOfSource = Files.size(); if (_system->AddStatusFiles(Files) == false) diff --git a/apt-pkg/pkgcachegen.h b/apt-pkg/pkgcachegen.h index 9a729eea4..a47b097b3 100644 --- a/apt-pkg/pkgcachegen.h +++ b/apt-pkg/pkgcachegen.h @@ -19,11 +19,9 @@ #ifndef PKGLIB_PKGCACHEGEN_H #define PKGLIB_PKGCACHEGEN_H -#ifdef __GNUG__ -#pragma interface "apt-pkg/pkgcachegen.h" -#endif #include <apt-pkg/pkgcache.h> +#include <apt-pkg/md5.h> class pkgSourceList; class OpProgress; @@ -55,7 +53,9 @@ class pkgCacheGenerator bool NewPackage(pkgCache::PkgIterator &Pkg,const string &Pkg); bool NewFileVer(pkgCache::VerIterator &Ver,ListParser &List); + bool NewFileDesc(pkgCache::DescIterator &Desc,ListParser &List); unsigned long NewVersion(pkgCache::VerIterator &Ver,const string &VerStr,unsigned long Next); + map_ptrloc NewDescription(pkgCache::DescIterator &Desc,const string &Lang,const MD5SumValue &md5sum,map_ptrloc Next); public: @@ -108,6 +108,9 @@ class pkgCacheGenerator::ListParser virtual string Package() = 0; virtual string Version() = 0; virtual bool NewVersion(pkgCache::VerIterator Ver) = 0; + virtual string Description() = 0; + virtual string DescriptionLanguage() = 0; + virtual MD5SumValue Description_md5() = 0; virtual unsigned short VersionHash() = 0; virtual bool UsePackage(pkgCache::PkgIterator Pkg, pkgCache::VerIterator Ver) = 0; diff --git a/apt-pkg/pkgrecords.cc b/apt-pkg/pkgrecords.cc index 9c2655d6a..b22f3e73f 100644 --- a/apt-pkg/pkgrecords.cc +++ b/apt-pkg/pkgrecords.cc @@ -63,3 +63,12 @@ pkgRecords::Parser &pkgRecords::Lookup(pkgCache::VerFileIterator const &Ver) return *Files[Ver.File()->ID]; } /*}}}*/ +// Records::Lookup - Get a parser for the package description file /*{{{*/ +// --------------------------------------------------------------------- +/* */ +pkgRecords::Parser &pkgRecords::Lookup(pkgCache::DescFileIterator const &Desc) +{ + Files[Desc.File()->ID]->Jump(Desc); + return *Files[Desc.File()->ID]; +} + /*}}}*/ diff --git a/apt-pkg/pkgrecords.h b/apt-pkg/pkgrecords.h index 08f004414..21aa66322 100644 --- a/apt-pkg/pkgrecords.h +++ b/apt-pkg/pkgrecords.h @@ -17,9 +17,6 @@ #ifndef PKGLIB_PKGRECORDS_H #define PKGLIB_PKGRECORDS_H -#ifdef __GNUG__ -#pragma interface "apt-pkg/pkgrecords.h" -#endif #include <apt-pkg/pkgcache.h> #include <apt-pkg/fileutl.h> @@ -38,6 +35,7 @@ class pkgRecords // Lookup function Parser &Lookup(pkgCache::VerFileIterator const &Ver); + Parser &Lookup(pkgCache::DescFileIterator const &Desc); // Construct destruct pkgRecords(pkgCache &Cache); @@ -49,6 +47,7 @@ class pkgRecords::Parser protected: virtual bool Jump(pkgCache::VerFileIterator const &Ver) = 0; + virtual bool Jump(pkgCache::DescFileIterator const &Desc) = 0; public: friend class pkgRecords; diff --git a/apt-pkg/pkgsystem.h b/apt-pkg/pkgsystem.h index a7d555140..246762e0b 100644 --- a/apt-pkg/pkgsystem.h +++ b/apt-pkg/pkgsystem.h @@ -37,9 +37,6 @@ #ifndef PKGLIB_PKGSYSTEM_H #define PKGLIB_PKGSYSTEM_H -#ifdef __GNUG__ -#pragma interface "apt-pkg/pkgsystem.h" -#endif #include <apt-pkg/depcache.h> #include <vector> diff --git a/apt-pkg/policy.cc b/apt-pkg/policy.cc index d8b8825c2..35a50425b 100644 --- a/apt-pkg/policy.cc +++ b/apt-pkg/policy.cc @@ -36,6 +36,7 @@ #include <apti18n.h> #include <iostream> +#include <sstream> /*}}}*/ using namespace std; @@ -300,7 +301,13 @@ bool ReadPinFile(pkgPolicy &Plcy,string File) continue; } - Plcy.CreatePin(Type,Name,string(Word,End),priority); + istringstream s(Name); + string pkg; + while(!s.eof()) + { + s >> pkg; + Plcy.CreatePin(Type, pkg, string(Word,End),priority); + }; } Plcy.InitDefaults(); diff --git a/apt-pkg/policy.h b/apt-pkg/policy.h index 40ebd3f70..d5f3b2f75 100644 --- a/apt-pkg/policy.h +++ b/apt-pkg/policy.h @@ -33,9 +33,6 @@ #ifndef PKGLIB_POLICY_H #define PKGLIB_POLICY_H -#ifdef __GNUG__ -#pragma interface "apt-pkg/policy.h" -#endif #include <apt-pkg/depcache.h> #include <apt-pkg/versionmatch.h> diff --git a/apt-pkg/sourcelist.h b/apt-pkg/sourcelist.h index 123ae6984..b9e4389ed 100644 --- a/apt-pkg/sourcelist.h +++ b/apt-pkg/sourcelist.h @@ -35,9 +35,6 @@ using std::string; using std::vector; -#ifdef __GNUG__ -#pragma interface "apt-pkg/sourcelist.h" -#endif class pkgAquire; class pkgSourceList diff --git a/apt-pkg/srcrecords.h b/apt-pkg/srcrecords.h index 3e2112549..99cbc6060 100644 --- a/apt-pkg/srcrecords.h +++ b/apt-pkg/srcrecords.h @@ -13,9 +13,6 @@ #ifndef PKGLIB_SRCRECORDS_H #define PKGLIB_SRCRECORDS_H -#ifdef __GNUG__ -#pragma interface "apt-pkg/srcrecords.h" -#endif #include <string> #include <vector> diff --git a/apt-pkg/tagfile.cc b/apt-pkg/tagfile.cc index 223618cd1..649c93aee 100644 --- a/apt-pkg/tagfile.cc +++ b/apt-pkg/tagfile.cc @@ -423,6 +423,7 @@ static const char *iTFRewritePackageOrder[] = { "Recommends", "Suggests", "Conflicts", + "Breaks", "Conffiles", "Filename", "Size", diff --git a/apt-pkg/tagfile.h b/apt-pkg/tagfile.h index 70381ad13..05c6aa701 100644 --- a/apt-pkg/tagfile.h +++ b/apt-pkg/tagfile.h @@ -20,9 +20,6 @@ #ifndef PKGLIB_TAGFILE_H #define PKGLIB_TAGFILE_H -#ifdef __GNUG__ -#pragma interface "apt-pkg/tagfile.h" -#endif #include <apt-pkg/fileutl.h> #include <stdio.h> diff --git a/apt-pkg/vendor.h b/apt-pkg/vendor.h index 033bb96e8..2d39fd15f 100644 --- a/apt-pkg/vendor.h +++ b/apt-pkg/vendor.h @@ -4,9 +4,6 @@ #include <vector> #include <map> -#ifdef __GNUG__ -#pragma interface "apt-pkg/vendor.h" -#endif using std::string; diff --git a/apt-pkg/vendorlist.h b/apt-pkg/vendorlist.h index 7f96fc766..ff2f4ed5d 100644 --- a/apt-pkg/vendorlist.h +++ b/apt-pkg/vendorlist.h @@ -21,9 +21,6 @@ using std::string; using std::vector; -#ifdef __GNUG__ -#pragma interface "apt-pkg/vendorlist.h" -#endif class pkgVendorList { diff --git a/apt-pkg/version.h b/apt-pkg/version.h index 071dba3e2..49c53a93a 100644 --- a/apt-pkg/version.h +++ b/apt-pkg/version.h @@ -20,9 +20,6 @@ #ifndef PKGLIB_VERSION_H #define PKGLIB_VERSION_H -#ifdef __GNUG__ -#pragma interface "apt-pkg/version.h" -#endif #include <apt-pkg/strutl.h> #include <string> diff --git a/apt-pkg/versionmatch.h b/apt-pkg/versionmatch.h index 7ca39cbe8..fe264aa46 100644 --- a/apt-pkg/versionmatch.h +++ b/apt-pkg/versionmatch.h @@ -31,9 +31,6 @@ #ifndef PKGLIB_VERSIONMATCH_H #define PKGLIB_VERSIONMATCH_H -#ifdef __GNUG__ -#pragma interface "apt-pkg/versionmatch.h" -#endif #include <string> #include <apt-pkg/pkgcache.h> diff --git a/buildlib/environment.mak.in b/buildlib/environment.mak.in index f5ee539ac..2d28e1c67 100644 --- a/buildlib/environment.mak.in +++ b/buildlib/environment.mak.in @@ -28,6 +28,8 @@ INLINEDEPFLAG = -MD DEBIANDOC_HTML = @DEBIANDOC_HTML@ DEBIANDOC_TEXT = @DEBIANDOC_TEXT@ +DOXYGEN = @DOXYGEN@ + # SGML for the man pages DOCBOOK2MAN := @DOCBOOK2MAN@ diff --git a/cmdline/apt-cache.cc b/cmdline/apt-cache.cc index aea9ebeba..cc4c1559e 100644 --- a/cmdline/apt-cache.cc +++ b/cmdline/apt-cache.cc @@ -71,6 +71,12 @@ void LocalitySort(pkgCache::VerFile **begin, { qsort(begin,Count,Size,LocalityCompare); } + +void LocalitySort(pkgCache::DescFile **begin, + unsigned long Count,size_t Size) +{ + qsort(begin,Count,Size,LocalityCompare); +} /*}}}*/ // UnMet - Show unmet dependencies /*{{{*/ // --------------------------------------------------------------------- @@ -96,13 +102,15 @@ bool UnMet(CommandLine &CmdL) if (End->Type != pkgCache::Dep::PreDepends && End->Type != pkgCache::Dep::Depends && End->Type != pkgCache::Dep::Suggests && - End->Type != pkgCache::Dep::Recommends) + End->Type != pkgCache::Dep::Recommends && + End->Type != pkgCache::Dep::DpkgBreaks) continue; // Important deps only if (Important == true) if (End->Type != pkgCache::Dep::PreDepends && - End->Type != pkgCache::Dep::Depends) + End->Type != pkgCache::Dep::Depends && + End->Type != pkgCache::Dep::DpkgBreaks) continue; // Verify the or group @@ -182,7 +190,14 @@ bool DumpPackage(CommandLine &CmdL) { cout << Cur.VerStr(); for (pkgCache::VerFileIterator Vf = Cur.FileList(); Vf.end() == false; Vf++) - cout << "(" << Vf.File().FileName() << ")"; + cout << " (" << Vf.File().FileName() << ")"; + cout << endl; + for (pkgCache::DescIterator D = Cur.DescriptionList(); D.end() == false; D++) + { + cout << " Description Language: " << D.LanguageCode() << endl + << " File: " << D.FileList().File().FileName() << endl + << " MD5: " << D.md5() << endl; + } cout << endl; } @@ -277,11 +292,15 @@ bool Stats(CommandLine &Cmd) cout << _("Total distinct versions: ") << Cache.Head().VersionCount << " (" << SizeToStr(Cache.Head().VersionCount*Cache.Head().VersionSz) << ')' << endl; + cout << _("Total Distinct Descriptions: ") << Cache.Head().DescriptionCount << " (" << + SizeToStr(Cache.Head().DescriptionCount*Cache.Head().DescriptionSz) << ')' << endl; cout << _("Total dependencies: ") << Cache.Head().DependsCount << " (" << SizeToStr(Cache.Head().DependsCount*Cache.Head().DependencySz) << ')' << endl; cout << _("Total ver/file relations: ") << Cache.Head().VerFileCount << " (" << SizeToStr(Cache.Head().VerFileCount*Cache.Head().VerFileSz) << ')' << endl; + cout << _("Total Desc/File relations: ") << Cache.Head().DescFileCount << " (" << + SizeToStr(Cache.Head().DescFileCount*Cache.Head().DescFileSz) << ')' << endl; cout << _("Total Provides mappings: ") << Cache.Head().ProvidesCount << " (" << SizeToStr(Cache.Head().ProvidesCount*Cache.Head().ProvidesSz) << ')' << endl; @@ -344,6 +363,12 @@ bool Dump(CommandLine &Cmd) for (pkgCache::DepIterator D = V.DependsList(); D.end() == false; D++) cout << " Depends: " << D.TargetPkg().Name() << ' ' << DeNull(D.TargetVer()) << endl; + for (pkgCache::DescIterator D = V.DescriptionList(); D.end() == false; D++) + { + cout << " Description Language: " << D.LanguageCode() << endl + << " File: " << D.FileList().File().FileName() << endl + << " MD5: " << D.md5() << endl; + } } } @@ -846,6 +871,7 @@ bool XVcg(CommandLine &CmdL) then show the relation but do not recurse */ if (Hit == false && (D->Type == pkgCache::Dep::Conflicts || + D->Type == pkgCache::Dep::DpkgBreaks || D->Type == pkgCache::Dep::Obsoletes)) { if (Show[D.TargetPkg()->ID] == None && @@ -867,6 +893,9 @@ bool XVcg(CommandLine &CmdL) case pkgCache::Dep::Conflicts: printf("label: \"conflicts\" color: lightgreen }\n"); break; + case pkgCache::Dep::DpkgBreaks: + printf("label: \"breaks\" color: lightgreen }\n"); + break; case pkgCache::Dep::Obsoletes: printf("label: \"obsoletes\" color: lightgreen }\n"); break; @@ -1192,17 +1221,50 @@ bool DisplayRecord(pkgCache::VerIterator V) if (_error->PendingError() == true) return false; - // Read the record and then write it out again. + // Read the record unsigned char *Buffer = new unsigned char[GCache->HeaderP->MaxVerFileSize+1]; Buffer[V.FileList()->Size] = '\n'; if (PkgF.Seek(V.FileList()->Offset) == false || - PkgF.Read(Buffer,V.FileList()->Size) == false || - fwrite(Buffer,1,V.FileList()->Size+1,stdout) < (size_t)(V.FileList()->Size+1)) + PkgF.Read(Buffer,V.FileList()->Size) == false) { delete [] Buffer; return false; } - + + // Get a pointer to start of Description field + const unsigned char *DescP = (unsigned char*)strstr((char*)Buffer, "Description:"); + + // Write all but Description + if (fwrite(Buffer,1,DescP - Buffer,stdout) < (size_t)(DescP - Buffer)) + { + delete [] Buffer; + return false; + } + + // Show the right description + pkgRecords Recs(*GCache); + pkgCache::DescIterator Desc = V.TranslatedDescription(); + pkgRecords::Parser &P = Recs.Lookup(Desc.FileList()); + cout << "Description" << ( (strcmp(Desc.LanguageCode(),"") != 0) ? "-" : "" ) << Desc.LanguageCode() << ": " << P.LongDesc(); + + // Find the first field after the description (if there is any) + for(DescP++;DescP != &Buffer[V.FileList()->Size];DescP++) + { + if(*DescP == '\n' && *(DescP+1) != ' ') + { + // write the rest of the buffer + const unsigned char *end=&Buffer[V.FileList()->Size]; + if (fwrite(DescP,1,end-DescP,stdout) < (size_t)(end-DescP)) + { + delete [] Buffer; + return false; + } + + break; + } + } + // write a final newline (after the description) + cout<<endl; delete [] Buffer; return true; @@ -1211,9 +1273,9 @@ bool DisplayRecord(pkgCache::VerIterator V) // Search - Perform a search /*{{{*/ // --------------------------------------------------------------------- /* This searches the package names and pacakge descriptions for a pattern */ -struct ExVerFile +struct ExDescFile { - pkgCache::VerFile *Vf; + pkgCache::DescFile *Df; bool NameMatch; }; @@ -1253,35 +1315,35 @@ bool Search(CommandLine &CmdL) return false; } - ExVerFile *VFList = new ExVerFile[Cache.HeaderP->PackageCount+1]; - memset(VFList,0,sizeof(*VFList)*Cache.HeaderP->PackageCount+1); + ExDescFile *DFList = new ExDescFile[Cache.HeaderP->PackageCount+1]; + memset(DFList,0,sizeof(*DFList)*Cache.HeaderP->PackageCount+1); // Map versions that we want to write out onto the VerList array. for (pkgCache::PkgIterator P = Cache.PkgBegin(); P.end() == false; P++) { - VFList[P->ID].NameMatch = NumPatterns != 0; + DFList[P->ID].NameMatch = NumPatterns != 0; for (unsigned I = 0; I != NumPatterns; I++) { if (regexec(&Patterns[I],P.Name(),0,0,0) == 0) - VFList[P->ID].NameMatch &= true; + DFList[P->ID].NameMatch &= true; else - VFList[P->ID].NameMatch = false; + DFList[P->ID].NameMatch = false; } // Doing names only, drop any that dont match.. - if (NamesOnly == true && VFList[P->ID].NameMatch == false) + if (NamesOnly == true && DFList[P->ID].NameMatch == false) continue; // Find the proper version to use. pkgCache::VerIterator V = Plcy.GetCandidateVer(P); if (V.end() == false) - VFList[P->ID].Vf = V.FileList(); + DFList[P->ID].Df = V.DescriptionList().FileList(); } // Include all the packages that provide matching names too for (pkgCache::PkgIterator P = Cache.PkgBegin(); P.end() == false; P++) { - if (VFList[P->ID].NameMatch == false) + if (DFList[P->ID].NameMatch == false) continue; for (pkgCache::PrvIterator Prv = P.ProvidesList() ; Prv.end() == false; Prv++) @@ -1289,18 +1351,18 @@ bool Search(CommandLine &CmdL) pkgCache::VerIterator V = Plcy.GetCandidateVer(Prv.OwnerPkg()); if (V.end() == false) { - VFList[Prv.OwnerPkg()->ID].Vf = V.FileList(); - VFList[Prv.OwnerPkg()->ID].NameMatch = true; + DFList[Prv.OwnerPkg()->ID].Df = V.DescriptionList().FileList(); + DFList[Prv.OwnerPkg()->ID].NameMatch = true; } } } - - LocalitySort(&VFList->Vf,Cache.HeaderP->PackageCount,sizeof(*VFList)); + + LocalitySort(&DFList->Df,Cache.HeaderP->PackageCount,sizeof(*DFList)); // Iterate over all the version records and check them - for (ExVerFile *J = VFList; J->Vf != 0; J++) + for (ExDescFile *J = DFList; J->Df != 0; J++) { - pkgRecords::Parser &P = Recs.Lookup(pkgCache::VerFileIterator(Cache,J->Vf)); + pkgRecords::Parser &P = Recs.Lookup(pkgCache::DescFileIterator(Cache,J->Df)); bool Match = true; if (J->NameMatch == false) @@ -1331,7 +1393,7 @@ bool Search(CommandLine &CmdL) } } - delete [] VFList; + delete [] DFList; for (unsigned I = 0; I != NumPatterns; I++) regfree(&Patterns[I]); if (ferror(stdout)) diff --git a/cmdline/apt-get.cc b/cmdline/apt-get.cc index 64882e3e8..aa6a70ffe 100644 --- a/cmdline/apt-get.cc +++ b/cmdline/apt-get.cc @@ -60,6 +60,7 @@ #include <errno.h> #include <regex.h> #include <sys/wait.h> +#include <sstream> /*}}}*/ using namespace std; @@ -628,6 +629,8 @@ void CacheFile::Sort() and verifies that the system is OK. */ bool CacheFile::CheckDeps(bool AllowBroken) { + bool FixBroken = _config->FindB("APT::Get::Fix-Broken",false); + if (_error->PendingError() == true) return false; @@ -639,12 +642,24 @@ bool CacheFile::CheckDeps(bool AllowBroken) if (pkgApplyStatus(*DCache) == false) return false; + if (_config->FindB("APT::Get::Fix-Policy-Broken",false) == true) + { + FixBroken = true; + if ((DCache->PolicyBrokenCount() > 0)) + { + // upgrade all policy-broken packages with ForceImportantDeps=True + for (pkgCache::PkgIterator I = Cache->PkgBegin(); !I.end(); I++) + if ((*DCache)[I].NowPolicyBroken() == true) + DCache->MarkInstall(I,true,0, false, true); + } + } + // Nothing is broken if (DCache->BrokenCount() == 0 || AllowBroken == true) return true; // Attempt to fix broken things - if (_config->FindB("APT::Get::Fix-Broken",false) == true) + if (FixBroken == true) { c1out << _("Correcting dependencies...") << flush; if (pkgFixBroken(*DCache) == false || DCache->BrokenCount() != 0) @@ -995,7 +1010,7 @@ bool InstallPackages(CacheFile &Cache,bool ShwKept,bool Ask = true, cerr << _("Unable to correct missing packages.") << endl; return _error->Error(_("Aborting install.")); } - + _system->UnLock(); int status_fd = _config->FindI("APT::Status-Fd",-1); pkgPackageManager::OrderResult Res = PM->DoInstall(status_fd); @@ -1145,9 +1160,11 @@ bool TryToInstall(pkgCache::PkgIterator Pkg,pkgDepCache &Cache, else ExpectedInst++; - // Install it with autoinstalling enabled. - if (State.InstBroken() == true && BrokenFix == false) + // Install it with autoinstalling enabled (if we not respect the minial + // required deps or the policy) + if ((State.InstBroken() == true || State.InstPolicyBroken() == true) && BrokenFix == false) Cache.MarkInstall(Pkg,true); + return true; } /*}}}*/ @@ -1355,20 +1372,29 @@ bool DoUpdate(CommandLine &CmdL) return false; bool Failed = false; + bool TransientNetworkFailure = false; for (pkgAcquire::ItemIterator I = Fetcher.ItemsBegin(); I != Fetcher.ItemsEnd(); I++) { if ((*I)->Status == pkgAcquire::Item::StatDone) continue; (*I)->Finished(); - + fprintf(stderr,_("Failed to fetch %s %s\n"),(*I)->DescURI().c_str(), (*I)->ErrorText.c_str()); + + if ((*I)->Status == pkgAcquire::Item::StatTransientNetworkError) + { + TransientNetworkFailure = true; + continue; + } + Failed = true; } // Clean out any old list files - if (!Failed && _config->FindB("APT::Get::List-Cleanup",true) == true) + if (!TransientNetworkFailure && + _config->FindB("APT::Get::List-Cleanup",true) == true) { if (Fetcher.Clean(_config->FindDir("Dir::State::lists")) == false || Fetcher.Clean(_config->FindDir("Dir::State::lists") + "partial/") == false) @@ -1380,12 +1406,81 @@ bool DoUpdate(CommandLine &CmdL) if (Cache.BuildCaches() == false) return false; - if (Failed == true) + if (TransientNetworkFailure == true) + _error->Warning(_("Some index files failed to download, they have been ignored, or old ones used instead.")); + else if (Failed == true) return _error->Error(_("Some index files failed to download, they have been ignored, or old ones used instead.")); - + return true; } /*}}}*/ +// DoAutomaticRemove - Remove all automatic unused packages /*{{{*/ +// --------------------------------------------------------------------- +/* Remove unused automatic packages */ +bool DoAutomaticRemove(CacheFile &Cache) +{ + bool Debug = _config->FindI("Debug::pkgAutoRemove",false); + bool doAutoRemove = _config->FindB("APT::Get::AutomaticRemove", false); + bool hideAutoRemove = _config->FindB("APT::Get::HideAutoRemove"); + pkgDepCache::ActionGroup group(*Cache); + + if(Debug) + std::cout << "DoAutomaticRemove()" << std::endl; + + if (_config->FindB("APT::Get::Remove",true) == false && + doAutoRemove == true) + { + c1out << _("We are not supposed to delete stuff, can't start " + "AutoRemover") << std::endl; + doAutoRemove = false; + } + + string autoremovelist, autoremoveversions; + // look over the cache to see what can be removed + for (pkgCache::PkgIterator Pkg = Cache->PkgBegin(); ! Pkg.end(); ++Pkg) + { + if (Cache[Pkg].Garbage) + { + if(Pkg.CurrentVer() != 0 || Cache[Pkg].Install()) + if(Debug) + std::cout << "We could delete %s" << Pkg.Name() << std::endl; + + // only show stuff in the list that is not yet marked for removal + if(Cache[Pkg].Delete() == false) + { + autoremovelist += string(Pkg.Name()) + " "; + autoremoveversions += string(Cache[Pkg].CandVersion) + "\n"; + } + if (doAutoRemove) + { + if(Pkg.CurrentVer() != 0 && + Pkg->CurrentState != pkgCache::State::ConfigFiles) + Cache->MarkDelete(Pkg, _config->FindB("APT::Get::Purge", false)); + else + Cache->MarkKeep(Pkg, false, false); + } + } + } + if (!hideAutoRemove) + ShowList(c1out, _("The following packages were automatically installed and are no longer required:"), autoremovelist, autoremoveversions); + if (!doAutoRemove && !hideAutoRemove && autoremovelist.size() > 0) + c1out << _("Use 'apt-get autoremove' to remove them.") << std::endl; + + // Now see if we destroyed anything + if (Cache->BrokenCount() != 0) + { + c1out << _("Hmm, seems like the AutoRemover destroyed something which really\n" + "shouldn't happen. Please file a bug report against apt.") << endl; + c1out << endl; + c1out << _("The following information may help to resolve the situation:") << endl; + c1out << endl; + ShowBroken(c1out,Cache,false); + + return _error->Error(_("Internal Error, AutoRemover broke stuff")); + } + return true; +} + // DoUpgrade - Upgrade all packages /*{{{*/ // --------------------------------------------------------------------- /* Upgrade all packages without installing new packages or erasing old @@ -1406,6 +1501,51 @@ bool DoUpgrade(CommandLine &CmdL) return InstallPackages(Cache,true); } /*}}}*/ +// DoInstallTask - Install task from the command line /*{{{*/ +// --------------------------------------------------------------------- +/* Install named task */ +bool TryInstallTask(pkgDepCache &Cache, pkgProblemResolver &Fix, + bool BrokenFix, + unsigned int& ExpectedInst, + const char *taskname) +{ + const char *start, *end; + pkgCache::PkgIterator Pkg; + char buf[64*1024]; + regex_t Pattern; + + // get the records + pkgRecords Recs(Cache); + + // build regexp for the task + char S[300]; + snprintf(S, sizeof(S), "^Task:.*[^a-z]%s[^a-z].*\n", taskname); + regcomp(&Pattern,S, REG_EXTENDED | REG_NOSUB | REG_NEWLINE); + + bool found = false; + bool res = true; + for (Pkg = Cache.PkgBegin(); Pkg.end() == false; Pkg++) + { + pkgCache::VerIterator ver = Cache[Pkg].CandidateVerIter(Cache); + if(ver.end()) + continue; + pkgRecords::Parser &parser = Recs.Lookup(ver.FileList()); + parser.GetRec(start,end); + strncpy(buf, start, end-start); + buf[end-start] = 0x0; + if (regexec(&Pattern,buf,0,0,0) != 0) + continue; + res &= TryToInstall(Pkg,Cache,Fix,false,BrokenFix,ExpectedInst); + found = true; + } + + if(!found) + _error->Error(_("Couldn't find task %s"),taskname); + + regfree(&Pattern); + return res; +} + // DoInstall - Install packages from the command line /*{{{*/ // --------------------------------------------------------------------- /* Install named packages */ @@ -1421,6 +1561,7 @@ bool DoInstall(CommandLine &CmdL) if (Cache->BrokenCount() != 0) BrokenFix = true; + unsigned int AutoMarkChanged = 0; unsigned int ExpectedInst = 0; unsigned int Packages = 0; pkgProblemResolver Fix(Cache); @@ -1428,155 +1569,181 @@ bool DoInstall(CommandLine &CmdL) bool DefRemove = false; if (strcasecmp(CmdL.FileList[0],"remove") == 0) DefRemove = true; + else if (strcasecmp(CmdL.FileList[0], "autoremove") == 0) + { + _config->Set("APT::Get::AutomaticRemove", "true"); + DefRemove = true; + } - for (const char **I = CmdL.FileList + 1; *I != 0; I++) + // new scope for the ActionGroup { - // Duplicate the string - unsigned int Length = strlen(*I); - char S[300]; - if (Length >= sizeof(S)) - continue; - strcpy(S,*I); - - // See if we are removing and special indicators.. - bool Remove = DefRemove; - char *VerTag = 0; - bool VerIsRel = false; - while (Cache->FindPkg(S).end() == true) + pkgDepCache::ActionGroup group(Cache); + for (const char **I = CmdL.FileList + 1; *I != 0; I++) { - // Handle an optional end tag indicating what to do - if (Length >= 1 && S[Length - 1] == '-') - { - Remove = true; - S[--Length] = 0; + // Duplicate the string + unsigned int Length = strlen(*I); + char S[300]; + if (Length >= sizeof(S)) continue; - } - - if (Length >= 1 && S[Length - 1] == '+') + strcpy(S,*I); + + // See if we are removing and special indicators.. + bool Remove = DefRemove; + char *VerTag = 0; + bool VerIsRel = false; + while (Cache->FindPkg(S).end() == true) { - Remove = false; - S[--Length] = 0; - continue; - } + // Handle an optional end tag indicating what to do + if (Length >= 1 && S[Length - 1] == '-') + { + Remove = true; + S[--Length] = 0; + continue; + } - char *Slash = strchr(S,'='); - if (Slash != 0) - { - VerIsRel = false; - *Slash = 0; - VerTag = Slash + 1; - } + if (Length >= 1 && S[Length - 1] == '+') + { + Remove = false; + S[--Length] = 0; + continue; + } - Slash = strchr(S,'/'); - if (Slash != 0) - { - VerIsRel = true; - *Slash = 0; - VerTag = Slash + 1; - } + char *Slash = strchr(S,'='); + if (Slash != 0) + { + VerIsRel = false; + *Slash = 0; + VerTag = Slash + 1; + } - break; - } + Slash = strchr(S,'/'); + if (Slash != 0) + { + VerIsRel = true; + *Slash = 0; + VerTag = Slash + 1; + } + + break; + } - // Locate the package - pkgCache::PkgIterator Pkg = Cache->FindPkg(S); - Packages++; - if (Pkg.end() == true) - { - // Check if the name is a regex - const char *I; - for (I = S; *I != 0; I++) - if (*I == '?' || *I == '*' || *I == '|' || - *I == '[' || *I == '^' || *I == '$') - break; - if (*I == 0) - return _error->Error(_("Couldn't find package %s"),S); + // Locate the package + pkgCache::PkgIterator Pkg = Cache->FindPkg(S); + Packages++; + if (Pkg.end() == true) + { + // Check if the name is a regex + const char *I; + for (I = S; *I != 0; I++) + if (*I == '?' || *I == '*' || *I == '|' || + *I == '[' || *I == '^' || *I == '$') + break; + if (*I == 0) + return _error->Error(_("Couldn't find package %s"),S); - // Regexs must always be confirmed - ExpectedInst += 1000; + // Regexs must always be confirmed + ExpectedInst += 1000; - // Compile the regex pattern - regex_t Pattern; - int Res; - if ((Res = regcomp(&Pattern,S,REG_EXTENDED | REG_ICASE | - REG_NOSUB)) != 0) - { - char Error[300]; - regerror(Res,&Pattern,Error,sizeof(Error)); - return _error->Error(_("Regex compilation error - %s"),Error); - } + // Compile the regex pattern + regex_t Pattern; + int Res; + if ((Res = regcomp(&Pattern,S,REG_EXTENDED | REG_ICASE | + REG_NOSUB)) != 0) + { + char Error[300]; + regerror(Res,&Pattern,Error,sizeof(Error)); + return _error->Error(_("Regex compilation error - %s"),Error); + } - // Run over the matches - bool Hit = false; - for (Pkg = Cache->PkgBegin(); Pkg.end() == false; Pkg++) - { - if (regexec(&Pattern,Pkg.Name(),0,0,0) != 0) - continue; + // Run over the matches + bool Hit = false; + for (Pkg = Cache->PkgBegin(); Pkg.end() == false; Pkg++) + { + if (regexec(&Pattern,Pkg.Name(),0,0,0) != 0) + continue; - ioprintf(c1out,_("Note, selecting %s for regex '%s'\n"), - Pkg.Name(),S); + ioprintf(c1out,_("Note, selecting %s for regex '%s'\n"), + Pkg.Name(),S); + if (VerTag != 0) + if (TryToChangeVer(Pkg,Cache,VerTag,VerIsRel) == false) + return false; + + Hit |= TryToInstall(Pkg,Cache,Fix,Remove,BrokenFix, + ExpectedInst,false); + } + regfree(&Pattern); + + if (Hit == false) + return _error->Error(_("Couldn't find package %s"),S); + } + else + { if (VerTag != 0) if (TryToChangeVer(Pkg,Cache,VerTag,VerIsRel) == false) return false; - - Hit |= TryToInstall(Pkg,Cache,Fix,Remove,BrokenFix, - ExpectedInst,false); - } - regfree(&Pattern); - - if (Hit == false) - return _error->Error(_("Couldn't find package %s"),S); - } - else - { - if (VerTag != 0) - if (TryToChangeVer(Pkg,Cache,VerTag,VerIsRel) == false) + if (TryToInstall(Pkg,Cache,Fix,Remove,BrokenFix,ExpectedInst) == false) return false; - if (TryToInstall(Pkg,Cache,Fix,Remove,BrokenFix,ExpectedInst) == false) - return false; - } - } - /* If we are in the Broken fixing mode we do not attempt to fix the - problems. This is if the user invoked install without -f and gave - packages */ - if (BrokenFix == true && Cache->BrokenCount() != 0) - { - c1out << _("You might want to run `apt-get -f install' to correct these:") << endl; - ShowBroken(c1out,Cache,false); + // see if we need to fix the auto-mark flag + // e.g. apt-get install foo + // where foo is marked automatic + if(!Remove && + Cache[Pkg].Install() == false && + (Cache[Pkg].Flags & pkgCache::Flag::Auto)) + { + ioprintf(c1out,_("%s set to manual installed.\n"), + Pkg.Name()); + Cache->MarkAuto(Pkg,false); + AutoMarkChanged++; + } + } + } - return _error->Error(_("Unmet dependencies. Try 'apt-get -f install' with no packages (or specify a solution).")); - } + /* If we are in the Broken fixing mode we do not attempt to fix the + problems. This is if the user invoked install without -f and gave + packages */ + if (BrokenFix == true && Cache->BrokenCount() != 0) + { + c1out << _("You might want to run `apt-get -f install' to correct these:") << endl; + ShowBroken(c1out,Cache,false); + + return _error->Error(_("Unmet dependencies. Try 'apt-get -f install' with no packages (or specify a solution).")); + } - // Call the scored problem resolver - Fix.InstallProtect(); - if (Fix.Resolve(true) == false) - _error->Discard(); + // Call the scored problem resolver + Fix.InstallProtect(); + if (Fix.Resolve(true) == false) + _error->Discard(); - // Now we check the state of the packages, - if (Cache->BrokenCount() != 0) - { - c1out << - _("Some packages could not be installed. This may mean that you have\n" - "requested an impossible situation or if you are using the unstable\n" - "distribution that some required packages have not yet been created\n" - "or been moved out of Incoming.") << endl; - if (Packages == 1) + // Now we check the state of the packages, + if (Cache->BrokenCount() != 0) { - c1out << endl; c1out << - _("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.") << endl; - } + _("Some packages could not be installed. This may mean that you have\n" + "requested an impossible situation or if you are using the unstable\n" + "distribution that some required packages have not yet been created\n" + "or been moved out of Incoming.") << endl; + if (Packages == 1) + { + c1out << endl; + c1out << + _("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.") << endl; + } + + c1out << _("The following information may help to resolve the situation:") << endl; + c1out << endl; + ShowBroken(c1out,Cache,false); + return _error->Error(_("Broken packages")); + } + } + if (_config->FindB("APT::Get::AutomaticRemove")) { + if (!DoAutomaticRemove(Cache)) + return false; + } - c1out << _("The following information may help to resolve the situation:") << endl; - c1out << endl; - ShowBroken(c1out,Cache,false); - return _error->Error(_("Broken packages")); - } - /* Print out a list of packages that are going to be installed extra to what the user asked */ if (Cache->InstCount() != ExpectedInst) @@ -1596,8 +1763,8 @@ bool DoInstall(CommandLine &CmdL) if (*J == 0) { List += string(I.Name()) + " "; - VersionsList += string(Cache[I].CandVersion) + "\n"; - } + VersionsList += string(Cache[I].CandVersion) + "\n"; + } } ShowList(c1out,_("The following extra packages will be installed:"),List,VersionsList); @@ -1694,6 +1861,14 @@ bool DoInstall(CommandLine &CmdL) } + // if nothing changed in the cache, but only the automark information + // we write the StateFile here, otherwise it will be written in + // cache.commit() + if (AutoMarkChanged > 0 && + Cache->DelCount() == 0 && Cache->InstCount() == 0 && + Cache->BadCount() == 0) + Cache->writeStateFile(NULL); + // See if we need to prompt if (Cache->InstCount() == ExpectedInst && Cache->DelCount() == 0) return InstallPackages(Cache,false,false); @@ -1732,6 +1907,8 @@ bool DoDSelectUpgrade(CommandLine &CmdL) if (Cache.OpenForInstall() == false || Cache.CheckDeps() == false) return false; + pkgDepCache::ActionGroup group(Cache); + // Install everything with the install flag set pkgCache::PkgIterator I = Cache->PkgBegin(); for (;I.end() != true; I++) @@ -2484,6 +2661,7 @@ void GetInitialize() _config->Set("APT::Get::Fix-Broken",false); _config->Set("APT::Get::Force-Yes",false); _config->Set("APT::Get::List-Cleanup",true); + _config->Set("APT::Get::AutomaticRemove",false); } /*}}}*/ // SigWinch - Window size change signal handler /*{{{*/ @@ -2539,7 +2717,10 @@ int main(int argc,const char *argv[]) {0,"remove","APT::Get::Remove",0}, {0,"only-source","APT::Get::Only-Source",0}, {0,"arch-only","APT::Get::Arch-Only",0}, + {0,"auto-remove","APT::Get::AutomaticRemove",0}, {0,"allow-unauthenticated","APT::Get::AllowUnauthenticated",0}, + {0,"install-recommends","APT::Install-Recommends",CommandLine::Boolean}, + {0,"fix-policy","APT::Get::Fix-Policy-Broken",0}, {'c',"config-file",0,CommandLine::ConfigFile}, {'o',"option",0,CommandLine::ArbItem}, {0,0,0,0}}; @@ -2547,6 +2728,7 @@ int main(int argc,const char *argv[]) {"upgrade",&DoUpgrade}, {"install",&DoInstall}, {"remove",&DoInstall}, + {"autoremove",&DoInstall}, {"dist-upgrade",&DoDistUpgrade}, {"dselect-upgrade",&DoDSelectUpgrade}, {"build-dep",&DoBuildDep}, diff --git a/cmdline/apt-key b/cmdline/apt-key index 7460a24be..90ecae2cf 100755 --- a/cmdline/apt-key +++ b/cmdline/apt-key @@ -24,9 +24,9 @@ update() { $GPG_CMD --quiet --batch --keyring $ARCHIVE_KEYRING --export | $GPG --ignore-time-conflict --import # remove no-longer used keys - keys=`$GPG_CMD --keyring $REMOVED_KEYS --with-colons --list-keys|awk '/^pub/{FS=":";print $5}'` + keys=`$GPG_CMD --keyring $REMOVED_KEYS --with-colons --list-keys | grep ^pub | cut -d: -f5` for key in $keys; do - if $GPG --list-keys --with-colons | awk '/^pub/{FS=":";print $5}'|grep -q $key; then + if $GPG --list-keys --with-colons | grep ^pub | cut -d: -f5 | grep -q $key; then $GPG --quiet --batch --delete-key --yes ${key} fi done diff --git a/cmdline/apt-mark b/cmdline/apt-mark new file mode 100755 index 000000000..dadc01366 --- /dev/null +++ b/cmdline/apt-mark @@ -0,0 +1,64 @@ +#!/usr/bin/python + +from optparse import OptionParser + +try: + import apt_pkg +except ImportError: + print "Error importing apt_pkg, is python-apt installed?" + +import sys +import os.path + +actions = { "markauto" : 1, + "unmarkauto": 0 + } + +if __name__ == "__main__": + apt_pkg.init() + + # option parsing + parser = OptionParser() + parser.usage = "%prog [options] {markauto|unmarkauto} packages..." + parser.add_option("-f", "--file", action="store", type="string", + dest="filename", + help="read/write a different file") + parser.add_option("-v", "--verbose", + action="store_true", dest="verbose", default=False, + help="print verbose status messages to stdout") + (options, args) = parser.parse_args() + if len(args) < 2: + parser.error("not enough argument") + + # get pkgs to change + if args[0] not in actions.keys(): + parser.error("first argument must be 'markauto' or 'unmarkauto'") + pkgs = args[1:] + action = actions[args[0]] + + # get the state-file + if not options.filename: + STATE_FILE = apt_pkg.Config.FindDir("Dir::State") + "extended_states" + else: + STATE_FILE=options.state_file + + # open the statefile + if os.path.exists(STATE_FILE): + tagfile = apt_pkg.ParseTagFile(open(STATE_FILE)) + outfile = open(STATE_FILE+".tmp","w") + while tagfile.Step(): + pkgname = tagfile.Section.get("Package") + autoInst = tagfile.Section.get("Auto-Installed") + if pkgname in pkgs: + if options.verbose: + print "changing %s to %s" % (pkgname,action) + newsec = apt_pkg.RewriteSection(tagfile.Section, + [], + [ ("Auto-Installed",str(action)) ] + ) + outfile.write(newsec+"\n") + else: + outfile.write(str(tagfile.Section)+"\n") + # all done, rename the tmpfile + os.chmod(outfile.name, 0644) + os.rename(outfile.name, STATE_FILE) diff --git a/cmdline/makefile b/cmdline/makefile index 882a0e1b5..49035be44 100644 --- a/cmdline/makefile +++ b/cmdline/makefile @@ -52,3 +52,9 @@ SOURCE=apt-key TO=$(BIN) TARGET=program include $(COPY_H) + +# The apt-mark program +SOURCE=apt-mark +TO=$(BIN) +TARGET=program +include $(COPY_H) diff --git a/configure.in b/configure.in index fe7c0e3e1..9fa113938 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.5") +AC_DEFINE_UNQUOTED(VERSION,"0.7.0") PACKAGE="apt" AC_DEFINE_UNQUOTED(PACKAGE,"$PACKAGE") AC_SUBST(PACKAGE) @@ -175,12 +175,21 @@ dnl Check for debiandoc AC_PATH_PROG(DEBIANDOC_HTML,debiandoc2html) AC_PATH_PROG(DEBIANDOC_TEXT,debiandoc2text) +dnl Check for doxygen +AC_PATH_PROG(DOXYGEN, doxygen) + dnl Check for the SGML tools needed to build man pages AC_PATH_PROG(DOCBOOK2MAN,docbook2man) dnl Check for the XML tools needed to build man pages AC_PATH_PROG(XMLTO,xmlto) +dnl Check for graphviz +AC_CHECK_PROG([HAVE_DOT], [dot], [YES], [NO]) +AC_PATH_PROG([DOT], [dot], []) +DOTDIR=$(dirname $DOT) +AC_SUBST(DOTDIR) + dnl Check for YODL dnl AC_CHECK_PROG(YODL_MAN,yodl2man,"yes","") @@ -192,7 +201,7 @@ ah_GCC3DEP dnl It used to be that the user could select translations and that could get dnl passed to the makefiles, but now that can only work if you use special dnl gettext approved makefiles, so this feature is unsupported by this. -ALL_LINGUAS="bg bs ca cs cy da de dz el en_GB es eu fi fr gl hu it ja ko ku nb nl nn pl pt_BR pt ro ru sk sl sv tl vi zn_CN zh_TW" +ALL_LINGUAS="bg bs ca cs cy da de dz el en_GB es eu fi fr gl hu it ja ko ku nb nl nn pl pt_BR pt ro ru sk sl sv tl uk vi zn_CN zh_TW" AM_GNU_GETTEXT(external) if test x"$USE_NLS" = "xyes"; then AC_DEFINE(USE_NLS) @@ -200,4 +209,4 @@ fi AC_SUBST(USE_NLS) AC_PATH_PROG(BASH, bash) -AC_OUTPUT(environment.mak:buildlib/environment.mak.in makefile:buildlib/makefile.in,make -s dirs) +AC_OUTPUT(environment.mak:buildlib/environment.mak.in makefile:buildlib/makefile.in doc/Doxyfile,make -s dirs) diff --git a/debian/NEWS.Debian b/debian/NEWS.Debian index db04b1e91..f44d1966b 100644 --- a/debian/NEWS.Debian +++ b/debian/NEWS.Debian @@ -1,3 +1,11 @@ +apt (0.6.44) unstable; urgency=low + + * apt-ftparchive --db now uses Berkeley DB_BTREE instead of DB_HASH. + If you use a database created by an older version of apt, delete + it and allow it to be recreated the next time. + + -- Michael Vogt <mvo@debian.org> Wed, 26 Apr 2006 12:57:53 +0200 + apt (0.5.25) unstable; urgency=low * apt-ftparchive --db now uses Berkeley DB version 4.2. If used with a diff --git a/debian/apt.conf.autoremove b/debian/apt.conf.autoremove new file mode 100644 index 000000000..98143ce9a --- /dev/null +++ b/debian/apt.conf.autoremove @@ -0,0 +1,8 @@ +APT +{ + NeverAutoRemove + { + "^linux-image.*"; + "^linux-restricted-modules.*"; + }; +}; diff --git a/debian/apt.cron.daily b/debian/apt.cron.daily index 26dfa2530..b4cbf1c8a 100644 --- a/debian/apt.cron.daily +++ b/debian/apt.cron.daily @@ -14,6 +14,12 @@ # "APT::Periodic::AutocleanInterval" # - Do "apt-get autoclean" every n-days (0=disable) # +# "APT::Periodic::Unattended-Upgrade" +# - Run the "unattended-upgrade" security upgrade script +# every n-days (0=disabled) +# Requires the package "unattended-upgrades" and will write +# a log in /var/log/unattended-upgrades +# # "APT::Archives::MaxAge", # - Set maximum allowed age of a cache package file. If a cache # package file is older it is deleted (0=disable) @@ -148,6 +154,10 @@ eval $(apt-config shell UpdateInterval APT::Periodic::Update-Package-Lists Downl AutocleanInterval=$DownloadUpgradeableInterval eval $(apt-config shell AutocleanInterval APT::Periodic::Autoclean) +UnattendedUpgradeInterval=0 +eval $(apt-config shell UnattendedUpgradeInterval APT::Periodic::Unattended-Upgrade) + + # laptop check, on_ac_power returns: # 0 (true) System is on mains power # 1 (false) System is not on mains power @@ -182,5 +192,11 @@ if check_stamp $AUTOCLEAN_STAMP $AutocleanInterval; then update_stamp $AUTOCLEAN_STAMP fi +UPGRADE_STAMP=/var/lib/apt/periodic/upgrade-stamp +if check_stamp $UPGRADE_STAMP $UnattendedUpgradeInterval; then + unattended-upgrade + update_stamp $UPGRADE_STAMP +fi + # check cache size check_size_constraints diff --git a/debian/apt.dirs b/debian/apt.dirs index e1cb738fa..1543e8bb1 100644 --- a/debian/apt.dirs +++ b/debian/apt.dirs @@ -2,6 +2,7 @@ usr/bin usr/lib/apt/methods usr/lib/dpkg/methods/apt etc/apt +etc/apt/apt.conf.d etc/apt/sources.list.d var/cache/apt/archives/partial var/lib/apt/lists/partial diff --git a/debian/changelog b/debian/changelog index 06cede531..bbe4c0256 100644 --- a/debian/changelog +++ b/debian/changelog @@ -1,11 +1,67 @@ -apt (0.6.46.5) UNRELEASED; urgency=low +apt (0.7.1) experimental; urgency=low * apt-pkg/algorithm.cc: - use clog for all debugging - only increase the score of installed applications if they are not obsolete + - fix resolver bug on removal triggered by weak-dependencies + with or-groups + * methods/http.cc: + - send apt version in User-Agent + * apt-pkg/deb/debrecords.cc: + - fix SHA1Hash() return value + * apt-pkg/cdrom.cc: + - only unmount if APT::CDROM::NoMount is false + * methods/cdrom.cc: + - only umount if it was mounted by the method before + * po/gl.po: + - fix error translation that causes trouble to lsb_release + * apt-pkg/acquire-item.cc: + - if decompression of a index fails, delete the index + * apt-pkg/acquire.{cc,h}: + - deal better with duplicated sources.list entries (avoid + double queuing of URLs) - this fixes hangs in bzip/gzip + * merged from Christian Perrier: + * mr.po: New Marathi translation Closes: #416806 + * zh_CN.po: Updated by Eric Pareja Closes: #416822 + * tl.po: Updated by Eric Pareja Closes: #416638 + * gl.po: Updated by Jacobo Tarrio + Closes: #412828 + * da.po: Updated by Claus Hindsgaul + Closes: #409483 + * fr.po: Remove a non-breakable space for usability + issues. Closes: #408877 + * ru.po: Updated Russian translation. Closes: #405476 + * *.po: Unfuzzy after upstream typo corrections + * apt-pkg/policy.cc: + - allow multiple packages (thanks to David Foerster) + + -- Michael Vogt <mvo@debian.org> Wed, 2 May 2007 13:43:44 +0200 + +apt (0.7.0) experimental; urgency=low + + * Package that contains tall the new features + * Removed all #pragma interface/implementation + * Branch that contains tall the new features: + * translated package descriptions + * task install support + * automatic dependency removal (thanks to Daniel Burrows) + * merged support for the new dpkg "Breaks" field + (thanks to Ian Jackson) + * handle network failures more gracefully on "update" + * support for unattended-upgrades (via unattended-upgrades + package) + * added apt-transport-https method + + -- Michael Vogt <mvo@debian.org> Fri, 12 Jan 2007 20:48:07 +0100 + +apt (0.6.46.4-0.1) unstable; urgency=emergency + + * NMU + * Fix broken use of awk in apt-key that caused removal of the wrong keys + from the keyring. Closes: #412572 - -- Michael Vogt <michael.vogt@ubuntu.com> Mon, 18 Dec 2006 19:39:05 +0100 + -- Joey Hess <joeyh@debian.org> Mon, 26 Feb 2007 16:00:22 -0500 apt (0.6.46.4) unstable; urgency=high @@ -52,44 +108,55 @@ apt (0.6.46.3) unstable; urgency=low messages * Merged from Christian Perrier bzr branch: - - ca.po: Updated to 514t - - be.po: Updated to 514t - - it.po: Updated to 514t - - hu.po: Updated to 514t - - zh_TW.po: Updated to 514t - - ar.po: Updated to 293t221u. - - ru.po: Updated to 514t. Closes: #392466 - - nb.po: Updated to 514t. Closes: #392466 - - pt.po: Updated to 514t. Closes: #393199 - - fr.po: One spelling error corrected: s/accèder/accéder - - km.po: Updated to 514t. - - ko.po: Updated to 514t. - - bg.po: Updated to 514t. - - de.po: Updated to 514t. - - en_GB.po: Updated to 514t. - - -- Michael Vogt <mvo@debian.org> Thu, 2 Nov 2006 11:37:58 +0100 + - ca.po: Updated to 514t + - be.po: Updated to 514t + - it.po: Updated to 514t + - hu.po: Updated to 514t + - zh_TW.po: Updated to 514t + - ar.po: Updated to 293t221u. + - ru.po: Updated to 514t. Closes: #392466 + - nb.po: Updated to 514t. Closes: #392466 + - pt.po: Updated to 514t. Closes: #393199 + - fr.po: One spelling error corrected: s/accèder/accéder + - km.po: Updated to 514t. + - ko.po: Updated to 514t. + - bg.po: Updated to 514t. + - de.po: Updated to 514t. + - en_GB.po: Updated to 514t. + + -- Michael Vogt <mvo@debian.org> Thu, 2 Nov 2006 11:37:58 +0100 apt (0.6.46.2) unstable; urgency=low + * debian/control: + - depend on debian-archive-keyring to offer clean upgrade path + (closes: #386800) * Merged from Christian Perrier bzr branch: - es.po: Updated to 514t. Closes: #391661 - da.po: Updated to 514t. Closes: #391424 - cs.po: Updated. Closes: #391064 - es.po: Updated to 514t. Closes: #391661 - da.po: Updated to 514t. Closes: #391424 - + -- Michael Vogt <mvo@debian.org> Wed, 11 Oct 2006 09:03:15 +0200 apt (0.6.46.1) unstable; urgency=low + * merged "install-recommends" branch (ABI break): + - new "--install-recommends" + - install new recommends on "upgrade" if --install-recommends is + given + - new "--fix-policy" option to install all packages with unmet + important dependencies (usefull with --install-recommends to + see what not-installed recommends are on the system) + - fix of recommended packages display (only show CandidateVersion + fix or-group handling) + * merged "install-task" branch (use with "apt-get install taskname^") * methods/gzip.cc: - deal with empty files * Applied patch from Daniel Schepler to make apt bin-NMU able. - (closes: bug#359634) * rebuild against current g++ because of: http://gcc.gnu.org/bugzilla/show_bug.cgi?id=29289 - (closes: #390189) * fix broken i18n in the dpkg progress reporting, thanks to Frans Pop and Steinar Gunderson. (closes: #389261) * Merged from Christian Perrier bzr branch: @@ -142,7 +209,7 @@ apt (0.6.45) unstable; urgency=low * apt-pkg/contrib/sha256.cc: - fixed the sha256 generation (closes: #378183) * ftparchive/cachedb.cc: - - applied patch from Anthony Towns to fix Clean() function + - applied patch from ajt to fix Clean() function (closes: #379576) * doc/apt-get.8.xml: - fix path to the apt user build (Closes: #375640) @@ -160,9 +227,6 @@ apt (0.6.45) unstable; urgency=low - fix for string mangling, closes: #373864 * apt-pkg/acquire-item.cc: - check for bzip2 in /bin (closes: #377391) - * apt-pkg/tagfile.cc: - - make it work on non-mapable files again, thanks - to James Troup for confirming the fix (closes: #376777) * Merged from Christian Perrier bzr branch: * ko.po: Updated to 512t. Closes: #378901 * hu.po: Updated to 512t. Closes: #376330 @@ -173,26 +237,42 @@ apt (0.6.45) unstable; urgency=low * dz.po: New Dzongkha translation: 512t * ro.po: Updated to 512t * eu.po: Updated + * eu.po: Updated + * fix apt-get dist-upgrade + * fix warning if no /var/lib/apt/extended_states is present + * don't download Translations for deb-src sources.list lines + * apt-pkg/tagfile.cc: + - support not-mmapable files again - -- Michael Vogt <mvo@debian.org> Thu, 27 Jul 2006 00:52:05 +0200 + -- Michael Vogt <michael.vogt@ubuntu.com> Tue, 25 Jul 2006 11:55:22 +0200 -apt (0.6.44.2) unstable; urgency=low - - * apt-pkg/depcache.cc: - - added Debug::pkgDepCache::AutoInstall (thanks to infinity) - * apt-pkg/acquire-item.cc: - - fix missing chmod() in the new aquire code - (thanks to Bastian Blank, Closes: #367425) - * merged from - http://www.perrier.eu.org/debian/packages/d-i/level4/apt-main: - * sk.po: Completed to 512t - * eu.po: Completed to 512t - * fr.po: Completed to 512t - * sv.po: Completed to 512t - * Update all PO and the POT. Gives 506t6f for formerly - complete translations - - -- Michael Vogt <mvo@debian.org> Wed, 14 Jun 2006 12:00:57 +0200 +apt (0.6.44.2exp1) experimental; urgency=low + + * added support for i18n of the package descriptions + * added support for aptitude like auto-install tracking (a HUGE + HUGE thanks to Daniel Burrows who made this possible) + * synced with the http://people.debian.org/~mvo/bzr/apt/debian-sid branch + * build from http://people.debian.org/~mvo/bzr/apt/debian-experimental + + -- Michael Vogt <mvo@debian.org> Mon, 3 Jul 2006 21:50:31 +0200 + +apt (0.6.44.2) unstable; urgency=low + + * apt-pkg/depcache.cc: + - added Debug::pkgDepCache::AutoInstall (thanks to infinity) + * apt-pkg/acquire-item.cc: + - fix missing chmod() in the new aquire code + (thanks to Bastian Blank, Closes: #367425) + * merged from + http://www.perrier.eu.org/debian/packages/d-i/level4/apt-main: + * sk.po: Completed to 512t + * eu.po: Completed to 512t + * fr.po: Completed to 512t + * sv.po: Completed to 512t + * Update all PO and the POT. Gives 506t6f for formerly + complete translations + + -- Michael Vogt <mvo@debian.org> Wed, 14 Jun 2006 12:00:57 +0200 apt (0.6.44.1-0.1) unstable; urgency=low @@ -204,22 +284,32 @@ apt (0.6.44.1-0.1) unstable; urgency=low apt (0.6.44.1) unstable; urgency=low + * apt-pkg/acquire-item.cc: + - fix reversed logic of the "Acquire::PDiffs" option * merged from http://www.perrier.eu.org/debian/packages/d-i/level4/apt-main: - po/LINGUAS: added "bg" Closes: #360262 - po/gl.po: Galician translation update. Closes: #366849 - po/hu.po: Hungarian translation update. Closes: #365448 - po/cs.po: Czech translation updated. Closes: #367244 + * apt-pkg/contrib/sha256.cc: + - applied patch to fix unaligned access problem. Closes: #367417 + (thanks to David Mosberger) -- Michael Vogt <mvo@debian.org> Tue, 16 May 2006 21:51:16 +0200 apt (0.6.44) unstable; urgency=low * apt-pkg/acquire.cc: don't show ETA if it is 0 or absurdely large + * apt-pkg/contrib/sha256.{cc,h},hashes.{cc,h}: support for sha256 + (thanks to Anthony Towns) + * ftparchive/cachedb.{cc,h},writer.{cc,h}: optimizations + (thanks to Anthony Towns) + * apt pdiff support from experimental merged + * apt-pkg/deb/dpkgpm.cc: wording fixes (thanks to Matt Zimmerman) * apt-pkg/deb/dpkgpm.cc: - wording fixes (thanks to Matt Zimmerman) - - fix error in dpkg interaction (closes: #364513, - thanks to Martin Dickopp) + - fix error in dpkg interaction (closes: #364513, thanks to Martin Dickopp) * apt-pkg/tagfile.{cc,h}: - use MMap to read the entries (thanks to Zephaniah E. Hull for the patch) Closes: #350025 @@ -414,7 +504,7 @@ apt (0.6.42) unstable; urgency=low * cmdline/apt-cdrom.cc: - fix some missing gettext() calls (closes: #334539) * doc/apt-cache.8.xml: fix typo (closes: #334714) - + -- Michael Vogt <mvo@debian.org> Wed, 19 Oct 2005 22:02:09 +0200 apt (0.6.41) unstable; urgency=low @@ -514,6 +604,7 @@ apt (0.6.37) breezy; urgency=low * Add Welsh translation from Dafydd Harries (daf@muse.19inch.net--2005/apt--main--0--patch-1) * Change debian/bugscript to use #!/bin/bash (Closes: #313402) + * Fix a incorrect example in the man-page (closes: #282918) -- Matt Zimmerman <mdz@ubuntu.com> Tue, 24 May 2005 14:38:25 -0700 diff --git a/debian/control b/debian/control index 183e81844..a47d13817 100644 --- a/debian/control +++ b/debian/control @@ -9,12 +9,11 @@ Build-Depends-Indep: debiandoc-sgml, docbook-utils (>= 0.6.12-1) Package: apt Architecture: any -Depends: ${shlibs:Depends} +Depends: ${shlibs:Depends}, debian-archive-keyring Priority: important Replaces: libapt-pkg-doc (<< 0.3.7), libapt-pkg-dev (<< 0.3.7) Provides: ${libapt-pkg:provides} -Recommends: debian-archive-keyring -Suggests: aptitude | synaptic | gnome-apt | wajig, dpkg-dev, apt-doc, bzip2, gnupg +Suggests: aptitude | synaptic | gnome-apt | wajig, dpkg-dev, apt-doc, bzip2 Section: admin Description: Advanced front-end for dpkg This is Debian's next generation front-end for the dpkg package manager. diff --git a/debian/rules b/debian/rules index 0208d8ea3..3ebecfba4 100755 --- a/debian/rules +++ b/debian/rules @@ -211,9 +211,14 @@ apt: build debian/shlibs.local cp debian/bugscript debian/$@/usr/share/bug/apt/script cp share/debian-archive.gpg debian/$@/usr/share/$@ - + cp debian/apt.conf.autoremove debian/$@/etc/apt/apt.conf.d/01autoremove # head -n 500 ChangeLog > debian/ChangeLog + # make rosetta happy and remove pot files in po/ (but leave stuff + # in po/domains/* untouched) and cp *.po into each domain dir + rm -f build/po/*.pot + rm -f po/*.pot + dh_installexamples -p$@ $(BLD)/docs/examples/* dh_installman -p$@ dh_installcron -p$@ @@ -364,4 +369,4 @@ arch-build: mkdir -p debian/arch-build/apt-$(APT_DEBVER) tar -c --exclude=arch-build --no-recursion -f - `bzr inventory` | (cd debian/arch-build/$(PKG)-$(APT_DEBVER);tar xf -) $(MAKE) -C debian/arch-build/apt-$(APT_DEBVER) startup doc - (cd debian/arch-build/apt-$(APT_DEBVER); $(DEB_BUILD_PROG)) + (cd debian/arch-build/apt-$(APT_DEBVER); $(DEB_BUILD_PROG); dpkg-genchanges -S > ../apt_$(APT_DEBVER)_source.changes) diff --git a/doc/Doxyfile.in b/doc/Doxyfile.in new file mode 100644 index 000000000..f19ff93f6 --- /dev/null +++ b/doc/Doxyfile.in @@ -0,0 +1,1238 @@ +# Doxyfile 1.4.5 + +# This file describes the settings to be used by the documentation system +# doxygen (www.doxygen.org) for a project +# +# All text after a hash (#) is considered a comment and will be ignored +# The format is: +# TAG = value [value, ...] +# For lists items can also be appended using: +# TAG += value [value, ...] +# Values that contain spaces should be placed between quotes (" ") + +#--------------------------------------------------------------------------- +# Project related configuration options +#--------------------------------------------------------------------------- + +# The PROJECT_NAME tag is a single word (or a sequence of words surrounded +# by quotes) that should identify the project. + +PROJECT_NAME = @PACKAGE@ + +# The PROJECT_NUMBER tag can be used to enter a project or revision number. +# This could be handy for archiving the generated documentation or +# if some version control system is used. + +PROJECT_NUMBER = @VERSION@ + +# The OUTPUT_DIRECTORY tag is used to specify the (relative or absolute) +# base path where the generated documentation will be put. +# If a relative path is entered, it will be relative to the location +# where doxygen was started. If left blank the current directory will be used. + +OUTPUT_DIRECTORY = ../build/doc/doxygen + +# If the CREATE_SUBDIRS tag is set to YES, then doxygen will create +# 4096 sub-directories (in 2 levels) under the output directory of each output +# format and will distribute the generated files over these directories. +# Enabling this option can be useful when feeding doxygen a huge amount of +# source files, where putting all generated files in the same directory would +# otherwise cause performance problems for the file system. + +CREATE_SUBDIRS = NO + +# The OUTPUT_LANGUAGE tag is used to specify the language in which all +# documentation generated by doxygen is written. Doxygen will use this +# information to generate all constant output in the proper language. +# The default language is English, other supported languages are: +# Brazilian, Catalan, Chinese, Chinese-Traditional, Croatian, Czech, Danish, +# Dutch, Finnish, French, German, Greek, Hungarian, Italian, Japanese, +# Japanese-en (Japanese with English messages), Korean, Korean-en, Norwegian, +# Polish, Portuguese, Romanian, Russian, Serbian, Slovak, Slovene, Spanish, +# Swedish, and Ukrainian. + +OUTPUT_LANGUAGE = English + +# This tag can be used to specify the encoding used in the generated output. +# The encoding is not always determined by the language that is chosen, +# but also whether or not the output is meant for Windows or non-Windows users. +# In case there is a difference, setting the USE_WINDOWS_ENCODING tag to YES +# forces the Windows encoding (this is the default for the Windows binary), +# whereas setting the tag to NO uses a Unix-style encoding (the default for +# all platforms other than Windows). + +USE_WINDOWS_ENCODING = NO + +# If the BRIEF_MEMBER_DESC tag is set to YES (the default) Doxygen will +# include brief member descriptions after the members that are listed in +# the file and class documentation (similar to JavaDoc). +# Set to NO to disable this. + +BRIEF_MEMBER_DESC = YES + +# If the REPEAT_BRIEF tag is set to YES (the default) Doxygen will prepend +# the brief description of a member or function before the detailed description. +# Note: if both HIDE_UNDOC_MEMBERS and BRIEF_MEMBER_DESC are set to NO, the +# brief descriptions will be completely suppressed. + +REPEAT_BRIEF = YES + +# This tag implements a quasi-intelligent brief description abbreviator +# that is used to form the text in various listings. Each string +# in this list, if found as the leading text of the brief description, will be +# stripped from the text and the result after processing the whole list, is +# used as the annotated text. Otherwise, the brief description is used as-is. +# If left blank, the following values are used ("$name" is automatically +# replaced with the name of the entity): "The $name class" "The $name widget" +# "The $name file" "is" "provides" "specifies" "contains" +# "represents" "a" "an" "the" + +ABBREVIATE_BRIEF = + +# If the ALWAYS_DETAILED_SEC and REPEAT_BRIEF tags are both set to YES then +# Doxygen will generate a detailed section even if there is only a brief +# description. + +ALWAYS_DETAILED_SEC = NO + +# If the INLINE_INHERITED_MEMB tag is set to YES, doxygen will show all +# inherited members of a class in the documentation of that class as if those +# members were ordinary class members. Constructors, destructors and assignment +# operators of the base classes will not be shown. + +INLINE_INHERITED_MEMB = NO + +# If the FULL_PATH_NAMES tag is set to YES then Doxygen will prepend the full +# path before files name in the file list and in the header files. If set +# to NO the shortest path that makes the file name unique will be used. + +FULL_PATH_NAMES = YES + +# If the FULL_PATH_NAMES tag is set to YES then the STRIP_FROM_PATH tag +# can be used to strip a user-defined part of the path. Stripping is +# only done if one of the specified strings matches the left-hand part of +# the path. The tag can be used to show relative paths in the file list. +# If left blank the directory from which doxygen is run is used as the +# path to strip. + +STRIP_FROM_PATH = + +# The STRIP_FROM_INC_PATH tag can be used to strip a user-defined part of +# the path mentioned in the documentation of a class, which tells +# the reader which header file to include in order to use a class. +# If left blank only the name of the header file containing the class +# definition is used. Otherwise one should specify the include paths that +# are normally passed to the compiler using the -I flag. + +STRIP_FROM_INC_PATH = + +# If the SHORT_NAMES tag is set to YES, doxygen will generate much shorter +# (but less readable) file names. This can be useful is your file systems +# doesn't support long names like on DOS, Mac, or CD-ROM. + +SHORT_NAMES = NO + +# If the JAVADOC_AUTOBRIEF tag is set to YES then Doxygen +# will interpret the first line (until the first dot) of a JavaDoc-style +# comment as the brief description. If set to NO, the JavaDoc +# comments will behave just like the Qt-style comments (thus requiring an +# explicit @brief command for a brief description. + +JAVADOC_AUTOBRIEF = NO + +# The MULTILINE_CPP_IS_BRIEF tag can be set to YES to make Doxygen +# treat a multi-line C++ special comment block (i.e. a block of //! or /// +# comments) as a brief description. This used to be the default behaviour. +# The new default is to treat a multi-line C++ comment block as a detailed +# description. Set this tag to YES if you prefer the old behaviour instead. + +MULTILINE_CPP_IS_BRIEF = NO + +# If the DETAILS_AT_TOP tag is set to YES then Doxygen +# will output the detailed description near the top, like JavaDoc. +# If set to NO, the detailed description appears after the member +# documentation. + +DETAILS_AT_TOP = NO + +# If the INHERIT_DOCS tag is set to YES (the default) then an undocumented +# member inherits the documentation from any documented member that it +# re-implements. + +INHERIT_DOCS = YES + +# If the SEPARATE_MEMBER_PAGES tag is set to YES, then doxygen will produce +# a new page for each member. If set to NO, the documentation of a member will +# be part of the file/class/namespace that contains it. + +SEPARATE_MEMBER_PAGES = NO + +# The TAB_SIZE tag can be used to set the number of spaces in a tab. +# Doxygen uses this value to replace tabs by spaces in code fragments. + +TAB_SIZE = 8 + +# This tag can be used to specify a number of aliases that acts +# as commands in the documentation. An alias has the form "name=value". +# For example adding "sideeffect=\par Side Effects:\n" will allow you to +# put the command \sideeffect (or @sideeffect) in the documentation, which +# will result in a user-defined paragraph with heading "Side Effects:". +# You can put \n's in the value part of an alias to insert newlines. + +ALIASES = + +# Set the OPTIMIZE_OUTPUT_FOR_C tag to YES if your project consists of C +# sources only. Doxygen will then generate output that is more tailored for C. +# For instance, some of the names that are used will be different. The list +# of all members will be omitted, etc. + +OPTIMIZE_OUTPUT_FOR_C = NO + +# Set the OPTIMIZE_OUTPUT_JAVA tag to YES if your project consists of Java +# sources only. Doxygen will then generate output that is more tailored for Java. +# For instance, namespaces will be presented as packages, qualified scopes +# will look different, etc. + +OPTIMIZE_OUTPUT_JAVA = NO + +# If you use STL classes (i.e. std::string, std::vector, etc.) but do not want to +# include (a tag file for) the STL sources as input, then you should +# set this tag to YES in order to let doxygen match functions declarations and +# definitions whose arguments contain STL classes (e.g. func(std::string); v.s. +# func(std::string) {}). This also make the inheritance and collaboration +# diagrams that involve STL classes more complete and accurate. + +BUILTIN_STL_SUPPORT = YES + +# If member grouping is used in the documentation and the DISTRIBUTE_GROUP_DOC +# tag is set to YES, then doxygen will reuse the documentation of the first +# member in the group (if any) for the other members of the group. By default +# all members of a group must be documented explicitly. + +DISTRIBUTE_GROUP_DOC = NO + +# Set the SUBGROUPING tag to YES (the default) to allow class member groups of +# the same type (for instance a group of public functions) to be put as a +# subgroup of that type (e.g. under the Public Functions section). Set it to +# NO to prevent subgrouping. Alternatively, this can be done per class using +# the \nosubgrouping command. + +SUBGROUPING = YES + +#--------------------------------------------------------------------------- +# Build related configuration options +#--------------------------------------------------------------------------- + +# If the EXTRACT_ALL tag is set to YES doxygen will assume all entities in +# documentation are documented, even if no documentation was available. +# Private class members and static file members will be hidden unless +# the EXTRACT_PRIVATE and EXTRACT_STATIC tags are set to YES + +EXTRACT_ALL = NO + +# If the EXTRACT_PRIVATE tag is set to YES all private members of a class +# will be included in the documentation. + +EXTRACT_PRIVATE = NO + +# If the EXTRACT_STATIC tag is set to YES all static members of a file +# will be included in the documentation. + +EXTRACT_STATIC = NO + +# If the EXTRACT_LOCAL_CLASSES tag is set to YES classes (and structs) +# defined locally in source files will be included in the documentation. +# If set to NO only classes defined in header files are included. + +EXTRACT_LOCAL_CLASSES = YES + +# This flag is only useful for Objective-C code. When set to YES local +# methods, which are defined in the implementation section but not in +# the interface are included in the documentation. +# If set to NO (the default) only methods in the interface are included. + +EXTRACT_LOCAL_METHODS = NO + +# If the HIDE_UNDOC_MEMBERS tag is set to YES, Doxygen will hide all +# undocumented members of documented classes, files or namespaces. +# If set to NO (the default) these members will be included in the +# various overviews, but no documentation section is generated. +# This option has no effect if EXTRACT_ALL is enabled. + +HIDE_UNDOC_MEMBERS = NO + +# If the HIDE_UNDOC_CLASSES tag is set to YES, Doxygen will hide all +# undocumented classes that are normally visible in the class hierarchy. +# If set to NO (the default) these classes will be included in the various +# overviews. This option has no effect if EXTRACT_ALL is enabled. + +HIDE_UNDOC_CLASSES = NO + +# If the HIDE_FRIEND_COMPOUNDS tag is set to YES, Doxygen will hide all +# friend (class|struct|union) declarations. +# If set to NO (the default) these declarations will be included in the +# documentation. + +HIDE_FRIEND_COMPOUNDS = NO + +# If the HIDE_IN_BODY_DOCS tag is set to YES, Doxygen will hide any +# documentation blocks found inside the body of a function. +# If set to NO (the default) these blocks will be appended to the +# function's detailed documentation block. + +HIDE_IN_BODY_DOCS = NO + +# The INTERNAL_DOCS tag determines if documentation +# that is typed after a \internal command is included. If the tag is set +# to NO (the default) then the documentation will be excluded. +# Set it to YES to include the internal documentation. + +INTERNAL_DOCS = NO + +# If the CASE_SENSE_NAMES tag is set to NO then Doxygen will only generate +# file names in lower-case letters. If set to YES upper-case letters are also +# allowed. This is useful if you have classes or files whose names only differ +# in case and if your file system supports case sensitive file names. Windows +# and Mac users are advised to set this option to NO. + +CASE_SENSE_NAMES = YES + +# If the HIDE_SCOPE_NAMES tag is set to NO (the default) then Doxygen +# will show members with their full class and namespace scopes in the +# documentation. If set to YES the scope will be hidden. + +HIDE_SCOPE_NAMES = YES + +# If the SHOW_INCLUDE_FILES tag is set to YES (the default) then Doxygen +# will put a list of the files that are included by a file in the documentation +# of that file. + +SHOW_INCLUDE_FILES = YES + +# If the INLINE_INFO tag is set to YES (the default) then a tag [inline] +# is inserted in the documentation for inline members. + +INLINE_INFO = YES + +# If the SORT_MEMBER_DOCS tag is set to YES (the default) then doxygen +# will sort the (detailed) documentation of file and class members +# alphabetically by member name. If set to NO the members will appear in +# declaration order. + +SORT_MEMBER_DOCS = YES + +# If the SORT_BRIEF_DOCS tag is set to YES then doxygen will sort the +# brief documentation of file, namespace and class members alphabetically +# by member name. If set to NO (the default) the members will appear in +# declaration order. + +SORT_BRIEF_DOCS = NO + +# If the SORT_BY_SCOPE_NAME tag is set to YES, the class list will be +# sorted by fully-qualified names, including namespaces. If set to +# NO (the default), the class list will be sorted only by class name, +# not including the namespace part. +# Note: This option is not very useful if HIDE_SCOPE_NAMES is set to YES. +# Note: This option applies only to the class list, not to the +# alphabetical list. + +SORT_BY_SCOPE_NAME = NO + +# The GENERATE_TODOLIST tag can be used to enable (YES) or +# disable (NO) the todo list. This list is created by putting \todo +# commands in the documentation. + +GENERATE_TODOLIST = YES + +# The GENERATE_TESTLIST tag can be used to enable (YES) or +# disable (NO) the test list. This list is created by putting \test +# commands in the documentation. + +GENERATE_TESTLIST = YES + +# The GENERATE_BUGLIST tag can be used to enable (YES) or +# disable (NO) the bug list. This list is created by putting \bug +# commands in the documentation. + +GENERATE_BUGLIST = YES + +# The GENERATE_DEPRECATEDLIST tag can be used to enable (YES) or +# disable (NO) the deprecated list. This list is created by putting +# \deprecated commands in the documentation. + +GENERATE_DEPRECATEDLIST= YES + +# The ENABLED_SECTIONS tag can be used to enable conditional +# documentation sections, marked by \if sectionname ... \endif. + +ENABLED_SECTIONS = + +# The MAX_INITIALIZER_LINES tag determines the maximum number of lines +# the initial value of a variable or define consists of for it to appear in +# the documentation. If the initializer consists of more lines than specified +# here it will be hidden. Use a value of 0 to hide initializers completely. +# The appearance of the initializer of individual variables and defines in the +# documentation can be controlled using \showinitializer or \hideinitializer +# command in the documentation regardless of this setting. + +MAX_INITIALIZER_LINES = 30 + +# Set the SHOW_USED_FILES tag to NO to disable the list of files generated +# at the bottom of the documentation of classes and structs. If set to YES the +# list will mention the files that were used to generate the documentation. + +SHOW_USED_FILES = YES + +# If the sources in your project are distributed over multiple directories +# then setting the SHOW_DIRECTORIES tag to YES will show the directory hierarchy +# in the documentation. The default is YES. + +SHOW_DIRECTORIES = YES + +# The FILE_VERSION_FILTER tag can be used to specify a program or script that +# doxygen should invoke to get the current version for each file (typically from the +# version control system). Doxygen will invoke the program by executing (via +# popen()) the command <command> <input-file>, where <command> is the value of +# the FILE_VERSION_FILTER tag, and <input-file> is the name of an input file +# provided by doxygen. Whatever the program writes to standard output +# is used as the file version. See the manual for examples. + +FILE_VERSION_FILTER = + +#--------------------------------------------------------------------------- +# configuration options related to warning and progress messages +#--------------------------------------------------------------------------- + +# The QUIET tag can be used to turn on/off the messages that are generated +# by doxygen. Possible values are YES and NO. If left blank NO is used. + +QUIET = NO + +# The WARNINGS tag can be used to turn on/off the warning messages that are +# generated by doxygen. Possible values are YES and NO. If left blank +# NO is used. + +WARNINGS = YES + +# If WARN_IF_UNDOCUMENTED is set to YES, then doxygen will generate warnings +# for undocumented members. If EXTRACT_ALL is set to YES then this flag will +# automatically be disabled. + +WARN_IF_UNDOCUMENTED = YES + +# If WARN_IF_DOC_ERROR is set to YES, doxygen will generate warnings for +# potential errors in the documentation, such as not documenting some +# parameters in a documented function, or documenting parameters that +# don't exist or using markup commands wrongly. + +WARN_IF_DOC_ERROR = YES + +# This WARN_NO_PARAMDOC option can be abled to get warnings for +# functions that are documented, but have no documentation for their parameters +# or return value. If set to NO (the default) doxygen will only warn about +# wrong or incomplete parameter documentation, but not about the absence of +# documentation. + +WARN_NO_PARAMDOC = NO + +# The WARN_FORMAT tag determines the format of the warning messages that +# doxygen can produce. The string should contain the $file, $line, and $text +# tags, which will be replaced by the file and line number from which the +# warning originated and the warning text. Optionally the format may contain +# $version, which will be replaced by the version of the file (if it could +# be obtained via FILE_VERSION_FILTER) + +WARN_FORMAT = "$file:$line: $text" + +# The WARN_LOGFILE tag can be used to specify a file to which warning +# and error messages should be written. If left blank the output is written +# to stderr. + +WARN_LOGFILE = + +#--------------------------------------------------------------------------- +# configuration options related to the input files +#--------------------------------------------------------------------------- + +# The INPUT tag can be used to specify the files and/or directories that contain +# documented source files. You may enter file names like "myfile.cpp" or +# directories like "/usr/src/myproject". Separate the files or directories +# with spaces. + +INPUT = ../apt-pkg + +# If the value of the INPUT tag contains directories, you can use the +# FILE_PATTERNS tag to specify one or more wildcard pattern (like *.cpp +# and *.h) to filter out the source-files in the directories. If left +# blank the following patterns are tested: +# *.c *.cc *.cxx *.cpp *.c++ *.java *.ii *.ixx *.ipp *.i++ *.inl *.h *.hh *.hxx +# *.hpp *.h++ *.idl *.odl *.cs *.php *.php3 *.inc *.m *.mm *.py + +FILE_PATTERNS = *.cc \ + *.h + +# The RECURSIVE tag can be used to turn specify whether or not subdirectories +# should be searched for input files as well. Possible values are YES and NO. +# If left blank NO is used. + +RECURSIVE = YES + +# The EXCLUDE tag can be used to specify files and/or directories that should +# excluded from the INPUT source files. This way you can easily exclude a +# subdirectory from a directory tree whose root is specified with the INPUT tag. + +EXCLUDE = + +# The EXCLUDE_SYMLINKS tag can be used select whether or not files or +# directories that are symbolic links (a Unix filesystem feature) are excluded +# from the input. + +EXCLUDE_SYMLINKS = NO + +# If the value of the INPUT tag contains directories, you can use the +# EXCLUDE_PATTERNS tag to specify one or more wildcard patterns to exclude +# certain files from those directories. Note that the wildcards are matched +# against the file with absolute path, so to exclude all test directories +# for example use the pattern */test/* + +EXCLUDE_PATTERNS = + +# The EXAMPLE_PATH tag can be used to specify one or more files or +# directories that contain example code fragments that are included (see +# the \include command). + +EXAMPLE_PATH = + +# If the value of the EXAMPLE_PATH tag contains directories, you can use the +# EXAMPLE_PATTERNS tag to specify one or more wildcard pattern (like *.cpp +# and *.h) to filter out the source-files in the directories. If left +# blank all files are included. + +EXAMPLE_PATTERNS = + +# If the EXAMPLE_RECURSIVE tag is set to YES then subdirectories will be +# searched for input files to be used with the \include or \dontinclude +# commands irrespective of the value of the RECURSIVE tag. +# Possible values are YES and NO. If left blank NO is used. + +EXAMPLE_RECURSIVE = NO + +# The IMAGE_PATH tag can be used to specify one or more files or +# directories that contain image that are included in the documentation (see +# the \image command). + +IMAGE_PATH = + +# The INPUT_FILTER tag can be used to specify a program that doxygen should +# invoke to filter for each input file. Doxygen will invoke the filter program +# by executing (via popen()) the command <filter> <input-file>, where <filter> +# is the value of the INPUT_FILTER tag, and <input-file> is the name of an +# input file. Doxygen will then use the output that the filter program writes +# to standard output. If FILTER_PATTERNS is specified, this tag will be +# ignored. + +INPUT_FILTER = + +# The FILTER_PATTERNS tag can be used to specify filters on a per file pattern +# basis. Doxygen will compare the file name with each pattern and apply the +# filter if there is a match. The filters are a list of the form: +# pattern=filter (like *.cpp=my_cpp_filter). See INPUT_FILTER for further +# info on how filters are used. If FILTER_PATTERNS is empty, INPUT_FILTER +# is applied to all files. + +FILTER_PATTERNS = + +# If the FILTER_SOURCE_FILES tag is set to YES, the input filter (if set using +# INPUT_FILTER) will be used to filter the input files when producing source +# files to browse (i.e. when SOURCE_BROWSER is set to YES). + +FILTER_SOURCE_FILES = NO + +#--------------------------------------------------------------------------- +# configuration options related to source browsing +#--------------------------------------------------------------------------- + +# If the SOURCE_BROWSER tag is set to YES then a list of source files will +# be generated. Documented entities will be cross-referenced with these sources. +# Note: To get rid of all source code in the generated output, make sure also +# VERBATIM_HEADERS is set to NO. + +SOURCE_BROWSER = NO + +# Setting the INLINE_SOURCES tag to YES will include the body +# of functions and classes directly in the documentation. + +INLINE_SOURCES = NO + +# Setting the STRIP_CODE_COMMENTS tag to YES (the default) will instruct +# doxygen to hide any special comment blocks from generated source code +# fragments. Normal C and C++ comments will always remain visible. + +STRIP_CODE_COMMENTS = YES + +# If the REFERENCED_BY_RELATION tag is set to YES (the default) +# then for each documented function all documented +# functions referencing it will be listed. + +REFERENCED_BY_RELATION = YES + +# If the REFERENCES_RELATION tag is set to YES (the default) +# then for each documented function all documented entities +# called/used by that function will be listed. + +REFERENCES_RELATION = YES + +# If the USE_HTAGS tag is set to YES then the references to source code +# will point to the HTML generated by the htags(1) tool instead of doxygen +# built-in source browser. The htags tool is part of GNU's global source +# tagging system (see http://www.gnu.org/software/global/global.html). You +# will need version 4.8.6 or higher. + +USE_HTAGS = NO + +# If the VERBATIM_HEADERS tag is set to YES (the default) then Doxygen +# will generate a verbatim copy of the header file for each class for +# which an include is specified. Set to NO to disable this. + +VERBATIM_HEADERS = YES + +#--------------------------------------------------------------------------- +# configuration options related to the alphabetical class index +#--------------------------------------------------------------------------- + +# If the ALPHABETICAL_INDEX tag is set to YES, an alphabetical index +# of all compounds will be generated. Enable this if the project +# contains a lot of classes, structs, unions or interfaces. + +ALPHABETICAL_INDEX = NO + +# If the alphabetical index is enabled (see ALPHABETICAL_INDEX) then +# the COLS_IN_ALPHA_INDEX tag can be used to specify the number of columns +# in which this list will be split (can be a number in the range [1..20]) + +COLS_IN_ALPHA_INDEX = 5 + +# In case all classes in a project start with a common prefix, all +# classes will be put under the same header in the alphabetical index. +# The IGNORE_PREFIX tag can be used to specify one or more prefixes that +# should be ignored while generating the index headers. + +IGNORE_PREFIX = + +#--------------------------------------------------------------------------- +# configuration options related to the HTML output +#--------------------------------------------------------------------------- + +# If the GENERATE_HTML tag is set to YES (the default) Doxygen will +# generate HTML output. + +GENERATE_HTML = YES + +# The HTML_OUTPUT tag is used to specify where the HTML docs will be put. +# If a relative path is entered the value of OUTPUT_DIRECTORY will be +# put in front of it. If left blank `html' will be used as the default path. + +HTML_OUTPUT = html + +# The HTML_FILE_EXTENSION tag can be used to specify the file extension for +# each generated HTML page (for example: .htm,.php,.asp). If it is left blank +# doxygen will generate files with .html extension. + +HTML_FILE_EXTENSION = .html + +# The HTML_HEADER tag can be used to specify a personal HTML header for +# each generated HTML page. If it is left blank doxygen will generate a +# standard header. + +HTML_HEADER = + +# The HTML_FOOTER tag can be used to specify a personal HTML footer for +# each generated HTML page. If it is left blank doxygen will generate a +# standard footer. + +HTML_FOOTER = + +# The HTML_STYLESHEET tag can be used to specify a user-defined cascading +# style sheet that is used by each HTML page. It can be used to +# fine-tune the look of the HTML output. If the tag is left blank doxygen +# will generate a default style sheet. Note that doxygen will try to copy +# the style sheet file to the HTML output directory, so don't put your own +# stylesheet in the HTML output directory as well, or it will be erased! + +HTML_STYLESHEET = + +# If the HTML_ALIGN_MEMBERS tag is set to YES, the members of classes, +# files or namespaces will be aligned in HTML using tables. If set to +# NO a bullet list will be used. + +HTML_ALIGN_MEMBERS = YES + +# If the GENERATE_HTMLHELP tag is set to YES, additional index files +# will be generated that can be used as input for tools like the +# Microsoft HTML help workshop to generate a compressed HTML help file (.chm) +# of the generated HTML documentation. + +GENERATE_HTMLHELP = NO + +# If the GENERATE_HTMLHELP tag is set to YES, the CHM_FILE tag can +# be used to specify the file name of the resulting .chm file. You +# can add a path in front of the file if the result should not be +# written to the html output directory. + +CHM_FILE = + +# If the GENERATE_HTMLHELP tag is set to YES, the HHC_LOCATION tag can +# be used to specify the location (absolute path including file name) of +# the HTML help compiler (hhc.exe). If non-empty doxygen will try to run +# the HTML help compiler on the generated index.hhp. + +HHC_LOCATION = + +# If the GENERATE_HTMLHELP tag is set to YES, the GENERATE_CHI flag +# controls if a separate .chi index file is generated (YES) or that +# it should be included in the master .chm file (NO). + +GENERATE_CHI = NO + +# If the GENERATE_HTMLHELP tag is set to YES, the BINARY_TOC flag +# controls whether a binary table of contents is generated (YES) or a +# normal table of contents (NO) in the .chm file. + +BINARY_TOC = NO + +# The TOC_EXPAND flag can be set to YES to add extra items for group members +# to the contents of the HTML help documentation and to the tree view. + +TOC_EXPAND = NO + +# The DISABLE_INDEX tag can be used to turn on/off the condensed index at +# top of each HTML page. The value NO (the default) enables the index and +# the value YES disables it. + +DISABLE_INDEX = NO + +# This tag can be used to set the number of enum values (range [1..20]) +# that doxygen will group on one line in the generated HTML documentation. + +ENUM_VALUES_PER_LINE = 4 + +# If the GENERATE_TREEVIEW tag is set to YES, a side panel will be +# generated containing a tree-like index structure (just like the one that +# is generated for HTML Help). For this to work a browser that supports +# JavaScript, DHTML, CSS and frames is required (for instance Mozilla 1.0+, +# Netscape 6.0+, Internet explorer 5.0+, or Konqueror). Windows users are +# probably better off using the HTML help feature. + +GENERATE_TREEVIEW = NO + +# If the treeview is enabled (see GENERATE_TREEVIEW) then this tag can be +# used to set the initial width (in pixels) of the frame in which the tree +# is shown. + +TREEVIEW_WIDTH = 250 + +#--------------------------------------------------------------------------- +# configuration options related to the LaTeX output +#--------------------------------------------------------------------------- + +# If the GENERATE_LATEX tag is set to YES (the default) Doxygen will +# generate Latex output. + +GENERATE_LATEX = YES + +# The LATEX_OUTPUT tag is used to specify where the LaTeX docs will be put. +# If a relative path is entered the value of OUTPUT_DIRECTORY will be +# put in front of it. If left blank `latex' will be used as the default path. + +LATEX_OUTPUT = latex + +# The LATEX_CMD_NAME tag can be used to specify the LaTeX command name to be +# invoked. If left blank `latex' will be used as the default command name. + +LATEX_CMD_NAME = latex + +# The MAKEINDEX_CMD_NAME tag can be used to specify the command name to +# generate index for LaTeX. If left blank `makeindex' will be used as the +# default command name. + +MAKEINDEX_CMD_NAME = makeindex + +# If the COMPACT_LATEX tag is set to YES Doxygen generates more compact +# LaTeX documents. This may be useful for small projects and may help to +# save some trees in general. + +COMPACT_LATEX = NO + +# The PAPER_TYPE tag can be used to set the paper type that is used +# by the printer. Possible values are: a4, a4wide, letter, legal and +# executive. If left blank a4wide will be used. + +PAPER_TYPE = a4wide + +# The EXTRA_PACKAGES tag can be to specify one or more names of LaTeX +# packages that should be included in the LaTeX output. + +EXTRA_PACKAGES = + +# The LATEX_HEADER tag can be used to specify a personal LaTeX header for +# the generated latex document. The header should contain everything until +# the first chapter. If it is left blank doxygen will generate a +# standard header. Notice: only use this tag if you know what you are doing! + +LATEX_HEADER = + +# If the PDF_HYPERLINKS tag is set to YES, the LaTeX that is generated +# is prepared for conversion to pdf (using ps2pdf). The pdf file will +# contain links (just like the HTML output) instead of page references +# This makes the output suitable for online browsing using a pdf viewer. + +PDF_HYPERLINKS = NO + +# If the USE_PDFLATEX tag is set to YES, pdflatex will be used instead of +# plain latex in the generated Makefile. Set this option to YES to get a +# higher quality PDF documentation. + +USE_PDFLATEX = NO + +# If the LATEX_BATCHMODE tag is set to YES, doxygen will add the \\batchmode. +# command to the generated LaTeX files. This will instruct LaTeX to keep +# running if errors occur, instead of asking the user for help. +# This option is also used when generating formulas in HTML. + +LATEX_BATCHMODE = NO + +# If LATEX_HIDE_INDICES is set to YES then doxygen will not +# include the index chapters (such as File Index, Compound Index, etc.) +# in the output. + +LATEX_HIDE_INDICES = NO + +#--------------------------------------------------------------------------- +# configuration options related to the RTF output +#--------------------------------------------------------------------------- + +# If the GENERATE_RTF tag is set to YES Doxygen will generate RTF output +# The RTF output is optimized for Word 97 and may not look very pretty with +# other RTF readers or editors. + +GENERATE_RTF = NO + +# The RTF_OUTPUT tag is used to specify where the RTF docs will be put. +# If a relative path is entered the value of OUTPUT_DIRECTORY will be +# put in front of it. If left blank `rtf' will be used as the default path. + +RTF_OUTPUT = rtf + +# If the COMPACT_RTF tag is set to YES Doxygen generates more compact +# RTF documents. This may be useful for small projects and may help to +# save some trees in general. + +COMPACT_RTF = NO + +# If the RTF_HYPERLINKS tag is set to YES, the RTF that is generated +# will contain hyperlink fields. The RTF file will +# contain links (just like the HTML output) instead of page references. +# This makes the output suitable for online browsing using WORD or other +# programs which support those fields. +# Note: wordpad (write) and others do not support links. + +RTF_HYPERLINKS = NO + +# Load stylesheet definitions from file. Syntax is similar to doxygen's +# config file, i.e. a series of assignments. You only have to provide +# replacements, missing definitions are set to their default value. + +RTF_STYLESHEET_FILE = + +# Set optional variables used in the generation of an rtf document. +# Syntax is similar to doxygen's config file. + +RTF_EXTENSIONS_FILE = + +#--------------------------------------------------------------------------- +# configuration options related to the man page output +#--------------------------------------------------------------------------- + +# If the GENERATE_MAN tag is set to YES (the default) Doxygen will +# generate man pages + +GENERATE_MAN = NO + +# The MAN_OUTPUT tag is used to specify where the man pages will be put. +# If a relative path is entered the value of OUTPUT_DIRECTORY will be +# put in front of it. If left blank `man' will be used as the default path. + +MAN_OUTPUT = man + +# The MAN_EXTENSION tag determines the extension that is added to +# the generated man pages (default is the subroutine's section .3) + +MAN_EXTENSION = .3 + +# If the MAN_LINKS tag is set to YES and Doxygen generates man output, +# then it will generate one additional man file for each entity +# documented in the real man page(s). These additional files +# only source the real man page, but without them the man command +# would be unable to find the correct page. The default is NO. + +MAN_LINKS = NO + +#--------------------------------------------------------------------------- +# configuration options related to the XML output +#--------------------------------------------------------------------------- + +# If the GENERATE_XML tag is set to YES Doxygen will +# generate an XML file that captures the structure of +# the code including all documentation. + +GENERATE_XML = NO + +# The XML_OUTPUT tag is used to specify where the XML pages will be put. +# If a relative path is entered the value of OUTPUT_DIRECTORY will be +# put in front of it. If left blank `xml' will be used as the default path. + +XML_OUTPUT = xml + +# The XML_SCHEMA tag can be used to specify an XML schema, +# which can be used by a validating XML parser to check the +# syntax of the XML files. + +XML_SCHEMA = + +# The XML_DTD tag can be used to specify an XML DTD, +# which can be used by a validating XML parser to check the +# syntax of the XML files. + +XML_DTD = + +# If the XML_PROGRAMLISTING tag is set to YES Doxygen will +# dump the program listings (including syntax highlighting +# and cross-referencing information) to the XML output. Note that +# enabling this will significantly increase the size of the XML output. + +XML_PROGRAMLISTING = YES + +#--------------------------------------------------------------------------- +# configuration options for the AutoGen Definitions output +#--------------------------------------------------------------------------- + +# If the GENERATE_AUTOGEN_DEF tag is set to YES Doxygen will +# generate an AutoGen Definitions (see autogen.sf.net) file +# that captures the structure of the code including all +# documentation. Note that this feature is still experimental +# and incomplete at the moment. + +GENERATE_AUTOGEN_DEF = NO + +#--------------------------------------------------------------------------- +# configuration options related to the Perl module output +#--------------------------------------------------------------------------- + +# If the GENERATE_PERLMOD tag is set to YES Doxygen will +# generate a Perl module file that captures the structure of +# the code including all documentation. Note that this +# feature is still experimental and incomplete at the +# moment. + +GENERATE_PERLMOD = NO + +# If the PERLMOD_LATEX tag is set to YES Doxygen will generate +# the necessary Makefile rules, Perl scripts and LaTeX code to be able +# to generate PDF and DVI output from the Perl module output. + +PERLMOD_LATEX = NO + +# If the PERLMOD_PRETTY tag is set to YES the Perl module output will be +# nicely formatted so it can be parsed by a human reader. This is useful +# if you want to understand what is going on. On the other hand, if this +# tag is set to NO the size of the Perl module output will be much smaller +# and Perl will parse it just the same. + +PERLMOD_PRETTY = YES + +# The names of the make variables in the generated doxyrules.make file +# are prefixed with the string contained in PERLMOD_MAKEVAR_PREFIX. +# This is useful so different doxyrules.make files included by the same +# Makefile don't overwrite each other's variables. + +PERLMOD_MAKEVAR_PREFIX = + +#--------------------------------------------------------------------------- +# Configuration options related to the preprocessor +#--------------------------------------------------------------------------- + +# If the ENABLE_PREPROCESSING tag is set to YES (the default) Doxygen will +# evaluate all C-preprocessor directives found in the sources and include +# files. + +ENABLE_PREPROCESSING = YES + +# If the MACRO_EXPANSION tag is set to YES Doxygen will expand all macro +# names in the source code. If set to NO (the default) only conditional +# compilation will be performed. Macro expansion can be done in a controlled +# way by setting EXPAND_ONLY_PREDEF to YES. + +MACRO_EXPANSION = NO + +# If the EXPAND_ONLY_PREDEF and MACRO_EXPANSION tags are both set to YES +# then the macro expansion is limited to the macros specified with the +# PREDEFINED and EXPAND_AS_DEFINED tags. + +EXPAND_ONLY_PREDEF = NO + +# If the SEARCH_INCLUDES tag is set to YES (the default) the includes files +# in the INCLUDE_PATH (see below) will be search if a #include is found. + +SEARCH_INCLUDES = YES + +# The INCLUDE_PATH tag can be used to specify one or more directories that +# contain include files that are not input files but should be processed by +# the preprocessor. + +INCLUDE_PATH = + +# You can use the INCLUDE_FILE_PATTERNS tag to specify one or more wildcard +# patterns (like *.h and *.hpp) to filter out the header-files in the +# directories. If left blank, the patterns specified with FILE_PATTERNS will +# be used. + +INCLUDE_FILE_PATTERNS = + +# The PREDEFINED tag can be used to specify one or more macro names that +# are defined before the preprocessor is started (similar to the -D option of +# gcc). The argument of the tag is a list of macros of the form: name +# or name=definition (no spaces). If the definition and the = are +# omitted =1 is assumed. To prevent a macro definition from being +# undefined via #undef or recursively expanded use the := operator +# instead of the = operator. + +PREDEFINED = + +# If the MACRO_EXPANSION and EXPAND_ONLY_PREDEF tags are set to YES then +# this tag can be used to specify a list of macro names that should be expanded. +# The macro definition that is found in the sources will be used. +# Use the PREDEFINED tag if you want to use a different macro definition. + +EXPAND_AS_DEFINED = + +# If the SKIP_FUNCTION_MACROS tag is set to YES (the default) then +# doxygen's preprocessor will remove all function-like macros that are alone +# on a line, have an all uppercase name, and do not end with a semicolon. Such +# function macros are typically used for boiler-plate code, and will confuse +# the parser if not removed. + +SKIP_FUNCTION_MACROS = YES + +#--------------------------------------------------------------------------- +# Configuration::additions related to external references +#--------------------------------------------------------------------------- + +# The TAGFILES option can be used to specify one or more tagfiles. +# Optionally an initial location of the external documentation +# can be added for each tagfile. The format of a tag file without +# this location is as follows: +# TAGFILES = file1 file2 ... +# Adding location for the tag files is done as follows: +# TAGFILES = file1=loc1 "file2 = loc2" ... +# where "loc1" and "loc2" can be relative or absolute paths or +# URLs. If a location is present for each tag, the installdox tool +# does not have to be run to correct the links. +# Note that each tag file must have a unique name +# (where the name does NOT include the path) +# If a tag file is not located in the directory in which doxygen +# is run, you must also specify the path to the tagfile here. + +TAGFILES = + +# When a file name is specified after GENERATE_TAGFILE, doxygen will create +# a tag file that is based on the input files it reads. + +GENERATE_TAGFILE = + +# If the ALLEXTERNALS tag is set to YES all external classes will be listed +# in the class index. If set to NO only the inherited external classes +# will be listed. + +ALLEXTERNALS = NO + +# If the EXTERNAL_GROUPS tag is set to YES all external groups will be listed +# in the modules index. If set to NO, only the current project's groups will +# be listed. + +EXTERNAL_GROUPS = YES + +# The PERL_PATH should be the absolute path and name of the perl script +# interpreter (i.e. the result of `which perl'). + +PERL_PATH = /usr/bin/perl + +#--------------------------------------------------------------------------- +# Configuration options related to the dot tool +#--------------------------------------------------------------------------- + +# If the CLASS_DIAGRAMS tag is set to YES (the default) Doxygen will +# generate a inheritance diagram (in HTML, RTF and LaTeX) for classes with base +# or super classes. Setting the tag to NO turns the diagrams off. Note that +# this option is superseded by the HAVE_DOT option below. This is only a +# fallback. It is recommended to install and use dot, since it yields more +# powerful graphs. + +CLASS_DIAGRAMS = YES + +# If set to YES, the inheritance and collaboration graphs will hide +# inheritance and usage relations if the target is undocumented +# or is not a class. + +HIDE_UNDOC_RELATIONS = YES + +# If you set the HAVE_DOT tag to YES then doxygen will assume the dot tool is +# available from the path. This tool is part of Graphviz, a graph visualization +# toolkit from AT&T and Lucent Bell Labs. The other options in this section +# have no effect if this option is set to NO (the default) + +HAVE_DOT = @HAVE_DOT@ + +# If the CLASS_GRAPH and HAVE_DOT tags are set to YES then doxygen +# will generate a graph for each documented class showing the direct and +# indirect inheritance relations. Setting this tag to YES will force the +# the CLASS_DIAGRAMS tag to NO. + +CLASS_GRAPH = YES + +# If the COLLABORATION_GRAPH and HAVE_DOT tags are set to YES then doxygen +# will generate a graph for each documented class showing the direct and +# indirect implementation dependencies (inheritance, containment, and +# class references variables) of the class with other documented classes. + +COLLABORATION_GRAPH = YES + +# If the GROUP_GRAPHS and HAVE_DOT tags are set to YES then doxygen +# will generate a graph for groups, showing the direct groups dependencies + +GROUP_GRAPHS = YES + +# If the UML_LOOK tag is set to YES doxygen will generate inheritance and +# collaboration diagrams in a style similar to the OMG's Unified Modeling +# Language. + +UML_LOOK = NO + +# If set to YES, the inheritance and collaboration graphs will show the +# relations between templates and their instances. + +TEMPLATE_RELATIONS = NO + +# If the ENABLE_PREPROCESSING, SEARCH_INCLUDES, INCLUDE_GRAPH, and HAVE_DOT +# tags are set to YES then doxygen will generate a graph for each documented +# file showing the direct and indirect include dependencies of the file with +# other documented files. + +INCLUDE_GRAPH = YES + +# If the ENABLE_PREPROCESSING, SEARCH_INCLUDES, INCLUDED_BY_GRAPH, and +# HAVE_DOT tags are set to YES then doxygen will generate a graph for each +# documented header file showing the documented files that directly or +# indirectly include this file. + +INCLUDED_BY_GRAPH = YES + +# If the CALL_GRAPH and HAVE_DOT tags are set to YES then doxygen will +# generate a call dependency graph for every global function or class method. +# Note that enabling this option will significantly increase the time of a run. +# So in most cases it will be better to enable call graphs for selected +# functions only using the \callgraph command. + +CALL_GRAPH = NO + +# If the GRAPHICAL_HIERARCHY and HAVE_DOT tags are set to YES then doxygen +# will graphical hierarchy of all classes instead of a textual one. + +GRAPHICAL_HIERARCHY = YES + +# If the DIRECTORY_GRAPH, SHOW_DIRECTORIES and HAVE_DOT tags are set to YES +# then doxygen will show the dependencies a directory has on other directories +# in a graphical way. The dependency relations are determined by the #include +# relations between the files in the directories. + +DIRECTORY_GRAPH = YES + +# The DOT_IMAGE_FORMAT tag can be used to set the image format of the images +# generated by dot. Possible values are png, jpg, or gif +# If left blank png will be used. + +DOT_IMAGE_FORMAT = png + +# The tag DOT_PATH can be used to specify the path where the dot tool can be +# found. If left blank, it is assumed the dot tool can be found in the path. + +DOT_PATH = @DOTDIR@ + +# The DOTFILE_DIRS tag can be used to specify one or more directories that +# contain dot files that are included in the documentation (see the +# \dotfile command). + +DOTFILE_DIRS = + +# The MAX_DOT_GRAPH_WIDTH tag can be used to set the maximum allowed width +# (in pixels) of the graphs generated by dot. If a graph becomes larger than +# this value, doxygen will try to truncate the graph, so that it fits within +# the specified constraint. Beware that most browsers cannot cope with very +# large images. + +MAX_DOT_GRAPH_WIDTH = 1024 + +# The MAX_DOT_GRAPH_HEIGHT tag can be used to set the maximum allows height +# (in pixels) of the graphs generated by dot. If a graph becomes larger than +# this value, doxygen will try to truncate the graph, so that it fits within +# the specified constraint. Beware that most browsers cannot cope with very +# large images. + +MAX_DOT_GRAPH_HEIGHT = 1024 + +# The MAX_DOT_GRAPH_DEPTH tag can be used to set the maximum depth of the +# graphs generated by dot. A depth value of 3 means that only nodes reachable +# from the root by following a path via at most 3 edges will be shown. Nodes +# that lay further from the root node will be omitted. Note that setting this +# option to 1 or 2 may greatly reduce the computation time needed for large +# code bases. Also note that a graph may be further truncated if the graph's +# image dimensions are not sufficient to fit the graph (see MAX_DOT_GRAPH_WIDTH +# and MAX_DOT_GRAPH_HEIGHT). If 0 is used for the depth value (the default), +# the graph is not depth-constrained. + +MAX_DOT_GRAPH_DEPTH = 0 + +# Set the DOT_TRANSPARENT tag to YES to generate images with a transparent +# background. This is disabled by default, which results in a white background. +# Warning: Depending on the platform used, enabling this option may lead to +# badly anti-aliased labels on the edges of a graph (i.e. they become hard to +# read). + +DOT_TRANSPARENT = NO + +# Set the DOT_MULTI_TARGETS tag to YES allow dot to generate multiple output +# files in one run (i.e. multiple -o and -T options on the command line). This +# makes dot run faster, but since only newer versions of dot (>1.8.10) +# support this, this feature is disabled by default. + +DOT_MULTI_TARGETS = NO + +# If the GENERATE_LEGEND tag is set to YES (the default) Doxygen will +# generate a legend page explaining the meaning of the various boxes and +# arrows in the dot generated graphs. + +GENERATE_LEGEND = YES + +# If the DOT_CLEANUP tag is set to YES (the default) Doxygen will +# remove the intermediate dot files that are used to generate +# the various graphs. + +DOT_CLEANUP = YES + +#--------------------------------------------------------------------------- +# Configuration::additions related to the search engine +#--------------------------------------------------------------------------- + +# The SEARCHENGINE tag specifies whether or not a search engine should be +# used. If set to NO the values of all tags below this one will be ignored. + +SEARCHENGINE = NO diff --git a/doc/apt-cache.8.xml b/doc/apt-cache.8.xml index 2779f2501..c1e65332d 100644 --- a/doc/apt-cache.8.xml +++ b/doc/apt-cache.8.xml @@ -151,7 +151,7 @@ Reverse Provides: a dependency but were not provided by any package. Missing packages may be in evidence if a full distribution is not accessed, or if a package (real or virtual) has been dropped from the distribution. Usually they - are referenced from Conflicts statements.</para> + are referenced from Conflicts or Breaks statements.</para> </listitem> <listitem><para><literal>Total distinct</literal> versions is the number of package versions diff --git a/doc/apt-get.8.xml b/doc/apt-get.8.xml index 17f663a35..3c245b83b 100644 --- a/doc/apt-get.8.xml +++ b/doc/apt-get.8.xml @@ -47,6 +47,7 @@ <arg>check</arg> <arg>clean</arg> <arg>autoclean</arg> + <arg>autoremove</arg> </group> </cmdsynopsis> </refsynopsisdiv> @@ -203,6 +204,11 @@ <literal>APT::Clean-Installed</literal> will prevent installed packages from being erased if it is set to off.</para></listitem> </varlistentry> + + <varlistentry><term>autoremove</term> + <listitem><para><literal>autoremove</literal> is used to remove packages that were automatically + installed to satisfy dependencies for some package and that are no more needed.</para></listitem> + </varlistentry> </variablelist> </refsect1> @@ -382,6 +388,13 @@ Configuration Item: <literal>APT::Get::Remove</literal>.</para></listitem> </varlistentry> + <varlistentry><term><option>--auto-remove</option></term> + <listitem><para>If the command is either <literal>install</literal> or <literal>remove</literal>, + then this option acts like running <literal>autoremove</literal> command, removing the unused + dependency packages. Configuration Item: <literal>APT::Get::AutomaticRemove</literal>. + </para></listitem> + </varlistentry> + <varlistentry><term><option>--only-source</option></term> <listitem><para>Only has meaning for the <literal>source</literal> and <literal>build-dep</literal> diff --git a/doc/apt_preferences.5.xml b/doc/apt_preferences.5.xml index 3e50bef8c..ab0107d36 100644 --- a/doc/apt_preferences.5.xml +++ b/doc/apt_preferences.5.xml @@ -143,10 +143,11 @@ separated by blank lines. Records can have one of two forms, a specific form and a general form. <itemizedlist> <listitem> -<simpara>The specific form assigns a priority (a "Pin-Priority") to a -specified package and specified version or version range. For example, +<simpara>The specific form assigns a priority (a "Pin-Priority") to one or more +specified packages and specified version or version range. For example, the following record assigns a high priority to all versions of -the <filename>perl</filename> package whose version number begins with "<literal>5.8</literal>".</simpara> +the <filename>perl</filename> package whose version number begins with "<literal>5.8</literal>". +Multiple packages can be separated by spaces.</simpara> <programlisting> Package: perl @@ -183,7 +184,7 @@ belonging to any distribution whose Archive name is "<literal>unstable</literal> <programlisting> Package: * Pin: release a=unstable -Pin-Priority: 50 +Pin-Priority: 500 </programlisting> <simpara>The following record assigns a high priority to all package versions diff --git a/doc/cache.sgml b/doc/cache.sgml index aa87db986..e257dcd81 100644 --- a/doc/cache.sgml +++ b/doc/cache.sgml @@ -492,7 +492,7 @@ This is the parsed priority value of the package. Dependency contains the information for a single dependency record. The records are split up like this to ease processing by the client. The base of list linked list is Version.DependsList. All forms of dependencies are recorded -here including Conflicts, Suggests and Recommends. +here including Conflicts, Breaks, Suggests and Recommends. <p> Multiple depends on the same package must be grouped together in @@ -671,6 +671,7 @@ of them. #define pkgDEP_Recommends 4 #define pkgDEP_Conflicts 5 #define pkgDEP_Replaces 6 +#define pkgDEP_Breaks 8 </example> </sect1> diff --git a/doc/dpkg-tech.sgml b/doc/dpkg-tech.sgml index 23372d71f..7c6e023dd 100644 --- a/doc/dpkg-tech.sgml +++ b/doc/dpkg-tech.sgml @@ -46,6 +46,8 @@ The basic dpkg package control file supports the following major features:- productivity of the package <item>Conflicts, to specify a package which must NOT be installed in order for the package to be configured + <item>Breaks, to specify a package which is broken by the + package and which should therefore not be configured while broken </list> Each of these dependencies can specify a version and a depedency on that version, for example "<= 0.5-1", "== 2.7.2-1", etc. The comparators available diff --git a/doc/examples/configure-index b/doc/examples/configure-index index dad8b691c..d0aad1e3d 100644 --- a/doc/examples/configure-index +++ b/doc/examples/configure-index @@ -24,11 +24,16 @@ APT { Architecture "i386"; Build-Essential "build-essential"; - + + NeverAutoRemove { "linux-kernel.*"; }; // packages that should never + // considered for autoRemove + // Options for apt-get Get { Arch-Only "false"; + AutomaticRemove "false"; + HideAutoRemove "false"; Download-Only "false"; Simulate "false"; Assume-Yes "false"; @@ -90,6 +95,13 @@ APT Cache-Limit "4194304"; Default-Release ""; + // consider Recommends, Suggests as important dependencies that should + // be installed by default + APT::Install-Recommends "false"; + APT::Install-Suggests "false"; + + // consider dependencies of packages in this section manual + Never-MarkAuto-Section "metapackages"; // Write progress messages on this fd (for stuff like base-config) Status-Fd "-1"; @@ -104,6 +116,8 @@ Acquire Queue-Mode "host"; // host|access Retries "0"; Source-Symlinks "true"; + + PDiffs "true"; // try to get the IndexFile diffs // HTTP method configuration http @@ -267,8 +281,8 @@ Debug pkgDPkgPM "false"; pkgDPkgProgressReporting "false"; pkgOrderList "false"; + pkgAutoRemove "false"; // show information about automatic removes BuildDeps "false"; - pkgInitialize "false"; // This one will dump the configuration space NoLocking "false"; Acquire::Ftp "false"; // Show ftp command traffic diff --git a/doc/makefile b/doc/makefile index 31ee061fb..5f774b825 100644 --- a/doc/makefile +++ b/doc/makefile @@ -42,3 +42,24 @@ doc.ja: %.ja: doc.pl: %.pl: $(MAKE) -C pl $* + +ifdef DOXYGEN +DOXYGEN_SOURCES = $(shell find $(BASE)/apt-pkg -not -name .\\\#* -and \( -name \*.cc -or -name \*.h \) ) + +clean: doxygen-clean + +doxygen-clean: + rm -fr $(BUILD)/doc/doxygen + rm -f $(BUILD)/doc/doxygen-stamp + +$(BUILD)/doc/Doxyfile: Doxyfile.in + (cd $(BUILD) && ./config.status doc/Doxyfile) + +$(BUILD)/doc/doxygen-stamp: $(DOXYGEN_SOURCES) $(BUILD)/doc/Doxyfile + rm -fr $(BUILD)/doc/doxygen + $(DOXYGEN) $(BUILD)/doc/Doxyfile + touch $(BUILD)/doc/doxygen-stamp + +doc: $(BUILD)/doc/doxygen-stamp + +endif diff --git a/ftparchive/apt-ftparchive.h b/ftparchive/apt-ftparchive.h index c364d670e..240cf9ba7 100644 --- a/ftparchive/apt-ftparchive.h +++ b/ftparchive/apt-ftparchive.h @@ -13,9 +13,6 @@ #ifndef APT_FTPARCHIVE_H #define APT_FTPARCHIVE_H -#ifdef __GNUG__ -#pragma interface "apt-ftparchive.h" -#endif #include <fstream> diff --git a/ftparchive/cachedb.h b/ftparchive/cachedb.h index afa22213a..c10f41ecc 100644 --- a/ftparchive/cachedb.h +++ b/ftparchive/cachedb.h @@ -12,9 +12,7 @@ #ifndef CACHEDB_H #define CACHEDB_H -#ifdef __GNUG__ -#pragma interface "cachedb.h" -#endif + #include <db.h> #include <string> diff --git a/ftparchive/multicompress.h b/ftparchive/multicompress.h index 444d8626f..a65077e73 100644 --- a/ftparchive/multicompress.h +++ b/ftparchive/multicompress.h @@ -16,9 +16,7 @@ #ifndef MULTICOMPRESS_H #define MULTICOMPRESS_H -#ifdef __GNUG__ -#pragma interface "multicompress.h" -#endif + #include <string> #include <apt-pkg/fileutl.h> diff --git a/ftparchive/override.h b/ftparchive/override.h index e64641776..f270556eb 100644 --- a/ftparchive/override.h +++ b/ftparchive/override.h @@ -12,9 +12,7 @@ #ifndef OVERRIDE_H #define OVERRIDE_H -#ifdef __GNUG__ -#pragma interface "override.h" -#endif + #include <map> #include <string> diff --git a/ftparchive/writer.h b/ftparchive/writer.h index 1d47d57ec..a4e4356f9 100644 --- a/ftparchive/writer.h +++ b/ftparchive/writer.h @@ -13,9 +13,6 @@ #ifndef WRITER_H #define WRITER_H -#ifdef __GNUG__ -#pragma interface "writer.h" -#endif #include <string> #include <stdio.h> diff --git a/methods/cdrom.cc b/methods/cdrom.cc index d6b8eae75..601bc11c9 100644 --- a/methods/cdrom.cc +++ b/methods/cdrom.cc @@ -30,7 +30,7 @@ class CDROMMethod : public pkgAcqMethod ::Configuration Database; string CurrentID; string CDROM; - bool Mounted; + bool MountedByApt; virtual bool Fetch(FetchItem *Itm); string GetID(string Name); @@ -48,7 +48,7 @@ CDROMMethod::CDROMMethod() : pkgAcqMethod("1.0",SingleInstance | LocalOnly | SendConfig | NeedsCleanup | Removable), DatabaseLoaded(false), - Mounted(false) + MountedByApt(false) { }; /*}}}*/ @@ -57,7 +57,7 @@ CDROMMethod::CDROMMethod() : pkgAcqMethod("1.0",SingleInstance | LocalOnly | /* */ void CDROMMethod::Exit() { - if (Mounted == true) + if (MountedByApt == true) UnmountCdrom(CDROM); } /*}}}*/ @@ -139,7 +139,8 @@ bool CDROMMethod::Fetch(FetchItem *Itm) while (CurrentID.empty() == true) { bool Hit = false; - Mounted = MountCdrom(CDROM); + if(!IsMounted(CDROM)) + MountedByApt = MountCdrom(CDROM); for (unsigned int Version = 2; Version != 0; Version--) { if (IdentCdrom(CDROM,NewID,Version) == false) @@ -160,7 +161,8 @@ bool CDROMMethod::Fetch(FetchItem *Itm) break; // I suppose this should prompt somehow? - if (UnmountCdrom(CDROM) == false) + if (_config->FindB("APT::CDROM::NoMount",false) == false && + UnmountCdrom(CDROM) == false) return _error->Error(_("Unable to unmount the CD-ROM in %s, it may still be in use."), CDROM.c_str()); if (MediaFail(Get.Host,CDROM) == false) diff --git a/methods/http.cc b/methods/http.cc index c6623c46f..5aefd4c1f 100644 --- a/methods/http.cc +++ b/methods/http.cc @@ -44,6 +44,7 @@ // Internet stuff #include <netdb.h> +#include "config.h" #include "connect.h" #include "rfc2553emu.h" #include "http.h" @@ -58,7 +59,6 @@ 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}; @@ -714,7 +714,7 @@ void HttpMethod::SendReq(FetchItem *Itm,CircleBuf &Out) Req += string("Authorization: Basic ") + Base64Encode(Uri.User + ":" + Uri.Password) + "\r\n"; - Req += "User-Agent: Debian APT-HTTP/1.3\r\n\r\n"; + Req += "User-Agent: Debian APT-HTTP/1.3 ("VERSION")\r\n\r\n"; if (Debug == true) cerr << Req << endl; diff --git a/methods/makefile b/methods/makefile index e3db7210a..f178cbbea 100644 --- a/methods/makefile +++ b/methods/makefile @@ -7,7 +7,7 @@ include ../buildlib/defaults.mak BIN := $(BIN)/methods # FIXME.. -LIB_APT_PKG_MAJOR = 3.11 +LIB_APT_PKG_MAJOR = 4.4 APT_DOMAIN := libapt-pkg$(LIB_APT_PKG_MAJOR) # The file method @@ -66,6 +66,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/ChangeLog b/po/ChangeLog index 1171d288a..0d2ad6e3f 100644 --- a/po/ChangeLog +++ b/po/ChangeLog @@ -1,3 +1,45 @@ +2007-04-01 priti Patil <prithisd@gmail.com> + + * mr.po: New Marathi translation + Closes: #416806 + +2007-03-31 Kov Chai <tchaikov@sjtu.org> + + * zh_CN.po: Updated by Eric Pareja + Closes: #416822 + +2007-03-29 eric pareja <xenos@upm.edu.ph> + + * tl.po: Updated by Eric Pareja + Closes: #416638 + +2007-02-28 Jacobo Tarrio <jtarrio@trasno.net> + + * gl.po: Updated by Jacobo Tarrio + Closes: #412828 + +2007-02-03 Claus Hindsgaul <claus.hindsgaul@gmail.com> + + * da.po: Updated by Claus Hindsgaul + Closes: #409483 + +2007-01-29 Christian Perrier <bubulle@debian.org> + + * fr.po: Remove a non-breakable space for usability + issues. Closes: #408877 + +2006-12-12 Yuri Kozlov <kozlov.y@gmail.com> + + * ru.po: Updated Russian translation. Closes: #405476 + +2006-12-12 Christian Perrier <bubulle@debian.org> + + * *.po: Unfuzzy after upstream typo corrections + +2006-12-12 Eugeniy Meshcheryakov <eugen@debian.org> + + * uk.po: Updated Ukrainian translation: 495t16f3u + 2006-11-04 Artem Bondarenko <artem.brz@gmail.com> * uk.po: New Ukrainian translation: 483t28f3u diff --git a/po/apt-all.pot b/po/apt-all.pot index dd8f834da..bd066ab06 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-12-19 11:40+0100\n" +"POT-Creation-Date: 2006-08-15 15:55+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" @@ -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:141 #, 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:181 cmdline/apt-cache.cc:550 cmdline/apt-cache.cc:638 +#: cmdline/apt-cache.cc:794 cmdline/apt-cache.cc:1012 +#: cmdline/apt-cache.cc:1413 cmdline/apt-cache.cc:1564 #, c-format msgid "Unable to locate package %s" msgstr "" -#: cmdline/apt-cache.cc:232 +#: cmdline/apt-cache.cc:245 msgid "Total package names : " msgstr "" -#: cmdline/apt-cache.cc:272 +#: cmdline/apt-cache.cc:285 msgid " Normal packages: " msgstr "" -#: cmdline/apt-cache.cc:273 +#: cmdline/apt-cache.cc:286 msgid " Pure virtual packages: " msgstr "" -#: cmdline/apt-cache.cc:274 +#: cmdline/apt-cache.cc:287 msgid " Single virtual packages: " msgstr "" -#: cmdline/apt-cache.cc:275 +#: cmdline/apt-cache.cc:288 msgid " Mixed virtual packages: " msgstr "" -#: cmdline/apt-cache.cc:276 +#: cmdline/apt-cache.cc:289 msgid " Missing: " msgstr "" -#: cmdline/apt-cache.cc:278 +#: cmdline/apt-cache.cc:291 msgid "Total distinct versions: " msgstr "" -#: cmdline/apt-cache.cc:280 +#: cmdline/apt-cache.cc:293 +msgid "Total Distinct Descriptions: " +msgstr "" + +#: cmdline/apt-cache.cc:295 msgid "Total dependencies: " msgstr "" -#: cmdline/apt-cache.cc:283 +#: cmdline/apt-cache.cc:298 msgid "Total ver/file relations: " msgstr "" -#: cmdline/apt-cache.cc:285 +#: cmdline/apt-cache.cc:300 +msgid "Total Desc/File relations: " +msgstr "" + +#: cmdline/apt-cache.cc:302 msgid "Total Provides mappings: " msgstr "" -#: cmdline/apt-cache.cc:297 +#: cmdline/apt-cache.cc:314 msgid "Total globbed strings: " msgstr "" -#: cmdline/apt-cache.cc:311 +#: cmdline/apt-cache.cc:328 msgid "Total dependency version space: " msgstr "" -#: cmdline/apt-cache.cc:316 +#: cmdline/apt-cache.cc:333 msgid "Total slack space: " msgstr "" -#: cmdline/apt-cache.cc:324 +#: cmdline/apt-cache.cc:341 msgid "Total space accounted for: " msgstr "" -#: cmdline/apt-cache.cc:446 cmdline/apt-cache.cc:1189 +#: cmdline/apt-cache.cc:469 cmdline/apt-cache.cc:1212 #, c-format msgid "Package file %s is out of sync." msgstr "" -#: cmdline/apt-cache.cc:1231 +#: cmdline/apt-cache.cc:1287 msgid "You must give exactly one pattern" msgstr "" -#: cmdline/apt-cache.cc:1385 +#: cmdline/apt-cache.cc:1441 msgid "No packages found" msgstr "" -#: cmdline/apt-cache.cc:1462 +#: cmdline/apt-cache.cc:1518 msgid "Package files:" msgstr "" -#: cmdline/apt-cache.cc:1469 cmdline/apt-cache.cc:1555 +#: cmdline/apt-cache.cc:1525 cmdline/apt-cache.cc:1611 msgid "Cache is out of sync, can't x-ref a package file" msgstr "" -#: cmdline/apt-cache.cc:1470 +#: cmdline/apt-cache.cc:1526 #, c-format msgid "%4i %s\n" msgstr "" #. Show any packages have explicit pins -#: cmdline/apt-cache.cc:1482 +#: cmdline/apt-cache.cc:1538 msgid "Pinned packages:" msgstr "" -#: cmdline/apt-cache.cc:1494 cmdline/apt-cache.cc:1535 +#: cmdline/apt-cache.cc:1550 cmdline/apt-cache.cc:1591 msgid "(not found)" msgstr "" #. Installed version -#: cmdline/apt-cache.cc:1515 +#: cmdline/apt-cache.cc:1571 msgid " Installed: " msgstr "" -#: cmdline/apt-cache.cc:1517 cmdline/apt-cache.cc:1525 +#: cmdline/apt-cache.cc:1573 cmdline/apt-cache.cc:1581 msgid "(none)" msgstr "" #. Candidate Version -#: cmdline/apt-cache.cc:1522 +#: cmdline/apt-cache.cc:1578 msgid " Candidate: " msgstr "" -#: cmdline/apt-cache.cc:1532 +#: cmdline/apt-cache.cc:1588 msgid " Package pin: " msgstr "" #. Show the priority tables -#: cmdline/apt-cache.cc:1541 +#: cmdline/apt-cache.cc:1597 msgid " Version table:" msgstr "" -#: cmdline/apt-cache.cc:1556 +#: cmdline/apt-cache.cc:1612 #, 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:1708 cmdline/apt-cdrom.cc:138 cmdline/apt-config.cc:70 #: cmdline/apt-extracttemplates.cc:225 ftparchive/apt-ftparchive.cc:550 -#: cmdline/apt-get.cc:2387 cmdline/apt-sortpkgs.cc:144 +#: cmdline/apt-get.cc:2462 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:1715 msgid "" "Usage: apt-cache [options] command\n" " apt-cache [options] add file1 [file2 ...]\n" @@ -243,7 +251,8 @@ msgid "" " -o=? Set an arbitrary configuration option, eg -o dir::cache=/tmp\n" msgstr "" -#: cmdline/apt-extracttemplates.cc:267 apt-pkg/pkgcachegen.cc:710 +#: cmdline/apt-extracttemplates.cc:267 apt-pkg/pkgcachegen.cc:817 +#: apt-pkg/pkgcachegen.cc:819 #, c-format msgid "Unable to write to %s" msgstr "" @@ -542,221 +551,221 @@ msgstr "" msgid "Failed to rename %s to %s" msgstr "" -#: cmdline/apt-get.cc:120 +#: cmdline/apt-get.cc:121 msgid "Y" msgstr "" -#: cmdline/apt-get.cc:142 cmdline/apt-get.cc:1506 +#: cmdline/apt-get.cc:143 cmdline/apt-get.cc:1574 #, c-format msgid "Regex compilation error - %s" msgstr "" -#: cmdline/apt-get.cc:237 +#: cmdline/apt-get.cc:238 msgid "The following packages have unmet dependencies:" msgstr "" -#: cmdline/apt-get.cc:327 +#: cmdline/apt-get.cc:328 #, c-format msgid "but %s is installed" msgstr "" -#: cmdline/apt-get.cc:329 +#: cmdline/apt-get.cc:330 #, c-format msgid "but %s is to be installed" msgstr "" -#: cmdline/apt-get.cc:336 +#: cmdline/apt-get.cc:337 msgid "but it is not installable" msgstr "" -#: cmdline/apt-get.cc:338 +#: cmdline/apt-get.cc:339 msgid "but it is a virtual package" msgstr "" -#: cmdline/apt-get.cc:341 +#: cmdline/apt-get.cc:342 msgid "but it is not installed" msgstr "" -#: cmdline/apt-get.cc:341 +#: cmdline/apt-get.cc:342 msgid "but it is not going to be installed" msgstr "" -#: cmdline/apt-get.cc:346 +#: cmdline/apt-get.cc:347 msgid " or" msgstr "" -#: cmdline/apt-get.cc:375 +#: cmdline/apt-get.cc:376 msgid "The following NEW packages will be installed:" msgstr "" -#: cmdline/apt-get.cc:401 +#: cmdline/apt-get.cc:402 msgid "The following packages will be REMOVED:" msgstr "" -#: cmdline/apt-get.cc:423 +#: cmdline/apt-get.cc:424 msgid "The following packages have been kept back:" msgstr "" -#: cmdline/apt-get.cc:444 +#: cmdline/apt-get.cc:445 msgid "The following packages will be upgraded:" msgstr "" -#: cmdline/apt-get.cc:465 +#: cmdline/apt-get.cc:466 msgid "The following packages will be DOWNGRADED:" msgstr "" -#: cmdline/apt-get.cc:485 +#: cmdline/apt-get.cc:486 msgid "The following held packages will be changed:" msgstr "" -#: cmdline/apt-get.cc:538 +#: cmdline/apt-get.cc:539 #, c-format msgid "%s (due to %s) " msgstr "" -#: cmdline/apt-get.cc:546 +#: cmdline/apt-get.cc:547 msgid "" "WARNING: The following essential packages will be removed.\n" "This should NOT be done unless you know exactly what you are doing!" msgstr "" -#: cmdline/apt-get.cc:577 +#: cmdline/apt-get.cc:578 #, c-format msgid "%lu upgraded, %lu newly installed, " msgstr "" -#: cmdline/apt-get.cc:581 +#: cmdline/apt-get.cc:582 #, c-format msgid "%lu reinstalled, " msgstr "" -#: cmdline/apt-get.cc:583 +#: cmdline/apt-get.cc:584 #, c-format msgid "%lu downgraded, " msgstr "" -#: cmdline/apt-get.cc:585 +#: cmdline/apt-get.cc:586 #, c-format msgid "%lu to remove and %lu not upgraded.\n" msgstr "" -#: cmdline/apt-get.cc:589 +#: cmdline/apt-get.cc:590 #, c-format msgid "%lu not fully installed or removed.\n" msgstr "" -#: cmdline/apt-get.cc:649 +#: cmdline/apt-get.cc:664 msgid "Correcting dependencies..." msgstr "" -#: cmdline/apt-get.cc:652 +#: cmdline/apt-get.cc:667 msgid " failed." msgstr "" -#: cmdline/apt-get.cc:655 +#: cmdline/apt-get.cc:670 msgid "Unable to correct dependencies" msgstr "" -#: cmdline/apt-get.cc:658 +#: cmdline/apt-get.cc:673 msgid "Unable to minimize the upgrade set" msgstr "" -#: cmdline/apt-get.cc:660 +#: cmdline/apt-get.cc:675 msgid " Done" msgstr "" -#: cmdline/apt-get.cc:664 +#: cmdline/apt-get.cc:679 msgid "You might want to run `apt-get -f install' to correct these." msgstr "" -#: cmdline/apt-get.cc:667 +#: cmdline/apt-get.cc:682 msgid "Unmet dependencies. Try using -f." msgstr "" -#: cmdline/apt-get.cc:689 +#: cmdline/apt-get.cc:704 msgid "WARNING: The following packages cannot be authenticated!" msgstr "" -#: cmdline/apt-get.cc:693 +#: cmdline/apt-get.cc:708 msgid "Authentication warning overridden.\n" msgstr "" -#: cmdline/apt-get.cc:700 +#: cmdline/apt-get.cc:715 msgid "Install these packages without verification [y/N]? " msgstr "" -#: cmdline/apt-get.cc:702 +#: cmdline/apt-get.cc:717 msgid "Some packages could not be authenticated" msgstr "" -#: cmdline/apt-get.cc:711 cmdline/apt-get.cc:858 +#: 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:755 +#: cmdline/apt-get.cc:770 msgid "Internal error, InstallPackages was called with broken packages!" msgstr "" -#: cmdline/apt-get.cc:764 +#: cmdline/apt-get.cc:779 msgid "Packages need to be removed but remove is disabled." msgstr "" -#: cmdline/apt-get.cc:775 +#: cmdline/apt-get.cc:790 msgid "Internal error, Ordering didn't finish" msgstr "" -#: cmdline/apt-get.cc:791 cmdline/apt-get.cc:1818 cmdline/apt-get.cc:1851 +#: cmdline/apt-get.cc:806 cmdline/apt-get.cc:1893 cmdline/apt-get.cc:1926 msgid "Unable to lock the download directory" msgstr "" -#: cmdline/apt-get.cc:801 cmdline/apt-get.cc:1899 cmdline/apt-get.cc:2135 +#: cmdline/apt-get.cc:816 cmdline/apt-get.cc:1974 cmdline/apt-get.cc:2210 #: apt-pkg/cachefile.cc:67 msgid "The list of sources could not be read." msgstr "" -#: cmdline/apt-get.cc:816 +#: cmdline/apt-get.cc:831 msgid "How odd.. The sizes didn't match, email apt@packages.debian.org" msgstr "" -#: cmdline/apt-get.cc:821 +#: cmdline/apt-get.cc:836 #, c-format msgid "Need to get %sB/%sB of archives.\n" msgstr "" -#: cmdline/apt-get.cc:824 +#: cmdline/apt-get.cc:839 #, c-format msgid "Need to get %sB of archives.\n" msgstr "" -#: cmdline/apt-get.cc:829 +#: cmdline/apt-get.cc:844 #, c-format msgid "After unpacking %sB of additional disk space will be used.\n" msgstr "" -#: cmdline/apt-get.cc:832 +#: cmdline/apt-get.cc:847 #, c-format msgid "After unpacking %sB disk space will be freed.\n" msgstr "" -#: cmdline/apt-get.cc:846 cmdline/apt-get.cc:1989 +#: cmdline/apt-get.cc:861 cmdline/apt-get.cc:2064 #, c-format msgid "Couldn't determine free space in %s" msgstr "" -#: cmdline/apt-get.cc:849 +#: cmdline/apt-get.cc:864 #, c-format msgid "You don't have enough free space in %s." msgstr "" -#: cmdline/apt-get.cc:864 cmdline/apt-get.cc:884 +#: 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:866 +#: cmdline/apt-get.cc:881 msgid "Yes, do as I say!" msgstr "" -#: cmdline/apt-get.cc:868 +#: cmdline/apt-get.cc:883 #, c-format msgid "" "You are about to do something potentially harmful.\n" @@ -764,74 +773,74 @@ msgid "" " ?] " msgstr "" -#: cmdline/apt-get.cc:874 cmdline/apt-get.cc:893 +#: cmdline/apt-get.cc:889 cmdline/apt-get.cc:908 msgid "Abort." msgstr "" -#: cmdline/apt-get.cc:889 +#: cmdline/apt-get.cc:904 msgid "Do you want to continue [Y/n]? " msgstr "" -#: cmdline/apt-get.cc:961 cmdline/apt-get.cc:1365 cmdline/apt-get.cc:2032 +#: cmdline/apt-get.cc:976 cmdline/apt-get.cc:1382 cmdline/apt-get.cc:2107 #, c-format msgid "Failed to fetch %s %s\n" msgstr "" -#: cmdline/apt-get.cc:979 +#: cmdline/apt-get.cc:994 msgid "Some files failed to download" msgstr "" -#: cmdline/apt-get.cc:980 cmdline/apt-get.cc:2041 +#: cmdline/apt-get.cc:995 cmdline/apt-get.cc:2116 msgid "Download complete and in download only mode" msgstr "" -#: cmdline/apt-get.cc:986 +#: 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:990 +#: cmdline/apt-get.cc:1005 msgid "--fix-missing and media swapping is not currently supported" msgstr "" -#: cmdline/apt-get.cc:995 +#: cmdline/apt-get.cc:1010 msgid "Unable to correct missing packages." msgstr "" -#: cmdline/apt-get.cc:996 +#: cmdline/apt-get.cc:1011 msgid "Aborting install." msgstr "" -#: cmdline/apt-get.cc:1030 +#: cmdline/apt-get.cc:1045 #, c-format msgid "Note, selecting %s instead of %s\n" msgstr "" -#: cmdline/apt-get.cc:1040 +#: 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:1058 +#: cmdline/apt-get.cc:1073 #, c-format msgid "Package %s is not installed, so not removed\n" msgstr "" -#: cmdline/apt-get.cc:1069 +#: cmdline/apt-get.cc:1084 #, c-format msgid "Package %s is a virtual package provided by:\n" msgstr "" -#: cmdline/apt-get.cc:1081 +#: cmdline/apt-get.cc:1096 msgid " [Installed]" msgstr "" -#: cmdline/apt-get.cc:1086 +#: cmdline/apt-get.cc:1101 msgid "You should explicitly select one to install." msgstr "" -#: cmdline/apt-get.cc:1091 +#: cmdline/apt-get.cc:1106 #, c-format msgid "" "Package %s is not available, but is referred to by another package.\n" @@ -839,79 +848,97 @@ msgid "" "is only available from another source\n" msgstr "" -#: cmdline/apt-get.cc:1110 +#: cmdline/apt-get.cc:1125 msgid "However the following packages replace it:" msgstr "" -#: cmdline/apt-get.cc:1113 +#: cmdline/apt-get.cc:1128 #, c-format msgid "Package %s has no installation candidate" msgstr "" -#: cmdline/apt-get.cc:1133 +#: cmdline/apt-get.cc:1148 #, c-format msgid "Reinstallation of %s is not possible, it cannot be downloaded.\n" msgstr "" -#: cmdline/apt-get.cc:1141 +#: cmdline/apt-get.cc:1156 #, c-format msgid "%s is already the newest version.\n" msgstr "" -#: cmdline/apt-get.cc:1168 +#: cmdline/apt-get.cc:1185 #, c-format msgid "Release '%s' for '%s' was not found" msgstr "" -#: cmdline/apt-get.cc:1170 +#: cmdline/apt-get.cc:1187 #, c-format msgid "Version '%s' for '%s' was not found" msgstr "" -#: cmdline/apt-get.cc:1176 +#: cmdline/apt-get.cc:1193 #, c-format msgid "Selected version %s (%s) for %s\n" msgstr "" -#: cmdline/apt-get.cc:1313 +#: cmdline/apt-get.cc:1330 msgid "The update command takes no arguments" msgstr "" -#: cmdline/apt-get.cc:1326 +#: cmdline/apt-get.cc:1343 msgid "Unable to lock the list directory" msgstr "" -#: cmdline/apt-get.cc:1384 +#: cmdline/apt-get.cc:1401 msgid "" "Some index files failed to download, they have been ignored, or old ones " "used instead." msgstr "" -#: cmdline/apt-get.cc:1403 +#: cmdline/apt-get.cc:1415 +msgid "We are not supposed to delete stuff, can't start AutoRemover" +msgstr "" + +#: cmdline/apt-get.cc:1440 +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:1443 cmdline/apt-get.cc:1642 +msgid "The following information may help to resolve the situation:" +msgstr "" + +#: cmdline/apt-get.cc:1447 +msgid "Internal Error, AutoRemover broke stuff" +msgstr "" + +#: cmdline/apt-get.cc:1466 msgid "Internal error, AllUpgrade broke stuff" msgstr "" -#: cmdline/apt-get.cc:1493 cmdline/apt-get.cc:1529 +#: cmdline/apt-get.cc:1561 cmdline/apt-get.cc:1597 #, c-format msgid "Couldn't find package %s" msgstr "" -#: cmdline/apt-get.cc:1516 +#: cmdline/apt-get.cc:1584 #, c-format msgid "Note, selecting %s for regex '%s'\n" msgstr "" -#: cmdline/apt-get.cc:1546 +#: cmdline/apt-get.cc:1614 msgid "You might want to run `apt-get -f install' to correct these:" msgstr "" -#: cmdline/apt-get.cc:1549 +#: cmdline/apt-get.cc:1617 msgid "" "Unmet dependencies. Try 'apt-get -f install' with no packages (or specify a " "solution)." msgstr "" -#: cmdline/apt-get.cc:1561 +#: cmdline/apt-get.cc:1629 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" @@ -919,163 +946,159 @@ msgid "" "or been moved out of Incoming." msgstr "" -#: cmdline/apt-get.cc:1569 +#: cmdline/apt-get.cc:1637 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:1574 -msgid "The following information may help to resolve the situation:" -msgstr "" - -#: cmdline/apt-get.cc:1577 +#: cmdline/apt-get.cc:1645 msgid "Broken packages" msgstr "" -#: cmdline/apt-get.cc:1603 +#: cmdline/apt-get.cc:1676 msgid "The following extra packages will be installed:" msgstr "" -#: cmdline/apt-get.cc:1692 +#: cmdline/apt-get.cc:1765 msgid "Suggested packages:" msgstr "" -#: cmdline/apt-get.cc:1693 +#: cmdline/apt-get.cc:1766 msgid "Recommended packages:" msgstr "" -#: cmdline/apt-get.cc:1713 +#: cmdline/apt-get.cc:1786 msgid "Calculating upgrade... " msgstr "" -#: cmdline/apt-get.cc:1716 methods/ftp.cc:702 methods/connect.cc:101 +#: cmdline/apt-get.cc:1789 methods/ftp.cc:702 methods/connect.cc:101 msgid "Failed" msgstr "" -#: cmdline/apt-get.cc:1721 +#: cmdline/apt-get.cc:1794 msgid "Done" msgstr "" -#: cmdline/apt-get.cc:1786 cmdline/apt-get.cc:1794 +#: cmdline/apt-get.cc:1861 cmdline/apt-get.cc:1869 msgid "Internal error, problem resolver broke stuff" msgstr "" -#: cmdline/apt-get.cc:1894 +#: cmdline/apt-get.cc:1969 msgid "Must specify at least one package to fetch source for" msgstr "" -#: cmdline/apt-get.cc:1924 cmdline/apt-get.cc:2153 +#: cmdline/apt-get.cc:1999 cmdline/apt-get.cc:2228 #, c-format msgid "Unable to find a source package for %s" msgstr "" -#: cmdline/apt-get.cc:1968 +#: cmdline/apt-get.cc:2043 #, c-format msgid "Skipping already downloaded file '%s'\n" msgstr "" -#: cmdline/apt-get.cc:1992 +#: cmdline/apt-get.cc:2067 #, c-format msgid "You don't have enough free space in %s" msgstr "" -#: cmdline/apt-get.cc:1997 +#: cmdline/apt-get.cc:2072 #, c-format msgid "Need to get %sB/%sB of source archives.\n" msgstr "" -#: cmdline/apt-get.cc:2000 +#: cmdline/apt-get.cc:2075 #, c-format msgid "Need to get %sB of source archives.\n" msgstr "" -#: cmdline/apt-get.cc:2006 +#: cmdline/apt-get.cc:2081 #, c-format msgid "Fetch source %s\n" msgstr "" -#: cmdline/apt-get.cc:2037 +#: cmdline/apt-get.cc:2112 msgid "Failed to fetch some archives." msgstr "" -#: cmdline/apt-get.cc:2065 +#: cmdline/apt-get.cc:2140 #, c-format msgid "Skipping unpack of already unpacked source in %s\n" msgstr "" -#: cmdline/apt-get.cc:2077 +#: cmdline/apt-get.cc:2152 #, c-format msgid "Unpack command '%s' failed.\n" msgstr "" -#: cmdline/apt-get.cc:2078 +#: cmdline/apt-get.cc:2153 #, c-format msgid "Check if the 'dpkg-dev' package is installed.\n" msgstr "" -#: cmdline/apt-get.cc:2095 +#: cmdline/apt-get.cc:2170 #, c-format msgid "Build command '%s' failed.\n" msgstr "" -#: cmdline/apt-get.cc:2114 +#: cmdline/apt-get.cc:2189 msgid "Child process failed" msgstr "" -#: cmdline/apt-get.cc:2130 +#: cmdline/apt-get.cc:2205 msgid "Must specify at least one package to check builddeps for" msgstr "" -#: cmdline/apt-get.cc:2158 +#: cmdline/apt-get.cc:2233 #, c-format msgid "Unable to get build-dependency information for %s" msgstr "" -#: cmdline/apt-get.cc:2178 +#: cmdline/apt-get.cc:2253 #, c-format msgid "%s has no build depends.\n" msgstr "" -#: cmdline/apt-get.cc:2230 +#: cmdline/apt-get.cc:2305 #, c-format msgid "" "%s dependency for %s cannot be satisfied because the package %s cannot be " "found" msgstr "" -#: cmdline/apt-get.cc:2282 +#: cmdline/apt-get.cc:2357 #, 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:2317 +#: cmdline/apt-get.cc:2392 #, c-format msgid "Failed to satisfy %s dependency for %s: Installed package %s is too new" msgstr "" -#: cmdline/apt-get.cc:2342 +#: cmdline/apt-get.cc:2417 #, c-format msgid "Failed to satisfy %s dependency for %s: %s" msgstr "" -#: cmdline/apt-get.cc:2356 +#: cmdline/apt-get.cc:2431 #, c-format msgid "Build-dependencies for %s could not be satisfied." msgstr "" -#: cmdline/apt-get.cc:2360 +#: cmdline/apt-get.cc:2435 msgid "Failed to process build dependencies" msgstr "" -#: cmdline/apt-get.cc:2392 +#: cmdline/apt-get.cc:2467 msgid "Supported modules:" msgstr "" -#: cmdline/apt-get.cc:2433 +#: cmdline/apt-get.cc:2508 msgid "" "Usage: apt-get [options] command\n" " apt-get [options] install|remove pkg1 [pkg2 ...]\n" @@ -1360,9 +1383,11 @@ 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:643 -#: apt-pkg/pkgcachegen.cc:712 apt-pkg/pkgcachegen.cc:717 -#: apt-pkg/pkgcachegen.cc:840 +#: apt-inst/deb/dpkgdb.cc:139 apt-pkg/pkgcachegen.cc:750 +#: apt-pkg/pkgcachegen.cc:819 apt-pkg/pkgcachegen.cc:824 +#: apt-pkg/pkgcachegen.cc:947 apt-pkg/pkgcachegen.cc:752 +#: apt-pkg/pkgcachegen.cc:821 apt-pkg/pkgcachegen.cc:826 +#: apt-pkg/pkgcachegen.cc:949 msgid "Reading package lists" msgstr "" @@ -1477,25 +1502,28 @@ msgstr "" msgid "Wrong CD-ROM" msgstr "" -#: methods/cdrom.cc:164 +#: methods/cdrom.cc:164 methods/cdrom.cc:166 #, c-format msgid "Unable to unmount the CD-ROM in %s, it may still be in use." msgstr "" -#: methods/cdrom.cc:169 +#: methods/cdrom.cc:169 methods/cdrom.cc:171 msgid "Disk not found." msgstr "" #: methods/cdrom.cc:177 methods/file.cc:79 methods/rsh.cc:264 +#: methods/cdrom.cc:179 msgid "File not found" msgstr "" -#: methods/copy.cc:42 methods/gpgv.cc:281 methods/gzip.cc:141 -#: methods/gzip.cc:150 +#: methods/copy.cc:42 methods/gpgv.cc:281 methods/gzip.cc:133 +#: methods/gzip.cc:142 methods/rred.cc:234 methods/rred.cc:243 +#: methods/gzip.cc:141 methods/gzip.cc:150 msgid "Failed to stat" msgstr "" -#: methods/copy.cc:79 methods/gpgv.cc:278 methods/gzip.cc:147 +#: methods/copy.cc:79 methods/gpgv.cc:278 methods/gzip.cc:139 +#: methods/rred.cc:240 methods/gzip.cc:147 msgid "Failed to set modification time" msgstr "" @@ -1621,7 +1649,8 @@ 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:957 methods/rsh.cc:303 +#: methods/http.cc:958 msgid "Problem hashing file" msgstr "" @@ -1742,86 +1771,87 @@ msgid "" "available:\n" msgstr "" -#: methods/gzip.cc:64 +#: methods/gzip.cc:57 methods/gzip.cc:64 #, c-format msgid "Couldn't open pipe for %s" msgstr "" -#: methods/gzip.cc:109 +#: methods/gzip.cc:102 methods/gzip.cc:109 #, c-format msgid "Read error from %s process" msgstr "" -#: methods/http.cc:376 +#: methods/http.cc:375 methods/http.cc:376 msgid "Waiting for headers" msgstr "" -#: methods/http.cc:522 +#: methods/http.cc:521 methods/http.cc:522 #, c-format msgid "Got a single header line over %u chars" msgstr "" -#: methods/http.cc:530 +#: methods/http.cc:529 methods/http.cc:530 msgid "Bad header line" msgstr "" -#: methods/http.cc:549 methods/http.cc:556 +#: methods/http.cc:548 methods/http.cc:555 methods/http.cc:549 +#: methods/http.cc:556 msgid "The HTTP server sent an invalid reply header" msgstr "" -#: methods/http.cc:585 +#: methods/http.cc:584 methods/http.cc:585 msgid "The HTTP server sent an invalid Content-Length header" msgstr "" -#: methods/http.cc:600 +#: methods/http.cc:599 methods/http.cc:600 msgid "The HTTP server sent an invalid Content-Range header" msgstr "" -#: methods/http.cc:602 +#: methods/http.cc:601 methods/http.cc:602 msgid "This HTTP server has broken range support" msgstr "" -#: methods/http.cc:626 +#: methods/http.cc:625 methods/http.cc:626 msgid "Unknown date format" msgstr "" -#: methods/http.cc:773 +#: methods/http.cc:772 methods/http.cc:773 msgid "Select failed" msgstr "" -#: methods/http.cc:778 +#: methods/http.cc:777 methods/http.cc:778 msgid "Connection timed out" msgstr "" -#: methods/http.cc:801 +#: methods/http.cc:800 methods/http.cc:801 msgid "Error writing to output file" msgstr "" -#: methods/http.cc:832 +#: methods/http.cc:831 methods/http.cc:832 msgid "Error writing to file" msgstr "" -#: methods/http.cc:860 +#: methods/http.cc:859 methods/http.cc:860 msgid "Error writing to the file" msgstr "" -#: methods/http.cc:874 +#: methods/http.cc:873 methods/http.cc:874 msgid "Error reading from server. Remote end closed connection" msgstr "" -#: methods/http.cc:876 +#: methods/http.cc:875 methods/http.cc:876 msgid "Error reading from server" msgstr "" -#: methods/http.cc:1107 +#: methods/http.cc:1106 methods/http.cc:1107 msgid "Bad header data" msgstr "" -#: methods/http.cc:1124 +#: methods/http.cc:1123 methods/http.cc:1124 msgid "Connection failed" msgstr "" -#: methods/http.cc:1215 +#: methods/http.cc:1214 methods/http.cc:1215 msgid "Internal error" msgstr "" @@ -1834,7 +1864,7 @@ msgstr "" msgid "Couldn't make mmap of %lu bytes" msgstr "" -#: apt-pkg/contrib/strutl.cc:938 +#: apt-pkg/contrib/strutl.cc:981 #, c-format msgid "Selection %s not found" msgstr "" @@ -1894,12 +1924,12 @@ msgstr "" msgid "Syntax error %s:%u: Extra junk at end of file" msgstr "" -#: apt-pkg/contrib/progress.cc:155 +#: apt-pkg/contrib/progress.cc:154 apt-pkg/contrib/progress.cc:155 #, c-format msgid "%c%s... Error!" msgstr "" -#: apt-pkg/contrib/progress.cc:157 +#: apt-pkg/contrib/progress.cc:156 apt-pkg/contrib/progress.cc:157 #, c-format msgid "%c%s... Done" msgstr "" @@ -2031,93 +2061,109 @@ msgstr "" msgid "Problem syncing the file" msgstr "" -#: apt-pkg/pkgcache.cc:126 +#: apt-pkg/pkgcache.cc:137 apt-pkg/pkgcache.cc:132 msgid "Empty package cache" msgstr "" -#: apt-pkg/pkgcache.cc:132 +#: apt-pkg/pkgcache.cc:143 apt-pkg/pkgcache.cc:138 msgid "The package cache file is corrupted" msgstr "" -#: apt-pkg/pkgcache.cc:137 +#: apt-pkg/pkgcache.cc:148 apt-pkg/pkgcache.cc:143 msgid "The package cache file is an incompatible version" msgstr "" -#: apt-pkg/pkgcache.cc:142 +#: apt-pkg/pkgcache.cc:153 apt-pkg/pkgcache.cc:148 #, 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:153 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:224 msgid "Depends" msgstr "" -#: apt-pkg/pkgcache.cc:218 +#: apt-pkg/pkgcache.cc:229 apt-pkg/pkgcache.cc:224 msgid "PreDepends" msgstr "" -#: apt-pkg/pkgcache.cc:218 +#: apt-pkg/pkgcache.cc:229 apt-pkg/pkgcache.cc:224 msgid "Suggests" msgstr "" -#: apt-pkg/pkgcache.cc:219 +#: apt-pkg/pkgcache.cc:230 apt-pkg/pkgcache.cc:225 msgid "Recommends" msgstr "" -#: apt-pkg/pkgcache.cc:219 +#: apt-pkg/pkgcache.cc:230 apt-pkg/pkgcache.cc:225 msgid "Conflicts" msgstr "" -#: apt-pkg/pkgcache.cc:219 +#: apt-pkg/pkgcache.cc:230 apt-pkg/pkgcache.cc:225 msgid "Replaces" msgstr "" -#: apt-pkg/pkgcache.cc:220 +#: apt-pkg/pkgcache.cc:231 apt-pkg/pkgcache.cc:226 msgid "Obsoletes" msgstr "" -#: apt-pkg/pkgcache.cc:231 +#: apt-pkg/pkgcache.cc:242 apt-pkg/pkgcache.cc:237 msgid "important" msgstr "" -#: apt-pkg/pkgcache.cc:231 +#: apt-pkg/pkgcache.cc:242 apt-pkg/pkgcache.cc:237 msgid "required" msgstr "" -#: apt-pkg/pkgcache.cc:231 +#: apt-pkg/pkgcache.cc:242 apt-pkg/pkgcache.cc:237 msgid "standard" msgstr "" -#: apt-pkg/pkgcache.cc:232 +#: apt-pkg/pkgcache.cc:243 apt-pkg/pkgcache.cc:238 msgid "optional" msgstr "" -#: apt-pkg/pkgcache.cc:232 +#: apt-pkg/pkgcache.cc:243 apt-pkg/pkgcache.cc:238 msgid "extra" msgstr "" -#: apt-pkg/depcache.cc:61 apt-pkg/depcache.cc:90 +#: apt-pkg/depcache.cc:101 apt-pkg/depcache.cc:130 apt-pkg/depcache.cc:98 +#: apt-pkg/depcache.cc:127 msgid "Building dependency tree" msgstr "" -#: apt-pkg/depcache.cc:62 +#: apt-pkg/depcache.cc:102 apt-pkg/depcache.cc:99 msgid "Candidate versions" msgstr "" -#: apt-pkg/depcache.cc:91 +#: apt-pkg/depcache.cc:131 apt-pkg/depcache.cc:128 msgid "Dependency generation" msgstr "" -#: apt-pkg/tagfile.cc:106 +#: apt-pkg/depcache.cc:152 apt-pkg/depcache.cc:171 apt-pkg/depcache.cc:175 +#: apt-pkg/depcache.cc:149 apt-pkg/depcache.cc:168 apt-pkg/depcache.cc:172 +msgid "Reading state information" +msgstr "" + +#: apt-pkg/depcache.cc:199 apt-pkg/depcache.cc:196 +#, c-format +msgid "Failed to open StateFile %s" +msgstr "" + +#: apt-pkg/depcache.cc:205 apt-pkg/depcache.cc:202 +#, c-format +msgid "Failed to write temporary StateFile %s" +msgstr "" + +#: apt-pkg/tagfile.cc:85 apt-pkg/tagfile.cc:92 apt-pkg/tagfile.cc:106 #, c-format msgid "Unable to parse package file %s (1)" msgstr "" -#: apt-pkg/tagfile.cc:193 +#: apt-pkg/tagfile.cc:186 apt-pkg/tagfile.cc:193 #, c-format msgid "Unable to parse package file %s (2)" msgstr "" @@ -2152,7 +2198,7 @@ msgstr "" msgid "Opening %s" msgstr "" -#: apt-pkg/sourcelist.cc:220 apt-pkg/cdrom.cc:426 +#: apt-pkg/sourcelist.cc:220 apt-pkg/cdrom.cc:450 #, c-format msgid "Line %u too long in source list %s." msgstr "" @@ -2172,7 +2218,7 @@ msgstr "" msgid "Malformed line %u in source list %s (vendor id)" msgstr "" -#: apt-pkg/packagemanager.cc:402 +#: apt-pkg/packagemanager.cc:402 apt-pkg/packagemanager.cc:403 #, c-format msgid "" "This installation run will require temporarily removing the essential " @@ -2185,19 +2231,19 @@ msgstr "" msgid "Index file type '%s' is not supported" msgstr "" -#: apt-pkg/algorithms.cc:241 +#: apt-pkg/algorithms.cc:245 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:1061 +#: apt-pkg/algorithms.cc:1075 apt-pkg/algorithms.cc:1104 msgid "" "Error, pkgProblemResolver::Resolve generated breaks, this may be caused by " "held packages." msgstr "" -#: apt-pkg/algorithms.cc:1063 +#: apt-pkg/algorithms.cc:1077 apt-pkg/algorithms.cc:1106 msgid "Unable to correct problems, you have held broken packages." msgstr "" @@ -2213,12 +2259,12 @@ msgstr "" #. only show the ETA if it makes sense #. two days -#: apt-pkg/acquire.cc:823 +#: apt-pkg/acquire.cc:823 apt-pkg/acquire.cc:830 #, c-format msgid "Retrieving file %li of %li (%s remaining)" msgstr "" -#: apt-pkg/acquire.cc:825 +#: apt-pkg/acquire.cc:825 apt-pkg/acquire.cc:832 #, c-format msgid "Retrieving file %li of %li" msgstr "" @@ -2233,17 +2279,17 @@ msgstr "" msgid "Method %s did not start correctly" msgstr "" -#: apt-pkg/acquire-worker.cc:377 +#: apt-pkg/acquire-worker.cc:377 apt-pkg/acquire-worker.cc:384 #, c-format msgid "Please insert the disc labeled: '%s' in the drive '%s' and press enter." msgstr "" -#: apt-pkg/init.cc:120 +#: apt-pkg/init.cc:125 #, c-format msgid "Packaging system '%s' is not supported" msgstr "" -#: apt-pkg/init.cc:136 +#: apt-pkg/init.cc:141 msgid "Unable to determine a suitable packaging system type" msgstr "" @@ -2264,132 +2310,149 @@ msgstr "" msgid "You may want to run apt-get update to correct these problems" msgstr "" -#: apt-pkg/policy.cc:269 +#: apt-pkg/policy.cc:269 apt-pkg/policy.cc:270 msgid "Invalid record in the preferences file, no Package header" msgstr "" -#: apt-pkg/policy.cc:291 +#: apt-pkg/policy.cc:291 apt-pkg/policy.cc:292 #, c-format msgid "Did not understand pin type %s" msgstr "" -#: apt-pkg/policy.cc:299 +#: apt-pkg/policy.cc:299 apt-pkg/policy.cc:300 msgid "No priority (or zero) specified for pin" msgstr "" -#: apt-pkg/pkgcachegen.cc:74 +#: apt-pkg/pkgcachegen.cc:76 msgid "Cache has an incompatible versioning system" msgstr "" -#: apt-pkg/pkgcachegen.cc:117 +#: apt-pkg/pkgcachegen.cc:119 #, c-format msgid "Error occurred while processing %s (NewPackage)" msgstr "" -#: apt-pkg/pkgcachegen.cc:129 +#: apt-pkg/pkgcachegen.cc:134 #, c-format msgid "Error occurred while processing %s (UsePackage1)" msgstr "" -#: apt-pkg/pkgcachegen.cc:150 +#: 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:154 +#: apt-pkg/pkgcachegen.cc:186 #, c-format msgid "Error occurred while processing %s (NewFileVer1)" msgstr "" -#: apt-pkg/pkgcachegen.cc:184 +#: apt-pkg/pkgcachegen.cc:217 #, c-format msgid "Error occurred while processing %s (NewVersion1)" msgstr "" -#: apt-pkg/pkgcachegen.cc:188 +#: apt-pkg/pkgcachegen.cc:221 #, c-format msgid "Error occurred while processing %s (UsePackage3)" msgstr "" -#: apt-pkg/pkgcachegen.cc:192 +#: apt-pkg/pkgcachegen.cc:225 #, c-format msgid "Error occurred while processing %s (NewVersion2)" msgstr "" -#: apt-pkg/pkgcachegen.cc:207 +#: 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:210 +#: apt-pkg/pkgcachegen.cc:258 msgid "Wow, you exceeded the number of versions this APT is capable of." msgstr "" -#: apt-pkg/pkgcachegen.cc:213 +#: 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:241 +#: apt-pkg/pkgcachegen.cc:292 #, c-format msgid "Error occurred while processing %s (FindPkg)" msgstr "" -#: apt-pkg/pkgcachegen.cc:254 +#: apt-pkg/pkgcachegen.cc:305 #, c-format msgid "Error occurred while processing %s (CollectFileProvides)" msgstr "" -#: apt-pkg/pkgcachegen.cc:260 +#: apt-pkg/pkgcachegen.cc:311 #, c-format msgid "Package %s %s was not found while processing file dependencies" msgstr "" -#: apt-pkg/pkgcachegen.cc:574 +#: apt-pkg/pkgcachegen.cc:681 apt-pkg/pkgcachegen.cc:682 #, c-format msgid "Couldn't stat source package list %s" msgstr "" -#: apt-pkg/pkgcachegen.cc:658 +#: apt-pkg/pkgcachegen.cc:765 apt-pkg/pkgcachegen.cc:767 msgid "Collecting File Provides" msgstr "" -#: apt-pkg/pkgcachegen.cc:785 apt-pkg/pkgcachegen.cc:792 +#: apt-pkg/pkgcachegen.cc:892 apt-pkg/pkgcachegen.cc:899 +#: 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:130 #, c-format msgid "rename failed, %s (%s -> %s)." msgstr "" -#: apt-pkg/acquire-item.cc:236 apt-pkg/acquire-item.cc:945 +#: apt-pkg/acquire-item.cc:408 apt-pkg/acquire-item.cc:658 +#: apt-pkg/acquire-item.cc:1402 apt-pkg/acquire-item.cc:409 +#: apt-pkg/acquire-item.cc:666 apt-pkg/acquire-item.cc:1416 msgid "MD5Sum mismatch" msgstr "" -#: apt-pkg/acquire-item.cc:640 -msgid "There is no public key available for the following key IDs:\n" +#: apt-pkg/acquire-item.cc:1097 +msgid "There are no public key available for the following key IDs:\n" msgstr "" -#: apt-pkg/acquire-item.cc:753 +#: apt-pkg/acquire-item.cc:1210 apt-pkg/acquire-item.cc:1224 #, 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:812 +#: apt-pkg/acquire-item.cc:1269 apt-pkg/acquire-item.cc:1283 #, 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:848 +#: apt-pkg/acquire-item.cc:1305 apt-pkg/acquire-item.cc:1319 #, c-format msgid "" "The package index files are corrupted. No Filename: field for package %s." msgstr "" -#: apt-pkg/acquire-item.cc:935 +#: apt-pkg/acquire-item.cc:1392 apt-pkg/acquire-item.cc:1406 msgid "Size mismatch" msgstr "" @@ -2398,92 +2461,94 @@ msgstr "" msgid "Vendor block %s contains no fingerprint" msgstr "" -#: apt-pkg/cdrom.cc:507 +#: 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 msgid "Identifying.. " msgstr "" -#: apt-pkg/cdrom.cc:541 +#: apt-pkg/cdrom.cc:565 #, c-format msgid "Stored label: %s \n" msgstr "" -#: apt-pkg/cdrom.cc:561 +#: 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 msgid "Unmounting CD-ROM\n" msgstr "" -#: apt-pkg/cdrom.cc:583 +#: 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 msgid "Mounting CD-ROM...\n" msgstr "" -#: apt-pkg/cdrom.cc:609 +#: 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:739 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:755 #, 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:759 msgid "Copying package lists..." msgstr "" -#: apt-pkg/cdrom.cc:754 +#: apt-pkg/cdrom.cc:783 apt-pkg/cdrom.cc:785 msgid "Writing new source list\n" msgstr "" -#: apt-pkg/cdrom.cc:763 +#: apt-pkg/cdrom.cc:792 apt-pkg/cdrom.cc:794 msgid "Source list entries for this disc are:\n" msgstr "" -#: apt-pkg/cdrom.cc:803 +#: apt-pkg/cdrom.cc:832 apt-pkg/cdrom.cc:836 msgid "Unmounting CD-ROM..." msgstr "" -#: apt-pkg/indexcopy.cc:261 +#: 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 #, 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 #, 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 #, c-format msgid "Wrote %i records with %i missing files and %i mismatched files\n" msgstr "" @@ -2538,6 +2603,18 @@ msgstr "" msgid "Completely removed %s" msgstr "" +#: methods/rred.cc:219 +msgid "Could not patch file" +msgstr "" + #: methods/rsh.cc:330 msgid "Connection closed prematurely" msgstr "" + +#: apt-pkg/acquire-item.cc:1097 apt-pkg/acquire-item.cc:1111 +msgid "There is no public key available for the following key IDs:\n" +msgstr "" + +#: apt-pkg/pkgcache.cc:226 +msgid "Breaks" +msgstr "" @@ -2607,8 +2607,7 @@ msgid "MD5Sum mismatch" msgstr "Несъответствие на контролна сума MD5" #: apt-pkg/acquire-item.cc:640 -#, fuzzy -msgid "There are no public key available for the following key IDs:\n" +msgid "There is no public key available for the following key IDs:\n" msgstr "Няма налични публични ключове за следните идентификатори на ключове:\n" #: apt-pkg/acquire-item.cc:753 @@ -2386,7 +2386,7 @@ msgid "MD5Sum mismatch" msgstr "" #: apt-pkg/acquire-item.cc:640 -msgid "There are no public key available for the following key IDs:\n" +msgid "There is no public key available for the following key IDs:\n" msgstr "" #: apt-pkg/acquire-item.cc:753 @@ -2594,8 +2594,7 @@ msgid "MD5Sum mismatch" msgstr "Suma MD5 diferent" #: apt-pkg/acquire-item.cc:640 -#, fuzzy -msgid "There are no public key available for the following key IDs:\n" +msgid "There is no public key available for the following key IDs:\n" msgstr "No hi ha cap clau pública disponible per als següents ID de clau:\n" #: apt-pkg/acquire-item.cc:753 @@ -2557,8 +2557,7 @@ msgid "MD5Sum mismatch" msgstr "Neshoda MD5 součtů" #: apt-pkg/acquire-item.cc:640 -#, fuzzy -msgid "There are no public key available for the following key IDs:\n" +msgid "There is no public key available for the following key IDs:\n" msgstr "K následujícím ID klíčů není dostupný veřejný klíč:\n" #: apt-pkg/acquire-item.cc:753 @@ -2663,7 +2663,7 @@ msgid "MD5Sum mismatch" msgstr "Camgyfatebiaeth swm MD5" #: apt-pkg/acquire-item.cc:640 -msgid "There are no public key available for the following key IDs:\n" +msgid "There is no public key available for the following key IDs:\n" msgstr "" # FIXME: case @@ -4,13 +4,13 @@ # Danish messages # # Claus Hindsgaul <claus_h@image.dk>, 2002,2003, 2004, 2005, 2006. -# Claus Hindsgaul <claus.hindsgaul@gmail.com>, 2006. +# Claus Hindsgaul <claus.hindsgaul@gmail.com>, 2006, 2007. msgid "" msgstr "" "Project-Id-Version: apt-da\n" "Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2006-10-11 20:34+0200\n" -"PO-Revision-Date: 2006-10-06 15:57+0200\n" +"POT-Creation-Date: 2006-12-19 11:37+0100\n" +"PO-Revision-Date: 2007-02-03 15:50+0100\n" "Last-Translator: Claus Hindsgaul <claus.hindsgaul@gmail.com>\n" "Language-Team: Danish\n" "MIME-Version: 1.0\n" @@ -1815,7 +1815,7 @@ msgstr "Tidsudlb p datasokkel-forbindelse" msgid "Unable to accept connection" msgstr "Kunne ikke acceptere forbindelse" -#: methods/ftp.cc:864 methods/http.cc:958 methods/rsh.cc:303 +#: methods/ftp.cc:864 methods/http.cc:959 methods/rsh.cc:303 msgid "Problem hashing file" msgstr "Problem ved \"hashing\" af fil" @@ -1950,77 +1950,77 @@ msgstr "Kunne ikke bne datarr for %s" msgid "Read error from %s process" msgstr "Lsefejl fra %s-process" -#: methods/http.cc:376 +#: methods/http.cc:377 msgid "Waiting for headers" msgstr "Afventer hoveder" -#: methods/http.cc:522 +#: methods/http.cc:523 #, c-format msgid "Got a single header line over %u chars" msgstr "Fandt en enkelt linje i hovedet p over %u tegn" -#: methods/http.cc:530 +#: methods/http.cc:531 msgid "Bad header line" msgstr "Ugyldig linje i hovedet" -#: methods/http.cc:549 methods/http.cc:556 +#: methods/http.cc:550 methods/http.cc:557 msgid "The HTTP server sent an invalid reply header" msgstr "http-serveren sendte et ugyldigt svarhovede" -#: methods/http.cc:585 +#: methods/http.cc:586 msgid "The HTTP server sent an invalid Content-Length header" msgstr "http-serveren sendte et ugyldigt Content-Length-hovede" -#: methods/http.cc:600 +#: methods/http.cc:601 msgid "The HTTP server sent an invalid Content-Range header" msgstr "http-serveren sendte et ugyldigt Content-Range-hovede" -#: methods/http.cc:602 +#: methods/http.cc:603 msgid "This HTTP server has broken range support" msgstr "" "Denne http-servere har fejlagtig understttelse af intervaller ('ranges')" -#: methods/http.cc:626 +#: methods/http.cc:627 msgid "Unknown date format" msgstr "Ukendt datoformat" -#: methods/http.cc:773 +#: methods/http.cc:774 msgid "Select failed" msgstr "Valg mislykkedes" -#: methods/http.cc:778 +#: methods/http.cc:779 msgid "Connection timed out" msgstr "Tidsudlb p forbindelsen" -#: methods/http.cc:801 +#: methods/http.cc:802 msgid "Error writing to output file" msgstr "Fejl ved skrivning af uddatafil" -#: methods/http.cc:832 +#: methods/http.cc:833 msgid "Error writing to file" msgstr "Fejl ved skrivning til fil" -#: methods/http.cc:860 +#: methods/http.cc:861 msgid "Error writing to the file" msgstr "Fejl ved skrivning til filen" -#: methods/http.cc:874 +#: methods/http.cc:875 msgid "Error reading from server. Remote end closed connection" msgstr "Fejl ved lsning fra serveren. Den fjerne ende lukkede forbindelsen" -#: methods/http.cc:876 +#: methods/http.cc:877 msgid "Error reading from server" msgstr "Fejl ved lsning fra server" -#: methods/http.cc:1107 +#: methods/http.cc:1108 msgid "Bad header data" msgstr "Ugyldige hoved-data" -#: methods/http.cc:1124 +#: methods/http.cc:1125 msgid "Connection failed" msgstr "Forbindelsen mislykkedes" -#: methods/http.cc:1215 +#: methods/http.cc:1216 msgid "Internal error" msgstr "Intern fejl" @@ -2093,12 +2093,12 @@ msgstr "Syntaksfejl %s:%u: Ikke-understttet direktiv '%s'" msgid "Syntax error %s:%u: Extra junk at end of file" msgstr "Syntaksfejl %s:%u: Overskydende affald i slutningen af filen" -#: apt-pkg/contrib/progress.cc:154 +#: apt-pkg/contrib/progress.cc:155 #, c-format msgid "%c%s... Error!" msgstr "%c%s... Fejl!" -#: apt-pkg/contrib/progress.cc:156 +#: apt-pkg/contrib/progress.cc:157 #, c-format msgid "%c%s... Done" msgstr "%c%s... Frdig" @@ -2395,7 +2395,7 @@ msgid "" msgstr "" "Pakken %s skal geninstalleres, men jeg kan ikke finde noget arkiv med den." -#: apt-pkg/algorithms.cc:1059 +#: apt-pkg/algorithms.cc:1066 msgid "" "Error, pkgProblemResolver::Resolve generated breaks, this may be caused by " "held packages." @@ -2403,7 +2403,7 @@ msgstr "" "Fejl, pkgProblemResolver::Resolve satte stopklodser op, det kan skyldes " "tilbageholdte pakker." -#: apt-pkg/algorithms.cc:1061 +#: apt-pkg/algorithms.cc:1068 msgid "Unable to correct problems, you have held broken packages." msgstr "" "Kunne ikke korrigere problemerne, da du har tilbageholdt delagte pakker." @@ -2575,8 +2575,7 @@ msgid "MD5Sum mismatch" msgstr "MD5Sum stemmer ikke" #: apt-pkg/acquire-item.cc:640 -#, fuzzy -msgid "There are no public key available for the following key IDs:\n" +msgid "There is no public key available for the following key IDs:\n" msgstr "" "Der er ingen tilgngelige offentlige ngler for flgende ngle-ID'er:\n" @@ -2622,8 +2622,7 @@ msgid "MD5Sum mismatch" msgstr "MD5-Summe stimmt nicht" #: apt-pkg/acquire-item.cc:640 -#, fuzzy -msgid "There are no public key available for the following key IDs:\n" +msgid "There is no public key available for the following key IDs:\n" msgstr "" "Es gibt keine öffentlichen Schlüssel für die folgenden Schlüssel-IDs:\n" @@ -6,7 +6,7 @@ msgid "" msgstr "" "Project-Id-Version: apt_po.pot\n" "Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2006-09-12 11:18+0200\n" +"POT-Creation-Date: 2006-10-11 20:34+0200\n" "PO-Revision-Date: 2006-09-19 09:49+0530\n" "Last-Translator: Kinley Tshering <gasepkuenden2k3@hotmail.com>\n" "Language-Team: Dzongkha <pgeyleg@dit.gov.bt>\n" @@ -1692,12 +1692,12 @@ msgstr "ཌིཀསི་དེ་འཚོལ་མ་ཐོབ།" msgid "File not found" msgstr "ཡིག་སྣོད་འཚོལ་མ་ཐོབ།" -#: methods/copy.cc:42 methods/gpgv.cc:281 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:140 +#: methods/copy.cc:79 methods/gpgv.cc:278 methods/gzip.cc:147 msgid "Failed to set modification time" msgstr "ཆུ་ཚོད་ལེགས་བཅོས་གཞི་སྒྲིག་འབཐ་ནི་ལུ་འཐུས་ཤོར་བྱུང་ཡོད།" @@ -1953,12 +1953,12 @@ msgid "" msgstr "" "འོག་གི་མིང་རྟགས་ཚུ་བདེན་སྦྱོར་་འབད་མ་ཚུགས་ག་ཅི་སྦེ་ཟེར་བ་ཅིན་མི་དམང་ལྡེ་མིག་དེ་འཐོབ་མི་ཚུགས་པས:\n" -#: methods/gzip.cc:57 +#: methods/gzip.cc:64 #, c-format msgid "Couldn't open pipe for %s" msgstr "%s་གི་དོན་ལུ་རྒྱུད་དུང་འདི་ཁ་ཕྱེ་མ་ཚུགས།" -#: methods/gzip.cc:102 +#: methods/gzip.cc:109 #, c-format msgid "Read error from %s process" msgstr "%s་ལས་སྦྱོར་ནང་ལས་འཛོལ་བ་ཚུ་ལྷག" @@ -2324,12 +2324,12 @@ msgstr "མི་ངོ་འཐོན་རིམཚུ།" msgid "Dependency generation" msgstr "བརྟེན་པའི་བཟོ་བཏོན།" -#: apt-pkg/tagfile.cc:85 apt-pkg/tagfile.cc:92 +#: apt-pkg/tagfile.cc:106 #, c-format msgid "Unable to parse package file %s (1)" msgstr "%s (༡་)་ཐུམ་སྒྲིལ་ཡིག་སྣོད་འདི་མིང་དཔྱད་འབད་མ་ཚུགས།" -#: apt-pkg/tagfile.cc:186 +#: apt-pkg/tagfile.cc:193 #, c-format msgid "Unable to parse package file %s (2)" msgstr "%s (༢་)་ཐུམ་སྒྲིལ་ཡིག་སྣོད་འདི་མིང་དཔྱད་འབད་མ་ཚུགས།" @@ -2776,4 +2776,3 @@ msgstr "དུས་སུ་མ་འབབ་པ་རང་མཐུད་ལ #~ msgid "File date has changed %s" #~ msgstr "ཡིག་སྣོད་ཚེས་གྲངས་འདི་གིས་%sདེ་བསྒྱུར་བཅོས་འབད་ནུག" - @@ -2613,7 +2613,7 @@ msgid "MD5Sum mismatch" msgstr "Ανόμοιο MD5Sum" #: apt-pkg/acquire-item.cc:640 -msgid "There are no public key available for the following key IDs:\n" +msgid "There is no public key available for the following key IDs:\n" msgstr "" #: apt-pkg/acquire-item.cc:753 diff --git a/po/en_GB.po b/po/en_GB.po index bc2153efe..5c75b599f 100644 --- a/po/en_GB.po +++ b/po/en_GB.po @@ -2558,8 +2558,7 @@ msgid "MD5Sum mismatch" msgstr "MD5Sum mismatch" #: apt-pkg/acquire-item.cc:640 -#, fuzzy -msgid "There are no public key available for the following key IDs:\n" +msgid "There is no public key available for the following key IDs:\n" msgstr "There is no public key available for the following key IDs:\n" #: apt-pkg/acquire-item.cc:753 @@ -2607,8 +2607,7 @@ msgid "MD5Sum mismatch" msgstr "La suma MD5 difiere" #: apt-pkg/acquire-item.cc:640 -#, fuzzy -msgid "There are no public key available for the following key IDs:\n" +msgid "There is no public key available for the following key IDs:\n" msgstr "" "No existe ninguna clave pblica disponible para los siguientes " "identificadores de clave:\n" @@ -2576,8 +2576,7 @@ msgid "MD5Sum mismatch" msgstr "MD5Sum ez dator bat" #: apt-pkg/acquire-item.cc:640 -#, fuzzy -msgid "There are no public key available for the following key IDs:\n" +msgid "There is no public key available for the following key IDs:\n" msgstr "Hurrengo gako ID hauentzat ez dago gako publiko eskuragarririk:\n" #: apt-pkg/acquire-item.cc:753 @@ -2567,8 +2567,7 @@ msgid "MD5Sum mismatch" msgstr "MD5Sum ei täsmää" #: apt-pkg/acquire-item.cc:640 -#, fuzzy -msgid "There are no public key available for the following key IDs:\n" +msgid "There is no public key available for the following key IDs:\n" msgstr "Julkisia avaimia ei ole saatavilla, avainten ID:t ovat:\n" #: apt-pkg/acquire-item.cc:753 @@ -2761,14 +2760,12 @@ msgstr "Yhteys katkesi ennenaikaisesti" #~ msgid "File date has changed %s" #~ msgstr "Tiedoston uusi päiväys %s" -#, fuzzy #~ msgid "Could not patch file" #~ msgstr "Tiedostoa %s ei voitu avata" #~ msgid "Reading file list" #~ msgstr "Luetaan tiedostoluetteloa" -#, fuzzy #~ msgid "Could not execute " #~ msgstr "Lukkoa %s ei saada" @@ -877,7 +877,7 @@ msgstr "" # sentence is supposed to be typed by a user who cannot see the difference. #: cmdline/apt-get.cc:866 msgid "Yes, do as I say!" -msgstr "Oui, faites ce que je vous dis!" +msgstr "Oui, faites ce que je vous dis !" #: cmdline/apt-get.cc:868 #, c-format @@ -2635,8 +2635,7 @@ msgid "MD5Sum mismatch" msgstr "Somme de contrle MD5 incohrente" #: apt-pkg/acquire-item.cc:640 -#, fuzzy -msgid "There are no public key available for the following key IDs:\n" +msgid "There is no public key available for the following key IDs:\n" msgstr "" "Aucune cl publique n'est disponible pour la/les cl(s) suivante(s):\n" @@ -6,10 +6,10 @@ msgid "" msgstr "" "Project-Id-Version: apt\n" "Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2006-10-11 20:34+0200\n" -"PO-Revision-Date: 2006-09-07 11:48+0200\n" +"POT-Creation-Date: 2006-12-19 11:37+0100\n" +"PO-Revision-Date: 2007-02-28 13:14+0100\n" "Last-Translator: Jacobo Tarrío <jtarrio@debian.org>\n" -"Language-Team: Galician <trasno@ceu.fi.udc.es>\n" +"Language-Team: Galician <proxecto@trasno.net>\n" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=UTF-8\n" "Content-Transfer-Encoding: 8bit\n" @@ -108,7 +108,7 @@ msgstr "" #: cmdline/apt-cache.cc:1470 #, c-format msgid "%4i %s\n" -msgstr "[%4i] %s\n" +msgstr "%4i %s\n" #. Show any packages have explicit pins #: cmdline/apt-cache.cc:1482 @@ -1823,7 +1823,7 @@ msgstr "A conexión do socket de datos esgotou o tempo" msgid "Unable to accept connection" msgstr "Non se pode aceptar a conexión" -#: methods/ftp.cc:864 methods/http.cc:958 methods/rsh.cc:303 +#: methods/ftp.cc:864 methods/http.cc:959 methods/rsh.cc:303 msgid "Problem hashing file" msgstr "Problema ao calcular o hash do ficheiro" @@ -1961,76 +1961,76 @@ msgstr "Non se puido abrir unha canle para %s" msgid "Read error from %s process" msgstr "Erro de lectura do proceso %s" -#: methods/http.cc:376 +#: methods/http.cc:377 msgid "Waiting for headers" msgstr "A agardar polas cabeceiras" -#: methods/http.cc:522 +#: methods/http.cc:523 #, c-format msgid "Got a single header line over %u chars" msgstr "Recibiuse unha soa liña de cabeceira en %u caracteres" -#: methods/http.cc:530 +#: methods/http.cc:531 msgid "Bad header line" msgstr "Liña de cabeceira incorrecta" -#: methods/http.cc:549 methods/http.cc:556 +#: methods/http.cc:550 methods/http.cc:557 msgid "The HTTP server sent an invalid reply header" msgstr "O servidor HTTP enviou unha cabeceira de resposta non válida" -#: methods/http.cc:585 +#: methods/http.cc:586 msgid "The HTTP server sent an invalid Content-Length header" msgstr "O servidor HTTP enviou unha cabeceira Content-Length non válida" -#: methods/http.cc:600 +#: methods/http.cc:601 msgid "The HTTP server sent an invalid Content-Range header" msgstr "O servidor HTTP enviou unha cabeceira Content-Range non válida" -#: methods/http.cc:602 +#: methods/http.cc:603 msgid "This HTTP server has broken range support" msgstr "Este servidor HTTP ten un soporte de rangos roto" -#: methods/http.cc:626 +#: methods/http.cc:627 msgid "Unknown date format" msgstr "Formato de data descoñecido" -#: methods/http.cc:773 +#: methods/http.cc:774 msgid "Select failed" msgstr "Fallou a chamada a select" -#: methods/http.cc:778 +#: methods/http.cc:779 msgid "Connection timed out" msgstr "A conexión esgotou o tempo" -#: methods/http.cc:801 +#: methods/http.cc:802 msgid "Error writing to output file" msgstr "Erro ao escribir no ficheiro de saída" -#: methods/http.cc:832 +#: methods/http.cc:833 msgid "Error writing to file" msgstr "Erro ao escribir nun ficheiro" -#: methods/http.cc:860 +#: methods/http.cc:861 msgid "Error writing to the file" msgstr "Erro ao escribir no ficheiro" -#: methods/http.cc:874 +#: methods/http.cc:875 msgid "Error reading from server. Remote end closed connection" msgstr "Erro ao ler do servidor. O extremo remoto pechou a conexión" -#: methods/http.cc:876 +#: methods/http.cc:877 msgid "Error reading from server" msgstr "Erro ao ler do servidor" -#: methods/http.cc:1107 +#: methods/http.cc:1108 msgid "Bad header data" msgstr "Datos da cabeceira incorrectos" -#: methods/http.cc:1124 +#: methods/http.cc:1125 msgid "Connection failed" msgstr "A conexión fallou" -#: methods/http.cc:1215 +#: methods/http.cc:1216 msgid "Internal error" msgstr "Erro interno" @@ -2103,12 +2103,12 @@ msgstr "Erro de sintaxe %s:%u: Non se soporta a directiva \"%s\"" msgid "Syntax error %s:%u: Extra junk at end of file" msgstr "Erro de sintaxe %s:%u: Lixo extra á fin da liña" -#: apt-pkg/contrib/progress.cc:154 +#: apt-pkg/contrib/progress.cc:155 #, c-format msgid "%c%s... Error!" msgstr "%c%s... ¡Erro!" -#: apt-pkg/contrib/progress.cc:156 +#: apt-pkg/contrib/progress.cc:157 #, c-format msgid "%c%s... Done" msgstr "%c%s... Rematado" @@ -2405,7 +2405,7 @@ msgid "" msgstr "" "O paquete %s ten que se reinstalar, pero non se pode atopar o seu arquivo." -#: apt-pkg/algorithms.cc:1059 +#: apt-pkg/algorithms.cc:1066 msgid "" "Error, pkgProblemResolver::Resolve generated breaks, this may be caused by " "held packages." @@ -2413,7 +2413,7 @@ msgstr "" "Erro, pkgProblemResolver::Resolve xerou interrupcións, pode estar causado " "por paquetes retidos." -#: apt-pkg/algorithms.cc:1061 +#: apt-pkg/algorithms.cc:1068 msgid "Unable to correct problems, you have held broken packages." msgstr "Non se poden resolver os problemas, ten retidos paquetes rotos." @@ -2586,8 +2586,7 @@ msgid "MD5Sum mismatch" msgstr "Os MD5Sum non coinciden" #: apt-pkg/acquire-item.cc:640 -#, fuzzy -msgid "There are no public key available for the following key IDs:\n" +msgid "There is no public key available for the following key IDs:\n" msgstr "" "Non hai unha clave pública dispoñible para os seguintes IDs de clave:\n" @@ -2777,13 +2776,12 @@ msgstr "Eliminouse %s completamente" msgid "Connection closed prematurely" msgstr "A conexión pechouse prematuramente" +#~ msgid "Could not patch file" +#~ msgstr "Non se puido parchear o ficheiro" + #~ msgid "File date has changed %s" #~ msgstr "A data do ficheiro cambiou %s" -#, fuzzy -#~ msgid "Could not patch file" -#~ msgstr "Non se puido abrir o ficheiro %s" - #~ msgid "Reading file list" #~ msgstr "A ler a lista de paquetes" @@ -2374,7 +2374,7 @@ msgid "MD5Sum mismatch" msgstr "" #: apt-pkg/acquire-item.cc:640 -msgid "There are no public key available for the following key IDs:\n" +msgid "There is no public key available for the following key IDs:\n" msgstr "" #: apt-pkg/acquire-item.cc:753 @@ -2572,8 +2572,7 @@ msgid "MD5Sum mismatch" msgstr "Az MD5Sum nem megfelelő" #: apt-pkg/acquire-item.cc:640 -#, fuzzy -msgid "There are no public key available for the following key IDs:\n" +msgid "There is no public key available for the following key IDs:\n" msgstr "Nincs elérhető nyilvános kulcs az alábbi kulcs azonosítókhoz:\n" #: apt-pkg/acquire-item.cc:753 @@ -2606,8 +2606,7 @@ msgid "MD5Sum mismatch" msgstr "Somma MD5 non corrispondente" #: apt-pkg/acquire-item.cc:640 -#, fuzzy -msgid "There are no public key available for the following key IDs:\n" +msgid "There is no public key available for the following key IDs:\n" msgstr "" "Non esiste una chiave pubblica disponibile per i seguenti ID di chiave:\n" @@ -2798,7 +2797,6 @@ msgstr "Connessione chiusa prematuramente" #~ msgid "File date has changed %s" #~ msgstr "La data del file è cambiata %s" -#, fuzzy #~ msgid "Could not patch file" #~ msgstr "Impossibile aprire il file %s" @@ -2585,8 +2585,7 @@ msgid "MD5Sum mismatch" msgstr "MD5Sum が適合しません" #: apt-pkg/acquire-item.cc:640 -#, fuzzy -msgid "There are no public key available for the following key IDs:\n" +msgid "There is no public key available for the following key IDs:\n" msgstr "以下の鍵 ID に対して利用可能な公開鍵がありません:\n" #: apt-pkg/acquire-item.cc:753 @@ -2562,8 +2562,7 @@ msgid "MD5Sum mismatch" msgstr "MD5Sum이 맞지 않습니다" #: apt-pkg/acquire-item.cc:640 -#, fuzzy -msgid "There are no public key available for the following key IDs:\n" +msgid "There is no public key available for the following key IDs:\n" msgstr "다음 키 ID의 공개키가 없습니다:\n" #: apt-pkg/acquire-item.cc:753 @@ -2751,13 +2750,11 @@ msgstr "연결이 너무 빨리 끊어졌습니다" #~ msgid "File date has changed %s" #~ msgstr "%s 파일의 마지막 수정 시각이 바뀌엇습니다" -#, fuzzy #~ msgid "Could not patch file" #~ msgstr "%s 파일을 열 수 없습니다" #~ msgid "Reading file list" #~ msgstr "파일 목록을 읽는 중" -#, fuzzy #~ msgid "Could not execute " #~ msgstr "%s 잠금 파일을 얻을 수 없습니다" diff --git a/po/ku.po b/po/ku.po deleted file mode 100644 index 06789f9c2..000000000 --- a/po/ku.po +++ /dev/null @@ -1,2574 +0,0 @@ -# Kurdish translation for apt -# Copyright (c) (c) 2006 Canonical Ltd, and Rosetta Contributors 2006 -# This file is distributed under the same license as the apt package. -# FIRST AUTHOR <EMAIL@ADDRESS>, 2006. -# -msgid "" -msgstr "" -"Project-Id-Version: apt\n" -"Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2006-08-09 16:17+0200\n" -"PO-Revision-Date: 2006-09-16 17:51+0100\n" -"Last-Translator: Erdal Ronahi <erdal.ronahi@gmail.com>\n" -"Language-Team: Kurdish <ku@li.org>\n" -"MIME-Version: 1.0\n" -"Content-Type: text/plain; charset=UTF-8\n" -"Content-Transfer-Encoding: 8bit\n" - -#: cmdline/apt-cache.cc:135 -#, 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 -#, c-format -msgid "Unable to locate package %s" -msgstr "Pakêt nehate dîtin %s" - -#: cmdline/apt-cache.cc:232 -msgid "Total package names : " -msgstr "Navên paketan bi giştî :" - -#: cmdline/apt-cache.cc:272 -msgid " Normal packages: " -msgstr " Pakêtên normal:" - -#: cmdline/apt-cache.cc:273 -msgid " Pure virtual packages: " -msgstr " Pakêtên farazî yên safî:" - -#: cmdline/apt-cache.cc:274 -msgid " Single virtual packages: " -msgstr " Pakêta tenê ya farazî:" - -#: cmdline/apt-cache.cc:275 -msgid " Mixed virtual packages: " -msgstr " Pakêtên hevbeş yên farazî:" - -#: cmdline/apt-cache.cc:276 -msgid " Missing: " -msgstr " Winda: " - -#: cmdline/apt-cache.cc:278 -msgid "Total distinct versions: " -msgstr "Guhertoyên vekirî yên giştî:" - -#: cmdline/apt-cache.cc:280 -msgid "Total dependencies: " -msgstr "Bindestên giştî:" - -#: cmdline/apt-cache.cc:283 -msgid "Total ver/file relations: " -msgstr "" - -#: cmdline/apt-cache.cc:285 -msgid "Total Provides mappings: " -msgstr "" - -#: cmdline/apt-cache.cc:297 -msgid "Total globbed strings: " -msgstr "" - -#: cmdline/apt-cache.cc:311 -msgid "Total dependency version space: " -msgstr "" - -#: cmdline/apt-cache.cc:316 -msgid "Total slack space: " -msgstr "Cihê giştî yê sist:" - -#: cmdline/apt-cache.cc:324 -msgid "Total space accounted for: " -msgstr "Cihê giştî yê veqetandî: " - -#: cmdline/apt-cache.cc:446 cmdline/apt-cache.cc:1189 -#, c-format -msgid "Package file %s is out of sync." -msgstr "Pakêta dosya %s li derveyî demê ye." - -#: cmdline/apt-cache.cc:1231 -msgid "You must give exactly one pattern" -msgstr "Pêwist e tu mînakekê bidî" - -#: cmdline/apt-cache.cc:1385 -msgid "No packages found" -msgstr "Pakêt nayên dîtin" - -#: cmdline/apt-cache.cc:1462 -msgid "Package files:" -msgstr "Pelgehên Pakêt:" - -#: cmdline/apt-cache.cc:1469 cmdline/apt-cache.cc:1555 -msgid "Cache is out of sync, can't x-ref a package file" -msgstr "" - -#: cmdline/apt-cache.cc:1470 -#, c-format -msgid "%4i %s\n" -msgstr "%4i %s\n" - -#. Show any packages have explicit pins -#: cmdline/apt-cache.cc:1482 -msgid "Pinned packages:" -msgstr "" - -#: cmdline/apt-cache.cc:1494 cmdline/apt-cache.cc:1535 -msgid "(not found)" -msgstr "(nehate dîtin)" - -#. Installed version -#: cmdline/apt-cache.cc:1515 -msgid " Installed: " -msgstr " Sazkirî: " - -#: cmdline/apt-cache.cc:1517 cmdline/apt-cache.cc:1525 -msgid "(none)" -msgstr "(ne tiştek)" - -#. Candidate Version -#: cmdline/apt-cache.cc:1522 -msgid " Candidate: " -msgstr " Berendam: " - -#: cmdline/apt-cache.cc:1532 -msgid " Package pin: " -msgstr " Destika pakêtê:" - -#. Show the priority tables -#: cmdline/apt-cache.cc:1541 -msgid " Version table:" -msgstr " Tabloya guhertoyan:" - -#: cmdline/apt-cache.cc:1556 -#, c-format -msgid " %4i %s\n" -msgstr " %4i %s\n" - -#: cmdline/apt-cache.cc:1652 cmdline/apt-cdrom.cc:138 cmdline/apt-config.cc:70 -#: cmdline/apt-extracttemplates.cc:225 ftparchive/apt-ftparchive.cc:550 -#: cmdline/apt-get.cc:2380 cmdline/apt-sortpkgs.cc:144 -#, c-format -msgid "%s %s for %s %s compiled on %s %s\n" -msgstr "%s %s ji bo %s %s komkirî di %s %s de\n" - -#: cmdline/apt-cache.cc:1659 -msgid "" -"Usage: apt-cache [options] command\n" -" apt-cache [options] add file1 [file2 ...]\n" -" apt-cache [options] showpkg pkg1 [pkg2 ...]\n" -" apt-cache [options] showsrc pkg1 [pkg2 ...]\n" -"\n" -"apt-cache is a low-level tool used to manipulate APT's binary\n" -"cache files, and query information from them\n" -"\n" -"Commands:\n" -" add - Add a package file to the source cache\n" -" gencaches - Build both the package and source cache\n" -" showpkg - Show some general information for a single package\n" -" showsrc - Show source records\n" -" stats - Show some basic statistics\n" -" dump - Show the entire file in a terse form\n" -" dumpavail - Print an available file to stdout\n" -" unmet - Show unmet dependencies\n" -" search - Search the package list for a regex pattern\n" -" show - Show a readable record for the package\n" -" depends - Show raw dependency information for a package\n" -" rdepends - Show reverse dependency information for a package\n" -" pkgnames - List the names of all packages\n" -" dotty - Generate package graphs for GraphVis\n" -" xvcg - Generate package graphs for xvcg\n" -" policy - Show policy settings\n" -"\n" -"Options:\n" -" -h This help text.\n" -" -p=? The package cache.\n" -" -s=? The source cache.\n" -" -q Disable progress indicator.\n" -" -i Show only important deps for the unmet command.\n" -" -c=? Read this configuration file\n" -" -o=? Set an arbitrary configuration option, eg -o dir::cache=/tmp\n" -"See the apt-cache(8) and apt.conf(5) manual pages for more information.\n" -msgstr "" - -#: cmdline/apt-cdrom.cc:78 -msgid "Please provide a name for this Disc, such as 'Debian 2.1r1 Disk 1'" -msgstr "Ji kerema xwe re navekî li vî Dîsketî bike, wekî 'Debian 2.1r1 Disk 1'" - -#: cmdline/apt-cdrom.cc:93 -msgid "Please insert a Disc in the drive and press enter" -msgstr "Dîsketê siwar bike û piştre bişkoja derbaskirinê bitikîne" - -#: cmdline/apt-cdrom.cc:117 -msgid "Repeat this process for the rest of the CDs in your set." -msgstr "" - -#: cmdline/apt-config.cc:41 -msgid "Arguments not in pairs" -msgstr "" - -#: cmdline/apt-config.cc:76 -msgid "" -"Usage: apt-config [options] command\n" -"\n" -"apt-config is a simple tool to read the APT config file\n" -"\n" -"Commands:\n" -" shell - Shell mode\n" -" dump - Show the configuration\n" -"\n" -"Options:\n" -" -h This help text.\n" -" -c=? Read this configuration file\n" -" -o=? Set an arbitrary configuration option, eg -o dir::cache=/tmp\n" -msgstr "" -"Bikaranîn: apt-config [vebijark] ferman\n" -"apt-config, amûra xwendina dosyeya mîhengên APTê ye\n" -"\n" -"Ferman\n" -" shell - moda shell\n" -" dump - Mîhengan nîşan dide\n" -"\n" -"Vebijark:\n" -" -h Ev dosyeya alîkariyê ye.\n" -" -c=? Dosyeya mîhengan nîşan dide\n" -" -o=? Rê li ber vedike ku tu karibe li gorî dilê xwe vebijarkan diyar bike. " -"mînak -o dir::cache=/tmp\n" - -#: cmdline/apt-extracttemplates.cc:98 -#, c-format -msgid "%s not a valid DEB package." -msgstr "%s ne paketeke DEB ya derbasdar e." - -#: cmdline/apt-extracttemplates.cc:232 -msgid "" -"Usage: apt-extracttemplates file1 [file2 ...]\n" -"\n" -"apt-extracttemplates is a tool to extract config and template info\n" -"from debian packages\n" -"\n" -"Options:\n" -" -h This help text\n" -" -t Set the temp dir\n" -" -c=? Read this configuration file\n" -" -o=? Set an arbitrary configuration option, eg -o dir::cache=/tmp\n" -msgstr "" - -#: cmdline/apt-extracttemplates.cc:267 apt-pkg/pkgcachegen.cc:710 -#, c-format -msgid "Unable to write to %s" -msgstr "Nivîsandin ji bo %s ne pêkane" - -#: cmdline/apt-extracttemplates.cc:310 -msgid "Cannot get debconf version. Is debconf installed?" -msgstr "Guhertoya debconf nehate stendin. debconf sazkirî ye?" - -#: ftparchive/apt-ftparchive.cc:167 ftparchive/apt-ftparchive.cc:341 -msgid "Package extension list is too long" -msgstr "Lîsteya dirêjahiya pakêtê zêde dirêj e" - -#: 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 -#, c-format -msgid "Error processing directory %s" -msgstr "Di şixulandina pêrista %s de çewtî" - -#: ftparchive/apt-ftparchive.cc:254 -msgid "Source extension list is too long" -msgstr "Lîsteya dirêjahiya çavkaniyê zêde dirêj e" - -#: ftparchive/apt-ftparchive.cc:371 -msgid "Error writing header to contents file" -msgstr "Dema li dosyeya naverokê joreagahî dihate nivîsîn çewtî" - -#: ftparchive/apt-ftparchive.cc:401 -#, c-format -msgid "Error processing contents %s" -msgstr "Dema şixulandina naveroka %s çewtî" - -#: ftparchive/apt-ftparchive.cc:556 -msgid "" -"Usage: apt-ftparchive [options] command\n" -"Commands: packages binarypath [overridefile [pathprefix]]\n" -" sources srcpath [overridefile [pathprefix]]\n" -" contents path\n" -" release path\n" -" generate config [groups]\n" -" clean config\n" -"\n" -"apt-ftparchive generates index files for Debian archives. It supports\n" -"many styles of generation from fully automated to functional replacements\n" -"for dpkg-scanpackages and dpkg-scansources\n" -"\n" -"apt-ftparchive generates Package files from a tree of .debs. The\n" -"Package file contains the contents of all the control fields from\n" -"each package as well as the MD5 hash and filesize. An override file\n" -"is supported to force the value of Priority and Section.\n" -"\n" -"Similarly apt-ftparchive generates Sources files from a tree of .dscs.\n" -"The --source-override option can be used to specify a src override file\n" -"\n" -"The 'packages' and 'sources' command should be run in the root of the\n" -"tree. BinaryPath should point to the base of the recursive search and \n" -"override file should contain the override flags. Pathprefix is\n" -"appended to the filename fields if present. Example usage from the \n" -"Debian archive:\n" -" apt-ftparchive packages dists/potato/main/binary-i386/ > \\\n" -" dists/potato/main/binary-i386/Packages\n" -"\n" -"Options:\n" -" -h This help text\n" -" --md5 Control MD5 generation\n" -" -s=? Source override file\n" -" -q Quiet\n" -" -d=? Select the optional caching database\n" -" --no-delink Enable delinking debug mode\n" -" --contents Control contents file generation\n" -" -c=? Read this configuration file\n" -" -o=? Set an arbitrary configuration option" -msgstr "" - -#: ftparchive/apt-ftparchive.cc:762 -msgid "No selections matched" -msgstr "" - -#: ftparchive/apt-ftparchive.cc:835 -#, c-format -msgid "Some files are missing in the package file group `%s'" -msgstr "Di koma pelgehên pakêta '%s' de hin pelgeh kêm in" - -#: ftparchive/cachedb.cc:47 -#, c-format -msgid "DB was corrupted, file renamed to %s.old" -msgstr "DB xerabe ye, navê dosyeyê weke %s.old hate guherandin" - -#: ftparchive/cachedb.cc:65 -#, c-format -msgid "DB is old, attempting to upgrade %s" -msgstr "Danegir kevn e, ji bo bilindkirina %s hewl dide" - -#: ftparchive/cachedb.cc:76 -msgid "" -"DB format is invalid. If you upgraded from a older version of apt, please " -"remove and re-create the database." -msgstr "" - -#: ftparchive/cachedb.cc:81 -#, c-format -msgid "Unable to open DB file %s: %s" -msgstr "Danegira %s nehate vekirin: %s" - -#: ftparchive/cachedb.cc:127 apt-inst/extract.cc:181 apt-inst/extract.cc:193 -#: apt-inst/extract.cc:210 apt-inst/deb/dpkgdb.cc:121 methods/gpgv.cc:272 -#, c-format -msgid "Failed to stat %s" -msgstr "" - -#: ftparchive/cachedb.cc:242 -msgid "Archive has no control record" -msgstr "Tomara kontrola arşîvê tuneye" - -#: ftparchive/cachedb.cc:448 -msgid "Unable to get a cursor" -msgstr "" - -#: ftparchive/writer.cc:79 -#, c-format -msgid "W: Unable to read directory %s\n" -msgstr "W: pelrêça %s nayê xwendin\n" - -#: ftparchive/writer.cc:84 -#, c-format -msgid "W: Unable to stat %s\n" -msgstr "" - -#: ftparchive/writer.cc:135 -msgid "E: " -msgstr "E: " - -#: ftparchive/writer.cc:137 -msgid "W: " -msgstr "W: " - -#: ftparchive/writer.cc:144 -msgid "E: Errors apply to file " -msgstr "" - -#: ftparchive/writer.cc:161 ftparchive/writer.cc:191 -#, c-format -msgid "Failed to resolve %s" -msgstr "%s ji hev nehate veçirandin" - -#: ftparchive/writer.cc:173 -msgid "Tree walking failed" -msgstr "" - -#: ftparchive/writer.cc:198 -#, c-format -msgid "Failed to open %s" -msgstr "%s venebû" - -#: ftparchive/writer.cc:257 -#, c-format -msgid " DeLink %s [%s]\n" -msgstr "" - -#: ftparchive/writer.cc:265 -#, c-format -msgid "Failed to readlink %s" -msgstr "" - -#: ftparchive/writer.cc:269 -#, c-format -msgid "Failed to unlink %s" -msgstr "" - -#: ftparchive/writer.cc:276 -#, c-format -msgid "*** Failed to link %s to %s" -msgstr "" - -#: ftparchive/writer.cc:286 -#, c-format -msgid " DeLink limit of %sB hit.\n" -msgstr "" - -#: ftparchive/writer.cc:390 -msgid "Archive had no package field" -msgstr "Di arşîvê de qada pakêtê tuneye" - -#: ftparchive/writer.cc:398 ftparchive/writer.cc:613 -#, c-format -msgid " %s has no override entry\n" -msgstr "" - -#: ftparchive/writer.cc:443 ftparchive/writer.cc:701 -#, c-format -msgid " %s maintainer is %s not %s\n" -msgstr "" - -#: ftparchive/writer.cc:623 -#, c-format -msgid " %s has no source override entry\n" -msgstr "" - -#: ftparchive/writer.cc:627 -#, c-format -msgid " %s has no binary override entry either\n" -msgstr "" - -#: ftparchive/contents.cc:317 -#, c-format -msgid "Internal error, could not locate member %s" -msgstr "" - -#: ftparchive/contents.cc:353 ftparchive/contents.cc:384 -msgid "realloc - Failed to allocate memory" -msgstr "" - -#: ftparchive/override.cc:38 ftparchive/override.cc:146 -#, c-format -msgid "Unable to open %s" -msgstr "%s venebû" - -#: ftparchive/override.cc:64 ftparchive/override.cc:170 -#, c-format -msgid "Malformed override %s line %lu #1" -msgstr "" - -#: ftparchive/override.cc:78 ftparchive/override.cc:182 -#, c-format -msgid "Malformed override %s line %lu #2" -msgstr "" - -#: ftparchive/override.cc:92 ftparchive/override.cc:195 -#, c-format -msgid "Malformed override %s line %lu #3" -msgstr "" - -#: ftparchive/override.cc:131 ftparchive/override.cc:205 -#, c-format -msgid "Failed to read the override file %s" -msgstr "" - -#: ftparchive/multicompress.cc:75 -#, c-format -msgid "Unknown compression algorithm '%s'" -msgstr "" - -#: ftparchive/multicompress.cc:105 -#, c-format -msgid "Compressed output %s needs a compression set" -msgstr "" - -#: ftparchive/multicompress.cc:172 methods/rsh.cc:91 -msgid "Failed to create IPC pipe to subprocess" -msgstr "" - -#: ftparchive/multicompress.cc:198 -msgid "Failed to create FILE*" -msgstr "" - -#: ftparchive/multicompress.cc:201 -msgid "Failed to fork" -msgstr "" - -#: ftparchive/multicompress.cc:215 -msgid "Compress child" -msgstr "" - -#: ftparchive/multicompress.cc:238 -#, c-format -msgid "Internal error, failed to create %s" -msgstr "" - -#: ftparchive/multicompress.cc:289 -msgid "Failed to create subprocess IPC" -msgstr "" - -#: ftparchive/multicompress.cc:324 -msgid "Failed to exec compressor " -msgstr "" - -#: ftparchive/multicompress.cc:363 -msgid "decompressor" -msgstr "" - -#: ftparchive/multicompress.cc:406 -msgid "IO to subprocess/file failed" -msgstr "" - -#: ftparchive/multicompress.cc:458 -msgid "Failed to read while computing MD5" -msgstr "" - -#: ftparchive/multicompress.cc:475 -#, c-format -msgid "Problem unlinking %s" -msgstr "" - -#: ftparchive/multicompress.cc:490 apt-inst/extract.cc:188 -#, c-format -msgid "Failed to rename %s to %s" -msgstr "" - -#: cmdline/apt-get.cc:120 -msgid "Y" -msgstr "E" - -#: cmdline/apt-get.cc:142 cmdline/apt-get.cc:1506 -#, c-format -msgid "Regex compilation error - %s" -msgstr "" - -#: cmdline/apt-get.cc:237 -msgid "The following packages have unmet dependencies:" -msgstr "" - -#: cmdline/apt-get.cc:327 -#, c-format -msgid "but %s is installed" -msgstr "lê %s sazkirî ye" - -#: cmdline/apt-get.cc:329 -#, c-format -msgid "but %s is to be installed" -msgstr "lê %s dê were sazkirin" - -#: cmdline/apt-get.cc:336 -msgid "but it is not installable" -msgstr "lê sazkirina wê ne gengaz e" - -#: cmdline/apt-get.cc:338 -msgid "but it is a virtual package" -msgstr "lê paketeke farazî ye" - -#: cmdline/apt-get.cc:341 -msgid "but it is not installed" -msgstr "lê ne sazkirî ye" - -#: cmdline/apt-get.cc:341 -msgid "but it is not going to be installed" -msgstr "lê dê neyê sazkirin" - -#: cmdline/apt-get.cc:346 -msgid " or" -msgstr " û" - -#: cmdline/apt-get.cc:375 -msgid "The following NEW packages will be installed:" -msgstr "Ev pakêtên NÛ dê werine sazkirin:" - -#: cmdline/apt-get.cc:401 -msgid "The following packages will be REMOVED:" -msgstr "Ev pakêt dê werine RAKIRIN:" - -#: cmdline/apt-get.cc:423 -msgid "The following packages have been kept back:" -msgstr "" - -#: cmdline/apt-get.cc:444 -msgid "The following packages will be upgraded:" -msgstr "Ev paket dê werine bilindkirin:" - -#: cmdline/apt-get.cc:465 -msgid "The following packages will be DOWNGRADED:" -msgstr "" - -#: cmdline/apt-get.cc:485 -msgid "The following held packages will be changed:" -msgstr "" - -#: cmdline/apt-get.cc:538 -#, c-format -msgid "%s (due to %s) " -msgstr "%s (ji ber %s)" - -#: cmdline/apt-get.cc:546 -msgid "" -"WARNING: The following essential packages will be removed.\n" -"This should NOT be done unless you know exactly what you are doing!" -msgstr "" - -#: cmdline/apt-get.cc:577 -#, c-format -msgid "%lu upgraded, %lu newly installed, " -msgstr "" - -#: cmdline/apt-get.cc:581 -#, c-format -msgid "%lu reinstalled, " -msgstr "%lu ji nû ve sazkirî" - -#: cmdline/apt-get.cc:583 -#, c-format -msgid "%lu downgraded, " -msgstr "" - -#: cmdline/apt-get.cc:585 -#, c-format -msgid "%lu to remove and %lu not upgraded.\n" -msgstr "" - -#: cmdline/apt-get.cc:589 -#, c-format -msgid "%lu not fully installed or removed.\n" -msgstr "" - -#: cmdline/apt-get.cc:649 -msgid "Correcting dependencies..." -msgstr "Bindestî tên serrastkirin..." - -#: cmdline/apt-get.cc:652 -msgid " failed." -msgstr " neserketî." - -#: cmdline/apt-get.cc:655 -msgid "Unable to correct dependencies" -msgstr "" - -#: cmdline/apt-get.cc:658 -msgid "Unable to minimize the upgrade set" -msgstr "" - -#: cmdline/apt-get.cc:660 -msgid " Done" -msgstr " Temam" - -#: cmdline/apt-get.cc:664 -msgid "You might want to run `apt-get -f install' to correct these." -msgstr "" - -#: cmdline/apt-get.cc:667 -msgid "Unmet dependencies. Try using -f." -msgstr "" - -#: cmdline/apt-get.cc:689 -msgid "WARNING: The following packages cannot be authenticated!" -msgstr "" - -#: cmdline/apt-get.cc:693 -msgid "Authentication warning overridden.\n" -msgstr "" - -#: cmdline/apt-get.cc:700 -msgid "Install these packages without verification [y/N]? " -msgstr "" - -#: cmdline/apt-get.cc:702 -msgid "Some packages could not be authenticated" -msgstr "" - -#: cmdline/apt-get.cc:711 cmdline/apt-get.cc:858 -msgid "There are problems and -y was used without --force-yes" -msgstr "" - -#: cmdline/apt-get.cc:755 -msgid "Internal error, InstallPackages was called with broken packages!" -msgstr "" - -#: cmdline/apt-get.cc:764 -msgid "Packages need to be removed but remove is disabled." -msgstr "" - -#: cmdline/apt-get.cc:775 -msgid "Internal error, Ordering didn't finish" -msgstr "" - -#: cmdline/apt-get.cc:791 cmdline/apt-get.cc:1811 cmdline/apt-get.cc:1844 -msgid "Unable to lock the download directory" -msgstr "Pelrêça daxistinê nayê quflekirin" - -#: cmdline/apt-get.cc:801 cmdline/apt-get.cc:1892 cmdline/apt-get.cc:2128 -#: apt-pkg/cachefile.cc:67 -msgid "The list of sources could not be read." -msgstr "" - -#: cmdline/apt-get.cc:816 -msgid "How odd.. The sizes didn't match, email apt@packages.debian.org" -msgstr "" - -#: cmdline/apt-get.cc:821 -#, c-format -msgid "Need to get %sB/%sB of archives.\n" -msgstr "" - -#: cmdline/apt-get.cc:824 -#, c-format -msgid "Need to get %sB of archives.\n" -msgstr "" - -#: cmdline/apt-get.cc:829 -#, c-format -msgid "After unpacking %sB of additional disk space will be used.\n" -msgstr "" - -#: cmdline/apt-get.cc:832 -#, c-format -msgid "After unpacking %sB disk space will be freed.\n" -msgstr "" - -#: cmdline/apt-get.cc:846 cmdline/apt-get.cc:1982 -#, c-format -msgid "Couldn't determine free space in %s" -msgstr "" - -#: cmdline/apt-get.cc:849 -#, c-format -msgid "You don't have enough free space in %s." -msgstr "" - -#: cmdline/apt-get.cc:864 cmdline/apt-get.cc:884 -msgid "Trivial Only specified but this is not a trivial operation." -msgstr "" - -#: cmdline/apt-get.cc:866 -msgid "Yes, do as I say!" -msgstr "" - -#: cmdline/apt-get.cc:868 -#, c-format -msgid "" -"You are about to do something potentially harmful.\n" -"To continue type in the phrase '%s'\n" -" ?] " -msgstr "" - -#: cmdline/apt-get.cc:874 cmdline/apt-get.cc:893 -msgid "Abort." -msgstr "" - -#: cmdline/apt-get.cc:889 -msgid "Do you want to continue [Y/n]? " -msgstr "" - -#: cmdline/apt-get.cc:961 cmdline/apt-get.cc:1365 cmdline/apt-get.cc:2025 -#, c-format -msgid "Failed to fetch %s %s\n" -msgstr "" - -#: cmdline/apt-get.cc:979 -msgid "Some files failed to download" -msgstr "" - -#: cmdline/apt-get.cc:980 cmdline/apt-get.cc:2034 -msgid "Download complete and in download only mode" -msgstr "" - -#: cmdline/apt-get.cc:986 -msgid "" -"Unable to fetch some archives, maybe run apt-get update or try with --fix-" -"missing?" -msgstr "" - -#: cmdline/apt-get.cc:990 -msgid "--fix-missing and media swapping is not currently supported" -msgstr "" - -#: cmdline/apt-get.cc:995 -msgid "Unable to correct missing packages." -msgstr "" - -#: cmdline/apt-get.cc:996 -msgid "Aborting install." -msgstr "" - -#: cmdline/apt-get.cc:1030 -#, c-format -msgid "Note, selecting %s instead of %s\n" -msgstr "" - -#: cmdline/apt-get.cc:1040 -#, c-format -msgid "Skipping %s, it is already installed and upgrade is not set.\n" -msgstr "" - -#: cmdline/apt-get.cc:1058 -#, c-format -msgid "Package %s is not installed, so not removed\n" -msgstr "" - -#: cmdline/apt-get.cc:1069 -#, c-format -msgid "Package %s is a virtual package provided by:\n" -msgstr "" - -#: cmdline/apt-get.cc:1081 -msgid " [Installed]" -msgstr " [Sazkirî]" - -#: cmdline/apt-get.cc:1086 -msgid "You should explicitly select one to install." -msgstr "" - -#: cmdline/apt-get.cc:1091 -#, c-format -msgid "" -"Package %s is not available, but is referred to by another package.\n" -"This may mean that the package is missing, has been obsoleted, or\n" -"is only available from another source\n" -msgstr "" - -#: cmdline/apt-get.cc:1110 -msgid "However the following packages replace it:" -msgstr "" - -#: cmdline/apt-get.cc:1113 -#, c-format -msgid "Package %s has no installation candidate" -msgstr "" - -#: cmdline/apt-get.cc:1133 -#, c-format -msgid "Reinstallation of %s is not possible, it cannot be downloaded.\n" -msgstr "" - -#: cmdline/apt-get.cc:1141 -#, c-format -msgid "%s is already the newest version.\n" -msgstr "" - -#: cmdline/apt-get.cc:1168 -#, c-format -msgid "Release '%s' for '%s' was not found" -msgstr "" - -#: cmdline/apt-get.cc:1170 -#, c-format -msgid "Version '%s' for '%s' was not found" -msgstr "" - -#: cmdline/apt-get.cc:1176 -#, c-format -msgid "Selected version %s (%s) for %s\n" -msgstr "" - -#: cmdline/apt-get.cc:1313 -msgid "The update command takes no arguments" -msgstr "" - -#: cmdline/apt-get.cc:1326 -msgid "Unable to lock the list directory" -msgstr "" - -#: cmdline/apt-get.cc:1384 -msgid "" -"Some index files failed to download, they have been ignored, or old ones " -"used instead." -msgstr "" - -#: cmdline/apt-get.cc:1403 -msgid "Internal error, AllUpgrade broke stuff" -msgstr "" - -#: cmdline/apt-get.cc:1493 cmdline/apt-get.cc:1529 -#, c-format -msgid "Couldn't find package %s" -msgstr "" - -#: cmdline/apt-get.cc:1516 -#, c-format -msgid "Note, selecting %s for regex '%s'\n" -msgstr "" - -#: cmdline/apt-get.cc:1546 -msgid "You might want to run `apt-get -f install' to correct these:" -msgstr "" - -#: cmdline/apt-get.cc:1549 -msgid "" -"Unmet dependencies. Try 'apt-get -f install' with no packages (or specify a " -"solution)." -msgstr "" - -#: cmdline/apt-get.cc:1561 -msgid "" -"Some packages could not be installed. This may mean that you have\n" -"requested an impossible situation or if you are using the unstable\n" -"distribution that some required packages have not yet been created\n" -"or been moved out of Incoming." -msgstr "" - -#: cmdline/apt-get.cc:1569 -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:1574 -msgid "The following information may help to resolve the situation:" -msgstr "" - -#: cmdline/apt-get.cc:1577 -msgid "Broken packages" -msgstr "Paketên şikestî" - -#: cmdline/apt-get.cc:1603 -msgid "The following extra packages will be installed:" -msgstr "" - -#: cmdline/apt-get.cc:1685 -msgid "Suggested packages:" -msgstr "Paketên tên pêşniyaz kirin:" - -#: cmdline/apt-get.cc:1686 -msgid "Recommended packages:" -msgstr "Paketên tên tawsiyê kirin:" - -#: cmdline/apt-get.cc:1706 -msgid "Calculating upgrade... " -msgstr "" - -#: cmdline/apt-get.cc:1709 methods/ftp.cc:702 methods/connect.cc:101 -msgid "Failed" -msgstr "Serneket" - -#: cmdline/apt-get.cc:1714 -msgid "Done" -msgstr "Temam" - -#: cmdline/apt-get.cc:1779 cmdline/apt-get.cc:1787 -msgid "Internal error, problem resolver broke stuff" -msgstr "" - -#: cmdline/apt-get.cc:1887 -msgid "Must specify at least one package to fetch source for" -msgstr "" - -#: cmdline/apt-get.cc:1917 cmdline/apt-get.cc:2146 -#, c-format -msgid "Unable to find a source package for %s" -msgstr "" - -#: cmdline/apt-get.cc:1961 -#, c-format -msgid "Skipping already downloaded file '%s'\n" -msgstr "" - -#: cmdline/apt-get.cc:1985 -#, c-format -msgid "You don't have enough free space in %s" -msgstr "" - -#: cmdline/apt-get.cc:1990 -#, c-format -msgid "Need to get %sB/%sB of source archives.\n" -msgstr "" - -#: cmdline/apt-get.cc:1993 -#, c-format -msgid "Need to get %sB of source archives.\n" -msgstr "" - -#: cmdline/apt-get.cc:1999 -#, c-format -msgid "Fetch source %s\n" -msgstr "" - -#: cmdline/apt-get.cc:2030 -msgid "Failed to fetch some archives." -msgstr "" - -#: cmdline/apt-get.cc:2058 -#, c-format -msgid "Skipping unpack of already unpacked source in %s\n" -msgstr "" - -#: cmdline/apt-get.cc:2070 -#, c-format -msgid "Unpack command '%s' failed.\n" -msgstr "" - -#: cmdline/apt-get.cc:2071 -#, c-format -msgid "Check if the 'dpkg-dev' package is installed.\n" -msgstr "" - -#: cmdline/apt-get.cc:2088 -#, c-format -msgid "Build command '%s' failed.\n" -msgstr "" - -#: cmdline/apt-get.cc:2107 -msgid "Child process failed" -msgstr "" - -#: cmdline/apt-get.cc:2123 -msgid "Must specify at least one package to check builddeps for" -msgstr "" - -#: cmdline/apt-get.cc:2151 -#, c-format -msgid "Unable to get build-dependency information for %s" -msgstr "" - -#: cmdline/apt-get.cc:2171 -#, c-format -msgid "%s has no build depends.\n" -msgstr "" - -#: cmdline/apt-get.cc:2223 -#, c-format -msgid "" -"%s dependency for %s cannot be satisfied because the package %s cannot be " -"found" -msgstr "" - -#: cmdline/apt-get.cc:2275 -#, 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:2310 -#, c-format -msgid "Failed to satisfy %s dependency for %s: Installed package %s is too new" -msgstr "" - -#: cmdline/apt-get.cc:2335 -#, c-format -msgid "Failed to satisfy %s dependency for %s: %s" -msgstr "" - -#: cmdline/apt-get.cc:2349 -#, c-format -msgid "Build-dependencies for %s could not be satisfied." -msgstr "" - -#: cmdline/apt-get.cc:2353 -msgid "Failed to process build dependencies" -msgstr "" - -#: cmdline/apt-get.cc:2385 -msgid "Supported modules:" -msgstr "" - -#: cmdline/apt-get.cc:2426 -msgid "" -"Usage: apt-get [options] command\n" -" apt-get [options] install|remove pkg1 [pkg2 ...]\n" -" apt-get [options] source pkg1 [pkg2 ...]\n" -"\n" -"apt-get is a simple command line interface for downloading and\n" -"installing packages. The most frequently used commands are update\n" -"and install.\n" -"\n" -"Commands:\n" -" update - Retrieve new lists of packages\n" -" upgrade - Perform an upgrade\n" -" install - Install new packages (pkg is libc6 not libc6.deb)\n" -" remove - Remove packages\n" -" source - Download source archives\n" -" build-dep - Configure build-dependencies for source packages\n" -" dist-upgrade - Distribution upgrade, see apt-get(8)\n" -" dselect-upgrade - Follow dselect selections\n" -" clean - Erase downloaded archive files\n" -" autoclean - Erase old downloaded archive files\n" -" check - Verify that there are no broken dependencies\n" -"\n" -"Options:\n" -" -h This help text.\n" -" -q Loggable output - no progress indicator\n" -" -qq No output except for errors\n" -" -d Download only - do NOT install or unpack archives\n" -" -s No-act. Perform ordering simulation\n" -" -y Assume Yes to all queries and do not prompt\n" -" -f Attempt to continue if the integrity check fails\n" -" -m Attempt to continue if archives are unlocatable\n" -" -u Show a list of upgraded packages as well\n" -" -b Build the source package after fetching it\n" -" -V Show verbose version numbers\n" -" -c=? Read this configuration file\n" -" -o=? Set an arbitrary configuration option, eg -o dir::cache=/tmp\n" -"See the apt-get(8), sources.list(5) and apt.conf(5) manual\n" -"pages for more information and options.\n" -" This APT has Super Cow Powers.\n" -msgstr "" - -#: cmdline/acqprogress.cc:55 -msgid "Hit " -msgstr "" - -#: cmdline/acqprogress.cc:79 -msgid "Get:" -msgstr "" - -#: cmdline/acqprogress.cc:110 -msgid "Ign " -msgstr "" - -#: cmdline/acqprogress.cc:114 -msgid "Err " -msgstr "" - -#: cmdline/acqprogress.cc:135 -#, c-format -msgid "Fetched %sB in %s (%sB/s)\n" -msgstr "" - -#: cmdline/acqprogress.cc:225 -#, c-format -msgid " [Working]" -msgstr " [Dixebite]" - -#: cmdline/acqprogress.cc:271 -#, c-format -msgid "" -"Media change: please insert the disc labeled\n" -" '%s'\n" -"in the drive '%s' and press enter\n" -msgstr "" - -#: cmdline/apt-sortpkgs.cc:86 -msgid "Unknown package record!" -msgstr "" - -#: cmdline/apt-sortpkgs.cc:150 -msgid "" -"Usage: apt-sortpkgs [options] file1 [file2 ...]\n" -"\n" -"apt-sortpkgs is a simple tool to sort package files. The -s option is used\n" -"to indicate what kind of file it is.\n" -"\n" -"Options:\n" -" -h This help text\n" -" -s Use source file sorting\n" -" -c=? Read this configuration file\n" -" -o=? Set an arbitrary configuration option, eg -o dir::cache=/tmp\n" -msgstr "" - -#: dselect/install:32 -msgid "Bad default setting!" -msgstr "" - -#: dselect/install:51 dselect/install:83 dselect/install:87 dselect/install:93 -#: dselect/install:104 dselect/update:45 -msgid "Press enter to continue." -msgstr "" - -#: dselect/install:100 -msgid "Some errors occurred while unpacking. I'm going to configure the" -msgstr "" - -#: dselect/install:101 -msgid "packages that were installed. This may result in duplicate errors" -msgstr "" - -#: dselect/install:102 -msgid "or errors caused by missing dependencies. This is OK, only the errors" -msgstr "" - -#: dselect/install:103 -msgid "" -"above this message are important. Please fix them and run [I]nstall again" -msgstr "" - -#: dselect/update:30 -msgid "Merging available information" -msgstr "" - -#: apt-inst/contrib/extracttar.cc:117 -#, fuzzy -msgid "Failed to create pipes" -msgstr "%s ji hev nehate veçirandin" - -#: apt-inst/contrib/extracttar.cc:144 -#, fuzzy -msgid "Failed to exec gzip " -msgstr "%s ji hev nehate veçirandin" - -#: apt-inst/contrib/extracttar.cc:181 apt-inst/contrib/extracttar.cc:207 -msgid "Corrupted archive" -msgstr "" - -#: apt-inst/contrib/extracttar.cc:196 -msgid "Tar checksum failed, archive corrupted" -msgstr "" - -#: apt-inst/contrib/extracttar.cc:299 -#, c-format -msgid "Unknown TAR header type %u, member %s" -msgstr "" - -#: apt-inst/contrib/arfile.cc:73 -msgid "Invalid archive signature" -msgstr "" - -#: apt-inst/contrib/arfile.cc:81 -msgid "Error reading archive member header" -msgstr "" - -#: apt-inst/contrib/arfile.cc:93 apt-inst/contrib/arfile.cc:105 -msgid "Invalid archive member header" -msgstr "" - -#: apt-inst/contrib/arfile.cc:131 -#, fuzzy -msgid "Archive is too short" -msgstr "Tomara kontrola arşîvê tuneye" - -#: apt-inst/contrib/arfile.cc:135 -msgid "Failed to read the archive headers" -msgstr "" - -#: apt-inst/filelist.cc:384 -msgid "DropNode called on still linked node" -msgstr "" - -#: apt-inst/filelist.cc:416 -msgid "Failed to locate the hash element!" -msgstr "" - -#: apt-inst/filelist.cc:463 -#, fuzzy -msgid "Failed to allocate diversion" -msgstr "%s venebû" - -#: apt-inst/filelist.cc:468 -msgid "Internal error in AddDiversion" -msgstr "" - -#: apt-inst/filelist.cc:481 -#, c-format -msgid "Trying to overwrite a diversion, %s -> %s and %s/%s" -msgstr "" - -#: apt-inst/filelist.cc:510 -#, c-format -msgid "Double add of diversion %s -> %s" -msgstr "" - -#: apt-inst/filelist.cc:553 -#, c-format -msgid "Duplicate conf file %s/%s" -msgstr "" - -#: apt-inst/dirstream.cc:45 apt-inst/dirstream.cc:50 apt-inst/dirstream.cc:53 -#, fuzzy, c-format -msgid "Failed to write file %s" -msgstr "%s ji hev nehate veçirandin" - -#: apt-inst/dirstream.cc:96 apt-inst/dirstream.cc:104 -#, fuzzy, c-format -msgid "Failed to close file %s" -msgstr "%s venebû" - -#: apt-inst/extract.cc:96 apt-inst/extract.cc:167 -#, fuzzy, c-format -msgid "The path %s is too long" -msgstr "Lîsteya dirêjahiya çavkaniyê zêde dirêj e" - -#: apt-inst/extract.cc:127 -#, c-format -msgid "Unpacking %s more than once" -msgstr "" - -#: apt-inst/extract.cc:137 -#, c-format -msgid "The directory %s is diverted" -msgstr "" - -#: apt-inst/extract.cc:147 -#, c-format -msgid "The package is trying to write to the diversion target %s/%s" -msgstr "" - -#: apt-inst/extract.cc:157 apt-inst/extract.cc:300 -#, fuzzy -msgid "The diversion path is too long" -msgstr "Lîsteya dirêjahiya çavkaniyê zêde dirêj e" - -#: apt-inst/extract.cc:243 -#, c-format -msgid "The directory %s is being replaced by a non-directory" -msgstr "" - -#: apt-inst/extract.cc:283 -msgid "Failed to locate node in its hash bucket" -msgstr "" - -#: apt-inst/extract.cc:287 -msgid "The path is too long" -msgstr "" - -#: apt-inst/extract.cc:417 -#, c-format -msgid "Overwrite package match with no version for %s" -msgstr "" - -#: apt-inst/extract.cc:434 -#, c-format -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/sourcelist.cc:324 -#: apt-pkg/acquire.cc:421 apt-pkg/clean.cc:38 -#, fuzzy, c-format -msgid "Unable to read %s" -msgstr "%s venebû" - -#: apt-inst/extract.cc:494 -#, fuzzy, c-format -msgid "Unable to stat %s" -msgstr "Nivîsandin ji bo %s ne pêkane" - -#: apt-inst/deb/dpkgdb.cc:55 apt-inst/deb/dpkgdb.cc:61 -#, fuzzy, c-format -msgid "Failed to remove %s" -msgstr "%s ji hev nehate veçirandin" - -#: apt-inst/deb/dpkgdb.cc:110 apt-inst/deb/dpkgdb.cc:112 -#, fuzzy, c-format -msgid "Unable to create %s" -msgstr "Nivîsandin ji bo %s ne pêkane" - -#: apt-inst/deb/dpkgdb.cc:118 -#, fuzzy, c-format -msgid "Failed to stat %sinfo" -msgstr "%s venebû" - -#: apt-inst/deb/dpkgdb.cc:123 -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:643 -#: apt-pkg/pkgcachegen.cc:712 apt-pkg/pkgcachegen.cc:717 -#: apt-pkg/pkgcachegen.cc:840 -#, fuzzy -msgid "Reading package lists" -msgstr "Paketên şikestî" - -#: apt-inst/deb/dpkgdb.cc:180 -#, c-format -msgid "Failed to change to the admin dir %sinfo" -msgstr "" - -#: apt-inst/deb/dpkgdb.cc:201 apt-inst/deb/dpkgdb.cc:355 -#: apt-inst/deb/dpkgdb.cc:448 -msgid "Internal error getting a package name" -msgstr "" - -#: apt-inst/deb/dpkgdb.cc:205 apt-inst/deb/dpkgdb.cc:386 -msgid "Reading file listing" -msgstr "" - -#: apt-inst/deb/dpkgdb.cc:216 -#, c-format -msgid "" -"Failed to open the list file '%sinfo/%s'. If you cannot restore this file " -"then make it empty and immediately re-install the same version of the " -"package!" -msgstr "" - -#: apt-inst/deb/dpkgdb.cc:229 apt-inst/deb/dpkgdb.cc:242 -#, c-format -msgid "Failed reading the list file %sinfo/%s" -msgstr "" - -#: apt-inst/deb/dpkgdb.cc:266 -msgid "Internal error getting a node" -msgstr "" - -#: apt-inst/deb/dpkgdb.cc:309 -#, c-format -msgid "Failed to open the diversions file %sdiversions" -msgstr "" - -#: apt-inst/deb/dpkgdb.cc:324 -msgid "The diversion file is corrupted" -msgstr "" - -#: apt-inst/deb/dpkgdb.cc:331 apt-inst/deb/dpkgdb.cc:336 -#: apt-inst/deb/dpkgdb.cc:341 -#, c-format -msgid "Invalid line in the diversion file: %s" -msgstr "" - -#: apt-inst/deb/dpkgdb.cc:362 -msgid "Internal error adding a diversion" -msgstr "" - -#: apt-inst/deb/dpkgdb.cc:383 -msgid "The pkg cache must be initialized first" -msgstr "" - -#: apt-inst/deb/dpkgdb.cc:443 -#, c-format -msgid "Failed to find a Package: header, offset %lu" -msgstr "" - -#: apt-inst/deb/dpkgdb.cc:465 -#, c-format -msgid "Bad ConfFile section in the status file. Offset %lu" -msgstr "" - -#: apt-inst/deb/dpkgdb.cc:470 -#, c-format -msgid "Error parsing MD5. Offset %lu" -msgstr "" - -#: apt-inst/deb/debfile.cc:42 apt-inst/deb/debfile.cc:47 -#, c-format -msgid "This is not a valid DEB archive, missing '%s' member" -msgstr "" - -#: apt-inst/deb/debfile.cc:52 -#, c-format -msgid "This is not a valid DEB archive, it has no '%s' or '%s' member" -msgstr "" - -#: apt-inst/deb/debfile.cc:112 -#, c-format -msgid "Couldn't change to %s" -msgstr "" - -#: apt-inst/deb/debfile.cc:138 -msgid "Internal error, could not locate member" -msgstr "" - -#: apt-inst/deb/debfile.cc:171 -msgid "Failed to locate a valid control file" -msgstr "" - -#: apt-inst/deb/debfile.cc:256 -msgid "Unparsable control file" -msgstr "" - -#: methods/cdrom.cc:114 -#, fuzzy, c-format -msgid "Unable to read the cdrom database %s" -msgstr "Pakêt nehate dîtin %s" - -#: 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 -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:169 -#, fuzzy -msgid "Disk not found." -msgstr "(nehate dîtin)" - -#: methods/cdrom.cc:177 methods/file.cc:79 methods/rsh.cc:264 -#, fuzzy -msgid "File not found" -msgstr "(nehate dîtin)" - -#: methods/copy.cc:42 methods/gpgv.cc:281 methods/gzip.cc:133 -#: methods/gzip.cc:142 -#, fuzzy -msgid "Failed to stat" -msgstr "%s venebû" - -#: methods/copy.cc:79 methods/gpgv.cc:278 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 -#, fuzzy -msgid "Unable to determine the local name" -msgstr "Nivîsandin ji bo %s ne pêkane" - -#: 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:958 methods/rsh.cc:303 -msgid "Problem hashing file" -msgstr "" - -#: methods/ftp.cc:877 -#, fuzzy, c-format -msgid "Unable to fetch file, server said '%s'" -msgstr "Danegira %s nehate vekirin: %s" - -#: 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:1109 -#, fuzzy -msgid "Unable to invoke " -msgstr "%s venebû" - -#: 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:108 -#, 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 -#, c-format -msgid "Connecting to %s" -msgstr "" - -#: methods/connect.cc:167 -#, fuzzy, c-format -msgid "Could not resolve '%s'" -msgstr "%s ji hev nehate veçirandin" - -#: methods/connect.cc:173 -#, c-format -msgid "Temporary failure resolving '%s'" -msgstr "" - -#: methods/connect.cc:176 -#, c-format -msgid "Something wicked happened resolving '%s:%s' (%i)" -msgstr "" - -#: methods/connect.cc:223 -#, fuzzy, c-format -msgid "Unable to connect to %s %s:" -msgstr "Nivîsandin ji bo %s ne pêkane" - -#: methods/gpgv.cc:65 -#, c-format -msgid "Couldn't access keyring: '%s'" -msgstr "" - -#: methods/gpgv.cc:100 -msgid "E: Argument list from Acquire::gpgv::Options too long. Exiting." -msgstr "" - -#: methods/gpgv.cc:204 -msgid "" -"Internal error: Good signature, but could not determine key fingerprint?!" -msgstr "" - -#: methods/gpgv.cc:209 -msgid "At least one invalid signature was encountered." -msgstr "" - -#: methods/gpgv.cc:213 -#, c-format -msgid "Could not execute '%s' to verify signature (is gnupg installed?)" -msgstr "" - -#: methods/gpgv.cc:218 -msgid "Unknown error executing gpgv" -msgstr "" - -#: methods/gpgv.cc:249 -#, fuzzy -msgid "The following signatures were invalid:\n" -msgstr "Ev pakêtên NÛ dê werine sazkirin:" - -#: methods/gpgv.cc:256 -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:376 -msgid "Waiting for headers" -msgstr "" - -#: methods/http.cc:522 -#, c-format -msgid "Got a single header line over %u chars" -msgstr "" - -#: methods/http.cc:530 -msgid "Bad header line" -msgstr "" - -#: methods/http.cc:549 methods/http.cc:556 -msgid "The HTTP server sent an invalid reply header" -msgstr "" - -#: methods/http.cc:585 -msgid "The HTTP server sent an invalid Content-Length header" -msgstr "" - -#: methods/http.cc:600 -msgid "The HTTP server sent an invalid Content-Range header" -msgstr "" - -#: methods/http.cc:602 -msgid "This HTTP server has broken range support" -msgstr "" - -#: methods/http.cc:626 -msgid "Unknown date format" -msgstr "" - -#: methods/http.cc:773 -#, fuzzy -msgid "Select failed" -msgstr " neserketî." - -#: methods/http.cc:778 -msgid "Connection timed out" -msgstr "" - -#: methods/http.cc:801 -#, fuzzy -msgid "Error writing to output file" -msgstr "Dema li dosyeya naverokê joreagahî dihate nivîsîn çewtî" - -#: methods/http.cc:832 -#, fuzzy -msgid "Error writing to file" -msgstr "Dema li dosyeya naverokê joreagahî dihate nivîsîn çewtî" - -#: methods/http.cc:860 -#, fuzzy -msgid "Error writing to the file" -msgstr "Dema li dosyeya naverokê joreagahî dihate nivîsîn çewtî" - -#: methods/http.cc:874 -msgid "Error reading from server. Remote end closed connection" -msgstr "" - -#: methods/http.cc:876 -msgid "Error reading from server" -msgstr "" - -#: methods/http.cc:1107 -msgid "Bad header data" -msgstr "" - -#: methods/http.cc:1124 -msgid "Connection failed" -msgstr "" - -#: methods/http.cc:1215 -msgid "Internal error" -msgstr "" - -#: apt-pkg/contrib/mmap.cc:82 -msgid "Can't mmap an empty file" -msgstr "" - -#: apt-pkg/contrib/mmap.cc:87 -#, c-format -msgid "Couldn't make mmap of %lu bytes" -msgstr "" - -#: apt-pkg/contrib/strutl.cc:938 -#, c-format -msgid "Selection %s not found" -msgstr "" - -#: apt-pkg/contrib/configuration.cc:436 -#, c-format -msgid "Unrecognized type abbreviation: '%c'" -msgstr "" - -#: apt-pkg/contrib/configuration.cc:494 -#, c-format -msgid "Opening configuration file %s" -msgstr "" - -#: apt-pkg/contrib/configuration.cc:512 -#, c-format -msgid "Line %d too long (max %d)" -msgstr "" - -#: apt-pkg/contrib/configuration.cc:608 -#, c-format -msgid "Syntax error %s:%u: Block starts with no name." -msgstr "" - -#: apt-pkg/contrib/configuration.cc:627 -#, c-format -msgid "Syntax error %s:%u: Malformed tag" -msgstr "" - -#: apt-pkg/contrib/configuration.cc:644 -#, c-format -msgid "Syntax error %s:%u: Extra junk after value" -msgstr "" - -#: apt-pkg/contrib/configuration.cc:684 -#, c-format -msgid "Syntax error %s:%u: Directives can only be done at the top level" -msgstr "" - -#: apt-pkg/contrib/configuration.cc:691 -#, c-format -msgid "Syntax error %s:%u: Too many nested includes" -msgstr "" - -#: apt-pkg/contrib/configuration.cc:695 apt-pkg/contrib/configuration.cc:700 -#, c-format -msgid "Syntax error %s:%u: Included from here" -msgstr "" - -#: apt-pkg/contrib/configuration.cc:704 -#, c-format -msgid "Syntax error %s:%u: Unsupported directive '%s'" -msgstr "" - -#: apt-pkg/contrib/configuration.cc:738 -#, c-format -msgid "Syntax error %s:%u: Extra junk at end of file" -msgstr "" - -#: apt-pkg/contrib/progress.cc:154 -#, c-format -msgid "%c%s... Error!" -msgstr "" - -#: apt-pkg/contrib/progress.cc:156 -#, c-format -msgid "%c%s... Done" -msgstr "" - -#: apt-pkg/contrib/cmndline.cc:80 -#, c-format -msgid "Command line option '%c' [from %s] is not known." -msgstr "" - -#: apt-pkg/contrib/cmndline.cc:106 apt-pkg/contrib/cmndline.cc:114 -#: apt-pkg/contrib/cmndline.cc:122 -#, c-format -msgid "Command line option %s is not understood" -msgstr "" - -#: apt-pkg/contrib/cmndline.cc:127 -#, c-format -msgid "Command line option %s is not boolean" -msgstr "" - -#: apt-pkg/contrib/cmndline.cc:166 apt-pkg/contrib/cmndline.cc:187 -#, c-format -msgid "Option %s requires an argument." -msgstr "" - -#: apt-pkg/contrib/cmndline.cc:201 apt-pkg/contrib/cmndline.cc:207 -#, c-format -msgid "Option %s: Configuration item specification must have an =<val>." -msgstr "" - -#: apt-pkg/contrib/cmndline.cc:237 -#, c-format -msgid "Option %s requires an integer argument, not '%s'" -msgstr "" - -#: apt-pkg/contrib/cmndline.cc:268 -#, fuzzy, c-format -msgid "Option '%s' is too long" -msgstr "Lîsteya dirêjahiya çavkaniyê zêde dirêj e" - -#: apt-pkg/contrib/cmndline.cc:301 -#, c-format -msgid "Sense %s is not understood, try true or false." -msgstr "" - -#: apt-pkg/contrib/cmndline.cc:351 -#, c-format -msgid "Invalid operation %s" -msgstr "" - -#: apt-pkg/contrib/cdromutl.cc:55 -#, fuzzy, c-format -msgid "Unable to stat the mount point %s" -msgstr "Nivîsandin ji bo %s ne pêkane" - -#: apt-pkg/contrib/cdromutl.cc:149 apt-pkg/acquire.cc:427 apt-pkg/clean.cc:44 -#, fuzzy, c-format -msgid "Unable to change to %s" -msgstr "Nivîsandin ji bo %s ne pêkane" - -#: apt-pkg/contrib/cdromutl.cc:190 -msgid "Failed to stat the cdrom" -msgstr "" - -#: apt-pkg/contrib/fileutl.cc:82 -#, c-format -msgid "Not using locking for read only lock file %s" -msgstr "" - -#: apt-pkg/contrib/fileutl.cc:87 -#, fuzzy, c-format -msgid "Could not open lock file %s" -msgstr "Danegira %s nehate vekirin: %s" - -#: apt-pkg/contrib/fileutl.cc:105 -#, c-format -msgid "Not using locking for nfs mounted lock file %s" -msgstr "" - -#: apt-pkg/contrib/fileutl.cc:109 -#, c-format -msgid "Could not get lock %s" -msgstr "" - -#: apt-pkg/contrib/fileutl.cc:377 -#, c-format -msgid "Waited for %s but it wasn't there" -msgstr "" - -#: apt-pkg/contrib/fileutl.cc:387 -#, c-format -msgid "Sub-process %s received a segmentation fault." -msgstr "" - -#: apt-pkg/contrib/fileutl.cc:390 -#, c-format -msgid "Sub-process %s returned an error code (%u)" -msgstr "" - -#: apt-pkg/contrib/fileutl.cc:392 -#, c-format -msgid "Sub-process %s exited unexpectedly" -msgstr "" - -#: apt-pkg/contrib/fileutl.cc:436 -#, fuzzy, c-format -msgid "Could not open file %s" -msgstr "Danegira %s nehate vekirin: %s" - -#: apt-pkg/contrib/fileutl.cc:492 -#, c-format -msgid "read, still have %lu to read but none left" -msgstr "" - -#: apt-pkg/contrib/fileutl.cc:522 -#, c-format -msgid "write, still have %lu to write but couldn't" -msgstr "" - -#: apt-pkg/contrib/fileutl.cc:597 -msgid "Problem closing the file" -msgstr "" - -#: apt-pkg/contrib/fileutl.cc:603 -msgid "Problem unlinking the file" -msgstr "" - -#: apt-pkg/contrib/fileutl.cc:614 -msgid "Problem syncing the file" -msgstr "" - -#: apt-pkg/pkgcache.cc:126 -msgid "Empty package cache" -msgstr "" - -#: apt-pkg/pkgcache.cc:132 -msgid "The package cache file is corrupted" -msgstr "" - -#: apt-pkg/pkgcache.cc:137 -msgid "The package cache file is an incompatible version" -msgstr "" - -#: apt-pkg/pkgcache.cc:142 -#, c-format -msgid "This APT does not support the versioning system '%s'" -msgstr "" - -#: apt-pkg/pkgcache.cc:147 -msgid "The package cache was built for a different architecture" -msgstr "" - -#: apt-pkg/pkgcache.cc:218 -msgid "Depends" -msgstr "" - -#: apt-pkg/pkgcache.cc:218 -msgid "PreDepends" -msgstr "" - -#: apt-pkg/pkgcache.cc:218 -msgid "Suggests" -msgstr "" - -#: apt-pkg/pkgcache.cc:219 -#, fuzzy -msgid "Recommends" -msgstr "Paketên tên tawsiyê kirin:" - -#: apt-pkg/pkgcache.cc:219 -msgid "Conflicts" -msgstr "" - -#: apt-pkg/pkgcache.cc:219 -msgid "Replaces" -msgstr "" - -#: apt-pkg/pkgcache.cc:220 -msgid "Obsoletes" -msgstr "" - -#: apt-pkg/pkgcache.cc:231 -msgid "important" -msgstr "" - -#: apt-pkg/pkgcache.cc:231 -msgid "required" -msgstr "" - -#: apt-pkg/pkgcache.cc:231 -msgid "standard" -msgstr "" - -#: apt-pkg/pkgcache.cc:232 -msgid "optional" -msgstr "" - -#: apt-pkg/pkgcache.cc:232 -msgid "extra" -msgstr "" - -#: apt-pkg/depcache.cc:61 apt-pkg/depcache.cc:90 -msgid "Building dependency tree" -msgstr "" - -#: apt-pkg/depcache.cc:62 -#, fuzzy -msgid "Candidate versions" -msgstr " Berendam: " - -#: apt-pkg/depcache.cc:91 -msgid "Dependency generation" -msgstr "" - -#: apt-pkg/tagfile.cc:85 apt-pkg/tagfile.cc:92 -#, fuzzy, c-format -msgid "Unable to parse package file %s (1)" -msgstr "Pakêt nehate dîtin %s" - -#: apt-pkg/tagfile.cc:186 -#, fuzzy, c-format -msgid "Unable to parse package file %s (2)" -msgstr "Pakêt nehate dîtin %s" - -#: apt-pkg/sourcelist.cc:94 -#, c-format -msgid "Malformed line %lu in source list %s (URI)" -msgstr "" - -#: apt-pkg/sourcelist.cc:96 -#, c-format -msgid "Malformed line %lu in source list %s (dist)" -msgstr "" - -#: apt-pkg/sourcelist.cc:99 -#, c-format -msgid "Malformed line %lu in source list %s (URI parse)" -msgstr "" - -#: apt-pkg/sourcelist.cc:105 -#, c-format -msgid "Malformed line %lu in source list %s (absolute dist)" -msgstr "" - -#: apt-pkg/sourcelist.cc:112 -#, c-format -msgid "Malformed line %lu in source list %s (dist parse)" -msgstr "" - -#: apt-pkg/sourcelist.cc:203 -#, c-format -msgid "Opening %s" -msgstr "" - -#: apt-pkg/sourcelist.cc:220 apt-pkg/cdrom.cc:426 -#, c-format -msgid "Line %u too long in source list %s." -msgstr "" - -#: apt-pkg/sourcelist.cc:240 -#, c-format -msgid "Malformed line %u in source list %s (type)" -msgstr "" - -#: apt-pkg/sourcelist.cc:244 -#, c-format -msgid "Type '%s' is not known on line %u in source list %s" -msgstr "" - -#: apt-pkg/sourcelist.cc:252 apt-pkg/sourcelist.cc:255 -#, c-format -msgid "Malformed line %u in source list %s (vendor id)" -msgstr "" - -#: apt-pkg/packagemanager.cc:402 -#, c-format -msgid "" -"This installation run will require temporarily removing the essential " -"package %s due to a Conflicts/Pre-Depends loop. This is often bad, but if " -"you really want to do it, activate the APT::Force-LoopBreak option." -msgstr "" - -#: apt-pkg/pkgrecords.cc:37 -#, c-format -msgid "Index file type '%s' is not supported" -msgstr "" - -#: apt-pkg/algorithms.cc:241 -#, c-format -msgid "" -"The package %s needs to be reinstalled, but I can't find an archive for it." -msgstr "" - -#: apt-pkg/algorithms.cc:1059 -msgid "" -"Error, pkgProblemResolver::Resolve generated breaks, this may be caused by " -"held packages." -msgstr "" - -#: apt-pkg/algorithms.cc:1061 -msgid "Unable to correct problems, you have held broken packages." -msgstr "" - -#: apt-pkg/acquire.cc:62 -#, c-format -msgid "Lists directory %spartial is missing." -msgstr "" - -#: apt-pkg/acquire.cc:66 -#, c-format -msgid "Archive directory %spartial is missing." -msgstr "" - -#. only show the ETA if it makes sense -#. two days -#: apt-pkg/acquire.cc:823 -#, c-format -msgid "Retrieving file %li of %li (%s remaining)" -msgstr "" - -#: apt-pkg/acquire.cc:825 -#, c-format -msgid "Retrieving file %li of %li" -msgstr "" - -#: apt-pkg/acquire-worker.cc:113 -#, c-format -msgid "The method driver %s could not be found." -msgstr "" - -#: apt-pkg/acquire-worker.cc:162 -#, c-format -msgid "Method %s did not start correctly" -msgstr "" - -#: apt-pkg/acquire-worker.cc:377 -#, fuzzy, c-format -msgid "Please insert the disc labeled: '%s' in the drive '%s' and press enter." -msgstr "Dîsketê siwar bike û piştre bişkoja derbaskirinê bitikîne" - -#: apt-pkg/init.cc:120 -#, c-format -msgid "Packaging system '%s' is not supported" -msgstr "" - -#: apt-pkg/init.cc:136 -msgid "Unable to determine a suitable packaging system type" -msgstr "" - -#: apt-pkg/clean.cc:61 -#, fuzzy, c-format -msgid "Unable to stat %s." -msgstr "Nivîsandin ji bo %s ne pêkane" - -#: apt-pkg/srcrecords.cc:48 -msgid "You must put some 'source' URIs in your sources.list" -msgstr "" - -#: apt-pkg/cachefile.cc:73 -msgid "The package lists or status file could not be parsed or opened." -msgstr "" - -#: apt-pkg/cachefile.cc:77 -msgid "You may want to run apt-get update to correct these problems" -msgstr "" - -#: apt-pkg/policy.cc:269 -msgid "Invalid record in the preferences file, no Package header" -msgstr "" - -#: apt-pkg/policy.cc:291 -#, c-format -msgid "Did not understand pin type %s" -msgstr "" - -#: apt-pkg/policy.cc:299 -msgid "No priority (or zero) specified for pin" -msgstr "" - -#: apt-pkg/pkgcachegen.cc:74 -msgid "Cache has an incompatible versioning system" -msgstr "" - -#: apt-pkg/pkgcachegen.cc:117 -#, c-format -msgid "Error occurred while processing %s (NewPackage)" -msgstr "" - -#: apt-pkg/pkgcachegen.cc:129 -#, c-format -msgid "Error occurred while processing %s (UsePackage1)" -msgstr "" - -#: apt-pkg/pkgcachegen.cc:150 -#, c-format -msgid "Error occurred while processing %s (UsePackage2)" -msgstr "" - -#: apt-pkg/pkgcachegen.cc:154 -#, c-format -msgid "Error occurred while processing %s (NewFileVer1)" -msgstr "" - -#: apt-pkg/pkgcachegen.cc:184 -#, c-format -msgid "Error occurred while processing %s (NewVersion1)" -msgstr "" - -#: apt-pkg/pkgcachegen.cc:188 -#, c-format -msgid "Error occurred while processing %s (UsePackage3)" -msgstr "" - -#: apt-pkg/pkgcachegen.cc:192 -#, c-format -msgid "Error occurred while processing %s (NewVersion2)" -msgstr "" - -#: apt-pkg/pkgcachegen.cc:207 -msgid "Wow, you exceeded the number of package names this APT is capable of." -msgstr "" - -#: apt-pkg/pkgcachegen.cc:210 -msgid "Wow, you exceeded the number of versions this APT is capable of." -msgstr "" - -#: apt-pkg/pkgcachegen.cc:213 -msgid "Wow, you exceeded the number of dependencies this APT is capable of." -msgstr "" - -#: apt-pkg/pkgcachegen.cc:241 -#, c-format -msgid "Error occurred while processing %s (FindPkg)" -msgstr "" - -#: apt-pkg/pkgcachegen.cc:254 -#, c-format -msgid "Error occurred while processing %s (CollectFileProvides)" -msgstr "" - -#: apt-pkg/pkgcachegen.cc:260 -#, c-format -msgid "Package %s %s was not found while processing file dependencies" -msgstr "" - -#: apt-pkg/pkgcachegen.cc:574 -#, c-format -msgid "Couldn't stat source package list %s" -msgstr "" - -#: apt-pkg/pkgcachegen.cc:658 -msgid "Collecting File Provides" -msgstr "" - -#: apt-pkg/pkgcachegen.cc:785 apt-pkg/pkgcachegen.cc:792 -msgid "IO Error saving source cache" -msgstr "" - -#: apt-pkg/acquire-item.cc:126 -#, c-format -msgid "rename failed, %s (%s -> %s)." -msgstr "" - -#: apt-pkg/acquire-item.cc:236 apt-pkg/acquire-item.cc:945 -msgid "MD5Sum mismatch" -msgstr "" - -#: apt-pkg/acquire-item.cc:640 -msgid "There is no public key available for the following key IDs:\n" -msgstr "" - -#: apt-pkg/acquire-item.cc:753 -#, 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:812 -#, 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:848 -#, c-format -msgid "" -"The package index files are corrupted. No Filename: field for package %s." -msgstr "" - -#: apt-pkg/acquire-item.cc:935 -msgid "Size mismatch" -msgstr "" - -#: apt-pkg/vendorlist.cc:66 -#, c-format -msgid "Vendor block %s contains no fingerprint" -msgstr "" - -#: apt-pkg/cdrom.cc:507 -#, 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 -msgid "Identifying.. " -msgstr "" - -#: apt-pkg/cdrom.cc:541 -#, c-format -msgid "Stored label: %s \n" -msgstr "" - -#: apt-pkg/cdrom.cc:561 -#, c-format -msgid "Using CD-ROM mount point %s\n" -msgstr "" - -#: apt-pkg/cdrom.cc:579 -msgid "Unmounting CD-ROM\n" -msgstr "" - -#: apt-pkg/cdrom.cc:583 -msgid "Waiting for disc...\n" -msgstr "" - -#. Mount the new CDROM -#: apt-pkg/cdrom.cc:591 -msgid "Mounting CD-ROM...\n" -msgstr "" - -#: apt-pkg/cdrom.cc:609 -msgid "Scanning disc for index files..\n" -msgstr "" - -#: apt-pkg/cdrom.cc:647 -#, c-format -msgid "Found %i package indexes, %i source indexes and %i signatures\n" -msgstr "" - -#: apt-pkg/cdrom.cc:710 -msgid "That is not a valid name, try again.\n" -msgstr "" - -#: apt-pkg/cdrom.cc:726 -#, c-format -msgid "" -"This disc is called: \n" -"'%s'\n" -msgstr "" - -#: apt-pkg/cdrom.cc:730 -msgid "Copying package lists..." -msgstr "" - -#: apt-pkg/cdrom.cc:754 -msgid "Writing new source list\n" -msgstr "" - -#: apt-pkg/cdrom.cc:763 -msgid "Source list entries for this disc are:\n" -msgstr "" - -#: apt-pkg/cdrom.cc:803 -msgid "Unmounting CD-ROM..." -msgstr "" - -#: apt-pkg/indexcopy.cc:261 -#, c-format -msgid "Wrote %i records.\n" -msgstr "" - -#: apt-pkg/indexcopy.cc:263 -#, c-format -msgid "Wrote %i records with %i missing files.\n" -msgstr "" - -#: apt-pkg/indexcopy.cc:266 -#, c-format -msgid "Wrote %i records with %i mismatched files\n" -msgstr "" - -#: apt-pkg/indexcopy.cc:269 -#, c-format -msgid "Wrote %i records with %i missing files and %i mismatched files\n" -msgstr "" - -#: apt-pkg/deb/dpkgpm.cc:358 -#, c-format -msgid "Preparing %s" -msgstr "" - -#: apt-pkg/deb/dpkgpm.cc:359 -#, c-format -msgid "Unpacking %s" -msgstr "" - -#: apt-pkg/deb/dpkgpm.cc:364 -#, c-format -msgid "Preparing to configure %s" -msgstr "" - -#: apt-pkg/deb/dpkgpm.cc:365 -#, c-format -msgid "Configuring %s" -msgstr "" - -#: apt-pkg/deb/dpkgpm.cc:366 -#, fuzzy, c-format -msgid "Installed %s" -msgstr " Sazkirî: " - -#: apt-pkg/deb/dpkgpm.cc:371 -#, c-format -msgid "Preparing for removal of %s" -msgstr "" - -#: apt-pkg/deb/dpkgpm.cc:372 -#, c-format -msgid "Removing %s" -msgstr "" - -#: apt-pkg/deb/dpkgpm.cc:373 -#, c-format -msgid "Removed %s" -msgstr "" - -#: apt-pkg/deb/dpkgpm.cc:378 -#, c-format -msgid "Preparing to completely remove %s" -msgstr "" - -#: apt-pkg/deb/dpkgpm.cc:379 -#, c-format -msgid "Completely removed %s" -msgstr "" - -#: methods/rsh.cc:330 -msgid "Connection closed prematurely" -msgstr "" - diff --git a/po/makefile b/po/makefile index 45e5b1e5a..07dc51c07 100644 --- a/po/makefile +++ b/po/makefile @@ -40,6 +40,9 @@ $(POTFILES) : $(PO)/%.pot : --files-from=$(PO)/POTFILES_$*.in -o $(PO)/domains/$*/c.pot rm -f $(PO)/POTFILES_$*.in $(MSGCOMM) --more-than=0 $(PO)/domains/$*/c.pot $(PO)/domains/$*/sh.pot --output=$@ + # copy into the domain dirs to make rosetta happy + rm -f $(PO)/domains/$*/*.pot + cp $@ $(PO)/domains/$* $(PACKAGE)-all.pot: $(POTFILES) $(MSGCOMM) --more-than=0 $(POTFILES) --output=$@ diff --git a/po/mr.po b/po/mr.po new file mode 100644 index 000000000..e3aaf80ff --- /dev/null +++ b/po/mr.po @@ -0,0 +1,2799 @@ +# SOME DESCRIPTIVE TITLE. +# This file is put in the public domain. +# FIRST AUTHOR <EMAIL@ADDRESS>, YEAR. +# +msgid "" +msgstr "" +"Project-Id-Version: apt\n" +"Report-Msgid-Bugs-To: \n" +"POT-Creation-Date: 2006-12-19 11:37+0100\n" +"PO-Revision-Date: 2006-08-09 16:17+0200\n" +"Last-Translator: Priti Patil <prithisd@gmail.com>\n" +"Language-Team: Marathi, janabhaaratii, C-DAC, Mumbai, India " +"<janabhaaratii@cdacmumbai.in>\n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" + +#: cmdline/apt-cache.cc:135 +#, c-format +msgid "Package %s version %s has an unmet dep:\n" +msgstr "पॅकेज %s आवृती %s मध्ये एक अनोळखी डीईपी:आहे\n" + +#: 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 +#, c-format +msgid "Unable to locate package %s" +msgstr "पॅकेज %s शोधण्यास असमर्थ आहे" + +#: cmdline/apt-cache.cc:232 +msgid "Total package names : " +msgstr "पॅकेजची सर्व नांवे: " + +#: cmdline/apt-cache.cc:272 +msgid " Normal packages: " +msgstr " सामान्य पॅकेजेस्: " + +#: cmdline/apt-cache.cc:273 +msgid " Pure virtual packages: " +msgstr " शुध्द आभासी पॅकेजेस्:" + +#: cmdline/apt-cache.cc:274 +msgid " Single virtual packages: " +msgstr " एकमेव आभासी पॅकेजेस्:" + +#: cmdline/apt-cache.cc:275 +msgid " Mixed virtual packages: " +msgstr "मिश्रित आभासी पॅकेजेस्:" + +#: cmdline/apt-cache.cc:276 +msgid " Missing: " +msgstr " हरवलेले/गहाळ: " + +#: cmdline/apt-cache.cc:278 +msgid "Total distinct versions: " +msgstr "एकूण स्पष्ट आवृत्या: " + +#: cmdline/apt-cache.cc:280 +msgid "Total dependencies: " +msgstr "एकूण निर्भरता:" + +#: cmdline/apt-cache.cc:283 +msgid "Total ver/file relations: " +msgstr "एकूण व्हीईआर/संचिका परस्पर संबंध:" + +#: cmdline/apt-cache.cc:285 +msgid "Total Provides mappings: " +msgstr "एकूण मॅपींगस् तरतूद: " + +#: cmdline/apt-cache.cc:297 +msgid "Total globbed strings: " +msgstr "एकूण एकत्रित अक्षरसंच:" + +#: cmdline/apt-cache.cc:311 +msgid "Total dependency version space: " +msgstr "एकूण परावलंबित आवृत्ती अवकाश:" + +#: cmdline/apt-cache.cc:316 +msgid "Total slack space: " +msgstr "एकूण दुर्लक्षित अवकाश:" + +#: cmdline/apt-cache.cc:324 +msgid "Total space accounted for: " +msgstr "हिशेबात घेतलेली एकूण अवकाश(जागा):" + +#: cmdline/apt-cache.cc:446 cmdline/apt-cache.cc:1189 +#, c-format +msgid "Package file %s is out of sync." +msgstr "पॅकेज संचिका %s सिंक्रोनाइज नाहीत" + +#: cmdline/apt-cache.cc:1231 +msgid "You must give exactly one pattern" +msgstr "तुम्हाला फक्त एकच नमुना द्यावा लागेल" + +#: cmdline/apt-cache.cc:1385 +msgid "No packages found" +msgstr "पॅकेजेस सापडले नाहीत" + +#: cmdline/apt-cache.cc:1462 +msgid "Package files:" +msgstr "पॅकेज संचिका:" + +#: cmdline/apt-cache.cc:1469 cmdline/apt-cache.cc:1555 +msgid "Cache is out of sync, can't x-ref a package file" +msgstr "दृतिका सिंक नाही,पॅकेज संचिका क्ष-संदर्भ करता येत नाही" + +#: cmdline/apt-cache.cc:1470 +#, c-format +msgid "%4i %s\n" +msgstr "%4i %s\n" + +#. Show any packages have explicit pins +#: cmdline/apt-cache.cc:1482 +msgid "Pinned packages:" +msgstr "एकत्रित पॅकेजेस:" + +#: cmdline/apt-cache.cc:1494 cmdline/apt-cache.cc:1535 +msgid "(not found)" +msgstr "(मिळाले नाही)" + +#. Installed version +#: cmdline/apt-cache.cc:1515 +msgid " Installed: " +msgstr "अधिष्ठापित केले:" + +#: cmdline/apt-cache.cc:1517 cmdline/apt-cache.cc:1525 +msgid "(none)" +msgstr "(कोणताच नाही)" + +#. Candidate Version +#: cmdline/apt-cache.cc:1522 +msgid " Candidate: " +msgstr "उमेदवार:" + +#: cmdline/apt-cache.cc:1532 +msgid " Package pin: " +msgstr "पॅकेज (पिन):" + +#. Show the priority tables +#: cmdline/apt-cache.cc:1541 +msgid " Version table:" +msgstr "आवृत्ती कोष्टक:" + +#: cmdline/apt-cache.cc:1556 +#, fuzzy, c-format +#| msgid "%4i %s\n" +msgid " %4i %s\n" +msgstr "%4i %s\n" + +#: cmdline/apt-cache.cc:1652 cmdline/apt-cdrom.cc:138 cmdline/apt-config.cc:70 +#: cmdline/apt-extracttemplates.cc:225 ftparchive/apt-ftparchive.cc:550 +#: cmdline/apt-get.cc:2387 cmdline/apt-sortpkgs.cc:144 +#, fuzzy, c-format +msgid "%s %s for %s %s compiled on %s %s\n" +msgstr "%s %s करिता %s %s वर संग्रहित\n" + +#: cmdline/apt-cache.cc:1659 +msgid "" +"Usage: apt-cache [options] command\n" +" apt-cache [options] add file1 [file2 ...]\n" +" apt-cache [options] showpkg pkg1 [pkg2 ...]\n" +" apt-cache [options] showsrc pkg1 [pkg2 ...]\n" +"\n" +"apt-cache is a low-level tool used to manipulate APT's binary\n" +"cache files, and query information from them\n" +"\n" +"Commands:\n" +" add - Add a package file to the source cache\n" +" gencaches - Build both the package and source cache\n" +" showpkg - Show some general information for a single package\n" +" showsrc - Show source records\n" +" stats - Show some basic statistics\n" +" dump - Show the entire file in a terse form\n" +" dumpavail - Print an available file to stdout\n" +" unmet - Show unmet dependencies\n" +" search - Search the package list for a regex pattern\n" +" show - Show a readable record for the package\n" +" depends - Show raw dependency information for a package\n" +" rdepends - Show reverse dependency information for a package\n" +" pkgnames - List the names of all packages\n" +" dotty - Generate package graphs for GraphVis\n" +" xvcg - Generate package graphs for xvcg\n" +" policy - Show policy settings\n" +"\n" +"Options:\n" +" -h This help text.\n" +" -p=? The package cache.\n" +" -s=? The source cache.\n" +" -q Disable progress indicator.\n" +" -i Show only important deps for the unmet command.\n" +" -c=? Read this configuration file\n" +" -o=? Set an arbitrary configuration option, eg -o dir::cache=/tmp\n" +"See the apt-cache(8) and apt.conf(5) manual pages for more information.\n" +msgstr "" +"उपयोग:अॅप्ट-कॅश(पर्याय) आज्ञा\n" +" अॅप्ट-कॅश(पर्याय) मिळवा संचिका १[संचिका २.... ]\n" +" अॅप्ट-कॅश (पर्याय )दाखवा pkg1 [pkg2 ...]\n" +"अॅप्ट कॅश (पर्याय) दाखवाsrc pkg1 [pkg2 ...]\n" +"\n" +"च्याAPT चे द्वयंक कॅश संचिता कौशल्याने हाताळण्यासाठी अॅप्ट -कॅश हे निम्नस्तरीय साधन आहे।\n" +"कॅश संचिका व त्यातील माहितीसाठी पृच्छा करा\n" +"\n" +"आज्ञावली\n" +" मिळवा-उगमस्थान कॅशमध्ये एक पॅकेज संचिका मिळवा \n" +"जेन कॅशेस-पॅकेज व उगमस्थान कॅश या दोघांची बांधणी करा\n" +"शो पॅकेज-एकमेव पॅकेजसाठी काही सामान्य माहिती दाखवा\n" +"शोएसआरसी-उगमस्थानाचा माहितीसंच दाखवा\n" +" स्टॅट्स-काही पायाभूत आकडेवारी दाखवा\n" +"डंप -संपूर्ण संचिका थोडक्यात दाखवा\n" +"डंप अॅव्हेल-स्टंॅड आऊटसाठी उपलब्ध संचिका छापा\n" +"अनमेट- न आठवलेली परावलंबने दाखवा\n" +"शोधा-regex नमुन्यासाठी पॅकेजची यादी शोधा\n" +"दाखवा -पॅकेजसाठी वाचनीय माहितीसंच दाखवा\n" +"अवलंबित -पॅकेजसाठी संस्करणपूर्व परावलंबन माहिती दाखवा\n" +"अतिअवलंबित -पॅकेजसाठी अतिपरावलंबन माहिती दाखवा\n" +" पॅकेज नावे- सर्व पॅकेजेससाठी यादी तयार करा\n" +"डॉटी-ग्राफ व्हिससाठी पॅकेज आलेलं निर्माण करा\n" +"xvcg-xvcg साठी पॅकेज आलेलं निर्माण करा\n" +"धोरण -धोरण निर्धारणे दाखवा\n" +"\n" +"पर्याय : \n" +"-h -हा साह्याकारी मजकूर\n" +"-p=? पॅकेज कॅश \n" +"-s=? उगमस्थान कॅश \n" +"-q-प्रगतीनिदर्शक अकार्यान्वित करा \n" +"-i -न आढळलेल्या आज्ञेसाठी महत्त्वाचे विभाग दाखवा\n" +"-c=? ही संरचना संचिका वाचा\n" +"-o=? एखादा अहेतूक संरचना पर्याय निर्धारित करा उदा --o dir::cache=/tmp\n" +"अधिक माहितीसाठी मार्गदर्शन पुस्तिकेचा अॅप्ट-कॅश(८) व अॅप्ट -कॉन्फ(५) ही पृष्ठे पहा \n" + +#: cmdline/apt-cdrom.cc:78 +msgid "Please provide a name for this Disc, such as 'Debian 2.1r1 Disk 1'" +msgstr "या तबकडीला कृपया नाव द्या जसे डेबियन २ एलआरएल तबकडी १" + +#: cmdline/apt-cdrom.cc:93 +msgid "Please insert a Disc in the drive and press enter" +msgstr "कृपया तबकडी ड्राईव्हमध्ये ठेवून एंटर दाबा" + +#: cmdline/apt-cdrom.cc:117 +msgid "Repeat this process for the rest of the CDs in your set." +msgstr "तुमच्या संचामधील सर्व सीडीजसाठी याच कृतीची पुनरावृत्ती करा(हीच कृती करा)" + +#: cmdline/apt-config.cc:41 +msgid "Arguments not in pairs" +msgstr "चलितमूल्य जोडीने नाहीत" + +#: cmdline/apt-config.cc:76 +msgid "" +"Usage: apt-config [options] command\n" +"\n" +"apt-config is a simple tool to read the APT config file\n" +"\n" +"Commands:\n" +" shell - Shell mode\n" +" dump - Show the configuration\n" +"\n" +"Options:\n" +" -h This help text.\n" +" -c=? Read this configuration file\n" +" -o=? Set an arbitrary configuration option, eg -o dir::cache=/tmp\n" +msgstr "" +"उपयोग : अॅप्ट-कॉन्फिग(पर्याय) आज्ञा \n" +"\n" +"अॅप्ट कन्फिग संचिता वाचण्यासाठी अॅप्ट-कन्फिग हे एक साधन आहे\n" +"\n" +"आज्ञावली : \n" +"शेल - शेल मोड \n" +"डंप - संरचना दाखवा \n" +"\n" +"पर्याय : \n" +" -h हा साह्याकारी मजकूर \n" +" -c= ? ही संरचना संचिका वाचा \n" +" -o=? एखदा अहेतुक संरचना पर्याय निर्धारित करा, उदा।eg -o dir::cache=/tmp\n" + +#: cmdline/apt-extracttemplates.cc:98 +#, c-format +msgid "%s not a valid DEB package." +msgstr "%s हे वैध डीईबी पॅकेज नाही " + +#: cmdline/apt-extracttemplates.cc:232 +msgid "" +"Usage: apt-extracttemplates file1 [file2 ...]\n" +"\n" +"apt-extracttemplates is a tool to extract config and template info\n" +"from debian packages\n" +"\n" +"Options:\n" +" -h This help text\n" +" -t Set the temp dir\n" +" -c=? Read this configuration file\n" +" -o=? Set an arbitrary configuration option, eg -o dir::cache=/tmp\n" +msgstr "" +"उपयोग : अॅप्ट - एक्स्ट्रॅक्ट टेंप्लेट्स संचिका १[संचिका २..... ]\n" +" \n" +"अॅप्ट- एक्स्टॅक्ट टेंम्प्लेट्स हे संरचना व नमुन्याची माहिती काढण्याचे साधन आहे \n" +"डेबियन पॅकेजेस मधून \n" +"\n" +"पर्याय : \n" +" -h हा साह्याकारी मजकूर \n" +" -t टेंप डिर निर्धारित करा \n" +" -c=? ही संरचना संचिका वाचा \n" +" -o=? एखादा अहेतुक संरचना पर्याय निर्धारित करा जसे- -o dir::cache=/tmp\n" + +#: cmdline/apt-extracttemplates.cc:267 apt-pkg/pkgcachegen.cc:710 +#, c-format +msgid "Unable to write to %s" +msgstr "%s मध्ये लिहिण्यास असमर्थ " + +#: cmdline/apt-extracttemplates.cc:310 +msgid "Cannot get debconf version. Is debconf installed?" +msgstr "debconf आवृत्ती मिळू शकत नाही,debconf अधिष्ठापित झाली काय?" + +#: ftparchive/apt-ftparchive.cc:167 ftparchive/apt-ftparchive.cc:341 +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 +#, c-format +msgid "Error processing directory %s" +msgstr "त्रुटी प्रक्रिया मार्गदर्शिका%s " + +#: ftparchive/apt-ftparchive.cc:254 +msgid "Source extension list is too long" +msgstr "उगमस्थानाची विस्तारित यादी खूप मोठी आहे" + +#: ftparchive/apt-ftparchive.cc:371 +msgid "Error writing header to contents file" +msgstr "शीर्षक संचिकेमधून मजकूर संचिकेत लिहिण्यात त्रुटी" + +#: ftparchive/apt-ftparchive.cc:401 +#, c-format +msgid "Error processing contents %s" +msgstr "त्रुटी प्रक्रिया मजकूर %s" + +#: ftparchive/apt-ftparchive.cc:556 +#, fuzzy +#| msgid "" +#| "Usage: apt-ftparchive [options] command\n" +#| "Commands: packages binarypath [overridefile [pathprefix]]\n" +#| " sources srcpath [overridefile [pathprefix]]\n" +#| " contents path\n" +#| " release path\n" +#| " generate config [groups]\n" +#| " clean config\n" +#| "\n" +#| "apt-ftparchive generates index files for Debian archives. It supports\n" +#| "many styles of generation from fully automated to functional " +#| "replacements\n" +#| "for dpkg-scanpackages and dpkg-scansources\n" +#| "\n" +#| "apt-ftparchive generates Package files from a tree of .debs. The\n" +#| "Package file contains the contents of all the control fields from\n" +#| "each package as well as the MD5 hash and filesize. An override file\n" +#| "is supported to force the value of Priority and Section.\n" +#| "\n" +#| "Similarly apt-ftparchive generates Sources files from a tree of .dscs.\n" +#| "The --source-override option can be used to specify a src override file\n" +#| "\n" +#| "The 'packages' and 'sources' command should be run in the root of the\n" +#| "tree. BinaryPath should point to the base of the recursive search and \n" +#| "override file should contain the override flags. Pathprefix is\n" +#| "appended to the filename fields if present. Example usage from the \n" +#| "Debian archive:\n" +#| " apt-ftparchive packages dists/potato/main/binary-i386/ > \\\n" +#| " dists/potato/main/binary-i386/Packages\n" +#| "\n" +#| "Options:\n" +#| " -h This help text\n" +#| " --md5 Control MD5 generation\n" +#| " -s=? Source override file\n" +#| " -q Quiet\n" +#| " -d=? Select the optional caching database\n" +#| " --no-delink Enable delinking debug mode\n" +#| " --contents Control contents file generation -c=? Read this " +#| "configuration file\n" +#| " -o=? Set an arbitrary configuration option" +msgid "" +"Usage: apt-ftparchive [options] command\n" +"Commands: packages binarypath [overridefile [pathprefix]]\n" +" sources srcpath [overridefile [pathprefix]]\n" +" contents path\n" +" release path\n" +" generate config [groups]\n" +" clean config\n" +"\n" +"apt-ftparchive generates index files for Debian archives. It supports\n" +"many styles of generation from fully automated to functional replacements\n" +"for dpkg-scanpackages and dpkg-scansources\n" +"\n" +"apt-ftparchive generates Package files from a tree of .debs. The\n" +"Package file contains the contents of all the control fields from\n" +"each package as well as the MD5 hash and filesize. An override file\n" +"is supported to force the value of Priority and Section.\n" +"\n" +"Similarly apt-ftparchive generates Sources files from a tree of .dscs.\n" +"The --source-override option can be used to specify a src override file\n" +"\n" +"The 'packages' and 'sources' command should be run in the root of the\n" +"tree. BinaryPath should point to the base of the recursive search and \n" +"override file should contain the override flags. Pathprefix is\n" +"appended to the filename fields if present. Example usage from the \n" +"Debian archive:\n" +" apt-ftparchive packages dists/potato/main/binary-i386/ > \\\n" +" dists/potato/main/binary-i386/Packages\n" +"\n" +"Options:\n" +" -h This help text\n" +" --md5 Control MD5 generation\n" +" -s=? Source override file\n" +" -q Quiet\n" +" -d=? Select the optional caching database\n" +" --no-delink Enable delinking debug mode\n" +" --contents Control contents file generation\n" +" -c=? Read this configuration file\n" +" -o=? Set an arbitrary configuration option" +msgstr "" +"उपयोग : अॅप्ट -एफटीपीआरकाईव्ह (पर्याय) आज्ञावली \n" +" आज्ञावली : पॅकेजेस द्वयंकमार्ग [ओव्हरराईड फाईल] [मार्ग उपसर्ग]\n" +"उगमस्थान srcpath [ओव्हरराईड फाईल][मार्ग उपसर्ग]\n" +"मजकूर मार्ग \n" +"मोचन मार्ग \n" +"संरचना(गट) निर्माण करा\n" +" स्वच्छ संरचना \n" +"\n" +"अॅप्ट- एफटीपी फाईल संच डेबियन फाईलसंचासाठी अनुक्रम संचिका निर्माण करतो.तो\n" +" dpkg स्कॅन पॅकेजेस व dpkg स्कॅनपॅकेजेस करतो.संपूर्ण स्वंयंचलित ते कार्याकारी बदल\n" +" करण्यासाठी अनेक शैलींची निर्मिती करण्यास पुष्टि देतो\n" +"\n" +"अॅप्ट-एफटीपी फाईलसंच डेब्जच्या तरुरचनेपासून पॅकेज संचिका निर्माण करतो \n" +"पॅकेज संचिकेमध्ये प्रत्येक पॅकेज तसेच एमडी५ हॅश व संचिकाआकारामधील सर्व \n" +" नियंत्रक क्षेत्रांची माहिती असते.अग्रक्रम आणि विभाग यांच्या मूल्यांचा प्रभाव \n" +"वाढविण्यासाठी ओव्हरराईड संचिकेला पुष्टि दिलेली असते \n" +"\n" +"तसेच अॅप्ट-एफटीपी फाईलसंच dscs च्या तरूरचनेपासून उगमस्थान संचिका निर्माण करतो \n" +" उगमस्थान - ओव्हरराईड पर्यायाचा उपयोग एखाद्या src ओव्हरराईड संचिका नेमकेपणाने " +"दाखविण्यास होतो \n" +"\n" +"'पॅकेजेस' आणि 'उगमस्थान' आज्ञावली तरूरचनेच्या मुळाशी दिल्या जाव्यात \n" +"द्वयंक मार्गाचा निर्देश पुनरावर्ती शोधाच्या पाऱ्याकडे केलेला असावा आणि \n" +" ओव्हरराईड संचिकेमध्ये ओव्हरराईड संकेत (फ्लॅग्ज) असावेत आणि \n" +" संचिकानामक्षेत्रे असल्यास मार्ग उपसर्ग त्यांना जोडलेले असावेत.\n" +"डेबियन फाईलसंचामधील नमुन्यादाखल उपयोग : \n" +"अॅप्ट-एफटीपी फाईलसंच पॅकेजेस डिस्ट्स/पोटॅटो/मेन/द्वयंक-३८६/>\\\n" +"डिस्ट्स/पोटॅटो/मेन/द्वयंक- ३८६/पॅकेजेस \n" +"\n" +"पर्याय : \n" +" -h हा साह्याकारी मजकूर \n" +"--md5 MD5 ची निर्मिती नियंत्रित करा \n" +" -s= उगमस्थान ओव्हरराईड संचिका \n" +" -q शांत \n" +" -d= पर्यायी दृतिकादायी डेटाबेस निवडा \n" +"--no-delink दुवा तोडणारा डिबग मार्ग समर्थ करा \n" +" ---contents माहिती संचिकेची निर्मिती नियंत्रित करा \n" +" -c= ही संरचना संचिका वाचा \n" +" -o= एखादा अहेतुक संरचना पर्याय निर्धारित करा" + +#: ftparchive/apt-ftparchive.cc:762 +msgid "No selections matched" +msgstr "निवडक भाग जुळत नाही" + +#: ftparchive/apt-ftparchive.cc:835 +#, fuzzy, c-format +#| msgid "Some files are missing in the package file group '%s'" +msgid "Some files are missing in the package file group `%s'" +msgstr "%s पॅकेज संचिका समुहातील काही संचिका सापडत नाही" + +#: ftparchive/cachedb.cc:47 +#, fuzzy, c-format +#| msgid "DB was corrupted, file renamed to %s.old" +msgid "DB was corrupted, file renamed to %s.old" +msgstr "DB खराब झाली होती,संचिका %s जुने म्हणून पुनर्नामांकित केली" + +#: ftparchive/cachedb.cc:65 +#, c-format +msgid "DB is old, attempting to upgrade %s" +msgstr "DB जुने आहे,%s पुढच्या आवृतीसाठी प्रयत्न करत आहे" + +#: ftparchive/cachedb.cc:76 +msgid "" +"DB format is invalid. If you upgraded from a older version of apt, please " +"remove and re-create the database." +msgstr "" +"DB स्वरुप वैध नाही. जर तुम्ही apt च्या जुन्या आवृत्तीपासून पुढिल आवृत्तीकृत करत असाल तर, " +"कृपया माहितीसंच काढून टाका आणि पुनर्निर्मित करा" + +#: ftparchive/cachedb.cc:81 +#, c-format +msgid "Unable to open DB file %s: %s" +msgstr "%s: %s DB संचिका उघडण्यास असमर्थ" + +#: ftparchive/cachedb.cc:127 apt-inst/extract.cc:181 apt-inst/extract.cc:193 +#: apt-inst/extract.cc:210 apt-inst/deb/dpkgdb.cc:121 methods/gpgv.cc:272 +#, c-format +msgid "Failed to stat %s" +msgstr "%s स्टेट करण्यास असमर्थ" + +#: ftparchive/cachedb.cc:242 +msgid "Archive has no control record" +msgstr "अर्काईव्ह मध्ये नियंत्रण माहिती संच नाही" + +#: ftparchive/cachedb.cc:448 +msgid "Unable to get a cursor" +msgstr "संकेतक घेण्यास असमर्थ" + +#: ftparchive/writer.cc:79 +#, c-format +msgid "W: Unable to read directory %s\n" +msgstr "धोक्याची सूचना:%s संचयिका वाचण्यास असमर्थ \n" + +#: ftparchive/writer.cc:84 +#, c-format +msgid "W: Unable to stat %s\n" +msgstr "धो.सू.:%s स्टेट करण्यास असमर्थ\n" + +#: ftparchive/writer.cc:135 +msgid "E: " +msgstr "E:" + +#: ftparchive/writer.cc:137 +msgid "W: " +msgstr "धो.सू.:" + +#: ftparchive/writer.cc:144 +msgid "E: Errors apply to file " +msgstr "ई: संचिकेला लागू होणाऱ्या चुका" + +#: ftparchive/writer.cc:161 ftparchive/writer.cc:191 +#, c-format +msgid "Failed to resolve %s" +msgstr "%s सोडवण्यास असमर्थ" + +#: ftparchive/writer.cc:173 +msgid "Tree walking failed" +msgstr "ट्री चालणे असमर्थ" + +#: ftparchive/writer.cc:198 +#, c-format +msgid "Failed to open %s" +msgstr "%s उघडण्यास असमर्थ" + +#: ftparchive/writer.cc:257 +#, c-format +msgid " DeLink %s [%s]\n" +msgstr "%s [%s] डी दुवा\n" + +#: ftparchive/writer.cc:265 +#, c-format +msgid "Failed to readlink %s" +msgstr "%s वाचणारा दुवा असमर्थ" + +#: ftparchive/writer.cc:269 +#, c-format +msgid "Failed to unlink %s" +msgstr "%s दुवा काढण्यास असमर्थ" + +#: ftparchive/writer.cc:276 +#, c-format +msgid "*** Failed to link %s to %s" +msgstr "%s चा %s दुवा साधण्यास असमर्थ" + +#: ftparchive/writer.cc:286 +#, c-format +msgid " DeLink limit of %sB hit.\n" +msgstr "%sB हीट ची डिलींक मर्यादा\n" + +#: ftparchive/writer.cc:390 +msgid "Archive had no package field" +msgstr "अर्काईव्ह ला पॅकेज जागा नाही" + +#: ftparchive/writer.cc:398 ftparchive/writer.cc:613 +#, c-format +msgid " %s has no override entry\n" +msgstr "%s ला ओव्हरराईड/दुर्लक्षित जागा नाही\n" + +#: ftparchive/writer.cc:443 ftparchive/writer.cc:701 +#, c-format +msgid " %s maintainer is %s not %s\n" +msgstr "%s देखभालकर्ता हा %s आणि %s नाही \n" + +#: ftparchive/writer.cc:623 +#, c-format +msgid " %s has no source override entry\n" +msgstr "%s ला उगम ओव्हरराईड/दुर्लक्षित जागा नाही\n" + +#: ftparchive/writer.cc:627 +#, c-format +msgid " %s has no binary override entry either\n" +msgstr "%s ला द्वयंक ओव्हरराईड जागा नाही\n" + +#: ftparchive/contents.cc:317 +#, c-format +msgid "Internal error, could not locate member %s" +msgstr "अंतर्गत त्रुटी,%s मेंबर शोधू शकत नाही" + +#: ftparchive/contents.cc:353 ftparchive/contents.cc:384 +msgid "realloc - Failed to allocate memory" +msgstr "realloc-स्मरणस्थळ शोधण्यास असमर्थ" + +#: ftparchive/override.cc:38 ftparchive/override.cc:146 +#, c-format +msgid "Unable to open %s" +msgstr "%s उघडण्यास असमर्थ" + +#: ftparchive/override.cc:64 ftparchive/override.cc:170 +#, c-format +msgid "Malformed override %s line %lu #1" +msgstr "व्यंगीत/हिडीस दुर्लक्षित केले %s रेषा %lu #1" + +#: ftparchive/override.cc:78 ftparchive/override.cc:182 +#, c-format +msgid "Malformed override %s line %lu #2" +msgstr "व्यंगीत/हिडीस दुर्लक्षित केले %s रेषा %lu #2" + +#: ftparchive/override.cc:92 ftparchive/override.cc:195 +#, c-format +msgid "Malformed override %s line %lu #3" +msgstr "व्यंगीत/हिडीस दुर्लक्षित केले %s रेषा %lu #3" + +#: ftparchive/override.cc:131 ftparchive/override.cc:205 +#, c-format +msgid "Failed to read the override file %s" +msgstr "%s दुर्लक्षित संचिका वाचण्यास असमर्थ" + +#: ftparchive/multicompress.cc:75 +#, c-format +msgid "Unknown compression algorithm '%s'" +msgstr "माहित नसलेली/ले संक्षेप पद्धती/अलगोरिथम '%s'" + +#: ftparchive/multicompress.cc:105 +#, c-format +msgid "Compressed output %s needs a compression set" +msgstr "%s संकलित आऊटपुट/निर्गत साठी संक्षेप संचाची गरज" + +#: ftparchive/multicompress.cc:172 methods/rsh.cc:91 +msgid "Failed to create IPC pipe to subprocess" +msgstr "उपक्रियेचा आयपीसी वाहिनी तयार करण्यास असमर्थ" + +#: ftparchive/multicompress.cc:198 +msgid "Failed to create FILE*" +msgstr "संचिका * तयार करण्यास असमर्थ" + +#: ftparchive/multicompress.cc:201 +msgid "Failed to fork" +msgstr "नविन प्रक्रिया(प्रोसेस) निर्माण करण्यास असमर्थ" + +#: ftparchive/multicompress.cc:215 +msgid "Compress child" +msgstr "चॉईल्ड(प्रोसेस)ला संकलित करा" + +#: ftparchive/multicompress.cc:238 +#, c-format +msgid "Internal error, failed to create %s" +msgstr "अंतर्गत त्रुटी, %s तयार करण्यास असमर्थ" + +#: ftparchive/multicompress.cc:289 +msgid "Failed to create subprocess IPC" +msgstr "आयपीसी उपक्रिया तयार करण्यास असमर्थ" + +#: ftparchive/multicompress.cc:324 +msgid "Failed to exec compressor " +msgstr "दाबक(संकलितकर्ता) कर्यान्वित करण्यास असमर्थ" + +#: ftparchive/multicompress.cc:363 +msgid "decompressor" +msgstr "असंकलितकर्ता " + +#: ftparchive/multicompress.cc:406 +msgid "IO to subprocess/file failed" +msgstr "IO ची उपक्रिया/संचिका असमर्थ " + +#: ftparchive/multicompress.cc:458 +msgid "Failed to read while computing MD5" +msgstr "MD5 कामप्युटींग करतांना वाचण्यासाठी असमर्थ" + +#: ftparchive/multicompress.cc:475 +#, c-format +msgid "Problem unlinking %s" +msgstr "%s दुवा मोकळा/सुटा करण्यास अडचण" + +#: ftparchive/multicompress.cc:490 apt-inst/extract.cc:188 +#, c-format +msgid "Failed to rename %s to %s" +msgstr "%s ला पुनर्नामांकन %s करण्यास असमर्थ " + +#: cmdline/apt-get.cc:120 +msgid "Y" +msgstr "होय" + +#: cmdline/apt-get.cc:142 cmdline/apt-get.cc:1506 +#, c-format +msgid "Regex compilation error - %s" +msgstr "रिजेक्स कंपायलेशन त्रुटी -%s " + +#: cmdline/apt-get.cc:237 +msgid "The following packages have unmet dependencies:" +msgstr "खालील पॅकेजेस मध्ये नमिळणाऱ्या निर्भरता/ डिपेन्डन्सीज आहेत:" + +#: cmdline/apt-get.cc:327 +#, c-format +msgid "but %s is installed" +msgstr "पण %s संस्थापित झाले" + +#: cmdline/apt-get.cc:329 +#, c-format +msgid "but %s is to be installed" +msgstr "पण %s संस्थापित करायचे आहे" + +#: cmdline/apt-get.cc:336 +msgid "but it is not installable" +msgstr "पण ते संस्थापित करण्याजोगे नाही" + +#: cmdline/apt-get.cc:338 +msgid "but it is a virtual package" +msgstr "पण ते आभासी पॅकेज आहे" + +#: cmdline/apt-get.cc:341 +msgid "but it is not installed" +msgstr "पण ते संस्थापित केले नाही" + +#: cmdline/apt-get.cc:341 +msgid "but it is not going to be installed" +msgstr "पण ते संस्थापित होणार नाही" + +#: cmdline/apt-get.cc:346 +msgid " or" +msgstr "किंवा" + +#: cmdline/apt-get.cc:375 +msgid "The following NEW packages will be installed:" +msgstr "खालील नविन पॅकेजेस संस्थापित होतील:" + +#: cmdline/apt-get.cc:401 +msgid "The following packages will be REMOVED:" +msgstr "खालील नविन पॅकेजेस कायमची काढून टाकली जातील:" + +#: cmdline/apt-get.cc:423 +msgid "The following packages have been kept back:" +msgstr "खालील पॅकेजेस परत ठेवली गेली:" + +#: cmdline/apt-get.cc:444 +msgid "The following packages will be upgraded:" +msgstr "खालील पॅकेजेस पुढिल आवृत्तीकृत होतील:" + +#: cmdline/apt-get.cc:465 +msgid "The following packages will be DOWNGRADED:" +msgstr "खालील पॅकेजेस पुढच्या आवृत्तीकृत होणार नाहीत:" + +#: cmdline/apt-get.cc:485 +msgid "The following held packages will be changed:" +msgstr "पुढिल ठेवलेली पॅकेजेस बदलतील:" + +#: cmdline/apt-get.cc:538 +#, c-format +msgid "%s (due to %s) " +msgstr "%s (च्या मुळे %s)" + +#: cmdline/apt-get.cc:546 +msgid "" +"WARNING: The following essential packages will be removed.\n" +"This should NOT be done unless you know exactly what you are doing!" +msgstr "" +"धोक्याची सूचना:खालील जरूरीची पॅकेजेस कायमची काढून टाकली जातील।\n" +"तुम्हाला तुम्ही काय करत आहात हे कळेपर्यंत असं करता येणार नाही!" + +#: cmdline/apt-get.cc:577 +#, c-format +msgid "%lu upgraded, %lu newly installed, " +msgstr "%lu पुढे आवृत्तीकृत केले, %lu नव्याने संस्थापित केले," + +#: cmdline/apt-get.cc:581 +#, c-format +msgid "%lu reinstalled, " +msgstr "%lu पुनर्संस्थापित केले," + +#: cmdline/apt-get.cc:583 +#, c-format +msgid "%lu downgraded, " +msgstr "%lu मागील आवृत्तीकृत केले," + +#: cmdline/apt-get.cc:585 +#, c-format +msgid "%lu to remove and %lu not upgraded.\n" +msgstr "%lu कायमचे काढून टाकण्यासाठी आणि %lu पुढच्या आवृत्तीकृत झालेली नाही.\n" + +#: cmdline/apt-get.cc:589 +#, c-format +msgid "%lu not fully installed or removed.\n" +msgstr "%lu संपूर्ण संस्थापित किंवा कायमची काढून टाकलेली नाही.\n" + +#: cmdline/apt-get.cc:649 +msgid "Correcting dependencies..." +msgstr "डिपेन्डन्सीज बरोबर/दुरूस्त करत आहे..." + +#: cmdline/apt-get.cc:652 +msgid " failed." +msgstr "अयशस्वी/चूकीचे झाले." + +#: cmdline/apt-get.cc:655 +msgid "Unable to correct dependencies" +msgstr "डिपेन्डन्सीज बरोबर करण्यास असमर्थ आहे " + +#: cmdline/apt-get.cc:658 +msgid "Unable to minimize the upgrade set" +msgstr "आवृत्तीकृत संच कमीतकमी करण्यास असमर्थ" + +#: cmdline/apt-get.cc:660 +msgid " Done" +msgstr "झाले" + +#: cmdline/apt-get.cc:664 +msgid "You might want to run `apt-get -f install' to correct these." +msgstr "हे बरोबर करण्यासाठी तुम्हाला `apt-get -f संस्थापना' प्रोग्राम चालू करावा लागेल." + +#: cmdline/apt-get.cc:667 +msgid "Unmet dependencies. Try using -f." +msgstr "अनमेट डिपेंडन्सीज.-f.वापरून प्रयत्न करा " + +#: cmdline/apt-get.cc:689 +msgid "WARNING: The following packages cannot be authenticated!" +msgstr "धोक्याची सूचना:खालील पॅकेजेस् प्रमाणित करु शकत नाही! " + +#: cmdline/apt-get.cc:693 +msgid "Authentication warning overridden.\n" +msgstr "प्रमाणीकरणाची धोक्याची सूचना दुर्लक्षित करा.\n" + +#: cmdline/apt-get.cc:700 +msgid "Install these packages without verification [y/N]? " +msgstr "पडताळून पाहिल्याशिवाय ही पॅकेजेस संस्थापित करायची का [हो/नाही]?" + +#: cmdline/apt-get.cc:702 +msgid "Some packages could not be authenticated" +msgstr "काही पॅकेजेसचे प्रमाणिकरण होऊ शकत नाही" + +#: cmdline/apt-get.cc:711 cmdline/apt-get.cc:858 +msgid "There are problems and -y was used without --force-yes" +msgstr "काही अडचणी आहेत आणि --force-yes शिवाय -y वापरला गेला" + +#: cmdline/apt-get.cc:755 +msgid "Internal error, InstallPackages was called with broken packages!" +msgstr "अंतर्गत त्रुटी, तुटलेल्या पॅकेजेस बरोबर संस्थापित पॅकेजला आवाहन केले गेले/बोलावले गेले!" + +#: cmdline/apt-get.cc:764 +msgid "Packages need to be removed but remove is disabled." +msgstr "पॅकेजेस कायमची काढायची आहेत पण रिमूव्ह अकार्यक्षम केले आहे" + +#: cmdline/apt-get.cc:775 +msgid "Internal error, Ordering didn't finish" +msgstr "अंतर्गत त्रुटी,क्रम अजून संपला नाही" + +#: cmdline/apt-get.cc:791 cmdline/apt-get.cc:1818 cmdline/apt-get.cc:1851 +msgid "Unable to lock the download directory" +msgstr "डाऊनलोड डिरेक्टरी कुलूपबंद करण्यास असमर्थ" + +#: cmdline/apt-get.cc:801 cmdline/apt-get.cc:1899 cmdline/apt-get.cc:2135 +#: apt-pkg/cachefile.cc:67 +msgid "The list of sources could not be read." +msgstr "उगमांच्या याद्या वाचता येणार नाहीत." + +#: cmdline/apt-get.cc:816 +msgid "How odd.. The sizes didn't match, email apt@packages.debian.org" +msgstr "किती विचित्र...आकार जुळत नाहीत, ईमेल apt@packages.debian.org" + +#: cmdline/apt-get.cc:821 +#, c-format +msgid "Need to get %sB/%sB of archives.\n" +msgstr "अर्काईव्हजच्या %sB/%sB घेण्याची गरज आहे\n" + +#: cmdline/apt-get.cc:824 +#, c-format +msgid "Need to get %sB of archives.\n" +msgstr "अर्काईव्हज%sB घेण्याची गरज आहे.\n" + +#: cmdline/apt-get.cc:829 +#, c-format +msgid "After unpacking %sB of additional disk space will be used.\n" +msgstr "उघडल्यानंतर %sB ची अधिक डिस्क जागा वापरली जाईल.\n" + +#: cmdline/apt-get.cc:832 +#, c-format +msgid "After unpacking %sB disk space will be freed.\n" +msgstr "उघडल्यानंतर %sB डिस्क जागा मोकळी होईल.\n" + +#: cmdline/apt-get.cc:846 cmdline/apt-get.cc:1989 +#, c-format +msgid "Couldn't determine free space in %s" +msgstr "%s मध्ये रिकामी जागा सांगू शकत नाही" + +#: cmdline/apt-get.cc:849 +#, c-format +msgid "You don't have enough free space in %s." +msgstr "%s मध्ये तुमच्याकडे पुरेशी जागा नाही." + +#: cmdline/apt-get.cc:864 cmdline/apt-get.cc:884 +msgid "Trivial Only specified but this is not a trivial operation." +msgstr "क्षुल्लक फक्त निर्देशित केले आहे पण हे क्षुल्लक कृति/ऑपरेशन नाही." + +#: cmdline/apt-get.cc:866 +msgid "Yes, do as I say!" +msgstr "हो, मी म्ह्टल्याप्रमाणे करा!" + +#: cmdline/apt-get.cc:868 +#, c-format +msgid "" +"You are about to do something potentially harmful.\n" +"To continue type in the phrase '%s'\n" +" ?] " +msgstr "" +"तुम्ही संभाव्य काहीतरी नुकसानकारक करणार होतात.\n" +"पुढे '%s' उक्ती मध्ये लिहिणार \n" +" ?] " + +#: cmdline/apt-get.cc:874 cmdline/apt-get.cc:893 +msgid "Abort." +msgstr "व्यत्यय/बंद करा." + +#: cmdline/apt-get.cc:889 +msgid "Do you want to continue [Y/n]? " +msgstr "तुम्हाला पुढे जायचे आहे [Y/n]? " + +#: cmdline/apt-get.cc:961 cmdline/apt-get.cc:1365 cmdline/apt-get.cc:2032 +#, fuzzy, c-format +msgid "Failed to fetch %s %s\n" +msgstr "%s घेण्यासाठी नाकाम\n" + +#: cmdline/apt-get.cc:979 +msgid "Some files failed to download" +msgstr "काही संचिका डाऊनलोड करण्यास असमर्थ" + +#: cmdline/apt-get.cc:980 cmdline/apt-get.cc:2041 +msgid "Download complete and in download only mode" +msgstr "डाऊनलोड संपूर्ण आणि डाऊनलोड मध्ये फक्त पद्धती" + +#: cmdline/apt-get.cc:986 +msgid "" +"Unable to fetch some archives, maybe run apt-get update or try with --fix-" +"missing?" +msgstr "" +"काही आर्काइव्हज आणण्यास असमर्थ, कदाचित apt-get रन करुन अद्ययावत करा किंवा --fix- " +"बरोबर प्रयत्न कराहरवलेले/गहाळ?" + +#: cmdline/apt-get.cc:990 +msgid "--fix-missing and media swapping is not currently supported" +msgstr "" +"--fix- सापडत नाही आणि माध्यम/मिडिया अदलाबदल हे सध्या तांत्रिक मदत देऊ शकत नाही" + +#: cmdline/apt-get.cc:995 +msgid "Unable to correct missing packages." +msgstr "न सापडणारी पॅकेजेस नीट करण्यास असमर्थ." + +#: cmdline/apt-get.cc:996 +msgid "Aborting install." +msgstr "संस्थापन खंडित करत आहे." + +#: cmdline/apt-get.cc:1030 +#, c-format +msgid "Note, selecting %s instead of %s\n" +msgstr "लक्षात घ्या,%s ऐवजी %s ची निवड करत आहे \n" + +#: cmdline/apt-get.cc:1040 +#, c-format +msgid "Skipping %s, it is already installed and upgrade is not set.\n" +msgstr "%s सोडून देत आहे, ते आधिच संस्थापित केले आहे आणि पुढिल आवृत्ती निश्चित केलेली नाही.\n" + +#: cmdline/apt-get.cc:1058 +#, c-format +msgid "Package %s is not installed, so not removed\n" +msgstr "%s पॅकेज संस्थापित केलेले नाही,म्हणून काढले नाही\n" + +#: cmdline/apt-get.cc:1069 +#, c-format +msgid "Package %s is a virtual package provided by:\n" +msgstr "%s हे आभासी पॅकेज ह्यांच्याकडून तरतूद केले आहे,:\n" + +#: cmdline/apt-get.cc:1081 +msgid " [Installed]" +msgstr "[संस्थापित केले]" + +#: cmdline/apt-get.cc:1086 +msgid "You should explicitly select one to install." +msgstr "तुम्ही संस्थापित करण्यासाठी एक निश्चित स्पष्टपणे निवडले पाहिजे." + +#: cmdline/apt-get.cc:1091 +#, c-format +msgid "" +"Package %s is not available, but is referred to by another package.\n" +"This may mean that the package is missing, has been obsoleted, or\n" +"is only available from another source\n" +msgstr "" +"%s पॅकेज उपलब्ध नाही, पण दुसऱ्या पॅकेजच्या संदर्भाने.\n" +"याचा अर्थ असाही आहे की पॅकेज सापडत नाही,ते कालबाह्य किंवा \n" +" म्हणजे ते दुसऱ्या उगमातून उपलब्ध\n" + +#: cmdline/apt-get.cc:1110 +msgid "However the following packages replace it:" +msgstr "तथापि खालील पॅकेजेस मध्ये बदल झाला:" + +#: cmdline/apt-get.cc:1113 +#, c-format +msgid "Package %s has no installation candidate" +msgstr "%s पॅकेजला संस्थापित कॅन्डिडेट नाही" + +#: cmdline/apt-get.cc:1133 +#, c-format +msgid "Reinstallation of %s is not possible, it cannot be downloaded.\n" +msgstr "%s चे पुनर्संस्थापन शक्य नाही, हे डाऊनलोड करता येत नाही.\n" + +#: cmdline/apt-get.cc:1141 +#, c-format +msgid "%s is already the newest version.\n" +msgstr "%s ही आधीच नविन आवृत्ती आहे.\n" + +#: cmdline/apt-get.cc:1168 +#, c-format +msgid "Release '%s' for '%s' was not found" +msgstr "'%s' साठी '%s' आवृत्ती सापडली नाही" + +#: cmdline/apt-get.cc:1170 +#, c-format +msgid "Version '%s' for '%s' was not found" +msgstr "'%s' साठी '%s' आवृत्ती सापडली नाही" + +#: cmdline/apt-get.cc:1176 +#, c-format +msgid "Selected version %s (%s) for %s\n" +msgstr "%s साठी %s (%s) निवडलेली आवृत्ती.\n" + +#: cmdline/apt-get.cc:1313 +msgid "The update command takes no arguments" +msgstr "सुधारित आवृत्तीचा विधान आर्ग्युमेंटस घेऊ शकत नाही." + +#: cmdline/apt-get.cc:1326 +msgid "Unable to lock the list directory" +msgstr "संचयिका यादीला कुलुप लावण्यात असमर्थ" + +#: cmdline/apt-get.cc:1384 +msgid "" +"Some index files failed to download, they have been ignored, or old ones " +"used instead." +msgstr "" +"काही अनुक्रमणिका संचयिका डाऊनलोड करण्यास असमर्थ,त्या दुर्लक्षित झाल्या, किंवा " +"त्याऐवजी जुन्या वापरल्या गेल्या." + +#: cmdline/apt-get.cc:1403 +msgid "Internal error, AllUpgrade broke stuff" +msgstr "अंतर्गत त्रुटी,ऑलअपग्रेडने स्टफला तोडले" + +#: cmdline/apt-get.cc:1493 cmdline/apt-get.cc:1529 +#, c-format +msgid "Couldn't find package %s" +msgstr "%s पॅकेज सापडू शकले नाही" + +#: cmdline/apt-get.cc:1516 +#, c-format +msgid "Note, selecting %s for regex '%s'\n" +msgstr "सूचना, '%s' रिजेक्स साठी %s ची निवड करत आहे\n" + +#: cmdline/apt-get.cc:1546 +msgid "You might want to run `apt-get -f install' to correct these:" +msgstr "" +"तुम्हाला कदाचित `apt-get -f install'(एपीटी-गेट -एफ संस्थापन') प्रोग्राम चालू करावा " +"लागेल'यात बदल करण्यासाठी:" + +#: cmdline/apt-get.cc:1549 +msgid "" +"Unmet dependencies. Try 'apt-get -f install' with no packages (or specify a " +"solution)." +msgstr "" +"अनमेट डिपेंडन्सीज.एपीटी-गेट -एफ संस्थापन (`apt-get -f install') पॅकेजशिवाय प्रयत्न करा " +"(किंवा पर्याय सांगा)." + +#: cmdline/apt-get.cc:1561 +msgid "" +"Some packages could not be installed. This may mean that you have\n" +"requested an impossible situation or if you are using the unstable\n" +"distribution that some required packages have not yet been created\n" +"or been moved out of Incoming." +msgstr "" +"काही पॅकेजेस संस्थापित होत नाहीत. याचा अर्थ असा आहे की तुम्ही\n" +"अशक्य परिस्थितीची विनंती केली होती. किंवा जर तुम्ही अस्थिर\n" +"विभागणी असणारी पण हवी असणारी, तयार केली नसलेली पॅकेजेस वापरत असाल \n" +"किंवा ती येणाऱ्यांपैकी बाहेर हलविली असतील." + +#: cmdline/apt-get.cc:1569 +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 "" +"जेव्हा तुम्ही एका क्रियेची विनंती केली तेव्हा असं की\n" +"ते पॅकेज संस्थापित होऊ शकत नाही आणि त्याच्या विरूद्ध \n" +"दोष आढाव्याची नोंद ठेवली पाहिजे." + +#: cmdline/apt-get.cc:1574 +msgid "The following information may help to resolve the situation:" +msgstr "खालील माहिती परिस्थिती निवळण्यासाठी मदत ठरू शकेल:" + +#: cmdline/apt-get.cc:1577 +msgid "Broken packages" +msgstr "तुटलेली पॅकेजेस" + +#: cmdline/apt-get.cc:1603 +msgid "The following extra packages will be installed:" +msgstr "खालील अतिरिक्त पॅकेजेस संस्थापित होतील:" + +#: cmdline/apt-get.cc:1692 +msgid "Suggested packages:" +msgstr "सुचवलेली पॅकेजेस:" + +#: cmdline/apt-get.cc:1693 +msgid "Recommended packages:" +msgstr "शिफारस केलेली पॅकेजेस:" + +#: cmdline/apt-get.cc:1713 +msgid "Calculating upgrade... " +msgstr "पुढिल आवृत्तीची गणती करीत आहे..." + +#: cmdline/apt-get.cc:1716 methods/ftp.cc:702 methods/connect.cc:101 +msgid "Failed" +msgstr "असमर्थ" + +#: cmdline/apt-get.cc:1721 +msgid "Done" +msgstr "झाले" + +#: cmdline/apt-get.cc:1786 cmdline/apt-get.cc:1794 +msgid "Internal error, problem resolver broke stuff" +msgstr "अंतर्गत त्रुटी, अडचण निवारकाने स्टफला तोडले" + +#: cmdline/apt-get.cc:1894 +msgid "Must specify at least one package to fetch source for" +msgstr "उगम शोधण्यासाठी किमान एक पॅकेज देणे/सांगणे गरजेचे आहे" + +#: cmdline/apt-get.cc:1924 cmdline/apt-get.cc:2153 +#, c-format +msgid "Unable to find a source package for %s" +msgstr "%s उगम पॅकेज शोधणे शक्य नाही/शोधण्यास असमर्थ आहे" + +#: cmdline/apt-get.cc:1968 +#, c-format +msgid "Skipping already downloaded file '%s'\n" +msgstr "आधीच डाऊनलोड केलेली '%s' फाईल सोडून द्या\n" + +#: cmdline/apt-get.cc:1992 +#, c-format +msgid "You don't have enough free space in %s" +msgstr "%s मध्ये पुरेशी जागा नाही" + +#: cmdline/apt-get.cc:1997 +#, c-format +msgid "Need to get %sB/%sB of source archives.\n" +msgstr "उगम अर्काईव्हज चा %sB/%sB घेण्याची गरज आहे.\n" + +#: cmdline/apt-get.cc:2000 +#, c-format +msgid "Need to get %sB of source archives.\n" +msgstr "उगम अर्काईव्हजचा %sB घेण्याची गरज आहे.\n" + +#: cmdline/apt-get.cc:2006 +#, c-format +msgid "Fetch source %s\n" +msgstr "%s उगम घ्या\n" + +#: cmdline/apt-get.cc:2037 +msgid "Failed to fetch some archives." +msgstr "काही अर्काईव्हज आणण्यास असमर्थ." + +#: cmdline/apt-get.cc:2065 +#, c-format +msgid "Skipping unpack of already unpacked source in %s\n" +msgstr "%s मध्ये आधीच उघडलेल्या उगमातील उघडलेल्याला सोडून द्या किंवा वगळा\n" + +#: cmdline/apt-get.cc:2077 +#, c-format +msgid "Unpack command '%s' failed.\n" +msgstr "'%s' आज्ञा सुट्या करण्यास असमर्थ.\n" + +#: cmdline/apt-get.cc:2078 +#, c-format +msgid "Check if the 'dpkg-dev' package is installed.\n" +msgstr "'dpkg-dev' पॅकेज संस्थापित केले आहे का ते पडताळून पहा.\n" + +#: cmdline/apt-get.cc:2095 +#, c-format +msgid "Build command '%s' failed.\n" +msgstr "बांधणी करणाऱ्या आज्ञा '%s' अयशस्वी.\n" + +#: cmdline/apt-get.cc:2114 +msgid "Child process failed" +msgstr "चाईल्ड प्रक्रिया अयशस्वी" + +#: cmdline/apt-get.cc:2130 +msgid "Must specify at least one package to check builddeps for" +msgstr "बिल्डेपस् कशासाठी ते पडताळण्यासाठी किमान एक पॅकेज सांगणे गरजेचे आहे" + +#: cmdline/apt-get.cc:2158 +#, c-format +msgid "Unable to get build-dependency information for %s" +msgstr "%s साठी बांधणी डिपेंडन्सी माहिती मिळवण्यास असमर्थ" + +#: cmdline/apt-get.cc:2178 +#, c-format +msgid "%s has no build depends.\n" +msgstr "%s ला बांधणी डिपेंडन्स नाहीत.\n" + +#: cmdline/apt-get.cc:2230 +#, c-format +msgid "" +"%s dependency for %s cannot be satisfied because the package %s cannot be " +"found" +msgstr "%s पॅकेज न सापडल्याने %s साठी %s डिपेंडन्सी पूर्ण होऊ शकत नाही" + +#: cmdline/apt-get.cc:2282 +#, c-format +msgid "" +"%s dependency for %s cannot be satisfied because no available versions of " +"package %s can satisfy version requirements" +msgstr "" +"आवृतीची मागणी पूर्ण करण्यासाठी %s पॅकेजची आवृत्ती उपलब्ध नाही,त्यामुळे %s साठी %s " +"डिपेंडन्सी पूर्ण होऊ शकत नाही" + +#: cmdline/apt-get.cc:2317 +#, fuzzy, c-format +msgid "Failed to satisfy %s dependency for %s: Installed package %s is too new" +msgstr "%s साठी %s डिपेंडन्सी पूर्ण होण्यास असमर्थ: संस्थापित पॅकेज पण नवीन आहे" + +#: cmdline/apt-get.cc:2342 +#, c-format +msgid "Failed to satisfy %s dependency for %s: %s" +msgstr "%s साठी %s डिपेंडन्सी पूर्ण होण्यास असमर्थ: %s" + +#: cmdline/apt-get.cc:2356 +#, c-format +msgid "Build-dependencies for %s could not be satisfied." +msgstr "%s साठी बांधणी-डिपेंडन्सीज पूर्ण होऊ शकत नाही." + +#: cmdline/apt-get.cc:2360 +msgid "Failed to process build dependencies" +msgstr "बांधणी-डिपेंडन्सीज क्रिया पूर्ण करण्यास असमर्थ " + +#: cmdline/apt-get.cc:2392 +msgid "Supported modules:" +msgstr "प्रोग्राम गटाला तांत्रिक मदत दिली:" + +#: cmdline/apt-get.cc:2433 +msgid "" +"Usage: apt-get [options] command\n" +" apt-get [options] install|remove pkg1 [pkg2 ...]\n" +" apt-get [options] source pkg1 [pkg2 ...]\n" +"\n" +"apt-get is a simple command line interface for downloading and\n" +"installing packages. The most frequently used commands are update\n" +"and install.\n" +"\n" +"Commands:\n" +" update - Retrieve new lists of packages\n" +" upgrade - Perform an upgrade\n" +" install - Install new packages (pkg is libc6 not libc6.deb)\n" +" remove - Remove packages\n" +" source - Download source archives\n" +" build-dep - Configure build-dependencies for source packages\n" +" dist-upgrade - Distribution upgrade, see apt-get(8)\n" +" dselect-upgrade - Follow dselect selections\n" +" clean - Erase downloaded archive files\n" +" autoclean - Erase old downloaded archive files\n" +" check - Verify that there are no broken dependencies\n" +"\n" +"Options:\n" +" -h This help text.\n" +" -q Loggable output - no progress indicator\n" +" -qq No output except for errors\n" +" -d Download only - do NOT install or unpack archives\n" +" -s No-act. Perform ordering simulation\n" +" -y Assume Yes to all queries and do not prompt\n" +" -f Attempt to continue if the integrity check fails\n" +" -m Attempt to continue if archives are unlocatable\n" +" -u Show a list of upgraded packages as well\n" +" -b Build the source package after fetching it\n" +" -V Show verbose version numbers\n" +" -c=? Read this configuration file\n" +" -o=? Set an arbitrary configuration option, eg -o dir::cache=/tmp\n" +"See the apt-get(8), sources.list(5) and apt.conf(5) manual\n" +"pages for more information and options.\n" +" This APT has Super Cow Powers.\n" +msgstr "" +"apt-get [पर्याय] आदेश\n" +" apt-get [पर्याय] संस्थापना pkg1 [pkg2 ...] काढून टाका\n" +" apt-get[पर्याय] pkg1 [pkg2 ...] उगम\n" +"\n" +"apt-get हा डाऊनलोड करण्यासाठी सोपी आदेश रेखित संवादमंच आहे आणि\n" +"पॅकेज संस्थापित करत आहे. नेहमी वापरले जाणारे आदेश म्हणजे पुढिल आवृत्ती\n" +"'आणि संस्थापित करा\n" +"\n" +"आदेश\n" +"पॅकेजच्या नव्या याद्यांच्या सुधारित आवृत्त्या-जमा करा\n" +" पुढिल आवृत्त्या-पुढिल आवृत्त्या तयार करा\n" +"संस्थापना - नवीन पॅकेजेस संस्थापित करा(pkg हे libc6 आहे आणि libc6.deb नव्हे)\n" +"कायमचे काढा -पॅकेजेस कायमची काढा\n" +"उगमस्थान -उगमस्थान अर्काईव्हज डाऊनलोड करा\n" +"बांधणी-डिप -उगमस्थान पॅकेजेससाठी बांधणी-डिपेंडन्सी संरचित करा।\n" +"डिस्ट-पुढिल आवृत्ती-वितरण पुढिल आवृत्ती,बघा apt-get(8)\n" +"न निवड -पुढिल आवृत्ती\n" +"स्वच्छ करा-डाऊनलोड केलेल्या अर्काईव्हज फाईल्स खोडून टाका\n" +"check - डिपेन्डन्सीज तुटलेल्या नाहीत याची खात्री करा\n" +"\n" +"पर्याय\n" +" -h - हा मदत मजकूर आहे\n" +" -q - हा नोंद करण्यासारखा निर्गत आहे-प्रगती निदर्शक नाही\n" +" -qq - त्रुटींसाठी, च्याशिवाय निर्गत नाही\n" +" -d - डाऊनलोड फक्त - अर्काईव्हज संस्थापित किंवा उघडू नका\n" +" -s क्रिया नाही-\n" +" -y - सगळ्या प्रश्नांना 'हो' समजा. व प्रॉम्पट् करू नका.\n" +" -f - अखंडता परिक्षण असफल झाल्यास पुढे जाण्याचा प्रयत्न करा\n" +" -m - अर्काईव्हज सापडत नसतील तर पुढे जाण्याचा प्रयत्न करा\n" +" -u - पॅकेजच्या पुढिल आवृत्त्यांची यादी देखील दाखवा.\n" +" -b - ते मिळवल्यानंतर उगमस्थान पॅकेजची बांधणी करा\n" +" -V - व्हरबोस आवृत्ती क्रमांक दाखवा\n" +" -c=?- ही संरचित फाईल वाचा\n" +" -o=?- अनियंत्रित संरचना पर्याय निश्चित करा,eg -o dir::cache=/tmp\n" +"apt-get(8), sources.list(5),आणि apt.conf(5)\n" +"अधिक माहिती व पर्यायांसाठी पुस्तिका पाने\n" +" ह्या APT ला सुपर काऊ पॉवर्स आहेत\n" + +#: cmdline/acqprogress.cc:55 +msgid "Hit " +msgstr "दाबा" + +#: cmdline/acqprogress.cc:79 +msgid "Get:" +msgstr "मिळवा:" + +#: cmdline/acqprogress.cc:110 +msgid "Ign " +msgstr "आय.जी.एन." + +#: cmdline/acqprogress.cc:114 +msgid "Err " +msgstr "दोष इ.आर.आर." + +#: cmdline/acqprogress.cc:135 +#, c-format +msgid "Fetched %sB in %s (%sB/s)\n" +msgstr "%s (%sB/s) मध्ये %sB मिळविला\n" + +#: cmdline/acqprogress.cc:225 +#, c-format +msgid " [Working]" +msgstr "[काम करत आहे]" + +#: cmdline/acqprogress.cc:271 +#, c-format +msgid "" +"Media change: please insert the disc labeled\n" +" '%s'\n" +"in the drive '%s' and press enter\n" +msgstr "" +"माध्यम बदल: कृपया नाव घातलेली सीडी घाला\n" +"%s'\n" +"'%s' ड्राईव्ह मध्ये व एंटर कळ दाबा\n" + +#: cmdline/apt-sortpkgs.cc:86 +msgid "Unknown package record!" +msgstr "अनोळखी पॅकेज माहिती संच!" + +#: cmdline/apt-sortpkgs.cc:150 +msgid "" +"Usage: apt-sortpkgs [options] file1 [file2 ...]\n" +"\n" +"apt-sortpkgs is a simple tool to sort package files. The -s option is used\n" +"to indicate what kind of file it is.\n" +"\n" +"Options:\n" +" -h This help text\n" +" -s Use source file sorting\n" +" -c=? Read this configuration file\n" +" -o=? Set an arbitrary configuration option, eg -o dir::cache=/tmp\n" +msgstr "" +"वापर:apt-sortpkgs [पर्याय] फाईल१[फाईल २...]\n" +"\n" +" apt-sortpkgs हे पॅकेज फाईल्सचं वर्गीकरण करणारी एक साधी आज्ञावली आहे. -s पर्याय हा " +"फाईल\n" +"कुठल्या प्रकारची आहे हे दाखवण्यासाठी वापरतात.\n" +"\n" +"पर्याय\n" +" -h हा मदत मजकूर\n" +" -s उगमस्थान फाईल वापरा\n" +" -c=? ही संरचना फाईल वाचा\n" +" -o=?- अनियंत्रित संरचना पर्याय निश्चित करा,eg -o dir::cache=/tmp\n" + +#: dselect/install:32 +msgid "Bad default setting!" +msgstr "चूकीचे मूलभूत निश्चितीकरण!" + +#: dselect/install:51 dselect/install:83 dselect/install:87 dselect/install:93 +#: dselect/install:104 dselect/update:45 +msgid "Press enter to continue." +msgstr "पुढे जाण्यासाठी एंटर दाबा." + +#: dselect/install:100 +msgid "Some errors occurred while unpacking. I'm going to configure the" +msgstr "काही त्रुटी ह्या उघडत असताना घडल्या.मी संरचित करणार आहे" + +#: dselect/install:101 +msgid "packages that were installed. This may result in duplicate errors" +msgstr "पॅकेजेस जी संस्थापित झाली आहे.याचा निकाल दुप्पट त्रुटी म्हणून होऊ शकतो" + +#: dselect/install:102 +msgid "or errors caused by missing dependencies. This is OK, only the errors" +msgstr "किंवा डिपेंडन्सीज नसल्यामुळे त्रुटी झाल्या. हे ठीक आहे, फक्त त्रुटी" + +#: dselect/install:103 +msgid "" +"above this message are important. Please fix them and run [I]nstall again" +msgstr "" +"ह्यावर संदेश खूप महत्त्वाचे आहेत.कृपया त्यांना नीट करा व संस्थापित करा पुन्हा चालवा/सुरू करा" + +#: dselect/update:30 +msgid "Merging available information" +msgstr "उपलब्ध माहितीचे एकत्रीकरण करत आहे" + +#: apt-inst/contrib/extracttar.cc:117 +msgid "Failed to create pipes" +msgstr "पाईप तयार करण्यास असमर्थ" + +#: apt-inst/contrib/extracttar.cc:144 +msgid "Failed to exec gzip " +msgstr "exec gzip करण्यास असमर्थ" + +#: apt-inst/contrib/extracttar.cc:181 apt-inst/contrib/extracttar.cc:207 +msgid "Corrupted archive" +msgstr "बिघडलेली अर्काईव्हज" + +#: apt-inst/contrib/extracttar.cc:196 +msgid "Tar checksum failed, archive corrupted" +msgstr "टार(टेपअर्काईव्ह) चेकसम चुकला, बिघडलेली अर्काईव्ह" + +#: apt-inst/contrib/extracttar.cc:299 +#, c-format +msgid "Unknown TAR header type %u, member %s" +msgstr "अपरिचित TAR शीर्षक प्रकार %u, मेंबर %s" + +#: apt-inst/contrib/arfile.cc:73 +msgid "Invalid archive signature" +msgstr "अयोग्य अर्काईव्ह ओळख सही" + +#: apt-inst/contrib/arfile.cc:81 +msgid "Error reading archive member header" +msgstr "अर्काईव्ह मेंबर शीर्षक वाचण्यास त्रुटी" + +#: apt-inst/contrib/arfile.cc:93 apt-inst/contrib/arfile.cc:105 +msgid "Invalid archive member header" +msgstr "अयोग्य अर्काईव्ह मेंबर शीर्षक" + +#: apt-inst/contrib/arfile.cc:131 +msgid "Archive is too short" +msgstr "अर्काईव्ह खूप छोटे आहे" + +#: apt-inst/contrib/arfile.cc:135 +#, fuzzy +#| msgid "Failed to read the archive headers" +msgid "Failed to read the archive headers" +msgstr "अर्काईव्ह शीर्षक वाचण्यास असमर्थ आहे" + +#: apt-inst/filelist.cc:384 +msgid "DropNode called on still linked node" +msgstr "सुटा करण्यासाठी बोलावलेला/आणलेला सांधा(ड्रापनोड)अजुनही जुळलेलाच सांधा(लिंकनोड) आहे" + +#: apt-inst/filelist.cc:416 +msgid "Failed to locate the hash element!" +msgstr "हॅश एलिमेंट शोधूने काढण्यास असमर्थ!" + +#: apt-inst/filelist.cc:463 +msgid "Failed to allocate diversion" +msgstr "नेमून दिलेल्यात फेरबदल करण्यास अयशस्वी" + +#: apt-inst/filelist.cc:468 +msgid "Internal error in AddDiversion" +msgstr "AddDiversion/अॅड डायव्हर्जन मध्ये आंतरिक दोष" + +#: apt-inst/filelist.cc:481 +#, c-format +msgid "Trying to overwrite a diversion, %s -> %s and %s/%s" +msgstr "डायव्हर्जन पुनः लिहिण्यास प्रयत्न करत आहे,%s -> %s and %s/%s" + +#: apt-inst/filelist.cc:510 +#, c-format +msgid "Double add of diversion %s -> %s" +msgstr "%s -> %s डायव्हर्जन दुप्पट मिळवा" + +#: apt-inst/filelist.cc:553 +#, c-format +msgid "Duplicate conf file %s/%s" +msgstr "%s/%s संचिरित संचिकाची दुसरी प्रत/नक्कल" + +#: apt-inst/dirstream.cc:45 apt-inst/dirstream.cc:50 apt-inst/dirstream.cc:53 +#, c-format +msgid "Failed to write file %s" +msgstr "%s फाईल मध्ये लिहिण्यास असमर्थ" + +#: apt-inst/dirstream.cc:96 apt-inst/dirstream.cc:104 +#, c-format +msgid "Failed to close file %s" +msgstr "%s फाईल बंद करण्यास असमर्थ" + +#: apt-inst/extract.cc:96 apt-inst/extract.cc:167 +#, c-format +msgid "The path %s is too long" +msgstr "मार्ग %s हा खूप लांब आहे" + +#: apt-inst/extract.cc:127 +#, c-format +msgid "Unpacking %s more than once" +msgstr "%s एकापेक्षा जास्त वेळा उघडत आहे" + +#: apt-inst/extract.cc:137 +#, c-format +msgid "The directory %s is diverted" +msgstr "%s संचिका डायव्हर्ट केली आहे/वळवली आहे" + +#: apt-inst/extract.cc:147 +#, c-format +msgid "The package is trying to write to the diversion target %s/%s" +msgstr "डायव्हर्जन इच्छित %s/%s मध्ये लिहिण्याचा पॅकेज प्रयत्न करत आहे" + +#: apt-inst/extract.cc:157 apt-inst/extract.cc:300 +msgid "The diversion path is too long" +msgstr "डायव्हर्जन मार्ग हा खूप लांब आहे" + +#: apt-inst/extract.cc:243 +#, c-format +msgid "The directory %s is being replaced by a non-directory" +msgstr "%s संचिका ही संचिका नसलेल्या संचिकेबरोबर बदललेली आहे" + +#: apt-inst/extract.cc:283 +msgid "Failed to locate node in its hash bucket" +msgstr "नोडचे त्याच्या हॅश बकेटमध्ये/बादलीत स्थान निश्चित करण्यास असमर्थ" + +#: apt-inst/extract.cc:287 +msgid "The path is too long" +msgstr "मार्ग खूप लांब आहे" + +#: apt-inst/extract.cc:417 +#, c-format +msgid "Overwrite package match with no version for %s" +msgstr "%s च्या आवृत्तीशी पुनः लिहिलेल्या पॅकेज जुळत नाही" + +#: apt-inst/extract.cc:434 +#, c-format +msgid "File %s/%s overwrites the one in the package %s" +msgstr "File %s/%s, %s पॅकेज मधल्या एका वर पुनर्लिखित होते" + +#: 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 +#, c-format +msgid "Unable to read %s" +msgstr "%s वाचण्यास असमर्थ" + +#: apt-inst/extract.cc:494 +#, c-format +msgid "Unable to stat %s" +msgstr "%s स्टॅट करण्यास असमर्थ" + +#: apt-inst/deb/dpkgdb.cc:55 apt-inst/deb/dpkgdb.cc:61 +#, c-format +msgid "Failed to remove %s" +msgstr "%s कायमचे काढून टाकण्यास असमर्थ" + +#: apt-inst/deb/dpkgdb.cc:110 apt-inst/deb/dpkgdb.cc:112 +#, c-format +msgid "Unable to create %s" +msgstr "%s तयार करण्यास असमर्थ" + +#: apt-inst/deb/dpkgdb.cc:118 +#, c-format +msgid "Failed to stat %sinfo" +msgstr "% sinfo स्टॅट करण्यास असमर्थ" + +#: apt-inst/deb/dpkgdb.cc:123 +msgid "The info and temp directories need to be on the same filesystem" +msgstr "info आणि temp संचिका सारख्याच फाईलप्रणालीत असणे आवश्यक आहे" + +#. Build the status cache +#: apt-inst/deb/dpkgdb.cc:139 apt-pkg/pkgcachegen.cc:643 +#: apt-pkg/pkgcachegen.cc:712 apt-pkg/pkgcachegen.cc:717 +#: apt-pkg/pkgcachegen.cc:840 +msgid "Reading package lists" +msgstr "पॅकेज याद्या वाचत आहोत" + +#: apt-inst/deb/dpkgdb.cc:180 +#, c-format +msgid "Failed to change to the admin dir %sinfo" +msgstr "admin dir %sinfo असे बदलण्यास असमर्थ" + +#: apt-inst/deb/dpkgdb.cc:201 apt-inst/deb/dpkgdb.cc:355 +#: apt-inst/deb/dpkgdb.cc:448 +msgid "Internal error getting a package name" +msgstr "पॅकेजचे नाव मिळवत असताना आंतरिक दोष/त्रुटी मिळाली" + +#: apt-inst/deb/dpkgdb.cc:205 apt-inst/deb/dpkgdb.cc:386 +msgid "Reading file listing" +msgstr "फाईलचे लिस्टिंग वाचत आहे" + +#: apt-inst/deb/dpkgdb.cc:216 +#, c-format +msgid "" +"Failed to open the list file '%sinfo/%s'. If you cannot restore this file " +"then make it empty and immediately re-install the same version of the " +"package!" +msgstr "" +"'%sinfo/%s'. जर तुम्ही ही फाईल रिस्टोअर करू शकला नाहीत.तर ती रिकामी करा आणि लगेच " +"ह्या सारखी आवृत्ती असणारे पॅकेज पुनर्संस्थापितकरा!" + +#: apt-inst/deb/dpkgdb.cc:229 apt-inst/deb/dpkgdb.cc:242 +#, c-format +msgid "Failed reading the list file %sinfo/%s" +msgstr "%sinfo/%s फाईल यादी वाचण्यास असमर्थ" + +#: apt-inst/deb/dpkgdb.cc:266 +msgid "Internal error getting a node" +msgstr "नोड मिळवताना आंतरिक त्रुटी मिळाली" + +#: apt-inst/deb/dpkgdb.cc:309 +#, c-format +msgid "Failed to open the diversions file %sdiversions" +msgstr "%sdiversions ही डायव्हर्जन फाईल उघडण्यात असमर्थ" + +#: apt-inst/deb/dpkgdb.cc:324 +msgid "The diversion file is corrupted" +msgstr "डायव्हर्जन फाईल खराब झाली आहे" + +#: apt-inst/deb/dpkgdb.cc:331 apt-inst/deb/dpkgdb.cc:336 +#: apt-inst/deb/dpkgdb.cc:341 +#, c-format +msgid "Invalid line in the diversion file: %s" +msgstr "%s डायव्हर्जन फाईलमध्ये अवैध ओळ आहे:" + +#: apt-inst/deb/dpkgdb.cc:362 +msgid "Internal error adding a diversion" +msgstr "डायव्हर्जन मिळवताना आंतरिक त्रुटी मिळाली" + +#: apt-inst/deb/dpkgdb.cc:383 +msgid "The pkg cache must be initialized first" +msgstr "pkg अस्थाई स्मृतीकोष प्रथम इनिशिअलाईज्ड केला पाहिजे" + +#: apt-inst/deb/dpkgdb.cc:443 +#, c-format +msgid "Failed to find a Package: header, offset %lu" +msgstr "पॅकेज शोधण्यास असमर्थ: शिर्षक,आॅफसेट %lu" + +#: apt-inst/deb/dpkgdb.cc:465 +#, c-format +msgid "Bad ConfFile section in the status file. Offset %lu" +msgstr "आॅफसेट %lu, सद्यस्थिती फाईलमध्ये वाईट कॉन्फ फाईल भाग" + +#: apt-inst/deb/dpkgdb.cc:470 +#, c-format +msgid "Error parsing MD5. Offset %lu" +msgstr "ऑफसेट %lu, MD5. पार्सिंग मध्ये त्रुटी " + +#: apt-inst/deb/debfile.cc:42 apt-inst/deb/debfile.cc:47 +#, c-format +msgid "This is not a valid DEB archive, missing '%s' member" +msgstr "हा वैध DEB अर्काईव्ह नाही,'%s' मेंबर उपलब्ध नाही" + +#: apt-inst/deb/debfile.cc:52 +#, c-format +msgid "This is not a valid DEB archive, it has no '%s' or '%s' member" +msgstr "हा वैध DEB अर्काईव्ह नाही, ह्याला '%s' किंवा '%s'मेंबर नाही" + +#: apt-inst/deb/debfile.cc:112 +#, c-format +msgid "Couldn't change to %s" +msgstr "%s मध्ये बदलता येत नाही" + +#: apt-inst/deb/debfile.cc:138 +msgid "Internal error, could not locate member" +msgstr "आंतरिक त्रुटी, मेंबर शोधता येत नाही" + +#: apt-inst/deb/debfile.cc:171 +msgid "Failed to locate a valid control file" +msgstr "वैध नियंत्रण फाईल शोधण्यास असमर्थ" + +#: apt-inst/deb/debfile.cc:256 +msgid "Unparsable control file" +msgstr "अनपार्सेबल नियंत्रण फाईल" + +#: methods/cdrom.cc:115 +#, c-format +msgid "Unable to read the cdrom database %s" +msgstr "%s सीडी-रॉम माहिती संच वाचण्यास असमर्थ" + +#: methods/cdrom.cc:124 +msgid "" +"Please use apt-cdrom to make this CD-ROM recognized by APT. apt-get update " +"cannot be used to add new CD-ROMs" +msgstr "" +"कृपया सी-डी रॉम APT कडून ओळखण्यासाठी apt-cdrom चा वापर करा.apt-get update हे " +"नवीन सीडी राॅम अधिक मिळवण्यासाठी वापरता येणार नाही" + +#: methods/cdrom.cc:132 +msgid "Wrong CD-ROM" +msgstr "चूकीची सी-डी रॉम" + +#: methods/cdrom.cc:166 +#, fuzzy, c-format +#| msgid " Unable to unmount the CD-ROM in %s, it may still be in use." +msgid "Unable to unmount the CD-ROM in %s, it may still be in use." +msgstr "%s मध्ये सीडी-रॉम माऊंट करण्यास असमर्थ,अजूनही ते वापरता येऊ शकेल." + +#: methods/cdrom.cc:171 +msgid "Disk not found." +msgstr "डिस्क सापडत नाही" + +#: methods/cdrom.cc:179 methods/file.cc:79 methods/rsh.cc:264 +msgid "File not found" +msgstr "फाईल सापडली नाही" + +#: 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:147 +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 "सर्व्हर ने संबंध जोडण्यास नकार दिला व सांगितले: %s" + +#: methods/ftp.cc:210 +#, c-format +msgid "USER failed, server said: %s" +msgstr "सर्व्हरने %s सांगितले,यूजर असमर्थ:" + +#: methods/ftp.cc:217 +#, c-format +msgid "PASS failed, server said: %s" +msgstr "सर्व्हरने %s सांगितले, पास असमर्थ:" + +#: methods/ftp.cc:237 +msgid "" +"A proxy server was specified but no login script, Acquire::ftp::ProxyLogin " +"is empty." +msgstr "" +"प्रॉक्सी सर्व्हर निर्देशित केला पण लॉगीन स्क्रिप्ट नाही, प्राप्त केलेले ::ftp:: प्रॉक्सीलॉगीन " +"निरर्थक आहे." + +#: methods/ftp.cc:265 +#, c-format +msgid "Login script command '%s' failed, server said: %s" +msgstr "सर्व्हरने %s सांगितले, '%s' लॉग इन स्क्रिप्ट आज्ञावली असमर्थ:" + +#: methods/ftp.cc:291 +#, c-format +msgid "TYPE failed, server said: %s" +msgstr "सर्व्हरने %s सांगितले: टाईप असमर्थ:" + +#: 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 "माहित नसलेला पत्ता फॅमिली %u (AF_*)" + +#: methods/ftp.cc:798 +#, c-format +msgid "EPRT failed, server said: %s" +msgstr "ई.पी.आर.टी. चुकले,सर्व्हरने %s सांगितले" + +#: 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:959 methods/rsh.cc:303 +msgid "Problem hashing file" +msgstr "फाईल हॅश करण्यात त्रुटी" + +#: methods/ftp.cc:877 +#, c-format +msgid "Unable to fetch file, server said '%s'" +msgstr "सर्व्हरने %s सांगितले, फाईल मिळवण्यास असमर्थ" + +#: 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 "सर्व्हरने %s सांगितले, डेटा स्थानांतरण चुकले" + +#. Get the files information +#: methods/ftp.cc:997 +msgid "Query" +msgstr "प्रश्न" + +#: methods/ftp.cc:1109 +msgid "Unable to invoke " +msgstr "जारी करण्यास करण्यास असमर्थ" + +#: methods/connect.cc:64 +#, c-format +msgid "Connecting to %s (%s)" +msgstr "%s (%s) ला जोडत आहे" + +#: methods/connect.cc:71 +#, c-format +msgid "[IP: %s %s]" +msgstr "[आयपी:%s %s]" + +#: methods/connect.cc:80 +#, c-format +msgid "Could not create a socket for %s (f=%u t=%u p=%u)" +msgstr "%s (f=%u t=%u p=%u) साठी सॉकेट तयार करू शकत नाही" + +#: methods/connect.cc:86 +#, c-format +msgid "Cannot initiate the connection to %s:%s (%s)." +msgstr "%s:%s (%s). साठी जोडणी इनिशिएट/पुढाकारीत करू शकत नाही" + +#: methods/connect.cc:93 +#, c-format +msgid "Could not connect to %s:%s (%s), connection timed out" +msgstr "%s:%s (%s) ला जोडू शकत नाही,जोडणी वेळेअभावी तुटली" + +#: methods/connect.cc:108 +#, c-format +msgid "Could not connect to %s:%s (%s)." +msgstr "%s:%s (%s) ला जोडू शकत नाही" + +#. 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 +#, c-format +msgid "Connecting to %s" +msgstr "%s ला जोडत आहे" + +#: methods/connect.cc:167 +#, c-format +msgid "Could not resolve '%s'" +msgstr "%s रिझॉल्व्ह होऊ शकत नाही " + +#: methods/connect.cc:173 +#, c-format +msgid "Temporary failure resolving '%s'" +msgstr "'%s' रिझॉल्व्ह करताना तात्पुरती त्रुटी" + +#: methods/connect.cc:176 +#, c-format +msgid "Something wicked happened resolving '%s:%s' (%i)" +msgstr "%s:%s' (%i) रिझॉल्व्ह होत असताना काहीतरी वाईट घडले" + +#: methods/connect.cc:223 +#, c-format +msgid "Unable to connect to %s %s:" +msgstr "%s %s ला जोडण्यास असमर्थ:" + +#: methods/gpgv.cc:65 +#, c-format +msgid "Couldn't access keyring: '%s'" +msgstr "'%s': कीरिंग पर्यंत पोहोचू शकत नाही" + +#: methods/gpgv.cc:100 +msgid "E: Argument list from Acquire::gpgv::Options too long. Exiting." +msgstr "" +"दोष: ::gpgv:: कडून प्राप्त झालेला ऑर्गुमेंट सूचीचा पर्याय खूप लांबीचा. बाहेर पडत आहे." + +#: methods/gpgv.cc:204 +msgid "" +"Internal error: Good signature, but could not determine key fingerprint?!" +msgstr "अंतर्गत त्रुटी: चांगली सही, पण की ठसे सांगू शकत नाही?!" + +#: methods/gpgv.cc:209 +msgid "At least one invalid signature was encountered." +msgstr "किमान एक अवैध सही सापडली." + +#: methods/gpgv.cc:213 +#, c-format +msgid "Could not execute '%s' to verify signature (is gnupg installed?)" +msgstr "" +"सहीची खात्री करण्यासाठी '%s' कार्यान्वित करू शकत नाही (gnupg संस्थापित केले आहे का?)" + +#: methods/gpgv.cc:218 +msgid "Unknown error executing gpgv" +msgstr "gpgv कार्यान्वित होत असताना अपरिचित त्रुटी" + +#: methods/gpgv.cc:249 +msgid "The following signatures were invalid:\n" +msgstr "खालील सह्या अवैध आहेत:\n" + +#: methods/gpgv.cc:256 +msgid "" +"The following signatures couldn't be verified because the public key is not " +"available:\n" +msgstr "खालील सह्यांची खात्री करता येत नाही कारण सार्वजनिक कीउपलब्ध नाही:\n" + +#: methods/gzip.cc:64 +#, c-format +msgid "Couldn't open pipe for %s" +msgstr "%s साठी पाईप उघडता येत नाही" + +#: methods/gzip.cc:109 +#, c-format +msgid "Read error from %s process" +msgstr "%s क्रियेपासून चूक वाचा" + +#: methods/http.cc:377 +msgid "Waiting for headers" +msgstr "शीर्षकासाठी थांबले आहे...." + +#: methods/http.cc:523 +#, c-format +msgid "Got a single header line over %u chars" +msgstr "%u अक्षरांवर एक शीर्षक ओळ मिळाली" + +#: methods/http.cc:531 +msgid "Bad header line" +msgstr "वाईट शीर्षक ओळ" + +#: methods/http.cc:550 methods/http.cc:557 +msgid "The HTTP server sent an invalid reply header" +msgstr "HTTP सर्व्हरने अवैध प्रत्त्युत्तर शीर्षक पाठविले" + +#: methods/http.cc:586 +msgid "The HTTP server sent an invalid Content-Length header" +msgstr "HTTP सर्व्हरने अवैध मजकूर-लांबी शीर्षक पाठविले " + +#: methods/http.cc:601 +msgid "The HTTP server sent an invalid Content-Range header" +msgstr "HTTP सर्व्हरने अवैध मजकूर-विस्तार शीर्षक पाठविले" + +#: methods/http.cc:603 +msgid "This HTTP server has broken range support" +msgstr "HTTP सर्व्हरने विस्तार तांत्रिक मदत जोडली" + +#: methods/http.cc:627 +msgid "Unknown date format" +msgstr "अपरिचित दिनांक प्रकार/स्वरूप " + +#: methods/http.cc:774 +msgid "Select failed" +msgstr "चुकले/असमर्थ निवड करा" + +#: methods/http.cc:779 +msgid "Connection timed out" +msgstr "जोडणी वेळेअभावी तुटली" + +#: methods/http.cc:802 +msgid "Error writing to output file" +msgstr "निर्गत फाईल मध्ये लिहिताना त्रुटी/चूक" + +#: methods/http.cc:833 +msgid "Error writing to file" +msgstr "फाईल मध्ये लिहिण्यात चूक/त्रुटी" + +#: methods/http.cc:861 +msgid "Error writing to the file" +msgstr "फाईल मध्ये लिहिण्यात चूक/त्रुटी" + +#: methods/http.cc:875 +msgid "Error reading from server. Remote end closed connection" +msgstr "सर्व्हर मधून वाचण्यात चूक. लांब शेवट आणि बंद झालेली जोडणी" + +#: methods/http.cc:877 +msgid "Error reading from server" +msgstr "सर्व्हर मधून वाचण्यात चूक" + +#: methods/http.cc:1108 +msgid "Bad header data" +msgstr "चुकीचा शीर्षक डाटा" + +#: methods/http.cc:1125 +msgid "Connection failed" +msgstr "जोडणी अयशस्वी" + +#: methods/http.cc:1216 +msgid "Internal error" +msgstr "अंतर्गत त्रुटी" + +#: apt-pkg/contrib/mmap.cc:82 +msgid "Can't mmap an empty file" +msgstr "रिकामी फाईल mmap करता येणार नाही" + +#: apt-pkg/contrib/mmap.cc:87 +#, c-format +msgid "Couldn't make mmap of %lu bytes" +msgstr "mmap चे %lu बाईटस् करता येणार नाहीत" + +#: apt-pkg/contrib/strutl.cc:938 +#, c-format +msgid "Selection %s not found" +msgstr "%s निवडक भाग सापडत नाही" + +#: apt-pkg/contrib/configuration.cc:436 +#, fuzzy, c-format +msgid "Unrecognized type abbreviation: '%c'" +msgstr "संक्षिप्तरुपाचा माहित नसलेला प्रकार " + +#: apt-pkg/contrib/configuration.cc:494 +#, c-format +msgid "Opening configuration file %s" +msgstr "%s संरचना फाईल उघडत आहे" + +#: apt-pkg/contrib/configuration.cc:512 +#, c-format +msgid "Line %d too long (max %d)" +msgstr "ओळ %d खूप लांब (कमाल %d)" + +#: apt-pkg/contrib/configuration.cc:608 +#, c-format +msgid "Syntax error %s:%u: Block starts with no name." +msgstr "रचनेच्या नियमांचा दोष %s:%u: ब्लॉक नावाशिवाय सुरू होतो." + +#: apt-pkg/contrib/configuration.cc:627 +#, c-format +msgid "Syntax error %s:%u: Malformed tag" +msgstr "रचनेच्या नियमांचा दोष : %s:%u: मालफॉर्मड् टॅग" + +#: apt-pkg/contrib/configuration.cc:644 +#, c-format +msgid "Syntax error %s:%u: Extra junk after value" +msgstr "रचनेच्या नियमांचा दोष %s:%u: मुल्यांच्या नंतर अधिक जंक" + +#: apt-pkg/contrib/configuration.cc:684 +#, c-format +msgid "Syntax error %s:%u: Directives can only be done at the top level" +msgstr "रचनेच्या नियमांचा दोष %s:%u: दिशादर्शक फक्त उच्च पातळीवर केले जाऊ शकतात" + +#: apt-pkg/contrib/configuration.cc:691 +#, c-format +msgid "Syntax error %s:%u: Too many nested includes" +msgstr "रचनेच्या नियमांचा दोष %s:%u: खूपच एकात एक इनक्लूडस्" + +#: apt-pkg/contrib/configuration.cc:695 apt-pkg/contrib/configuration.cc:700 +#, c-format +msgid "Syntax error %s:%u: Included from here" +msgstr "रचनेच्या नियमांचा दोष %s:%u: ह्या पासून समाविष्ट " + +#: apt-pkg/contrib/configuration.cc:704 +#, c-format +msgid "Syntax error %s:%u: Unsupported directive '%s'" +msgstr "नियम रचनेचा दोष %s:%u: '%s' दिशादर्शक असहाय्यकारी" + +#: apt-pkg/contrib/configuration.cc:738 +#, c-format +msgid "Syntax error %s:%u: Extra junk at end of file" +msgstr "नियम रचनेचा दोष %s:%u: फाईलच्या अंती अधिक जंक" + +#: apt-pkg/contrib/progress.cc:155 +#, c-format +msgid "%c%s... Error!" +msgstr "%c%s... चूक/त्रुटी!" + +#: apt-pkg/contrib/progress.cc:157 +#, c-format +msgid "%c%s... Done" +msgstr "%c%s... झाले" + +#: apt-pkg/contrib/cmndline.cc:80 +#, c-format +msgid "Command line option '%c' [from %s] is not known." +msgstr "आदेश रेखा पर्याय '%c' [पासून %s] हे माहित नाही." + +#: apt-pkg/contrib/cmndline.cc:106 apt-pkg/contrib/cmndline.cc:114 +#: apt-pkg/contrib/cmndline.cc:122 +#, c-format +msgid "Command line option %s is not understood" +msgstr "आदेश रेखा पर्याय %s नीट समजला नाही" + +#: apt-pkg/contrib/cmndline.cc:127 +#, c-format +msgid "Command line option %s is not boolean" +msgstr "आदेश रेखा पर्याय %s हे बूलियन नाही" + +#: apt-pkg/contrib/cmndline.cc:166 apt-pkg/contrib/cmndline.cc:187 +#, c-format +msgid "Option %s requires an argument." +msgstr "पर्याय %s साठी ऑर्गुमेंट पाहिजे" + +#: apt-pkg/contrib/cmndline.cc:201 apt-pkg/contrib/cmndline.cc:207 +#, c-format +msgid "Option %s: Configuration item specification must have an =<val>." +msgstr "पर्याय %s: संरचितेच्या यादीतील कलमांचा तपशीलाला असलेच पाहिजे ते =<मूल्य>." + +#: apt-pkg/contrib/cmndline.cc:237 +#, c-format +msgid "Option %s requires an integer argument, not '%s'" +msgstr "%s पर्याय ला पूर्णांक ऑर्गुमेंट पाहिजे,'%s' नको" + +#: apt-pkg/contrib/cmndline.cc:268 +#, c-format +msgid "Option '%s' is too long" +msgstr "'%s' पर्याय खूप लांब आहे" + +#: apt-pkg/contrib/cmndline.cc:301 +#, c-format +msgid "Sense %s is not understood, try true or false." +msgstr "%s संवेदना हे समजत नाही, चूक की बरोबर चा प्रयत्न करा." + +#: apt-pkg/contrib/cmndline.cc:351 +#, c-format +msgid "Invalid operation %s" +msgstr "%s अवैध क्रिया" + +#: apt-pkg/contrib/cdromutl.cc:55 +#, c-format +msgid "Unable to stat the mount point %s" +msgstr "%s माऊंट पॉईंट स्टॅट करण्यास असमर्थ" + +#: 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 "%s मध्ये बदलण्यास असमर्थ" + +#: apt-pkg/contrib/cdromutl.cc:190 +msgid "Failed to stat the cdrom" +msgstr "सीडी-रॉम स्टॅट करण्यास असमर्थ" + +#: apt-pkg/contrib/fileutl.cc:82 +#, c-format +msgid "Not using locking for read only lock file %s" +msgstr "फक्त वाचण्यासाठी कुलूप संचिका %s साठी कुलूपबंदचा वापर करीत नाही" + +#: apt-pkg/contrib/fileutl.cc:87 +#, c-format +msgid "Could not open lock file %s" +msgstr "%s कुलूप फाईल उघडता येत नाही" + +#: apt-pkg/contrib/fileutl.cc:105 +#, c-format +msgid "Not using locking for nfs mounted lock file %s" +msgstr "%s nfs(नेटवर्क फाईल सिस्टीम) माऊंटेड कुलुप फाईल ला कुलुप /बंद करता येत नाही" + +#: apt-pkg/contrib/fileutl.cc:109 +#, c-format +msgid "Could not get lock %s" +msgstr "%s कुलुप मिळवता येत नाही" + +#: apt-pkg/contrib/fileutl.cc:377 +#, c-format +msgid "Waited for %s but it wasn't there" +msgstr "%s साठी थांबलो पण ते तेथे नव्हते" + +#: apt-pkg/contrib/fileutl.cc:387 +#, c-format +msgid "Sub-process %s received a segmentation fault." +msgstr "%s उपक्रियेला सेगमेंटेशन दोष प्राप्त झाला." + +#: apt-pkg/contrib/fileutl.cc:390 +#, c-format +msgid "Sub-process %s returned an error code (%u)" +msgstr "%s उपक्रियेने (%u) त्रुटी कोड दिलेला आहे" + +#: apt-pkg/contrib/fileutl.cc:392 +#, c-format +msgid "Sub-process %s exited unexpectedly" +msgstr "%s उपक्रिया अचानकपणे बाहेर पडली" + +#: apt-pkg/contrib/fileutl.cc:436 +#, c-format +msgid "Could not open file %s" +msgstr "%s फाईल उघडता येत नाही" + +#: apt-pkg/contrib/fileutl.cc:492 +#, c-format +msgid "read, still have %lu to read but none left" +msgstr "वाचा, %lu अजूनही वाचण्यासाठी आहे पण आता काही उरली नाही" + +#: apt-pkg/contrib/fileutl.cc:522 +#, c-format +msgid "write, still have %lu to write but couldn't" +msgstr "लिहा, %lu अजूनही लिहिण्यासाठी आहे पण लिहिता येत नाही" + +#: apt-pkg/contrib/fileutl.cc:597 +msgid "Problem closing the file" +msgstr "फाईल बंद करण्यात अडचण" + +#: apt-pkg/contrib/fileutl.cc:603 +msgid "Problem unlinking the file" +msgstr "फाईल अनलिंकिंग करण्यात अडचण" + +#: apt-pkg/contrib/fileutl.cc:614 +msgid "Problem syncing the file" +msgstr "संचिकेची syncing समस्या" + +#: apt-pkg/pkgcache.cc:126 +msgid "Empty package cache" +msgstr "पॅकेज अस्थाई स्मृतिकोष" + +#: apt-pkg/pkgcache.cc:132 +msgid "The package cache file is corrupted" +msgstr "पॅकेज अस्थाई स्मृतिकोष फाईल खराब झाली आहे" + +#: apt-pkg/pkgcache.cc:137 +msgid "The package cache file is an incompatible version" +msgstr "पॅकेज अस्थाई स्मृतिकोष फाईल ही विजोड आवृत्ती आहे" + +#: apt-pkg/pkgcache.cc:142 +#, c-format +msgid "This APT does not support the versioning system '%s'" +msgstr "'%s' आवृत्तीकरण प्रणालीला हे APT तांत्रिक मदत देऊ शकत नाही" + +#: apt-pkg/pkgcache.cc:147 +msgid "The package cache was built for a different architecture" +msgstr "पॅकेज अस्थाई स्मृतीकोष वेगळ्या वास्तुविद्ये साठी बनवला गेला" + +#: apt-pkg/pkgcache.cc:218 +msgid "Depends" +msgstr "अवलंबित" + +#: apt-pkg/pkgcache.cc:218 +msgid "PreDepends" +msgstr "पूर्व अवलंबित" + +#: apt-pkg/pkgcache.cc:218 +msgid "Suggests" +msgstr "सुचवणे" + +#: apt-pkg/pkgcache.cc:219 +msgid "Recommends" +msgstr "शिफारस" + +#: apt-pkg/pkgcache.cc:219 +msgid "Conflicts" +msgstr "परस्परविरोध" + +#: apt-pkg/pkgcache.cc:219 +msgid "Replaces" +msgstr "परत त्याठिकाणी आणा" + +#: apt-pkg/pkgcache.cc:220 +msgid "Obsoletes" +msgstr "अप्रचलित" + +#: apt-pkg/pkgcache.cc:231 +msgid "important" +msgstr "अत्यावश्यक" + +#: apt-pkg/pkgcache.cc:231 +msgid "required" +msgstr "आवश्यक" + +#: apt-pkg/pkgcache.cc:231 +msgid "standard" +msgstr "मानक" + +#: apt-pkg/pkgcache.cc:232 +msgid "optional" +msgstr "एच्छिक" + +#: apt-pkg/pkgcache.cc:232 +msgid "extra" +msgstr "अधिक" + +#: apt-pkg/depcache.cc:61 apt-pkg/depcache.cc:90 +msgid "Building dependency tree" +msgstr "अवलंबित रचना बांधणी करत आहे" + +#: apt-pkg/depcache.cc:62 +msgid "Candidate versions" +msgstr "कंॅडिडेट आवृत्त्या" + +#: apt-pkg/depcache.cc:91 +msgid "Dependency generation" +msgstr "अवलंबित/विसंबून असलेले उत्पादन " + +#: apt-pkg/tagfile.cc:106 +#, c-format +msgid "Unable to parse package file %s (1)" +msgstr "%s (1) पॅकेज फाईल पार्स करण्यात असमर्थ" + +#: apt-pkg/tagfile.cc:193 +#, c-format +msgid "Unable to parse package file %s (2)" +msgstr "%s (२) पॅकेज फाईल पार्स करण्यात असमर्थ" + +#: apt-pkg/sourcelist.cc:94 +#, fuzzy, c-format +msgid "Malformed line %lu in source list %s (URI)" +msgstr "%s स्त्रोत सुचीमध्ये(यूआरआय)%lu वाईट/व्यंग रेषा" + +#: apt-pkg/sourcelist.cc:96 +#, fuzzy, c-format +msgid "Malformed line %lu in source list %s (dist)" +msgstr "%s स्त्रोत सुचीमध्ये(डिआएसटी) %lu वाईट/व्यंग रेषा" + +#: apt-pkg/sourcelist.cc:99 +#, fuzzy, c-format +msgid "Malformed line %lu in source list %s (URI parse)" +msgstr "%s स्त्रोत सुचीमध्ये(यूआरआय पार्स)%lu वाईट/व्यंग रेषा" + +#: apt-pkg/sourcelist.cc:105 +#, fuzzy, c-format +msgid "Malformed line %lu in source list %s (absolute dist)" +msgstr "%s स्त्रोत सुचीमध्ये(निरंकुश डिआएसटी) %lu वाईट/व्यंग रेषा" + +#: apt-pkg/sourcelist.cc:112 +#, fuzzy, c-format +msgid "Malformed line %lu in source list %s (dist parse)" +msgstr "%s (डीआयएसटी पार्स)स्त्रोत सुचीमध्ये %lu वाईट/व्यंग रेषा" + +#: apt-pkg/sourcelist.cc:203 +#, c-format +msgid "Opening %s" +msgstr "%s उघडत आहे" + +#: apt-pkg/sourcelist.cc:220 apt-pkg/cdrom.cc:426 +#, fuzzy, c-format +msgid "Line %u too long in source list %s." +msgstr "%s स्त्रोत सुचीमध्ये ओळ %u खूप लांब आहे." + +#: apt-pkg/sourcelist.cc:240 +#, fuzzy, c-format +msgid "Malformed line %u in source list %s (type)" +msgstr "%s (प्रकार)स्त्रोत सुचीमध्ये %u वाईट/व्यंग रेषा" + +#: apt-pkg/sourcelist.cc:244 +#, c-format +msgid "Type '%s' is not known on line %u in source list %s" +msgstr "%s स्त्रोत सुचीमध्ये %u रेषेवर '%s' प्रकार माहित नाही " + +#: apt-pkg/sourcelist.cc:252 apt-pkg/sourcelist.cc:255 +#, fuzzy, c-format +msgid "Malformed line %u in source list %s (vendor id)" +msgstr "%s (विक्रेता आयडी)स्त्रोत सुचीमध्ये %u वाईट/व्यंग रेषा " + +#: apt-pkg/packagemanager.cc:402 +#, c-format +msgid "" +"This installation run will require temporarily removing the essential " +"package %s due to a Conflicts/Pre-Depends loop. This is often bad, but if " +"you really want to do it, activate the APT::Force-LoopBreak option." +msgstr "" +"ह्याचे आधिष्ठापन सुरु करण्यासाठी अत्यावश्यक तात्पुरते काढुन टाकण्याची गरज आहे%s पॅकेज " +"गुंतागुंतीमुळे/Pre-Depends पूर्व अवलंबित आवर्तन.हे नेहमीच वाईट असते, पण जर तुम्हाला ते खरोखर " +"करावयाचे असेल तर,APT::Force-LoopBreak पर्याय कार्यान्वित करा." + +#: apt-pkg/pkgrecords.cc:37 +#, c-format +msgid "Index file type '%s' is not supported" +msgstr "'%s' प्रकारची निर्देशक संचिका सहाय्यकारी नाही" + +#: apt-pkg/algorithms.cc:241 +#, c-format +msgid "" +"The package %s needs to be reinstalled, but I can't find an archive for it." +msgstr "" +"%s पॅकेज पुनः:अधिष्ठापित करण्याची गरज आहे, परंतु मला त्यासाठी ऑर्काइव्ह सापडू शकले नाही." + +#: apt-pkg/algorithms.cc:1066 +msgid "" +"Error, pkgProblemResolver::Resolve generated breaks, this may be caused by " +"held packages." +msgstr "" +"दोष,पॅकेज समस्या निवारक::निवारण करतांना अडथळा निर्माण झाला, ह्याचे कारण स्थगित " +"पॅकेजेस असू शकते." + +#: apt-pkg/algorithms.cc:1068 +msgid "Unable to correct problems, you have held broken packages." +msgstr "अडचणी दूर करण्यास असमर्थ, तुम्ही तुटलेले पॅकेज घेतलेले आहे." + +#: apt-pkg/acquire.cc:62 +#, c-format +msgid "Lists directory %spartial is missing." +msgstr "संचयिका यादीत %s पार्शल हरवले आहे." + +#: apt-pkg/acquire.cc:66 +#, fuzzy, c-format +#| msgid "Archive directory %spartial is missing" +msgid "Archive directory %spartial is missing." +msgstr "ऑर्काइव्ह संचयिकेत %s पार्शल हरवले आहे." + +#. only show the ETA if it makes sense +#. two days +#: apt-pkg/acquire.cc:823 +#, c-format +msgid "Retrieving file %li of %li (%s remaining)" +msgstr "%li ची %li(%s राहिलेले) संचिका पुन:प्राप्त करीत आहे" + +#: apt-pkg/acquire.cc:825 +#, c-format +msgid "Retrieving file %li of %li" +msgstr "%li ची %li संचिका पुन:प्राप्त करीत आहे" + +#: apt-pkg/acquire-worker.cc:113 +#, c-format +msgid "The method driver %s could not be found." +msgstr "%s कार्यपध्दतीचा ड्राइव्हर सापडू शकला नाही. " + +#: apt-pkg/acquire-worker.cc:162 +#, c-format +msgid "Method %s did not start correctly" +msgstr "%s कार्यपध्दती योग्य रीतीने सुरु झालेली नाही" + +#: apt-pkg/acquire-worker.cc:377 +#, c-format +msgid "Please insert the disc labeled: '%s' in the drive '%s' and press enter." +msgstr "कृपया '%s' लेबल असलेली डिस्क '%s' या ड्राइव्हमध्ये ठेवा आणि एन्टर कळ दाबा." + +#: apt-pkg/init.cc:120 +#, c-format +msgid "Packaging system '%s' is not supported" +msgstr "'%s' पॅकेजींग प्रणाली सहाय्यकारी नाही" + +#: apt-pkg/init.cc:136 +msgid "Unable to determine a suitable packaging system type" +msgstr "योग्य असा पॅकेजिंग प्रणाली प्रकार निश्चित करण्यास असमर्थ " + +#: apt-pkg/clean.cc:61 +#, c-format +msgid "Unable to stat %s." +msgstr "%s स्टॅट करण्यात असमर्थ. " + +#: apt-pkg/srcrecords.cc:48 +msgid "You must put some 'source' URIs in your sources.list" +msgstr "तुम्ही तुमच्या उगमस्थान यादीत URI घाला" + +#: apt-pkg/cachefile.cc:73 +msgid "The package lists or status file could not be parsed or opened." +msgstr "पॅकेजच्या याद्या किंवा संचिकेची स्थिती स्पष्ट होऊ शकत नाही किंवा ती उघडू शकत नाही." + +#: apt-pkg/cachefile.cc:77 +msgid "You may want to run apt-get update to correct these problems" +msgstr "तुम्ही ह्या समस्यांचे निवारण करण्यासाठी apt-get update प्रोग्राम चालू करु शकता" + +#: apt-pkg/policy.cc:269 +msgid "Invalid record in the preferences file, no Package header" +msgstr "पसंतीच्या संचिकेत अवैध माहितीसंच, पॅकेजला शीर्षक नाही " + +#: apt-pkg/policy.cc:291 +#, c-format +msgid "Did not understand pin type %s" +msgstr "%s पिनचा प्रकार समजलेला नाही" + +#: apt-pkg/policy.cc:299 +msgid "No priority (or zero) specified for pin" +msgstr "पिन करिता प्राधान्य/अग्रक्रम (किंवा शून्य)निर्देशीत केलेला नाही" + +#: apt-pkg/pkgcachegen.cc:74 +msgid "Cache has an incompatible versioning system" +msgstr "अस्थायी स्मृतिकोष मध्ये विसंगत आवृतीकरण प्रणाली आहे" + +#: apt-pkg/pkgcachegen.cc:117 +#, c-format +msgid "Error occurred while processing %s (NewPackage)" +msgstr "%s (नविन पॅकेज) प्रक्रिया करीत असतांना दोष आढळून आला" + +#: apt-pkg/pkgcachegen.cc:129 +#, c-format +msgid "Error occurred while processing %s (UsePackage1)" +msgstr "%s (वापरातील पॅकेज१) प्रक्रिया करीत असतांना दोष आढळून आला" + +#: apt-pkg/pkgcachegen.cc:150 +#, c-format +msgid "Error occurred while processing %s (UsePackage2)" +msgstr "%s प्रक्रिया करीत असतांना दोष आढळून आला(वापरातील पॅकेज२)" + +#: apt-pkg/pkgcachegen.cc:154 +#, c-format +msgid "Error occurred while processing %s (NewFileVer1)" +msgstr "%s(नविन संचिका आवृती१) प्रक्रिया करीत असतांना दोष आढळून आला" + +#: apt-pkg/pkgcachegen.cc:184 +#, c-format +msgid "Error occurred while processing %s (NewVersion1)" +msgstr "%s (नविन आवृत्ती १) प्रक्रिया करीत असतांना दोष आढळून आला" + +#: apt-pkg/pkgcachegen.cc:188 +#, c-format +msgid "Error occurred while processing %s (UsePackage3)" +msgstr "%s(वापरातील पॅकेज३) प्रक्रिया करीत असतांना दोष आढळून आला" + +#: apt-pkg/pkgcachegen.cc:192 +#, c-format +msgid "Error occurred while processing %s (NewVersion2)" +msgstr "%s(नविन आवृती२) प्रक्रिया करीत असतांना दोष आढळून आला" + +#: apt-pkg/pkgcachegen.cc:207 +msgid "Wow, you exceeded the number of package names this APT is capable of." +msgstr "" +"अरेवा!, तुम्ही तर ह्या एपिटीच्या कार्यक्षमतेपेक्षाही पॅकेज नांवांच्या संख्येची मर्यादा ओलांडली " +"आहे." + +#: apt-pkg/pkgcachegen.cc:210 +msgid "Wow, you exceeded the number of versions this APT is capable of." +msgstr "" +"अरेवा!, तुम्ही तर ह्या एपिटीच्या कार्यक्षमतेपेक्षाही आवृत्त्या संख्येची मर्यादा ओलांडली आहे." + +#: apt-pkg/pkgcachegen.cc:213 +msgid "Wow, you exceeded the number of dependencies this APT is capable of." +msgstr "" +"अरेवा!, तुम्ही तर ह्या एपिटीच्या कार्यक्षमतेपेक्षाही अवलंबित/विसंबून असलेल्या संख्येची मर्यादा " +"ओलांडली आहे." + +#: apt-pkg/pkgcachegen.cc:241 +#, c-format +msgid "Error occurred while processing %s (FindPkg)" +msgstr "%s (पॅकेज शोधतांना) प्रक्रिया करीत असतांना दोष आढळून आला" + +#: apt-pkg/pkgcachegen.cc:254 +#, c-format +msgid "Error occurred while processing %s (CollectFileProvides)" +msgstr "%s (तरतूद/पुरवलेल्या संचिका जमा) प्रक्रिया करीत असतांना दोष आढळून आला" + +#: apt-pkg/pkgcachegen.cc:260 +#, c-format +msgid "Package %s %s was not found while processing file dependencies" +msgstr "अवलंबित/विसंबून असणाऱ्या संचिकांची प्रक्रिया करीत असतांना पॅकेज %s %s सापडले नाही " + +#: apt-pkg/pkgcachegen.cc:574 +#, c-format +msgid "Couldn't stat source package list %s" +msgstr "%s उगम पॅकेज यादी सुरू करता येत नाही" + +#: apt-pkg/pkgcachegen.cc:658 +msgid "Collecting File Provides" +msgstr "तरतूद/पुरवलेल्या संचिका संग्रहित करीत आहे" + +#: apt-pkg/pkgcachegen.cc:785 apt-pkg/pkgcachegen.cc:792 +msgid "IO Error saving source cache" +msgstr "IO त्रुटी उगम निवडक संचयस्थानात संग्रहित होत आहे" + +#: apt-pkg/acquire-item.cc:126 +#, c-format +msgid "rename failed, %s (%s -> %s)." +msgstr "पुनर्नामांकन अयशस्वी, %s (%s -> %s)." + +#: apt-pkg/acquire-item.cc:236 apt-pkg/acquire-item.cc:945 +msgid "MD5Sum mismatch" +msgstr "एमडी५ बेरीज/MD5Sum जुळत नाही" + +#: apt-pkg/acquire-item.cc:640 +#, fuzzy +#| msgid "There are no public key available for the following key IDs:\n" +msgid "There is no public key available for the following key IDs:\n" +msgstr "पुढील कळ ओळखचिन्हासाठी सामायिक कळ उपलब्ध नाही:\n" + +#: apt-pkg/acquire-item.cc:753 +#, 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 "" +"मी %s पॅकेजकरीता संचिका शोधण्यास समर्थ नव्हतो. याचा अर्थ असाकी तुम्हाला हे पॅकेज स्वहस्ते " +"स्थिर/निश्चित करण्याची गरज आहे(हरवलेल्या आर्चमुळे) " + +#: apt-pkg/acquire-item.cc:812 +#, 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 "" +"मी %s पॅकेजकरीता संचिका शोधण्यास समर्थ नव्हतो. याचा अर्थ असाकी तुम्हालाहे पॅकेज स्वहस्ते " +"स्थिर/निश्चित करण्याची गरज आहे." + +#: apt-pkg/acquire-item.cc:848 +#, c-format +msgid "" +"The package index files are corrupted. No Filename: field for package %s." +msgstr "" +"पॅकेज यादीची/सुचीची संचिका दूषित/खराब झालेली आहे. संचिका नाव नाही: पॅकेजकरीता क्षेत्र/" +"ठिकाण %s." + +#: apt-pkg/acquire-item.cc:935 +msgid "Size mismatch" +msgstr "आकार जुळतनाही" + +#: apt-pkg/vendorlist.cc:66 +#, c-format +msgid "Vendor block %s contains no fingerprint" +msgstr "विक्रेता गट %s मध्ये बोटाचे ठसे नाहीत" + +#: apt-pkg/cdrom.cc:507 +#, c-format +msgid "" +"Using CD-ROM mount point %s\n" +"Mounting CD-ROM\n" +msgstr "" +"सिडी-रॉमचे माउंट स्थान %s वापरुन\n" +"सिडी-रॉम माउंट होत आहे\n" + +#: apt-pkg/cdrom.cc:518 apt-pkg/cdrom.cc:600 +msgid "Identifying.. " +msgstr "ओळखत आहे.." + +#: apt-pkg/cdrom.cc:543 +#, c-format +msgid "Stored label: %s \n" +msgstr "ग्रहण केलेले नामदर्शक: %s \n" + +#: apt-pkg/cdrom.cc:563 +#, c-format +msgid "Using CD-ROM mount point %s\n" +msgstr "सिडी-रॉमचे माउंट स्थान %s वापरुन\n" + +#: apt-pkg/cdrom.cc:581 +msgid "Unmounting CD-ROM\n" +msgstr "सिडी-रॉम अनमाउंट करत आहे\n" + +#: apt-pkg/cdrom.cc:585 +msgid "Waiting for disc...\n" +msgstr "डिस्क/चकती करिता प्रतिक्षा करीत आहे...\n" + +#. Mount the new CDROM +#: apt-pkg/cdrom.cc:593 +msgid "Mounting CD-ROM...\n" +msgstr "सिडी-रॉम माउंट होत आहे...\n" + +#: apt-pkg/cdrom.cc:611 +msgid "Scanning disc for index files..\n" +msgstr "संचिकाच्या यादी/सूचीसाठी डिस्क/चकती बारकाईने तपासत आहे..\n" + +#: apt-pkg/cdrom.cc:649 +#, c-format +msgid "Found %i package indexes, %i source indexes and %i signatures\n" +msgstr "" +"%i पॅकेजेसची यादी/सूची , %i स्त्रोताची यादी/सूची आणि %i स्वाक्षऱ्या/सिगनेचर्स सापडल्या \n" + +#: apt-pkg/cdrom.cc:714 +msgid "That is not a valid name, try again.\n" +msgstr "ते स्विकारण्याजोगे/वैध नांव नाही, पुन्हा प्रयत्न करा.\n" + +#: apt-pkg/cdrom.cc:730 +#, c-format +msgid "" +"This disc is called: \n" +"'%s'\n" +msgstr "" +"ह्या डिस्कला/चकतीला: म्हणतात\n" +"'%s'\n" + +#: apt-pkg/cdrom.cc:734 +msgid "Copying package lists..." +msgstr "पॅकेज सूचींच्या प्रती तयार करित आहे..." + +#: apt-pkg/cdrom.cc:758 +msgid "Writing new source list\n" +msgstr "नविन स्त्रोत सूची लिहित आहे\n" + +#: apt-pkg/cdrom.cc:767 +msgid "Source list entries for this disc are:\n" +msgstr "ह्या डिस्क/चकती करिता स्त्रोत सूचीच्या प्रवेशिका आहेत: \n" + +#: apt-pkg/cdrom.cc:810 +msgid "Unmounting CD-ROM..." +msgstr "सिडी-रॉम अनमाउंट होत आहे..." + +#: apt-pkg/indexcopy.cc:261 +#, c-format +msgid "Wrote %i records.\n" +msgstr "%i माहितीसंच लिहिले.\n" + +#: apt-pkg/indexcopy.cc:263 +#, c-format +msgid "Wrote %i records with %i missing files.\n" +msgstr "%i गहाळ संचिकाबरोबर %i माहिती संच लिहिले.\n" + +#: apt-pkg/indexcopy.cc:266 +#, c-format +msgid "Wrote %i records with %i mismatched files\n" +msgstr "%i विजोड संचिकांबरोबर %i माहिती संच लिहिले\n" + +#: apt-pkg/indexcopy.cc:269 +#, c-format +msgid "Wrote %i records with %i missing files and %i mismatched files\n" +msgstr "%i गहाळ संचिकाबरोबर आणि %i विजोड संचिकाबरोबर %i माहिती संच लिहिले\n" + +#: apt-pkg/deb/dpkgpm.cc:358 +#, c-format +msgid "Preparing %s" +msgstr "%s तयार करित आहे" + +#: apt-pkg/deb/dpkgpm.cc:359 +#, c-format +msgid "Unpacking %s" +msgstr "%s सुटे/मोकळे करीत आहे " + +#: apt-pkg/deb/dpkgpm.cc:364 +#, c-format +msgid "Preparing to configure %s" +msgstr "%s संरचने साठी तयार करत आहे" + +#: apt-pkg/deb/dpkgpm.cc:365 +#, c-format +msgid "Configuring %s" +msgstr "%s संरचित होत आहे" + +#: apt-pkg/deb/dpkgpm.cc:366 +#, c-format +msgid "Installed %s" +msgstr "%s संस्थापित झाले" + +#: apt-pkg/deb/dpkgpm.cc:371 +#, c-format +msgid "Preparing for removal of %s" +msgstr "%s ला काढून टाकण्यासाठी तयारी करत आहे" + +#: apt-pkg/deb/dpkgpm.cc:372 +#, c-format +msgid "Removing %s" +msgstr "%s काढून टाकत आहे" + +#: apt-pkg/deb/dpkgpm.cc:373 +#, c-format +msgid "Removed %s" +msgstr "%s काढून टाकले" + +#: apt-pkg/deb/dpkgpm.cc:378 +#, c-format +msgid "Preparing to completely remove %s" +msgstr "%s संपूर्ण काढून टाकण्याची तयारी करत आहे" + +#: apt-pkg/deb/dpkgpm.cc:379 +#, c-format +msgid "Completely removed %s" +msgstr "%s संपूर्ण काढून टाकले" + +#: methods/rsh.cc:330 +msgid "Connection closed prematurely" +msgstr "अकाली जोडणी बंद झाली" @@ -2582,8 +2582,7 @@ msgid "MD5Sum mismatch" msgstr "Feil MD5sum" #: apt-pkg/acquire-item.cc:640 -#, fuzzy -msgid "There are no public key available for the following key IDs:\n" +msgid "There is no public key available for the following key IDs:\n" msgstr "" "Det er ingen offentlig nkkel tilgjengelig for de flgende nkkel-ID-ene:\n" @@ -2771,14 +2770,12 @@ msgstr "Forbindelsen ble uventet stengt" #~ msgid "File date has changed %s" #~ msgstr "Fildatoen er endret %s" -#, fuzzy #~ msgid "Could not patch file" #~ msgstr "Kunne ikke pne fila %s" #~ msgid "Reading file list" #~ msgstr "Leser filliste" -#, fuzzy #~ msgid "Could not execute " #~ msgstr "Fr ikke lst %s" @@ -6,7 +6,7 @@ msgid "" msgstr "" "Project-Id-Version: apt_po\n" "Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2006-05-27 13:46+0200\n" +"POT-Creation-Date: 2006-10-11 20:34+0200\n" "PO-Revision-Date: 2006-06-12 14:35+0545\n" "Last-Translator: Shiva Pokharel <pokharelshiva@hotmail.com>\n" "Language-Team: Nepali <info@mpp.org.np>\n" @@ -149,7 +149,7 @@ msgstr " %4i %s\n" #: cmdline/apt-cache.cc:1652 cmdline/apt-cdrom.cc:138 cmdline/apt-config.cc:70 #: cmdline/apt-extracttemplates.cc:225 ftparchive/apt-ftparchive.cc:550 -#: cmdline/apt-get.cc:2369 cmdline/apt-sortpkgs.cc:144 +#: cmdline/apt-get.cc:2387 cmdline/apt-sortpkgs.cc:144 #, c-format msgid "%s %s for %s %s compiled on %s %s\n" msgstr "%s %s को लागि %s %s, %s %s मा कम्पाएल गरिएको छ\n" @@ -427,115 +427,126 @@ msgstr "कुनै चयनहरू मेल खाएन" msgid "Some files are missing in the package file group `%s'" msgstr "केही फाइलहरू प्याकेज फाइल समूह `%s' मा हराइरहेको छ" -#: ftparchive/cachedb.cc:45 +#: ftparchive/cachedb.cc:47 #, c-format msgid "DB was corrupted, file renamed to %s.old" msgstr "DB दूषित थियो, फाइल %s.पुरानो मा पुन:नामकरण गर्नुहोस्" -#: ftparchive/cachedb.cc:63 +#: ftparchive/cachedb.cc:65 #, c-format msgid "DB is old, attempting to upgrade %s" msgstr "DB पुरानो छ, %s स्तरवृद्धि गर्न प्रयास गरिदैछ" -#: ftparchive/cachedb.cc:73 +#: ftparchive/cachedb.cc:76 +msgid "" +"DB format is invalid. If you upgraded from a older version of apt, please " +"remove and re-create the database." +msgstr "" + +#: ftparchive/cachedb.cc:81 #, c-format msgid "Unable to open DB file %s: %s" msgstr "DB फाइल %s असक्षम भयो: %s" -#: ftparchive/cachedb.cc:114 +#: ftparchive/cachedb.cc:127 apt-inst/extract.cc:181 apt-inst/extract.cc:193 +#: apt-inst/extract.cc:210 apt-inst/deb/dpkgdb.cc:121 methods/gpgv.cc:272 #, c-format -msgid "File date has changed %s" -msgstr "फाइल डेटाले %s परिवर्तन गर्यो" +msgid "Failed to stat %s" +msgstr " %s स्थिर गर्न असफल" -#: ftparchive/cachedb.cc:155 +#: ftparchive/cachedb.cc:242 msgid "Archive has no control record" msgstr "संग्रह संग नियन्त्रण रेकर्ड छैन" -#: ftparchive/cachedb.cc:267 +#: ftparchive/cachedb.cc:448 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 "W: डाइरेक्ट्री %s पढ्न असक्षम\n" -#: ftparchive/writer.cc:83 +#: ftparchive/writer.cc:84 #, c-format msgid "W: Unable to stat %s\n" msgstr "W: %s स्थिर गर्न असक्षम\n" -#: ftparchive/writer.cc:125 +#: ftparchive/writer.cc:135 msgid "E: " msgstr "E: " -#: ftparchive/writer.cc:127 +#: ftparchive/writer.cc:137 msgid "W: " msgstr "W: " -#: ftparchive/writer.cc:134 +#: ftparchive/writer.cc:144 msgid "E: Errors apply to file " msgstr "E: फाइलमा त्रुटिहरू लागू गर्नुहोस्" -#: ftparchive/writer.cc:151 ftparchive/writer.cc:181 +#: ftparchive/writer.cc:161 ftparchive/writer.cc:191 #, c-format msgid "Failed to resolve %s" msgstr "%s हल गर्न असफल भयो" -#: ftparchive/writer.cc:163 +#: ftparchive/writer.cc:173 msgid "Tree walking failed" msgstr "ट्री हिडाईँ असफल भयो" -#: ftparchive/writer.cc:188 +#: ftparchive/writer.cc:198 #, c-format msgid "Failed to open %s" msgstr "%s खोल्न असफल" -#: ftparchive/writer.cc:245 +#: ftparchive/writer.cc:257 #, c-format msgid " DeLink %s [%s]\n" msgstr " DeLink %s [%s]\n" -#: ftparchive/writer.cc:253 +#: ftparchive/writer.cc:265 #, c-format msgid "Failed to readlink %s" msgstr "लिङ्क पढ्न असफल %s" -#: ftparchive/writer.cc:257 +#: ftparchive/writer.cc:269 #, c-format msgid "Failed to unlink %s" msgstr "अनलिङ्क गर्न असफल %s" -#: ftparchive/writer.cc:264 +#: ftparchive/writer.cc:276 #, c-format msgid "*** Failed to link %s to %s" msgstr "*** %s मा %s लिङ्क असफल भयो" -#: ftparchive/writer.cc:274 +#: ftparchive/writer.cc:286 #, c-format msgid " DeLink limit of %sB hit.\n" msgstr "यस %sB हिटको डि लिङ्क सिमा।\n" -#: ftparchive/writer.cc:358 apt-inst/extract.cc:181 apt-inst/extract.cc:193 -#: apt-inst/extract.cc:210 apt-inst/deb/dpkgdb.cc:121 methods/gpgv.cc:266 -#, c-format -msgid "Failed to stat %s" -msgstr " %s स्थिर गर्न असफल" - -#: ftparchive/writer.cc:386 +#: ftparchive/writer.cc:390 msgid "Archive had no package field" msgstr "संग्रह संग कुनै प्याकेज फाँट छैन" -#: ftparchive/writer.cc:394 ftparchive/writer.cc:603 +#: ftparchive/writer.cc:398 ftparchive/writer.cc:613 #, c-format msgid " %s has no override entry\n" msgstr " %s संग कुनै अधिलेखन प्रविष्टि छैन\n" -#: ftparchive/writer.cc:437 ftparchive/writer.cc:689 +#: ftparchive/writer.cc:443 ftparchive/writer.cc:701 #, c-format msgid " %s maintainer is %s not %s\n" msgstr " %s संभारकर्ता %s हो %s होइन\n" +#: ftparchive/writer.cc:623 +#, fuzzy, c-format +msgid " %s has no source override entry\n" +msgstr " %s संग कुनै अधिलेखन प्रविष्टि छैन\n" + +#: ftparchive/writer.cc:627 +#, fuzzy, c-format +msgid " %s has no binary override entry either\n" +msgstr " %s संग कुनै अधिलेखन प्रविष्टि छैन\n" + #: ftparchive/contents.cc:317 #, c-format msgid "Internal error, could not locate member %s" @@ -796,11 +807,11 @@ msgstr "प्याकेजहरू हट्न चाहदैछन् त msgid "Internal error, Ordering didn't finish" msgstr "आन्तरिक त्रुटि, आदेश समाप्त भएको छैन" -#: cmdline/apt-get.cc:791 cmdline/apt-get.cc:1800 cmdline/apt-get.cc:1833 +#: cmdline/apt-get.cc:791 cmdline/apt-get.cc:1818 cmdline/apt-get.cc:1851 msgid "Unable to lock the download directory" msgstr "डाउनलोड डाइरेक्ट्री ताल्चा मार्न असक्षम" -#: cmdline/apt-get.cc:801 cmdline/apt-get.cc:1881 cmdline/apt-get.cc:2117 +#: cmdline/apt-get.cc:801 cmdline/apt-get.cc:1899 cmdline/apt-get.cc:2135 #: apt-pkg/cachefile.cc:67 msgid "The list of sources could not be read." msgstr "स्रोतहरुको सूचि पढ्न सकिएन ।" @@ -829,7 +840,7 @@ msgstr "अनप्याक गरिसके पछि थप डिस् msgid "After unpacking %sB disk space will be freed.\n" msgstr "%sB अनप्याक गरिसके पछि डिस्क खाली ठाउँ खाली हुनेछ ।\n" -#: cmdline/apt-get.cc:846 cmdline/apt-get.cc:1971 +#: cmdline/apt-get.cc:846 cmdline/apt-get.cc:1989 #, c-format msgid "Couldn't determine free space in %s" msgstr " %s मा खाली ठाऊँ निर्धारण गर्न सकिएन" @@ -866,7 +877,7 @@ msgstr "परित्याग गर्नुहोस् ।" msgid "Do you want to continue [Y/n]? " msgstr "के तपाईँ निरन्तरता दिन चाहनुहुन्छ [Y/n]? " -#: cmdline/apt-get.cc:961 cmdline/apt-get.cc:1365 cmdline/apt-get.cc:2014 +#: cmdline/apt-get.cc:961 cmdline/apt-get.cc:1365 cmdline/apt-get.cc:2032 #, c-format msgid "Failed to fetch %s %s\n" msgstr "%s %s तान्न असफल भयो\n" @@ -875,7 +886,7 @@ msgstr "%s %s तान्न असफल भयो\n" msgid "Some files failed to download" msgstr "केही फाइलहरू डाउनलोड गर्न असफल भयो" -#: cmdline/apt-get.cc:980 cmdline/apt-get.cc:2023 +#: cmdline/apt-get.cc:980 cmdline/apt-get.cc:2041 msgid "Download complete and in download only mode" msgstr "डाउनलोड समाप्त भयो र डाउनलोडमा मोड मात्रै छ" @@ -1049,114 +1060,114 @@ msgstr "भाँचिएका प्याकेजहरू" msgid "The following extra packages will be installed:" msgstr "निम्न अतिरिक्त प्याकेजहरू स्थापना हुनेछन्:" -#: cmdline/apt-get.cc:1674 +#: cmdline/apt-get.cc:1692 msgid "Suggested packages:" msgstr "सुझाव दिएका प्याकेजहरू:" -#: cmdline/apt-get.cc:1675 +#: cmdline/apt-get.cc:1693 msgid "Recommended packages:" msgstr "सिफारिस गरिएका प्याकेजहरू:" -#: cmdline/apt-get.cc:1695 +#: cmdline/apt-get.cc:1713 msgid "Calculating upgrade... " msgstr "स्तर वृद्धि गणना गरिदैछ..." -#: cmdline/apt-get.cc:1698 methods/ftp.cc:702 methods/connect.cc:101 +#: cmdline/apt-get.cc:1716 methods/ftp.cc:702 methods/connect.cc:101 msgid "Failed" msgstr "असफल भयो" -#: cmdline/apt-get.cc:1703 +#: cmdline/apt-get.cc:1721 msgid "Done" msgstr "काम भयो" -#: cmdline/apt-get.cc:1768 cmdline/apt-get.cc:1776 +#: cmdline/apt-get.cc:1786 cmdline/apt-get.cc:1794 msgid "Internal error, problem resolver broke stuff" msgstr "आन्तरिक त्रुटि,समस्या हलकर्ताले उत्तम गुण भाँच्यो " -#: cmdline/apt-get.cc:1876 +#: cmdline/apt-get.cc:1894 msgid "Must specify at least one package to fetch source for" msgstr "को लागि स्रोत तान्न कम्तिमा एउटा प्याकेज निर्दिष्ट गर्नुपर्छ" -#: cmdline/apt-get.cc:1906 cmdline/apt-get.cc:2135 +#: cmdline/apt-get.cc:1924 cmdline/apt-get.cc:2153 #, c-format msgid "Unable to find a source package for %s" msgstr "%s को लागि स्रोत प्याकेज फेला पार्न असफल भयो" -#: cmdline/apt-get.cc:1950 +#: cmdline/apt-get.cc:1968 #, c-format msgid "Skipping already downloaded file '%s'\n" msgstr "पहिल्यै डाउनलोड भएका फाइलहरु फड्काइदैछ '%s'\n" -#: cmdline/apt-get.cc:1974 +#: cmdline/apt-get.cc:1992 #, c-format msgid "You don't have enough free space in %s" msgstr "तपाईँ संग %s मा पर्याप्त खाली ठाऊँ छैन" -#: cmdline/apt-get.cc:1979 +#: cmdline/apt-get.cc:1997 #, c-format msgid "Need to get %sB/%sB of source archives.\n" msgstr "स्रोत संग्रहहरुको %sB/%sB प्राप्त गर्न आवश्यक छ ।\n" -#: cmdline/apt-get.cc:1982 +#: cmdline/apt-get.cc:2000 #, c-format msgid "Need to get %sB of source archives.\n" msgstr "स्रोत संग्रहहरुको %sB प्राप्त गर्न आवश्यक छ ।\n" -#: cmdline/apt-get.cc:1988 +#: cmdline/apt-get.cc:2006 #, c-format msgid "Fetch source %s\n" msgstr "स्रोत फड्काउनुहोस् %s\n" -#: cmdline/apt-get.cc:2019 +#: cmdline/apt-get.cc:2037 msgid "Failed to fetch some archives." msgstr "केही संग्रह फड्काउन असफल भयो ।" -#: cmdline/apt-get.cc:2047 +#: cmdline/apt-get.cc:2065 #, c-format msgid "Skipping unpack of already unpacked source in %s\n" msgstr " %s मा पहिल्यै अनप्याक गरिएका स्रोतको अनप्याक फड्काइदैछ\n" -#: cmdline/apt-get.cc:2059 +#: cmdline/apt-get.cc:2077 #, c-format msgid "Unpack command '%s' failed.\n" msgstr "अनप्याक आदेश '%s' असफल भयो ।\n" -#: cmdline/apt-get.cc:2060 +#: cmdline/apt-get.cc:2078 #, c-format msgid "Check if the 'dpkg-dev' package is installed.\n" msgstr "जाँच्नुहोस् यदि 'dpkg-dev' प्याकेज स्थापना भयो ।\n" -#: cmdline/apt-get.cc:2077 +#: cmdline/apt-get.cc:2095 #, c-format msgid "Build command '%s' failed.\n" msgstr "निर्माण आदेश '%s' असफल भयो ।\n" -#: cmdline/apt-get.cc:2096 +#: cmdline/apt-get.cc:2114 msgid "Child process failed" msgstr "शाखा प्रक्रिया असफल भयो" -#: cmdline/apt-get.cc:2112 +#: cmdline/apt-get.cc:2130 msgid "Must specify at least one package to check builddeps for" msgstr "को लागि builddeps जाँच्न कम्तिमा एउटा प्याकेज निर्दष्ट गर्नुपर्छ" -#: cmdline/apt-get.cc:2140 +#: cmdline/apt-get.cc:2158 #, c-format msgid "Unable to get build-dependency information for %s" msgstr "%s को लागि निर्माण-निर्भरता सूचना प्राप्त गर्न असक्षम भयो" -#: cmdline/apt-get.cc:2160 +#: cmdline/apt-get.cc:2178 #, c-format msgid "%s has no build depends.\n" msgstr "%s कुनै निर्माणमा आधारित हुदैन ।\n" -#: cmdline/apt-get.cc:2212 +#: cmdline/apt-get.cc:2230 #, c-format msgid "" "%s dependency for %s cannot be satisfied because the package %s cannot be " "found" msgstr "%s को लागि %s निर्भरता सन्तुष्ट हुन सकेन किनभने प्याकेज %s फेला पार्न सकिएन" -#: cmdline/apt-get.cc:2264 +#: cmdline/apt-get.cc:2282 #, c-format msgid "" "%s dependency for %s cannot be satisfied because no available versions of " @@ -1165,30 +1176,30 @@ msgstr "" "%sको लागि %s निर्भरता सन्तुष्ट हुन सकेन किन भने प्याकेज %s को कुनै उपलब्ध संस्करणले संस्करण " "आवश्यकताहरुलाई सन्तुष्ट पार्न सकेन " -#: cmdline/apt-get.cc:2299 +#: cmdline/apt-get.cc:2317 #, c-format msgid "Failed to satisfy %s dependency for %s: Installed package %s is too new" msgstr "%s को लागि %s निर्भरता सन्तुष्ट पार्न असफल भयो: स्थापित प्याकेज %s अति नयाँ छ" -#: cmdline/apt-get.cc:2324 +#: cmdline/apt-get.cc:2342 #, c-format msgid "Failed to satisfy %s dependency for %s: %s" msgstr "%s को लागि %s निर्भरता सन्तुष्ट गर्न असफल: %s" -#: cmdline/apt-get.cc:2338 +#: cmdline/apt-get.cc:2356 #, c-format msgid "Build-dependencies for %s could not be satisfied." msgstr "%s को लागि निर्माण निर्भरताहरू सन्तुष्ट गर्न सकिएन । " -#: cmdline/apt-get.cc:2342 +#: cmdline/apt-get.cc:2360 msgid "Failed to process build dependencies" msgstr "निर्माण निर्भरताहरू प्रक्रिया गर्न असफल" -#: cmdline/apt-get.cc:2374 +#: cmdline/apt-get.cc:2392 msgid "Supported modules:" msgstr "समर्थित मोड्युलहरू:" -#: cmdline/apt-get.cc:2415 +#: cmdline/apt-get.cc:2433 msgid "" "Usage: apt-get [options] command\n" " apt-get [options] install|remove pkg1 [pkg2 ...]\n" @@ -1369,19 +1380,19 @@ msgstr "उपलब्ध सूचना गाँभिदैछ" msgid "Failed to create pipes" msgstr "पाइपहरू सिर्जना गर्न असफल" -#: apt-inst/contrib/extracttar.cc:143 +#: apt-inst/contrib/extracttar.cc:144 msgid "Failed to exec gzip " msgstr "gzip कार्यन्वयन गर्न असफल" -#: apt-inst/contrib/extracttar.cc:180 apt-inst/contrib/extracttar.cc:206 +#: apt-inst/contrib/extracttar.cc:181 apt-inst/contrib/extracttar.cc:207 msgid "Corrupted archive" msgstr "संग्रह दूषित भयो" -#: apt-inst/contrib/extracttar.cc:195 +#: apt-inst/contrib/extracttar.cc:196 msgid "Tar checksum failed, archive corrupted" msgstr "टार चेकसम असफल भयो, संग्रह दूषित भयो" -#: apt-inst/contrib/extracttar.cc:298 +#: apt-inst/contrib/extracttar.cc:299 #, c-format msgid "Unknown TAR header type %u, member %s" msgstr "अज्ञात टार हेडर प्रकार %u, सदस्य %s" @@ -1660,12 +1671,12 @@ msgstr "डिस्क फेला परेन ।" msgid "File not found" msgstr "फाइल फेला परेन " -#: methods/copy.cc:42 methods/gpgv.cc:275 methods/gzip.cc:133 -#: methods/gzip.cc:142 +#: 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:272 methods/gzip.cc:139 +#: methods/copy.cc:79 methods/gpgv.cc:278 methods/gzip.cc:147 msgid "Failed to set modification time" msgstr "परिमार्जन समय सेट असफल भयो" @@ -1877,49 +1888,49 @@ msgstr " '%s:%s' (%i) हल गर्दा केही दुष्ट घट msgid "Unable to connect to %s %s:" msgstr "%s %s मा जडान गर्न असफल भयो:" -#: methods/gpgv.cc:64 +#: methods/gpgv.cc:65 #, c-format msgid "Couldn't access keyring: '%s'" msgstr "कुञ्जी घण्टी पहुँच गर्न सकिएन: '%s'" -#: methods/gpgv.cc:99 +#: methods/gpgv.cc:100 msgid "E: Argument list from Acquire::gpgv::Options too long. Exiting." msgstr "E: प्राप्त गर्नेबाट तर्क सूचि::gpgv::अति लामो विकल्पहरू अवस्थित छ ।" -#: methods/gpgv.cc:198 +#: methods/gpgv.cc:204 msgid "" "Internal error: Good signature, but could not determine key fingerprint?!" msgstr "आन्तरिक त्रुटि: असल हस्ताक्षर, तर कुञ्जी औठाछाप निर्धारण गर्न सकिएन?!" -#: methods/gpgv.cc:203 +#: methods/gpgv.cc:209 msgid "At least one invalid signature was encountered." msgstr "कम्तिमा एउटा अवैध हस्ताक्षर विरोध भयो ।" -#: methods/gpgv.cc:207 +#: methods/gpgv.cc:213 #, c-format msgid "Could not execute '%s' to verify signature (is gnupg installed?)" msgstr "हस्ताक्षर रूजू गर्न '%s' कार्यन्वयन गर्न सकिएन (के gnupg स्थापना भयो?)" -#: methods/gpgv.cc:212 +#: methods/gpgv.cc:218 msgid "Unknown error executing gpgv" msgstr "gpgv कार्यन्वयन गर्दा अज्ञात त्रुटि" -#: methods/gpgv.cc:243 +#: methods/gpgv.cc:249 msgid "The following signatures were invalid:\n" msgstr "निम्न हस्ताक्षरहरू अवैध छन्:\n" -#: methods/gpgv.cc:250 +#: methods/gpgv.cc:256 msgid "" "The following signatures couldn't be verified because the public key is not " "available:\n" msgstr "निम्न हस्ताक्षरहरू रूजू हुन सक्दैन किन भने सार्वजनिक कुञ्जी उपलब्ध छैन:\n" -#: methods/gzip.cc:57 +#: methods/gzip.cc:64 #, c-format msgid "Couldn't open pipe for %s" msgstr "%s को लागि पाइप खोल्न सकिएन" -#: methods/gzip.cc:102 +#: methods/gzip.cc:109 #, c-format msgid "Read error from %s process" msgstr "%s प्रक्रियाबाट त्रुटि पढ्नुहोस् " @@ -2284,12 +2295,12 @@ msgstr "उमेद्वार संस्करणहरू" msgid "Dependency generation" msgstr "निर्भरता सिर्जना" -#: apt-pkg/tagfile.cc:72 +#: apt-pkg/tagfile.cc:106 #, c-format msgid "Unable to parse package file %s (1)" msgstr "प्याकेज फाइल पद वर्णन गर्न असक्षम %s (१)" -#: apt-pkg/tagfile.cc:102 +#: apt-pkg/tagfile.cc:193 #, c-format msgid "Unable to parse package file %s (2)" msgstr "प्याकेज फाइल पद वर्णन गर्न असक्षम %s (२)" @@ -2726,3 +2737,6 @@ msgstr " %s पूर्ण रुपले हट्यो" #: methods/rsh.cc:330 msgid "Connection closed prematurely" msgstr "जडान असमायिक बन्द भयो" + +#~ msgid "File date has changed %s" +#~ msgstr "फाइल डेटाले %s परिवर्तन गर्यो" @@ -2618,8 +2618,7 @@ msgid "MD5Sum mismatch" msgstr "MD5Sum komt niet overeen" #: apt-pkg/acquire-item.cc:640 -#, fuzzy -msgid "There are no public key available for the following key IDs:\n" +msgid "There is no public key available for the following key IDs:\n" msgstr "" "Er zijn geen publieke sleutels beschikbaar voor de volgende sleutel-IDs:\n" @@ -2575,7 +2575,7 @@ msgid "MD5Sum mismatch" msgstr "Feil MD5-sum" #: apt-pkg/acquire-item.cc:640 -msgid "There are no public key available for the following key IDs:\n" +msgid "There is no public key available for the following key IDs:\n" msgstr "" #: apt-pkg/acquire-item.cc:753 @@ -2580,7 +2580,7 @@ msgstr "Bdna suma MD5" #: apt-pkg/acquire-item.cc:640 #, fuzzy -msgid "There are no public key available for the following key IDs:\n" +msgid "There is no public key available for the following key IDs:\n" msgstr "Dla nastpujcego identyfikatora klucza brakuje klucza publicznego:\n" #: apt-pkg/acquire-item.cc:753 @@ -2593,8 +2593,7 @@ msgid "MD5Sum mismatch" msgstr "MD5Sum incorreto" #: apt-pkg/acquire-item.cc:640 -#, fuzzy -msgid "There are no public key available for the following key IDs:\n" +msgid "There is no public key available for the following key IDs:\n" msgstr "" "Não existe qualquer chave pública disponível para as seguintes IDs de " "chave:\n" @@ -2788,7 +2787,6 @@ msgstr "Conexão encerrada prematuramente" #~ msgid "File date has changed %s" #~ msgstr "Data do ficheiro mudou %s" -#, fuzzy #~ msgid "Could not patch file" #~ msgstr "Não foi possível abrir ficheiro o %s" @@ -2853,54 +2851,41 @@ msgstr "Conexão encerrada prematuramente" #~ "Desculpe, você não tem espaço livre o suficiente em %s para guardar os ." #~ "debs." -#, fuzzy #~ msgid "Extract " #~ msgstr "extra" -#, fuzzy #~ msgid "De-replaced " #~ msgstr "Substitui" -#, fuzzy #~ msgid "Replaced file " #~ msgstr "Substitui" -#, fuzzy #~ msgid "You must give at least one file name" #~ msgstr "Você deve passar exatamente um padrão" -#, fuzzy #~ msgid "Regex compilation error" #~ msgstr "Erro de compilação de regex - %s" -#, fuzzy #~ msgid "Failed to stat %s%s" #~ msgstr "Falha ao baixar %s %s\n" -#, fuzzy #~ msgid "Failed to open %s.new" #~ msgstr "Falha ao baixar %s %s\n" -#, fuzzy #~ msgid "Failed to rename %s.new to %s" #~ msgstr "Falha ao baixar %s %s\n" -#, fuzzy #~ msgid "Couldn't wait for subprocess" #~ msgstr "Não foi possível checar a lista de pacotes fonte %s" -#, fuzzy #~ msgid " files " #~ msgstr " falhou." -#, fuzzy #~ msgid "Done. " #~ msgstr "Pronto" -#, fuzzy #~ msgid "Could not find a record in the DSC '%s'" #~ msgstr "Impossível achar pacote %s" -#, fuzzy #~ msgid "Failed too stat %s" #~ msgstr "Impossível checar %s." diff --git a/po/pt_BR.po b/po/pt_BR.po index 3e4a5e0bf..4de48eca4 100644 --- a/po/pt_BR.po +++ b/po/pt_BR.po @@ -2593,8 +2593,7 @@ msgid "MD5Sum mismatch" msgstr "MD5Sum incorreto" #: apt-pkg/acquire-item.cc:640 -#, fuzzy -msgid "There are no public key available for the following key IDs:\n" +msgid "There is no public key available for the following key IDs:\n" msgstr "Não existem chaves públicas para os seguintes IDs de chaves:\n" #: apt-pkg/acquire-item.cc:753 @@ -2825,54 +2824,41 @@ msgstr "Conexão encerrada prematuramente" #~ "Desculpe, você não tem espaço livre o suficiente em %s para guardar os ." #~ "debs." -#, fuzzy #~ msgid "Extract " #~ msgstr "extra" -#, fuzzy #~ msgid "De-replaced " #~ msgstr "Substitui" -#, fuzzy #~ msgid "Replaced file " #~ msgstr "Substitui" -#, fuzzy #~ msgid "You must give at least one file name" #~ msgstr "Você deve passar exatamente um padrão" -#, fuzzy #~ msgid "Regex compilation error" #~ msgstr "Erro de compilação de regex - %s" -#, fuzzy #~ msgid "Failed to stat %s%s" #~ msgstr "Falha ao baixar %s %s\n" -#, fuzzy #~ msgid "Failed to open %s.new" #~ msgstr "Falha ao baixar %s %s\n" -#, fuzzy #~ msgid "Failed to rename %s.new to %s" #~ msgstr "Falha ao baixar %s %s\n" -#, fuzzy #~ msgid "Couldn't wait for subprocess" #~ msgstr "Não foi possível checar a lista de pacotes fonte %s" -#, fuzzy #~ msgid " files " #~ msgstr " falhou." -#, fuzzy #~ msgid "Done. " #~ msgstr "Pronto" -#, fuzzy #~ msgid "Could not find a record in the DSC '%s'" #~ msgstr "Impossível achar pacote %s" -#, fuzzy #~ msgid "Failed too stat %s" #~ msgstr "Impossível checar %s." @@ -2598,8 +2598,7 @@ msgid "MD5Sum mismatch" msgstr "Nepotrivire MD5Sum" #: apt-pkg/acquire-item.cc:640 -#, fuzzy -msgid "There are no public key available for the following key IDs:\n" +msgid "There is no public key available for the following key IDs:\n" msgstr "" "Nu există nici o cheie publică disponibilă pentru următoarele " "identificatoare de chei:\n" @@ -1,4 +1,4 @@ -# translation of apt_ru.po to Russian +# translation of apt_0.6.46.4_ru.po to Russian # Russian messages for the apt suite. # # Vadim Kutchin <amadis@chemi.komisc.ru>, 2002. @@ -7,21 +7,20 @@ # Nikolai Prokoschenko <nikolai@prokoschenko.de>, 2004. # Dmitry Astapov <adept@umc.com.ua>, 2004. # Dmitry Astapov <adept@despammed.com>, 2004. -# Yuri Kozlov <kozlov.y@gmail.com>, 2004, 2005, 2006. +# Yuri Kozlov <kozlov.y@gmail.com>, 2004, 2005, 2006, 2007. msgid "" msgstr "" -"Project-Id-Version: 0.6.46.2\n" +"Project-Id-Version: 0.6.46.4\n" "Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2006-10-11 20:34+0200\n" -"PO-Revision-Date: 2006-10-16 21:53+0400\n" +"POT-Creation-Date: 2006-12-04 17:45+0000\n" +"PO-Revision-Date: 2007-01-03 23:33+0300\n" "Last-Translator: Yuri Kozlov <kozlov.y@gmail.com>\n" "Language-Team: Russian <debian-l10n-russian@lists.debian.org>\n" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=UTF-8\n" "Content-Transfer-Encoding: 8bit\n" -"X-Generator: KBabel 1.11.2\n" -"Plural-Forms: nplurals=3; plural=(n%10==1 && n%100!=11 ? 0 : n%10>=2 && n%" -"10<=4 && (n%100<10 || n%100>=20) ? 1 : 2);\n" +"X-Generator: KBabel 1.11.4\n" +"Plural-Forms: nplurals=3; plural=(n%10==1 && n%100!=11 ? 0 : n%10>=2 && n%10<=4 && (n%100<10 || n%100>=20) ? 1 : 2);\n" "10<=4 && (n%100<10 || n%100>=20) ? 1 : 2);\n" #: cmdline/apt-cache.cc:135 @@ -34,7 +33,7 @@ msgstr "Пакет %s версии %s имеет неудовлетворённ #: cmdline/apt-cache.cc:1508 #, c-format msgid "Unable to locate package %s" -msgstr "Не могу найти пакет %s" +msgstr "Не удалось найти пакет %s" #: cmdline/apt-cache.cc:232 msgid "Total package names : " @@ -86,7 +85,7 @@ msgstr "Всего информации о зависимостях: " #: cmdline/apt-cache.cc:316 msgid "Total slack space: " -msgstr "Пустого места в кэше: " +msgstr "Пустого места в кеше: " #: cmdline/apt-cache.cc:324 msgid "Total space accounted for: " @@ -99,7 +98,7 @@ msgstr "Список пакетов %s рассинхронизирован." #: cmdline/apt-cache.cc:1231 msgid "You must give exactly one pattern" -msgstr "Вы должны задать ровно один шаблон" +msgstr "Вы должны задать только один шаблон" #: cmdline/apt-cache.cc:1385 msgid "No packages found" @@ -111,7 +110,7 @@ msgstr "Списки пакетов:" #: cmdline/apt-cache.cc:1469 cmdline/apt-cache.cc:1555 msgid "Cache is out of sync, can't x-ref a package file" -msgstr "Кэш рассинхронизирован, невозможно обнаружить ссылку на список пакетов" +msgstr "Кеш рассинхронизирован, невозможно обнаружить ссылку на список пакетов" #: cmdline/apt-cache.cc:1470 #, c-format @@ -206,10 +205,10 @@ msgstr "" " или: apt-cache [options] showsrc pkg1 [pkg2 ...]\n" "\n" "apt-cache - низкоуровневый инструмент, использующийся для управления\n" -"двоичными кэш-файлами APT'а, а также для извлечения информации из них\n" +"двоичными кеш-файлами APT'а, а также для извлечения информации из них\n" "Команды:\n" -" add - добавить файл пакета в кэш исходников\n" -" gencaches - построить оба кэша пакетов - бинарных и с исходными текстами\n" +" add - добавить файл пакета в кеш исходников\n" +" gencaches - построить оба кеша пакетов - бинарных и с исходными текстами\n" " showpkg - общая информация о конкретном пакете\n" " stats - основная статистика\n" " dump - показать весь файл в сжатой форме\n" @@ -226,8 +225,8 @@ msgstr "" "\n" "Опции:\n" " -h Этот текст.\n" -" -p=? Кэш пакетов.\n" -" -s=? Кэш исходников.\n" +" -p=? Кеш пакетов.\n" +" -s=? Кеш исходников.\n" " -q Не показывать индикатор прогресса.\n" " -i Показывать только важные зависимости для команды unmet.\n" " -c=? Читать указанный файл конфигурации.\n" @@ -336,8 +335,7 @@ msgstr "" #: ftparchive/apt-ftparchive.cc:371 msgid "Error writing header to contents file" -msgstr "" -"Ошибка записи заголовка в полный перечень содержимого пакетов (Contents)" +msgstr "Ошибка записи заголовка в полный перечень содержимого пакетов (Contents)" #: ftparchive/apt-ftparchive.cc:401 #, c-format @@ -424,7 +422,7 @@ msgstr "" " -s=? Указать файл переназначений (override) для пакетов с исходными " "текстами\n" " -q Не выводить сообщения в процессе работы\n" -" -d=? Указать кэширующую базу данных (не обязательно)\n" +" -d=? Указать кеширующую базу данных (не обязательно)\n" " --no-delink Включить режим отладки процесса удаления файлов\n" " --contents Управление генерацией полного перечня содержимого пакетов\n" " (файла Contents)\n" @@ -455,8 +453,8 @@ msgid "" "DB format is invalid. If you upgraded from a older version of apt, please " "remove and re-create the database." msgstr "" -"Неправильный формат базы данных (DB). Если вы производили обновление apt, " -"удалите и пересоздайте базу данных." +"Некорректный формат базы данных (DB). Если вы обновляли версию apt, " +"удалите и создайте базу данных заново." #: ftparchive/cachedb.cc:81 #, c-format @@ -604,8 +602,7 @@ msgstr "Неизвестный алгоритм сжатия '%s'" #: ftparchive/multicompress.cc:105 #, c-format msgid "Compressed output %s needs a compression set" -msgstr "" -"Для получения сжатого вывода %s необходимо включить использования сжатия" +msgstr "Для получения сжатого вывода %s необходимо включить использования сжатия" #: ftparchive/multicompress.cc:172 methods/rsh.cc:91 msgid "Failed to create IPC pipe to subprocess" @@ -723,8 +720,7 @@ msgstr "Пакеты, будут заменены на более СТАРЫЕ #: cmdline/apt-get.cc:485 msgid "The following held packages will be changed:" -msgstr "" -"Пакеты, которые должны были бы остаться без изменений, но будут заменены:" +msgstr "Пакеты, которые должны были бы остаться без изменений, но будут заменены:" #: cmdline/apt-get.cc:538 #, c-format @@ -854,14 +850,12 @@ msgstr "Необходимо скачать %sБ архивов.\n" #: cmdline/apt-get.cc:829 #, c-format msgid "After unpacking %sB of additional disk space will be used.\n" -msgstr "" -"После распаковки объем занятого дискового пространства возрастёт на %sB.\n" +msgstr "После распаковки объем занятого дискового пространства возрастёт на %sB.\n" #: cmdline/apt-get.cc:832 #, c-format msgid "After unpacking %sB disk space will be freed.\n" -msgstr "" -"После распаковки объем занятого дискового пространства уменьшится на %sB.\n" +msgstr "После распаковки объем занятого дискового пространства уменьшится на %sB.\n" #: cmdline/apt-get.cc:846 cmdline/apt-get.cc:1989 #, c-format @@ -943,8 +937,7 @@ msgstr "Заметьте, вместо %2$s выбирается %1$s\n" #: cmdline/apt-get.cc:1040 #, c-format msgid "Skipping %s, it is already installed and upgrade is not set.\n" -msgstr "" -"Пропускается %s - пакет уже установлен, и опция upgrade не установлена.\n" +msgstr "Пропускается %s - пакет уже установлен, и опция upgrade не установлена.\n" #: cmdline/apt-get.cc:1058 #, c-format @@ -1032,7 +1025,7 @@ msgstr "Внутренняя ошибка, AllUpgrade все поломал" #: cmdline/apt-get.cc:1493 cmdline/apt-get.cc:1529 #, c-format msgid "Couldn't find package %s" -msgstr "Не могу найти пакет %s" +msgstr "Не удалось найти пакет %s" #: cmdline/apt-get.cc:1516 #, c-format @@ -1060,9 +1053,9 @@ msgid "" "distribution that some required packages have not yet been created\n" "or been moved out of Incoming." msgstr "" -"Некоторые пакеты невозможно установить. Возможно, Вы просите невозможного,\n" -"или же используете нестабильного дистрибутив, и запрошенные Вами пакеты\n" -"ещё не созданы или были удалены из Incoming." +"Некоторые пакеты невозможно установить. Возможно, вы просите невозможного,\n" +"или же используете нестабильную версию дистрибутива, где запрошенные вами\n" +"пакеты ещё не созданы или были удалены из Incoming." #: cmdline/apt-get.cc:1569 msgid "" @@ -1070,13 +1063,13 @@ msgid "" "the package is simply not installable and a bug report against\n" "that package should be filed." msgstr "" -"Так как Вы просили выполнить только одну операцию, то вероятнее всего, что\n" +"Так как вы просили выполнить только одну операцию, то вероятнее всего, что\n" "пакет просто не может быть установлен из-за ошибок в самом пакете.\n" "Необходимо послать отчёт об этой ошибке." #: cmdline/apt-get.cc:1574 msgid "The following information may help to resolve the situation:" -msgstr "Следующая информация возможно поможет Вам:" +msgstr "Следующая информация, возможно, поможет вам:" #: cmdline/apt-get.cc:1577 msgid "Broken packages" @@ -1319,7 +1312,7 @@ msgstr "" #: cmdline/acqprogress.cc:55 msgid "Hit " -msgstr "В кэше " +msgstr "В кеше " #: cmdline/acqprogress.cc:79 msgid "Get:" @@ -1400,12 +1393,10 @@ msgstr "установленных пакетов. Это может приве #: dselect/install:102 msgid "or errors caused by missing dependencies. This is OK, only the errors" -msgstr "" -"возникновению новых из-за неудовлетворённых зависимостей. Это нормально," +msgstr "возникновению новых из-за неудовлетворённых зависимостей. Это нормально," #: dselect/install:103 -msgid "" -"above this message are important. Please fix them and run [I]nstall again" +msgid "above this message are important. Please fix them and run [I]nstall again" msgstr "" "важны только ошибки, указанные выше. Исправьте их и выполните установку ещё " "раз" @@ -1461,7 +1452,7 @@ msgstr "DropNode вызван для узла, который ещё испол #: apt-inst/filelist.cc:416 msgid "Failed to locate the hash element!" -msgstr "Не удалось найти элемент хэша!" +msgstr "Не удалось найти элемент хеша!" #: apt-inst/filelist.cc:463 msgid "Failed to allocate diversion" @@ -1527,7 +1518,7 @@ msgstr "Каталог %s был заменён не-каталогом" #: apt-inst/extract.cc:283 msgid "Failed to locate node in its hash bucket" -msgstr "Не удалось разместить узел в хэше" +msgstr "Не удалось разместить узел в хеше" #: apt-inst/extract.cc:287 msgid "The path is too long" @@ -1602,8 +1593,8 @@ msgid "" "then make it empty and immediately re-install the same version of the " "package!" msgstr "" -"Не удалось открыть список файлов '%sinfo/%s'. Если Вы не можете восстановить " -"его, то обнулите его и немедленно переустановите такую же версию пакета!" +"Не удалось открыть список файлов '%sinfo/%s'. Если вы не сможете восстановить " +"этот файл, то обнулите его и немедленно переустановите ту же версию пакета!" #: apt-inst/deb/dpkgdb.cc:229 apt-inst/deb/dpkgdb.cc:242 #, c-format @@ -1612,7 +1603,7 @@ msgstr "Ошибка чтения списка файлов %sinfo/%s" #: apt-inst/deb/dpkgdb.cc:266 msgid "Internal error getting a node" -msgstr "Внутренняя ошибка при получении Node" +msgstr "Внутренняя ошибка при получении node" #: apt-inst/deb/dpkgdb.cc:309 #, c-format @@ -1635,7 +1626,7 @@ msgstr "Внутренняя ошибка при добавлении diversion" #: apt-inst/deb/dpkgdb.cc:383 msgid "The pkg cache must be initialized first" -msgstr "В первую очередь должен быть проинициализирован кэш пакетов" +msgstr "В первую очередь должен быть проинициализирован кеш пакетов" #: apt-inst/deb/dpkgdb.cc:443 #, c-format @@ -1665,19 +1656,19 @@ msgstr "Это неправильный DEB-архив - отсутствует #: apt-inst/deb/debfile.cc:112 #, c-format msgid "Couldn't change to %s" -msgstr "Не могу перейти в каталог %s" +msgstr "Не удалось перейти в каталог %s" #: apt-inst/deb/debfile.cc:138 msgid "Internal error, could not locate member" -msgstr "Внутренняя ошибка, не могу найти составную часть" +msgstr "Внутренняя ошибка, не удалось найти составную часть" #: apt-inst/deb/debfile.cc:171 msgid "Failed to locate a valid control file" -msgstr "Не могу найти правильный control-файл" +msgstr "Не удалось найти правильный control-файл" #: apt-inst/deb/debfile.cc:256 msgid "Unparsable control file" -msgstr "Не могу прочесть содержимое control-файла" +msgstr "Не удалось прочесть содержимое control-файла" #: methods/cdrom.cc:114 #, c-format @@ -1710,11 +1701,12 @@ msgid "File not found" msgstr "Файл не найден" #: methods/copy.cc:42 methods/gpgv.cc:281 methods/gzip.cc:141 -#: methods/gzip.cc:150 +#: methods/gzip.cc:150 methods/rred.cc:234 methods/rred.cc:243 msgid "Failed to stat" msgstr "Не удалось получить атрибуты" #: methods/copy.cc:79 methods/gpgv.cc:278 methods/gzip.cc:147 +#: methods/rred.cc:240 msgid "Failed to set modification time" msgstr "Не удалось установить время модификации" @@ -1725,7 +1717,7 @@ msgstr "Неправильный URI, локальный URI не должен #. Login must be before getpeername otherwise dante won't work. #: methods/ftp.cc:162 msgid "Logging in" -msgstr "Вход в систему " +msgstr "Вход в систему" #: methods/ftp.cc:168 msgid "Unable to determine the peer name" @@ -1801,7 +1793,7 @@ msgstr "Не удалось создать сокет" #: methods/ftp.cc:698 msgid "Could not connect data socket, connection timed out" msgstr "" -"Не могу присоединиться к сокету данных, время на установление соединения " +"Не удалось присоединиться к сокету данных, время на установление соединения " "истекло" #: methods/ftp.cc:704 @@ -1818,7 +1810,7 @@ msgstr "Невозможно присоединиться к сокету" #: methods/ftp.cc:740 msgid "Could not listen on the socket" -msgstr "Не могу принимать соединения на сокете" +msgstr "Не удалось принимать соединения на сокете" #: methods/ftp.cc:747 msgid "Could not determine the socket's name" @@ -1846,9 +1838,9 @@ 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:957 methods/rsh.cc:303 msgid "Problem hashing file" -msgstr "Проблема при хэшировании файла" +msgstr "Проблема при хешировании файла" #: methods/ftp.cc:877 #, c-format @@ -1913,7 +1905,7 @@ msgstr "Соединение с %s" #: methods/connect.cc:167 #, c-format msgid "Could not resolve '%s'" -msgstr "Не могу найти IP адрес для %s" +msgstr "Не удалось найти IP адрес для %s" #: methods/connect.cc:173 #, c-format @@ -1923,8 +1915,7 @@ msgstr "Временная ошибка при попытке получить I #: methods/connect.cc:176 #, c-format msgid "Something wicked happened resolving '%s:%s' (%i)" -msgstr "" -"Что-то странное произошло при попытке получить IP адрес для '%s:%s' (%i)" +msgstr "Что-то странное произошло при попытке получить IP адрес для '%s:%s' (%i)" #: methods/connect.cc:223 #, c-format @@ -1943,8 +1934,7 @@ msgstr "" "работы." #: methods/gpgv.cc:204 -msgid "" -"Internal error: Good signature, but could not determine key fingerprint?!" +msgid "Internal error: Good signature, but could not determine key fingerprint?!" msgstr "" "Внутренняя ошибка: Правильная подпись, но не удалось определить отпечаток " "ключа?!" @@ -1970,8 +1960,7 @@ msgstr "Следующие подписи неверные:\n" msgid "" "The following signatures couldn't be verified because the public key is not " "available:\n" -msgstr "" -"Следующие подписи не могут быть проверены, так как недоступен общий ключ:\n" +msgstr "Следующие подписи не могут быть проверены, так как недоступен общий ключ:\n" #: methods/gzip.cc:64 #, c-format @@ -1983,76 +1972,76 @@ msgstr "Не удалось открыть канал для %s" msgid "Read error from %s process" msgstr "Ошибка чтения из процесса %s" -#: methods/http.cc:376 +#: methods/http.cc:375 msgid "Waiting for headers" msgstr "Ожидание заголовков" -#: methods/http.cc:522 +#: methods/http.cc:521 #, c-format msgid "Got a single header line over %u chars" msgstr "Получен заголовок длиннее %u символов" -#: methods/http.cc:530 +#: methods/http.cc:529 msgid "Bad header line" msgstr "Неверный заголовок" -#: methods/http.cc:549 methods/http.cc:556 +#: methods/http.cc:548 methods/http.cc:555 msgid "The HTTP server sent an invalid reply header" msgstr "Http-сервер послал неверный заголовок" -#: methods/http.cc:585 +#: methods/http.cc:584 msgid "The HTTP server sent an invalid Content-Length header" msgstr "Http сервер послал неверный заголовок Content-Length" -#: methods/http.cc:600 +#: methods/http.cc:599 msgid "The HTTP server sent an invalid Content-Range header" msgstr "Http-сервер послал неверный заголовок Content-Range" -#: methods/http.cc:602 +#: methods/http.cc:601 msgid "This HTTP server has broken range support" msgstr "Этот http-сервер не поддерживает загрузку фрагментов файлов" -#: methods/http.cc:626 +#: methods/http.cc:625 msgid "Unknown date format" msgstr "Неизвестный формат данных" -#: methods/http.cc:773 +#: methods/http.cc:772 msgid "Select failed" msgstr "Ошибка в select" -#: methods/http.cc:778 +#: methods/http.cc:777 msgid "Connection timed out" msgstr "Время ожидания для соединения истекло" -#: methods/http.cc:801 +#: methods/http.cc:800 msgid "Error writing to output file" msgstr "Ошибка записи в выходной файл" -#: methods/http.cc:832 +#: methods/http.cc:831 msgid "Error writing to file" msgstr "Ошибка записи в файл" -#: methods/http.cc:860 +#: methods/http.cc:859 msgid "Error writing to the file" msgstr "Ошибка записи в файл" -#: methods/http.cc:874 +#: methods/http.cc:873 msgid "Error reading from server. Remote end closed connection" msgstr "Ошибка чтения, удалённый сервер прервал соединение" -#: methods/http.cc:876 +#: methods/http.cc:875 msgid "Error reading from server" msgstr "Ошибка чтения с сервера" -#: methods/http.cc:1107 +#: methods/http.cc:1106 msgid "Bad header data" msgstr "Неверный заголовок данных" -#: methods/http.cc:1124 +#: methods/http.cc:1123 msgid "Connection failed" msgstr "Соединение разорвано" -#: methods/http.cc:1215 +#: methods/http.cc:1214 msgid "Internal error" msgstr "Внутренняя ошибка" @@ -2093,7 +2082,7 @@ msgstr "Синтаксическая ошибка %s:%u: в начале бло #: apt-pkg/contrib/configuration.cc:627 #, c-format msgid "Syntax error %s:%u: Malformed tag" -msgstr "Синтаксическая ошибка %s:%u: искажённый тэг" +msgstr "Синтаксическая ошибка %s:%u: искажённый тег" #: apt-pkg/contrib/configuration.cc:644 #, c-format @@ -2127,12 +2116,12 @@ msgstr "Синтаксическая ошибка %s:%u: не поддержив msgid "Syntax error %s:%u: Extra junk at end of file" msgstr "Синтаксическая ошибка %s:%u: лишние символы в конце файла" -#: apt-pkg/contrib/progress.cc:154 +#: apt-pkg/contrib/progress.cc:155 #, c-format msgid "%c%s... Error!" msgstr "%c%s... Ошибка!" -#: apt-pkg/contrib/progress.cc:156 +#: apt-pkg/contrib/progress.cc:157 #, c-format msgid "%c%s... Done" msgstr "%c%s... Готово" @@ -2207,7 +2196,7 @@ msgstr "" #: apt-pkg/contrib/fileutl.cc:87 #, c-format msgid "Could not open lock file %s" -msgstr "Не могу открыть файл блокировки %s" +msgstr "Не удалось открыть файл блокировки %s" #: apt-pkg/contrib/fileutl.cc:105 #, c-format @@ -2219,7 +2208,7 @@ msgstr "" #: apt-pkg/contrib/fileutl.cc:109 #, c-format msgid "Could not get lock %s" -msgstr "Не могу получить доступ к файлу блокировки %s" +msgstr "Не удалось получить доступ к файлу блокировки %s" #: apt-pkg/contrib/fileutl.cc:377 #, c-format @@ -2229,8 +2218,7 @@ msgstr "Ожидалось завершение процесса %s, но он #: apt-pkg/contrib/fileutl.cc:387 #, c-format msgid "Sub-process %s received a segmentation fault." -msgstr "" -"Нарушение защиты памяти (segmentation fault) в порождённом процессе %s." +msgstr "Нарушение защиты памяти (segmentation fault) в порождённом процессе %s." #: apt-pkg/contrib/fileutl.cc:390 #, c-format @@ -2245,13 +2233,12 @@ msgstr "Порождённый процесс %s неожиданно завер #: apt-pkg/contrib/fileutl.cc:436 #, c-format msgid "Could not open file %s" -msgstr "Не могу открыть файл %s" +msgstr "Не удалось открыть файл %s" #: apt-pkg/contrib/fileutl.cc:492 #, c-format msgid "read, still have %lu to read but none left" -msgstr "" -"ошибка при чтении. собирались прочесть ещё %lu байт, но ничего больше нет" +msgstr "ошибка при чтении. собирались прочесть ещё %lu байт, но ничего больше нет" #: apt-pkg/contrib/fileutl.cc:522 #, c-format @@ -2272,24 +2259,24 @@ msgstr "Проблема при синхронизации файловых бу #: apt-pkg/pkgcache.cc:126 msgid "Empty package cache" -msgstr "Кэш пакетов пуст" +msgstr "Кеш пакетов пуст" #: apt-pkg/pkgcache.cc:132 msgid "The package cache file is corrupted" -msgstr "Кэш пакетов повреждён" +msgstr "Кеш пакетов повреждён" #: apt-pkg/pkgcache.cc:137 msgid "The package cache file is an incompatible version" -msgstr "Не поддерживаемая версия кэша пакетов" +msgstr "Не поддерживаемая версия кеша пакетов" #: apt-pkg/pkgcache.cc:142 #, c-format msgid "This APT does not support the versioning system '%s'" -msgstr "Данный APT не поддерживает Систему Версий '%s'" +msgstr "Данный APT не поддерживает систему версий '%s'" #: apt-pkg/pkgcache.cc:147 msgid "The package cache was built for a different architecture" -msgstr "Кэш пакетов был собран для другой архитектуры" +msgstr "Кеш пакетов был собран для другой архитектуры" #: apt-pkg/pkgcache.cc:218 msgid "Depends" @@ -2369,8 +2356,7 @@ msgstr "Искажённая строка %lu в списке источнико #: apt-pkg/sourcelist.cc:96 #, c-format msgid "Malformed line %lu in source list %s (dist)" -msgstr "" -"Искажённая строка %lu в списке источников %s (проблема в имени дистрибутива)" +msgstr "Искажённая строка %lu в списке источников %s (проблема в имени дистрибутива)" #: apt-pkg/sourcelist.cc:99 #, c-format @@ -2422,7 +2408,7 @@ msgstr "" "Вследствие возникновения циклических зависимостей типа Конфликтует/" "ПредЗависит, для продолжения установки необходимо временно удалить " "существенно важный пакет %s. Это может привести к фатальным последствиям. " -"Если Вы действительно хотите продолжить, включите опцию APT::Force-LoopBreak." +"Если вы действительно хотите продолжить, включите опцию APT::Force-LoopBreak." #: apt-pkg/pkgrecords.cc:37 #, c-format @@ -2431,9 +2417,8 @@ msgstr "Не поддерживается индексный файл типа ' #: apt-pkg/algorithms.cc:241 #, c-format -msgid "" -"The package %s needs to be reinstalled, but I can't find an archive for it." -msgstr "Пакет %s нуждается в переустановке, но я не могу найти архив для него." +msgid "The package %s needs to be reinstalled, but I can't find an archive for it." +msgstr "Пакет %s нуждается в переустановке, но найти архив для него не удалось." #: apt-pkg/algorithms.cc:1059 msgid "" @@ -2445,7 +2430,7 @@ msgstr "" #: apt-pkg/algorithms.cc:1061 msgid "Unable to correct problems, you have held broken packages." -msgstr "Невозможно исправить ошибки, у Вас отложены (held) битые пакеты." +msgstr "Невозможно исправить ошибки, у вас отложены (held) битые пакеты." #: apt-pkg/acquire.cc:62 #, c-format @@ -2525,7 +2510,7 @@ msgstr "Для фиксации не указан приоритет (или у #: apt-pkg/pkgcachegen.cc:74 msgid "Cache has an incompatible versioning system" -msgstr "Кэш имеет несовместимую систему версий" +msgstr "Кеш имеет несовместимую систему версий" #: apt-pkg/pkgcachegen.cc:117 #, c-format @@ -2600,47 +2585,46 @@ msgstr "Сбор информации о Provides" #: apt-pkg/pkgcachegen.cc:785 apt-pkg/pkgcachegen.cc:792 msgid "IO Error saving source cache" -msgstr "Ошибка ввода/вывода при попытке сохранить кэш исходных текстов" +msgstr "Ошибка ввода/вывода при попытке сохранить кеш исходных текстов" -#: apt-pkg/acquire-item.cc:126 +#: apt-pkg/acquire-item.cc:130 #, c-format msgid "rename failed, %s (%s -> %s)." msgstr "переименовать не удалось, %s (%s -> %s)." -#: apt-pkg/acquire-item.cc:236 apt-pkg/acquire-item.cc:945 +#: apt-pkg/acquire-item.cc:410 apt-pkg/acquire-item.cc:660 +#: apt-pkg/acquire-item.cc:1375 msgid "MD5Sum mismatch" msgstr "MD5Sum не совпадает" -#: apt-pkg/acquire-item.cc:640 -#, fuzzy -msgid "There are no public key available for the following key IDs:\n" -msgstr "Недоступен общий ключ для следующих ключей (ID):\n" +#: apt-pkg/acquire-item.cc:1070 +msgid "There is no public key available for the following key IDs:\n" +msgstr "Недоступен общий ключ для следующих ID ключей:\n" -#: apt-pkg/acquire-item.cc:753 +#: apt-pkg/acquire-item.cc:1183 #, 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 "" -"Я не в состоянии обнаружить файл пакета %s. Это может означать, что Вам " +"Не удалось обнаружить файл пакета %s. Это может означать, что вам " "придётся вручную исправить этот пакет (возможно, пропущен arch)" -#: apt-pkg/acquire-item.cc:812 +#: apt-pkg/acquire-item.cc:1242 #, 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 "" -"Я не в состоянии обнаружить файл пакета %s. Это может означать, что Вам " +"Не удалось обнаружить файл пакета %s. Это может означать, что вам " "придётся вручную исправить этот пакет." -#: apt-pkg/acquire-item.cc:848 +#: apt-pkg/acquire-item.cc:1278 #, c-format -msgid "" -"The package index files are corrupted. No Filename: field for package %s." +msgid "The package index files are corrupted. No Filename: field for package %s." msgstr "Некорректный перечень пакетов. Нет поля Filename: для пакета %s." -#: apt-pkg/acquire-item.cc:935 +#: apt-pkg/acquire-item.cc:1365 msgid "Size mismatch" msgstr "Не совпадает размер" @@ -2797,6 +2781,11 @@ msgstr "Подготовка к полному удалению %s" msgid "Completely removed %s" msgstr "%s полностью удалён" +#: methods/rred.cc:219 +msgid "Could not patch file" +msgstr "Не удалось пропатчить файл" + #: methods/rsh.cc:330 msgid "Connection closed prematurely" msgstr "Соединение закрыто преждевременно" + @@ -2561,8 +2561,7 @@ msgid "MD5Sum mismatch" msgstr "Nezhoda MD5 súčtov" #: apt-pkg/acquire-item.cc:640 -#, fuzzy -msgid "There are no public key available for the following key IDs:\n" +msgid "There is no public key available for the following key IDs:\n" msgstr "Nie sú dostupné žiadne verejné kľúče ku kľúčom s nasledovnými ID:\n" #: apt-pkg/acquire-item.cc:753 @@ -2750,6 +2749,5 @@ msgstr "Spojenie bolo predčasne ukončené" #~ msgid "File date has changed %s" #~ msgstr "Dátum súboru sa zmenil %s" -#, fuzzy #~ msgid "Could not patch file" #~ msgstr "Súbor %s sa nedá otvoriť súbor" @@ -2564,7 +2564,7 @@ msgid "MD5Sum mismatch" msgstr "Neujemanje vsote MD5" #: apt-pkg/acquire-item.cc:640 -msgid "There are no public key available for the following key IDs:\n" +msgid "There is no public key available for the following key IDs:\n" msgstr "" #: apt-pkg/acquire-item.cc:753 @@ -2594,8 +2594,7 @@ msgid "MD5Sum mismatch" msgstr "MD5-kontrollsumma stmmer inte" #: apt-pkg/acquire-item.cc:640 -#, fuzzy -msgid "There are no public key available for the following key IDs:\n" +msgid "There is no public key available for the following key IDs:\n" msgstr "Det finns ingen publik nyckel tillgnglig fr fljande nyckel-id:n:\n" #: apt-pkg/acquire-item.cc:753 @@ -10,8 +10,8 @@ msgid "" msgstr "" "Project-Id-Version: apt\n" "Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2006-10-11 20:34+0200\n" -"PO-Revision-Date: 2006-03-16 15:53+0800\n" +"POT-Creation-Date: 2006-12-19 11:37+0100\n" +"PO-Revision-Date: 2007-03-29 21:36+0800\n" "Last-Translator: Eric Pareja <xenos@upm.edu.ph>\n" "Language-Team: Tagalog <debian-tl@banwa.upm.edu.ph>\n" "MIME-Version: 1.0\n" @@ -449,6 +449,8 @@ msgid "" "DB format is invalid. If you upgraded from a older version of apt, please " "remove and re-create the database." msgstr "" +"Hindi tanggap ang anyo ng DB. Kung kayo ay nagsariwa mula sa nakaraang " +"bersiyon ng apt, tanggalin at likhain muli ang database." #: ftparchive/cachedb.cc:81 #, c-format @@ -545,14 +547,14 @@ msgid " %s maintainer is %s not %s\n" msgstr " Tagapangalaga ng %s ay %s hindi %s\n" #: ftparchive/writer.cc:623 -#, fuzzy, c-format +#, c-format msgid " %s has no source override entry\n" -msgstr " %s ay walang override entry\n" +msgstr " %s ay walang override entry para sa pinagmulan\n" #: ftparchive/writer.cc:627 -#, fuzzy, c-format +#, c-format msgid " %s has no binary override entry either\n" -msgstr " %s ay walang override entry\n" +msgstr " %s ay wala ring override entry na binary\n" #: ftparchive/contents.cc:317 #, c-format @@ -1783,11 +1785,11 @@ msgstr "Hindi maka-likha ng socket" #: methods/ftp.cc:698 msgid "Could not connect data socket, connection timed out" -msgstr "Hindi maka-konek sa socket ng datos, nag-time-out ang koneksyon" +msgstr "Hindi maka-konekta sa socket ng datos, nag-time-out ang koneksyon" #: methods/ftp.cc:704 msgid "Could not connect passive socket." -msgstr "Hindi maka-konek sa socket na passive." +msgstr "Hindi maka-konekta sa socket na passive." #: methods/ftp.cc:722 msgid "getaddrinfo was unable to get a listening socket" @@ -1827,7 +1829,7 @@ msgstr "Nag-timeout ang socket ng datos" msgid "Unable to accept connection" msgstr "Hindi makatanggap ng koneksyon" -#: methods/ftp.cc:864 methods/http.cc:958 methods/rsh.cc:303 +#: methods/ftp.cc:864 methods/http.cc:959 methods/rsh.cc:303 msgid "Problem hashing file" msgstr "Problema sa pag-hash ng talaksan" @@ -1857,7 +1859,7 @@ msgstr "Hindi ma-invoke " #: methods/connect.cc:64 #, c-format msgid "Connecting to %s (%s)" -msgstr "Kumokonek sa %s (%s)" +msgstr "Kumokonekta sa %s (%s)" #: methods/connect.cc:71 #, c-format @@ -1877,19 +1879,19 @@ msgstr "Hindi maumpisahan ang koneksyon sa %s:%s (%s)." #: methods/connect.cc:93 #, c-format msgid "Could not connect to %s:%s (%s), connection timed out" -msgstr "Hindi maka-konek sa %s:%s (%s), nag-timeout ang koneksyon" +msgstr "Hindi maka-konekta sa %s:%s (%s), nag-timeout ang koneksyon" #: methods/connect.cc:108 #, c-format msgid "Could not connect to %s:%s (%s)." -msgstr "Hindi maka-konek sa %s:%s (%s)." +msgstr "Hindi maka-konekta sa %s:%s (%s)." #. 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 #, c-format msgid "Connecting to %s" -msgstr "Kumokonek sa %s" +msgstr "Kumokonekta sa %s" #: methods/connect.cc:167 #, c-format @@ -1909,12 +1911,12 @@ msgstr "May naganap na kababalaghan sa pagresolba ng '%s:%s' (%i)" #: methods/connect.cc:223 #, c-format msgid "Unable to connect to %s %s:" -msgstr "Hindi maka-konek sa %s %s:" +msgstr "Hindi maka-konekta sa %s %s:" #: methods/gpgv.cc:65 -#, fuzzy, c-format +#, c-format msgid "Couldn't access keyring: '%s'" -msgstr "Hindi maresolba ang '%s'" +msgstr "Hindi mabasa ang keyring: '%s'" #: methods/gpgv.cc:100 msgid "E: Argument list from Acquire::gpgv::Options too long. Exiting." @@ -1934,9 +1936,10 @@ msgid "At least one invalid signature was encountered." msgstr "Hindi kukulang sa isang hindi tanggap na lagda ang na-enkwentro." #: methods/gpgv.cc:213 -#, fuzzy, c-format +#, c-format msgid "Could not execute '%s' to verify signature (is gnupg installed?)" -msgstr " upang maberipika ang lagda (nakaluklok ba ang gnupg?)" +msgstr "" +"Hindi maitakbo ang '%s' upang maberipika ang lagda (nakaluklok ba ang gnupg?)" #: methods/gpgv.cc:218 msgid "Unknown error executing gpgv" @@ -1964,76 +1967,76 @@ msgstr "Hindi makapag-bukas ng pipe para sa %s" msgid "Read error from %s process" msgstr "Error sa pagbasa mula sa prosesong %s" -#: methods/http.cc:376 +#: methods/http.cc:377 msgid "Waiting for headers" msgstr "Naghihintay ng panimula" -#: methods/http.cc:522 +#: methods/http.cc:523 #, c-format msgid "Got a single header line over %u chars" msgstr "Nakatanggap ng isang linyang panimula mula %u na mga karakter" -#: methods/http.cc:530 +#: methods/http.cc:531 msgid "Bad header line" msgstr "Maling linyang panimula" -#: methods/http.cc:549 methods/http.cc:556 +#: methods/http.cc:550 methods/http.cc:557 msgid "The HTTP server sent an invalid reply header" msgstr "Nagpadala ang HTTP server ng di tanggap na reply header" -#: methods/http.cc:585 +#: methods/http.cc:586 msgid "The HTTP server sent an invalid Content-Length header" msgstr "Nagpadala ang HTTP server ng di tanggap na Content-Length header" -#: methods/http.cc:600 +#: methods/http.cc:601 msgid "The HTTP server sent an invalid Content-Range header" msgstr "Nagpadala ang HTTP server ng di tanggap na Content-Range header" -#: methods/http.cc:602 +#: methods/http.cc:603 msgid "This HTTP server has broken range support" msgstr "Sira ang range support ng HTTP server na ito" -#: methods/http.cc:626 +#: methods/http.cc:627 msgid "Unknown date format" msgstr "Di kilalang anyo ng petsa" -#: methods/http.cc:773 +#: methods/http.cc:774 msgid "Select failed" msgstr "Bigo ang pagpili" -#: methods/http.cc:778 +#: methods/http.cc:779 msgid "Connection timed out" msgstr "Nag-timeout ang koneksyon" -#: methods/http.cc:801 +#: methods/http.cc:802 msgid "Error writing to output file" msgstr "Error sa pagsulat ng talaksang output" -#: methods/http.cc:832 +#: methods/http.cc:833 msgid "Error writing to file" msgstr "Error sa pagsulat sa talaksan" -#: methods/http.cc:860 +#: methods/http.cc:861 msgid "Error writing to the file" msgstr "Error sa pagsusulat sa talaksan" -#: methods/http.cc:874 +#: methods/http.cc:875 msgid "Error reading from server. Remote end closed connection" msgstr "Error sa pagbasa mula sa server, sinarhan ng remote ang koneksyon" -#: methods/http.cc:876 +#: methods/http.cc:877 msgid "Error reading from server" msgstr "Error sa pagbasa mula sa server" -#: methods/http.cc:1107 +#: methods/http.cc:1108 msgid "Bad header data" msgstr "Maling datos sa panimula" -#: methods/http.cc:1124 +#: methods/http.cc:1125 msgid "Connection failed" msgstr "Bigo ang koneksyon" -#: methods/http.cc:1215 +#: methods/http.cc:1216 msgid "Internal error" msgstr "Internal na error" @@ -2107,12 +2110,12 @@ msgstr "Syntax error %s:%u: Di suportadong direktiba '%s'" msgid "Syntax error %s:%u: Extra junk at end of file" msgstr "Syntax error %s:%u: May basura sa dulo ng talaksan" -#: apt-pkg/contrib/progress.cc:154 +#: apt-pkg/contrib/progress.cc:155 #, c-format msgid "%c%s... Error!" msgstr "%c%s... Error!" -#: apt-pkg/contrib/progress.cc:156 +#: apt-pkg/contrib/progress.cc:157 #, c-format msgid "%c%s... Done" msgstr "%c%s... Tapos" @@ -2415,7 +2418,7 @@ msgstr "" "Kailangan ma-instol muli ang paketeng %s, ngunit hindi ko mahanap ang arkibo " "para dito." -#: apt-pkg/algorithms.cc:1059 +#: apt-pkg/algorithms.cc:1066 msgid "" "Error, pkgProblemResolver::Resolve generated breaks, this may be caused by " "held packages." @@ -2423,7 +2426,7 @@ msgstr "" "Error, pkgProblemResolver::Resolve ay naghudyat ng mga break, maaaring dulot " "ito ng mga paketeng naka-hold." -#: apt-pkg/algorithms.cc:1061 +#: apt-pkg/algorithms.cc:1068 msgid "Unable to correct problems, you have held broken packages." msgstr "" "Hindi maayos ang mga problema, mayroon kayong sirang mga pakete na naka-hold." @@ -2441,14 +2444,14 @@ msgstr "Nawawala ang directory ng arkibo %spartial." #. only show the ETA if it makes sense #. two days #: apt-pkg/acquire.cc:823 -#, fuzzy, c-format +#, c-format msgid "Retrieving file %li of %li (%s remaining)" msgstr "Kinukuha ang talaksang %li ng %li (%s ang natitira)" #: apt-pkg/acquire.cc:825 -#, fuzzy, c-format +#, c-format msgid "Retrieving file %li of %li" -msgstr "Binabasa ang Talaksang Listahan" +msgstr "Kinukuha ang talaksang %li ng %li" #: apt-pkg/acquire-worker.cc:113 #, c-format @@ -2599,9 +2602,8 @@ msgid "MD5Sum mismatch" msgstr "Di tugmang MD5Sum" #: apt-pkg/acquire-item.cc:640 -#, fuzzy -msgid "There are no public key available for the following key IDs:\n" -msgstr "Walang public key na magagamit para sa sumusunod na key ID:\n" +msgid "There is no public key available for the following key IDs:\n" +msgstr "Walang public key na magamit para sa sumusunod na key ID:\n" #: apt-pkg/acquire-item.cc:753 #, c-format @@ -2777,26 +2779,25 @@ msgid "Removed %s" msgstr "Tinanggal ang %s" #: apt-pkg/deb/dpkgpm.cc:378 -#, fuzzy, c-format +#, c-format msgid "Preparing to completely remove %s" -msgstr "Hinahanda ang %s upang isaayos" +msgstr "Naghahanda upang tanggalin ng lubusan ang %s" #: apt-pkg/deb/dpkgpm.cc:379 -#, fuzzy, c-format +#, c-format msgid "Completely removed %s" -msgstr "Bigo sa pagtanggal ng %s" +msgstr "Natanggal ng lubusan ang %s" #: methods/rsh.cc:330 msgid "Connection closed prematurely" msgstr "Nagsara ng maaga ang koneksyon" +#~ msgid "Could not patch file" +#~ msgstr "Hindi mai-patch ang talaksan" + #~ msgid "File date has changed %s" #~ msgstr "Nagbago ang petsa ng talaksang %s" -#, fuzzy -#~ msgid "Could not patch file" -#~ msgstr "Hindi mabuksan ang talaksang %s" - #~ msgid "Reading file list" #~ msgstr "Binabasa ang Talaksang Listahan" diff --git a/po/uk.po b/po/uk.po deleted file mode 100644 index a2848d0eb..000000000 --- a/po/uk.po +++ /dev/null @@ -1,2803 +0,0 @@ -# translation of apt-all.po to Українська -# This file is put in the public domain. -# -# Artem Bondarenko <artem.brz@gmail.com>, 2006. -msgid "" -msgstr "" -"Project-Id-Version: apt-all\n" -"Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2006-10-11 20:34+0200\n" -"PO-Revision-Date: 2006-07-29 15:57+0300\n" -"Last-Translator: Artem Bondarenko <artem.brz@gmail.com>\n" -"Language-Team: Українська <uk@li.org>\n" -"MIME-Version: 1.0\n" -"Content-Type: text/plain; charset=UTF-8\n" -"Content-Transfer-Encoding: 8bit\n" -"X-Generator: KBabel 1.11.1\n" - -#: cmdline/apt-cache.cc:135 -#, c-format -msgid "Package %s version %s has an unmet dep:\n" -msgstr "Пакунок %s версії %s має незадоволену залежність:\n" - -#: 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 -#, c-format -msgid "Unable to locate package %s" -msgstr "Не можу знайти пакунок %s" - -#: cmdline/apt-cache.cc:232 -msgid "Total package names : " -msgstr "Всього імен пакунків : " - -#: cmdline/apt-cache.cc:272 -msgid " Normal packages: " -msgstr " Нормальних пакунків: " - -#: cmdline/apt-cache.cc:273 -msgid " Pure virtual packages: " -msgstr " Чисто віртуальних пакунків: " - -#: cmdline/apt-cache.cc:274 -msgid " Single virtual packages: " -msgstr " Окремих віртуальних пакунків: " - -#: cmdline/apt-cache.cc:275 -msgid " Mixed virtual packages: " -msgstr " Змішаних віртуальних пакунків: " - -#: cmdline/apt-cache.cc:276 -msgid " Missing: " -msgstr " Пропущено: " - -#: cmdline/apt-cache.cc:278 -msgid "Total distinct versions: " -msgstr "Всього унікальних версій: " - -#: cmdline/apt-cache.cc:280 -msgid "Total dependencies: " -msgstr "Всього залежностей: " - -#: cmdline/apt-cache.cc:283 -msgid "Total ver/file relations: " -msgstr "Всього відносин Версія/Файл: " - -#: cmdline/apt-cache.cc:285 -msgid "Total Provides mappings: " -msgstr "Всього відносин Provides: " - -#: cmdline/apt-cache.cc:297 -msgid "Total globbed strings: " -msgstr "Всього розгорнутих рядків: " - -#: cmdline/apt-cache.cc:311 -msgid "Total dependency version space: " -msgstr "Всього інформації про залежності: " - -#: cmdline/apt-cache.cc:316 -msgid "Total slack space: " -msgstr "Порожнього місця в кеші: " - -#: cmdline/apt-cache.cc:324 -msgid "Total space accounted for: " -msgstr "Загальний простір полічений для: " - -#: cmdline/apt-cache.cc:446 cmdline/apt-cache.cc:1189 -#, c-format -msgid "Package file %s is out of sync." -msgstr "Перелік пакунків %s розсинхронізований." - -#: cmdline/apt-cache.cc:1231 -msgid "You must give exactly one pattern" -msgstr "Ви повинні задати рівно один шаблон" - -#: cmdline/apt-cache.cc:1385 -msgid "No packages found" -msgstr "Не знайдено жодного пакунка" - -#: cmdline/apt-cache.cc:1462 -msgid "Package files:" -msgstr "Переліки пакунків:" - -#: cmdline/apt-cache.cc:1469 cmdline/apt-cache.cc:1555 -msgid "Cache is out of sync, can't x-ref a package file" -msgstr "Кеш не синхронізований, неможливо знайти посилання на перелік пакунків" - -#: cmdline/apt-cache.cc:1470 -#, c-format -msgid "%4i %s\n" -msgstr "%4i %s\n" - -#. Show any packages have explicit pins -#: cmdline/apt-cache.cc:1482 -msgid "Pinned packages:" -msgstr "Зафіксовані пакунки:" - -#: cmdline/apt-cache.cc:1494 cmdline/apt-cache.cc:1535 -msgid "(not found)" -msgstr "(не знайдено)" - -#. Installed version -#: cmdline/apt-cache.cc:1515 -msgid " Installed: " -msgstr " Встановлено: " - -#: cmdline/apt-cache.cc:1517 cmdline/apt-cache.cc:1525 -msgid "(none)" -msgstr "(відсутній)" - -#. Candidate Version -#: cmdline/apt-cache.cc:1522 -msgid " Candidate: " -msgstr " Кандидат: " - -#: cmdline/apt-cache.cc:1532 -msgid " Package pin: " -msgstr " Фіксатор(pin) пакунка: " - -#. Show the priority tables -#: cmdline/apt-cache.cc:1541 -msgid " Version table:" -msgstr " Таблиця версій:" - -#: cmdline/apt-cache.cc:1556 -#, c-format -msgid " %4i %s\n" -msgstr " %4i %s\n" - -#: cmdline/apt-cache.cc:1652 cmdline/apt-cdrom.cc:138 cmdline/apt-config.cc:70 -#: cmdline/apt-extracttemplates.cc:225 ftparchive/apt-ftparchive.cc:550 -#: cmdline/apt-get.cc:2387 cmdline/apt-sortpkgs.cc:144 -#, c-format -msgid "%s %s for %s %s compiled on %s %s\n" -msgstr "%s %s для %s %s скомпільовано %s %s\n" - -#: cmdline/apt-cache.cc:1659 -msgid "" -"Usage: apt-cache [options] command\n" -" apt-cache [options] add file1 [file2 ...]\n" -" apt-cache [options] showpkg pkg1 [pkg2 ...]\n" -" apt-cache [options] showsrc pkg1 [pkg2 ...]\n" -"\n" -"apt-cache is a low-level tool used to manipulate APT's binary\n" -"cache files, and query information from them\n" -"\n" -"Commands:\n" -" add - Add a package file to the source cache\n" -" gencaches - Build both the package and source cache\n" -" showpkg - Show some general information for a single package\n" -" showsrc - Show source records\n" -" stats - Show some basic statistics\n" -" dump - Show the entire file in a terse form\n" -" dumpavail - Print an available file to stdout\n" -" unmet - Show unmet dependencies\n" -" search - Search the package list for a regex pattern\n" -" show - Show a readable record for the package\n" -" depends - Show raw dependency information for a package\n" -" rdepends - Show reverse dependency information for a package\n" -" pkgnames - List the names of all packages\n" -" dotty - Generate package graphs for GraphVis\n" -" xvcg - Generate package graphs for xvcg\n" -" policy - Show policy settings\n" -"\n" -"Options:\n" -" -h This help text.\n" -" -p=? The package cache.\n" -" -s=? The source cache.\n" -" -q Disable progress indicator.\n" -" -i Show only important deps for the unmet command.\n" -" -c=? Read this configuration file\n" -" -o=? Set an arbitrary configuration option, eg -o dir::cache=/tmp\n" -"See the apt-cache(8) and apt.conf(5) manual pages for more information.\n" -msgstr "" -"Використання: apt-cache [options] command\n" -" або: apt-cache [options] add file1 [file1 ...]\n" -" або: apt-cache [options] showpkg pkg1 [pkg2 ...]\n" -" або: apt-cache [options] showsrc pkg1 [pkg2 ...]\n" -"\n" -"apt-cache - низькорівневий інструмент, що використається для керування\n" -"двійковими кеш-файлами APT'а, а також для добування інформації з них\n" -"Команди:\n" -" add - додати файл пакунка в кеш джерел\n" -" gencaches - побудувати обидва кеша пакунків - бінарних і з вихідними " -"текстами\n" -" showpkg - загальна інформація про конкретний пакунок\n" -" stats - основна статистика\n" -" dump - показати весь файл у стислій формі\n" -" dumpavail - видати на stdout список доступних пакунків\n" -" unmet - показати незадоволені залежності\n" -" search - знайти пакунки, назва яких задовольняє регулярний вираз\n" -" show - показати інформацію про пакунок в зрозумілій формі\n" -" depends - показати інформацію про залежності пакунка построково\n" -" rdepends - показати інформацію про зворотні залежності пакунка\n" -" pkgnames - показати імена всіх пакунків\n" -" dotty - генерувати граф залежностей пакунків у форматі GraphVis\n" -" xvcg - генерувати граф залежностей пакунків у форматі xvcg\n" -" policy - показати поточну політику вибору пакунків\n" -"\n" -"Опції:\n" -" -h Цей текст.\n" -" -p=? Кеш пакунків.\n" -" -s=? Кеш джерел.\n" -" -q Не показувати індикатор прогресу.\n" -" -i Показувати тільки важливі залежності для команди unmet.\n" -" -c=? Читати зазначений файл конфігурації.\n" -" -o=? Встановити довільну опцію конфігурації, наприклад, -o dir::cache=/" -"tmp\n" -"Подробиці в сторінках керівництва apt-cache(8) і apt.conf(5).\n" - -#: cmdline/apt-cdrom.cc:78 -msgid "Please provide a name for this Disc, such as 'Debian 2.1r1 Disk 1'" -msgstr "Задайте назву для цього диска, наприклад 'Debian 2.1r1 Disk 1'" - -#: cmdline/apt-cdrom.cc:93 -msgid "Please insert a Disc in the drive and press enter" -msgstr "Вставте диск у пристрій і натисніть Ввід" - -#: cmdline/apt-cdrom.cc:117 -msgid "Repeat this process for the rest of the CDs in your set." -msgstr "Повторіть цей процес для інших наявних CD." - -#: cmdline/apt-config.cc:41 -msgid "Arguments not in pairs" -msgstr "Непарні аргументи" - -#: cmdline/apt-config.cc:76 -msgid "" -"Usage: apt-config [options] command\n" -"\n" -"apt-config is a simple tool to read the APT config file\n" -"\n" -"Commands:\n" -" shell - Shell mode\n" -" dump - Show the configuration\n" -"\n" -"Options:\n" -" -h This help text.\n" -" -c=? Read this configuration file\n" -" -o=? Set an arbitrary configuration option, eg -o dir::cache=/tmp\n" -msgstr "" -"Використання: apt-config [options] command\n" -"\n" -"apt-config - простий інструмент для читання конфігураційного файлу APT\n" -"\n" -"Команди:\n" -" shell - режим shell\n" -" dump - показати конфігурацію\n" -"\n" -"Опції:\n" -" -h Цей текст.\n" -" -с=? Читати зазначений конфігураційний файл.\n" -" -o=? Встановити довільну опцію, наприклад, -o dir::cache=/tmp\n" - -#: cmdline/apt-extracttemplates.cc:98 -#, c-format -msgid "%s not a valid DEB package." -msgstr "%s не є правильним DEB-пакунком." - -#: cmdline/apt-extracttemplates.cc:232 -msgid "" -"Usage: apt-extracttemplates file1 [file2 ...]\n" -"\n" -"apt-extracttemplates is a tool to extract config and template info\n" -"from debian packages\n" -"\n" -"Options:\n" -" -h This help text\n" -" -t Set the temp dir\n" -" -c=? Read this configuration file\n" -" -o=? Set an arbitrary configuration option, eg -o dir::cache=/tmp\n" -msgstr "" -"Використання: apt-extracttemplates file1 [file2 ...]\n" -"\n" -"apt-extracttemplates витягує з пакунків Debian конфігураційні скрипти\n" -"і файли-шаблони\n" -"\n" -"Опції:\n" -" -h Цей текст\n" -" -t Встановити теку для тимчасових файлів\n" -" -c=? Читати зазначений конфігураційний файл\n" -" -o=? Вказати довільну опцію, наприклад, -o dir::cache=/tmp\n" - -#: cmdline/apt-extracttemplates.cc:267 apt-pkg/pkgcachegen.cc:710 -#, c-format -msgid "Unable to write to %s" -msgstr "Неможливо записати в %s" - -#: cmdline/apt-extracttemplates.cc:310 -msgid "Cannot get debconf version. Is debconf installed?" -msgstr "Неможливо визначити версію debconf. Він встановлений?" - -#: ftparchive/apt-ftparchive.cc:167 ftparchive/apt-ftparchive.cc:341 -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 -#, c-format -msgid "Error processing directory %s" -msgstr "Помилка обробки течи %s" - -#: ftparchive/apt-ftparchive.cc:254 -msgid "Source extension list is too long" -msgstr "" -"Список розширень, припустимих для пакунків з вихідними текстами, занадто " -"довгий" - -#: ftparchive/apt-ftparchive.cc:371 -msgid "Error writing header to contents file" -msgstr "Помилка запису заголовка в повний перелік вмісту пакунків (Contents)" - -#: ftparchive/apt-ftparchive.cc:401 -#, c-format -msgid "Error processing contents %s" -msgstr "помилка обробки повного переліку вмісту пакунків (Contents) %s" - -#: ftparchive/apt-ftparchive.cc:556 -msgid "" -"Usage: apt-ftparchive [options] command\n" -"Commands: packages binarypath [overridefile [pathprefix]]\n" -" sources srcpath [overridefile [pathprefix]]\n" -" contents path\n" -" release path\n" -" generate config [groups]\n" -" clean config\n" -"\n" -"apt-ftparchive generates index files for Debian archives. It supports\n" -"many styles of generation from fully automated to functional replacements\n" -"for dpkg-scanpackages and dpkg-scansources\n" -"\n" -"apt-ftparchive generates Package files from a tree of .debs. The\n" -"Package file contains the contents of all the control fields from\n" -"each package as well as the MD5 hash and filesize. An override file\n" -"is supported to force the value of Priority and Section.\n" -"\n" -"Similarly apt-ftparchive generates Sources files from a tree of .dscs.\n" -"The --source-override option can be used to specify a src override file\n" -"\n" -"The 'packages' and 'sources' command should be run in the root of the\n" -"tree. BinaryPath should point to the base of the recursive search and \n" -"override file should contain the override flags. Pathprefix is\n" -"appended to the filename fields if present. Example usage from the \n" -"Debian archive:\n" -" apt-ftparchive packages dists/potato/main/binary-i386/ > \\\n" -" dists/potato/main/binary-i386/Packages\n" -"\n" -"Options:\n" -" -h This help text\n" -" --md5 Control MD5 generation\n" -" -s=? Source override file\n" -" -q Quiet\n" -" -d=? Select the optional caching database\n" -" --no-delink Enable delinking debug mode\n" -" --contents Control contents file generation\n" -" -c=? Read this configuration file\n" -" -o=? Set an arbitrary configuration option" -msgstr "" -"Використання: apt-ftparchive [параметри] команда\n" -"Команди: packages binarypath [overridefile [pathprefix]]\n" -" sources srcpath [overridefile [pathprefix]]\n" -" contents path\n" -" release path\n" -" generate config [groups]\n" -" clean config\n" -"\n" -"apt-ftparchive генерує індексні файли архівів Debian. Він підтримує\n" -"безліч стилів генерації: від повністю автоматичного до функціональної " -"заміни\n" -"програм dpkg-scanpackages і dpkg-scansources\n" -"\n" -"apt-ftparchive генерує файли Package (переліки пакунків) для дерева\n" -"тек, що містять файли .deb. Файл Package містить у собі керуючі\n" -"поля кожного пакунка, а також хеш MD5 і розмір файлу. Значення керуючих\n" -"полів \"пріоритет\" (Priority) і \"секція\" (Section) можуть бути змінені з\n" -"допомогою файлу override.\n" -"\n" -"Крім того, apt-ftparchive може генерувати файли Sources з дерева\n" -"тек, що містять файли .dsc. Для вказівки файлу override у цьому \n" -"режимі можна використати параметр --source-override.\n" -"\n" -"Команди 'packages' і 'sources' треба виконувати, перебуваючи в кореневій " -"теці\n" -"дерева, що ви хочете обробити. BinaryPath повинен вказувати на місце,\n" -"з якого починається рекурсивний обхід, а файл перепризначень (override)\n" -"повинен містити запис про перепризначення керуючих полів. Якщо був " -"зазначений\n" -"Pathprefix, то його значення додається до керуючих полів, що містять\n" -"імена файлів. Приклад використання для архіву Debian:\n" -" apt-ftparchive packages dists/potato/main/binary-i386/ > \\\n" -" dists/potato/main/binary-i386/Packages\n" -"\n" -"Параметри:\n" -" -h Цей текст\n" -" --md5 Керування генерацією MD5-хешів\n" -" -s=? Вказати файл перепризначень (override) для пакунків з вихідними " -"текстами\n" -" -q Не виводити повідомлення в процесі роботи\n" -" -d=? Вказати кешуючу базу даних (не обов'язково)\n" -" --no-delink Включити режим налагодження процесу видалення файлів\n" -" --contents Керування генерацією повного переліку вмісту пакунків\n" -" (файлу Contents)\n" -" -c=? Використати зазначений конфігураційний файл\n" -" -o=? Вказати довільний параметр конфігурації" - -#: ftparchive/apt-ftparchive.cc:762 -msgid "No selections matched" -msgstr "Збігів не виявлено" - -#: ftparchive/apt-ftparchive.cc:835 -#, c-format -msgid "Some files are missing in the package file group `%s'" -msgstr "У групі пакунків '%s' відсутні деякі файли" - -#: ftparchive/cachedb.cc:47 -#, c-format -msgid "DB was corrupted, file renamed to %s.old" -msgstr "БД була пошкоджена, файл перейменований в %s.old" - -#: ftparchive/cachedb.cc:65 -#, c-format -msgid "DB is old, attempting to upgrade %s" -msgstr "DB застаріла, намагаюсь оновити %s" - -#: ftparchive/cachedb.cc:76 -msgid "" -"DB format is invalid. If you upgraded from a older version of apt, please " -"remove and re-create the database." -msgstr "" -"Формати DB не є правильним. Якщо ви оновилися зі старої версії apt, будь-" -"ласка видаліть і наново створіть базу." - -#: ftparchive/cachedb.cc:81 -#, c-format -msgid "Unable to open DB file %s: %s" -msgstr "Не вдалося відкрити DB файл %s: %s" - -#: ftparchive/cachedb.cc:127 apt-inst/extract.cc:181 apt-inst/extract.cc:193 -#: apt-inst/extract.cc:210 apt-inst/deb/dpkgdb.cc:121 methods/gpgv.cc:272 -#, c-format -msgid "Failed to stat %s" -msgstr "Не вдалося одержати атрибути %s" - -#: ftparchive/cachedb.cc:242 -msgid "Archive has no control record" -msgstr "В архіві немає поля control" - -#: ftparchive/cachedb.cc:448 -msgid "Unable to get a cursor" -msgstr "Неможливо одержати курсор" - -#: ftparchive/writer.cc:79 -#, c-format -msgid "W: Unable to read directory %s\n" -msgstr "W: Не вдалося прочитати теку %s\n" - -#: ftparchive/writer.cc:84 -#, c-format -msgid "W: Unable to stat %s\n" -msgstr "W: Неможливо прочитати атрибути %s\n" - -#: ftparchive/writer.cc:135 -msgid "E: " -msgstr "E: " - -#: ftparchive/writer.cc:137 -msgid "W: " -msgstr "W: " - -#: ftparchive/writer.cc:144 -msgid "E: Errors apply to file " -msgstr "E: Помилки відносяться до файлу" - -#: ftparchive/writer.cc:161 ftparchive/writer.cc:191 -#, c-format -msgid "Failed to resolve %s" -msgstr "Не вдалося піти по посиланню %s" - -#: ftparchive/writer.cc:173 -msgid "Tree walking failed" -msgstr "Не вдалося зробити обхід дерева" - -#: ftparchive/writer.cc:198 -#, c-format -msgid "Failed to open %s" -msgstr "Не вдалося відкрити %s" - -#: ftparchive/writer.cc:257 -#, c-format -msgid " DeLink %s [%s]\n" -msgstr "DeLink %s [%s]\n" - -#: ftparchive/writer.cc:265 -#, c-format -msgid "Failed to readlink %s" -msgstr "Не вдалося прочитати посилання %s" - -#: ftparchive/writer.cc:269 -#, c-format -msgid "Failed to unlink %s" -msgstr "Не вдалося видалити %s" - -#: ftparchive/writer.cc:276 -#, c-format -msgid "*** Failed to link %s to %s" -msgstr "*** Не вдалося створити посилання %s на %s" - -#: ftparchive/writer.cc:286 -#, c-format -msgid " DeLink limit of %sB hit.\n" -msgstr "Перевищено ліміт в %s в DeLink.\n" - -#: ftparchive/writer.cc:390 -msgid "Archive had no package field" -msgstr "В архіві немає поля package" - -#: ftparchive/writer.cc:398 ftparchive/writer.cc:613 -#, c-format -msgid " %s has no override entry\n" -msgstr " Відсутній запис про перепризначення для %s\n" - -#: ftparchive/writer.cc:443 ftparchive/writer.cc:701 -#, c-format -msgid " %s maintainer is %s not %s\n" -msgstr " пакунок %s супроводжує %s, а не %s\n" - -#: ftparchive/writer.cc:623 -#, c-format -msgid " %s has no source override entry\n" -msgstr "" - -#: ftparchive/writer.cc:627 -#, c-format -msgid " %s has no binary override entry either\n" -msgstr "" - -#: ftparchive/contents.cc:317 -#, c-format -msgid "Internal error, could not locate member %s" -msgstr "Внутрішня помилка, не можу знайти складову частину %s" - -#: ftparchive/contents.cc:353 ftparchive/contents.cc:384 -msgid "realloc - Failed to allocate memory" -msgstr "realloc - не вдалося виділити пам'ять" - -#: ftparchive/override.cc:38 ftparchive/override.cc:146 -#, c-format -msgid "Unable to open %s" -msgstr "Не вдалося відкрити %s" - -#: ftparchive/override.cc:64 ftparchive/override.cc:170 -#, c-format -msgid "Malformed override %s line %lu #1" -msgstr "Спотворений запис про перепризначення (override) %s на рядку %lu #1" - -#: ftparchive/override.cc:78 ftparchive/override.cc:182 -#, c-format -msgid "Malformed override %s line %lu #2" -msgstr "Спотворений запис про перепризначення (override) %s на рядку %lu #2" - -#: ftparchive/override.cc:92 ftparchive/override.cc:195 -#, c-format -msgid "Malformed override %s line %lu #3" -msgstr "Спотворений запис про перепризначення (override) %s на рядку %lu #3" - -#: ftparchive/override.cc:131 ftparchive/override.cc:205 -#, c-format -msgid "Failed to read the override file %s" -msgstr "Не вдалося прочитати файл перепризначень (override)%s" - -#: ftparchive/multicompress.cc:75 -#, c-format -msgid "Unknown compression algorithm '%s'" -msgstr "Невідомий алгоритм стиснення '%s'" - -#: ftparchive/multicompress.cc:105 -#, c-format -msgid "Compressed output %s needs a compression set" -msgstr "Для отримання стиснутого виводу %s необхідно ввімкнути пакування" - -#: ftparchive/multicompress.cc:172 methods/rsh.cc:91 -msgid "Failed to create IPC pipe to subprocess" -msgstr "Не вдалося створити IPC-канал для породженого процесу" - -#: ftparchive/multicompress.cc:198 -msgid "Failed to create FILE*" -msgstr "Не вдалося створити FILE*" - -#: ftparchive/multicompress.cc:201 -msgid "Failed to fork" -msgstr "Не вдалося виконати породжений процес" - -#: ftparchive/multicompress.cc:215 -msgid "Compress child" -msgstr "Процес-нащадок, що виконує пакування" - -#: ftparchive/multicompress.cc:238 -#, c-format -msgid "Internal error, failed to create %s" -msgstr "Внутрішня помилка, не вдалося створити %s" - -#: ftparchive/multicompress.cc:289 -msgid "Failed to create subprocess IPC" -msgstr "Не вдалося створити IPC з породженим процесом" - -#: ftparchive/multicompress.cc:324 -msgid "Failed to exec compressor " -msgstr "Не вдалося виконати компресор " - -#: ftparchive/multicompress.cc:363 -msgid "decompressor" -msgstr "декомпресор" - -#: ftparchive/multicompress.cc:406 -msgid "IO to subprocess/file failed" -msgstr "Помилка уведення/виводу в підпроцес/файл" - -#: ftparchive/multicompress.cc:458 -msgid "Failed to read while computing MD5" -msgstr "Помилка читання під час обчислення MD5" - -#: ftparchive/multicompress.cc:475 -#, c-format -msgid "Problem unlinking %s" -msgstr "Не вдалося видалити %s" - -#: ftparchive/multicompress.cc:490 apt-inst/extract.cc:188 -#, c-format -msgid "Failed to rename %s to %s" -msgstr "Не вдалося перейменувати %s в %s" - -#: cmdline/apt-get.cc:120 -msgid "Y" -msgstr "Т" - -#: cmdline/apt-get.cc:142 cmdline/apt-get.cc:1506 -#, c-format -msgid "Regex compilation error - %s" -msgstr "Помилка компіляції регулярного виразу - %s" - -#: cmdline/apt-get.cc:237 -msgid "The following packages have unmet dependencies:" -msgstr "Пакунки, що мають незадоволені залежності:" - -#: cmdline/apt-get.cc:327 -#, c-format -msgid "but %s is installed" -msgstr "але %s вже встановлений" - -#: cmdline/apt-get.cc:329 -#, c-format -msgid "but %s is to be installed" -msgstr "але %s буде встановлений" - -#: cmdline/apt-get.cc:336 -msgid "but it is not installable" -msgstr "але він не може бути встановлений" - -#: cmdline/apt-get.cc:338 -msgid "but it is a virtual package" -msgstr "але це віртуальний пакунок" - -#: cmdline/apt-get.cc:341 -msgid "but it is not installed" -msgstr "але він не встановлений" - -#: cmdline/apt-get.cc:341 -msgid "but it is not going to be installed" -msgstr "але він не буде встановлений" - -#: cmdline/apt-get.cc:346 -msgid " or" -msgstr " чи" - -#: cmdline/apt-get.cc:375 -msgid "The following NEW packages will be installed:" -msgstr "НОВІ пакунки, які будуть встановлені:" - -#: cmdline/apt-get.cc:401 -msgid "The following packages will be REMOVED:" -msgstr "Пакунки, які будуть ВИДАЛЕНІ:" - -#: cmdline/apt-get.cc:423 -msgid "The following packages have been kept back:" -msgstr "Пакунки, які будуть залишені в незмінному вигляді:" - -#: cmdline/apt-get.cc:444 -msgid "The following packages will be upgraded:" -msgstr "Пакунки, які будуть ОНОВЛЕНІ:" - -#: cmdline/apt-get.cc:465 -msgid "The following packages will be DOWNGRADED:" -msgstr "Пакунки, будуть замінені на більш СТАРІ версії:" - -#: cmdline/apt-get.cc:485 -msgid "The following held packages will be changed:" -msgstr "Пакунки, які повинні були б залишитися без змін, але будуть замінені:" - -#: cmdline/apt-get.cc:538 -#, c-format -msgid "%s (due to %s) " -msgstr "%s (внаслідок %s) " - -#: cmdline/apt-get.cc:546 -msgid "" -"WARNING: The following essential packages will be removed.\n" -"This should NOT be done unless you know exactly what you are doing!" -msgstr "" -"УВАГА: Ці істотно важливі пакунки будуть вилучені.\n" -"НЕ РОБІТЬ цього, якщо ви НЕ уявляєте собі всі можливі наслідки!" - -#: cmdline/apt-get.cc:577 -#, c-format -msgid "%lu upgraded, %lu newly installed, " -msgstr "оновлено %lu, встановлено %lu нових пакунків, " - -#: cmdline/apt-get.cc:581 -#, c-format -msgid "%lu reinstalled, " -msgstr " %lu перевстановлено, " - -#: cmdline/apt-get.cc:583 -#, c-format -msgid "%lu downgraded, " -msgstr "%lu пакунків замінено на старі версії, " - -#: cmdline/apt-get.cc:585 -#, c-format -msgid "%lu to remove and %lu not upgraded.\n" -msgstr "для видалення відмічено %lu пакунків, і %lu пакунків не оновлено.\n" - -#: cmdline/apt-get.cc:589 -#, c-format -msgid "%lu not fully installed or removed.\n" -msgstr "не встановлено до кінця чи видалено %lu пакунків.\n" - -#: cmdline/apt-get.cc:649 -msgid "Correcting dependencies..." -msgstr "Виправлення залежностей..." - -#: cmdline/apt-get.cc:652 -msgid " failed." -msgstr " невдача." - -#: cmdline/apt-get.cc:655 -msgid "Unable to correct dependencies" -msgstr "Неможливо скоригувати залежності" - -#: cmdline/apt-get.cc:658 -msgid "Unable to minimize the upgrade set" -msgstr "Неможливо мінімізувати набір оновлень" - -#: cmdline/apt-get.cc:660 -msgid " Done" -msgstr " Виконано" - -#: cmdline/apt-get.cc:664 -msgid "You might want to run `apt-get -f install' to correct these." -msgstr "" -"Можливо, для виправлення цих помилок ви захочете скористатися 'apt-get -f " -"install'." - -#: cmdline/apt-get.cc:667 -msgid "Unmet dependencies. Try using -f." -msgstr "Незадоволені залежності. Спробуйте використати -f." - -#: cmdline/apt-get.cc:689 -msgid "WARNING: The following packages cannot be authenticated!" -msgstr "УВАГА: Наступні пакунки неможливо автентифікувати!" - -#: cmdline/apt-get.cc:693 -msgid "Authentication warning overridden.\n" -msgstr "Автентифікаційне попередження не прийнято до уваги.\n" - -#: cmdline/apt-get.cc:700 -msgid "Install these packages without verification [y/N]? " -msgstr "Встановити ці пакунки без перевірки [т/Н]? " - -#: cmdline/apt-get.cc:702 -msgid "Some packages could not be authenticated" -msgstr "Деякі пакунки неможливо автентифікувати" - -#: cmdline/apt-get.cc:711 cmdline/apt-get.cc:858 -msgid "There are problems and -y was used without --force-yes" -msgstr "Існують проблеми, а опція -y використана без --force-yes" - -#: cmdline/apt-get.cc:755 -msgid "Internal error, InstallPackages was called with broken packages!" -msgstr "" -"Внутрішня помилка, InstallPackages була викликана з непрацездатними " -"пакунками!" - -#: cmdline/apt-get.cc:764 -msgid "Packages need to be removed but remove is disabled." -msgstr "Пакунки необхідно видалити, але видалення заборонене." - -#: cmdline/apt-get.cc:775 -msgid "Internal error, Ordering didn't finish" -msgstr "Внутрішня помилка, Ordering не завершилася" - -#: cmdline/apt-get.cc:791 cmdline/apt-get.cc:1818 cmdline/apt-get.cc:1851 -msgid "Unable to lock the download directory" -msgstr "Неможливо заблокувати теку для завантаження" - -#: cmdline/apt-get.cc:801 cmdline/apt-get.cc:1899 cmdline/apt-get.cc:2135 -#: apt-pkg/cachefile.cc:67 -msgid "The list of sources could not be read." -msgstr "Неможливо прочитати перелік джерел." - -#: cmdline/apt-get.cc:816 -msgid "How odd.. The sizes didn't match, email apt@packages.debian.org" -msgstr "Дивно.. Розбіжність розмірів, напишіть на apt@packages.debian.org" - -#: cmdline/apt-get.cc:821 -#, c-format -msgid "Need to get %sB/%sB of archives.\n" -msgstr "Необхідно завантажити %sB/%sB архівів.\n" - -#: cmdline/apt-get.cc:824 -#, c-format -msgid "Need to get %sB of archives.\n" -msgstr "Необхідно завантажити %sB архівів.\n" - -#: cmdline/apt-get.cc:829 -#, c-format -msgid "After unpacking %sB of additional disk space will be used.\n" -msgstr "Після розпакування об'єм зайнятого дискового простору зросте на %sB.\n" - -#: cmdline/apt-get.cc:832 -#, c-format -msgid "After unpacking %sB disk space will be freed.\n" -msgstr "" -"Після розпакування об'єм зайнятого дискового простору зменшиться на %sB.\n" - -#: cmdline/apt-get.cc:846 cmdline/apt-get.cc:1989 -#, c-format -msgid "Couldn't determine free space in %s" -msgstr "Не вдалося визначити кількість вільного місця в %s" - -#: cmdline/apt-get.cc:849 -#, c-format -msgid "You don't have enough free space in %s." -msgstr "Недостатньо вільного місця в %s." - -#: cmdline/apt-get.cc:864 cmdline/apt-get.cc:884 -msgid "Trivial Only specified but this is not a trivial operation." -msgstr "" -"Запитане виконання тільки тривіальних операцій, але це не тривіальна " -"операція." - -#: cmdline/apt-get.cc:866 -msgid "Yes, do as I say!" -msgstr "Так, робити, як я скажу!" - -#: cmdline/apt-get.cc:868 -#, c-format -msgid "" -"You are about to do something potentially harmful.\n" -"To continue type in the phrase '%s'\n" -" ?] " -msgstr "" -"Те, що ви хочете зробити, може мати небажані наслідки.\n" -"Щоб продовжити, введіть фразу: '%s'\n" -" ?] " - -#: cmdline/apt-get.cc:874 cmdline/apt-get.cc:893 -msgid "Abort." -msgstr "Перервано." - -#: cmdline/apt-get.cc:889 -msgid "Do you want to continue [Y/n]? " -msgstr "Бажаєте продовжити [Т/н]? " - -#: cmdline/apt-get.cc:961 cmdline/apt-get.cc:1365 cmdline/apt-get.cc:2032 -#, c-format -msgid "Failed to fetch %s %s\n" -msgstr "Не вдалося завантажити %s %s\n" - -#: cmdline/apt-get.cc:979 -msgid "Some files failed to download" -msgstr "Деякі файли не вдалося завантажити" - -#: cmdline/apt-get.cc:980 cmdline/apt-get.cc:2041 -msgid "Download complete and in download only mode" -msgstr "Вказано режим \"тільки завантаження\", і завантаження завершено" - -#: cmdline/apt-get.cc:986 -msgid "" -"Unable to fetch some archives, maybe run apt-get update or try with --fix-" -"missing?" -msgstr "" -"Неможливо завантажити деякі архіви, імовірно треба виконати apt-get update " -"або спробувати повторити запуск з ключем --fix-missing?" - -#: cmdline/apt-get.cc:990 -msgid "--fix-missing and media swapping is not currently supported" -msgstr "--fix-missing і зміна носія в даний момент не підтримується" - -#: cmdline/apt-get.cc:995 -msgid "Unable to correct missing packages." -msgstr "Неможливо виправити втрачені пакунки." - -#: cmdline/apt-get.cc:996 -msgid "Aborting install." -msgstr "Переривається встановлення." - -#: cmdline/apt-get.cc:1030 -#, c-format -msgid "Note, selecting %s instead of %s\n" -msgstr "Помітьте, замість %2$s вибирається %1$s\n" - -#: cmdline/apt-get.cc:1040 -#, c-format -msgid "Skipping %s, it is already installed and upgrade is not set.\n" -msgstr "" -"Пропускається %s - пакунок вже встановлений, і опція upgrade не " -"встановлена.\n" - -#: cmdline/apt-get.cc:1058 -#, c-format -msgid "Package %s is not installed, so not removed\n" -msgstr "Пакунок %s не встановлений, тому не може бути видалений\n" - -#: cmdline/apt-get.cc:1069 -#, c-format -msgid "Package %s is a virtual package provided by:\n" -msgstr "Пакунок %s - віртуальний, його функції надаються пакунками:\n" - -#: cmdline/apt-get.cc:1081 -msgid " [Installed]" -msgstr " [Встановлено]" - -#: cmdline/apt-get.cc:1086 -msgid "You should explicitly select one to install." -msgstr "Ви повинні явно вказати, який саме ви хочете встановити." - -#: cmdline/apt-get.cc:1091 -#, c-format -msgid "" -"Package %s is not available, but is referred to by another package.\n" -"This may mean that the package is missing, has been obsoleted, or\n" -"is only available from another source\n" -msgstr "" -"Пакунок %s недоступний, але згадується у переліку залежностей іншого " -"пакунка.\n" -"Це може означати, що пакунок відсутній, застарів, або доступний з джерел, не " -"згаданих в sources.list\n" - -#: cmdline/apt-get.cc:1110 -msgid "However the following packages replace it:" -msgstr "Однак наступні пакунки можуть його замінити:" - -#: cmdline/apt-get.cc:1113 -#, c-format -msgid "Package %s has no installation candidate" -msgstr "Для пакунка %s не знайдені кандидати на встановлення" - -#: cmdline/apt-get.cc:1133 -#, c-format -msgid "Reinstallation of %s is not possible, it cannot be downloaded.\n" -msgstr "Перевстановлення %s неможливе, бо він не може бути завантаженим.\n" - -#: cmdline/apt-get.cc:1141 -#, c-format -msgid "%s is already the newest version.\n" -msgstr "Вже встановлена найновіша версія %s.\n" - -#: cmdline/apt-get.cc:1168 -#, c-format -msgid "Release '%s' for '%s' was not found" -msgstr "Реліз '%s' для '%s' не знайдений" - -#: cmdline/apt-get.cc:1170 -#, c-format -msgid "Version '%s' for '%s' was not found" -msgstr "Версія '%s' для '%s' не знайдена" - -#: cmdline/apt-get.cc:1176 -#, c-format -msgid "Selected version %s (%s) for %s\n" -msgstr "Обрана версія %s (%s) для %s\n" - -#: cmdline/apt-get.cc:1313 -msgid "The update command takes no arguments" -msgstr "Команді update не потрібні аргументи" - -#: cmdline/apt-get.cc:1326 -msgid "Unable to lock the list directory" -msgstr "Неможливо заблокувати теку з переліками пакунків" - -#: cmdline/apt-get.cc:1384 -msgid "" -"Some index files failed to download, they have been ignored, or old ones " -"used instead." -msgstr "" -"Деякі індексні файли не завантажилися, вони були зігноровані або замість них " -"були використані старі версії." - -#: cmdline/apt-get.cc:1403 -msgid "Internal error, AllUpgrade broke stuff" -msgstr "Внутрішня помилка, AllUpgrade все поламав" - -#: cmdline/apt-get.cc:1493 cmdline/apt-get.cc:1529 -#, c-format -msgid "Couldn't find package %s" -msgstr "Не можу знайти пакунок %s" - -#: cmdline/apt-get.cc:1516 -#, c-format -msgid "Note, selecting %s for regex '%s'\n" -msgstr "Помітьте, регулярний вираз %2$s призводить до вибору %1$s\n" - -#: cmdline/apt-get.cc:1546 -msgid "You might want to run `apt-get -f install' to correct these:" -msgstr "" -"Можливо, для виправлення цих помилок Ви захочете скористатися 'apt-get -f " -"install':" - -#: cmdline/apt-get.cc:1549 -msgid "" -"Unmet dependencies. Try 'apt-get -f install' with no packages (or specify a " -"solution)." -msgstr "" -"Незадоволені залежності. Спробуйте виконати 'apt-get -f install', не " -"вказуючи імені пакунка (або знайдіть інше рішення)." - -#: cmdline/apt-get.cc:1561 -msgid "" -"Some packages could not be installed. This may mean that you have\n" -"requested an impossible situation or if you are using the unstable\n" -"distribution that some required packages have not yet been created\n" -"or been moved out of Incoming." -msgstr "" -"Деякі пакунки неможливо встановити. Можливо, Ви просите неможливого,\n" -"або ж використаєте нестабільний дистрибутив, і запитані Вами пакунки\n" -"ще не створені або були вилучені з Incoming." - -#: cmdline/apt-get.cc:1569 -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 "" -"Так як Ви просили виконати тільки одну операцію, те найімовірніше, що\n" -"пакунок просто не може бути встановлений через помилки в самому пакунку.\n" -"Необхідно відіслати звіт про цю помилку." - -#: cmdline/apt-get.cc:1574 -msgid "The following information may help to resolve the situation:" -msgstr "Наступна інформація можливо допоможе Вам:" - -#: cmdline/apt-get.cc:1577 -msgid "Broken packages" -msgstr "Зламані пакунки" - -#: cmdline/apt-get.cc:1603 -msgid "The following extra packages will be installed:" -msgstr "Будуть встановлені наступні додаткові пакунки:" - -#: cmdline/apt-get.cc:1692 -msgid "Suggested packages:" -msgstr "Пропоновані пакунки:" - -#: cmdline/apt-get.cc:1693 -msgid "Recommended packages:" -msgstr "Рекомендовані пакунки:" - -#: cmdline/apt-get.cc:1713 -msgid "Calculating upgrade... " -msgstr "Обчислення оновлень... " - -#: cmdline/apt-get.cc:1716 methods/ftp.cc:702 methods/connect.cc:101 -msgid "Failed" -msgstr "Невдача" - -#: cmdline/apt-get.cc:1721 -msgid "Done" -msgstr "Виконано" - -#: cmdline/apt-get.cc:1786 cmdline/apt-get.cc:1794 -msgid "Internal error, problem resolver broke stuff" -msgstr "Внутрішня помилка, вирішувач проблем все поламав" - -#: cmdline/apt-get.cc:1894 -msgid "Must specify at least one package to fetch source for" -msgstr "" -"Вкажіть як мінімум один пакунок, для якого необхідно завантажити вихідні " -"тексти" - -#: cmdline/apt-get.cc:1924 cmdline/apt-get.cc:2153 -#, c-format -msgid "Unable to find a source package for %s" -msgstr "Неможливо знайти пакунок з вихідними текстами для %s" - -#: cmdline/apt-get.cc:1968 -#, c-format -msgid "Skipping already downloaded file '%s'\n" -msgstr "Пропускаємо вже завантажений файл '%s'\n" - -#: cmdline/apt-get.cc:1992 -#, c-format -msgid "You don't have enough free space in %s" -msgstr "Недостатньо місця в %s" - -#: cmdline/apt-get.cc:1997 -#, c-format -msgid "Need to get %sB/%sB of source archives.\n" -msgstr "Необхідно завантажити %sB/%sB з архівів вихідних текстів.\n" - -#: cmdline/apt-get.cc:2000 -#, c-format -msgid "Need to get %sB of source archives.\n" -msgstr "Потрібно завантажити %sB архівів з вихідними текстами.\n" - -#: cmdline/apt-get.cc:2006 -#, c-format -msgid "Fetch source %s\n" -msgstr "Завантаження вихідних текстів %s\n" - -#: cmdline/apt-get.cc:2037 -msgid "Failed to fetch some archives." -msgstr "Деякі архіви не вдалося завантажити." - -#: cmdline/apt-get.cc:2065 -#, c-format -msgid "Skipping unpack of already unpacked source in %s\n" -msgstr "" -"Розпакування вихідних текстів пропущено, тому що в %s вже перебувають " -"розпаковані вихідні тексти\n" - -#: cmdline/apt-get.cc:2077 -#, c-format -msgid "Unpack command '%s' failed.\n" -msgstr "Команда розпакування '%s' завершилася невдало.\n" - -#: cmdline/apt-get.cc:2078 -#, c-format -msgid "Check if the 'dpkg-dev' package is installed.\n" -msgstr "Перевірте, чи встановлений пакунок 'dpkg-dev'.\n" - -#: cmdline/apt-get.cc:2095 -#, c-format -msgid "Build command '%s' failed.\n" -msgstr "Команда побудови '%s' закінчилася невдало.\n" - -#: cmdline/apt-get.cc:2114 -msgid "Child process failed" -msgstr "Породжений процес завершився невдало" - -#: cmdline/apt-get.cc:2130 -msgid "Must specify at least one package to check builddeps for" -msgstr "" -"Для перевірки залежностей для побудови необхідно вказати як мінімум один " -"пакунок" - -#: cmdline/apt-get.cc:2158 -#, c-format -msgid "Unable to get build-dependency information for %s" -msgstr "Неможливо одержати інформацію про залежності для побудови %s" - -#: cmdline/apt-get.cc:2178 -#, c-format -msgid "%s has no build depends.\n" -msgstr "%s не має залежностей для побудови.\n" - -#: cmdline/apt-get.cc:2230 -#, c-format -msgid "" -"%s dependency for %s cannot be satisfied because the package %s cannot be " -"found" -msgstr "" -"Залежність типу %s для %s не може бути задоволена, бо пакунок %s не знайдено" - -#: cmdline/apt-get.cc:2282 -#, c-format -msgid "" -"%s dependency for %s cannot be satisfied because no available versions of " -"package %s can satisfy version requirements" -msgstr "" -"Залежність типу %s для %s не може бути задоволена, бо ні одна з версій " -"пакунка %s не задовольняє умови" - -#: cmdline/apt-get.cc:2317 -#, c-format -msgid "Failed to satisfy %s dependency for %s: Installed package %s is too new" -msgstr "" -"Не вдалося задовольнити залежність типу %s для пакунка %s: Встановлений " -"пакунок %s новіше, аніж треба" - -#: cmdline/apt-get.cc:2342 -#, c-format -msgid "Failed to satisfy %s dependency for %s: %s" -msgstr "Неможливо задовольнити залежність типу %s для пакунка %s: %s" - -#: cmdline/apt-get.cc:2356 -#, c-format -msgid "Build-dependencies for %s could not be satisfied." -msgstr "Залежності для побудови %s не можуть бути задоволені." - -#: cmdline/apt-get.cc:2360 -msgid "Failed to process build dependencies" -msgstr "Обробка залежностей для побудови закінчилася невдало" - -#: cmdline/apt-get.cc:2392 -msgid "Supported modules:" -msgstr "Підтримувані модулі:" - -#: cmdline/apt-get.cc:2433 -msgid "" -"Usage: apt-get [options] command\n" -" apt-get [options] install|remove pkg1 [pkg2 ...]\n" -" apt-get [options] source pkg1 [pkg2 ...]\n" -"\n" -"apt-get is a simple command line interface for downloading and\n" -"installing packages. The most frequently used commands are update\n" -"and install.\n" -"\n" -"Commands:\n" -" update - Retrieve new lists of packages\n" -" upgrade - Perform an upgrade\n" -" install - Install new packages (pkg is libc6 not libc6.deb)\n" -" remove - Remove packages\n" -" source - Download source archives\n" -" build-dep - Configure build-dependencies for source packages\n" -" dist-upgrade - Distribution upgrade, see apt-get(8)\n" -" dselect-upgrade - Follow dselect selections\n" -" clean - Erase downloaded archive files\n" -" autoclean - Erase old downloaded archive files\n" -" check - Verify that there are no broken dependencies\n" -"\n" -"Options:\n" -" -h This help text.\n" -" -q Loggable output - no progress indicator\n" -" -qq No output except for errors\n" -" -d Download only - do NOT install or unpack archives\n" -" -s No-act. Perform ordering simulation\n" -" -y Assume Yes to all queries and do not prompt\n" -" -f Attempt to continue if the integrity check fails\n" -" -m Attempt to continue if archives are unlocatable\n" -" -u Show a list of upgraded packages as well\n" -" -b Build the source package after fetching it\n" -" -V Show verbose version numbers\n" -" -c=? Read this configuration file\n" -" -o=? Set an arbitrary configuration option, eg -o dir::cache=/tmp\n" -"See the apt-get(8), sources.list(5) and apt.conf(5) manual\n" -"pages for more information and options.\n" -" This APT has Super Cow Powers.\n" -msgstr "" -"Використання: apt-get [options] command\n" -" apt-get [options] install|remove pkg1 [pkg2 ...]\n" -" apt-get [options] source pkg1 [pkg2 ...]\n" -"\n" -"apt-get - простий інтерфейс командного рядка для завантаження й\n" -"встановлення пакунків. Найбільш часто використовувані команди - update \n" -"і install.\n" -"\n" -"Команди:\n" -" update - завантажити нові переліки пакунків\n" -" upgrade - виконати оновлення пакунків\n" -" install - встановити нові пакунки (назва пакунка вказується\n" -" як libc6, а не libc6.deb)\n" -" remove - видалити пакунок\n" -" source - завантажити архіви з вихідними текстами\n" -" build-dep - завантажити все необхідне для побудови зазначеного\n" -" пакунку з вихідних текстів\n" -" dist-upgrade - оновити всю систему, докладніше - в apt-get(8)\n" -" dselect-upgrade - керуватися вибором, зробленим в dselect'і\n" -" clean - видалити завантажені архіви\n" -" autoclean - видалити старі завантажені архіви\n" -" check - перевірити наявність порушених залежностей\n" -"\n" -"Опції:\n" -" -h Цей текст.\n" -" -q Виводити повідомлення, придатні для запису у файл журналу.\n" -" Не виводити індикатор прогресу\n" -" -qq Виводити тільки повідомлення про помилки\n" -" -d Тільки завантажити - не встановлювати й не розпаковувати архіви\n" -" -s Не виконувати дії насправді. Імітація роботи\n" -" -y Відповідати \"Так\" на всі питання. Самі питання при цьому не " -"виводяться\n" -" -f Продовжувати, навіть якщо перевірка цілісності не пройшла\n" -" -m Продовжувати, навіть якщо місце розташування архівів невідомо\n" -" -u Показувати список оновлюваних пакунків\n" -" -b Компілювати пакунок з вихідних текстів після їхнього завантаження\n" -" -V Показувати версії пакунків\n" -" -c=? Читати зазначений файл конфігурації\n" -" -o=? Встановити довільну опцію, наприклад, -o dir::cache=/tmp\n" -"Сторінки керівництва apt-get(8), sources.list(5) і apt.conf(5)\n" -"містять більше інформації.\n" -" This APT has Super Cow Powers.\n" - -#: cmdline/acqprogress.cc:55 -msgid "Hit " -msgstr "В кеші " - -#: cmdline/acqprogress.cc:79 -msgid "Get:" -msgstr "Отр:" - -#: cmdline/acqprogress.cc:110 -msgid "Ign " -msgstr "Ігн " - -#: cmdline/acqprogress.cc:114 -msgid "Err " -msgstr "Пом " - -#: cmdline/acqprogress.cc:135 -#, c-format -msgid "Fetched %sB in %s (%sB/s)\n" -msgstr "Отримано %sB за %sB (%sB/s)\n" - -#: cmdline/acqprogress.cc:225 -#, c-format -msgid " [Working]" -msgstr " [Йде робота]" - -#: cmdline/acqprogress.cc:271 -#, c-format -msgid "" -"Media change: please insert the disc labeled\n" -" '%s'\n" -"in the drive '%s' and press enter\n" -msgstr "" -"Зміна носія: вставте диск з міткою '%s' у пристрій '%s' і натисніть Ввід\n" - -#: cmdline/apt-sortpkgs.cc:86 -msgid "Unknown package record!" -msgstr "Запис про невідомий пакунок!" - -#: cmdline/apt-sortpkgs.cc:150 -msgid "" -"Usage: apt-sortpkgs [options] file1 [file2 ...]\n" -"\n" -"apt-sortpkgs is a simple tool to sort package files. The -s option is used\n" -"to indicate what kind of file it is.\n" -"\n" -"Options:\n" -" -h This help text\n" -" -s Use source file sorting\n" -" -c=? Read this configuration file\n" -" -o=? Set an arbitrary configuration option, eg -o dir::cache=/tmp\n" -msgstr "" -"Використання: apt-sortpkgs [options] file1 [file2 ...]\n" -"\n" -"apt-sortpkgs - простий інструмент для сортування переліків пакунків. Опція -" -"s\n" -"використається, щоб вказати тип списку.\n" -"\n" -"Опції:\n" -" -h цей текст\n" -" -s сортувати список файлів з вихідними текстами\n" -" -c=? читати зазначений файл конфігурації\n" -" -o=? встановити довільну опцію, наприклад, -o dir::cache=/tmp\n" - -#: dselect/install:32 -msgid "Bad default setting!" -msgstr "Неправильне значення по замовчуванню!" - -#: dselect/install:51 dselect/install:83 dselect/install:87 dselect/install:93 -#: dselect/install:104 dselect/update:45 -msgid "Press enter to continue." -msgstr "Для продовження натисніть Ввід." - -#: dselect/install:100 -msgid "Some errors occurred while unpacking. I'm going to configure the" -msgstr "" -"Під час розпакування виникли помилки. Буде продовжено процес налаштування" - -#: dselect/install:101 -msgid "packages that were installed. This may result in duplicate errors" -msgstr "встановлених пакунків. Це може призвести до повторення помилок або" - -#: dselect/install:102 -msgid "or errors caused by missing dependencies. This is OK, only the errors" -msgstr "виникненню нових через незадоволені залежності. Це нормально," - -#: dselect/install:103 -msgid "" -"above this message are important. Please fix them and run [I]nstall again" -msgstr "" -"важливі тільки помилки, зазначені вище. Виправте їх і виконаєте установку ще " -"раз" - -#: dselect/update:30 -msgid "Merging available information" -msgstr "Об'єднання інформації про доступні пакунки" - -#: apt-inst/contrib/extracttar.cc:117 -msgid "Failed to create pipes" -msgstr "Не вдалося створити канали (pipes)" - -#: apt-inst/contrib/extracttar.cc:144 -msgid "Failed to exec gzip " -msgstr "Не вдалося виконати компресор gzip" - -#: apt-inst/contrib/extracttar.cc:181 apt-inst/contrib/extracttar.cc:207 -msgid "Corrupted archive" -msgstr "Пошкоджений архів" - -#: apt-inst/contrib/extracttar.cc:196 -msgid "Tar checksum failed, archive corrupted" -msgstr "Контрольна сума tar архіва невірна, архів пошкоджений" - -#: apt-inst/contrib/extracttar.cc:299 -#, c-format -msgid "Unknown TAR header type %u, member %s" -msgstr "Невідомий тип заголовку TAR %u, член %s" - -#: apt-inst/contrib/arfile.cc:73 -msgid "Invalid archive signature" -msgstr "Невірний підпис архіву" - -#: apt-inst/contrib/arfile.cc:81 -msgid "Error reading archive member header" -msgstr "Неможливо прочитати заголовок \"member\" архіву" - -#: apt-inst/contrib/arfile.cc:93 apt-inst/contrib/arfile.cc:105 -msgid "Invalid archive member header" -msgstr "Невірний заголовок \"member\" архіву" - -#: apt-inst/contrib/arfile.cc:131 -msgid "Archive is too short" -msgstr "Архів занадто малий" - -#: apt-inst/contrib/arfile.cc:135 -msgid "Failed to read the archive headers" -msgstr "Не вдалося прочитати заголовки архіву" - -#: apt-inst/filelist.cc:384 -#, fuzzy -msgid "DropNode called on still linked node" -msgstr "DropNode викликаний для вузла, який ще використовується" - -#: apt-inst/filelist.cc:416 -msgid "Failed to locate the hash element!" -msgstr "Не вдалося знайти елемент хешу!" - -#: apt-inst/filelist.cc:463 -#, fuzzy -msgid "Failed to allocate diversion" -msgstr "Не вдалося створити diversion" - -#: apt-inst/filelist.cc:468 -msgid "Internal error in AddDiversion" -msgstr "Внутрішня помилка в AddDiversion" - -#: apt-inst/filelist.cc:481 -#, fuzzy, c-format -msgid "Trying to overwrite a diversion, %s -> %s and %s/%s" -msgstr "Спроба зміни diversion, %s -> %s і %s/%s" - -#: apt-inst/filelist.cc:510 -#, fuzzy, c-format -msgid "Double add of diversion %s -> %s" -msgstr "Подвійне додавання diversion %s -> %s" - -#: apt-inst/filelist.cc:553 -#, c-format -msgid "Duplicate conf file %s/%s" -msgstr "Копія конфігураційного файлу %s/%s" - -#: apt-inst/dirstream.cc:45 apt-inst/dirstream.cc:50 apt-inst/dirstream.cc:53 -#, c-format -msgid "Failed to write file %s" -msgstr "Не вдалося записати файл %s" - -#: apt-inst/dirstream.cc:96 apt-inst/dirstream.cc:104 -#, c-format -msgid "Failed to close file %s" -msgstr "Не вдалося закрити файл %s" - -#: apt-inst/extract.cc:96 apt-inst/extract.cc:167 -#, c-format -msgid "The path %s is too long" -msgstr "Шлях %s занадто довгий" - -#: apt-inst/extract.cc:127 -#, c-format -msgid "Unpacking %s more than once" -msgstr "Розпакування %s більш ніж один раз" - -#: apt-inst/extract.cc:137 -#, fuzzy, c-format -msgid "The directory %s is diverted" -msgstr "Тека %s входить до переліку diverted" - -#: apt-inst/extract.cc:147 -#, fuzzy, c-format -msgid "The package is trying to write to the diversion target %s/%s" -msgstr "Пакет пробує писати у diversion %s/%s" - -#: apt-inst/extract.cc:157 apt-inst/extract.cc:300 -#, fuzzy -msgid "The diversion path is too long" -msgstr "Шлях diversion занадто довгий" - -#: apt-inst/extract.cc:243 -#, c-format -msgid "The directory %s is being replaced by a non-directory" -msgstr "Тека %s замінюється не текою" - -#: apt-inst/extract.cc:283 -#, fuzzy -msgid "Failed to locate node in its hash bucket" -msgstr "Не вдалося розмістити вузол у хеші" - -#: apt-inst/extract.cc:287 -msgid "The path is too long" -msgstr "Шлях занадто довгий" - -#: apt-inst/extract.cc:417 -#, fuzzy, c-format -msgid "Overwrite package match with no version for %s" -msgstr "Файли заміняються вмістом пакета %s без версії" - -#: apt-inst/extract.cc:434 -#, fuzzy, c-format -msgid "File %s/%s overwrites the one in the package %s" -msgstr "Файл %s/%s перезаписує інший з пакету %s" - -#: 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 -#, c-format -msgid "Unable to read %s" -msgstr "Неможливо прочитати %s" - -#: apt-inst/extract.cc:494 -#, c-format -msgid "Unable to stat %s" -msgstr "Неможливо прочитати атрибути %s" - -#: apt-inst/deb/dpkgdb.cc:55 apt-inst/deb/dpkgdb.cc:61 -#, c-format -msgid "Failed to remove %s" -msgstr "Невдача видалення %s" - -#: apt-inst/deb/dpkgdb.cc:110 apt-inst/deb/dpkgdb.cc:112 -#, c-format -msgid "Unable to create %s" -msgstr "Неможливо створити %s" - -#: apt-inst/deb/dpkgdb.cc:118 -#, c-format -msgid "Failed to stat %sinfo" -msgstr "Не вдалося прочитати атрибути %sinfo" - -#: apt-inst/deb/dpkgdb.cc:123 -msgid "The info and temp directories need to be on the same filesystem" -msgstr "Теки info і temp повинні бути на тій самій файловій системі" - -#. Build the status cache -#: apt-inst/deb/dpkgdb.cc:139 apt-pkg/pkgcachegen.cc:643 -#: apt-pkg/pkgcachegen.cc:712 apt-pkg/pkgcachegen.cc:717 -#: apt-pkg/pkgcachegen.cc:840 -msgid "Reading package lists" -msgstr "Читання переліків пакетів" - -#: apt-inst/deb/dpkgdb.cc:180 -#, c-format -msgid "Failed to change to the admin dir %sinfo" -msgstr "Невдача зміни до адмінової теки %sinfo" - -#: apt-inst/deb/dpkgdb.cc:201 apt-inst/deb/dpkgdb.cc:355 -#: apt-inst/deb/dpkgdb.cc:448 -msgid "Internal error getting a package name" -msgstr "Внутрішня помилка отримання назви пакунку" - -#: apt-inst/deb/dpkgdb.cc:205 apt-inst/deb/dpkgdb.cc:386 -msgid "Reading file listing" -msgstr "Читання переліку файлів" - -#: apt-inst/deb/dpkgdb.cc:216 -#, c-format -msgid "" -"Failed to open the list file '%sinfo/%s'. If you cannot restore this file " -"then make it empty and immediately re-install the same version of the " -"package!" -msgstr "" -"Не вдалося відкрити list файл '%sinfo/%s'. Якщо Ви не можете відновити цей " -"файл, тоді зробіть його пустим і негайно реінсталюйте ту ж саму версію " -"пакунка!" - -#: apt-inst/deb/dpkgdb.cc:229 apt-inst/deb/dpkgdb.cc:242 -#, c-format -msgid "Failed reading the list file %sinfo/%s" -msgstr "Невдача читання list файла %sinfo/%s" - -#: apt-inst/deb/dpkgdb.cc:266 -#, fuzzy -msgid "Internal error getting a node" -msgstr "Внутрішня помилка при отриманні Node" - -#: apt-inst/deb/dpkgdb.cc:309 -#, fuzzy, c-format -msgid "Failed to open the diversions file %sdiversions" -msgstr "Не вдалося відкрити файл diversions %sdiversions" - -#: apt-inst/deb/dpkgdb.cc:324 -#, fuzzy -msgid "The diversion file is corrupted" -msgstr "Файл diversions пошкоджений" - -#: apt-inst/deb/dpkgdb.cc:331 apt-inst/deb/dpkgdb.cc:336 -#: apt-inst/deb/dpkgdb.cc:341 -#, fuzzy, c-format -msgid "Invalid line in the diversion file: %s" -msgstr "Невірна лінія в файлі diversions: %s" - -#: apt-inst/deb/dpkgdb.cc:362 -#, fuzzy -msgid "Internal error adding a diversion" -msgstr "Внутрішня помилка при додаванні diversion" - -#: apt-inst/deb/dpkgdb.cc:383 -msgid "The pkg cache must be initialized first" -msgstr "Кеш пакунків повинен бути ініціалізованим першим" - -#: apt-inst/deb/dpkgdb.cc:443 -#, fuzzy, c-format -msgid "Failed to find a Package: header, offset %lu" -msgstr "Не вдалося знайти пакунок: заголовок, зсув %lu" - -#: apt-inst/deb/dpkgdb.cc:465 -#, fuzzy, c-format -msgid "Bad ConfFile section in the status file. Offset %lu" -msgstr "Погана секція ConfFile у статусному файлі. Зсув %lu" - -#: apt-inst/deb/dpkgdb.cc:470 -#, fuzzy, c-format -msgid "Error parsing MD5. Offset %lu" -msgstr "Помилка обробки MD5. Зсув %lu" - -#: apt-inst/deb/debfile.cc:42 apt-inst/deb/debfile.cc:47 -#, c-format -msgid "This is not a valid DEB archive, missing '%s' member" -msgstr "Невірний DEB архів, відсутній член '%s'" - -#: apt-inst/deb/debfile.cc:52 -#, c-format -msgid "This is not a valid DEB archive, it has no '%s' or '%s' member" -msgstr "Невірний DEB архів, відсутній член '%s' чи '%s'" - -#: apt-inst/deb/debfile.cc:112 -#, c-format -msgid "Couldn't change to %s" -msgstr "Неможливо змінити %s" - -#: apt-inst/deb/debfile.cc:138 -msgid "Internal error, could not locate member" -msgstr "Внутрішня помилка, не можу знайти member" - -#: apt-inst/deb/debfile.cc:171 -msgid "Failed to locate a valid control file" -msgstr "Не вдалося знайти правильний контрольний (control) файл" - -#: apt-inst/deb/debfile.cc:256 -msgid "Unparsable control file" -msgstr "Контрольний файл не можливо обробити" - -#: methods/cdrom.cc:114 -#, c-format -msgid "Unable to read the cdrom database %s" -msgstr "Неможливо прочитати базу %s з cdrom'у" - -#: 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 "" -"Будь-ласка використовуйте apt-cdrom, щоб APT розпізнав цей CD-ROM, apt-get " -"update не може бути використаним для додання нових CD" - -#: methods/cdrom.cc:131 -msgid "Wrong CD-ROM" -msgstr "Невірний CD-ROM" - -#: methods/cdrom.cc:164 -#, c-format -msgid "Unable to unmount the CD-ROM in %s, it may still be in use." -msgstr "Неможливо демонтувати CDROM в %s, можливо він все ще використовується." - -#: methods/cdrom.cc:169 -msgid "Disk not found." -msgstr "Диск не знайдено." - -#: methods/cdrom.cc:177 methods/file.cc:79 methods/rsh.cc:264 -msgid "File not found" -msgstr "Файл не знайдено" - -#: 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:147 -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 "Сервер розірвав з'єднання і мовив: %s" - -#: methods/ftp.cc:210 -#, c-format -msgid "USER failed, server said: %s" -msgstr "USER невдало, сервер мовив: %s" - -#: methods/ftp.cc:217 -#, c-format -msgid "PASS failed, server said: %s" -msgstr "PASS невдало, сервер мовив: %s" - -#: methods/ftp.cc:237 -msgid "" -"A proxy server was specified but no login script, Acquire::ftp::ProxyLogin " -"is empty." -msgstr "" -"Вказано проксі-сервер, але відсутній скрипт логіну, Acquire::ftp::ProxyLogin " -"пустий." - -#: methods/ftp.cc:265 -#, c-format -msgid "Login script command '%s' failed, server said: %s" -msgstr "Команда '%s'скрипту логіна не вдалася, сервер мовив: %s" - -#: methods/ftp.cc:291 -#, c-format -msgid "TYPE failed, server said: %s" -msgstr "TYPE невдало, сервер мовив: %s" - -#: 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 "Неможливо створити сокет (socket)" - -#: methods/ftp.cc:698 -msgid "Could not connect data socket, connection timed out" -msgstr "Неможливо під'єднати сокет (socket) з даними, час з'єднання вичерпався" - -#: methods/ftp.cc:704 -msgid "Could not connect passive socket." -msgstr "Неможливо під'єднати пасивний сокет (passive socket)." - -#: methods/ftp.cc:722 -#, fuzzy -msgid "getaddrinfo was unable to get a listening socket" -msgstr "Виклик getaddrinfo не зміг отримати сокет" - -#: methods/ftp.cc:736 -msgid "Could not bind a socket" -msgstr "Неможливо приєднатися до сокета" - -#: methods/ftp.cc:740 -#, fuzzy -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 "Неможливо відіслати команду PORT" - -#: methods/ftp.cc:789 -#, c-format -msgid "Unknown address family %u (AF_*)" -msgstr "Невідоме адресове сімейство %u (AF_*)" - -#: methods/ftp.cc:798 -#, c-format -msgid "EPRT failed, server said: %s" -msgstr "EPRT невдало, сервер мовив: %s" - -#: 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:958 methods/rsh.cc:303 -msgid "Problem hashing file" -msgstr "Проблема хешування файла" - -#: methods/ftp.cc:877 -#, c-format -msgid "Unable to fetch file, server said '%s'" -msgstr "Неможливо завантажити файл, сервер мовив: '%s'" - -#: methods/ftp.cc:892 methods/rsh.cc:322 -msgid "Data socket timed out" -msgstr "Час з'єднання з сокетом (socket) з даними вичерпався" - -#: methods/ftp.cc:922 -#, c-format -msgid "Data transfer failed, server said '%s'" -msgstr "Передача даних обірвалася, сервер мовив '%s'" - -#. Get the files information -#: methods/ftp.cc:997 -msgid "Query" -msgstr "Черга" - -#: methods/ftp.cc:1109 -msgid "Unable to invoke " -msgstr "Неможливо викликати " - -#: methods/connect.cc:64 -#, c-format -msgid "Connecting to %s (%s)" -msgstr "З'єднання з %s (%s)" - -#: methods/connect.cc:71 -#, c-format -msgid "[IP: %s %s]" -msgstr "[IP: %s %s]" - -#: methods/connect.cc:80 -#, c-format -msgid "Could not create a socket for %s (f=%u t=%u p=%u)" -msgstr "Неможливо створити сокет для %s (f=%u t=%u p=%u)" - -#: methods/connect.cc:86 -#, c-format -msgid "Cannot initiate the connection to %s:%s (%s)." -msgstr "Неможливо ініціалізувати з'єднання з %s:%s (%s)." - -#: methods/connect.cc:93 -#, c-format -msgid "Could not connect to %s:%s (%s), connection timed out" -msgstr "Неможливо з'єднатися з %s:%s (%s), час з'єднання вичерпався" - -#: methods/connect.cc:108 -#, c-format -msgid "Could not connect to %s:%s (%s)." -msgstr "Не можливо під'єднатися до %s:%s (%s)." - -#. 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 -#, c-format -msgid "Connecting to %s" -msgstr "З'єднання з %s" - -#: methods/connect.cc:167 -#, c-format -msgid "Could not resolve '%s'" -msgstr "Не можу знайти IP адрес для %s" - -#: methods/connect.cc:173 -#, c-format -msgid "Temporary failure resolving '%s'" -msgstr "Тимчасова помилка при отриманні IP адреси '%s'" - -#: methods/connect.cc:176 -#, c-format -msgid "Something wicked happened resolving '%s:%s' (%i)" -msgstr "Сталося щось дивне при спробі отримати IP адрес для '%s:%s' (%i)" - -#: methods/connect.cc:223 -#, c-format -msgid "Unable to connect to %s %s:" -msgstr "Не можливо під'єднатися до %s %s:" - -#: methods/gpgv.cc:65 -#, fuzzy, c-format -msgid "Couldn't access keyring: '%s'" -msgstr "Неможливо отримати доступ до keyring: '%s'" - -#: methods/gpgv.cc:100 -msgid "E: Argument list from Acquire::gpgv::Options too long. Exiting." -msgstr "" -"E: Перелік аргументів з Acquire::gpgv::Options занадто довгий. Відміна." - -#: methods/gpgv.cc:204 -msgid "" -"Internal error: Good signature, but could not determine key fingerprint?!" -msgstr "" -"Внутрішня помилка: Вірний підпис (signature), але не можливо визначити його " -"відбиток?!" - -#: methods/gpgv.cc:209 -msgid "At least one invalid signature was encountered." -msgstr "Знайдено як мінімум один невірний підпис." - -#: methods/gpgv.cc:213 -#, c-format -msgid "Could not execute '%s' to verify signature (is gnupg installed?)" -msgstr "Неможливо виконати '%s' для перевірки підпису, gnupg встановлено?" - -#: methods/gpgv.cc:218 -msgid "Unknown error executing gpgv" -msgstr "Невідома помилка виконання gpgv" - -#: methods/gpgv.cc:249 -msgid "The following signatures were invalid:\n" -msgstr "Слідуючі підписи були невірними:\n" - -#: methods/gpgv.cc:256 -msgid "" -"The following signatures couldn't be verified because the public key is not " -"available:\n" -msgstr "" -"Слідуючі підписи не можуть бути перевірені, тому що, публічний ключ " -"відсутній:\n" - -#: methods/gzip.cc:64 -#, c-format -msgid "Couldn't open pipe for %s" -msgstr "Неможливо відкрити канал (pipe) для %s" - -#: methods/gzip.cc:109 -#, c-format -msgid "Read error from %s process" -msgstr "Помилка читання з процесу %s" - -#: methods/http.cc:376 -msgid "Waiting for headers" -msgstr "Очікування на заголовки" - -#: methods/http.cc:522 -#, c-format -msgid "Got a single header line over %u chars" -msgstr "Отримано одну заголовкову лінію понад %u символів" - -#: methods/http.cc:530 -msgid "Bad header line" -msgstr "Невірна лінія заголовку" - -#: methods/http.cc:549 methods/http.cc:556 -msgid "The HTTP server sent an invalid reply header" -msgstr "HTTP сервер відіслав невірний заголовок 'reply'" - -#: methods/http.cc:585 -msgid "The HTTP server sent an invalid Content-Length header" -msgstr "HTTP сервер відіслав невірний заголовок 'Content-Length'" - -#: methods/http.cc:600 -msgid "The HTTP server sent an invalid Content-Range header" -msgstr "HTTP сервер відіслав невірний заголовок 'Content-Length'" - -#: methods/http.cc:602 -msgid "This HTTP server has broken range support" -msgstr "Цей HTTP сервер має поламану підтримку 'range'" - -#: methods/http.cc:626 -msgid "Unknown date format" -msgstr "Невідомий формат дати" - -#: methods/http.cc:773 -msgid "Select failed" -msgstr "Вибір не вдався" - -#: methods/http.cc:778 -msgid "Connection timed out" -msgstr "Час очікування з'єднання вийшов" - -#: methods/http.cc:801 -msgid "Error writing to output file" -msgstr "Помилка запису в вихідний файл" - -#: methods/http.cc:832 -#, fuzzy -msgid "Error writing to file" -msgstr "Помилка запису в файл" - -#: methods/http.cc:860 -#, fuzzy -msgid "Error writing to the file" -msgstr "Помилка запису в файл" - -#: methods/http.cc:874 -msgid "Error reading from server. Remote end closed connection" -msgstr "Помилка читання з сервера. Віддалена сторона закрила з'єднання" - -#: methods/http.cc:876 -msgid "Error reading from server" -msgstr "Помилка читання з сервера" - -#: methods/http.cc:1107 -msgid "Bad header data" -msgstr "Погана заголовкова інформація" - -#: methods/http.cc:1124 -msgid "Connection failed" -msgstr "З'єднання не вдалося" - -#: methods/http.cc:1215 -msgid "Internal error" -msgstr "Внутрішня помилка" - -#: apt-pkg/contrib/mmap.cc:82 -msgid "Can't mmap an empty file" -msgstr "Неможливо відобразити в пам'яті пустий файл" - -#: apt-pkg/contrib/mmap.cc:87 -#, c-format -msgid "Couldn't make mmap of %lu bytes" -msgstr "Неможливо відобразити в пам'яті %lu байт" - -#: apt-pkg/contrib/strutl.cc:938 -#, c-format -msgid "Selection %s not found" -msgstr "Вибір %s не знайдено" - -#: apt-pkg/contrib/configuration.cc:436 -#, c-format -msgid "Unrecognized type abbreviation: '%c'" -msgstr "Нерозпізнаваний тип абревіатури: '%c'" - -#: apt-pkg/contrib/configuration.cc:494 -#, c-format -msgid "Opening configuration file %s" -msgstr "Відкривається конфігураційний файл %s" - -#: apt-pkg/contrib/configuration.cc:512 -#, c-format -msgid "Line %d too long (max %d)" -msgstr "Лінія %d занадто довга (максимум %d)" - -#: apt-pkg/contrib/configuration.cc:608 -#, c-format -msgid "Syntax error %s:%u: Block starts with no name." -msgstr "Синтаксова помилка %s:%u: Блок починається без назви." - -#: apt-pkg/contrib/configuration.cc:627 -#, c-format -msgid "Syntax error %s:%u: Malformed tag" -msgstr "Синтаксова помилка %s:%u: спотворений тег" - -#: apt-pkg/contrib/configuration.cc:644 -#, c-format -msgid "Syntax error %s:%u: Extra junk after value" -msgstr "Синтаксова помилка %s:%u: зайві символи після величини" - -#: apt-pkg/contrib/configuration.cc:684 -#, fuzzy, c-format -msgid "Syntax error %s:%u: Directives can only be done at the top level" -msgstr "" -"Синтаксова помилка %s:%u: Директиви можуть бути виконані тільки на " -"найвищому рівні" - -#: apt-pkg/contrib/configuration.cc:691 -#, c-format -msgid "Syntax error %s:%u: Too many nested includes" -msgstr "Синтаксова помилка %s:%u: Забагато вмонтованих включень" - -#: apt-pkg/contrib/configuration.cc:695 apt-pkg/contrib/configuration.cc:700 -#, c-format -msgid "Syntax error %s:%u: Included from here" -msgstr "Синтаксова помилка %s:%u: Включена звідси" - -#: apt-pkg/contrib/configuration.cc:704 -#, c-format -msgid "Syntax error %s:%u: Unsupported directive '%s'" -msgstr "Синтаксова помилка %s:%u: Директива '%s' не підтримується" - -#: apt-pkg/contrib/configuration.cc:738 -#, c-format -msgid "Syntax error %s:%u: Extra junk at end of file" -msgstr "Синтаксова помилка %s:%u: зайві символи в кінці файла" - -#: apt-pkg/contrib/progress.cc:154 -#, c-format -msgid "%c%s... Error!" -msgstr "%c%s... Помилка!" - -#: apt-pkg/contrib/progress.cc:156 -#, c-format -msgid "%c%s... Done" -msgstr "%c%s... Виконано" - -#: apt-pkg/contrib/cmndline.cc:80 -#, c-format -msgid "Command line option '%c' [from %s] is not known." -msgstr "Невідомий параметр '%c' [з %s] командного рядка." - -#: apt-pkg/contrib/cmndline.cc:106 apt-pkg/contrib/cmndline.cc:114 -#: apt-pkg/contrib/cmndline.cc:122 -#, c-format -msgid "Command line option %s is not understood" -msgstr "Незрозумілий параметр %s командного рядка" - -#: apt-pkg/contrib/cmndline.cc:127 -#, c-format -msgid "Command line option %s is not boolean" -msgstr "Не логічний параметр %s командного рядка" - -#: apt-pkg/contrib/cmndline.cc:166 apt-pkg/contrib/cmndline.cc:187 -#, c-format -msgid "Option %s requires an argument." -msgstr "Параметр %s потребує аргумента." - -#: apt-pkg/contrib/cmndline.cc:201 apt-pkg/contrib/cmndline.cc:207 -#, c-format -msgid "Option %s: Configuration item specification must have an =<val>." -msgstr "" - -#: apt-pkg/contrib/cmndline.cc:237 -#, c-format -msgid "Option %s requires an integer argument, not '%s'" -msgstr "Параметр %s потребує integer аргумент, але не '%s'" - -#: apt-pkg/contrib/cmndline.cc:268 -#, c-format -msgid "Option '%s' is too long" -msgstr "Параметр '%s' занадто довгий" - -#: apt-pkg/contrib/cmndline.cc:301 -#, c-format -msgid "Sense %s is not understood, try true or false." -msgstr "Незрозумілий вираз %s , спробуйте true чи false." - -#: apt-pkg/contrib/cmndline.cc:351 -#, c-format -msgid "Invalid operation %s" -msgstr "Невірна дія %s" - -#: apt-pkg/contrib/cdromutl.cc:55 -#, c-format -msgid "Unable to stat the mount point %s" -msgstr "Неможливо прочитати атрибути точки монтування %s" - -#: 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 "Неможливо зробити зміни у %s" - -#: apt-pkg/contrib/cdromutl.cc:190 -msgid "Failed to stat the cdrom" -msgstr "Не вдалося прочитати атрибути cdrom" - -#: apt-pkg/contrib/fileutl.cc:82 -#, c-format -msgid "Not using locking for read only lock file %s" -msgstr "" -"Блокування не використовується, так як файл блокування %s доступний тільки " -"для читання" - -#: apt-pkg/contrib/fileutl.cc:87 -#, c-format -msgid "Could not open lock file %s" -msgstr "Не можливо відкрити lock файл %s" - -#: apt-pkg/contrib/fileutl.cc:105 -#, c-format -msgid "Not using locking for nfs mounted lock file %s" -msgstr "" -"Блокування не використовується, так як файл блокування %s знаходиться на " -"файловій системі nfs" - -#: apt-pkg/contrib/fileutl.cc:109 -#, fuzzy, c-format -msgid "Could not get lock %s" -msgstr "Не можливо отримати lock %s" - -#: apt-pkg/contrib/fileutl.cc:377 -#, c-format -msgid "Waited for %s but it wasn't there" -msgstr "Очікується на %s але його тут немає" - -#: apt-pkg/contrib/fileutl.cc:387 -#, c-format -msgid "Sub-process %s received a segmentation fault." -msgstr "Підпроцес %s отримав segmentation fault." - -#: apt-pkg/contrib/fileutl.cc:390 -#, c-format -msgid "Sub-process %s returned an error code (%u)" -msgstr "Підпроцес %s повернув код помилки (%u)" - -#: apt-pkg/contrib/fileutl.cc:392 -#, c-format -msgid "Sub-process %s exited unexpectedly" -msgstr "Підпроцес %s раптово завершився" - -#: apt-pkg/contrib/fileutl.cc:436 -#, c-format -msgid "Could not open file %s" -msgstr "Не можливо відкрити файл %s" - -#: apt-pkg/contrib/fileutl.cc:492 -#, c-format -msgid "read, still have %lu to read but none left" -msgstr "" -"помилка при читанні. мали прочитати ще %lu байт, але нічого більше нема" - -#: apt-pkg/contrib/fileutl.cc:522 -#, c-format -msgid "write, still have %lu to write but couldn't" -msgstr "помилка при записі, мали прочитати ще %lu байт, але не змогли" - -#: apt-pkg/contrib/fileutl.cc:597 -msgid "Problem closing the file" -msgstr "Проблема з закриттям файла" - -#: apt-pkg/contrib/fileutl.cc:603 -msgid "Problem unlinking the file" -msgstr "Проблема з роз'єднанням файла" - -#: apt-pkg/contrib/fileutl.cc:614 -msgid "Problem syncing the file" -msgstr "Проблема з синхронізацією файла" - -#: apt-pkg/pkgcache.cc:126 -msgid "Empty package cache" -msgstr "Кеш пакунків пустий" - -#: apt-pkg/pkgcache.cc:132 -msgid "The package cache file is corrupted" -msgstr "Файл кешу пакунків пошкоджений" - -#: apt-pkg/pkgcache.cc:137 -msgid "The package cache file is an incompatible version" -msgstr "Файл кешу пакунків має несумісну версію" - -#: apt-pkg/pkgcache.cc:142 -#, c-format -msgid "This APT does not support the versioning system '%s'" -msgstr "APT не підтримує систему призначення версій '%s'" - -#: apt-pkg/pkgcache.cc:147 -msgid "The package cache was built for a different architecture" -msgstr "Кеш пакунків був побудований для іншої архітектури" - -#: apt-pkg/pkgcache.cc:218 -msgid "Depends" -msgstr "Залежності (Depends)" - -#: apt-pkg/pkgcache.cc:218 -msgid "PreDepends" -msgstr "Пре-Залежності (PreDepends)" - -#: apt-pkg/pkgcache.cc:218 -msgid "Suggests" -msgstr "Пропонує (Suggests)" - -#: apt-pkg/pkgcache.cc:219 -msgid "Recommends" -msgstr "Рекомендує" - -#: apt-pkg/pkgcache.cc:219 -msgid "Conflicts" -msgstr "Конфлікти" - -#: apt-pkg/pkgcache.cc:219 -msgid "Replaces" -msgstr "Заміняє (Replaces)" - -#: apt-pkg/pkgcache.cc:220 -msgid "Obsoletes" -msgstr "Застарілі (Obsoletes)" - -#: apt-pkg/pkgcache.cc:231 -msgid "important" -msgstr "Важливі (Important)" - -#: apt-pkg/pkgcache.cc:231 -msgid "required" -msgstr "Необхідні (Required)" - -#: apt-pkg/pkgcache.cc:231 -msgid "standard" -msgstr "Стандартні (Standard)" - -#: apt-pkg/pkgcache.cc:232 -msgid "optional" -msgstr "Необов'язкові (Optional)" - -#: apt-pkg/pkgcache.cc:232 -msgid "extra" -msgstr "Додаткові (Extra)" - -#: apt-pkg/depcache.cc:61 apt-pkg/depcache.cc:90 -msgid "Building dependency tree" -msgstr "Побудова дерева залежностей" - -#: apt-pkg/depcache.cc:62 -msgid "Candidate versions" -msgstr "Версії кандидатів" - -#: apt-pkg/depcache.cc:91 -msgid "Dependency generation" -msgstr "Ґенерація залежностей" - -#: apt-pkg/tagfile.cc:106 -#, c-format -msgid "Unable to parse package file %s (1)" -msgstr "Неможливо обробити файл %s пакунку (1)" - -#: apt-pkg/tagfile.cc:193 -#, c-format -msgid "Unable to parse package file %s (2)" -msgstr "Неможливо обробити файл %s пакунку (2)" - -#: apt-pkg/sourcelist.cc:94 -#, c-format -msgid "Malformed line %lu in source list %s (URI)" -msgstr "Спотворена лінія %lu у переліку джерел %s (проблема в URI)" - -#: apt-pkg/sourcelist.cc:96 -#, c-format -msgid "Malformed line %lu in source list %s (dist)" -msgstr "" -"Спотворена лінія %lu у переліку джерел %s (проблема в назві дистрибутиву)" - -#: apt-pkg/sourcelist.cc:99 -#, c-format -msgid "Malformed line %lu in source list %s (URI parse)" -msgstr "Спотворена лінія %lu у переліку джерел %s (обробка URI)" - -#: apt-pkg/sourcelist.cc:105 -#, c-format -msgid "Malformed line %lu in source list %s (absolute dist)" -msgstr "Спотворена лінія %lu у переліку джерел %s (absolute dist)" - -#: apt-pkg/sourcelist.cc:112 -#, c-format -msgid "Malformed line %lu in source list %s (dist parse)" -msgstr "Спотворена лінія %lu у переліку джерел %s (dist parse)" - -#: apt-pkg/sourcelist.cc:203 -#, c-format -msgid "Opening %s" -msgstr "Відкриття %s" - -#: apt-pkg/sourcelist.cc:220 apt-pkg/cdrom.cc:426 -#, c-format -msgid "Line %u too long in source list %s." -msgstr "Лінія %u занадто довга в переліку джерел %s." - -#: apt-pkg/sourcelist.cc:240 -#, c-format -msgid "Malformed line %u in source list %s (type)" -msgstr "Спотворена лінія %u у переліку джерел %s (тип)" - -#: apt-pkg/sourcelist.cc:244 -#, c-format -msgid "Type '%s' is not known on line %u in source list %s" -msgstr "Невідомий тип '%s' в лінії %u в переліку джерел %s" - -#: apt-pkg/sourcelist.cc:252 apt-pkg/sourcelist.cc:255 -#, c-format -msgid "Malformed line %u in source list %s (vendor id)" -msgstr "Спотворена лінія %u у переліку джерел %s (vendor id)" - -#: apt-pkg/packagemanager.cc:402 -#, c-format -msgid "" -"This installation run will require temporarily removing the essential " -"package %s due to a Conflicts/Pre-Depends loop. This is often bad, but if " -"you really want to do it, activate the APT::Force-LoopBreak option." -msgstr "" -"Для виконання даного встановлення потрібне тимчасове видалення важливого " -"пакету %s через конфлікти/петлеві пре-залежності (Pre-Depends loop). Це " -"погано, але якщо Ви дійсно бажаєте зробити це, активуйте параметр APT::Force-" -"LoopBreak." - -#: apt-pkg/pkgrecords.cc:37 -#, c-format -msgid "Index file type '%s' is not supported" -msgstr "Тип '%s' індексного файлу не підтримується" - -#: apt-pkg/algorithms.cc:241 -#, c-format -msgid "" -"The package %s needs to be reinstalled, but I can't find an archive for it." -msgstr "" -"Пакунок %s повинен бути перевстановленим, але я не можу знайти архіву для " -"нього." - -#: apt-pkg/algorithms.cc:1059 -msgid "" -"Error, pkgProblemResolver::Resolve generated breaks, this may be caused by " -"held packages." -msgstr "" -"Помилка, pkgProblemResolver::Resolve згенерував зупинку, це може бути " -"пов'язано з зафіксованими пакунками." - -#: apt-pkg/algorithms.cc:1061 -msgid "Unable to correct problems, you have held broken packages." -msgstr "Неможливо усунути проблеми, Ви маєте поламані зафіксовані пакунки." - -#: apt-pkg/acquire.cc:62 -#, c-format -msgid "Lists directory %spartial is missing." -msgstr "Lists тека %spartial відсутня." - -#: apt-pkg/acquire.cc:66 -#, c-format -msgid "Archive directory %spartial is missing." -msgstr "Архівна тека %spartial відсутня." - -#. only show the ETA if it makes sense -#. two days -#: apt-pkg/acquire.cc:823 -#, fuzzy, c-format -msgid "Retrieving file %li of %li (%s remaining)" -msgstr "Завантажується файл %li з %li (%s залишилось)" - -#: apt-pkg/acquire.cc:825 -#, fuzzy, c-format -msgid "Retrieving file %li of %li" -msgstr "Завантажується файл %li з %li" - -#: apt-pkg/acquire-worker.cc:113 -#, c-format -msgid "The method driver %s could not be found." -msgstr "Драйвер для метода %s не знайдено." - -#: apt-pkg/acquire-worker.cc:162 -#, c-format -msgid "Method %s did not start correctly" -msgstr "Метод %s не стартував коректно" - -#: apt-pkg/acquire-worker.cc:377 -#, c-format -msgid "Please insert the disc labeled: '%s' in the drive '%s' and press enter." -msgstr "" -"Будь-ласка, вставте диск з поміткою: '%s' в CD привід '%s' і натисніть Enter." - -#: apt-pkg/init.cc:120 -#, c-format -msgid "Packaging system '%s' is not supported" -msgstr "Система пакування '%s' не підтримується" - -#: apt-pkg/init.cc:136 -msgid "Unable to determine a suitable packaging system type" -msgstr "Неможливо визначити тип необхідної системи пакування " - -#: apt-pkg/clean.cc:61 -#, c-format -msgid "Unable to stat %s." -msgstr "Неможливо прочитати атрибути %s." - -#: apt-pkg/srcrecords.cc:48 -msgid "You must put some 'source' URIs in your sources.list" -msgstr "Ви повинні записати певні 'source' посилання в твій sources.list" - -#: apt-pkg/cachefile.cc:73 -msgid "The package lists or status file could not be parsed or opened." -msgstr "Не можу обробити чи відкрити перелік пакунків чи status файл." - -#: apt-pkg/cachefile.cc:77 -msgid "You may want to run apt-get update to correct these problems" -msgstr "Можливо, для виправлення цих помилок Ви захочете запустити apt-get" - -#: apt-pkg/policy.cc:269 -msgid "Invalid record in the preferences file, no Package header" -msgstr "Невірний запис в preferences файлі, відсутній заголовок Package" - -#: apt-pkg/policy.cc:291 -#, c-format -msgid "Did not understand pin type %s" -msgstr "Не зрозумів тип %s для pin" - -#: apt-pkg/policy.cc:299 -msgid "No priority (or zero) specified for pin" -msgstr "Не встановлено пріоритету (або встановлено 0) для pin" - -#: apt-pkg/pkgcachegen.cc:74 -msgid "Cache has an incompatible versioning system" -msgstr "Кеш має несумісну систему призначення версій" - -#: apt-pkg/pkgcachegen.cc:117 -#, c-format -msgid "Error occurred while processing %s (NewPackage)" -msgstr "Помилка, яка була викликана внаслідок обробки %s (NewPackage)" - -#: apt-pkg/pkgcachegen.cc:129 -#, c-format -msgid "Error occurred while processing %s (UsePackage1)" -msgstr "Помилка, яка була викликана внаслідок обробки %s (UsePackage1)" - -#: apt-pkg/pkgcachegen.cc:150 -#, c-format -msgid "Error occurred while processing %s (UsePackage2)" -msgstr "Помилка, яка була викликана внаслідок обробки %s (UsePackage2)" - -#: apt-pkg/pkgcachegen.cc:154 -#, c-format -msgid "Error occurred while processing %s (NewFileVer1)" -msgstr "Помилка, яка була викликана внаслідок обробки %s (NewFileVer1)" - -#: apt-pkg/pkgcachegen.cc:184 -#, c-format -msgid "Error occurred while processing %s (NewVersion1)" -msgstr "Помилка, яка була викликана внаслідок обробки %s (NewVersion1)" - -#: apt-pkg/pkgcachegen.cc:188 -#, c-format -msgid "Error occurred while processing %s (UsePackage3)" -msgstr "Помилка, яка була викликана внаслідок обробки %s (UsePackage3)" - -#: apt-pkg/pkgcachegen.cc:192 -#, c-format -msgid "Error occurred while processing %s (NewVersion2)" -msgstr "Помилка, яка була викликана внаслідок обробки %s (NewVersion2)" - -#: apt-pkg/pkgcachegen.cc:207 -msgid "Wow, you exceeded the number of package names this APT is capable of." -msgstr "Ви перевищили кількість імен пакунків, які APT може обробити." - -#: apt-pkg/pkgcachegen.cc:210 -msgid "Wow, you exceeded the number of versions this APT is capable of." -msgstr "Ви перевищили кількість версій, які APT може обробити." - -#: apt-pkg/pkgcachegen.cc:213 -msgid "Wow, you exceeded the number of dependencies this APT is capable of." -msgstr "Ви перевищили кількість залежностей які APT може обробити." - -#: apt-pkg/pkgcachegen.cc:241 -#, c-format -msgid "Error occurred while processing %s (FindPkg)" -msgstr "Помилка, яка була викликана внаслідок обробки %s (FindPkg)" - -#: apt-pkg/pkgcachegen.cc:254 -#, c-format -msgid "Error occurred while processing %s (CollectFileProvides)" -msgstr "Помилка, яка була викликана внаслідок обробки %s (CollectFileProvides)" - -#: apt-pkg/pkgcachegen.cc:260 -#, c-format -msgid "Package %s %s was not found while processing file dependencies" -msgstr "Пакунок %s %s не був знайдений під час обробки залежностей файла" - -#: apt-pkg/pkgcachegen.cc:574 -#, c-format -msgid "Couldn't stat source package list %s" -msgstr "Не вдалося прочитати атрибути переліку вихідних текстів%s" - -#: apt-pkg/pkgcachegen.cc:658 -#, fuzzy -msgid "Collecting File Provides" -msgstr "Збирання інформації про файлів " - -#: apt-pkg/pkgcachegen.cc:785 apt-pkg/pkgcachegen.cc:792 -msgid "IO Error saving source cache" -msgstr "Помилка IO під час збереження джерельного кешу" - -#: apt-pkg/acquire-item.cc:126 -#, c-format -msgid "rename failed, %s (%s -> %s)." -msgstr "Не вдалося перейменувати, %s (%s -> %s)." - -#: apt-pkg/acquire-item.cc:236 apt-pkg/acquire-item.cc:945 -msgid "MD5Sum mismatch" -msgstr "Невідповідність MD5Sum" - -#: apt-pkg/acquire-item.cc:640 -msgid "There is no public key available for the following key IDs:\n" -msgstr "Відсутній публічний ключ для заданих ID ключа:\n" - -#: apt-pkg/acquire-item.cc:753 -#, 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 "" -"Я не можу знайти файл для пакунку %s. Можливо, Ви захочете власноруч " -"виправити цей пакунок. (due to missing arch)" - -#: apt-pkg/acquire-item.cc:812 -#, 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 "" -"Я не можу знайти файл для пакунку %s. Можливо, Ви захочете власноруч " -"виправити цей пакунок." - -#: apt-pkg/acquire-item.cc:848 -#, c-format -msgid "" -"The package index files are corrupted. No Filename: field for package %s." -msgstr "" -"Індексні файли пакунків пошкоджені. Немає поля Filename для пакунку %s." - -#: apt-pkg/acquire-item.cc:935 -msgid "Size mismatch" -msgstr "Невідповідність розміру" - -#: apt-pkg/vendorlist.cc:66 -#, c-format -msgid "Vendor block %s contains no fingerprint" -msgstr "Блок постачальника %s не містить відбитку (fingerprint)" - -#: apt-pkg/cdrom.cc:507 -#, c-format -msgid "" -"Using CD-ROM mount point %s\n" -"Mounting CD-ROM\n" -msgstr "" -"Використовується точка монтування CDROM: %s\n" -"Монтування CD-ROM\n" - -#: apt-pkg/cdrom.cc:516 apt-pkg/cdrom.cc:598 -msgid "Identifying.. " -msgstr "Ідентифікація.. " - -#: apt-pkg/cdrom.cc:541 -#, c-format -msgid "Stored label: %s \n" -msgstr "Записано мітку: %s \n" - -#: apt-pkg/cdrom.cc:561 -#, c-format -msgid "Using CD-ROM mount point %s\n" -msgstr "Використовується точка монтування CDROM: %s\n" - -#: apt-pkg/cdrom.cc:579 -msgid "Unmounting CD-ROM\n" -msgstr "Демонтується CD-ROM\n" - -#: apt-pkg/cdrom.cc:583 -msgid "Waiting for disc...\n" -msgstr "Чекаю на диск...\n" - -#. Mount the new CDROM -#: apt-pkg/cdrom.cc:591 -msgid "Mounting CD-ROM...\n" -msgstr "Монтується CD-ROM...\n" - -#: apt-pkg/cdrom.cc:609 -msgid "Scanning disc for index files..\n" -msgstr "Диск сканується на індексні файли..\n" - -#: apt-pkg/cdrom.cc:647 -#, c-format -msgid "Found %i package indexes, %i source indexes and %i signatures\n" -msgstr "Знайдено %i індексів пакунків, %i індексів джерел і %i підписів\n" - -#: apt-pkg/cdrom.cc:710 -msgid "That is not a valid name, try again.\n" -msgstr "Не є вірною назвою, спробуйте ще.\n" - -#: apt-pkg/cdrom.cc:726 -#, c-format -msgid "" -"This disc is called: \n" -"'%s'\n" -msgstr "" -"Цей диск зветься: \n" -"'%s'\n" - -#: apt-pkg/cdrom.cc:730 -msgid "Copying package lists..." -msgstr "Копіюються переліки пакунків..." - -#: apt-pkg/cdrom.cc:754 -msgid "Writing new source list\n" -msgstr "Записується новий перелік джерел\n" - -#: apt-pkg/cdrom.cc:763 -msgid "Source list entries for this disc are:\n" -msgstr "Перелік джерел для цього диску:\n" - -#: apt-pkg/cdrom.cc:803 -msgid "Unmounting CD-ROM..." -msgstr "Демонтується CD-ROM..." - -#: apt-pkg/indexcopy.cc:261 -#, c-format -msgid "Wrote %i records.\n" -msgstr "Записано %i записів.\n" - -#: apt-pkg/indexcopy.cc:263 -#, c-format -msgid "Wrote %i records with %i missing files.\n" -msgstr "Записано %i записів з %i відсутніми файлами.\n" - -#: apt-pkg/indexcopy.cc:266 -#, c-format -msgid "Wrote %i records with %i mismatched files\n" -msgstr "Записано %i записів з %i невідповідними файлам\n" - -#: apt-pkg/indexcopy.cc:269 -#, c-format -msgid "Wrote %i records with %i missing files and %i mismatched files\n" -msgstr "Записано %i записів з %i відсутніми і %i невідповідними файлами\n" - -#: apt-pkg/deb/dpkgpm.cc:358 -#, c-format -msgid "Preparing %s" -msgstr "Підготовка %s" - -#: apt-pkg/deb/dpkgpm.cc:359 -#, c-format -msgid "Unpacking %s" -msgstr "Розпакування %s" - -#: apt-pkg/deb/dpkgpm.cc:364 -#, c-format -msgid "Preparing to configure %s" -msgstr "Підготовка до конфігурації %s" - -#: apt-pkg/deb/dpkgpm.cc:365 -#, c-format -msgid "Configuring %s" -msgstr "Конфігурація %s" - -#: apt-pkg/deb/dpkgpm.cc:366 -#, c-format -msgid "Installed %s" -msgstr "Встановлено %s" - -#: apt-pkg/deb/dpkgpm.cc:371 -#, c-format -msgid "Preparing for removal of %s" -msgstr "Підготовка до видалення %s" - -#: apt-pkg/deb/dpkgpm.cc:372 -#, c-format -msgid "Removing %s" -msgstr "Видаляється %s" - -#: apt-pkg/deb/dpkgpm.cc:373 -#, c-format -msgid "Removed %s" -msgstr "Видалено %s" - -#: apt-pkg/deb/dpkgpm.cc:378 -#, c-format -msgid "Preparing to completely remove %s" -msgstr "Підготовка до повного видалення %s" - -#: apt-pkg/deb/dpkgpm.cc:379 -#, c-format -msgid "Completely removed %s" -msgstr "Повністю видалено %s" - -#: methods/rsh.cc:330 -msgid "Connection closed prematurely" -msgstr "З'єднання завершено передчасно" - -#~ msgid "Could not patch file" -#~ msgstr "Неможливо накласти латку на файл" @@ -2622,8 +2622,7 @@ msgid "MD5Sum mismatch" msgstr "MD5Sum (tổng kiểm) không khớp được" #: apt-pkg/acquire-item.cc:640 -#, fuzzy -msgid "There are no public key available for the following key IDs:\n" +msgid "There is no public key available for the following key IDs:\n" msgstr "Không có khóa công sẵn sàng cho những ID khóa theo đây:\n" #: apt-pkg/acquire-item.cc:753 diff --git a/po/zh_CN.po b/po/zh_CN.po index 6907d45b8..1f48d1baa 100644 --- a/po/zh_CN.po +++ b/po/zh_CN.po @@ -1,15 +1,15 @@ # Chinese/Simplified translation of apt. # This file is put in the public domain. -# Tchaikov <tchaikov@sjtu.edu.cn>, 2005. +# Tchaikov <tchaikov@sjtu.org>, 2005,2007. # Carlos Z.F. Liu <carlosliu@users.sourceforge.net>, 2004,2006 # msgid "" msgstr "" "Project-Id-Version: apt 0.5.23\n" "Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2006-10-11 20:34+0200\n" -"PO-Revision-Date: 2006-02-22 14:20+1300\n" -"Last-Translator: Carlos Z.F. Liu <carlosliu@users.sourceforge.net>\n" +"POT-Creation-Date: 2006-12-19 11:37+0100\n" +"PO-Revision-Date: 2007-03-29 17:14+0800\n" +"Last-Translator: Kov Chai <tchaikov@sjtu.org>\n" "Language-Team: Debian Chinese [GB] <debian-chinese-gb@lists.debian.org>\n" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=UTF-8\n" @@ -437,6 +437,7 @@ msgid "" "DB format is invalid. If you upgraded from a older version of apt, please " "remove and re-create the database." msgstr "" +"DB 格式是无效的。如果你是从一个老版本的 apt 升级而来,请删除数据库并重建它。" #: ftparchive/cachedb.cc:81 #, c-format @@ -533,14 +534,14 @@ msgid " %s maintainer is %s not %s\n" msgstr " %s 的维护者 %s 并非 %s\n" #: ftparchive/writer.cc:623 -#, fuzzy, c-format +#, c-format msgid " %s has no source override entry\n" -msgstr " %s 中没有 override 项\n" +msgstr " %s 没有源代码的 override 项\n" #: ftparchive/writer.cc:627 -#, fuzzy, c-format +#, c-format msgid " %s has no binary override entry either\n" -msgstr " %s 中没有 override 项\n" +msgstr " %s 中没有二进制文件的 override 项\n" #: ftparchive/contents.cc:317 #, c-format @@ -800,7 +801,7 @@ msgstr "有软件包需要被卸载,但是卸载动作被程序设置所禁止 #: cmdline/apt-get.cc:775 msgid "Internal error, Ordering didn't finish" -msgstr "内部错误,Ordering 没有完成" +msgstr "内部错误,Ordering 未能完成" #: cmdline/apt-get.cc:791 cmdline/apt-get.cc:1818 cmdline/apt-get.cc:1851 msgid "Unable to lock the download directory" @@ -1628,12 +1629,12 @@ msgstr "无法在打包文件中找到有效的主控文件" msgid "Unparsable control file" msgstr "不能解析的主控文件" -#: methods/cdrom.cc:114 +#: methods/cdrom.cc:115 #, c-format msgid "Unable to read the cdrom database %s" msgstr "无法读取光盘数据库 %s" -#: methods/cdrom.cc:123 +#: methods/cdrom.cc:124 msgid "" "Please use apt-cdrom to make this CD-ROM recognized by APT. apt-get update " "cannot be used to add new CD-ROMs" @@ -1641,20 +1642,20 @@ msgstr "" "请使用 apt-cdrom,通过它就可以让 APT 能识别该光盘。apt-get upgdate 不能被用来" "加入新的光盘。" -#: methods/cdrom.cc:131 +#: methods/cdrom.cc:132 msgid "Wrong CD-ROM" msgstr "错误的光盘" -#: methods/cdrom.cc:164 +#: methods/cdrom.cc:166 #, c-format msgid "Unable to unmount the CD-ROM in %s, it may still be in use." msgstr "无法卸载现在挂载于 %s 的 CD-ROM,它可能正在使用中。" -#: methods/cdrom.cc:169 +#: methods/cdrom.cc:171 msgid "Disk not found." msgstr "找不到光盘。" -#: methods/cdrom.cc:177 methods/file.cc:79 methods/rsh.cc:264 +#: methods/cdrom.cc:179 methods/file.cc:79 methods/rsh.cc:264 msgid "File not found" msgstr "无法找到该文件" @@ -1790,7 +1791,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:959 methods/rsh.cc:303 msgid "Problem hashing file" msgstr "把文件加入散列表时出错" @@ -1875,9 +1876,9 @@ msgid "Unable to connect to %s %s:" msgstr "不能连接上 %s %s:" #: methods/gpgv.cc:65 -#, fuzzy, c-format +#, c-format msgid "Couldn't access keyring: '%s'" -msgstr "无法解析域名“%s”" +msgstr "无法访问密匙:“%s”" #: methods/gpgv.cc:100 msgid "E: Argument list from Acquire::gpgv::Options too long. Exiting." @@ -1893,9 +1894,9 @@ msgid "At least one invalid signature was encountered." msgstr "至少发现一个无效的签名。" #: methods/gpgv.cc:213 -#, fuzzy, c-format +#, c-format msgid "Could not execute '%s' to verify signature (is gnupg installed?)" -msgstr "用于验证签名(您安装了 gnupg 么?)" +msgstr "无法运行\"%s\"以便验证签名(您安装了 gnupg 么?)" #: methods/gpgv.cc:218 msgid "Unknown error executing gpgv" @@ -1921,76 +1922,76 @@ msgstr "无法为 %s 开启管道" msgid "Read error from %s process" msgstr "从 %s 进程读取数据出错" -#: methods/http.cc:376 +#: methods/http.cc:377 msgid "Waiting for headers" msgstr "正在等待报头" -#: methods/http.cc:522 +#: methods/http.cc:523 #, c-format msgid "Got a single header line over %u chars" msgstr "受到了一行报头条目,它的长度超过了 %u 个字符" -#: methods/http.cc:530 +#: methods/http.cc:531 msgid "Bad header line" msgstr "错误的报头条目" -#: methods/http.cc:549 methods/http.cc:556 +#: methods/http.cc:550 methods/http.cc:557 msgid "The HTTP server sent an invalid reply header" msgstr "该 http 服务器发送了一个无效的应答报头" -#: methods/http.cc:585 +#: methods/http.cc:586 msgid "The HTTP server sent an invalid Content-Length header" msgstr "该 http 服务器发送了一个无效的 Content-Length 报头" -#: methods/http.cc:600 +#: methods/http.cc:601 msgid "The HTTP server sent an invalid Content-Range header" msgstr "该 http 服务器发送了一个无效的 Content-Range 报头" -#: methods/http.cc:602 +#: methods/http.cc:603 msgid "This HTTP server has broken range support" msgstr "该 http 服务器的 range 支持不正常" -#: methods/http.cc:626 +#: methods/http.cc:627 msgid "Unknown date format" msgstr "无法识别的日期格式" -#: methods/http.cc:773 +#: methods/http.cc:774 msgid "Select failed" msgstr "select 调用出错" -#: methods/http.cc:778 +#: methods/http.cc:779 msgid "Connection timed out" msgstr "连接服务器超时" -#: methods/http.cc:801 +#: methods/http.cc:802 msgid "Error writing to output file" msgstr "写输出文件时出错" -#: methods/http.cc:832 +#: methods/http.cc:833 msgid "Error writing to file" msgstr "写文件时出错" -#: methods/http.cc:860 +#: methods/http.cc:861 msgid "Error writing to the file" msgstr "写文件时出错" -#: methods/http.cc:874 +#: methods/http.cc:875 msgid "Error reading from server. Remote end closed connection" msgstr "从服务器读取数据时出错,对方关闭了连接" -#: methods/http.cc:876 +#: methods/http.cc:877 msgid "Error reading from server" msgstr "从服务器读取数据出错" -#: methods/http.cc:1107 +#: methods/http.cc:1108 msgid "Bad header data" msgstr "错误的报头数据" -#: methods/http.cc:1124 +#: methods/http.cc:1125 msgid "Connection failed" msgstr "连接失败" -#: methods/http.cc:1215 +#: methods/http.cc:1216 msgid "Internal error" msgstr "内部错误" @@ -2063,12 +2064,12 @@ msgstr "语法错误 %s:%u: 不支持的指令“%s”" msgid "Syntax error %s:%u: Extra junk at end of file" msgstr "语法错误 %s:%u: 文件尾部有多余的无意义的数据" -#: apt-pkg/contrib/progress.cc:154 +#: apt-pkg/contrib/progress.cc:155 #, c-format msgid "%c%s... Error!" msgstr "%c%s... 有错误!" -#: apt-pkg/contrib/progress.cc:156 +#: apt-pkg/contrib/progress.cc:157 #, c-format msgid "%c%s... Done" msgstr "%c%s... 完成" @@ -2363,7 +2364,7 @@ msgid "" "The package %s needs to be reinstalled, but I can't find an archive for it." msgstr "软件包 %s 需要重新安装,但是我无法找到相应的安装文件。" -#: apt-pkg/algorithms.cc:1059 +#: apt-pkg/algorithms.cc:1066 msgid "" "Error, pkgProblemResolver::Resolve generated breaks, this may be caused by " "held packages." @@ -2371,7 +2372,7 @@ msgstr "" "错误,pkgProblemResolver::Resolve 发生故障,这可能是有软件包被要求保持现状的" "缘故。" -#: apt-pkg/algorithms.cc:1061 +#: apt-pkg/algorithms.cc:1068 msgid "Unable to correct problems, you have held broken packages." msgstr "" "无法修正错误,因为您要求某些软件包保持现状,就是它们破坏了软件包间的依赖关" @@ -2390,14 +2391,14 @@ msgstr "找不到“%spartial”这个目录。" #. only show the ETA if it makes sense #. two days #: apt-pkg/acquire.cc:823 -#, fuzzy, c-format +#, c-format msgid "Retrieving file %li of %li (%s remaining)" -msgstr "正在下载第 %li 个文件(共 %li 个,尚需 %s)" +msgstr "正在下载 %li 个文件中的第 %li 个(还有 %s 个)" #: apt-pkg/acquire.cc:825 -#, fuzzy, c-format +#, c-format msgid "Retrieving file %li of %li" -msgstr "正在读取文件列表" +msgstr "正在下载 %2$li 个文件中的 %1$li 个" #: apt-pkg/acquire-worker.cc:113 #, c-format @@ -2542,8 +2543,7 @@ msgid "MD5Sum mismatch" msgstr "MD5 校验和不符" #: apt-pkg/acquire-item.cc:640 -#, fuzzy -msgid "There are no public key available for the following key IDs:\n" +msgid "There is no public key available for the following key IDs:\n" msgstr "以下 key ID 没有可用的公钥:\n" #: apt-pkg/acquire-item.cc:753 @@ -2587,47 +2587,47 @@ msgstr "" "现把 %s 作为了 CD-ROM 的挂载点\n" "正在挂载 CD-ROM\n" -#: apt-pkg/cdrom.cc:516 apt-pkg/cdrom.cc:598 +#: apt-pkg/cdrom.cc:518 apt-pkg/cdrom.cc:600 msgid "Identifying.. " msgstr "正在鉴别.. " -#: apt-pkg/cdrom.cc:541 +#: apt-pkg/cdrom.cc:543 #, c-format msgid "Stored label: %s \n" msgstr "存档标签:%s \n" -#: apt-pkg/cdrom.cc:561 +#: apt-pkg/cdrom.cc:563 #, c-format msgid "Using CD-ROM mount point %s\n" msgstr "现把 %s 作为了 CD-ROM 的挂载点\n" -#: apt-pkg/cdrom.cc:579 +#: apt-pkg/cdrom.cc:581 msgid "Unmounting CD-ROM\n" msgstr "正在卸载 CD-ROM 文件系统\n" -#: apt-pkg/cdrom.cc:583 +#: apt-pkg/cdrom.cc:585 msgid "Waiting for disc...\n" msgstr "等待插入盘片……\n" #. Mount the new CDROM -#: apt-pkg/cdrom.cc:591 +#: apt-pkg/cdrom.cc:593 msgid "Mounting CD-ROM...\n" msgstr "正在挂载 CD-ROM 文件系统……\n" -#: apt-pkg/cdrom.cc:609 +#: apt-pkg/cdrom.cc:611 msgid "Scanning disc for index files..\n" msgstr "正在光盘中查找索引文件..\n" -#: apt-pkg/cdrom.cc:647 +#: apt-pkg/cdrom.cc:649 #, c-format msgid "Found %i package indexes, %i source indexes and %i signatures\n" msgstr "找到了 %i 个软件包索引、%i 个源代码包索引,和 %i 个数字签名\n" -#: apt-pkg/cdrom.cc:710 +#: apt-pkg/cdrom.cc:714 msgid "That is not a valid name, try again.\n" msgstr "这不是一个有效的名字,请再次命名。\n" -#: apt-pkg/cdrom.cc:726 +#: apt-pkg/cdrom.cc:730 #, c-format msgid "" "This disc is called: \n" @@ -2636,19 +2636,19 @@ msgstr "" "这张光盘现在的名字是:\n" "“%s”\n" -#: apt-pkg/cdrom.cc:730 +#: apt-pkg/cdrom.cc:734 msgid "Copying package lists..." msgstr "正在复制软件包列表……" -#: apt-pkg/cdrom.cc:754 +#: apt-pkg/cdrom.cc:758 msgid "Writing new source list\n" msgstr "正在写入新的软件包源列表\n" -#: apt-pkg/cdrom.cc:763 +#: apt-pkg/cdrom.cc:767 msgid "Source list entries for this disc are:\n" msgstr "对应于该光盘的软件包源设置项是:\n" -#: apt-pkg/cdrom.cc:803 +#: apt-pkg/cdrom.cc:810 msgid "Unmounting CD-ROM..." msgstr "正在卸载 CD-ROM 文件系统……" @@ -2713,26 +2713,25 @@ msgid "Removed %s" msgstr "已删除 %s" #: apt-pkg/deb/dpkgpm.cc:378 -#, fuzzy, c-format +#, c-format msgid "Preparing to completely remove %s" -msgstr "正在准备配置 %s" +msgstr "正在准备完全删除 %s" #: apt-pkg/deb/dpkgpm.cc:379 -#, fuzzy, c-format +#, c-format msgid "Completely removed %s" -msgstr "无法删除 %s" +msgstr "完全删除了 %s" #: methods/rsh.cc:330 msgid "Connection closed prematurely" msgstr "连接被永久关闭" +#~ msgid "Could not patch file" +#~ msgstr "无法打开补丁文件" + #~ msgid "File date has changed %s" #~ msgstr "文件 %s 的时间已被改动" -#, fuzzy -#~ msgid "Could not patch file" -#~ msgstr "无法打开文件 %s" - #~ msgid "Reading file list" #~ msgstr "正在读取文件列表" diff --git a/po/zh_TW.po b/po/zh_TW.po index f1498dbc7..6206dfa99 100644 --- a/po/zh_TW.po +++ b/po/zh_TW.po @@ -2539,8 +2539,7 @@ msgid "MD5Sum mismatch" msgstr "MD5 檢查碼不符合。" #: apt-pkg/acquire-item.cc:640 -#, fuzzy -msgid "There are no public key available for the following key IDs:\n" +msgid "There is no public key available for the following key IDs:\n" msgstr "以下 key ID 沒有可用的公鑰:\n" #: apt-pkg/acquire-item.cc:753 @@ -2723,13 +2722,11 @@ msgstr "連線不預期的結束" #~ msgid "File date has changed %s" #~ msgstr "檔案資料已更改 %s" -#, fuzzy #~ msgid "Could not patch file" #~ msgstr "無法開啟『%s』檔案。" #~ msgid "Reading file list" #~ msgstr "讀取軟件表中" -#, fuzzy #~ msgid "Could not execute " #~ msgstr "無法取得『%s』鎖。" |