diff options
48 files changed, 6309 insertions, 1769 deletions
@@ -0,0 +1,8 @@ + +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 @@ -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-pkg/acquire-item.cc b/apt-pkg/acquire-item.cc index 86f61dd00..c6a49653b 100644 --- a/apt-pkg/acquire-item.cc +++ b/apt-pkg/acquire-item.cc @@ -24,6 +24,8 @@ #include <apt-pkg/strutl.h> #include <apt-pkg/fileutl.h> #include <apt-pkg/md5.h> +#include <apt-pkg/sha1.h> +#include <apt-pkg/tagfile.h> #include <apti18n.h> @@ -31,6 +33,7 @@ #include <unistd.h> #include <errno.h> #include <string> +#include <sstream> #include <stdio.h> /*}}}*/ @@ -131,14 +134,414 @@ 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:/" || + !_config->FindB("Acquire::Diffs",true)) { + // we don't have a pkg file or we don't want to queue + if(Debug) + std::clog << "No index file, 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) { + if(Debug) + std::clog << "Package file is up-to-date" << std::endl; + // set found to true, this will queue a pkgAcqIndexDiffs with + // a empty availabe_patches + found = true; + } else { + if(Debug) + std::clog << "SHA1-Current: " << ServerSha1 << std::endl; + + // check the historie and see what patches we need + string history = Tags.FindS("SHA1-History"); + std::stringstream hist(history); + while(hist >> d.sha1 >> size >> d.file) { + d.size = atoi(size.c_str()); + // read until the first match is found + if(d.sha1 == local_sha1) + found=true; + // from that point on, we probably need all diffs + if(found) { + if(Debug) + std::clog << "Need to get diff: " << d.file << std::endl; + available_patches.push_back(d); + } + } + } + + // no information how to get the patches, bail out + if(!found) { + if(Debug) + std::clog << "Can't find a patch in the index file" << std::endl; + // Failed will queue a big package file + Failed("", NULL); + } else { + // queue the diffs + new pkgAcqIndexDiffs(Owner, RealURI, Description, Desc.ShortDesc, + ExpectedMD5, available_patches); + Complete = false; + Status = StatDone; + Dequeue(); + return true; + } + } + + return false; +} + +void pkgAcqDiffIndex::Failed(string Message,pkgAcquire::MethodConfig *Cnf) +{ + if(Debug) + std::clog << "pkgAcqDiffIndex failed: " << Desc.URI << std::endl + << "Falling back to normal index file aquire" << std::endl; + + new pkgAcqIndex(Owner, RealURI, Description, Desc.ShortDesc, + ExpectedMD5); + + Complete = false; + Status = StatDone; + Dequeue(); +} + +void pkgAcqDiffIndex::Done(string Message,unsigned long Size,string Md5Hash, + pkgAcquire::MethodConfig *Cnf) +{ + if(Debug) + std::clog << "pkgAcqDiffIndex::Done(): " << Desc.URI << std::endl; + + Item::Done(Message,Size,Md5Hash,Cnf); + + string FinalFile; + FinalFile = _config->FindDir("Dir::State::lists")+URItoFileName(RealURI); + + // sucess in downloading the index + // rename the index + FinalFile += string(".IndexDiff"); + if(Debug) + std::clog << "Renaming: " << DestFile << " -> " << FinalFile + << std::endl; + Rename(DestFile,FinalFile); + chmod(FinalFile.c_str(),0644); + DestFile = FinalFile; + + if(!ParseDiffIndex(DestFile)) + return Failed("", NULL); + + Complete = true; + Status = StatDone; + Dequeue(); + return; +} + + + +// AcqIndexDiffs::AcqIndexDiffs - Constructor +// --------------------------------------------------------------------- +/* The package diff is added to the queue. one object is constructed + * for each diff and the index + */ +pkgAcqIndexDiffs::pkgAcqIndexDiffs(pkgAcquire *Owner, + string URI,string URIDesc,string ShortDesc, + string ExpectedMD5, vector<DiffInfo> diffs) + : Item(Owner), RealURI(URI), ExpectedMD5(ExpectedMD5), + available_patches(diffs) +{ + + DestFile = _config->FindDir("Dir::State::lists") + "partial/"; + DestFile += URItoFileName(URI); + + Debug = _config->FindB("Debug::pkgAcquire::Diffs",false); + + Desc.Description = URIDesc; + Desc.Owner = this; + Desc.ShortDesc = ShortDesc; + + if(available_patches.size() == 0) { + // we are done (yeah!) + Finish(true); + } else { + // get the next diff + State = StateFetchDiff; + QueueNextDiff(); + } +} + + +void pkgAcqIndexDiffs::Failed(string Message,pkgAcquire::MethodConfig *Cnf) +{ + if(Debug) + std::clog << "pkgAcqIndexDiffs failed: " << Desc.URI << std::endl + << "Falling back to normal index file acquire" << 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 = available_patches[0].file + string(".pdiff"); + + DestFile = _config->FindDir("Dir::State::lists") + "partial/"; + DestFile += URItoFileName(RealURI + ".diff/" + available_patches[0].file); + + if(Debug) + std::clog << "pkgAcqIndexDiffs::QueueNextDiff(): " << Desc.URI << std::endl; + + QueueURI(Desc); + + return true; +} + + + +void pkgAcqIndexDiffs::Done(string Message,unsigned long Size,string Md5Hash, + pkgAcquire::MethodConfig *Cnf) +{ + if(Debug) + std::clog << "pkgAcqIndexDiffs::Done(): " << Desc.URI << std::endl; + + Item::Done(Message,Size,Md5Hash,Cnf); + + string FinalFile; + FinalFile = _config->FindDir("Dir::State::lists")+URItoFileName(RealURI); + + // sucess in downloading a diff, enter ApplyDiff state + if(State == StateFetchDiff) + { + + if(Debug) + std::clog << "Sending to gzip method: " << FinalFile << std::endl; + + string FileName = LookupTag(Message,"Filename"); + State = StateUnzipDiff; + Desc.URI = "gzip:" + FileName; + DestFile += ".decomp"; + QueueURI(Desc); + Mode = "gzip"; + return; + } + + // sucess in downloading a diff, enter ApplyDiff state + if(State == StateUnzipDiff) + { + + // rred excepts the patch as $FinalFile.ed + Rename(DestFile,FinalFile+".ed"); + + if(Debug) + std::clog << "Sending to rred method: " << FinalFile << std::endl; + + State = StateApplyDiff; + Desc.URI = "rred:" + FinalFile; + QueueURI(Desc); + Mode = "rred"; + return; + } + + + // success in download/apply a diff, queue next (if needed) + if(State == StateApplyDiff) + { + // remove the just applied patch + available_patches.erase(available_patches.begin()); + + // move into place + if(Debug) + { + std::clog << "Moving patched file in place: " << std::endl + << DestFile << " -> " << FinalFile << std::endl; + } + Rename(DestFile,FinalFile); + + // see if there is more to download + if(available_patches.size() > 0) { + new pkgAcqIndexDiffs(Owner, RealURI, Description, Desc.ShortDesc, + ExpectedMD5, available_patches); + return Finish(); + } else + return Finish(true); + } +} + + // AcqIndex::AcqIndex - Constructor /*{{{*/ // --------------------------------------------------------------------- /* The package file is added to the queue and a second class is instantiated to fetch the revision file */ pkgAcqIndex::pkgAcqIndex(pkgAcquire *Owner, string URI,string URIDesc,string ShortDesc, - string ExpectedMD5, string comprExt) : - Item(Owner), RealURI(URI), ExpectedMD5(ExpectedMD5) + string ExpectedMD5, string comprExt) + : Item(Owner), RealURI(URI), ExpectedMD5(ExpectedMD5) { Decompression = false; Erase = false; @@ -308,6 +711,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, @@ -607,8 +1039,8 @@ void pkgAcqMetaIndex::QueueIndexes(bool verify) } // Queue Packages file - new pkgAcqIndex(Owner, (*Target)->URI, (*Target)->Description, - (*Target)->ShortDesc, ExpectedIndexMD5); + new pkgAcqDiffIndex(Owner, (*Target)->URI, (*Target)->Description, + (*Target)->ShortDesc, ExpectedIndexMD5); } } diff --git a/apt-pkg/acquire-item.h b/apt-pkg/acquire-item.h index da1bea801..217ddb3ef 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. @@ -31,67 +31,486 @@ #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 + } 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 +522,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 +647,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 +742,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 +750,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 +809,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 +863,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..4f08a43ae 100644 --- a/apt-pkg/acquire-method.h +++ b/apt-pkg/acquire-method.h @@ -10,6 +10,13 @@ ##################################################################### */ /*}}}*/ + +/** \addtogroup acquire + * @{ + * + * \file acquire-method.h + */ + #ifndef PKGLIB_ACQUIRE_METHOD_H #define PKGLIB_ACQUIRE_METHOD_H @@ -86,4 +93,6 @@ class pkgAcqMethod virtual ~pkgAcqMethod() {}; }; +/** @} */ + #endif diff --git a/apt-pkg/acquire-worker.h b/apt-pkg/acquire-worker.h index 6e1952202..1f6bcc05f 100644 --- a/apt-pkg/acquire-worker.h +++ b/apt-pkg/acquire-worker.h @@ -9,6 +9,13 @@ ##################################################################### */ /*}}}*/ + +/** \addtogroup acquire + * @{ + * + * \file acquire-worker.h + */ + #ifndef PKGLIB_ACQUIRE_WORKER_H #define PKGLIB_ACQUIRE_WORKER_H @@ -18,7 +25,25 @@ #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 +51,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.h b/apt-pkg/acquire.h index 27bb3d363..64dafdc9d 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 @@ -46,6 +80,15 @@ using std::string; #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 +103,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}; - RunResult Run(int PulseIntervall=500000); + /** \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); + + /** \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 +405,141 @@ 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 + /** \brief Insert the given fetch request into this queue. */ void 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 +550,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 +568,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/cacheiterators.h b/apt-pkg/cacheiterators.h index 2b326bd65..d5a9c7b0d 100644 --- a/apt-pkg/cacheiterators.h +++ b/apt-pkg/cacheiterators.h @@ -99,7 +99,7 @@ class pkgCache::VerIterator { Version *Ver; pkgCache *Owner; - + void _dummy(); public: @@ -128,6 +128,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 +150,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 +384,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 +425,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..b42c82dd0 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,11 +667,13 @@ 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); } @@ -736,8 +763,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 diff --git a/apt-pkg/cdrom.h b/apt-pkg/cdrom.h index 085eb64e2..e18aaff3e 100644 --- a/apt-pkg/cdrom.h +++ b/apt-pkg/cdrom.h @@ -50,8 +50,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/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..254087267 100644 --- a/apt-pkg/contrib/strutl.h +++ b/apt-pkg/contrib/strutl.h @@ -38,7 +38,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 ff8bce85d..38ecdd16a 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..57005222f 100644 --- a/apt-pkg/deb/debindexfile.h +++ b/apt-pkg/deb/debindexfile.h @@ -74,6 +74,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 b11d2531c..441bb826f 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> @@ -117,6 +118,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 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..d3b6ed957 100644 --- a/apt-pkg/deb/debmetaindex.cc +++ b/apt-pkg/deb/debmetaindex.cc @@ -157,6 +157,14 @@ 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++) { + + debTranslationsIndex i = debTranslationsIndex(URI,Dist,(*I)->Section); + i.GetIndexes(Owner); + } + return true; } @@ -181,11 +189,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/debrecords.cc b/apt-pkg/deb/debrecords.cc index 6652a6ad9..518988bb6 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 /*{{{*/ // --------------------------------------------------------------------- @@ -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..24e5aab88 100644 --- a/apt-pkg/deb/debrecords.h +++ b/apt-pkg/deb/debrecords.h @@ -19,6 +19,7 @@ #endif #include <apt-pkg/pkgrecords.h> +#include <apt-pkg/indexfile.h> #include <apt-pkg/tagfile.h> class debRecordParser : public pkgRecords::Parser @@ -30,6 +31,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/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..496e68b8b 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,60 @@ 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); + + // FIXME: this needs to be added + // 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_*) + + 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..d5d1cf57a 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 @@ -80,6 +81,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/init.cc b/apt-pkg/init.cc index b47378d4a..6aa486a7f 100644 --- a/apt-pkg/init.cc +++ b/apt-pkg/init.cc @@ -102,6 +102,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..63547619f 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 0 #define APT_PKG_RELEASE 0 extern const char *pkgVersion; diff --git a/apt-pkg/makefile b/apt-pkg/makefile index 0e6aecc65..fa0efe5b2 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.0 MINOR=0 SLIBS=$(PTHREADLIB) $(INTLLIBS) APT_DOMAIN:=libapt-pkg$(MAJOR) diff --git a/apt-pkg/pkgcache.cc b/apt-pkg/pkgcache.cc index 9926befe9..162ab4f27 100644 --- a/apt-pkg/pkgcache.cc +++ b/apt-pkg/pkgcache.cc @@ -26,6 +26,7 @@ #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 +44,7 @@ using std::string; + // Cache::Header::Header - Constructor /*{{{*/ // --------------------------------------------------------------------- /* Simply initialize the header */ @@ -52,7 +54,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 = 5; MinorVersion = 0; Dirty = false; @@ -60,17 +62,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 +96,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 +124,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(); @@ -235,11 +246,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 /*{{{*/ // --------------------------------------------------------------------- @@ -599,3 +610,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..c7a3172cc 100644 --- a/apt-pkg/pkgcache.h +++ b/apt-pkg/pkgcache.h @@ -38,24 +38,30 @@ 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; @@ -98,8 +104,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 +159,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 +181,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 +206,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 +245,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 +262,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 +274,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 +337,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..1106667d5 100644 --- a/apt-pkg/pkgcachegen.cc +++ b/apt-pkg/pkgcachegen.cc @@ -125,16 +125,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 +198,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 +207,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 +230,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 +255,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 +320,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 +398,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 @@ -580,7 +685,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; } diff --git a/apt-pkg/pkgcachegen.h b/apt-pkg/pkgcachegen.h index 9a729eea4..fae1a60a6 100644 --- a/apt-pkg/pkgcachegen.h +++ b/apt-pkg/pkgcachegen.h @@ -24,6 +24,7 @@ #endif #include <apt-pkg/pkgcache.h> +#include <apt-pkg/md5.h> class pkgSourceList; class OpProgress; @@ -55,7 +56,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 +111,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..31c444dbf 100644 --- a/apt-pkg/pkgrecords.h +++ b/apt-pkg/pkgrecords.h @@ -38,6 +38,7 @@ class pkgRecords // Lookup function Parser &Lookup(pkgCache::VerFileIterator const &Ver); + Parser &Lookup(pkgCache::DescFileIterator const &Desc); // Construct destruct pkgRecords(pkgCache &Cache); @@ -49,6 +50,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/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 0014563b8..cb1aeb514 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 /*{{{*/ // --------------------------------------------------------------------- @@ -182,7 +188,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 +290,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 +361,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; + } } } @@ -1192,17 +1215,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 +1267,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 +1309,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 +1345,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 +1387,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/configure.in b/configure.in index 0d80e5ed9..a1913e0fd 100644 --- a/configure.in +++ b/configure.in @@ -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","") @@ -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/changelog b/debian/changelog index 020fe9813..b54cb635f 100644 --- a/debian/changelog +++ b/debian/changelog @@ -1,3 +1,13 @@ +apt (0.6.43.2exp1) experimental; urgency=low + + * added support for package index diffs + * added support for i18n of the package descriptions + * synced with the apt--debian-sid--0 branch + * build from mvo@debian.org--2005/apt--debian-experimental--0 + (from http://people.debian.org/~mvo/arch) + + -- Michael Vogt <mvo@debian.org> Thu, 12 Jan 2006 23:40:32 +0100 + apt (0.6.43.2) unstable; urgency=low * Merge bubulle@debian.org--2005/apt--main--0 up to patch-159: @@ -129,7 +139,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 @@ -214,6 +224,7 @@ apt (0.6.38) unstable; urgency=low -- Matt Zimmerman <mdz@debian.org> Sat, 25 Jun 2005 09:51:00 -0700 +>>>>>>> MERGE-SOURCE apt (0.6.37) breezy; urgency=low * Merge bubulle@debian.org--2005/apt--main--0 up to patch-81 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/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/methods/http.cc b/methods/http.cc index 341de94e3..cb63ada49 100644 --- a/methods/http.cc +++ b/methods/http.cc @@ -58,7 +58,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}; diff --git a/methods/makefile b/methods/makefile index 1e3b1ef85..03146d1bc 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.0 APT_DOMAIN := libapt-pkg$(LIB_APT_PKG_MAJOR) # The file method @@ -59,6 +59,13 @@ LIB_MAKES = apt-pkg/makefile SOURCE = ftp.cc rfc2553emu.cc connect.cc include $(PROGRAM_H) +# The rred method +PROGRAM=rred +SLIBS = -lapt-pkg $(SOCKETLIBS) +LIB_MAKES = apt-pkg/makefile +SOURCE = rred.cc +include $(PROGRAM_H) + # The rsh method PROGRAM=rsh SLIBS = -lapt-pkg diff --git a/methods/rred.cc b/methods/rred.cc new file mode 100644 index 000000000..6fa57f3a6 --- /dev/null +++ b/methods/rred.cc @@ -0,0 +1,262 @@ +#include <apt-pkg/fileutl.h> +#include <apt-pkg/error.h> +#include <apt-pkg/acquire-method.h> +#include <apt-pkg/strutl.h> +#include <apt-pkg/hashes.h> + +#include <sys/stat.h> +#include <unistd.h> +#include <utime.h> +#include <stdio.h> +#include <errno.h> +#include <apti18n.h> + +/* this method implements a patch functionality similar to "patch --ed" that is + * used by the "tiffany" incremental packages download stuff. it differs from + * "ed" insofar that it is way more restricted (and therefore secure). in the + * moment only the "c", "a" and "d" commands of ed are implemented (diff + * doesn't output any other). additionally the records must be reverse sorted + * by line number and may not overlap (diff *seems* to produce this kind of + * output). + * */ + +const char *Prog; + +class RredMethod : public pkgAcqMethod +{ + bool Debug; + // the size of this doesn't really matter (except for performance) + const static int BUF_SIZE = 1024; + // the ed commands + enum Mode {MODE_CHANGED, MODE_DELETED, MODE_ADDED}; + // return values + enum State {ED_OK, ED_ORDERING, ED_PARSER, ED_FAILURE}; + // this applies a single hunk, it uses a tail recursion to + // reverse the hunks in the file + int ed_rec(FILE *ed_cmds, FILE *in_file, FILE *out_file, int line, + char *buffer, unsigned int bufsize, Hashes *hash); + // apply a patch file + int ed_file(FILE *ed_cmds, FILE *in_file, FILE *out_file, Hashes *hash); + // the methods main method + virtual bool Fetch(FetchItem *Itm); + + public: + + RredMethod() : pkgAcqMethod("1.1",SingleInstance | SendConfig) {}; +}; + +int RredMethod::ed_rec(FILE *ed_cmds, FILE *in_file, FILE *out_file, int line, + char *buffer, unsigned int bufsize, Hashes *hash) { + int pos; + int startline; + int stopline; + int mode; + int written; + char *idx; + + /* get the current command and parse it*/ + if (fgets(buffer, bufsize, ed_cmds) == NULL) { + return line; + } + startline = strtol(buffer, &idx, 10); + if (startline < line) { + return ED_ORDERING; + } + if (*idx == ',') { + idx++; + stopline = strtol(idx, &idx, 10); + } + else { + stopline = startline; + } + if (*idx == 'c') { + mode = MODE_CHANGED; + if (Debug == true) { + std::clog << "changing from line " << startline + << " to " << stopline << std::endl; + } + } + else if (*idx == 'a') { + mode = MODE_ADDED; + if (Debug == true) { + std::clog << "adding after line " << startline << std::endl; + } + } + else if (*idx == 'd') { + mode = MODE_DELETED; + if (Debug == true) { + std::clog << "deleting from line " << startline + << " to " << stopline << std::endl; + } + } + else { + return ED_PARSER; + } + /* get the current position */ + pos = ftell(ed_cmds); + /* if this is add or change then go to the next full stop */ + if ((mode == MODE_CHANGED) || (mode == MODE_ADDED)) { + do { + fgets(buffer, bufsize, ed_cmds); + while ((strlen(buffer) == (bufsize - 1)) + && (buffer[bufsize - 2] != '\n')) { + fgets(buffer, bufsize, ed_cmds); + buffer[0] = ' '; + } + } while (strncmp(buffer, ".", 1) != 0); + } + /* do the recursive call */ + line = ed_rec(ed_cmds, in_file, out_file, line, buffer, bufsize, + hash); + /* pass on errors */ + if (line < 0) { + return line; + } + /* apply our hunk */ + fseek(ed_cmds, pos, SEEK_SET); + /* first wind to the current position */ + if (mode != MODE_ADDED) { + startline -= 1; + } + while (line < startline) { + fgets(buffer, bufsize, in_file); + written = fwrite(buffer, 1, strlen(buffer), out_file); + hash->Add((unsigned char*)buffer, written); + while ((strlen(buffer) == (bufsize - 1)) + && (buffer[bufsize - 2] != '\n')) { + fgets(buffer, bufsize, in_file); + written = fwrite(buffer, 1, strlen(buffer), out_file); + hash->Add((unsigned char*)buffer, written); + } + line++; + } + /* include from ed script */ + if ((mode == MODE_ADDED) || (mode == MODE_CHANGED)) { + do { + fgets(buffer, bufsize, ed_cmds); + if (strncmp(buffer, ".", 1) != 0) { + written = fwrite(buffer, 1, strlen(buffer), out_file); + hash->Add((unsigned char*)buffer, written); + while ((strlen(buffer) == (bufsize - 1)) + && (buffer[bufsize - 2] != '\n')) { + fgets(buffer, bufsize, ed_cmds); + written = fwrite(buffer, 1, strlen(buffer), out_file); + hash->Add((unsigned char*)buffer, written); + } + } + else { + break; + } + } while (1); + } + /* ignore the corresponding number of lines from input */ + if ((mode == MODE_DELETED) || (mode == MODE_CHANGED)) { + while (line < stopline) { + fgets(buffer, bufsize, in_file); + while ((strlen(buffer) == (bufsize - 1)) + && (buffer[bufsize - 2] != '\n')) { + fgets(buffer, bufsize, in_file); + } + line++; + } + } + return line; +} + +int RredMethod::ed_file(FILE *ed_cmds, FILE *in_file, FILE *out_file, + Hashes *hash) { + char buffer[BUF_SIZE]; + int result; + int written; + + /* we do a tail recursion to read the commands in the right order */ + result = ed_rec(ed_cmds, in_file, out_file, 0, buffer, BUF_SIZE, + hash); + + /* read the rest from infile */ + if (result > 0) { + while (fgets(buffer, BUF_SIZE, in_file) != NULL) { + written = fwrite(buffer, 1, strlen(buffer), out_file); + hash->Add((unsigned char*)buffer, written); + } + } + else { + return ED_FAILURE; + } + return ED_OK; +} + + +bool RredMethod::Fetch(FetchItem *Itm) +{ + Debug = _config->FindB("Debug::pkgAcquire::RRed",false); + URI Get = Itm->Uri; + string Path = Get.Host + Get.Path; // To account for relative paths + // Path contains the filename to patch + FetchResult Res; + Res.Filename = Itm->DestFile; + URIStart(Res); + // Res.Filename the destination filename + + if (Debug == true) + std::clog << "Patching " << Path << " with " << Path + << ".ed and putting result into " << Itm->DestFile << std::endl; + // Open the source and destination files (the d'tor of FileFd will do + // the cleanup/closing of the fds) + FileFd From(Path,FileFd::ReadOnly); + FileFd Patch(Path+".ed",FileFd::ReadOnly); + FileFd To(Itm->DestFile,FileFd::WriteEmpty); + To.EraseOnFailure(); + if (_error->PendingError() == true) + return false; + + Hashes Hash; + FILE* fFrom = fdopen(From.Fd(), "r"); + FILE* fPatch = fdopen(Patch.Fd(), "r"); + FILE* fTo = fdopen(To.Fd(), "w"); + // now do the actual patching + if (ed_file(fPatch, fFrom, fTo, &Hash) != ED_OK) { + _error->Errno("rred", _("Could not patch file")); + return false; + } + + // write out the result + fflush(fFrom); + fflush(fPatch); + fflush(fTo); + From.Close(); + Patch.Close(); + To.Close(); + + // Transfer the modification times + struct stat Buf; + if (stat(Path.c_str(),&Buf) != 0) + return _error->Errno("stat",_("Failed to stat")); + + struct utimbuf TimeBuf; + TimeBuf.actime = Buf.st_atime; + TimeBuf.modtime = Buf.st_mtime; + if (utime(Itm->DestFile.c_str(),&TimeBuf) != 0) + return _error->Errno("utime",_("Failed to set modification time")); + + if (stat(Itm->DestFile.c_str(),&Buf) != 0) + return _error->Errno("stat",_("Failed to stat")); + + // return done + Res.LastModified = Buf.st_mtime; + Res.Size = Buf.st_size; + Res.TakeHashes(Hash); + URIDone(Res); + + return true; +} + +int main(int argc, char *argv[]) +{ + RredMethod Mth; + + Prog = strrchr(argv[0],'/'); + Prog++; + + return Mth.Run(); +} diff --git a/po/apt-all.pot b/po/apt-all.pot index 0293026c4..541a90df4 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-01-04 18:51+0100\n" +"POT-Creation-Date: 2005-10-17 19:31+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:1419 cmdline/apt-cache.cc:1570 #, 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:1293 msgid "You must give exactly one pattern" msgstr "" -#: cmdline/apt-cache.cc:1385 +#: cmdline/apt-cache.cc:1447 msgid "No packages found" msgstr "" -#: cmdline/apt-cache.cc:1462 +#: cmdline/apt-cache.cc:1524 msgid "Package files:" msgstr "" -#: cmdline/apt-cache.cc:1469 cmdline/apt-cache.cc:1555 +#: cmdline/apt-cache.cc:1531 cmdline/apt-cache.cc:1617 msgid "Cache is out of sync, can't x-ref a package file" msgstr "" -#: cmdline/apt-cache.cc:1470 +#: cmdline/apt-cache.cc:1532 #, c-format msgid "%4i %s\n" msgstr "" #. Show any packages have explicit pins -#: cmdline/apt-cache.cc:1482 +#: cmdline/apt-cache.cc:1544 msgid "Pinned packages:" msgstr "" -#: cmdline/apt-cache.cc:1494 cmdline/apt-cache.cc:1535 +#: cmdline/apt-cache.cc:1556 cmdline/apt-cache.cc:1597 msgid "(not found)" msgstr "" #. Installed version -#: cmdline/apt-cache.cc:1515 +#: cmdline/apt-cache.cc:1577 msgid " Installed: " msgstr "" -#: cmdline/apt-cache.cc:1517 cmdline/apt-cache.cc:1525 +#: cmdline/apt-cache.cc:1579 cmdline/apt-cache.cc:1587 msgid "(none)" msgstr "" #. Candidate Version -#: cmdline/apt-cache.cc:1522 +#: cmdline/apt-cache.cc:1584 msgid " Candidate: " msgstr "" -#: cmdline/apt-cache.cc:1532 +#: cmdline/apt-cache.cc:1594 msgid " Package pin: " msgstr "" #. Show the priority tables -#: cmdline/apt-cache.cc:1541 +#: cmdline/apt-cache.cc:1603 msgid " Version table:" msgstr "" -#: cmdline/apt-cache.cc:1556 +#: cmdline/apt-cache.cc:1618 #, c-format msgid " %4i %s\n" msgstr "" -#: cmdline/apt-cache.cc:1651 cmdline/apt-cdrom.cc:138 cmdline/apt-config.cc:70 +#: cmdline/apt-cache.cc:1713 cmdline/apt-cdrom.cc:138 cmdline/apt-config.cc:70 #: cmdline/apt-extracttemplates.cc:225 ftparchive/apt-ftparchive.cc:550 -#: cmdline/apt-get.cc:2378 cmdline/apt-sortpkgs.cc:144 +#: cmdline/apt-get.cc:2325 cmdline/apt-sortpkgs.cc:144 #, c-format msgid "%s %s for %s %s compiled on %s %s\n" msgstr "" -#: cmdline/apt-cache.cc:1658 +#: cmdline/apt-cache.cc:1720 msgid "" "Usage: apt-cache [options] command\n" " apt-cache [options] add file1 [file2 ...]\n" @@ -192,18 +200,6 @@ msgid "" "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 "" - -#: 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 "" @@ -243,7 +239,7 @@ 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:815 #, c-format msgid "Unable to write to %s" msgstr "" @@ -426,12 +422,12 @@ msgstr "" msgid "Archive had no package field" msgstr "" -#: ftparchive/writer.cc:394 ftparchive/writer.cc:603 +#: ftparchive/writer.cc:394 ftparchive/writer.cc:602 #, c-format msgid " %s has no override entry\n" msgstr "" -#: ftparchive/writer.cc:437 ftparchive/writer.cc:689 +#: ftparchive/writer.cc:437 ftparchive/writer.cc:688 #, c-format msgid " %s maintainer is %s not %s\n" msgstr "" @@ -531,221 +527,221 @@ msgstr "" msgid "Failed to rename %s to %s" msgstr "" -#: cmdline/apt-get.cc:120 +#: cmdline/apt-get.cc:118 msgid "Y" msgstr "" -#: cmdline/apt-get.cc:142 cmdline/apt-get.cc:1515 +#: cmdline/apt-get.cc:140 cmdline/apt-get.cc:1486 #, c-format msgid "Regex compilation error - %s" msgstr "" -#: cmdline/apt-get.cc:237 +#: cmdline/apt-get.cc:235 msgid "The following packages have unmet dependencies:" msgstr "" -#: cmdline/apt-get.cc:327 +#: cmdline/apt-get.cc:325 #, c-format msgid "but %s is installed" msgstr "" -#: cmdline/apt-get.cc:329 +#: cmdline/apt-get.cc:327 #, c-format msgid "but %s is to be installed" msgstr "" -#: cmdline/apt-get.cc:336 +#: cmdline/apt-get.cc:334 msgid "but it is not installable" msgstr "" -#: cmdline/apt-get.cc:338 +#: cmdline/apt-get.cc:336 msgid "but it is a virtual package" msgstr "" -#: cmdline/apt-get.cc:341 +#: cmdline/apt-get.cc:339 msgid "but it is not installed" msgstr "" -#: cmdline/apt-get.cc:341 +#: cmdline/apt-get.cc:339 msgid "but it is not going to be installed" msgstr "" -#: cmdline/apt-get.cc:346 +#: cmdline/apt-get.cc:344 msgid " or" msgstr "" -#: cmdline/apt-get.cc:375 +#: cmdline/apt-get.cc:373 msgid "The following NEW packages will be installed:" msgstr "" -#: cmdline/apt-get.cc:401 +#: cmdline/apt-get.cc:399 msgid "The following packages will be REMOVED:" msgstr "" -#: cmdline/apt-get.cc:423 +#: cmdline/apt-get.cc:421 msgid "The following packages have been kept back:" msgstr "" -#: cmdline/apt-get.cc:444 +#: cmdline/apt-get.cc:442 msgid "The following packages will be upgraded:" msgstr "" -#: cmdline/apt-get.cc:465 +#: cmdline/apt-get.cc:463 msgid "The following packages will be DOWNGRADED:" msgstr "" -#: cmdline/apt-get.cc:485 +#: cmdline/apt-get.cc:483 msgid "The following held packages will be changed:" msgstr "" -#: cmdline/apt-get.cc:538 +#: cmdline/apt-get.cc:536 #, c-format msgid "%s (due to %s) " msgstr "" -#: cmdline/apt-get.cc:546 +#: cmdline/apt-get.cc:544 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:575 #, c-format msgid "%lu upgraded, %lu newly installed, " msgstr "" -#: cmdline/apt-get.cc:581 +#: cmdline/apt-get.cc:579 #, c-format msgid "%lu reinstalled, " msgstr "" -#: cmdline/apt-get.cc:583 +#: cmdline/apt-get.cc:581 #, c-format msgid "%lu downgraded, " msgstr "" -#: cmdline/apt-get.cc:585 +#: cmdline/apt-get.cc:583 #, c-format msgid "%lu to remove and %lu not upgraded.\n" msgstr "" -#: cmdline/apt-get.cc:589 +#: cmdline/apt-get.cc:587 #, c-format msgid "%lu not fully installed or removed.\n" msgstr "" -#: cmdline/apt-get.cc:649 +#: cmdline/apt-get.cc:647 msgid "Correcting dependencies..." msgstr "" -#: cmdline/apt-get.cc:652 +#: cmdline/apt-get.cc:650 msgid " failed." msgstr "" -#: cmdline/apt-get.cc:655 +#: cmdline/apt-get.cc:653 msgid "Unable to correct dependencies" msgstr "" -#: cmdline/apt-get.cc:658 +#: cmdline/apt-get.cc:656 msgid "Unable to minimize the upgrade set" msgstr "" -#: cmdline/apt-get.cc:660 +#: cmdline/apt-get.cc:658 msgid " Done" msgstr "" -#: cmdline/apt-get.cc:664 +#: cmdline/apt-get.cc:662 msgid "You might want to run `apt-get -f install' to correct these." msgstr "" -#: cmdline/apt-get.cc:667 +#: cmdline/apt-get.cc:665 msgid "Unmet dependencies. Try using -f." msgstr "" -#: cmdline/apt-get.cc:689 +#: cmdline/apt-get.cc:687 msgid "WARNING: The following packages cannot be authenticated!" msgstr "" -#: cmdline/apt-get.cc:693 +#: cmdline/apt-get.cc:691 msgid "Authentication warning overridden.\n" msgstr "" -#: cmdline/apt-get.cc:700 +#: cmdline/apt-get.cc:698 msgid "Install these packages without verification [y/N]? " msgstr "" -#: cmdline/apt-get.cc:702 +#: cmdline/apt-get.cc:700 msgid "Some packages could not be authenticated" msgstr "" -#: cmdline/apt-get.cc:711 cmdline/apt-get.cc:858 +#: cmdline/apt-get.cc:709 cmdline/apt-get.cc:856 msgid "There are problems and -y was used without --force-yes" msgstr "" -#: cmdline/apt-get.cc:755 +#: cmdline/apt-get.cc:753 msgid "Internal error, InstallPackages was called with broken packages!" msgstr "" -#: cmdline/apt-get.cc:764 +#: cmdline/apt-get.cc:762 msgid "Packages need to be removed but remove is disabled." msgstr "" -#: cmdline/apt-get.cc:775 +#: cmdline/apt-get.cc:773 msgid "Internal error, Ordering didn't finish" msgstr "" -#: cmdline/apt-get.cc:791 cmdline/apt-get.cc:1809 cmdline/apt-get.cc:1842 +#: cmdline/apt-get.cc:789 cmdline/apt-get.cc:1780 cmdline/apt-get.cc:1813 msgid "Unable to lock the download directory" msgstr "" -#: cmdline/apt-get.cc:801 cmdline/apt-get.cc:1890 cmdline/apt-get.cc:2126 +#: cmdline/apt-get.cc:799 cmdline/apt-get.cc:1861 cmdline/apt-get.cc:2073 #: apt-pkg/cachefile.cc:67 msgid "The list of sources could not be read." msgstr "" -#: cmdline/apt-get.cc:816 +#: cmdline/apt-get.cc:814 msgid "How odd.. The sizes didn't match, email apt@packages.debian.org" msgstr "" -#: cmdline/apt-get.cc:821 +#: cmdline/apt-get.cc:819 #, c-format msgid "Need to get %sB/%sB of archives.\n" msgstr "" -#: cmdline/apt-get.cc:824 +#: cmdline/apt-get.cc:822 #, c-format msgid "Need to get %sB of archives.\n" msgstr "" -#: cmdline/apt-get.cc:829 +#: cmdline/apt-get.cc:827 #, c-format msgid "After unpacking %sB of additional disk space will be used.\n" msgstr "" -#: cmdline/apt-get.cc:832 +#: cmdline/apt-get.cc:830 #, c-format msgid "After unpacking %sB disk space will be freed.\n" msgstr "" -#: cmdline/apt-get.cc:846 cmdline/apt-get.cc:1980 +#: cmdline/apt-get.cc:844 cmdline/apt-get.cc:1927 #, c-format msgid "Couldn't determine free space in %s" msgstr "" -#: cmdline/apt-get.cc:849 +#: cmdline/apt-get.cc:847 #, 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:862 cmdline/apt-get.cc:882 msgid "Trivial Only specified but this is not a trivial operation." msgstr "" -#: cmdline/apt-get.cc:866 +#: cmdline/apt-get.cc:864 msgid "Yes, do as I say!" msgstr "" -#: cmdline/apt-get.cc:868 +#: cmdline/apt-get.cc:866 #, c-format msgid "" "You are about to do something potentially harmful.\n" @@ -753,74 +749,74 @@ msgid "" " ?] " msgstr "" -#: cmdline/apt-get.cc:874 cmdline/apt-get.cc:893 +#: cmdline/apt-get.cc:872 cmdline/apt-get.cc:891 msgid "Abort." msgstr "" -#: cmdline/apt-get.cc:889 +#: cmdline/apt-get.cc:887 msgid "Do you want to continue [Y/n]? " msgstr "" -#: cmdline/apt-get.cc:961 cmdline/apt-get.cc:1365 cmdline/apt-get.cc:2023 +#: cmdline/apt-get.cc:959 cmdline/apt-get.cc:1336 cmdline/apt-get.cc:1970 #, c-format msgid "Failed to fetch %s %s\n" msgstr "" -#: cmdline/apt-get.cc:979 +#: cmdline/apt-get.cc:977 msgid "Some files failed to download" msgstr "" -#: cmdline/apt-get.cc:980 cmdline/apt-get.cc:2032 +#: cmdline/apt-get.cc:978 cmdline/apt-get.cc:1979 msgid "Download complete and in download only mode" msgstr "" -#: cmdline/apt-get.cc:986 +#: cmdline/apt-get.cc:984 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:988 msgid "--fix-missing and media swapping is not currently supported" msgstr "" -#: cmdline/apt-get.cc:995 +#: cmdline/apt-get.cc:993 msgid "Unable to correct missing packages." msgstr "" -#: cmdline/apt-get.cc:996 +#: cmdline/apt-get.cc:994 msgid "Aborting install." msgstr "" -#: cmdline/apt-get.cc:1030 +#: cmdline/apt-get.cc:1028 #, c-format msgid "Note, selecting %s instead of %s\n" msgstr "" -#: cmdline/apt-get.cc:1040 +#: cmdline/apt-get.cc:1038 #, 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:1056 #, c-format msgid "Package %s is not installed, so not removed\n" msgstr "" -#: cmdline/apt-get.cc:1069 +#: cmdline/apt-get.cc:1067 #, c-format msgid "Package %s is a virtual package provided by:\n" msgstr "" -#: cmdline/apt-get.cc:1081 +#: cmdline/apt-get.cc:1079 msgid " [Installed]" msgstr "" -#: cmdline/apt-get.cc:1086 +#: cmdline/apt-get.cc:1084 msgid "You should explicitly select one to install." msgstr "" -#: cmdline/apt-get.cc:1091 +#: cmdline/apt-get.cc:1089 #, c-format msgid "" "Package %s is not available, but is referred to by another package.\n" @@ -828,79 +824,79 @@ msgid "" "is only available from another source\n" msgstr "" -#: cmdline/apt-get.cc:1110 +#: cmdline/apt-get.cc:1108 msgid "However the following packages replace it:" msgstr "" -#: cmdline/apt-get.cc:1113 +#: cmdline/apt-get.cc:1111 #, c-format msgid "Package %s has no installation candidate" msgstr "" -#: cmdline/apt-get.cc:1133 +#: cmdline/apt-get.cc:1131 #, c-format msgid "Reinstallation of %s is not possible, it cannot be downloaded.\n" msgstr "" -#: cmdline/apt-get.cc:1141 +#: cmdline/apt-get.cc:1139 #, c-format msgid "%s is already the newest version.\n" msgstr "" -#: cmdline/apt-get.cc:1168 +#: cmdline/apt-get.cc:1166 #, c-format msgid "Release '%s' for '%s' was not found" msgstr "" -#: cmdline/apt-get.cc:1170 +#: cmdline/apt-get.cc:1168 #, c-format msgid "Version '%s' for '%s' was not found" msgstr "" -#: cmdline/apt-get.cc:1176 +#: cmdline/apt-get.cc:1174 #, c-format msgid "Selected version %s (%s) for %s\n" msgstr "" -#: cmdline/apt-get.cc:1313 +#: cmdline/apt-get.cc:1284 msgid "The update command takes no arguments" msgstr "" -#: cmdline/apt-get.cc:1326 cmdline/apt-get.cc:1420 +#: cmdline/apt-get.cc:1297 cmdline/apt-get.cc:1391 msgid "Unable to lock the list directory" msgstr "" -#: cmdline/apt-get.cc:1384 +#: cmdline/apt-get.cc:1355 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:1374 msgid "Internal error, AllUpgrade broke stuff" msgstr "" -#: cmdline/apt-get.cc:1502 cmdline/apt-get.cc:1538 +#: cmdline/apt-get.cc:1473 cmdline/apt-get.cc:1509 #, c-format msgid "Couldn't find package %s" msgstr "" -#: cmdline/apt-get.cc:1525 +#: cmdline/apt-get.cc:1496 #, c-format msgid "Note, selecting %s for regex '%s'\n" msgstr "" -#: cmdline/apt-get.cc:1555 +#: cmdline/apt-get.cc:1526 msgid "You might want to run `apt-get -f install' to correct these:" msgstr "" -#: cmdline/apt-get.cc:1558 +#: cmdline/apt-get.cc:1529 msgid "" "Unmet dependencies. Try 'apt-get -f install' with no packages (or specify a " "solution)." msgstr "" -#: cmdline/apt-get.cc:1570 +#: cmdline/apt-get.cc:1541 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" @@ -908,163 +904,158 @@ msgid "" "or been moved out of Incoming." msgstr "" -#: cmdline/apt-get.cc:1578 +#: cmdline/apt-get.cc:1549 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:1583 +#: cmdline/apt-get.cc:1554 msgid "The following information may help to resolve the situation:" msgstr "" -#: cmdline/apt-get.cc:1586 +#: cmdline/apt-get.cc:1557 msgid "Broken packages" msgstr "" -#: cmdline/apt-get.cc:1612 +#: cmdline/apt-get.cc:1583 msgid "The following extra packages will be installed:" msgstr "" -#: cmdline/apt-get.cc:1683 +#: cmdline/apt-get.cc:1654 msgid "Suggested packages:" msgstr "" -#: cmdline/apt-get.cc:1684 +#: cmdline/apt-get.cc:1655 msgid "Recommended packages:" msgstr "" -#: cmdline/apt-get.cc:1704 +#: cmdline/apt-get.cc:1675 msgid "Calculating upgrade... " msgstr "" -#: cmdline/apt-get.cc:1707 methods/ftp.cc:702 methods/connect.cc:101 +#: cmdline/apt-get.cc:1678 methods/ftp.cc:702 methods/connect.cc:101 msgid "Failed" msgstr "" -#: cmdline/apt-get.cc:1712 +#: cmdline/apt-get.cc:1683 msgid "Done" msgstr "" -#: cmdline/apt-get.cc:1777 cmdline/apt-get.cc:1785 +#: cmdline/apt-get.cc:1748 cmdline/apt-get.cc:1756 msgid "Internal error, problem resolver broke stuff" msgstr "" -#: cmdline/apt-get.cc:1885 +#: cmdline/apt-get.cc:1856 msgid "Must specify at least one package to fetch source for" msgstr "" -#: cmdline/apt-get.cc:1915 cmdline/apt-get.cc:2144 +#: cmdline/apt-get.cc:1883 cmdline/apt-get.cc:2091 #, c-format msgid "Unable to find a source package for %s" msgstr "" -#: cmdline/apt-get.cc:1959 -#, c-format -msgid "Skiping already downloaded file '%s'\n" -msgstr "" - -#: cmdline/apt-get.cc:1983 +#: cmdline/apt-get.cc:1930 #, c-format msgid "You don't have enough free space in %s" msgstr "" -#: cmdline/apt-get.cc:1988 +#: cmdline/apt-get.cc:1935 #, c-format msgid "Need to get %sB/%sB of source archives.\n" msgstr "" -#: cmdline/apt-get.cc:1991 +#: cmdline/apt-get.cc:1938 #, c-format msgid "Need to get %sB of source archives.\n" msgstr "" -#: cmdline/apt-get.cc:1997 +#: cmdline/apt-get.cc:1944 #, c-format msgid "Fetch source %s\n" msgstr "" -#: cmdline/apt-get.cc:2028 +#: cmdline/apt-get.cc:1975 msgid "Failed to fetch some archives." msgstr "" -#: cmdline/apt-get.cc:2056 +#: cmdline/apt-get.cc:2003 #, c-format msgid "Skipping unpack of already unpacked source in %s\n" msgstr "" -#: cmdline/apt-get.cc:2068 +#: cmdline/apt-get.cc:2015 #, c-format msgid "Unpack command '%s' failed.\n" msgstr "" -#: cmdline/apt-get.cc:2069 +#: cmdline/apt-get.cc:2016 #, c-format msgid "Check if the 'dpkg-dev' package is installed.\n" msgstr "" -#: cmdline/apt-get.cc:2086 +#: cmdline/apt-get.cc:2033 #, c-format msgid "Build command '%s' failed.\n" msgstr "" -#: cmdline/apt-get.cc:2105 +#: cmdline/apt-get.cc:2052 msgid "Child process failed" msgstr "" -#: cmdline/apt-get.cc:2121 +#: cmdline/apt-get.cc:2068 msgid "Must specify at least one package to check builddeps for" msgstr "" -#: cmdline/apt-get.cc:2149 +#: cmdline/apt-get.cc:2096 #, c-format msgid "Unable to get build-dependency information for %s" msgstr "" -#: cmdline/apt-get.cc:2169 +#: cmdline/apt-get.cc:2116 #, c-format msgid "%s has no build depends.\n" msgstr "" -#: cmdline/apt-get.cc:2221 +#: cmdline/apt-get.cc:2168 #, c-format msgid "" "%s dependency for %s cannot be satisfied because the package %s cannot be " "found" msgstr "" -#: cmdline/apt-get.cc:2273 +#: cmdline/apt-get.cc:2220 #, 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:2308 +#: cmdline/apt-get.cc:2255 #, c-format msgid "Failed to satisfy %s dependency for %s: Installed package %s is too new" msgstr "" -#: cmdline/apt-get.cc:2333 +#: cmdline/apt-get.cc:2280 #, c-format msgid "Failed to satisfy %s dependency for %s: %s" msgstr "" -#: cmdline/apt-get.cc:2347 +#: cmdline/apt-get.cc:2294 #, c-format msgid "Build-dependencies for %s could not be satisfied." msgstr "" -#: cmdline/apt-get.cc:2351 +#: cmdline/apt-get.cc:2298 msgid "Failed to process build dependencies" msgstr "" -#: cmdline/apt-get.cc:2383 +#: cmdline/apt-get.cc:2330 msgid "Supported modules:" msgstr "" -#: cmdline/apt-get.cc:2424 +#: cmdline/apt-get.cc:2371 msgid "" "Usage: apt-get [options] command\n" " apt-get [options] install|remove pkg1 [pkg2 ...]\n" @@ -1265,7 +1256,7 @@ msgstr "" msgid "Failed to write file %s" msgstr "" -#: apt-inst/dirstream.cc:96 apt-inst/dirstream.cc:104 +#: apt-inst/dirstream.cc:80 apt-inst/dirstream.cc:88 #, c-format msgid "Failed to close file %s" msgstr "" @@ -1318,8 +1309,7 @@ msgid "File %s/%s overwrites the one in the package %s" msgstr "" #: apt-inst/extract.cc:467 apt-pkg/contrib/configuration.cc:750 -#: apt-pkg/contrib/cdromutl.cc:153 apt-pkg/sourcelist.cc:324 -#: apt-pkg/acquire.cc:421 apt-pkg/clean.cc:38 +#: apt-pkg/contrib/cdromutl.cc:153 apt-pkg/acquire.cc:417 apt-pkg/clean.cc:38 #, c-format msgid "Unable to read %s" msgstr "" @@ -1349,9 +1339,9 @@ 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:748 +#: apt-pkg/pkgcachegen.cc:817 apt-pkg/pkgcachegen.cc:822 +#: apt-pkg/pkgcachegen.cc:945 msgid "Reading package lists" msgstr "" @@ -1484,11 +1474,12 @@ msgid "File not found" msgstr "" #: methods/copy.cc:42 methods/gpgv.cc:265 methods/gzip.cc:133 -#: methods/gzip.cc:142 +#: methods/gzip.cc:142 methods/rred.cc:234 methods/rred.cc:243 msgid "Failed to stat" msgstr "" #: methods/copy.cc:79 methods/gpgv.cc:262 methods/gzip.cc:139 +#: methods/rred.cc:240 msgid "Failed to set modification time" msgstr "" @@ -1614,7 +1605,7 @@ msgstr "" msgid "Unable to accept connection" msgstr "" -#: methods/ftp.cc:864 methods/http.cc:963 methods/rsh.cc:303 +#: methods/ftp.cc:864 methods/http.cc:921 methods/rsh.cc:303 msgid "Problem hashing file" msgstr "" @@ -1744,76 +1735,76 @@ msgstr "" msgid "Read error from %s process" msgstr "" -#: methods/http.cc:381 +#: methods/http.cc:345 msgid "Waiting for headers" msgstr "" -#: methods/http.cc:527 +#: methods/http.cc:491 #, c-format msgid "Got a single header line over %u chars" msgstr "" -#: methods/http.cc:535 +#: methods/http.cc:499 msgid "Bad header line" msgstr "" -#: methods/http.cc:554 methods/http.cc:561 +#: methods/http.cc:518 methods/http.cc:525 msgid "The HTTP server sent an invalid reply header" msgstr "" -#: methods/http.cc:590 +#: methods/http.cc:554 msgid "The HTTP server sent an invalid Content-Length header" msgstr "" -#: methods/http.cc:605 +#: methods/http.cc:569 msgid "The HTTP server sent an invalid Content-Range header" msgstr "" -#: methods/http.cc:607 +#: methods/http.cc:571 msgid "This HTTP server has broken range support" msgstr "" -#: methods/http.cc:631 +#: methods/http.cc:595 msgid "Unknown date format" msgstr "" -#: methods/http.cc:778 +#: methods/http.cc:742 msgid "Select failed" msgstr "" -#: methods/http.cc:783 +#: methods/http.cc:747 msgid "Connection timed out" msgstr "" -#: methods/http.cc:806 +#: methods/http.cc:770 msgid "Error writing to output file" msgstr "" -#: methods/http.cc:837 +#: methods/http.cc:798 msgid "Error writing to file" msgstr "" -#: methods/http.cc:865 +#: methods/http.cc:823 msgid "Error writing to the file" msgstr "" -#: methods/http.cc:879 +#: methods/http.cc:837 msgid "Error reading from server. Remote end closed connection" msgstr "" -#: methods/http.cc:881 +#: methods/http.cc:839 msgid "Error reading from server" msgstr "" -#: methods/http.cc:1112 +#: methods/http.cc:1070 msgid "Bad header data" msgstr "" -#: methods/http.cc:1129 +#: methods/http.cc:1087 msgid "Connection failed" msgstr "" -#: methods/http.cc:1220 +#: methods/http.cc:1178 msgid "Internal error" msgstr "" @@ -1826,7 +1817,7 @@ msgstr "" msgid "Couldn't make mmap of %lu bytes" msgstr "" -#: apt-pkg/contrib/strutl.cc:938 +#: apt-pkg/contrib/strutl.cc:984 #, c-format msgid "Selection %s not found" msgstr "" @@ -1947,7 +1938,7 @@ msgstr "" msgid "Unable to stat the mount point %s" msgstr "" -#: apt-pkg/contrib/cdromutl.cc:149 apt-pkg/acquire.cc:427 apt-pkg/clean.cc:44 +#: apt-pkg/contrib/cdromutl.cc:149 apt-pkg/acquire.cc:423 apt-pkg/clean.cc:44 #, c-format msgid "Unable to change to %s" msgstr "" @@ -2023,72 +2014,72 @@ msgstr "" msgid "Problem syncing the file" msgstr "" -#: apt-pkg/pkgcache.cc:126 +#: apt-pkg/pkgcache.cc:135 msgid "Empty package cache" msgstr "" -#: apt-pkg/pkgcache.cc:132 +#: apt-pkg/pkgcache.cc:141 msgid "The package cache file is corrupted" msgstr "" -#: apt-pkg/pkgcache.cc:137 +#: apt-pkg/pkgcache.cc:146 msgid "The package cache file is an incompatible version" msgstr "" -#: apt-pkg/pkgcache.cc:142 +#: apt-pkg/pkgcache.cc:151 #, c-format msgid "This APT does not support the versioning system '%s'" msgstr "" -#: apt-pkg/pkgcache.cc:147 +#: apt-pkg/pkgcache.cc:156 msgid "The package cache was built for a different architecture" msgstr "" -#: apt-pkg/pkgcache.cc:218 +#: apt-pkg/pkgcache.cc:227 msgid "Depends" msgstr "" -#: apt-pkg/pkgcache.cc:218 +#: apt-pkg/pkgcache.cc:227 msgid "PreDepends" msgstr "" -#: apt-pkg/pkgcache.cc:218 +#: apt-pkg/pkgcache.cc:227 msgid "Suggests" msgstr "" -#: apt-pkg/pkgcache.cc:219 +#: apt-pkg/pkgcache.cc:228 msgid "Recommends" msgstr "" -#: apt-pkg/pkgcache.cc:219 +#: apt-pkg/pkgcache.cc:228 msgid "Conflicts" msgstr "" -#: apt-pkg/pkgcache.cc:219 +#: apt-pkg/pkgcache.cc:228 msgid "Replaces" msgstr "" -#: apt-pkg/pkgcache.cc:220 +#: apt-pkg/pkgcache.cc:229 msgid "Obsoletes" msgstr "" -#: apt-pkg/pkgcache.cc:231 +#: apt-pkg/pkgcache.cc:240 msgid "important" msgstr "" -#: apt-pkg/pkgcache.cc:231 +#: apt-pkg/pkgcache.cc:240 msgid "required" msgstr "" -#: apt-pkg/pkgcache.cc:231 +#: apt-pkg/pkgcache.cc:240 msgid "standard" msgstr "" -#: apt-pkg/pkgcache.cc:232 +#: apt-pkg/pkgcache.cc:241 msgid "optional" msgstr "" -#: apt-pkg/pkgcache.cc:232 +#: apt-pkg/pkgcache.cc:241 msgid "extra" msgstr "" @@ -2114,52 +2105,52 @@ msgstr "" msgid "Unable to parse package file %s (2)" msgstr "" -#: apt-pkg/sourcelist.cc:94 +#: apt-pkg/sourcelist.cc:87 #, c-format msgid "Malformed line %lu in source list %s (URI)" msgstr "" -#: apt-pkg/sourcelist.cc:96 +#: apt-pkg/sourcelist.cc:89 #, c-format msgid "Malformed line %lu in source list %s (dist)" msgstr "" -#: apt-pkg/sourcelist.cc:99 +#: apt-pkg/sourcelist.cc:92 #, c-format msgid "Malformed line %lu in source list %s (URI parse)" msgstr "" -#: apt-pkg/sourcelist.cc:105 +#: apt-pkg/sourcelist.cc:98 #, c-format msgid "Malformed line %lu in source list %s (absolute dist)" msgstr "" -#: apt-pkg/sourcelist.cc:112 +#: apt-pkg/sourcelist.cc:105 #, c-format msgid "Malformed line %lu in source list %s (dist parse)" msgstr "" -#: apt-pkg/sourcelist.cc:203 +#: apt-pkg/sourcelist.cc:156 #, c-format msgid "Opening %s" msgstr "" -#: apt-pkg/sourcelist.cc:220 apt-pkg/cdrom.cc:426 +#: apt-pkg/sourcelist.cc:170 apt-pkg/cdrom.cc:450 #, c-format msgid "Line %u too long in source list %s." msgstr "" -#: apt-pkg/sourcelist.cc:240 +#: apt-pkg/sourcelist.cc:187 #, c-format msgid "Malformed line %u in source list %s (type)" msgstr "" -#: apt-pkg/sourcelist.cc:244 +#: apt-pkg/sourcelist.cc:191 #, 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 +#: apt-pkg/sourcelist.cc:199 apt-pkg/sourcelist.cc:202 #, c-format msgid "Malformed line %u in source list %s (vendor id)" msgstr "" @@ -2203,7 +2194,7 @@ msgstr "" msgid "Archive directory %spartial is missing." msgstr "" -#: apt-pkg/acquire.cc:821 +#: apt-pkg/acquire.cc:817 #, c-format msgid "Downloading file %li of %li (%s remaining)" msgstr "" @@ -2223,12 +2214,12 @@ msgstr "" msgid "Please insert the disc labeled: '%s' in the drive '%s' and press enter." msgstr "" -#: apt-pkg/init.cc:120 +#: apt-pkg/init.cc:122 #, c-format msgid "Packaging system '%s' is not supported" msgstr "" -#: apt-pkg/init.cc:136 +#: apt-pkg/init.cc:138 msgid "Unable to determine a suitable packaging system type" msgstr "" @@ -2271,106 +2262,121 @@ msgstr "" msgid "Error occurred while processing %s (NewPackage)" msgstr "" -#: apt-pkg/pkgcachegen.cc:129 +#: apt-pkg/pkgcachegen.cc:132 #, c-format msgid "Error occurred while processing %s (UsePackage1)" msgstr "" -#: apt-pkg/pkgcachegen.cc:150 +#: apt-pkg/pkgcachegen.cc:155 +#, c-format +msgid "Error occured while processing %s (NewFileDesc1)" +msgstr "" + +#: apt-pkg/pkgcachegen.cc:180 #, c-format msgid "Error occurred while processing %s (UsePackage2)" msgstr "" -#: apt-pkg/pkgcachegen.cc:154 +#: apt-pkg/pkgcachegen.cc:184 #, c-format msgid "Error occurred while processing %s (NewFileVer1)" msgstr "" -#: apt-pkg/pkgcachegen.cc:184 +#: apt-pkg/pkgcachegen.cc:215 #, c-format msgid "Error occurred while processing %s (NewVersion1)" msgstr "" -#: apt-pkg/pkgcachegen.cc:188 +#: apt-pkg/pkgcachegen.cc:219 #, c-format msgid "Error occurred while processing %s (UsePackage3)" msgstr "" -#: apt-pkg/pkgcachegen.cc:192 +#: apt-pkg/pkgcachegen.cc:223 #, c-format msgid "Error occurred while processing %s (NewVersion2)" msgstr "" -#: apt-pkg/pkgcachegen.cc:207 +#: apt-pkg/pkgcachegen.cc:247 +#, c-format +msgid "Error occured while processing %s (NewFileDesc2)" +msgstr "" + +#: apt-pkg/pkgcachegen.cc:253 msgid "Wow, you exceeded the number of package names this APT is capable of." msgstr "" -#: apt-pkg/pkgcachegen.cc:210 +#: apt-pkg/pkgcachegen.cc:256 msgid "Wow, you exceeded the number of versions this APT is capable of." msgstr "" -#: apt-pkg/pkgcachegen.cc:213 +#: apt-pkg/pkgcachegen.cc:259 +msgid "Wow, you exceeded the number of descriptions this APT is capable of." +msgstr "" + +#: apt-pkg/pkgcachegen.cc:262 msgid "Wow, you exceeded the number of dependencies this APT is capable of." msgstr "" -#: apt-pkg/pkgcachegen.cc:241 +#: apt-pkg/pkgcachegen.cc:290 #, c-format msgid "Error occurred while processing %s (FindPkg)" msgstr "" -#: apt-pkg/pkgcachegen.cc:254 +#: apt-pkg/pkgcachegen.cc:303 #, c-format msgid "Error occurred while processing %s (CollectFileProvides)" msgstr "" -#: apt-pkg/pkgcachegen.cc:260 +#: apt-pkg/pkgcachegen.cc:309 #, c-format msgid "Package %s %s was not found while processing file dependencies" msgstr "" -#: apt-pkg/pkgcachegen.cc:574 +#: apt-pkg/pkgcachegen.cc:679 #, c-format msgid "Couldn't stat source package list %s" msgstr "" -#: apt-pkg/pkgcachegen.cc:658 +#: apt-pkg/pkgcachegen.cc:763 msgid "Collecting File Provides" msgstr "" -#: apt-pkg/pkgcachegen.cc:785 apt-pkg/pkgcachegen.cc:792 +#: apt-pkg/pkgcachegen.cc:890 apt-pkg/pkgcachegen.cc:897 msgid "IO Error saving source cache" msgstr "" -#: apt-pkg/acquire-item.cc:126 +#: apt-pkg/acquire-item.cc:129 #, c-format msgid "rename failed, %s (%s -> %s)." msgstr "" -#: apt-pkg/acquire-item.cc:236 apt-pkg/acquire-item.cc:911 +#: apt-pkg/acquire-item.cc:391 apt-pkg/acquire-item.cc:635 +#: apt-pkg/acquire-item.cc:1336 msgid "MD5Sum mismatch" msgstr "" -#: apt-pkg/acquire-item.cc:719 +#: apt-pkg/acquire-item.cc:1150 #, 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:778 +#: apt-pkg/acquire-item.cc:1203 #, 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:814 +#: apt-pkg/acquire-item.cc:1239 #, c-format msgid "" "The package index files are corrupted. No Filename: field for package %s." msgstr "" -#: apt-pkg/acquire-item.cc:901 +#: apt-pkg/acquire-item.cc:1326 msgid "Size mismatch" msgstr "" @@ -2379,92 +2385,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 msgid "That is not a valid name, try again.\n" msgstr "" -#: apt-pkg/cdrom.cc:726 +#: apt-pkg/cdrom.cc:753 #, c-format msgid "" "This disc is called: \n" "'%s'\n" msgstr "" -#: apt-pkg/cdrom.cc:730 +#: apt-pkg/cdrom.cc:757 msgid "Copying package lists..." msgstr "" -#: apt-pkg/cdrom.cc:754 +#: apt-pkg/cdrom.cc:783 msgid "Writing new source list\n" msgstr "" -#: apt-pkg/cdrom.cc:763 +#: apt-pkg/cdrom.cc:792 msgid "Source list entries for this disc are:\n" msgstr "" -#: apt-pkg/cdrom.cc:803 +#: apt-pkg/cdrom.cc:832 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 "" @@ -2519,6 +2527,10 @@ msgstr "" msgid "Removed with config %s" msgstr "" +#: methods/rred.cc:219 +msgid "Could not patch file" +msgstr "" + #: methods/rsh.cc:330 msgid "Connection closed prematurely" msgstr "" @@ -6,7 +6,7 @@ msgid "" msgstr "" "Project-Id-Version: apt 0.5.26\n" "Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2006-01-04 18:51+0100\n" +"POT-Creation-Date: 2005-10-17 19:31+0200\n" "PO-Revision-Date: 2004-05-06 15:25+0100\n" "Last-Translator: Safir Šećerović <sapphire@linux.org.ba>\n" "Language-Team: Bosnian <lokal@lugbih.org>\n" @@ -14,145 +14,155 @@ msgstr "" "Content-Type: text/plain; charset=utf-8\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 "Paket %s verzije %s ima nezadovoljenu zavisnost:\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 +#: 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:1419 cmdline/apt-cache.cc:1570 #, c-format msgid "Unable to locate package %s" msgstr "Ne mogu pronaći paket %s" -#: cmdline/apt-cache.cc:232 +#: cmdline/apt-cache.cc:245 msgid "Total package names : " msgstr "Ukupno naziva paketa:" -#: cmdline/apt-cache.cc:272 +#: cmdline/apt-cache.cc:285 msgid " Normal packages: " msgstr " Normalni paketi:" -#: cmdline/apt-cache.cc:273 +#: cmdline/apt-cache.cc:286 msgid " Pure virtual packages: " msgstr " Čisto virtuelni paketi:" -#: cmdline/apt-cache.cc:274 +#: cmdline/apt-cache.cc:287 msgid " Single virtual packages: " msgstr " Pojedinačni virutuelni paketi:" -#: cmdline/apt-cache.cc:275 +#: cmdline/apt-cache.cc:288 msgid " Mixed virtual packages: " msgstr " Miješani virtuelni paketi:" -#: cmdline/apt-cache.cc:276 +#: cmdline/apt-cache.cc:289 msgid " Missing: " msgstr " Nedostajući:" -#: cmdline/apt-cache.cc:278 +#: cmdline/apt-cache.cc:291 msgid "Total distinct versions: " msgstr "Ukupno različitih verzija:" -#: cmdline/apt-cache.cc:280 +#: cmdline/apt-cache.cc:293 +#, fuzzy +msgid "Total Distinct Descriptions: " +msgstr "Ukupno različitih verzija:" + +#: cmdline/apt-cache.cc:295 msgid "Total dependencies: " msgstr "Ukupno zavisnosti:" -#: cmdline/apt-cache.cc:283 +#: cmdline/apt-cache.cc:298 msgid "Total ver/file relations: " msgstr "Ukupno Verzija/Datoteka odnosa:" -#: cmdline/apt-cache.cc:285 +#: cmdline/apt-cache.cc:300 +#, fuzzy +msgid "Total Desc/File relations: " +msgstr "Ukupno Verzija/Datoteka odnosa:" + +#: 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:1293 msgid "You must give exactly one pattern" msgstr "" -#: cmdline/apt-cache.cc:1385 +#: cmdline/apt-cache.cc:1447 msgid "No packages found" msgstr "Paketi nisu pronađeni" -#: cmdline/apt-cache.cc:1462 +#: cmdline/apt-cache.cc:1524 msgid "Package files:" msgstr "Datoteke paketa:" -#: cmdline/apt-cache.cc:1469 cmdline/apt-cache.cc:1555 +#: cmdline/apt-cache.cc:1531 cmdline/apt-cache.cc:1617 msgid "Cache is out of sync, can't x-ref a package file" msgstr "" -#: cmdline/apt-cache.cc:1470 +#: cmdline/apt-cache.cc:1532 #, c-format msgid "%4i %s\n" msgstr "" #. Show any packages have explicit pins -#: cmdline/apt-cache.cc:1482 +#: cmdline/apt-cache.cc:1544 msgid "Pinned packages:" msgstr "" -#: cmdline/apt-cache.cc:1494 cmdline/apt-cache.cc:1535 +#: cmdline/apt-cache.cc:1556 cmdline/apt-cache.cc:1597 msgid "(not found)" msgstr "" #. Installed version -#: cmdline/apt-cache.cc:1515 +#: cmdline/apt-cache.cc:1577 msgid " Installed: " msgstr " Instalirano:" -#: cmdline/apt-cache.cc:1517 cmdline/apt-cache.cc:1525 +#: cmdline/apt-cache.cc:1579 cmdline/apt-cache.cc:1587 msgid "(none)" msgstr "" #. Candidate Version -#: cmdline/apt-cache.cc:1522 +#: cmdline/apt-cache.cc:1584 msgid " Candidate: " msgstr "" -#: cmdline/apt-cache.cc:1532 +#: cmdline/apt-cache.cc:1594 msgid " Package pin: " msgstr "" #. Show the priority tables -#: cmdline/apt-cache.cc:1541 +#: cmdline/apt-cache.cc:1603 msgid " Version table:" msgstr "" -#: cmdline/apt-cache.cc:1556 +#: cmdline/apt-cache.cc:1618 #, c-format msgid " %4i %s\n" msgstr "" -#: cmdline/apt-cache.cc:1651 cmdline/apt-cdrom.cc:138 cmdline/apt-config.cc:70 +#: cmdline/apt-cache.cc:1713 cmdline/apt-cdrom.cc:138 cmdline/apt-config.cc:70 #: cmdline/apt-extracttemplates.cc:225 ftparchive/apt-ftparchive.cc:550 -#: cmdline/apt-get.cc:2378 cmdline/apt-sortpkgs.cc:144 +#: cmdline/apt-get.cc:2325 cmdline/apt-sortpkgs.cc:144 #, c-format msgid "%s %s for %s %s compiled on %s %s\n" msgstr "" -#: cmdline/apt-cache.cc:1658 +#: cmdline/apt-cache.cc:1720 msgid "" "Usage: apt-cache [options] command\n" " apt-cache [options] add file1 [file2 ...]\n" @@ -191,18 +201,6 @@ msgid "" "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 "" - -#: 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 "Argumenti nisu u parovima" @@ -254,7 +252,7 @@ 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:815 #, c-format msgid "Unable to write to %s" msgstr "Ne mogu zapisati na %s" @@ -438,12 +436,12 @@ msgstr "" msgid "Archive had no package field" msgstr "" -#: ftparchive/writer.cc:394 ftparchive/writer.cc:603 +#: ftparchive/writer.cc:394 ftparchive/writer.cc:602 #, c-format msgid " %s has no override entry\n" msgstr "" -#: ftparchive/writer.cc:437 ftparchive/writer.cc:689 +#: ftparchive/writer.cc:437 ftparchive/writer.cc:688 #, c-format msgid " %s maintainer is %s not %s\n" msgstr "" @@ -543,223 +541,223 @@ msgstr "" msgid "Failed to rename %s to %s" msgstr "" -#: cmdline/apt-get.cc:120 +#: cmdline/apt-get.cc:118 msgid "Y" msgstr "" -#: cmdline/apt-get.cc:142 cmdline/apt-get.cc:1515 +#: cmdline/apt-get.cc:140 cmdline/apt-get.cc:1486 #, c-format msgid "Regex compilation error - %s" msgstr "" -#: cmdline/apt-get.cc:237 +#: cmdline/apt-get.cc:235 msgid "The following packages have unmet dependencies:" msgstr "" -#: cmdline/apt-get.cc:327 +#: cmdline/apt-get.cc:325 #, c-format msgid "but %s is installed" msgstr "ali je %s instaliran" -#: cmdline/apt-get.cc:329 +#: cmdline/apt-get.cc:327 #, c-format msgid "but %s is to be installed" msgstr "ali se %s treba instalirati" -#: cmdline/apt-get.cc:336 +#: cmdline/apt-get.cc:334 msgid "but it is not installable" msgstr "ali se ne može instalirati" -#: cmdline/apt-get.cc:338 +#: cmdline/apt-get.cc:336 msgid "but it is a virtual package" msgstr "ali je virtuelni paket" -#: cmdline/apt-get.cc:341 +#: cmdline/apt-get.cc:339 msgid "but it is not installed" msgstr "ali nije instaliran" -#: cmdline/apt-get.cc:341 +#: cmdline/apt-get.cc:339 msgid "but it is not going to be installed" msgstr "ali se neće instalirati" -#: cmdline/apt-get.cc:346 +#: cmdline/apt-get.cc:344 msgid " or" msgstr " ili" -#: cmdline/apt-get.cc:375 +#: cmdline/apt-get.cc:373 msgid "The following NEW packages will be installed:" msgstr "Slijedeći NOVI paketi će biti instalirani:" -#: cmdline/apt-get.cc:401 +#: cmdline/apt-get.cc:399 msgid "The following packages will be REMOVED:" msgstr "Slijedeći paketi će biti UKLONJENI:" -#: cmdline/apt-get.cc:423 +#: cmdline/apt-get.cc:421 #, fuzzy msgid "The following packages have been kept back:" msgstr "Slijedeći paketi su zadržani:" -#: cmdline/apt-get.cc:444 +#: cmdline/apt-get.cc:442 msgid "The following packages will be upgraded:" msgstr "Slijedeći paketi će biti nadograđeni:" -#: cmdline/apt-get.cc:465 +#: cmdline/apt-get.cc:463 msgid "The following packages will be DOWNGRADED:" msgstr "" -#: cmdline/apt-get.cc:485 +#: cmdline/apt-get.cc:483 msgid "The following held packages will be changed:" msgstr "" -#: cmdline/apt-get.cc:538 +#: cmdline/apt-get.cc:536 #, c-format msgid "%s (due to %s) " msgstr "" -#: cmdline/apt-get.cc:546 +#: cmdline/apt-get.cc:544 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:575 #, c-format msgid "%lu upgraded, %lu newly installed, " msgstr "" -#: cmdline/apt-get.cc:581 +#: cmdline/apt-get.cc:579 #, c-format msgid "%lu reinstalled, " msgstr "" -#: cmdline/apt-get.cc:583 +#: cmdline/apt-get.cc:581 #, c-format msgid "%lu downgraded, " msgstr "" -#: cmdline/apt-get.cc:585 +#: cmdline/apt-get.cc:583 #, c-format msgid "%lu to remove and %lu not upgraded.\n" msgstr "" -#: cmdline/apt-get.cc:589 +#: cmdline/apt-get.cc:587 #, c-format msgid "%lu not fully installed or removed.\n" msgstr "" -#: cmdline/apt-get.cc:649 +#: cmdline/apt-get.cc:647 msgid "Correcting dependencies..." msgstr "Ispravljam zavisnosti..." -#: cmdline/apt-get.cc:652 +#: cmdline/apt-get.cc:650 msgid " failed." msgstr "" -#: cmdline/apt-get.cc:655 +#: cmdline/apt-get.cc:653 msgid "Unable to correct dependencies" msgstr "Ne mogu ispraviti zavisnosti" -#: cmdline/apt-get.cc:658 +#: cmdline/apt-get.cc:656 msgid "Unable to minimize the upgrade set" msgstr "" -#: cmdline/apt-get.cc:660 +#: cmdline/apt-get.cc:658 msgid " Done" msgstr " Urađeno" -#: cmdline/apt-get.cc:664 +#: cmdline/apt-get.cc:662 msgid "You might want to run `apt-get -f install' to correct these." msgstr "" -#: cmdline/apt-get.cc:667 +#: cmdline/apt-get.cc:665 msgid "Unmet dependencies. Try using -f." msgstr "Nezadovoljene zavisnosti. Pokušajte koristeći -f." -#: cmdline/apt-get.cc:689 +#: cmdline/apt-get.cc:687 #, fuzzy msgid "WARNING: The following packages cannot be authenticated!" msgstr "Slijedeći paketi će biti nadograđeni:" -#: cmdline/apt-get.cc:693 +#: cmdline/apt-get.cc:691 msgid "Authentication warning overridden.\n" msgstr "" -#: cmdline/apt-get.cc:700 +#: cmdline/apt-get.cc:698 msgid "Install these packages without verification [y/N]? " msgstr "" -#: cmdline/apt-get.cc:702 +#: cmdline/apt-get.cc:700 msgid "Some packages could not be authenticated" msgstr "" -#: cmdline/apt-get.cc:711 cmdline/apt-get.cc:858 +#: cmdline/apt-get.cc:709 cmdline/apt-get.cc:856 msgid "There are problems and -y was used without --force-yes" msgstr "" -#: cmdline/apt-get.cc:755 +#: cmdline/apt-get.cc:753 msgid "Internal error, InstallPackages was called with broken packages!" msgstr "" -#: cmdline/apt-get.cc:764 +#: cmdline/apt-get.cc:762 msgid "Packages need to be removed but remove is disabled." msgstr "" -#: cmdline/apt-get.cc:775 +#: cmdline/apt-get.cc:773 msgid "Internal error, Ordering didn't finish" msgstr "" -#: cmdline/apt-get.cc:791 cmdline/apt-get.cc:1809 cmdline/apt-get.cc:1842 +#: cmdline/apt-get.cc:789 cmdline/apt-get.cc:1780 cmdline/apt-get.cc:1813 msgid "Unable to lock the download directory" msgstr "" -#: cmdline/apt-get.cc:801 cmdline/apt-get.cc:1890 cmdline/apt-get.cc:2126 +#: cmdline/apt-get.cc:799 cmdline/apt-get.cc:1861 cmdline/apt-get.cc:2073 #: apt-pkg/cachefile.cc:67 msgid "The list of sources could not be read." msgstr "" -#: cmdline/apt-get.cc:816 +#: cmdline/apt-get.cc:814 msgid "How odd.. The sizes didn't match, email apt@packages.debian.org" msgstr "" -#: cmdline/apt-get.cc:821 +#: cmdline/apt-get.cc:819 #, c-format msgid "Need to get %sB/%sB of archives.\n" msgstr "" -#: cmdline/apt-get.cc:824 +#: cmdline/apt-get.cc:822 #, c-format msgid "Need to get %sB of archives.\n" msgstr "" -#: cmdline/apt-get.cc:829 +#: cmdline/apt-get.cc:827 #, c-format msgid "After unpacking %sB of additional disk space will be used.\n" msgstr "" -#: cmdline/apt-get.cc:832 +#: cmdline/apt-get.cc:830 #, c-format msgid "After unpacking %sB disk space will be freed.\n" msgstr "" -#: cmdline/apt-get.cc:846 cmdline/apt-get.cc:1980 +#: cmdline/apt-get.cc:844 cmdline/apt-get.cc:1927 #, c-format msgid "Couldn't determine free space in %s" msgstr "" -#: cmdline/apt-get.cc:849 +#: cmdline/apt-get.cc:847 #, 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:862 cmdline/apt-get.cc:882 msgid "Trivial Only specified but this is not a trivial operation." msgstr "" -#: cmdline/apt-get.cc:866 +#: cmdline/apt-get.cc:864 msgid "Yes, do as I say!" msgstr "Da, uradi kako kažem!" -#: cmdline/apt-get.cc:868 +#: cmdline/apt-get.cc:866 #, c-format msgid "" "You are about to do something potentially harmful.\n" @@ -767,75 +765,75 @@ msgid "" " ?] " msgstr "" -#: cmdline/apt-get.cc:874 cmdline/apt-get.cc:893 +#: cmdline/apt-get.cc:872 cmdline/apt-get.cc:891 msgid "Abort." msgstr "Odustani." -#: cmdline/apt-get.cc:889 +#: cmdline/apt-get.cc:887 #, fuzzy msgid "Do you want to continue [Y/n]? " msgstr "Da li želite nastaviti? [Y/n]" -#: cmdline/apt-get.cc:961 cmdline/apt-get.cc:1365 cmdline/apt-get.cc:2023 +#: cmdline/apt-get.cc:959 cmdline/apt-get.cc:1336 cmdline/apt-get.cc:1970 #, c-format msgid "Failed to fetch %s %s\n" msgstr "" -#: cmdline/apt-get.cc:979 +#: cmdline/apt-get.cc:977 msgid "Some files failed to download" msgstr "" -#: cmdline/apt-get.cc:980 cmdline/apt-get.cc:2032 +#: cmdline/apt-get.cc:978 cmdline/apt-get.cc:1979 msgid "Download complete and in download only mode" msgstr "" -#: cmdline/apt-get.cc:986 +#: cmdline/apt-get.cc:984 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:988 msgid "--fix-missing and media swapping is not currently supported" msgstr "" -#: cmdline/apt-get.cc:995 +#: cmdline/apt-get.cc:993 msgid "Unable to correct missing packages." msgstr "" -#: cmdline/apt-get.cc:996 +#: cmdline/apt-get.cc:994 msgid "Aborting install." msgstr "Odustajem od instalacije." -#: cmdline/apt-get.cc:1030 +#: cmdline/apt-get.cc:1028 #, c-format msgid "Note, selecting %s instead of %s\n" msgstr "" -#: cmdline/apt-get.cc:1040 +#: cmdline/apt-get.cc:1038 #, 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:1056 #, c-format msgid "Package %s is not installed, so not removed\n" msgstr "" -#: cmdline/apt-get.cc:1069 +#: cmdline/apt-get.cc:1067 #, c-format msgid "Package %s is a virtual package provided by:\n" msgstr "" -#: cmdline/apt-get.cc:1081 +#: cmdline/apt-get.cc:1079 msgid " [Installed]" msgstr "[Instalirano]" -#: cmdline/apt-get.cc:1086 +#: cmdline/apt-get.cc:1084 msgid "You should explicitly select one to install." msgstr "" -#: cmdline/apt-get.cc:1091 +#: cmdline/apt-get.cc:1089 #, c-format msgid "" "Package %s is not available, but is referred to by another package.\n" @@ -843,79 +841,79 @@ msgid "" "is only available from another source\n" msgstr "" -#: cmdline/apt-get.cc:1110 +#: cmdline/apt-get.cc:1108 msgid "However the following packages replace it:" msgstr "Međutim, slijedeći paketi ga zamjenjuju:" -#: cmdline/apt-get.cc:1113 +#: cmdline/apt-get.cc:1111 #, c-format msgid "Package %s has no installation candidate" msgstr "" -#: cmdline/apt-get.cc:1133 +#: cmdline/apt-get.cc:1131 #, c-format msgid "Reinstallation of %s is not possible, it cannot be downloaded.\n" msgstr "" -#: cmdline/apt-get.cc:1141 +#: cmdline/apt-get.cc:1139 #, c-format msgid "%s is already the newest version.\n" msgstr "" -#: cmdline/apt-get.cc:1168 +#: cmdline/apt-get.cc:1166 #, c-format msgid "Release '%s' for '%s' was not found" msgstr "" -#: cmdline/apt-get.cc:1170 +#: cmdline/apt-get.cc:1168 #, c-format msgid "Version '%s' for '%s' was not found" msgstr "" -#: cmdline/apt-get.cc:1176 +#: cmdline/apt-get.cc:1174 #, c-format msgid "Selected version %s (%s) for %s\n" msgstr "" -#: cmdline/apt-get.cc:1313 +#: cmdline/apt-get.cc:1284 msgid "The update command takes no arguments" msgstr "" -#: cmdline/apt-get.cc:1326 cmdline/apt-get.cc:1420 +#: cmdline/apt-get.cc:1297 cmdline/apt-get.cc:1391 msgid "Unable to lock the list directory" msgstr "" -#: cmdline/apt-get.cc:1384 +#: cmdline/apt-get.cc:1355 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:1374 msgid "Internal error, AllUpgrade broke stuff" msgstr "" -#: cmdline/apt-get.cc:1502 cmdline/apt-get.cc:1538 +#: cmdline/apt-get.cc:1473 cmdline/apt-get.cc:1509 #, c-format msgid "Couldn't find package %s" msgstr "" -#: cmdline/apt-get.cc:1525 +#: cmdline/apt-get.cc:1496 #, c-format msgid "Note, selecting %s for regex '%s'\n" msgstr "" -#: cmdline/apt-get.cc:1555 +#: cmdline/apt-get.cc:1526 msgid "You might want to run `apt-get -f install' to correct these:" msgstr "" -#: cmdline/apt-get.cc:1558 +#: cmdline/apt-get.cc:1529 msgid "" "Unmet dependencies. Try 'apt-get -f install' with no packages (or specify a " "solution)." msgstr "" -#: cmdline/apt-get.cc:1570 +#: cmdline/apt-get.cc:1541 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" @@ -923,163 +921,158 @@ msgid "" "or been moved out of Incoming." msgstr "" -#: cmdline/apt-get.cc:1578 +#: cmdline/apt-get.cc:1549 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:1583 +#: cmdline/apt-get.cc:1554 msgid "The following information may help to resolve the situation:" msgstr "" -#: cmdline/apt-get.cc:1586 +#: cmdline/apt-get.cc:1557 msgid "Broken packages" msgstr "Oštećeni paketi" -#: cmdline/apt-get.cc:1612 +#: cmdline/apt-get.cc:1583 msgid "The following extra packages will be installed:" msgstr "Slijedeći dodatni paketi će biti instalirani:" -#: cmdline/apt-get.cc:1683 +#: cmdline/apt-get.cc:1654 msgid "Suggested packages:" msgstr "Predloženi paketi:" -#: cmdline/apt-get.cc:1684 +#: cmdline/apt-get.cc:1655 msgid "Recommended packages:" msgstr "Preporučeni paketi:" -#: cmdline/apt-get.cc:1704 +#: cmdline/apt-get.cc:1675 msgid "Calculating upgrade... " msgstr "Računam nadogradnju..." -#: cmdline/apt-get.cc:1707 methods/ftp.cc:702 methods/connect.cc:101 +#: cmdline/apt-get.cc:1678 methods/ftp.cc:702 methods/connect.cc:101 msgid "Failed" msgstr "Neuspješno" -#: cmdline/apt-get.cc:1712 +#: cmdline/apt-get.cc:1683 msgid "Done" msgstr "Urađeno" -#: cmdline/apt-get.cc:1777 cmdline/apt-get.cc:1785 +#: cmdline/apt-get.cc:1748 cmdline/apt-get.cc:1756 msgid "Internal error, problem resolver broke stuff" msgstr "" -#: cmdline/apt-get.cc:1885 +#: cmdline/apt-get.cc:1856 msgid "Must specify at least one package to fetch source for" msgstr "" -#: cmdline/apt-get.cc:1915 cmdline/apt-get.cc:2144 +#: cmdline/apt-get.cc:1883 cmdline/apt-get.cc:2091 #, c-format msgid "Unable to find a source package for %s" msgstr "" -#: cmdline/apt-get.cc:1959 -#, c-format -msgid "Skiping already downloaded file '%s'\n" -msgstr "" - -#: cmdline/apt-get.cc:1983 +#: cmdline/apt-get.cc:1930 #, c-format msgid "You don't have enough free space in %s" msgstr "" -#: cmdline/apt-get.cc:1988 +#: cmdline/apt-get.cc:1935 #, c-format msgid "Need to get %sB/%sB of source archives.\n" msgstr "" -#: cmdline/apt-get.cc:1991 +#: cmdline/apt-get.cc:1938 #, c-format msgid "Need to get %sB of source archives.\n" msgstr "" -#: cmdline/apt-get.cc:1997 +#: cmdline/apt-get.cc:1944 #, c-format msgid "Fetch source %s\n" msgstr "" -#: cmdline/apt-get.cc:2028 +#: cmdline/apt-get.cc:1975 msgid "Failed to fetch some archives." msgstr "" -#: cmdline/apt-get.cc:2056 +#: cmdline/apt-get.cc:2003 #, c-format msgid "Skipping unpack of already unpacked source in %s\n" msgstr "" -#: cmdline/apt-get.cc:2068 +#: cmdline/apt-get.cc:2015 #, c-format msgid "Unpack command '%s' failed.\n" msgstr "" -#: cmdline/apt-get.cc:2069 +#: cmdline/apt-get.cc:2016 #, c-format msgid "Check if the 'dpkg-dev' package is installed.\n" msgstr "" -#: cmdline/apt-get.cc:2086 +#: cmdline/apt-get.cc:2033 #, c-format msgid "Build command '%s' failed.\n" msgstr "" -#: cmdline/apt-get.cc:2105 +#: cmdline/apt-get.cc:2052 msgid "Child process failed" msgstr "" -#: cmdline/apt-get.cc:2121 +#: cmdline/apt-get.cc:2068 msgid "Must specify at least one package to check builddeps for" msgstr "" -#: cmdline/apt-get.cc:2149 +#: cmdline/apt-get.cc:2096 #, c-format msgid "Unable to get build-dependency information for %s" msgstr "" -#: cmdline/apt-get.cc:2169 +#: cmdline/apt-get.cc:2116 #, c-format msgid "%s has no build depends.\n" msgstr "" -#: cmdline/apt-get.cc:2221 +#: cmdline/apt-get.cc:2168 #, c-format msgid "" "%s dependency for %s cannot be satisfied because the package %s cannot be " "found" msgstr "" -#: cmdline/apt-get.cc:2273 +#: cmdline/apt-get.cc:2220 #, 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:2308 +#: cmdline/apt-get.cc:2255 #, c-format msgid "Failed to satisfy %s dependency for %s: Installed package %s is too new" msgstr "" -#: cmdline/apt-get.cc:2333 +#: cmdline/apt-get.cc:2280 #, c-format msgid "Failed to satisfy %s dependency for %s: %s" msgstr "" -#: cmdline/apt-get.cc:2347 +#: cmdline/apt-get.cc:2294 #, c-format msgid "Build-dependencies for %s could not be satisfied." msgstr "" -#: cmdline/apt-get.cc:2351 +#: cmdline/apt-get.cc:2298 msgid "Failed to process build dependencies" msgstr "" -#: cmdline/apt-get.cc:2383 +#: cmdline/apt-get.cc:2330 msgid "Supported modules:" msgstr "Podržani moduli:" -#: cmdline/apt-get.cc:2424 +#: cmdline/apt-get.cc:2371 msgid "" "Usage: apt-get [options] command\n" " apt-get [options] install|remove pkg1 [pkg2 ...]\n" @@ -1280,7 +1273,7 @@ msgstr "" msgid "Failed to write file %s" msgstr "Ne mogu ukloniti %s" -#: apt-inst/dirstream.cc:96 apt-inst/dirstream.cc:104 +#: apt-inst/dirstream.cc:80 apt-inst/dirstream.cc:88 #, c-format msgid "Failed to close file %s" msgstr "" @@ -1333,8 +1326,7 @@ msgid "File %s/%s overwrites the one in the package %s" msgstr "" #: apt-inst/extract.cc:467 apt-pkg/contrib/configuration.cc:750 -#: apt-pkg/contrib/cdromutl.cc:153 apt-pkg/sourcelist.cc:324 -#: apt-pkg/acquire.cc:421 apt-pkg/clean.cc:38 +#: apt-pkg/contrib/cdromutl.cc:153 apt-pkg/acquire.cc:417 apt-pkg/clean.cc:38 #, c-format msgid "Unable to read %s" msgstr "Ne mogu čitati %s" @@ -1364,9 +1356,9 @@ 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:748 +#: apt-pkg/pkgcachegen.cc:817 apt-pkg/pkgcachegen.cc:822 +#: apt-pkg/pkgcachegen.cc:945 msgid "Reading package lists" msgstr "Čitam spiskove paketa" @@ -1501,11 +1493,12 @@ msgid "File not found" msgstr "Datoteka nije pronađena" #: methods/copy.cc:42 methods/gpgv.cc:265 methods/gzip.cc:133 -#: methods/gzip.cc:142 +#: methods/gzip.cc:142 methods/rred.cc:234 methods/rred.cc:243 msgid "Failed to stat" msgstr "" #: methods/copy.cc:79 methods/gpgv.cc:262 methods/gzip.cc:139 +#: methods/rred.cc:240 msgid "Failed to set modification time" msgstr "" @@ -1632,7 +1625,7 @@ msgstr "" msgid "Unable to accept connection" msgstr "" -#: methods/ftp.cc:864 methods/http.cc:963 methods/rsh.cc:303 +#: methods/ftp.cc:864 methods/http.cc:921 methods/rsh.cc:303 msgid "Problem hashing file" msgstr "" @@ -1763,76 +1756,76 @@ msgstr "" msgid "Read error from %s process" msgstr "" -#: methods/http.cc:381 +#: methods/http.cc:345 msgid "Waiting for headers" msgstr "Čekam na zaglavlja" -#: methods/http.cc:527 +#: methods/http.cc:491 #, c-format msgid "Got a single header line over %u chars" msgstr "" -#: methods/http.cc:535 +#: methods/http.cc:499 msgid "Bad header line" msgstr "" -#: methods/http.cc:554 methods/http.cc:561 +#: methods/http.cc:518 methods/http.cc:525 msgid "The HTTP server sent an invalid reply header" msgstr "" -#: methods/http.cc:590 +#: methods/http.cc:554 msgid "The HTTP server sent an invalid Content-Length header" msgstr "" -#: methods/http.cc:605 +#: methods/http.cc:569 msgid "The HTTP server sent an invalid Content-Range header" msgstr "" -#: methods/http.cc:607 +#: methods/http.cc:571 msgid "This HTTP server has broken range support" msgstr "" -#: methods/http.cc:631 +#: methods/http.cc:595 msgid "Unknown date format" msgstr "Nepoznat oblik datuma" -#: methods/http.cc:778 +#: methods/http.cc:742 msgid "Select failed" msgstr "" -#: methods/http.cc:783 +#: methods/http.cc:747 msgid "Connection timed out" msgstr "" -#: methods/http.cc:806 +#: methods/http.cc:770 msgid "Error writing to output file" msgstr "" -#: methods/http.cc:837 +#: methods/http.cc:798 msgid "Error writing to file" msgstr "" -#: methods/http.cc:865 +#: methods/http.cc:823 msgid "Error writing to the file" msgstr "" -#: methods/http.cc:879 +#: methods/http.cc:837 msgid "Error reading from server. Remote end closed connection" msgstr "" -#: methods/http.cc:881 +#: methods/http.cc:839 msgid "Error reading from server" msgstr "" -#: methods/http.cc:1112 +#: methods/http.cc:1070 msgid "Bad header data" msgstr "" -#: methods/http.cc:1129 +#: methods/http.cc:1087 msgid "Connection failed" msgstr "Povezivanje neuspješno" -#: methods/http.cc:1220 +#: methods/http.cc:1178 msgid "Internal error" msgstr "Unutrašnja greška" @@ -1845,7 +1838,7 @@ msgstr "" msgid "Couldn't make mmap of %lu bytes" msgstr "" -#: apt-pkg/contrib/strutl.cc:938 +#: apt-pkg/contrib/strutl.cc:984 #, c-format msgid "Selection %s not found" msgstr "" @@ -1966,7 +1959,7 @@ msgstr "" msgid "Unable to stat the mount point %s" msgstr "" -#: apt-pkg/contrib/cdromutl.cc:149 apt-pkg/acquire.cc:427 apt-pkg/clean.cc:44 +#: apt-pkg/contrib/cdromutl.cc:149 apt-pkg/acquire.cc:423 apt-pkg/clean.cc:44 #, c-format msgid "Unable to change to %s" msgstr "" @@ -2042,73 +2035,73 @@ msgstr "" msgid "Problem syncing the file" msgstr "" -#: apt-pkg/pkgcache.cc:126 +#: apt-pkg/pkgcache.cc:135 msgid "Empty package cache" msgstr "" -#: apt-pkg/pkgcache.cc:132 +#: apt-pkg/pkgcache.cc:141 msgid "The package cache file is corrupted" msgstr "" -#: apt-pkg/pkgcache.cc:137 +#: apt-pkg/pkgcache.cc:146 msgid "The package cache file is an incompatible version" msgstr "" -#: apt-pkg/pkgcache.cc:142 +#: apt-pkg/pkgcache.cc:151 #, c-format msgid "This APT does not support the versioning system '%s'" msgstr "" -#: apt-pkg/pkgcache.cc:147 +#: apt-pkg/pkgcache.cc:156 msgid "The package cache was built for a different architecture" msgstr "" -#: apt-pkg/pkgcache.cc:218 +#: apt-pkg/pkgcache.cc:227 msgid "Depends" msgstr "Zavisi" -#: apt-pkg/pkgcache.cc:218 +#: apt-pkg/pkgcache.cc:227 msgid "PreDepends" msgstr "Unaprijed zavisi" -#: apt-pkg/pkgcache.cc:218 +#: apt-pkg/pkgcache.cc:227 msgid "Suggests" msgstr "Predlaže" -#: apt-pkg/pkgcache.cc:219 +#: apt-pkg/pkgcache.cc:228 msgid "Recommends" msgstr "Preporučuje" -#: apt-pkg/pkgcache.cc:219 +#: apt-pkg/pkgcache.cc:228 #, fuzzy msgid "Conflicts" msgstr "Sukobljava se sa" -#: apt-pkg/pkgcache.cc:219 +#: apt-pkg/pkgcache.cc:228 msgid "Replaces" msgstr "Zamjenjuje" -#: apt-pkg/pkgcache.cc:220 +#: apt-pkg/pkgcache.cc:229 msgid "Obsoletes" msgstr "Zastarijeva" -#: apt-pkg/pkgcache.cc:231 +#: apt-pkg/pkgcache.cc:240 msgid "important" msgstr "važno" -#: apt-pkg/pkgcache.cc:231 +#: apt-pkg/pkgcache.cc:240 msgid "required" msgstr "zahtijevano" -#: apt-pkg/pkgcache.cc:231 +#: apt-pkg/pkgcache.cc:240 msgid "standard" msgstr "standardno" -#: apt-pkg/pkgcache.cc:232 +#: apt-pkg/pkgcache.cc:241 msgid "optional" msgstr "opcionalno" -#: apt-pkg/pkgcache.cc:232 +#: apt-pkg/pkgcache.cc:241 msgid "extra" msgstr "extra" @@ -2134,52 +2127,52 @@ msgstr "" msgid "Unable to parse package file %s (2)" msgstr "" -#: apt-pkg/sourcelist.cc:94 +#: apt-pkg/sourcelist.cc:87 #, c-format msgid "Malformed line %lu in source list %s (URI)" msgstr "" -#: apt-pkg/sourcelist.cc:96 +#: apt-pkg/sourcelist.cc:89 #, c-format msgid "Malformed line %lu in source list %s (dist)" msgstr "" -#: apt-pkg/sourcelist.cc:99 +#: apt-pkg/sourcelist.cc:92 #, c-format msgid "Malformed line %lu in source list %s (URI parse)" msgstr "" -#: apt-pkg/sourcelist.cc:105 +#: apt-pkg/sourcelist.cc:98 #, c-format msgid "Malformed line %lu in source list %s (absolute dist)" msgstr "" -#: apt-pkg/sourcelist.cc:112 +#: apt-pkg/sourcelist.cc:105 #, c-format msgid "Malformed line %lu in source list %s (dist parse)" msgstr "" -#: apt-pkg/sourcelist.cc:203 +#: apt-pkg/sourcelist.cc:156 #, c-format msgid "Opening %s" msgstr "Otvaram %s" -#: apt-pkg/sourcelist.cc:220 apt-pkg/cdrom.cc:426 +#: apt-pkg/sourcelist.cc:170 apt-pkg/cdrom.cc:450 #, c-format msgid "Line %u too long in source list %s." msgstr "" -#: apt-pkg/sourcelist.cc:240 +#: apt-pkg/sourcelist.cc:187 #, c-format msgid "Malformed line %u in source list %s (type)" msgstr "" -#: apt-pkg/sourcelist.cc:244 +#: apt-pkg/sourcelist.cc:191 #, 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 +#: apt-pkg/sourcelist.cc:199 apt-pkg/sourcelist.cc:202 #, c-format msgid "Malformed line %u in source list %s (vendor id)" msgstr "" @@ -2223,7 +2216,7 @@ msgstr "" msgid "Archive directory %spartial is missing." msgstr "" -#: apt-pkg/acquire.cc:821 +#: apt-pkg/acquire.cc:817 #, c-format msgid "Downloading file %li of %li (%s remaining)" msgstr "" @@ -2243,12 +2236,12 @@ msgstr "" msgid "Please insert the disc labeled: '%s' in the drive '%s' and press enter." msgstr "" -#: apt-pkg/init.cc:120 +#: apt-pkg/init.cc:122 #, c-format msgid "Packaging system '%s' is not supported" msgstr "" -#: apt-pkg/init.cc:136 +#: apt-pkg/init.cc:138 msgid "Unable to determine a suitable packaging system type" msgstr "" @@ -2291,106 +2284,121 @@ msgstr "" msgid "Error occurred while processing %s (NewPackage)" msgstr "" -#: apt-pkg/pkgcachegen.cc:129 +#: apt-pkg/pkgcachegen.cc:132 #, c-format msgid "Error occurred while processing %s (UsePackage1)" msgstr "" -#: apt-pkg/pkgcachegen.cc:150 +#: apt-pkg/pkgcachegen.cc:155 +#, c-format +msgid "Error occured while processing %s (NewFileDesc1)" +msgstr "" + +#: apt-pkg/pkgcachegen.cc:180 #, c-format msgid "Error occurred while processing %s (UsePackage2)" msgstr "" -#: apt-pkg/pkgcachegen.cc:154 +#: apt-pkg/pkgcachegen.cc:184 #, c-format msgid "Error occurred while processing %s (NewFileVer1)" msgstr "" -#: apt-pkg/pkgcachegen.cc:184 +#: apt-pkg/pkgcachegen.cc:215 #, c-format msgid "Error occurred while processing %s (NewVersion1)" msgstr "" -#: apt-pkg/pkgcachegen.cc:188 +#: apt-pkg/pkgcachegen.cc:219 #, c-format msgid "Error occurred while processing %s (UsePackage3)" msgstr "" -#: apt-pkg/pkgcachegen.cc:192 +#: apt-pkg/pkgcachegen.cc:223 #, c-format msgid "Error occurred while processing %s (NewVersion2)" msgstr "" -#: apt-pkg/pkgcachegen.cc:207 +#: apt-pkg/pkgcachegen.cc:247 +#, c-format +msgid "Error occured while processing %s (NewFileDesc2)" +msgstr "" + +#: apt-pkg/pkgcachegen.cc:253 msgid "Wow, you exceeded the number of package names this APT is capable of." msgstr "" -#: apt-pkg/pkgcachegen.cc:210 +#: apt-pkg/pkgcachegen.cc:256 msgid "Wow, you exceeded the number of versions this APT is capable of." msgstr "" -#: apt-pkg/pkgcachegen.cc:213 +#: apt-pkg/pkgcachegen.cc:259 +msgid "Wow, you exceeded the number of descriptions this APT is capable of." +msgstr "" + +#: apt-pkg/pkgcachegen.cc:262 msgid "Wow, you exceeded the number of dependencies this APT is capable of." msgstr "" -#: apt-pkg/pkgcachegen.cc:241 +#: apt-pkg/pkgcachegen.cc:290 #, c-format msgid "Error occurred while processing %s (FindPkg)" msgstr "" -#: apt-pkg/pkgcachegen.cc:254 +#: apt-pkg/pkgcachegen.cc:303 #, c-format msgid "Error occurred while processing %s (CollectFileProvides)" msgstr "" -#: apt-pkg/pkgcachegen.cc:260 +#: apt-pkg/pkgcachegen.cc:309 #, c-format msgid "Package %s %s was not found while processing file dependencies" msgstr "" -#: apt-pkg/pkgcachegen.cc:574 +#: apt-pkg/pkgcachegen.cc:679 #, c-format msgid "Couldn't stat source package list %s" msgstr "" -#: apt-pkg/pkgcachegen.cc:658 +#: apt-pkg/pkgcachegen.cc:763 msgid "Collecting File Provides" msgstr "" -#: apt-pkg/pkgcachegen.cc:785 apt-pkg/pkgcachegen.cc:792 +#: apt-pkg/pkgcachegen.cc:890 apt-pkg/pkgcachegen.cc:897 msgid "IO Error saving source cache" msgstr "" -#: apt-pkg/acquire-item.cc:126 +#: apt-pkg/acquire-item.cc:129 #, c-format msgid "rename failed, %s (%s -> %s)." msgstr "" -#: apt-pkg/acquire-item.cc:236 apt-pkg/acquire-item.cc:911 +#: apt-pkg/acquire-item.cc:391 apt-pkg/acquire-item.cc:635 +#: apt-pkg/acquire-item.cc:1336 msgid "MD5Sum mismatch" msgstr "" -#: apt-pkg/acquire-item.cc:719 +#: apt-pkg/acquire-item.cc:1150 #, 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:778 +#: apt-pkg/acquire-item.cc:1203 #, 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:814 +#: apt-pkg/acquire-item.cc:1239 #, c-format msgid "" "The package index files are corrupted. No Filename: field for package %s." msgstr "" -#: apt-pkg/acquire-item.cc:901 +#: apt-pkg/acquire-item.cc:1326 msgid "Size mismatch" msgstr "" @@ -2399,94 +2407,96 @@ 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 #, fuzzy msgid "Waiting for disc...\n" msgstr "Čekam na zaglavlja" #. 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 msgid "That is not a valid name, try again.\n" msgstr "" -#: apt-pkg/cdrom.cc:726 +#: apt-pkg/cdrom.cc:753 #, c-format msgid "" "This disc is called: \n" "'%s'\n" msgstr "" -#: apt-pkg/cdrom.cc:730 +#: apt-pkg/cdrom.cc:757 #, fuzzy msgid "Copying package lists..." msgstr "Čitam spiskove paketa" -#: apt-pkg/cdrom.cc:754 +#: apt-pkg/cdrom.cc:783 msgid "Writing new source list\n" msgstr "" -#: apt-pkg/cdrom.cc:763 +#: apt-pkg/cdrom.cc:792 msgid "Source list entries for this disc are:\n" msgstr "" -#: apt-pkg/cdrom.cc:803 +#: apt-pkg/cdrom.cc:832 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 "" @@ -2541,6 +2551,10 @@ msgstr "" msgid "Removed with config %s" msgstr "" +#: methods/rred.cc:219 +msgid "Could not patch file" +msgstr "" + #: methods/rsh.cc:330 msgid "Connection closed prematurely" msgstr "" @@ -8,7 +8,7 @@ msgid "" msgstr "" "Project-Id-Version: apt 0.6\n" "Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2006-01-04 18:51+0100\n" +"POT-Creation-Date: 2005-10-17 19:31+0200\n" "PO-Revision-Date: 2005-07-19 01:31+0200\n" "Last-Translator: Jordi Mallach <jordi@debian.org>\n" "Language-Team: Catalan <debian-l10n-catalan@lists.debian.org>\n" @@ -16,146 +16,156 @@ msgstr "" "Content-Type: text/plain; charset=UTF-8\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 "El paquet %s versió %s té una dependència sense satisfer:\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 +#: 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:1419 cmdline/apt-cache.cc:1570 #, c-format msgid "Unable to locate package %s" msgstr "No s'ha trobat el paquet %s" -#: cmdline/apt-cache.cc:232 +#: cmdline/apt-cache.cc:245 msgid "Total package names : " msgstr "Nombre total de paquets: " -#: cmdline/apt-cache.cc:272 +#: cmdline/apt-cache.cc:285 msgid " Normal packages: " msgstr " Paquets normals: " -#: cmdline/apt-cache.cc:273 +#: cmdline/apt-cache.cc:286 msgid " Pure virtual packages: " msgstr " Paquets virtuals purs: " -#: cmdline/apt-cache.cc:274 +#: cmdline/apt-cache.cc:287 msgid " Single virtual packages: " msgstr " Paquets virtuals únics: " -#: cmdline/apt-cache.cc:275 +#: cmdline/apt-cache.cc:288 msgid " Mixed virtual packages: " msgstr " Paquets virtuals mixtes: " -#: cmdline/apt-cache.cc:276 +#: cmdline/apt-cache.cc:289 msgid " Missing: " msgstr " Falten: " -#: cmdline/apt-cache.cc:278 +#: cmdline/apt-cache.cc:291 msgid "Total distinct versions: " msgstr "Total de versions diferents: " -#: cmdline/apt-cache.cc:280 +#: cmdline/apt-cache.cc:293 +#, fuzzy +msgid "Total Distinct Descriptions: " +msgstr "Total de versions diferents: " + +#: cmdline/apt-cache.cc:295 msgid "Total dependencies: " msgstr "Total de dependències: " -#: cmdline/apt-cache.cc:283 +#: cmdline/apt-cache.cc:298 msgid "Total ver/file relations: " msgstr "Total de relacions versió/fitxer: " -#: cmdline/apt-cache.cc:285 +#: cmdline/apt-cache.cc:300 +#, fuzzy +msgid "Total Desc/File relations: " +msgstr "Total de relacions versió/fitxer: " + +#: cmdline/apt-cache.cc:302 msgid "Total Provides mappings: " msgstr "Total dels mapes aportats: " -#: cmdline/apt-cache.cc:297 +#: cmdline/apt-cache.cc:314 msgid "Total globbed strings: " msgstr "Total de cadenes globals: " -#: cmdline/apt-cache.cc:311 +#: cmdline/apt-cache.cc:328 msgid "Total dependency version space: " msgstr "Total de l'espai per a dependències de versió: " -#: cmdline/apt-cache.cc:316 +#: cmdline/apt-cache.cc:333 msgid "Total slack space: " msgstr "Total de l'espai desperdiciat: " -#: cmdline/apt-cache.cc:324 +#: cmdline/apt-cache.cc:341 msgid "Total space accounted for: " msgstr "Total de l'espai atribuit a: " -#: 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 "El fitxer %s del paquet està desincronitzat." -#: cmdline/apt-cache.cc:1231 +#: cmdline/apt-cache.cc:1293 msgid "You must give exactly one pattern" msgstr "Heu de donar exactament un patró" -#: cmdline/apt-cache.cc:1385 +#: cmdline/apt-cache.cc:1447 msgid "No packages found" msgstr "No s'han trobat paquets" -#: cmdline/apt-cache.cc:1462 +#: cmdline/apt-cache.cc:1524 msgid "Package files:" msgstr "Fitxers de paquets:" -#: cmdline/apt-cache.cc:1469 cmdline/apt-cache.cc:1555 +#: cmdline/apt-cache.cc:1531 cmdline/apt-cache.cc:1617 msgid "Cache is out of sync, can't x-ref a package file" msgstr "" "Memòria cau no sincronitzada, no es pot fer x-ref a un fitxer del paquet" -#: cmdline/apt-cache.cc:1470 +#: cmdline/apt-cache.cc:1532 #, c-format msgid "%4i %s\n" msgstr "%4i %s\n" #. Show any packages have explicit pins -#: cmdline/apt-cache.cc:1482 +#: cmdline/apt-cache.cc:1544 msgid "Pinned packages:" msgstr "Paquets etiquetats:" -#: cmdline/apt-cache.cc:1494 cmdline/apt-cache.cc:1535 +#: cmdline/apt-cache.cc:1556 cmdline/apt-cache.cc:1597 msgid "(not found)" msgstr "(no trobat)" #. Installed version -#: cmdline/apt-cache.cc:1515 +#: cmdline/apt-cache.cc:1577 msgid " Installed: " msgstr " Instal·lat: " -#: cmdline/apt-cache.cc:1517 cmdline/apt-cache.cc:1525 +#: cmdline/apt-cache.cc:1579 cmdline/apt-cache.cc:1587 msgid "(none)" msgstr "(cap)" #. Candidate Version -#: cmdline/apt-cache.cc:1522 +#: cmdline/apt-cache.cc:1584 msgid " Candidate: " msgstr " Candidat: " -#: cmdline/apt-cache.cc:1532 +#: cmdline/apt-cache.cc:1594 msgid " Package pin: " msgstr " Etiqueta del paquet: " #. Show the priority tables -#: cmdline/apt-cache.cc:1541 +#: cmdline/apt-cache.cc:1603 msgid " Version table:" msgstr " Taula de versió:" -#: cmdline/apt-cache.cc:1556 +#: cmdline/apt-cache.cc:1618 #, c-format msgid " %4i %s\n" msgstr " %4i %s\n" -#: cmdline/apt-cache.cc:1651 cmdline/apt-cdrom.cc:138 cmdline/apt-config.cc:70 +#: cmdline/apt-cache.cc:1713 cmdline/apt-cdrom.cc:138 cmdline/apt-config.cc:70 #: cmdline/apt-extracttemplates.cc:225 ftparchive/apt-ftparchive.cc:550 -#: cmdline/apt-get.cc:2378 cmdline/apt-sortpkgs.cc:144 +#: cmdline/apt-get.cc:2325 cmdline/apt-sortpkgs.cc:144 #, c-format msgid "%s %s for %s %s compiled on %s %s\n" msgstr "%s %s per a %s %s compilat el %s %s\n" -#: cmdline/apt-cache.cc:1658 +#: cmdline/apt-cache.cc:1720 msgid "" "Usage: apt-cache [options] command\n" " apt-cache [options] add file1 [file2 ...]\n" @@ -230,22 +240,6 @@ msgstr "" "Consulteu les pàgines del manual apt-cache(8) i apt.conf(5) per a més " "informació.\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 -#, fuzzy -msgid "Please insert a Disc in the drive and press enter" -msgstr "" -"El medi ha canviat: Si us plau, inseriu el disc amb l'etiqueta\n" -" '%s'\n" -"en la unitat de '%s' i premeu Intro\n" - -#: 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 "Els arguments no són en parells" @@ -307,7 +301,7 @@ msgstr "" " -c=? Llegeix aquest fitxer de configuració\n" " -o=? Estableix una opció de conf arbitrària, p.e. -o dir::cache=/tmp\n" -#: cmdline/apt-extracttemplates.cc:267 apt-pkg/pkgcachegen.cc:710 +#: cmdline/apt-extracttemplates.cc:267 apt-pkg/pkgcachegen.cc:815 #, c-format msgid "Unable to write to %s" msgstr "No es pot escriure en %s" @@ -529,12 +523,12 @@ msgstr "No es pot determinar l'estat de %s" msgid "Archive had no package field" msgstr "Arxiu sense el camp paquet" -#: ftparchive/writer.cc:394 ftparchive/writer.cc:603 +#: ftparchive/writer.cc:394 ftparchive/writer.cc:602 #, c-format msgid " %s has no override entry\n" msgstr " %s no té una entrada dominant\n" -#: ftparchive/writer.cc:437 ftparchive/writer.cc:689 +#: ftparchive/writer.cc:437 ftparchive/writer.cc:688 #, c-format msgid " %s maintainer is %s not %s\n" msgstr " el mantenidor de %s és %s, no %s\n" @@ -634,79 +628,79 @@ msgstr "S'ha trobat un problema treient l'enllaç %s" msgid "Failed to rename %s to %s" msgstr "No s'ha pogut canviar el nom de %s a %s" -#: cmdline/apt-get.cc:120 +#: cmdline/apt-get.cc:118 msgid "Y" msgstr "S" -#: cmdline/apt-get.cc:142 cmdline/apt-get.cc:1515 +#: cmdline/apt-get.cc:140 cmdline/apt-get.cc:1486 #, c-format msgid "Regex compilation error - %s" msgstr "S'ha produït un error de compilació de l'expressió regular - %s" -#: cmdline/apt-get.cc:237 +#: cmdline/apt-get.cc:235 msgid "The following packages have unmet dependencies:" msgstr "Els següents paquets tenen dependències sense satisfer:" -#: cmdline/apt-get.cc:327 +#: cmdline/apt-get.cc:325 #, c-format msgid "but %s is installed" msgstr "però està instal·lat %s" -#: cmdline/apt-get.cc:329 +#: cmdline/apt-get.cc:327 #, c-format msgid "but %s is to be installed" msgstr "però s'instal·larà %s" -#: cmdline/apt-get.cc:336 +#: cmdline/apt-get.cc:334 msgid "but it is not installable" msgstr "però no és instal·lable" -#: cmdline/apt-get.cc:338 +#: cmdline/apt-get.cc:336 msgid "but it is a virtual package" msgstr "però és un paquet virtual" -#: cmdline/apt-get.cc:341 +#: cmdline/apt-get.cc:339 msgid "but it is not installed" msgstr "però no està instal·lat" -#: cmdline/apt-get.cc:341 +#: cmdline/apt-get.cc:339 msgid "but it is not going to be installed" msgstr "però no serà instal·lat" -#: cmdline/apt-get.cc:346 +#: cmdline/apt-get.cc:344 msgid " or" msgstr " o" -#: cmdline/apt-get.cc:375 +#: cmdline/apt-get.cc:373 msgid "The following NEW packages will be installed:" msgstr "S'instal·laran els següents paquets NOUS:" -#: cmdline/apt-get.cc:401 +#: cmdline/apt-get.cc:399 msgid "The following packages will be REMOVED:" msgstr "S'ELIMINARAN els següents paquets:" -#: cmdline/apt-get.cc:423 +#: cmdline/apt-get.cc:421 msgid "The following packages have been kept back:" msgstr "S'han mantingut els següents paquets:" -#: cmdline/apt-get.cc:444 +#: cmdline/apt-get.cc:442 msgid "The following packages will be upgraded:" msgstr "S'actualitzaran els següents paquets:" -#: cmdline/apt-get.cc:465 +#: cmdline/apt-get.cc:463 msgid "The following packages will be DOWNGRADED:" msgstr "Es DESACTUALITZARAN els següents paquets:" -#: cmdline/apt-get.cc:485 +#: cmdline/apt-get.cc:483 msgid "The following held packages will be changed:" msgstr "Es canviaran els següents paquets mantinguts:" -#: cmdline/apt-get.cc:538 +#: cmdline/apt-get.cc:536 #, c-format msgid "%s (due to %s) " msgstr "%s (per %s) " -#: cmdline/apt-get.cc:546 +#: cmdline/apt-get.cc:544 msgid "" "WARNING: The following essential packages will be removed.\n" "This should NOT be done unless you know exactly what you are doing!" @@ -714,146 +708,146 @@ msgstr "" "AVÍS: Els següents paquets essencials seran eliminats.\n" "Això NO s'ha de fer a menys que sapigueu exactament el que esteu fent!" -#: cmdline/apt-get.cc:577 +#: cmdline/apt-get.cc:575 #, c-format msgid "%lu upgraded, %lu newly installed, " msgstr "%lu actualitzats, %lu nous a instal·lar, " -#: cmdline/apt-get.cc:581 +#: cmdline/apt-get.cc:579 #, c-format msgid "%lu reinstalled, " msgstr "%lu reinstal·lats, " -#: cmdline/apt-get.cc:583 +#: cmdline/apt-get.cc:581 #, c-format msgid "%lu downgraded, " msgstr "%lu desactualitzats, " -#: cmdline/apt-get.cc:585 +#: cmdline/apt-get.cc:583 #, c-format msgid "%lu to remove and %lu not upgraded.\n" msgstr "%lu a eliminar i %lu no actualitzats.\n" -#: cmdline/apt-get.cc:589 +#: cmdline/apt-get.cc:587 #, c-format msgid "%lu not fully installed or removed.\n" msgstr "%lu no instal·lats o eliminats completament.\n" -#: cmdline/apt-get.cc:649 +#: cmdline/apt-get.cc:647 msgid "Correcting dependencies..." msgstr "S'estan corregint les dependències..." -#: cmdline/apt-get.cc:652 +#: cmdline/apt-get.cc:650 msgid " failed." msgstr " ha fallat." -#: cmdline/apt-get.cc:655 +#: cmdline/apt-get.cc:653 msgid "Unable to correct dependencies" msgstr "No es poden corregir les dependències" -#: cmdline/apt-get.cc:658 +#: cmdline/apt-get.cc:656 msgid "Unable to minimize the upgrade set" msgstr "No es pot minimitzar el joc de versions revisades" -#: cmdline/apt-get.cc:660 +#: cmdline/apt-get.cc:658 msgid " Done" msgstr " Fet" -#: cmdline/apt-get.cc:664 +#: cmdline/apt-get.cc:662 msgid "You might want to run `apt-get -f install' to correct these." msgstr "Potser voldreu executar `apt-get -f install' per a corregir-ho." -#: cmdline/apt-get.cc:667 +#: cmdline/apt-get.cc:665 msgid "Unmet dependencies. Try using -f." msgstr "Dependències sense satisfer. Proveu-ho usant -f." -#: cmdline/apt-get.cc:689 +#: cmdline/apt-get.cc:687 msgid "WARNING: The following packages cannot be authenticated!" msgstr "AVÍS: No es poden autenticar els següents paquets!" -#: cmdline/apt-get.cc:693 +#: cmdline/apt-get.cc:691 msgid "Authentication warning overridden.\n" msgstr "S'ha descartat l'avís d'autenticació.\n" -#: cmdline/apt-get.cc:700 +#: cmdline/apt-get.cc:698 msgid "Install these packages without verification [y/N]? " msgstr "Voleu instal·lar aquests paquets sense verificar-los [s/N]? " -#: cmdline/apt-get.cc:702 +#: cmdline/apt-get.cc:700 msgid "Some packages could not be authenticated" msgstr "No s'ha pogut autenticar alguns paquets" -#: cmdline/apt-get.cc:711 cmdline/apt-get.cc:858 +#: cmdline/apt-get.cc:709 cmdline/apt-get.cc:856 msgid "There are problems and -y was used without --force-yes" msgstr "Hi ha problemes i s'ha usat -y sense --force-yes" -#: cmdline/apt-get.cc:755 +#: cmdline/apt-get.cc:753 msgid "Internal error, InstallPackages was called with broken packages!" msgstr "" "S'ha produït un error intern, s'ha cridat a InstallPackages amb paquets " "trencats!" -#: cmdline/apt-get.cc:764 +#: cmdline/apt-get.cc:762 msgid "Packages need to be removed but remove is disabled." msgstr "Els paquets necessiten ser eliminats però Remove està inhabilitat." -#: cmdline/apt-get.cc:775 +#: cmdline/apt-get.cc:773 msgid "Internal error, Ordering didn't finish" msgstr "S'ha produït un error intern, l'ordenació no ha acabat" -#: cmdline/apt-get.cc:791 cmdline/apt-get.cc:1809 cmdline/apt-get.cc:1842 +#: cmdline/apt-get.cc:789 cmdline/apt-get.cc:1780 cmdline/apt-get.cc:1813 msgid "Unable to lock the download directory" msgstr "No és possible blocar el directori de descàrrega" -#: cmdline/apt-get.cc:801 cmdline/apt-get.cc:1890 cmdline/apt-get.cc:2126 +#: cmdline/apt-get.cc:799 cmdline/apt-get.cc:1861 cmdline/apt-get.cc:2073 #: apt-pkg/cachefile.cc:67 msgid "The list of sources could not be read." msgstr "No s'ha pogut llegir la llista de les fonts." -#: cmdline/apt-get.cc:816 +#: cmdline/apt-get.cc:814 msgid "How odd.. The sizes didn't match, email apt@packages.debian.org" msgstr "" "Què estrany... les mides no coincideixen, informeu a apt@packages.debian.org" -#: cmdline/apt-get.cc:821 +#: cmdline/apt-get.cc:819 #, c-format msgid "Need to get %sB/%sB of archives.\n" msgstr "Es necessita obtenir %sB/%sB d'arxius.\n" -#: cmdline/apt-get.cc:824 +#: cmdline/apt-get.cc:822 #, c-format msgid "Need to get %sB of archives.\n" msgstr "Es necessita obtenir %sB d'arxius.\n" -#: cmdline/apt-get.cc:829 +#: cmdline/apt-get.cc:827 #, c-format msgid "After unpacking %sB of additional disk space will be used.\n" msgstr "Després de desempaquetar s'usaran %sB d'espai en disc addicional.\n" -#: cmdline/apt-get.cc:832 +#: cmdline/apt-get.cc:830 #, c-format msgid "After unpacking %sB disk space will be freed.\n" msgstr "Després de desempaquetar s'alliberaran %sB d'espai en disc.\n" -#: cmdline/apt-get.cc:846 cmdline/apt-get.cc:1980 +#: cmdline/apt-get.cc:844 cmdline/apt-get.cc:1927 #, c-format msgid "Couldn't determine free space in %s" msgstr "No s'ha pogut determinar l'espai lliure en %s" -#: cmdline/apt-get.cc:849 +#: cmdline/apt-get.cc:847 #, c-format msgid "You don't have enough free space in %s." msgstr "No teniu prou espai lliure en %s." -#: cmdline/apt-get.cc:864 cmdline/apt-get.cc:884 +#: cmdline/apt-get.cc:862 cmdline/apt-get.cc:882 msgid "Trivial Only specified but this is not a trivial operation." msgstr "Es va especificar Trivial Only però aquesta operació no és trivial." -#: cmdline/apt-get.cc:866 +#: cmdline/apt-get.cc:864 msgid "Yes, do as I say!" msgstr "Sí, fes el que et dic!" -#: cmdline/apt-get.cc:868 +#: cmdline/apt-get.cc:866 #, c-format msgid "" "You are about to do something potentially harmful.\n" @@ -864,28 +858,28 @@ msgstr "" "Per a continuar escriviu la frase «%s»\n" " ?] " -#: cmdline/apt-get.cc:874 cmdline/apt-get.cc:893 +#: cmdline/apt-get.cc:872 cmdline/apt-get.cc:891 msgid "Abort." msgstr "Avortat." -#: cmdline/apt-get.cc:889 +#: cmdline/apt-get.cc:887 msgid "Do you want to continue [Y/n]? " msgstr "Voleu continuar [S/n]? " -#: cmdline/apt-get.cc:961 cmdline/apt-get.cc:1365 cmdline/apt-get.cc:2023 +#: cmdline/apt-get.cc:959 cmdline/apt-get.cc:1336 cmdline/apt-get.cc:1970 #, c-format msgid "Failed to fetch %s %s\n" msgstr "No s'ha pogut obtenir %s %s\n" -#: cmdline/apt-get.cc:979 +#: cmdline/apt-get.cc:977 msgid "Some files failed to download" msgstr "Alguns fitxers no s'han pogut descarregar" -#: cmdline/apt-get.cc:980 cmdline/apt-get.cc:2032 +#: cmdline/apt-get.cc:978 cmdline/apt-get.cc:1979 msgid "Download complete and in download only mode" msgstr "Descàrrega completa i en mode de només descàrrega" -#: cmdline/apt-get.cc:986 +#: cmdline/apt-get.cc:984 msgid "" "Unable to fetch some archives, maybe run apt-get update or try with --fix-" "missing?" @@ -893,48 +887,48 @@ msgstr "" "No es poden descarregar alguns arxius, potser executant apt-get update o " "intenteu-ho amb --fix-missing." -#: cmdline/apt-get.cc:990 +#: cmdline/apt-get.cc:988 msgid "--fix-missing and media swapping is not currently supported" msgstr "--fix-missing i medi d'intercanvi actualment no estan suportats" -#: cmdline/apt-get.cc:995 +#: cmdline/apt-get.cc:993 msgid "Unable to correct missing packages." msgstr "No es poden corregir els paquets que falten." -#: cmdline/apt-get.cc:996 +#: cmdline/apt-get.cc:994 msgid "Aborting install." msgstr "S'està avortant la instal·lació." -#: cmdline/apt-get.cc:1030 +#: cmdline/apt-get.cc:1028 #, c-format msgid "Note, selecting %s instead of %s\n" msgstr "Nota: s'està seleccionant %s en comptes de %s\n" -#: cmdline/apt-get.cc:1040 +#: cmdline/apt-get.cc:1038 #, c-format msgid "Skipping %s, it is already installed and upgrade is not set.\n" msgstr "" "S'està ometent %s, ja està instal·lat i l'actualització no està establerta.\n" -#: cmdline/apt-get.cc:1058 +#: cmdline/apt-get.cc:1056 #, c-format msgid "Package %s is not installed, so not removed\n" msgstr "El paquet %s no està instal·lat, així que no s'eliminarà\n" -#: cmdline/apt-get.cc:1069 +#: cmdline/apt-get.cc:1067 #, c-format msgid "Package %s is a virtual package provided by:\n" msgstr "El paquet %s és un paquet virtual proveït per:\n" -#: cmdline/apt-get.cc:1081 +#: cmdline/apt-get.cc:1079 msgid " [Installed]" msgstr " [Instal·lat]" -#: cmdline/apt-get.cc:1086 +#: cmdline/apt-get.cc:1084 msgid "You should explicitly select one to install." msgstr "Necessiteu seleccionar-ne un explícitament per a instal·lar-lo." -#: cmdline/apt-get.cc:1091 +#: cmdline/apt-get.cc:1089 #, c-format msgid "" "Package %s is not available, but is referred to by another package.\n" @@ -945,50 +939,50 @@ msgstr "" "en fa referència. Això normalment vol dir que el paquet falta,\n" "s'ha tornat obsolet o només és disponible des d'una altra font.\n" -#: cmdline/apt-get.cc:1110 +#: cmdline/apt-get.cc:1108 msgid "However the following packages replace it:" msgstr "Tot i que els següents paquets el reemplacen:" -#: cmdline/apt-get.cc:1113 +#: cmdline/apt-get.cc:1111 #, c-format msgid "Package %s has no installation candidate" msgstr "El paquet %s no té candidat d'instal·lació" -#: cmdline/apt-get.cc:1133 +#: cmdline/apt-get.cc:1131 #, c-format msgid "Reinstallation of %s is not possible, it cannot be downloaded.\n" msgstr "" "No es possible la reinstal·lació del paquet %s, no es pot descarregar.\n" -#: cmdline/apt-get.cc:1141 +#: cmdline/apt-get.cc:1139 #, c-format msgid "%s is already the newest version.\n" msgstr "%s ja es troba en la versió més recent.\n" -#: cmdline/apt-get.cc:1168 +#: cmdline/apt-get.cc:1166 #, c-format msgid "Release '%s' for '%s' was not found" msgstr "No s'ha trobat la versió puntual «%s» per a «%s»" -#: cmdline/apt-get.cc:1170 +#: cmdline/apt-get.cc:1168 #, c-format msgid "Version '%s' for '%s' was not found" msgstr "No s'ha trobat la versió «%s» per a «%s»" -#: cmdline/apt-get.cc:1176 +#: cmdline/apt-get.cc:1174 #, c-format msgid "Selected version %s (%s) for %s\n" msgstr "Versió seleccionada %s (%s) per a %s\n" -#: cmdline/apt-get.cc:1313 +#: cmdline/apt-get.cc:1284 msgid "The update command takes no arguments" msgstr "L'ordre update no pren arguments" -#: cmdline/apt-get.cc:1326 cmdline/apt-get.cc:1420 +#: cmdline/apt-get.cc:1297 cmdline/apt-get.cc:1391 msgid "Unable to lock the list directory" msgstr "No es pot blocar el directori de la llista" -#: cmdline/apt-get.cc:1384 +#: cmdline/apt-get.cc:1355 msgid "" "Some index files failed to download, they have been ignored, or old ones " "used instead." @@ -996,25 +990,25 @@ msgstr "" "No es poden descarregar alguns fitxers índex, s'han ignorat o en el seu lloc " "s'han usat els antics." -#: cmdline/apt-get.cc:1403 +#: cmdline/apt-get.cc:1374 msgid "Internal error, AllUpgrade broke stuff" msgstr "Error intern, AllUpgrade ha trencat coses" -#: cmdline/apt-get.cc:1502 cmdline/apt-get.cc:1538 +#: cmdline/apt-get.cc:1473 cmdline/apt-get.cc:1509 #, c-format msgid "Couldn't find package %s" msgstr "No s'ha pogut trobar el paquet %s" -#: cmdline/apt-get.cc:1525 +#: cmdline/apt-get.cc:1496 #, c-format msgid "Note, selecting %s for regex '%s'\n" msgstr "Nota: s'està seleccionant %s per a l'expressió regular '%s'\n" -#: cmdline/apt-get.cc:1555 +#: cmdline/apt-get.cc:1526 msgid "You might want to run `apt-get -f install' to correct these:" msgstr "Potser voldreu executar `apt-get -f install' per a corregir-ho:" -#: cmdline/apt-get.cc:1558 +#: cmdline/apt-get.cc:1529 msgid "" "Unmet dependencies. Try 'apt-get -f install' with no packages (or specify a " "solution)." @@ -1022,7 +1016,7 @@ msgstr "" "Dependències insatisfetes. Intenteu 'apt-get -f install' sense paquets (o " "especifiqueu una solució)." -#: cmdline/apt-get.cc:1570 +#: cmdline/apt-get.cc:1541 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" @@ -1034,7 +1028,7 @@ msgstr "" "unstable i alguns paquets requerits encara no han estat creats o bé\n" "encara no els hi han afegit." -#: cmdline/apt-get.cc:1578 +#: cmdline/apt-get.cc:1549 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" @@ -1044,125 +1038,119 @@ msgstr "" "probable que el paquet no sigui instal·lable i que s'hagi d'emetre\n" "un informe d'error en contra d'aquest per a arxivar-lo." -#: cmdline/apt-get.cc:1583 +#: cmdline/apt-get.cc:1554 msgid "The following information may help to resolve the situation:" msgstr "La següent informació pot ajudar-vos a resoldre la situació:" -#: cmdline/apt-get.cc:1586 +#: cmdline/apt-get.cc:1557 msgid "Broken packages" msgstr "Paquets trencats" -#: cmdline/apt-get.cc:1612 +#: cmdline/apt-get.cc:1583 msgid "The following extra packages will be installed:" msgstr "S'instal·laran els següents paquets extres:" -#: cmdline/apt-get.cc:1683 +#: cmdline/apt-get.cc:1654 msgid "Suggested packages:" msgstr "Paquets suggerits:" -#: cmdline/apt-get.cc:1684 +#: cmdline/apt-get.cc:1655 msgid "Recommended packages:" msgstr "Paquets recomanats:" -#: cmdline/apt-get.cc:1704 +#: cmdline/apt-get.cc:1675 msgid "Calculating upgrade... " msgstr "S'està calculant l'actualització... " -#: cmdline/apt-get.cc:1707 methods/ftp.cc:702 methods/connect.cc:101 +#: cmdline/apt-get.cc:1678 methods/ftp.cc:702 methods/connect.cc:101 msgid "Failed" msgstr "Ha fallat" -#: cmdline/apt-get.cc:1712 +#: cmdline/apt-get.cc:1683 msgid "Done" msgstr "Fet" -#: cmdline/apt-get.cc:1777 cmdline/apt-get.cc:1785 +#: cmdline/apt-get.cc:1748 cmdline/apt-get.cc:1756 msgid "Internal error, problem resolver broke stuff" msgstr "" "S'ha produït un error intern, el solucionador de problemes ha trencat coses" -#: cmdline/apt-get.cc:1885 +#: cmdline/apt-get.cc:1856 msgid "Must specify at least one package to fetch source for" msgstr "Haureu d'especificar un paquet de codi font per a descarregar" -#: cmdline/apt-get.cc:1915 cmdline/apt-get.cc:2144 +#: cmdline/apt-get.cc:1883 cmdline/apt-get.cc:2091 #, c-format msgid "Unable to find a source package for %s" msgstr "No es pot trobar un paquet de fonts per a %s" -#: cmdline/apt-get.cc:1959 -#, fuzzy, c-format -msgid "Skiping already downloaded file '%s'\n" -msgstr "" -"S'està ometent el desempaquetament de les fonts que ja ho estan en %s\n" - -#: cmdline/apt-get.cc:1983 +#: cmdline/apt-get.cc:1930 #, c-format msgid "You don't have enough free space in %s" msgstr "No teniu prou espai lliure en %s" -#: cmdline/apt-get.cc:1988 +#: cmdline/apt-get.cc:1935 #, c-format msgid "Need to get %sB/%sB of source archives.\n" msgstr "Es necessita descarregar %sB/%sB d'arxius font.\n" -#: cmdline/apt-get.cc:1991 +#: cmdline/apt-get.cc:1938 #, c-format msgid "Need to get %sB of source archives.\n" msgstr "Es necessita descarregar %sB d'arxius font.\n" -#: cmdline/apt-get.cc:1997 +#: cmdline/apt-get.cc:1944 #, c-format msgid "Fetch source %s\n" msgstr "Font descarregada %s\n" -#: cmdline/apt-get.cc:2028 +#: cmdline/apt-get.cc:1975 msgid "Failed to fetch some archives." msgstr "No s'ha pogut descarregar alguns arxius." -#: cmdline/apt-get.cc:2056 +#: cmdline/apt-get.cc:2003 #, c-format msgid "Skipping unpack of already unpacked source in %s\n" msgstr "" "S'està ometent el desempaquetament de les fonts que ja ho estan en %s\n" -#: cmdline/apt-get.cc:2068 +#: cmdline/apt-get.cc:2015 #, c-format msgid "Unpack command '%s' failed.\n" msgstr "L'ordre de desempaquetar «%s» ha fallat.\n" -#: cmdline/apt-get.cc:2069 +#: cmdline/apt-get.cc:2016 #, c-format msgid "Check if the 'dpkg-dev' package is installed.\n" msgstr "" -#: cmdline/apt-get.cc:2086 +#: cmdline/apt-get.cc:2033 #, c-format msgid "Build command '%s' failed.\n" msgstr "L'ordre de construir «%s» ha fallat.\n" -#: cmdline/apt-get.cc:2105 +#: cmdline/apt-get.cc:2052 msgid "Child process failed" msgstr "Ha fallat el procés fill" -#: cmdline/apt-get.cc:2121 +#: cmdline/apt-get.cc:2068 msgid "Must specify at least one package to check builddeps for" msgstr "" "S'ha d'especificar un paquet per a verificar les dependències de construcció " "per a" -#: cmdline/apt-get.cc:2149 +#: cmdline/apt-get.cc:2096 #, c-format msgid "Unable to get build-dependency information for %s" msgstr "" "No es pot obtenir informació sobre les dependències de construcció per a %s" -#: cmdline/apt-get.cc:2169 +#: cmdline/apt-get.cc:2116 #, c-format msgid "%s has no build depends.\n" msgstr "%s no té dependències de construcció.\n" -#: cmdline/apt-get.cc:2221 +#: cmdline/apt-get.cc:2168 #, c-format msgid "" "%s dependency for %s cannot be satisfied because the package %s cannot be " @@ -1171,7 +1159,7 @@ msgstr "" "La dependència %s en %s no es pot satisfer per que no es pot trobar el " "paquet %s" -#: cmdline/apt-get.cc:2273 +#: cmdline/apt-get.cc:2220 #, c-format msgid "" "%s dependency for %s cannot be satisfied because no available versions of " @@ -1180,32 +1168,32 @@ msgstr "" "La dependència %s per a %s no es pot satisfer per que cap versió del paquet %" "s pot satisfer els requeriments de versions" -#: cmdline/apt-get.cc:2308 +#: cmdline/apt-get.cc:2255 #, c-format msgid "Failed to satisfy %s dependency for %s: Installed package %s is too new" msgstr "" "No s'ha pogut satisfer la dependència %s per a %s: El paquet instal·lat %s " "és massa nou" -#: cmdline/apt-get.cc:2333 +#: cmdline/apt-get.cc:2280 #, c-format msgid "Failed to satisfy %s dependency for %s: %s" msgstr "No s'ha pogut satisfer la dependència %s per a %s: %s" -#: cmdline/apt-get.cc:2347 +#: cmdline/apt-get.cc:2294 #, c-format msgid "Build-dependencies for %s could not be satisfied." msgstr "No s'han pogut satisfer les dependències de construcció per a %s" -#: cmdline/apt-get.cc:2351 +#: cmdline/apt-get.cc:2298 msgid "Failed to process build dependencies" msgstr "No es poden processar les dependències de construcció" -#: cmdline/apt-get.cc:2383 +#: cmdline/apt-get.cc:2330 msgid "Supported modules:" msgstr "Mòduls suportats:" -#: cmdline/apt-get.cc:2424 +#: cmdline/apt-get.cc:2371 msgid "" "Usage: apt-get [options] command\n" " apt-get [options] install|remove pkg1 [pkg2 ...]\n" @@ -1463,7 +1451,7 @@ msgstr "Fitxer de conf. duplicat %s/%s" msgid "Failed to write file %s" msgstr "No s'ha pogut escriure el fitxer %s" -#: apt-inst/dirstream.cc:96 apt-inst/dirstream.cc:104 +#: apt-inst/dirstream.cc:80 apt-inst/dirstream.cc:88 #, c-format msgid "Failed to close file %s" msgstr "Ha fallat el tancament del fitxer %s" @@ -1516,8 +1504,7 @@ msgid "File %s/%s overwrites the one in the package %s" msgstr "El fitxer %s/%s sobreescriu al que està en el paquet %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 +#: apt-pkg/contrib/cdromutl.cc:153 apt-pkg/acquire.cc:417 apt-pkg/clean.cc:38 #, c-format msgid "Unable to read %s" msgstr "No es pot llegir %s" @@ -1549,9 +1536,9 @@ msgstr "" "fitxers" #. 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:748 +#: apt-pkg/pkgcachegen.cc:817 apt-pkg/pkgcachegen.cc:822 +#: apt-pkg/pkgcachegen.cc:945 msgid "Reading package lists" msgstr "S'està llegint la llista de paquets" @@ -1690,11 +1677,12 @@ msgid "File not found" msgstr "Fitxer no trobat" #: methods/copy.cc:42 methods/gpgv.cc:265 methods/gzip.cc:133 -#: methods/gzip.cc:142 +#: methods/gzip.cc:142 methods/rred.cc:234 methods/rred.cc:243 msgid "Failed to stat" msgstr "L'estat ha fallat" #: methods/copy.cc:79 methods/gpgv.cc:262 methods/gzip.cc:139 +#: methods/rred.cc:240 msgid "Failed to set modification time" msgstr "No s'ha pogut establir el temps de modificació" @@ -1823,7 +1811,7 @@ msgstr "S'ha esgotat el temps de connexió al sòcol de dades" msgid "Unable to accept connection" msgstr "No es pot acceptar la connexió" -#: methods/ftp.cc:864 methods/http.cc:963 methods/rsh.cc:303 +#: methods/ftp.cc:864 methods/http.cc:921 methods/rsh.cc:303 msgid "Problem hashing file" msgstr "Problema escollint el fitxer" @@ -1959,76 +1947,76 @@ msgstr "No s'ha pogut obrir un conducte per a %s" msgid "Read error from %s process" msgstr "Error llegint des del procés %s" -#: methods/http.cc:381 +#: methods/http.cc:345 msgid "Waiting for headers" msgstr "S'estan esperant les capçaleres" -#: methods/http.cc:527 +#: methods/http.cc:491 #, c-format msgid "Got a single header line over %u chars" msgstr "S'ha aconseguit una sola línia de capçalera més de %u caràcters" -#: methods/http.cc:535 +#: methods/http.cc:499 msgid "Bad header line" msgstr "Línia de capçalera incorrecta" -#: methods/http.cc:554 methods/http.cc:561 +#: methods/http.cc:518 methods/http.cc:525 msgid "The HTTP server sent an invalid reply header" msgstr "El servidor http ha enviat una capçalera de resposta no vàlida" -#: methods/http.cc:590 +#: methods/http.cc:554 msgid "The HTTP server sent an invalid Content-Length header" msgstr "El servidor http ha enviat una capçalera de Content-Length no vàlida" -#: methods/http.cc:605 +#: methods/http.cc:569 msgid "The HTTP server sent an invalid Content-Range header" msgstr "El servidor http ha enviat una capçalera de Content-Range no vàlida" -#: methods/http.cc:607 +#: methods/http.cc:571 msgid "This HTTP server has broken range support" msgstr "Aquest servidor http té el suport d'abast trencat" -#: methods/http.cc:631 +#: methods/http.cc:595 msgid "Unknown date format" msgstr "Format de la data desconegut" -#: methods/http.cc:778 +#: methods/http.cc:742 msgid "Select failed" msgstr "Ha fallat la selecció" -#: methods/http.cc:783 +#: methods/http.cc:747 msgid "Connection timed out" msgstr "Connexió finalitzada" -#: methods/http.cc:806 +#: methods/http.cc:770 msgid "Error writing to output file" msgstr "Error escrivint en el fitxer d'eixida" -#: methods/http.cc:837 +#: methods/http.cc:798 msgid "Error writing to file" msgstr "Error escrivint en el fitxer" -#: methods/http.cc:865 +#: methods/http.cc:823 msgid "Error writing to the file" msgstr "Error escrivint en el fitxer" -#: methods/http.cc:879 +#: methods/http.cc:837 msgid "Error reading from server. Remote end closed connection" msgstr "Error llegint, el servidor remot ha tancat la connexió" -#: methods/http.cc:881 +#: methods/http.cc:839 msgid "Error reading from server" msgstr "Error llegint des del servidor" -#: methods/http.cc:1112 +#: methods/http.cc:1070 msgid "Bad header data" msgstr "Capçalera de dades no vàlida" -#: methods/http.cc:1129 +#: methods/http.cc:1087 msgid "Connection failed" msgstr "Ha fallat la connexió" -#: methods/http.cc:1220 +#: methods/http.cc:1178 msgid "Internal error" msgstr "Error intern" @@ -2041,7 +2029,7 @@ msgstr "No es pot transferir un fitxer buit a memòria" msgid "Couldn't make mmap of %lu bytes" msgstr "No s'ha pogut crear un mapa de memòria de %lu octets" -#: apt-pkg/contrib/strutl.cc:938 +#: apt-pkg/contrib/strutl.cc:984 #, c-format msgid "Selection %s not found" msgstr "No s'ha trobat la selecció %s" @@ -2162,7 +2150,7 @@ msgstr "Operació no vàlida %s" msgid "Unable to stat the mount point %s" msgstr "No es pot obtenir informació del punt de muntatge %s" -#: apt-pkg/contrib/cdromutl.cc:149 apt-pkg/acquire.cc:427 apt-pkg/clean.cc:44 +#: apt-pkg/contrib/cdromutl.cc:149 apt-pkg/acquire.cc:423 apt-pkg/clean.cc:44 #, c-format msgid "Unable to change to %s" msgstr "No es pot canviar a %s" @@ -2238,72 +2226,72 @@ msgstr "Ha hagut un problema en desenllaçar el fitxer" msgid "Problem syncing the file" msgstr "Ha hagut un problema en sincronitzar el fitxer" -#: apt-pkg/pkgcache.cc:126 +#: apt-pkg/pkgcache.cc:135 msgid "Empty package cache" msgstr "Memòria cau de paquets és buida" -#: apt-pkg/pkgcache.cc:132 +#: apt-pkg/pkgcache.cc:141 msgid "The package cache file is corrupted" msgstr "El fitxer de memòria cau de paquets està corromput" -#: apt-pkg/pkgcache.cc:137 +#: apt-pkg/pkgcache.cc:146 msgid "The package cache file is an incompatible version" msgstr "El fitxer de memòria cau de paquets és una versió incompatible" -#: apt-pkg/pkgcache.cc:142 +#: apt-pkg/pkgcache.cc:151 #, c-format msgid "This APT does not support the versioning system '%s'" msgstr "Aquest APT no suporta el sistema de versions '%s'" -#: apt-pkg/pkgcache.cc:147 +#: apt-pkg/pkgcache.cc:156 msgid "The package cache was built for a different architecture" msgstr "La memòria cau de paquets fou creada per a una arquitectura diferent" -#: apt-pkg/pkgcache.cc:218 +#: apt-pkg/pkgcache.cc:227 msgid "Depends" msgstr "Depén" -#: apt-pkg/pkgcache.cc:218 +#: apt-pkg/pkgcache.cc:227 msgid "PreDepends" msgstr "Predepén" -#: apt-pkg/pkgcache.cc:218 +#: apt-pkg/pkgcache.cc:227 msgid "Suggests" msgstr "Suggereix" -#: apt-pkg/pkgcache.cc:219 +#: apt-pkg/pkgcache.cc:228 msgid "Recommends" msgstr "Recomana" -#: apt-pkg/pkgcache.cc:219 +#: apt-pkg/pkgcache.cc:228 msgid "Conflicts" msgstr "Entra en conflicte" -#: apt-pkg/pkgcache.cc:219 +#: apt-pkg/pkgcache.cc:228 msgid "Replaces" msgstr "Reemplaça" -#: apt-pkg/pkgcache.cc:220 +#: apt-pkg/pkgcache.cc:229 msgid "Obsoletes" msgstr "Fa obsolet" -#: apt-pkg/pkgcache.cc:231 +#: apt-pkg/pkgcache.cc:240 msgid "important" msgstr "important" -#: apt-pkg/pkgcache.cc:231 +#: apt-pkg/pkgcache.cc:240 msgid "required" msgstr "requerit" -#: apt-pkg/pkgcache.cc:231 +#: apt-pkg/pkgcache.cc:240 msgid "standard" msgstr "estàndard" -#: apt-pkg/pkgcache.cc:232 +#: apt-pkg/pkgcache.cc:241 msgid "optional" msgstr "opcional" -#: apt-pkg/pkgcache.cc:232 +#: apt-pkg/pkgcache.cc:241 msgid "extra" msgstr "extra" @@ -2329,52 +2317,52 @@ msgstr "No es pot analitzar el fitxer del paquet %s (1)" msgid "Unable to parse package file %s (2)" msgstr "No es pot analitzar el fitxer del paquet %s (2)" -#: apt-pkg/sourcelist.cc:94 +#: apt-pkg/sourcelist.cc:87 #, c-format msgid "Malformed line %lu in source list %s (URI)" msgstr "Línia %lu malformada en la llista de fonts %s (URI)" -#: apt-pkg/sourcelist.cc:96 +#: apt-pkg/sourcelist.cc:89 #, c-format msgid "Malformed line %lu in source list %s (dist)" msgstr "Línia %lu malformada en la llista de fonts %s (dist)" -#: apt-pkg/sourcelist.cc:99 +#: apt-pkg/sourcelist.cc:92 #, c-format msgid "Malformed line %lu in source list %s (URI parse)" msgstr "Línia %lu malformada en la llista de fonts %s (analitzant URI)" -#: apt-pkg/sourcelist.cc:105 +#: apt-pkg/sourcelist.cc:98 #, c-format msgid "Malformed line %lu in source list %s (absolute dist)" msgstr "Línia %lu malformada en la llista de fonts %s (dist absoluta)" -#: apt-pkg/sourcelist.cc:112 +#: apt-pkg/sourcelist.cc:105 #, c-format msgid "Malformed line %lu in source list %s (dist parse)" msgstr "Línia %lu malformada en la llista de fonts %s (analitzant dist)" -#: apt-pkg/sourcelist.cc:203 +#: apt-pkg/sourcelist.cc:156 #, c-format msgid "Opening %s" msgstr "S'està obrint %s" -#: apt-pkg/sourcelist.cc:220 apt-pkg/cdrom.cc:426 +#: apt-pkg/sourcelist.cc:170 apt-pkg/cdrom.cc:450 #, c-format msgid "Line %u too long in source list %s." msgstr "La línia %u és massa llarga en la llista de fonts %s." -#: apt-pkg/sourcelist.cc:240 +#: apt-pkg/sourcelist.cc:187 #, c-format msgid "Malformed line %u in source list %s (type)" msgstr "La línia %u és malformada en la llista de fonts %s (tipus)" -#: apt-pkg/sourcelist.cc:244 +#: apt-pkg/sourcelist.cc:191 #, fuzzy, c-format msgid "Type '%s' is not known on line %u in source list %s" msgstr "El tipus «%s» no és conegut en la línia %u de la llista de fonts %s" -#: apt-pkg/sourcelist.cc:252 apt-pkg/sourcelist.cc:255 +#: apt-pkg/sourcelist.cc:199 apt-pkg/sourcelist.cc:202 #, c-format msgid "Malformed line %u in source list %s (vendor id)" msgstr "La línia %u és malformada en la llista de fonts %s (id del proveïdor)" @@ -2427,7 +2415,7 @@ msgstr "Falta el directori de llistes %spartial." msgid "Archive directory %spartial is missing." msgstr "Falta el directori d'arxiu %spartial." -#: apt-pkg/acquire.cc:821 +#: apt-pkg/acquire.cc:817 #, c-format msgid "Downloading file %li of %li (%s remaining)" msgstr "" @@ -2450,12 +2438,12 @@ msgstr "" " '%s'\n" "en la unitat de '%s' i premeu Intro\n" -#: apt-pkg/init.cc:120 +#: apt-pkg/init.cc:122 #, c-format msgid "Packaging system '%s' is not supported" msgstr "El sistema d'empaquetament '%s' no està suportat." -#: apt-pkg/init.cc:136 +#: apt-pkg/init.cc:138 msgid "Unable to determine a suitable packaging system type" msgstr "No es pot determinar un tipus de sistema d'empaquetament adequat." @@ -2500,90 +2488,107 @@ msgstr "La memòria cau té un sistema de versions incompatible" msgid "Error occurred while processing %s (NewPackage)" msgstr "S'ha produït un error durant el processament de %s (NewPackage)" -#: apt-pkg/pkgcachegen.cc:129 +#: apt-pkg/pkgcachegen.cc:132 #, c-format msgid "Error occurred while processing %s (UsePackage1)" msgstr "S'ha produït un error durant el processament de %s (UsePackage1)" -#: apt-pkg/pkgcachegen.cc:150 +#: apt-pkg/pkgcachegen.cc:155 +#, fuzzy, c-format +msgid "Error occured while processing %s (NewFileDesc1)" +msgstr "S'ha produït un error durant el processament de %s (NewFileVer1)" + +#: apt-pkg/pkgcachegen.cc:180 #, c-format msgid "Error occurred while processing %s (UsePackage2)" msgstr "S'ha produït un error durant el processament de %s (UsePackage2)" -#: apt-pkg/pkgcachegen.cc:154 +#: apt-pkg/pkgcachegen.cc:184 #, c-format msgid "Error occurred while processing %s (NewFileVer1)" msgstr "S'ha produït un error durant el processament de %s (NewFileVer1)" -#: apt-pkg/pkgcachegen.cc:184 +#: apt-pkg/pkgcachegen.cc:215 #, c-format msgid "Error occurred while processing %s (NewVersion1)" msgstr "S'ha produït un error durant el processament de %s (NewVersion1)" -#: apt-pkg/pkgcachegen.cc:188 +#: apt-pkg/pkgcachegen.cc:219 #, c-format msgid "Error occurred while processing %s (UsePackage3)" msgstr "S'ha produït un error durant el processament de %s (UsePackage3)" -#: apt-pkg/pkgcachegen.cc:192 +#: apt-pkg/pkgcachegen.cc:223 #, c-format msgid "Error occurred while processing %s (NewVersion2)" msgstr "S'ha produït un error durant el processament de %s (NewVersion2)" -#: apt-pkg/pkgcachegen.cc:207 +#: apt-pkg/pkgcachegen.cc:247 +#, fuzzy, c-format +msgid "Error occured while processing %s (NewFileDesc2)" +msgstr "S'ha produït un error durant el processament de %s (NewFileVer1)" + +#: apt-pkg/pkgcachegen.cc:253 msgid "Wow, you exceeded the number of package names this APT is capable of." msgstr "Uau, heu excedit el nombre de paquets dels que aquest APT és capaç." -#: apt-pkg/pkgcachegen.cc:210 +#: apt-pkg/pkgcachegen.cc:256 msgid "Wow, you exceeded the number of versions this APT is capable of." msgstr "" "Uau, heu excedit el nombre de versions de les que aquest APT és capaç. " -#: apt-pkg/pkgcachegen.cc:213 +#: apt-pkg/pkgcachegen.cc:259 +#, fuzzy +msgid "Wow, you exceeded the number of descriptions this APT is capable of." +msgstr "" +"Uau, heu excedit el nombre de versions de les que aquest APT és capaç. " + +#: apt-pkg/pkgcachegen.cc:262 msgid "Wow, you exceeded the number of dependencies this APT is capable of." msgstr "" "Uau, heu excedit el nombre de dependències de les que aquest APT és capaç." -#: apt-pkg/pkgcachegen.cc:241 +#: apt-pkg/pkgcachegen.cc:290 #, c-format msgid "Error occurred while processing %s (FindPkg)" msgstr "S'ha produït un error durant el processament de %s (FindPkg)" -#: apt-pkg/pkgcachegen.cc:254 +#: apt-pkg/pkgcachegen.cc:303 #, c-format msgid "Error occurred while processing %s (CollectFileProvides)" msgstr "" "S'ha produït un error durant el processament de %s (CollectFileProvides)" -#: apt-pkg/pkgcachegen.cc:260 +#: apt-pkg/pkgcachegen.cc:309 #, c-format msgid "Package %s %s was not found while processing file dependencies" msgstr "" "No s'ha trobat el paquet %s %s en processar les dependències del fitxer" -#: apt-pkg/pkgcachegen.cc:574 +#: apt-pkg/pkgcachegen.cc:679 #, c-format msgid "Couldn't stat source package list %s" msgstr "No s'ha pogut llegir la llista de paquets font %s" -#: apt-pkg/pkgcachegen.cc:658 +#: apt-pkg/pkgcachegen.cc:763 msgid "Collecting File Provides" msgstr "S'estan recollint els fitxers que proveeixen" -#: apt-pkg/pkgcachegen.cc:785 apt-pkg/pkgcachegen.cc:792 +#: apt-pkg/pkgcachegen.cc:890 apt-pkg/pkgcachegen.cc:897 msgid "IO Error saving source cache" msgstr "Error d'E/S en desar la memòria cau de la font" -#: apt-pkg/acquire-item.cc:126 +#: apt-pkg/acquire-item.cc:129 #, c-format msgid "rename failed, %s (%s -> %s)." msgstr "no s'ha pogut canviar el nom, %s (%s -> %s)." -#: apt-pkg/acquire-item.cc:236 apt-pkg/acquire-item.cc:911 +#: apt-pkg/acquire-item.cc:391 apt-pkg/acquire-item.cc:635 +#: apt-pkg/acquire-item.cc:1336 msgid "MD5Sum mismatch" msgstr "Suma MD5 diferent" -#: apt-pkg/acquire-item.cc:719 +#: apt-pkg/acquire-item.cc:1150 #, c-format msgid "" "I wasn't able to locate a file for the %s package. This might mean you need " @@ -2593,7 +2598,7 @@ msgstr "" "significar que haureu d'arreglar aquest paquet manualment (segons " "arquitectura)." -#: apt-pkg/acquire-item.cc:778 +#: apt-pkg/acquire-item.cc:1203 #, c-format msgid "" "I wasn't able to locate file for the %s package. This might mean you need to " @@ -2602,7 +2607,7 @@ msgstr "" "No ha estat possible localitzar un fitxer pel paquet %s. Això podria " "significar que haureu d'arreglar aquest paquet manualment." -#: apt-pkg/acquire-item.cc:814 +#: apt-pkg/acquire-item.cc:1239 #, c-format msgid "" "The package index files are corrupted. No Filename: field for package %s." @@ -2610,7 +2615,7 @@ msgstr "" "L'índex dels fitxers en el paquet està corromput. Fitxer no existent: camp " "per al paquet %s." -#: apt-pkg/acquire-item.cc:901 +#: apt-pkg/acquire-item.cc:1326 msgid "Size mismatch" msgstr "Mida diferent" @@ -2619,7 +2624,7 @@ msgstr "Mida diferent" msgid "Vendor block %s contains no fingerprint" msgstr "El camp del proveïdor %s no té una empremta digital" -#: apt-pkg/cdrom.cc:507 +#: apt-pkg/cdrom.cc:531 #, c-format msgid "" "Using CD-ROM mount point %s\n" @@ -2628,47 +2633,49 @@ msgstr "" "S'està utilitzant el punt de muntatge de CD-ROM %s\n" "S'està muntant el CD-ROM\n" -#: apt-pkg/cdrom.cc:516 apt-pkg/cdrom.cc:598 +#: apt-pkg/cdrom.cc:540 apt-pkg/cdrom.cc:622 msgid "Identifying.. " msgstr "S'està identificant..." -#: apt-pkg/cdrom.cc:541 +#: apt-pkg/cdrom.cc:565 #, c-format msgid "Stored label: %s \n" msgstr "S'ha emmagatzemat l'etiqueta: %s\n" -#: apt-pkg/cdrom.cc:561 +#: apt-pkg/cdrom.cc:585 #, c-format msgid "Using CD-ROM mount point %s\n" msgstr "S'està utilitzant el punt de muntatge de CD-ROM %s\n" -#: apt-pkg/cdrom.cc:579 +#: apt-pkg/cdrom.cc:603 msgid "Unmounting CD-ROM\n" msgstr "S'està desmuntant el CD-ROM\n" -#: apt-pkg/cdrom.cc:583 +#: apt-pkg/cdrom.cc:607 msgid "Waiting for disc...\n" msgstr "S'està esperant al disc...\n" #. Mount the new CDROM -#: apt-pkg/cdrom.cc:591 +#: apt-pkg/cdrom.cc:615 msgid "Mounting CD-ROM...\n" msgstr "S'està muntant el CD-ROM...\n" -#: apt-pkg/cdrom.cc:609 +#: apt-pkg/cdrom.cc:633 msgid "Scanning disc for index files..\n" msgstr "S'està analitzant el disc per a fitxers d'índex...\n" -#: apt-pkg/cdrom.cc:647 -#, c-format -msgid "Found %i package indexes, %i source indexes and %i signatures\n" +#: apt-pkg/cdrom.cc:673 +#, fuzzy, c-format +msgid "" +"Found %i package indexes, %i source indexes, %i translation indexes and %i " +"signatures\n" msgstr "S'han trobat %i índex de paquets, %i índex de fonts i %i signatures\n" -#: apt-pkg/cdrom.cc:710 +#: apt-pkg/cdrom.cc:737 msgid "That is not a valid name, try again.\n" msgstr "Aquest no és un nom vàlid, torneu-ho a provar.\n" -#: apt-pkg/cdrom.cc:726 +#: apt-pkg/cdrom.cc:753 #, c-format msgid "" "This disc is called: \n" @@ -2677,38 +2684,38 @@ msgstr "" "El disc es diu:\n" "«%s»\n" -#: apt-pkg/cdrom.cc:730 +#: apt-pkg/cdrom.cc:757 msgid "Copying package lists..." msgstr "S'estan copiant les llistes de paquets..." -#: apt-pkg/cdrom.cc:754 +#: apt-pkg/cdrom.cc:783 msgid "Writing new source list\n" msgstr "S'està escrivint una nova llista de fonts\n" -#: apt-pkg/cdrom.cc:763 +#: apt-pkg/cdrom.cc:792 msgid "Source list entries for this disc are:\n" msgstr "Les entrades de la llista de fonts per a aquest disc són:\n" -#: apt-pkg/cdrom.cc:803 +#: apt-pkg/cdrom.cc:832 msgid "Unmounting CD-ROM..." msgstr "S'esta desmuntant el CD-ROM..." -#: apt-pkg/indexcopy.cc:261 +#: apt-pkg/indexcopy.cc:263 apt-pkg/indexcopy.cc:830 #, c-format msgid "Wrote %i records.\n" msgstr "S'han escrit %i registres.\n" -#: 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 "S'han escrit %i registres, on falten %i fitxers.\n" -#: 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 "S'han escrit %i registres, on hi ha %i fitxers no coincidents\n" -#: 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 "" @@ -2765,10 +2772,27 @@ msgstr "" msgid "Removed with config %s" msgstr "" +#: methods/rred.cc:219 +#, fuzzy +msgid "Could not patch file" +msgstr "No s'ha pogut obrir el fitxer %s" + #: methods/rsh.cc:330 msgid "Connection closed prematurely" msgstr "La connexió s'ha tancat prematurament" +#, fuzzy +#~ msgid "Please insert a Disc in the drive and press enter" +#~ msgstr "" +#~ "El medi ha canviat: Si us plau, inseriu el disc amb l'etiqueta\n" +#~ " '%s'\n" +#~ "en la unitat de '%s' i premeu Intro\n" + +#, fuzzy +#~ msgid "Skiping already downloaded file '%s'\n" +#~ msgstr "" +#~ "S'està ometent el desempaquetament de les fonts que ja ho estan en %s\n" + #~ msgid "Unknown vendor ID '%s' in line %u of source list %s" #~ msgstr "" #~ "ID del proveïdor '%s' desconeguda en la línia %u de la llista de fonts %s" @@ -6,7 +6,7 @@ msgid "" msgstr "" "Project-Id-Version: apt\n" "Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2006-01-04 18:51+0100\n" +"POT-Creation-Date: 2005-10-17 19:31+0200\n" "PO-Revision-Date: 2005-12-30 15:44+0100\n" "Last-Translator: Miroslav Kure <kurem@debian.cz>\n" "Language-Team: Czech <debian-l10n-czech@lists.debian.org>\n" @@ -14,145 +14,155 @@ msgstr "" "Content-Type: text/plain; charset=UTF-8\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 "Balík %s verze %s má nesplněné závislosti:\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 +#: 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:1419 cmdline/apt-cache.cc:1570 #, c-format msgid "Unable to locate package %s" msgstr "Nemohu najít balík %s" -#: cmdline/apt-cache.cc:232 +#: cmdline/apt-cache.cc:245 msgid "Total package names : " msgstr "Celkem názvů balíků: " -#: cmdline/apt-cache.cc:272 +#: cmdline/apt-cache.cc:285 msgid " Normal packages: " msgstr " Normálních balíků: " -#: cmdline/apt-cache.cc:273 +#: cmdline/apt-cache.cc:286 msgid " Pure virtual packages: " msgstr " Čistě virtuálních balíků: " -#: cmdline/apt-cache.cc:274 +#: cmdline/apt-cache.cc:287 msgid " Single virtual packages: " msgstr " Jednoduchých virtuálních balíků: " -#: cmdline/apt-cache.cc:275 +#: cmdline/apt-cache.cc:288 msgid " Mixed virtual packages: " msgstr " Smíšených virtuálních balíků: " -#: cmdline/apt-cache.cc:276 +#: cmdline/apt-cache.cc:289 msgid " Missing: " msgstr " Chybějících: " -#: cmdline/apt-cache.cc:278 +#: cmdline/apt-cache.cc:291 msgid "Total distinct versions: " msgstr "Celkem různých verzí: " -#: cmdline/apt-cache.cc:280 +#: cmdline/apt-cache.cc:293 +#, fuzzy +msgid "Total Distinct Descriptions: " +msgstr "Celkem různých verzí: " + +#: cmdline/apt-cache.cc:295 msgid "Total dependencies: " msgstr "Celkem závislostí: " -#: cmdline/apt-cache.cc:283 +#: cmdline/apt-cache.cc:298 msgid "Total ver/file relations: " msgstr "Celkem vztahů ver/soubor: " -#: cmdline/apt-cache.cc:285 +#: cmdline/apt-cache.cc:300 +#, fuzzy +msgid "Total Desc/File relations: " +msgstr "Celkem vztahů ver/soubor: " + +#: cmdline/apt-cache.cc:302 msgid "Total Provides mappings: " msgstr "Celkem poskytnutých mapování: " -#: cmdline/apt-cache.cc:297 +#: cmdline/apt-cache.cc:314 msgid "Total globbed strings: " msgstr "Celkem globovaných řetězců: " -#: cmdline/apt-cache.cc:311 +#: cmdline/apt-cache.cc:328 msgid "Total dependency version space: " msgstr "Celkem místa závislých verzí: " -#: cmdline/apt-cache.cc:316 +#: cmdline/apt-cache.cc:333 msgid "Total slack space: " msgstr "Celkem jalového místa: " -#: cmdline/apt-cache.cc:324 +#: cmdline/apt-cache.cc:341 msgid "Total space accounted for: " msgstr "Celkem přiřazeného místa: " -#: 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 "Soubor balíku %s je špatně synchronizovaný." -#: cmdline/apt-cache.cc:1231 +#: cmdline/apt-cache.cc:1293 msgid "You must give exactly one pattern" msgstr "Musíte zadat právě jeden vzor" -#: cmdline/apt-cache.cc:1385 +#: cmdline/apt-cache.cc:1447 msgid "No packages found" msgstr "Nebyly nalezeny žádné balíky" -#: cmdline/apt-cache.cc:1462 +#: cmdline/apt-cache.cc:1524 msgid "Package files:" msgstr "Soubory balíku:" -#: cmdline/apt-cache.cc:1469 cmdline/apt-cache.cc:1555 +#: cmdline/apt-cache.cc:1531 cmdline/apt-cache.cc:1617 msgid "Cache is out of sync, can't x-ref a package file" msgstr "Cache není synchronizovaná, nemohu se odkázat na soubor balíku" -#: cmdline/apt-cache.cc:1470 +#: cmdline/apt-cache.cc:1532 #, c-format msgid "%4i %s\n" msgstr "%4i %s\n" #. Show any packages have explicit pins -#: cmdline/apt-cache.cc:1482 +#: cmdline/apt-cache.cc:1544 msgid "Pinned packages:" msgstr "Vypíchnuté balíky:" -#: cmdline/apt-cache.cc:1494 cmdline/apt-cache.cc:1535 +#: cmdline/apt-cache.cc:1556 cmdline/apt-cache.cc:1597 msgid "(not found)" msgstr "(nenalezeno)" #. Installed version -#: cmdline/apt-cache.cc:1515 +#: cmdline/apt-cache.cc:1577 msgid " Installed: " msgstr " Instalovaná verze: " -#: cmdline/apt-cache.cc:1517 cmdline/apt-cache.cc:1525 +#: cmdline/apt-cache.cc:1579 cmdline/apt-cache.cc:1587 msgid "(none)" msgstr "(žádná)" #. Candidate Version -#: cmdline/apt-cache.cc:1522 +#: cmdline/apt-cache.cc:1584 msgid " Candidate: " msgstr " Kandidát: " -#: cmdline/apt-cache.cc:1532 +#: cmdline/apt-cache.cc:1594 msgid " Package pin: " msgstr " Vypíchnutý balík: " #. Show the priority tables -#: cmdline/apt-cache.cc:1541 +#: cmdline/apt-cache.cc:1603 msgid " Version table:" msgstr " Tabulka verzí:" -#: cmdline/apt-cache.cc:1556 +#: cmdline/apt-cache.cc:1618 #, c-format msgid " %4i %s\n" msgstr " %4i %s\n" -#: cmdline/apt-cache.cc:1651 cmdline/apt-cdrom.cc:138 cmdline/apt-config.cc:70 +#: cmdline/apt-cache.cc:1713 cmdline/apt-cdrom.cc:138 cmdline/apt-config.cc:70 #: cmdline/apt-extracttemplates.cc:225 ftparchive/apt-ftparchive.cc:550 -#: cmdline/apt-get.cc:2378 cmdline/apt-sortpkgs.cc:144 +#: cmdline/apt-get.cc:2325 cmdline/apt-sortpkgs.cc:144 #, c-format msgid "%s %s for %s %s compiled on %s %s\n" msgstr "%s %s pro %s %s zkompilován na %s %s\n" -#: cmdline/apt-cache.cc:1658 +#: cmdline/apt-cache.cc:1720 msgid "" "Usage: apt-cache [options] command\n" " apt-cache [options] add file1 [file2 ...]\n" @@ -226,18 +236,6 @@ msgstr "" " -o=? Nastaví libovolnou volbu, např. -o dir::cache=/tmp\n" "Více informací viz manuálové stránky apt-cache(8) a 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 "Zadejte prosím název tohoto média, např. 'Debian 2.1r1 Disk 1'" - -#: cmdline/apt-cdrom.cc:93 -msgid "Please insert a Disc in the drive and press enter" -msgstr "Vložte prosím médium do mechaniky a stiskněte enter" - -#: cmdline/apt-cdrom.cc:117 -msgid "Repeat this process for the rest of the CDs in your set." -msgstr "Tento proces opakujte pro všechna zbývající média." - #: cmdline/apt-config.cc:41 msgid "Arguments not in pairs" msgstr "Argumenty nejsou v párech" @@ -298,7 +296,7 @@ msgstr "" " -c=? Načte tento konfigurační soubor\n" " -o=? Nastaví libovolnou volbu, např. -o dir::cache=/tmp\n" -#: cmdline/apt-extracttemplates.cc:267 apt-pkg/pkgcachegen.cc:710 +#: cmdline/apt-extracttemplates.cc:267 apt-pkg/pkgcachegen.cc:815 #, c-format msgid "Unable to write to %s" msgstr "Nemohu zapsat do %s" @@ -519,12 +517,12 @@ msgstr "Nemohu vyhodnotit %s" msgid "Archive had no package field" msgstr "Archiv nemá pole Package" -#: ftparchive/writer.cc:394 ftparchive/writer.cc:603 +#: ftparchive/writer.cc:394 ftparchive/writer.cc:602 #, c-format msgid " %s has no override entry\n" msgstr " %s nemá žádnou položku pro override\n" -#: ftparchive/writer.cc:437 ftparchive/writer.cc:689 +#: ftparchive/writer.cc:437 ftparchive/writer.cc:688 #, c-format msgid " %s maintainer is %s not %s\n" msgstr " správce %s je %s, ne %s\n" @@ -624,79 +622,79 @@ msgstr "Problém s odlinkováním %s" msgid "Failed to rename %s to %s" msgstr "Selhalo přejmenování %s na %s" -#: cmdline/apt-get.cc:120 +#: cmdline/apt-get.cc:118 msgid "Y" msgstr "Y" -#: cmdline/apt-get.cc:142 cmdline/apt-get.cc:1515 +#: cmdline/apt-get.cc:140 cmdline/apt-get.cc:1486 #, c-format msgid "Regex compilation error - %s" msgstr "Chyba při kompilaci regulárního výrazu - %s" -#: cmdline/apt-get.cc:237 +#: cmdline/apt-get.cc:235 msgid "The following packages have unmet dependencies:" msgstr "Následující balíky mají nesplněné závislosti:" -#: cmdline/apt-get.cc:327 +#: cmdline/apt-get.cc:325 #, c-format msgid "but %s is installed" msgstr "ale %s je nainstalován" -#: cmdline/apt-get.cc:329 +#: cmdline/apt-get.cc:327 #, c-format msgid "but %s is to be installed" msgstr "ale %s se bude instalovat" -#: cmdline/apt-get.cc:336 +#: cmdline/apt-get.cc:334 msgid "but it is not installable" msgstr "ale nedá se nainstalovat" -#: cmdline/apt-get.cc:338 +#: cmdline/apt-get.cc:336 msgid "but it is a virtual package" msgstr "ale je to virtuální balík" -#: cmdline/apt-get.cc:341 +#: cmdline/apt-get.cc:339 msgid "but it is not installed" msgstr "ale není nainstalovaný" -#: cmdline/apt-get.cc:341 +#: cmdline/apt-get.cc:339 msgid "but it is not going to be installed" msgstr "ale nebude se instalovat" -#: cmdline/apt-get.cc:346 +#: cmdline/apt-get.cc:344 msgid " or" msgstr " nebo" -#: cmdline/apt-get.cc:375 +#: cmdline/apt-get.cc:373 msgid "The following NEW packages will be installed:" msgstr "Následující NOVÉ balíky budou nainstalovány:" -#: cmdline/apt-get.cc:401 +#: cmdline/apt-get.cc:399 msgid "The following packages will be REMOVED:" msgstr "Následující balíky budou ODSTRANĚNY:" -#: cmdline/apt-get.cc:423 +#: cmdline/apt-get.cc:421 msgid "The following packages have been kept back:" msgstr "Následující balíky jsou podrženy v aktuální verzi:" -#: cmdline/apt-get.cc:444 +#: cmdline/apt-get.cc:442 msgid "The following packages will be upgraded:" msgstr "Následující balíky budou aktualizovány:" -#: cmdline/apt-get.cc:465 +#: cmdline/apt-get.cc:463 msgid "The following packages will be DOWNGRADED:" msgstr "Následující balíky budou DEGRADOVÁNY:" -#: cmdline/apt-get.cc:485 +#: cmdline/apt-get.cc:483 msgid "The following held packages will be changed:" msgstr "Následující podržené balíky budou změněny:" -#: cmdline/apt-get.cc:538 +#: cmdline/apt-get.cc:536 #, c-format msgid "%s (due to %s) " msgstr "%s (kvůli %s) " -#: cmdline/apt-get.cc:546 +#: cmdline/apt-get.cc:544 msgid "" "WARNING: The following essential packages will be removed.\n" "This should NOT be done unless you know exactly what you are doing!" @@ -704,144 +702,144 @@ msgstr "" "VAROVÁNÍ: Následující nezbytné balíky budou odstraněny.\n" "Pokud přesně nevíte, co děláte, NEDĚLEJTE to!" -#: cmdline/apt-get.cc:577 +#: cmdline/apt-get.cc:575 #, c-format msgid "%lu upgraded, %lu newly installed, " msgstr "%lu aktualizováno, %lu nově instalováno, " -#: cmdline/apt-get.cc:581 +#: cmdline/apt-get.cc:579 #, c-format msgid "%lu reinstalled, " msgstr "%lu reinstalováno, " -#: cmdline/apt-get.cc:583 +#: cmdline/apt-get.cc:581 #, c-format msgid "%lu downgraded, " msgstr "%lu degradováno, " -#: cmdline/apt-get.cc:585 +#: cmdline/apt-get.cc:583 #, c-format msgid "%lu to remove and %lu not upgraded.\n" msgstr "%lu k odstranění a %lu neaktualizováno.\n" -#: cmdline/apt-get.cc:589 +#: cmdline/apt-get.cc:587 #, c-format msgid "%lu not fully installed or removed.\n" msgstr "%lu instalováno nebo odstraněno pouze částečně.\n" -#: cmdline/apt-get.cc:649 +#: cmdline/apt-get.cc:647 msgid "Correcting dependencies..." msgstr "Opravuji závislosti..." -#: cmdline/apt-get.cc:652 +#: cmdline/apt-get.cc:650 msgid " failed." msgstr " selhalo." -#: cmdline/apt-get.cc:655 +#: cmdline/apt-get.cc:653 msgid "Unable to correct dependencies" msgstr "Nemohu opravit závislosti" -#: cmdline/apt-get.cc:658 +#: cmdline/apt-get.cc:656 msgid "Unable to minimize the upgrade set" msgstr "Nemohu minimalizovat sadu pro aktualizaci" -#: cmdline/apt-get.cc:660 +#: cmdline/apt-get.cc:658 msgid " Done" msgstr " Hotovo" -#: cmdline/apt-get.cc:664 +#: cmdline/apt-get.cc:662 msgid "You might want to run `apt-get -f install' to correct these." msgstr "Pro opravení můžete spustit `apt-get -f install'." -#: cmdline/apt-get.cc:667 +#: cmdline/apt-get.cc:665 msgid "Unmet dependencies. Try using -f." msgstr "Nesplněné závislosti. Zkuste použít -f." -#: cmdline/apt-get.cc:689 +#: cmdline/apt-get.cc:687 msgid "WARNING: The following packages cannot be authenticated!" msgstr "VAROVÁNÍ: Následující balíky nemohou být autentizovány!" -#: cmdline/apt-get.cc:693 +#: cmdline/apt-get.cc:691 msgid "Authentication warning overridden.\n" msgstr "Autentizační varování potlačeno.\n" -#: cmdline/apt-get.cc:700 +#: cmdline/apt-get.cc:698 msgid "Install these packages without verification [y/N]? " msgstr "Instalovat tyto balíky bez ověření [y/N]? " -#: cmdline/apt-get.cc:702 +#: cmdline/apt-get.cc:700 msgid "Some packages could not be authenticated" msgstr "Některé balíky nemohly být autentizovány" -#: cmdline/apt-get.cc:711 cmdline/apt-get.cc:858 +#: cmdline/apt-get.cc:709 cmdline/apt-get.cc:856 msgid "There are problems and -y was used without --force-yes" msgstr "Vyskytly se problémy a -y bylo použito bez --force-yes" -#: cmdline/apt-get.cc:755 +#: cmdline/apt-get.cc:753 msgid "Internal error, InstallPackages was called with broken packages!" msgstr "Vnitřní chyba, InstallPackages byl zavolán s porušenými balíky!" -#: cmdline/apt-get.cc:764 +#: cmdline/apt-get.cc:762 msgid "Packages need to be removed but remove is disabled." msgstr "Balík je potřeba odstranit ale funkce Odstranit je vypnuta." -#: cmdline/apt-get.cc:775 +#: cmdline/apt-get.cc:773 msgid "Internal error, Ordering didn't finish" msgstr "Vnitřní chyba, třídění nedoběhlo do konce" -#: cmdline/apt-get.cc:791 cmdline/apt-get.cc:1809 cmdline/apt-get.cc:1842 +#: cmdline/apt-get.cc:789 cmdline/apt-get.cc:1780 cmdline/apt-get.cc:1813 msgid "Unable to lock the download directory" msgstr "Nemohu zamknout adresář pro stahování" -#: cmdline/apt-get.cc:801 cmdline/apt-get.cc:1890 cmdline/apt-get.cc:2126 +#: cmdline/apt-get.cc:799 cmdline/apt-get.cc:1861 cmdline/apt-get.cc:2073 #: apt-pkg/cachefile.cc:67 msgid "The list of sources could not be read." msgstr "Nelze přečíst seznam zdrojů." -#: cmdline/apt-get.cc:816 +#: cmdline/apt-get.cc:814 msgid "How odd.. The sizes didn't match, email apt@packages.debian.org" msgstr "" "Jak podivné... velikosti nesouhlasí, ohlaste to na apt@packages.debian.org" -#: cmdline/apt-get.cc:821 +#: cmdline/apt-get.cc:819 #, c-format msgid "Need to get %sB/%sB of archives.\n" msgstr "Potřebuji stáhnout %sB/%sB archivů.\n" -#: cmdline/apt-get.cc:824 +#: cmdline/apt-get.cc:822 #, c-format msgid "Need to get %sB of archives.\n" msgstr "Potřebuji stáhnout %sB archivů.\n" -#: cmdline/apt-get.cc:829 +#: cmdline/apt-get.cc:827 #, c-format msgid "After unpacking %sB of additional disk space will be used.\n" msgstr "Po rozbalení bude na disku použito dalších %sB.\n" -#: cmdline/apt-get.cc:832 +#: cmdline/apt-get.cc:830 #, c-format msgid "After unpacking %sB disk space will be freed.\n" msgstr "Po rozbalení bude na disku uvolněno %sB.\n" -#: cmdline/apt-get.cc:846 cmdline/apt-get.cc:1980 +#: cmdline/apt-get.cc:844 cmdline/apt-get.cc:1927 #, c-format msgid "Couldn't determine free space in %s" msgstr "Nemohu určit volné místo v %s" -#: cmdline/apt-get.cc:849 +#: cmdline/apt-get.cc:847 #, c-format msgid "You don't have enough free space in %s." msgstr "V %s nemáte dostatek volného místa." -#: cmdline/apt-get.cc:864 cmdline/apt-get.cc:884 +#: cmdline/apt-get.cc:862 cmdline/apt-get.cc:882 msgid "Trivial Only specified but this is not a trivial operation." msgstr "Udáno 'pouze triviální', ovšem toto není triviální operace." -#: cmdline/apt-get.cc:866 +#: cmdline/apt-get.cc:864 msgid "Yes, do as I say!" msgstr "Ano, udělej to tak, jak říkám!" -#: cmdline/apt-get.cc:868 +#: cmdline/apt-get.cc:866 #, c-format msgid "" "You are about to do something potentially harmful.\n" @@ -852,28 +850,28 @@ msgstr "" "Pro pokračování opište frázi '%s'\n" " ?] " -#: cmdline/apt-get.cc:874 cmdline/apt-get.cc:893 +#: cmdline/apt-get.cc:872 cmdline/apt-get.cc:891 msgid "Abort." msgstr "Přerušeno." -#: cmdline/apt-get.cc:889 +#: cmdline/apt-get.cc:887 msgid "Do you want to continue [Y/n]? " msgstr "Chcete pokračovat [Y/n]? " -#: cmdline/apt-get.cc:961 cmdline/apt-get.cc:1365 cmdline/apt-get.cc:2023 +#: cmdline/apt-get.cc:959 cmdline/apt-get.cc:1336 cmdline/apt-get.cc:1970 #, c-format msgid "Failed to fetch %s %s\n" msgstr "Selhalo stažení %s %s\n" -#: cmdline/apt-get.cc:979 +#: cmdline/apt-get.cc:977 msgid "Some files failed to download" msgstr "Některé soubory nemohly být staženy" -#: cmdline/apt-get.cc:980 cmdline/apt-get.cc:2032 +#: cmdline/apt-get.cc:978 cmdline/apt-get.cc:1979 msgid "Download complete and in download only mode" msgstr "Stahování dokončeno v režimu pouze stáhnout" -#: cmdline/apt-get.cc:986 +#: cmdline/apt-get.cc:984 msgid "" "Unable to fetch some archives, maybe run apt-get update or try with --fix-" "missing?" @@ -881,47 +879,47 @@ msgstr "" "Nemohu stáhnout některé archivy. Možná spusťte apt-get update nebo zkuste --" "fix-missing?" -#: cmdline/apt-get.cc:990 +#: cmdline/apt-get.cc:988 msgid "--fix-missing and media swapping is not currently supported" msgstr "--fix-missing a výměna média nejsou momentálně podporovány" -#: cmdline/apt-get.cc:995 +#: cmdline/apt-get.cc:993 msgid "Unable to correct missing packages." msgstr "Nemohu opravit chybějící balíky." -#: cmdline/apt-get.cc:996 +#: cmdline/apt-get.cc:994 msgid "Aborting install." msgstr "Přerušuji instalaci." -#: cmdline/apt-get.cc:1030 +#: cmdline/apt-get.cc:1028 #, c-format msgid "Note, selecting %s instead of %s\n" msgstr "Pozn: Vybírám %s místo %s\n" -#: cmdline/apt-get.cc:1040 +#: cmdline/apt-get.cc:1038 #, c-format msgid "Skipping %s, it is already installed and upgrade is not set.\n" msgstr "Přeskakuji %s, protože je již nainstalován.\n" -#: cmdline/apt-get.cc:1058 +#: cmdline/apt-get.cc:1056 #, c-format msgid "Package %s is not installed, so not removed\n" msgstr "Balík %s není nainstalován, nelze tedy odstranit\n" -#: cmdline/apt-get.cc:1069 +#: cmdline/apt-get.cc:1067 #, c-format msgid "Package %s is a virtual package provided by:\n" msgstr "Balík %s je virtuální balík poskytovaný:\n" -#: cmdline/apt-get.cc:1081 +#: cmdline/apt-get.cc:1079 msgid " [Installed]" msgstr "[Instalovaný]" -#: cmdline/apt-get.cc:1086 +#: cmdline/apt-get.cc:1084 msgid "You should explicitly select one to install." msgstr "Měli byste explicitně vybrat jeden k instalaci." -#: cmdline/apt-get.cc:1091 +#: cmdline/apt-get.cc:1089 #, c-format msgid "" "Package %s is not available, but is referred to by another package.\n" @@ -932,49 +930,49 @@ msgstr "" "To může znamenat že balík chybí, byl zastarán, nebo je dostupný\n" "pouze z jiného zdroje\n" -#: cmdline/apt-get.cc:1110 +#: cmdline/apt-get.cc:1108 msgid "However the following packages replace it:" msgstr "Nicméně následující balíky jej nahrazují:" -#: cmdline/apt-get.cc:1113 +#: cmdline/apt-get.cc:1111 #, c-format msgid "Package %s has no installation candidate" msgstr "Balík %s nemá kandidáta pro instalaci" -#: cmdline/apt-get.cc:1133 +#: cmdline/apt-get.cc:1131 #, c-format msgid "Reinstallation of %s is not possible, it cannot be downloaded.\n" msgstr "Reinstalace %s není možná, protože nelze stáhnout.\n" -#: cmdline/apt-get.cc:1141 +#: cmdline/apt-get.cc:1139 #, c-format msgid "%s is already the newest version.\n" msgstr "%s je již nejnovější verze.\n" -#: cmdline/apt-get.cc:1168 +#: cmdline/apt-get.cc:1166 #, c-format msgid "Release '%s' for '%s' was not found" msgstr "Vydání '%s' pro '%s' nebylo nalezeno" -#: cmdline/apt-get.cc:1170 +#: cmdline/apt-get.cc:1168 #, c-format msgid "Version '%s' for '%s' was not found" msgstr "Verze '%s' pro '%s' nebyla nalezena" -#: cmdline/apt-get.cc:1176 +#: cmdline/apt-get.cc:1174 #, c-format msgid "Selected version %s (%s) for %s\n" msgstr "Vybraná verze %s (%s) pro %s\n" -#: cmdline/apt-get.cc:1313 +#: cmdline/apt-get.cc:1284 msgid "The update command takes no arguments" msgstr "Příkaz update neakceptuje žádné argumenty" -#: cmdline/apt-get.cc:1326 cmdline/apt-get.cc:1420 +#: cmdline/apt-get.cc:1297 cmdline/apt-get.cc:1391 msgid "Unable to lock the list directory" msgstr "Nemohu uzamknout list adresář" -#: cmdline/apt-get.cc:1384 +#: cmdline/apt-get.cc:1355 msgid "" "Some index files failed to download, they have been ignored, or old ones " "used instead." @@ -982,25 +980,25 @@ msgstr "" "Některé indexové soubory se nepodařilo stáhnout, jsou ignorovány, nebo jsou " "použity starší verze." -#: cmdline/apt-get.cc:1403 +#: cmdline/apt-get.cc:1374 msgid "Internal error, AllUpgrade broke stuff" msgstr "Vnitřní chyba, AllUpgrade pokazil věci" -#: cmdline/apt-get.cc:1502 cmdline/apt-get.cc:1538 +#: cmdline/apt-get.cc:1473 cmdline/apt-get.cc:1509 #, c-format msgid "Couldn't find package %s" msgstr "Nemohu najít balík %s" -#: cmdline/apt-get.cc:1525 +#: cmdline/apt-get.cc:1496 #, c-format msgid "Note, selecting %s for regex '%s'\n" msgstr "Pozn: vybírám %s pro regulární výraz '%s'\n" -#: cmdline/apt-get.cc:1555 +#: cmdline/apt-get.cc:1526 msgid "You might want to run `apt-get -f install' to correct these:" msgstr "Pro opravení následujících můžete spustit `apt-get -f install':" -#: cmdline/apt-get.cc:1558 +#: cmdline/apt-get.cc:1529 msgid "" "Unmet dependencies. Try 'apt-get -f install' with no packages (or specify a " "solution)." @@ -1008,7 +1006,7 @@ msgstr "" "Nesplněné závislosti. Zkuste spustit 'apt-get -f install' bez balíků (nebo " "navrhněte řešení)." -#: cmdline/apt-get.cc:1570 +#: cmdline/apt-get.cc:1541 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" @@ -1019,7 +1017,7 @@ msgstr "" "nemožnou situaci, nebo, pokud používáte nestabilní distribuci, že\n" "vyžadované balíky ještě nebyly vytvořeny nebo přesunuty z Příchozí fronty." -#: cmdline/apt-get.cc:1578 +#: cmdline/apt-get.cc:1549 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" @@ -1029,128 +1027,123 @@ msgstr "" "balík není instalovatelný a měl byste o tom zaslat hlášení o chybě\n" "(bug report)." -#: cmdline/apt-get.cc:1583 +#: cmdline/apt-get.cc:1554 msgid "The following information may help to resolve the situation:" msgstr "Následující informace vám mohou pomoci vyřešit tuto situaci:" -#: cmdline/apt-get.cc:1586 +#: cmdline/apt-get.cc:1557 msgid "Broken packages" msgstr "Poškozené balíky" -#: cmdline/apt-get.cc:1612 +#: cmdline/apt-get.cc:1583 msgid "The following extra packages will be installed:" msgstr "Následující extra balíky budou instalovány:" -#: cmdline/apt-get.cc:1683 +#: cmdline/apt-get.cc:1654 msgid "Suggested packages:" msgstr "Navrhované balíky:" -#: cmdline/apt-get.cc:1684 +#: cmdline/apt-get.cc:1655 msgid "Recommended packages:" msgstr "Doporučované balíky:" -#: cmdline/apt-get.cc:1704 +#: cmdline/apt-get.cc:1675 msgid "Calculating upgrade... " msgstr "Propočítávám aktualizaci... " -#: cmdline/apt-get.cc:1707 methods/ftp.cc:702 methods/connect.cc:101 +#: cmdline/apt-get.cc:1678 methods/ftp.cc:702 methods/connect.cc:101 msgid "Failed" msgstr "Selhalo" -#: cmdline/apt-get.cc:1712 +#: cmdline/apt-get.cc:1683 msgid "Done" msgstr "Hotovo" -#: cmdline/apt-get.cc:1777 cmdline/apt-get.cc:1785 +#: cmdline/apt-get.cc:1748 cmdline/apt-get.cc:1756 msgid "Internal error, problem resolver broke stuff" msgstr "Vnitřní chyba, řešitel problémů pokazil věci" -#: cmdline/apt-get.cc:1885 +#: cmdline/apt-get.cc:1856 msgid "Must specify at least one package to fetch source for" msgstr "Musíte zadat aspoň jeden balík, pro který se stáhnou zdrojové texty" -#: cmdline/apt-get.cc:1915 cmdline/apt-get.cc:2144 +#: cmdline/apt-get.cc:1883 cmdline/apt-get.cc:2091 #, c-format msgid "Unable to find a source package for %s" msgstr "Nemohu najít zdrojový balík pro %s" -#: cmdline/apt-get.cc:1959 -#, fuzzy, c-format -msgid "Skiping already downloaded file '%s'\n" -msgstr "Přeskakuji rozbalení již rozbaleného zdroje v %s\n" - -#: cmdline/apt-get.cc:1983 +#: cmdline/apt-get.cc:1930 #, c-format msgid "You don't have enough free space in %s" msgstr "Na %s nemáte dostatek volného místa" -#: cmdline/apt-get.cc:1988 +#: cmdline/apt-get.cc:1935 #, c-format msgid "Need to get %sB/%sB of source archives.\n" msgstr "Potřebuji stáhnout %sB/%sB zdrojových archivů.\n" -#: cmdline/apt-get.cc:1991 +#: cmdline/apt-get.cc:1938 #, c-format msgid "Need to get %sB of source archives.\n" msgstr "Potřebuji stáhnout %sB zdrojových archivů.\n" -#: cmdline/apt-get.cc:1997 +#: cmdline/apt-get.cc:1944 #, c-format msgid "Fetch source %s\n" msgstr "Stáhnout zdroj %s\n" -#: cmdline/apt-get.cc:2028 +#: cmdline/apt-get.cc:1975 msgid "Failed to fetch some archives." msgstr "Stažení některých archivů selhalo." -#: cmdline/apt-get.cc:2056 +#: cmdline/apt-get.cc:2003 #, c-format msgid "Skipping unpack of already unpacked source in %s\n" msgstr "Přeskakuji rozbalení již rozbaleného zdroje v %s\n" -#: cmdline/apt-get.cc:2068 +#: cmdline/apt-get.cc:2015 #, c-format msgid "Unpack command '%s' failed.\n" msgstr "Příkaz pro rozbalení '%s' selhal.\n" -#: cmdline/apt-get.cc:2069 +#: cmdline/apt-get.cc:2016 #, c-format msgid "Check if the 'dpkg-dev' package is installed.\n" msgstr "Zkontrolujte, zda je nainstalován balíček 'dpkg-dev'.\n" -#: cmdline/apt-get.cc:2086 +#: cmdline/apt-get.cc:2033 #, c-format msgid "Build command '%s' failed.\n" msgstr "Příkaz pro sestavení '%s' selhal.\n" -#: cmdline/apt-get.cc:2105 +#: cmdline/apt-get.cc:2052 msgid "Child process failed" msgstr "Synovský proces selhal" -#: cmdline/apt-get.cc:2121 +#: cmdline/apt-get.cc:2068 msgid "Must specify at least one package to check builddeps for" msgstr "" "Musíte zadat alespoň jeden balík, pro který budou kontrolovány závislosti " "pro sestavení" -#: cmdline/apt-get.cc:2149 +#: cmdline/apt-get.cc:2096 #, c-format msgid "Unable to get build-dependency information for %s" msgstr "Nemohu získat závislosti pro sestavení %s" -#: cmdline/apt-get.cc:2169 +#: cmdline/apt-get.cc:2116 #, c-format msgid "%s has no build depends.\n" msgstr "%s nemá žádné závislosti pro sestavení.\n" -#: cmdline/apt-get.cc:2221 +#: cmdline/apt-get.cc:2168 #, c-format msgid "" "%s dependency for %s cannot be satisfied because the package %s cannot be " "found" msgstr "%s závislost pro %s nemůže být splněna, protože balík %s nebyl nalezen" -#: cmdline/apt-get.cc:2273 +#: cmdline/apt-get.cc:2220 #, c-format msgid "" "%s dependency for %s cannot be satisfied because no available versions of " @@ -1159,31 +1152,31 @@ msgstr "" "%s závislost pro %s nemůže být splněna protože není k dispozici verze balíku " "%s, která odpovídá požadavku na verzi" -#: cmdline/apt-get.cc:2308 +#: cmdline/apt-get.cc:2255 #, c-format msgid "Failed to satisfy %s dependency for %s: Installed package %s is too new" msgstr "" "Selhalo splnění %s závislosti pro %s: Instalovaný balík %s je příliš nový" -#: cmdline/apt-get.cc:2333 +#: cmdline/apt-get.cc:2280 #, c-format msgid "Failed to satisfy %s dependency for %s: %s" msgstr "Selhalo splnění %s závislosti pro %s: %s" -#: cmdline/apt-get.cc:2347 +#: cmdline/apt-get.cc:2294 #, c-format msgid "Build-dependencies for %s could not be satisfied." msgstr "Závislosti pro sestavení %s nemohly být splněny." -#: cmdline/apt-get.cc:2351 +#: cmdline/apt-get.cc:2298 msgid "Failed to process build dependencies" msgstr "Chyba při zpracování závislostí pro sestavení" -#: cmdline/apt-get.cc:2383 +#: cmdline/apt-get.cc:2330 msgid "Supported modules:" msgstr "Podporované moduly:" -#: cmdline/apt-get.cc:2424 +#: cmdline/apt-get.cc:2371 msgid "" "Usage: apt-get [options] command\n" " apt-get [options] install|remove pkg1 [pkg2 ...]\n" @@ -1434,7 +1427,7 @@ msgstr "Duplicitní konfigurační soubor %s/%s" msgid "Failed to write file %s" msgstr "Selhal zápis souboru %s" -#: apt-inst/dirstream.cc:96 apt-inst/dirstream.cc:104 +#: apt-inst/dirstream.cc:80 apt-inst/dirstream.cc:88 #, c-format msgid "Failed to close file %s" msgstr "Selhalo zavření souboru %s" @@ -1487,8 +1480,7 @@ msgid "File %s/%s overwrites the one in the package %s" msgstr "Soubor %s/%s přepisuje ten z balíku %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 +#: apt-pkg/contrib/cdromutl.cc:153 apt-pkg/acquire.cc:417 apt-pkg/clean.cc:38 #, c-format msgid "Unable to read %s" msgstr "Nemohu číst %s" @@ -1518,9 +1510,9 @@ msgid "The info and temp directories need to be on the same filesystem" msgstr "Adresáře info a temp musí být na stejném souborovém systému" #. 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:748 +#: apt-pkg/pkgcachegen.cc:817 apt-pkg/pkgcachegen.cc:822 +#: apt-pkg/pkgcachegen.cc:945 msgid "Reading package lists" msgstr "Čtu seznamy balíků" @@ -1658,11 +1650,12 @@ msgid "File not found" msgstr "Soubor nebyl nalezen" #: methods/copy.cc:42 methods/gpgv.cc:265 methods/gzip.cc:133 -#: methods/gzip.cc:142 +#: methods/gzip.cc:142 methods/rred.cc:234 methods/rred.cc:243 msgid "Failed to stat" msgstr "Selhalo vyhodnocení" #: methods/copy.cc:79 methods/gpgv.cc:262 methods/gzip.cc:139 +#: methods/rred.cc:240 msgid "Failed to set modification time" msgstr "Nelze nastavit čas modifikace" @@ -1790,7 +1783,7 @@ msgstr "Spojení datového socketu vypršelo" msgid "Unable to accept connection" msgstr "Nemohu přijmout spojení" -#: methods/ftp.cc:864 methods/http.cc:963 methods/rsh.cc:303 +#: methods/ftp.cc:864 methods/http.cc:921 methods/rsh.cc:303 msgid "Problem hashing file" msgstr "Problém s hashováním souboru" @@ -1922,76 +1915,76 @@ msgstr "Nemohu otevřít rouru pro %s" msgid "Read error from %s process" msgstr "Chyba čtení z procesu %s" -#: methods/http.cc:381 +#: methods/http.cc:345 msgid "Waiting for headers" msgstr "Čekám na hlavičky" -#: methods/http.cc:527 +#: methods/http.cc:491 #, c-format msgid "Got a single header line over %u chars" msgstr "Získal jsem jednu řádku hlavičky přes %u znaků" -#: methods/http.cc:535 +#: methods/http.cc:499 msgid "Bad header line" msgstr "Chybná hlavička" -#: methods/http.cc:554 methods/http.cc:561 +#: methods/http.cc:518 methods/http.cc:525 msgid "The HTTP server sent an invalid reply header" msgstr "Http server poslal neplatnou hlavičku odpovědi" -#: methods/http.cc:590 +#: methods/http.cc:554 msgid "The HTTP server sent an invalid Content-Length header" msgstr "Http server poslal neplatnou hlavičku Content-Length" -#: methods/http.cc:605 +#: methods/http.cc:569 msgid "The HTTP server sent an invalid Content-Range header" msgstr "Http server poslal neplatnou hlavičku Content-Range" -#: methods/http.cc:607 +#: methods/http.cc:571 msgid "This HTTP server has broken range support" msgstr "Tento HTTP server má porouchanou podporu rozsahů" -#: methods/http.cc:631 +#: methods/http.cc:595 msgid "Unknown date format" msgstr "Neznámý formát data" -#: methods/http.cc:778 +#: methods/http.cc:742 msgid "Select failed" msgstr "Výběr selhal" -#: methods/http.cc:783 +#: methods/http.cc:747 msgid "Connection timed out" msgstr "Čas spojení vypršel" -#: methods/http.cc:806 +#: methods/http.cc:770 msgid "Error writing to output file" msgstr "Chyba zápisu do výstupního souboru" -#: methods/http.cc:837 +#: methods/http.cc:798 msgid "Error writing to file" msgstr "Chyba zápisu do souboru" -#: methods/http.cc:865 +#: methods/http.cc:823 msgid "Error writing to the file" msgstr "Chyba zápisu do souboru" -#: methods/http.cc:879 +#: methods/http.cc:837 msgid "Error reading from server. Remote end closed connection" msgstr "Chyba čtení ze serveru. Druhá strana zavřela spojení" -#: methods/http.cc:881 +#: methods/http.cc:839 msgid "Error reading from server" msgstr "Chyba čtení ze serveru" -#: methods/http.cc:1112 +#: methods/http.cc:1070 msgid "Bad header data" msgstr "Špatné datové záhlaví" -#: methods/http.cc:1129 +#: methods/http.cc:1087 msgid "Connection failed" msgstr "Spojení selhalo" -#: methods/http.cc:1220 +#: methods/http.cc:1178 msgid "Internal error" msgstr "Vnitřní chyba" @@ -2004,7 +1997,7 @@ msgstr "Nemohu provést mmap prázdného souboru" msgid "Couldn't make mmap of %lu bytes" msgstr "Nešlo mmapovat %lu bajtů" -#: apt-pkg/contrib/strutl.cc:938 +#: apt-pkg/contrib/strutl.cc:984 #, c-format msgid "Selection %s not found" msgstr "Výběr %s nenalezen" @@ -2126,7 +2119,7 @@ msgstr "Neplatná operace %s" msgid "Unable to stat the mount point %s" msgstr "Nelze vyhodnotit přípojný bod %s" -#: apt-pkg/contrib/cdromutl.cc:149 apt-pkg/acquire.cc:427 apt-pkg/clean.cc:44 +#: apt-pkg/contrib/cdromutl.cc:149 apt-pkg/acquire.cc:423 apt-pkg/clean.cc:44 #, c-format msgid "Unable to change to %s" msgstr "Nemohu přejít do %s" @@ -2202,72 +2195,72 @@ msgstr "Problém při odstraňování souboru" msgid "Problem syncing the file" msgstr "Problém při synchronizování souboru" -#: apt-pkg/pkgcache.cc:126 +#: apt-pkg/pkgcache.cc:135 msgid "Empty package cache" msgstr "Cache balíků je prázdná" -#: apt-pkg/pkgcache.cc:132 +#: apt-pkg/pkgcache.cc:141 msgid "The package cache file is corrupted" msgstr "Cache soubor balíků je poškozen" -#: apt-pkg/pkgcache.cc:137 +#: apt-pkg/pkgcache.cc:146 msgid "The package cache file is an incompatible version" msgstr "Cache soubor balíků je v nekompatibilní verzi" -#: apt-pkg/pkgcache.cc:142 +#: apt-pkg/pkgcache.cc:151 #, c-format msgid "This APT does not support the versioning system '%s'" msgstr "Tento APT nepodporuje systém pro správu verzí '%s'" -#: apt-pkg/pkgcache.cc:147 +#: apt-pkg/pkgcache.cc:156 msgid "The package cache was built for a different architecture" msgstr "Cache balíků byla vytvořena pro jinou architekturu" -#: apt-pkg/pkgcache.cc:218 +#: apt-pkg/pkgcache.cc:227 msgid "Depends" msgstr "Závisí na" -#: apt-pkg/pkgcache.cc:218 +#: apt-pkg/pkgcache.cc:227 msgid "PreDepends" msgstr "Předzávisí na" -#: apt-pkg/pkgcache.cc:218 +#: apt-pkg/pkgcache.cc:227 msgid "Suggests" msgstr "Navrhuje" -#: apt-pkg/pkgcache.cc:219 +#: apt-pkg/pkgcache.cc:228 msgid "Recommends" msgstr "Doporučuje" -#: apt-pkg/pkgcache.cc:219 +#: apt-pkg/pkgcache.cc:228 msgid "Conflicts" msgstr "Koliduje s" -#: apt-pkg/pkgcache.cc:219 +#: apt-pkg/pkgcache.cc:228 msgid "Replaces" msgstr "Nahrazuje" -#: apt-pkg/pkgcache.cc:220 +#: apt-pkg/pkgcache.cc:229 msgid "Obsoletes" msgstr "Zastarává" -#: apt-pkg/pkgcache.cc:231 +#: apt-pkg/pkgcache.cc:240 msgid "important" msgstr "důležitý" -#: apt-pkg/pkgcache.cc:231 +#: apt-pkg/pkgcache.cc:240 msgid "required" msgstr "vyžadovaný" -#: apt-pkg/pkgcache.cc:231 +#: apt-pkg/pkgcache.cc:240 msgid "standard" msgstr "standardní" -#: apt-pkg/pkgcache.cc:232 +#: apt-pkg/pkgcache.cc:241 msgid "optional" msgstr "volitelný" -#: apt-pkg/pkgcache.cc:232 +#: apt-pkg/pkgcache.cc:241 msgid "extra" msgstr "extra" @@ -2293,52 +2286,52 @@ msgstr "Nelze zpracovat soubor %s (1)" msgid "Unable to parse package file %s (2)" msgstr "Nelze zpracovat soubor %s (2)" -#: apt-pkg/sourcelist.cc:94 +#: apt-pkg/sourcelist.cc:87 #, c-format msgid "Malformed line %lu in source list %s (URI)" msgstr "Zkomolený řádek %lu v seznamu zdrojů %s (URI)" -#: apt-pkg/sourcelist.cc:96 +#: apt-pkg/sourcelist.cc:89 #, c-format msgid "Malformed line %lu in source list %s (dist)" msgstr "Zkomolený řádek %lu v seznamu zdrojů %s (dist)" -#: apt-pkg/sourcelist.cc:99 +#: apt-pkg/sourcelist.cc:92 #, c-format msgid "Malformed line %lu in source list %s (URI parse)" msgstr "Zkomolený řádek %lu v seznamu zdrojů %s (zpracování URI)" -#: apt-pkg/sourcelist.cc:105 +#: apt-pkg/sourcelist.cc:98 #, c-format msgid "Malformed line %lu in source list %s (absolute dist)" msgstr "Zkomolený řádek %lu v seznamu zdrojů %s (Absolutní dist)" -#: apt-pkg/sourcelist.cc:112 +#: apt-pkg/sourcelist.cc:105 #, c-format msgid "Malformed line %lu in source list %s (dist parse)" msgstr "Zkomolený řádek %lu v seznamu zdrojů %s (zpracování dist)" -#: apt-pkg/sourcelist.cc:203 +#: apt-pkg/sourcelist.cc:156 #, c-format msgid "Opening %s" msgstr "Otevírám %s" -#: apt-pkg/sourcelist.cc:220 apt-pkg/cdrom.cc:426 +#: apt-pkg/sourcelist.cc:170 apt-pkg/cdrom.cc:450 #, c-format msgid "Line %u too long in source list %s." msgstr "Řádek %u v seznamu zdrojů %s je příliš dlouhý." -#: apt-pkg/sourcelist.cc:240 +#: apt-pkg/sourcelist.cc:187 #, c-format msgid "Malformed line %u in source list %s (type)" msgstr "Zkomolený řádek %u v seznamu zdrojů %s (typ)" -#: apt-pkg/sourcelist.cc:244 +#: apt-pkg/sourcelist.cc:191 #, c-format msgid "Type '%s' is not known on line %u in source list %s" msgstr "Typ '%s' na řádce %u v seznamu zdrojů %s není známý" -#: apt-pkg/sourcelist.cc:252 apt-pkg/sourcelist.cc:255 +#: apt-pkg/sourcelist.cc:199 apt-pkg/sourcelist.cc:202 #, c-format msgid "Malformed line %u in source list %s (vendor id)" msgstr "Zkomolený řádek %u v seznamu zdrojů %s (id výrobce)" @@ -2387,7 +2380,7 @@ msgstr "Adresář seznamů %spartial chybí." msgid "Archive directory %spartial is missing." msgstr "Archivní adresář %spartial chybí." -#: apt-pkg/acquire.cc:821 +#: apt-pkg/acquire.cc:817 #, c-format msgid "Downloading file %li of %li (%s remaining)" msgstr "Stahuji soubor %li z %li (%s zbývá)" @@ -2407,12 +2400,12 @@ msgstr "Metoda %s nebyla spuštěna správně" msgid "Please insert the disc labeled: '%s' in the drive '%s' and press enter." msgstr "Vložte prosím disk nazvaný '%s' do mechaniky '%s' a stiskněte enter." -#: apt-pkg/init.cc:120 +#: apt-pkg/init.cc:122 #, c-format msgid "Packaging system '%s' is not supported" msgstr "Balíčkovací systém '%s' není podporován" -#: apt-pkg/init.cc:136 +#: apt-pkg/init.cc:138 msgid "Unable to determine a suitable packaging system type" msgstr "Nebylo možno určit vhodný typ balíčkovacího systému" @@ -2456,88 +2449,104 @@ msgstr "Cache má nekompatibilní systém správy verzí" msgid "Error occurred while processing %s (NewPackage)" msgstr "Při zpracování %s se objevila chyba (NewPackage)" -#: apt-pkg/pkgcachegen.cc:129 +#: apt-pkg/pkgcachegen.cc:132 #, c-format msgid "Error occurred while processing %s (UsePackage1)" msgstr "Při zpracování %s se objevila chyba (UsePackage1)" -#: apt-pkg/pkgcachegen.cc:150 +#: apt-pkg/pkgcachegen.cc:155 +#, fuzzy, c-format +msgid "Error occured while processing %s (NewFileDesc1)" +msgstr "Při zpracování %s se objevila chyba (NewFileVer1)" + +#: apt-pkg/pkgcachegen.cc:180 #, c-format msgid "Error occurred while processing %s (UsePackage2)" msgstr "Při zpracování %s se objevila chyba (UsePackage2)" -#: apt-pkg/pkgcachegen.cc:154 +#: apt-pkg/pkgcachegen.cc:184 #, c-format msgid "Error occurred while processing %s (NewFileVer1)" msgstr "Při zpracování %s se objevila chyba (NewFileVer1)" -#: apt-pkg/pkgcachegen.cc:184 +#: apt-pkg/pkgcachegen.cc:215 #, c-format msgid "Error occurred while processing %s (NewVersion1)" msgstr "Při zpracování %s se objevila chyba (NewVersion1)" -#: apt-pkg/pkgcachegen.cc:188 +#: apt-pkg/pkgcachegen.cc:219 #, c-format msgid "Error occurred while processing %s (UsePackage3)" msgstr "Při zpracování %s se objevila chyba (UsePackage3)" -#: apt-pkg/pkgcachegen.cc:192 +#: apt-pkg/pkgcachegen.cc:223 #, c-format msgid "Error occurred while processing %s (NewVersion2)" msgstr "Při zpracování %s se objevila chyba (NewVersion2)" -#: apt-pkg/pkgcachegen.cc:207 +#: apt-pkg/pkgcachegen.cc:247 +#, fuzzy, c-format +msgid "Error occured while processing %s (NewFileDesc2)" +msgstr "Při zpracování %s se objevila chyba (NewFileVer1)" + +#: apt-pkg/pkgcachegen.cc:253 msgid "Wow, you exceeded the number of package names this APT is capable of." msgstr "" "Wow, překročili jste počet jmen balíků, které tato APT zvládá zpracovat." -#: apt-pkg/pkgcachegen.cc:210 +#: apt-pkg/pkgcachegen.cc:256 msgid "Wow, you exceeded the number of versions this APT is capable of." msgstr "Wow, překročili jste počet verzí, které tato APT zvládá zpracovat." -#: apt-pkg/pkgcachegen.cc:213 +#: apt-pkg/pkgcachegen.cc:259 +#, fuzzy +msgid "Wow, you exceeded the number of descriptions this APT is capable of." +msgstr "Wow, překročili jste počet verzí, které tato APT zvládá zpracovat." + +#: apt-pkg/pkgcachegen.cc:262 msgid "Wow, you exceeded the number of dependencies this APT is capable of." msgstr "" "Wow, překročili jste počet závislostí, které tato APT zvládá zpracovat." -#: apt-pkg/pkgcachegen.cc:241 +#: apt-pkg/pkgcachegen.cc:290 #, c-format msgid "Error occurred while processing %s (FindPkg)" msgstr "Chyba při zpracování %s (FindPkg)" -#: apt-pkg/pkgcachegen.cc:254 +#: apt-pkg/pkgcachegen.cc:303 #, c-format msgid "Error occurred while processing %s (CollectFileProvides)" msgstr "Při zpracování %s se objevila chyba (CollectFileProvides)" -#: apt-pkg/pkgcachegen.cc:260 +#: apt-pkg/pkgcachegen.cc:309 #, c-format msgid "Package %s %s was not found while processing file dependencies" msgstr "Při zpracování závislostí nebyl nalezen balík %s %s" -#: apt-pkg/pkgcachegen.cc:574 +#: apt-pkg/pkgcachegen.cc:679 #, c-format msgid "Couldn't stat source package list %s" msgstr "Nešlo vyhodnotit seznam zdrojových balíků %s" -#: apt-pkg/pkgcachegen.cc:658 +#: apt-pkg/pkgcachegen.cc:763 msgid "Collecting File Provides" msgstr "Collecting File poskytuje" -#: apt-pkg/pkgcachegen.cc:785 apt-pkg/pkgcachegen.cc:792 +#: apt-pkg/pkgcachegen.cc:890 apt-pkg/pkgcachegen.cc:897 msgid "IO Error saving source cache" msgstr "Chyba IO při ukládání zdrojové cache" -#: apt-pkg/acquire-item.cc:126 +#: apt-pkg/acquire-item.cc:129 #, c-format msgid "rename failed, %s (%s -> %s)." msgstr "přejmenování selhalo, %s (%s -> %s)." -#: apt-pkg/acquire-item.cc:236 apt-pkg/acquire-item.cc:911 +#: apt-pkg/acquire-item.cc:391 apt-pkg/acquire-item.cc:635 +#: apt-pkg/acquire-item.cc:1336 msgid "MD5Sum mismatch" msgstr "Neshoda MD5 součtů" -#: apt-pkg/acquire-item.cc:719 +#: apt-pkg/acquire-item.cc:1150 #, c-format msgid "" "I wasn't able to locate a file for the %s package. This might mean you need " @@ -2546,7 +2555,7 @@ msgstr "" "Nebyl jsem schopen nalézt soubor s balíkem %s. To by mohlo znamenat, že " "tento balík je třeba opravit ručně (kvůli chybějící architektuře)" -#: apt-pkg/acquire-item.cc:778 +#: apt-pkg/acquire-item.cc:1203 #, c-format msgid "" "I wasn't able to locate file for the %s package. This might mean you need to " @@ -2555,14 +2564,14 @@ msgstr "" "Nebyl jsem schopen nalézt soubor s balíkem %s. Asi budete muset tento balík " "opravit ručně." -#: apt-pkg/acquire-item.cc:814 +#: apt-pkg/acquire-item.cc:1239 #, c-format msgid "" "The package index files are corrupted. No Filename: field for package %s." msgstr "" "Indexové soubory balíku jsou narušeny. Chybí pole Filename: u balíku %s." -#: apt-pkg/acquire-item.cc:901 +#: apt-pkg/acquire-item.cc:1326 msgid "Size mismatch" msgstr "Velikosti nesouhlasí" @@ -2571,7 +2580,7 @@ msgstr "Velikosti nesouhlasí" msgid "Vendor block %s contains no fingerprint" msgstr "Blok výrobce %s neobsahuje otisk klíče" -#: apt-pkg/cdrom.cc:507 +#: apt-pkg/cdrom.cc:531 #, c-format msgid "" "Using CD-ROM mount point %s\n" @@ -2580,47 +2589,49 @@ msgstr "" "Používám přípojný bod %s\n" "Připojuji CD-ROM\n" -#: apt-pkg/cdrom.cc:516 apt-pkg/cdrom.cc:598 +#: apt-pkg/cdrom.cc:540 apt-pkg/cdrom.cc:622 msgid "Identifying.. " msgstr "Rozpoznávám... " -#: apt-pkg/cdrom.cc:541 +#: apt-pkg/cdrom.cc:565 #, c-format msgid "Stored label: %s \n" msgstr "Uložený název: %s \n" -#: apt-pkg/cdrom.cc:561 +#: apt-pkg/cdrom.cc:585 #, c-format msgid "Using CD-ROM mount point %s\n" msgstr "Používám přípojný bod %s\n" -#: apt-pkg/cdrom.cc:579 +#: apt-pkg/cdrom.cc:603 msgid "Unmounting CD-ROM\n" msgstr "Odpojuji CD-ROM\n" -#: apt-pkg/cdrom.cc:583 +#: apt-pkg/cdrom.cc:607 msgid "Waiting for disc...\n" msgstr "Čekám na disk...\n" #. Mount the new CDROM -#: apt-pkg/cdrom.cc:591 +#: apt-pkg/cdrom.cc:615 msgid "Mounting CD-ROM...\n" msgstr "Připojuji CD-ROM...\n" -#: apt-pkg/cdrom.cc:609 +#: apt-pkg/cdrom.cc:633 msgid "Scanning disc for index files..\n" msgstr "Hledám na disku indexové soubory...\n" -#: apt-pkg/cdrom.cc:647 -#, c-format -msgid "Found %i package indexes, %i source indexes and %i signatures\n" +#: apt-pkg/cdrom.cc:673 +#, fuzzy, c-format +msgid "" +"Found %i package indexes, %i source indexes, %i translation indexes and %i " +"signatures\n" msgstr "Nalezl jsem indexy balíků (%i), indexy zdrojů (%i) a podpisy (%i)\n" -#: apt-pkg/cdrom.cc:710 +#: apt-pkg/cdrom.cc:737 msgid "That is not a valid name, try again.\n" msgstr "Nejedná se o platné jméno, zkuste to znovu.\n" -#: apt-pkg/cdrom.cc:726 +#: apt-pkg/cdrom.cc:753 #, c-format msgid "" "This disc is called: \n" @@ -2629,38 +2640,38 @@ msgstr "" "Tento disk se nazývá: \n" "'%s'\n" -#: apt-pkg/cdrom.cc:730 +#: apt-pkg/cdrom.cc:757 msgid "Copying package lists..." msgstr "Kopíruji seznamy balíků..." -#: apt-pkg/cdrom.cc:754 +#: apt-pkg/cdrom.cc:783 msgid "Writing new source list\n" msgstr "Zapisuji nový seznam balíků\n" -#: apt-pkg/cdrom.cc:763 +#: apt-pkg/cdrom.cc:792 msgid "Source list entries for this disc are:\n" msgstr "Seznamy zdrojů na tomto disku jsou:\n" -#: apt-pkg/cdrom.cc:803 +#: apt-pkg/cdrom.cc:832 msgid "Unmounting CD-ROM..." msgstr "Odpojuji CD-ROM..." -#: apt-pkg/indexcopy.cc:261 +#: apt-pkg/indexcopy.cc:263 apt-pkg/indexcopy.cc:830 #, c-format msgid "Wrote %i records.\n" msgstr "Zapsal jsem %i záznamů.\n" -#: 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 "Zapsal jsem %i záznamů s chybějícími soubory (%i).\n" -#: 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 "Zapsal jsem %i záznamů s nesouhlasícími soubory (%i).\n" -#: 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 "" @@ -2716,6 +2727,24 @@ msgstr "Připravuji odstranění %s včetně konfiguračních souborů" msgid "Removed with config %s" msgstr "Odstraněn %s včetně konfiguračního souboru" +#: methods/rred.cc:219 +#, fuzzy +msgid "Could not patch file" +msgstr "Nemohu otevřít soubor %s" + #: methods/rsh.cc:330 msgid "Connection closed prematurely" msgstr "Spojení bylo předčasně ukončeno" + +#~ msgid "Please provide a name for this Disc, such as 'Debian 2.1r1 Disk 1'" +#~ msgstr "Zadejte prosím název tohoto média, např. 'Debian 2.1r1 Disk 1'" + +#~ msgid "Please insert a Disc in the drive and press enter" +#~ msgstr "Vložte prosím médium do mechaniky a stiskněte enter" + +#~ msgid "Repeat this process for the rest of the CDs in your set." +#~ msgstr "Tento proces opakujte pro všechna zbývající média." + +#, fuzzy +#~ msgid "Skiping already downloaded file '%s'\n" +#~ msgstr "Přeskakuji rozbalení již rozbaleného zdroje v %s\n" @@ -8,7 +8,7 @@ msgid "" msgstr "" "Project-Id-Version: apt-da\n" "Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2006-01-04 18:51+0100\n" +"POT-Creation-Date: 2005-10-17 19:31+0200\n" "PO-Revision-Date: 2005-11-07 15:28+0100\n" "Last-Translator: Claus Hindsgaul <claus_h@image.dk>\n" "Language-Team: Danish <dansk@klid.dk>\n" @@ -18,147 +18,157 @@ msgstr "" "X-Generator: KBabel 1.10.2\n" "Plural-Forms: nplurals=2; plural=(n != 1);\n" -#: cmdline/apt-cache.cc:135 +#: cmdline/apt-cache.cc:141 #, c-format msgid "Package %s version %s has an unmet dep:\n" msgstr "Pakken %s version %s har en uopfyldt afh�ngighed:\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 +#: 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:1419 cmdline/apt-cache.cc:1570 #, c-format msgid "Unable to locate package %s" msgstr "Kunne ikke lokalisere pakken %s" -#: cmdline/apt-cache.cc:232 +#: cmdline/apt-cache.cc:245 msgid "Total package names : " msgstr "Totale pakkenavne : " -#: cmdline/apt-cache.cc:272 +#: cmdline/apt-cache.cc:285 msgid " Normal packages: " msgstr " Normale pakker: " -#: cmdline/apt-cache.cc:273 +#: cmdline/apt-cache.cc:286 msgid " Pure virtual packages: " msgstr " Rene virtuelle pakker: " -#: cmdline/apt-cache.cc:274 +#: cmdline/apt-cache.cc:287 msgid " Single virtual packages: " msgstr " Enkelte virtuelle pakker: " -#: cmdline/apt-cache.cc:275 +#: cmdline/apt-cache.cc:288 msgid " Mixed virtual packages: " msgstr " Blandede virtuelle pakker: " -#: cmdline/apt-cache.cc:276 +#: cmdline/apt-cache.cc:289 msgid " Missing: " msgstr " Manglende: " -#: cmdline/apt-cache.cc:278 +#: cmdline/apt-cache.cc:291 msgid "Total distinct versions: " msgstr "Totale forskellige versioner: " -#: cmdline/apt-cache.cc:280 +#: cmdline/apt-cache.cc:293 +#, fuzzy +msgid "Total Distinct Descriptions: " +msgstr "Totale forskellige versioner: " + +#: cmdline/apt-cache.cc:295 msgid "Total dependencies: " msgstr "Totale afh�ngigheder: " -#: cmdline/apt-cache.cc:283 +#: cmdline/apt-cache.cc:298 msgid "Total ver/file relations: " msgstr "Totale version/fil-relationer: " -#: cmdline/apt-cache.cc:285 +#: cmdline/apt-cache.cc:300 +#, fuzzy +msgid "Total Desc/File relations: " +msgstr "Totale version/fil-relationer: " + +#: cmdline/apt-cache.cc:302 msgid "Total Provides mappings: " msgstr "Totale 'tilbyder'-markeringer: " -#: cmdline/apt-cache.cc:297 +#: cmdline/apt-cache.cc:314 msgid "Total globbed strings: " msgstr "Totalle s�gem�nsterstrenge: " -#: cmdline/apt-cache.cc:311 +#: cmdline/apt-cache.cc:328 msgid "Total dependency version space: " msgstr "Total afh�ngighedsversions-plads: " -#: cmdline/apt-cache.cc:316 +#: cmdline/apt-cache.cc:333 msgid "Total slack space: " msgstr "Total 'Slack'-plads: " -#: cmdline/apt-cache.cc:324 +#: cmdline/apt-cache.cc:341 msgid "Total space accounted for: " msgstr "Total plads, der kan g�res rede for: " -#: 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 "Pakkefilen %s er ude af trit." -#: cmdline/apt-cache.cc:1231 +#: cmdline/apt-cache.cc:1293 msgid "You must give exactly one pattern" msgstr "Du skal angive n�jagtig �t m�nster" -#: cmdline/apt-cache.cc:1385 +#: cmdline/apt-cache.cc:1447 msgid "No packages found" msgstr "Fandt ingen pakker" # Overskriften til apt-cache policy, # forkorter "Package" v�k. CH -#: cmdline/apt-cache.cc:1462 +#: cmdline/apt-cache.cc:1524 msgid "Package files:" msgstr "Pakkefiler:" -#: cmdline/apt-cache.cc:1469 cmdline/apt-cache.cc:1555 +#: cmdline/apt-cache.cc:1531 cmdline/apt-cache.cc:1617 msgid "Cache is out of sync, can't x-ref a package file" msgstr "Mellemlageret er ude af trit, kan ikke krydsreferere en pakkefil" -#: cmdline/apt-cache.cc:1470 +#: cmdline/apt-cache.cc:1532 #, c-format msgid "%4i %s\n" msgstr "%4i %s\n" #. Show any packages have explicit pins -#: cmdline/apt-cache.cc:1482 +#: cmdline/apt-cache.cc:1544 msgid "Pinned packages:" msgstr "'Pinned' pakker:" -#: cmdline/apt-cache.cc:1494 cmdline/apt-cache.cc:1535 +#: cmdline/apt-cache.cc:1556 cmdline/apt-cache.cc:1597 msgid "(not found)" msgstr "(ikke fundet)" #. Installed version -#: cmdline/apt-cache.cc:1515 +#: cmdline/apt-cache.cc:1577 msgid " Installed: " msgstr " Installeret: " -#: cmdline/apt-cache.cc:1517 cmdline/apt-cache.cc:1525 +#: cmdline/apt-cache.cc:1579 cmdline/apt-cache.cc:1587 msgid "(none)" msgstr "(ingen)" #. Candidate Version -#: cmdline/apt-cache.cc:1522 +#: cmdline/apt-cache.cc:1584 msgid " Candidate: " msgstr " Kandidat: " -#: cmdline/apt-cache.cc:1532 +#: cmdline/apt-cache.cc:1594 msgid " Package pin: " msgstr " Pakke-pin: " #. Show the priority tables -#: cmdline/apt-cache.cc:1541 +#: cmdline/apt-cache.cc:1603 msgid " Version table:" msgstr " Versionstabel:" -#: cmdline/apt-cache.cc:1556 +#: cmdline/apt-cache.cc:1618 #, c-format msgid " %4i %s\n" msgstr " %4i %s\n" -#: cmdline/apt-cache.cc:1651 cmdline/apt-cdrom.cc:138 cmdline/apt-config.cc:70 +#: cmdline/apt-cache.cc:1713 cmdline/apt-cdrom.cc:138 cmdline/apt-config.cc:70 #: cmdline/apt-extracttemplates.cc:225 ftparchive/apt-ftparchive.cc:550 -#: cmdline/apt-get.cc:2378 cmdline/apt-sortpkgs.cc:144 +#: cmdline/apt-get.cc:2325 cmdline/apt-sortpkgs.cc:144 #, c-format msgid "%s %s for %s %s compiled on %s %s\n" msgstr "%s %s for %s %s oversat p� %s %s\n" -#: cmdline/apt-cache.cc:1658 +#: cmdline/apt-cache.cc:1720 msgid "" "Usage: apt-cache [options] command\n" " apt-cache [options] add file1 [file2 ...]\n" @@ -232,18 +242,6 @@ msgstr "" " -o=? Angiv et ops�tningstilvalg. F.eks. -o dir::cache=/tmp\n" "Se manualsiderne for apt-cache(8) og apt.conf(5) for flere oplysninger.\n" -#: cmdline/apt-cdrom.cc:78 -msgid "Please provide a name for this Disc, such as 'Debian 2.1r1 Disk 1'" -msgstr "Angiv et navn for denne disk, som f.eks. 'Debian 2.1r1 Disk 1'" - -#: cmdline/apt-cdrom.cc:93 -msgid "Please insert a Disc in the drive and press enter" -msgstr "Inds�t en disk i drevet og tryk retur" - -#: cmdline/apt-cdrom.cc:117 -msgid "Repeat this process for the rest of the CDs in your set." -msgstr "Gentag processen for resten af cd'erne i dit s�t." - #: cmdline/apt-config.cc:41 msgid "Arguments not in pairs" msgstr "Parametre ikke angivet i par" @@ -305,7 +303,7 @@ msgstr "" " -c=? L�s denne ops�tningsfil\n" " -o=? Angiv et ops�tningstilvalg. F.eks. -o dir::cache=/tmp\n" -#: cmdline/apt-extracttemplates.cc:267 apt-pkg/pkgcachegen.cc:710 +#: cmdline/apt-extracttemplates.cc:267 apt-pkg/pkgcachegen.cc:815 #, c-format msgid "Unable to write to %s" msgstr "Kunne ikke skrive til %s" @@ -526,12 +524,12 @@ msgstr "Kunne ikke finde %s" msgid "Archive had no package field" msgstr "Arkivet havde intet package-felt" -#: ftparchive/writer.cc:394 ftparchive/writer.cc:603 +#: ftparchive/writer.cc:394 ftparchive/writer.cc:602 #, c-format msgid " %s has no override entry\n" msgstr " %s har ingen tvangs-post\n" -#: ftparchive/writer.cc:437 ftparchive/writer.cc:689 +#: ftparchive/writer.cc:437 ftparchive/writer.cc:688 #, c-format msgid " %s maintainer is %s not %s\n" msgstr " pakkeansvarlig for %s er %s, ikke %s\n" @@ -631,79 +629,79 @@ msgstr "Problem under afl�nkning af %s" msgid "Failed to rename %s to %s" msgstr "Kunne ikke omd�be %s til %s" -#: cmdline/apt-get.cc:120 +#: cmdline/apt-get.cc:118 msgid "Y" msgstr "J" -#: cmdline/apt-get.cc:142 cmdline/apt-get.cc:1515 +#: cmdline/apt-get.cc:140 cmdline/apt-get.cc:1486 #, c-format msgid "Regex compilation error - %s" msgstr "Fejl ved tolkning af regul�rt udtryk - %s" -#: cmdline/apt-get.cc:237 +#: cmdline/apt-get.cc:235 msgid "The following packages have unmet dependencies:" msgstr "F�lgende pakker har uopfyldte afh�ngigheder:" -#: cmdline/apt-get.cc:327 +#: cmdline/apt-get.cc:325 #, c-format msgid "but %s is installed" msgstr "men %s er installeret" -#: cmdline/apt-get.cc:329 +#: cmdline/apt-get.cc:327 #, c-format msgid "but %s is to be installed" msgstr "men %s forventes installeret" -#: cmdline/apt-get.cc:336 +#: cmdline/apt-get.cc:334 msgid "but it is not installable" msgstr "men den kan ikke installeres" -#: cmdline/apt-get.cc:338 +#: cmdline/apt-get.cc:336 msgid "but it is a virtual package" msgstr "men det er en virtuel pakke" -#: cmdline/apt-get.cc:341 +#: cmdline/apt-get.cc:339 msgid "but it is not installed" msgstr "men den er ikke installeret" -#: cmdline/apt-get.cc:341 +#: cmdline/apt-get.cc:339 msgid "but it is not going to be installed" msgstr "men den bliver ikke installeret" -#: cmdline/apt-get.cc:346 +#: cmdline/apt-get.cc:344 msgid " or" msgstr " eller" -#: cmdline/apt-get.cc:375 +#: cmdline/apt-get.cc:373 msgid "The following NEW packages will be installed:" msgstr "F�lgende NYE pakker vil blive installeret:" -#: cmdline/apt-get.cc:401 +#: cmdline/apt-get.cc:399 msgid "The following packages will be REMOVED:" msgstr "F�lgende pakker vil blive AFINSTALLERET:" -#: cmdline/apt-get.cc:423 +#: cmdline/apt-get.cc:421 msgid "The following packages have been kept back:" msgstr "F�lgende pakker er blevet holdt tilbage:" -#: cmdline/apt-get.cc:444 +#: cmdline/apt-get.cc:442 msgid "The following packages will be upgraded:" msgstr "F�lgende pakker vil blive opgraderet:" -#: cmdline/apt-get.cc:465 +#: cmdline/apt-get.cc:463 msgid "The following packages will be DOWNGRADED:" msgstr "F�lgende pakker vil blive NEDGRADERET:" -#: cmdline/apt-get.cc:485 +#: cmdline/apt-get.cc:483 msgid "The following held packages will be changed:" msgstr "F�lgende tilbageholdte pakker vil blive �ndret:" -#: cmdline/apt-get.cc:538 +#: cmdline/apt-get.cc:536 #, c-format msgid "%s (due to %s) " msgstr "%s (grundet %s) " -#: cmdline/apt-get.cc:546 +#: cmdline/apt-get.cc:544 msgid "" "WARNING: The following essential packages will be removed.\n" "This should NOT be done unless you know exactly what you are doing!" @@ -711,143 +709,143 @@ msgstr "" "ADVARSEL: F�lgende essentielle pakker vil blive afinstalleret\n" "Dette b�r IKKE ske medmindre du er helt klar over, hvad du laver!" -#: cmdline/apt-get.cc:577 +#: cmdline/apt-get.cc:575 #, c-format msgid "%lu upgraded, %lu newly installed, " msgstr "%lu opgraderes, %lu nyinstalleres, " -#: cmdline/apt-get.cc:581 +#: cmdline/apt-get.cc:579 #, c-format msgid "%lu reinstalled, " msgstr "%lu geninstalleres, " -#: cmdline/apt-get.cc:583 +#: cmdline/apt-get.cc:581 #, c-format msgid "%lu downgraded, " msgstr "%lu nedgraderes, " -#: cmdline/apt-get.cc:585 +#: cmdline/apt-get.cc:583 #, c-format msgid "%lu to remove and %lu not upgraded.\n" msgstr "%lu afinstalleres og %lu opgraderes ikke.\n" -#: cmdline/apt-get.cc:589 +#: cmdline/apt-get.cc:587 #, c-format msgid "%lu not fully installed or removed.\n" msgstr "%lu ikke fuldst�ndigt installerede eller afinstallerede.\n" -#: cmdline/apt-get.cc:649 +#: cmdline/apt-get.cc:647 msgid "Correcting dependencies..." msgstr "Retter afh�ngigheder..." -#: cmdline/apt-get.cc:652 +#: cmdline/apt-get.cc:650 msgid " failed." msgstr " mislykkedes." -#: cmdline/apt-get.cc:655 +#: cmdline/apt-get.cc:653 msgid "Unable to correct dependencies" msgstr "Kunne ikke rette afh�ngigheder" -#: cmdline/apt-get.cc:658 +#: cmdline/apt-get.cc:656 msgid "Unable to minimize the upgrade set" msgstr "Kunne ikke minimere opgraderingss�ttet" -#: cmdline/apt-get.cc:660 +#: cmdline/apt-get.cc:658 msgid " Done" msgstr " F�rdig" -#: cmdline/apt-get.cc:664 +#: cmdline/apt-get.cc:662 msgid "You might want to run `apt-get -f install' to correct these." msgstr "Du kan muligvis rette dette ved at k�re 'apt-get -f install'." -#: cmdline/apt-get.cc:667 +#: cmdline/apt-get.cc:665 msgid "Unmet dependencies. Try using -f." msgstr "Uopfyldte afh�ngigheder. Pr�v med -f." -#: cmdline/apt-get.cc:689 +#: cmdline/apt-get.cc:687 msgid "WARNING: The following packages cannot be authenticated!" msgstr "ADVARSEL: F�lgende pakkers autensitet kunne ikke verificeres!" -#: cmdline/apt-get.cc:693 +#: cmdline/apt-get.cc:691 msgid "Authentication warning overridden.\n" msgstr "Autentifikationsadvarsel tilsidesat.\n" -#: cmdline/apt-get.cc:700 +#: cmdline/apt-get.cc:698 msgid "Install these packages without verification [y/N]? " msgstr "Install�r disse pakker uden verifikation (y/N)? " -#: cmdline/apt-get.cc:702 +#: cmdline/apt-get.cc:700 msgid "Some packages could not be authenticated" msgstr "Nogle pakker kunne ikke autentificeres" -#: cmdline/apt-get.cc:711 cmdline/apt-get.cc:858 +#: cmdline/apt-get.cc:709 cmdline/apt-get.cc:856 msgid "There are problems and -y was used without --force-yes" msgstr "Der er problemer og -y blev brugt uden --force-yes" -#: cmdline/apt-get.cc:755 +#: cmdline/apt-get.cc:753 msgid "Internal error, InstallPackages was called with broken packages!" msgstr "Intern fejl. InstallPackages blev kaldt med �delagte pakker!" -#: cmdline/apt-get.cc:764 +#: cmdline/apt-get.cc:762 msgid "Packages need to be removed but remove is disabled." msgstr "Pakker skal afinstalleres, men Remove er deaktiveret." -#: cmdline/apt-get.cc:775 +#: cmdline/apt-get.cc:773 msgid "Internal error, Ordering didn't finish" msgstr "Intern fejl. Sortering blev ikke fuldf�rt" -#: cmdline/apt-get.cc:791 cmdline/apt-get.cc:1809 cmdline/apt-get.cc:1842 +#: cmdline/apt-get.cc:789 cmdline/apt-get.cc:1780 cmdline/apt-get.cc:1813 msgid "Unable to lock the download directory" msgstr "Kunne ikke l�se nedhentningsmappen" -#: cmdline/apt-get.cc:801 cmdline/apt-get.cc:1890 cmdline/apt-get.cc:2126 +#: cmdline/apt-get.cc:799 cmdline/apt-get.cc:1861 cmdline/apt-get.cc:2073 #: apt-pkg/cachefile.cc:67 msgid "The list of sources could not be read." msgstr "Listen med kilder kunne ikke l�ses." -#: cmdline/apt-get.cc:816 +#: cmdline/apt-get.cc:814 msgid "How odd.. The sizes didn't match, email apt@packages.debian.org" msgstr "Mystisk.. St�rrelserne passede ikke, skriv til apt@packages.debian.org" -#: cmdline/apt-get.cc:821 +#: cmdline/apt-get.cc:819 #, c-format msgid "Need to get %sB/%sB of archives.\n" msgstr "%sB/%sB skal hentes fra arkiverne.\n" -#: cmdline/apt-get.cc:824 +#: cmdline/apt-get.cc:822 #, c-format msgid "Need to get %sB of archives.\n" msgstr "%sB skal hentes fra arkiverne.\n" -#: cmdline/apt-get.cc:829 +#: cmdline/apt-get.cc:827 #, c-format msgid "After unpacking %sB of additional disk space will be used.\n" msgstr "Efter udpakning vil %sB yderligere diskplads v�re brugt.\n" -#: cmdline/apt-get.cc:832 +#: cmdline/apt-get.cc:830 #, c-format msgid "After unpacking %sB disk space will be freed.\n" msgstr "Efter udpakning vil %sB diskplads blive frigjort.\n" -#: cmdline/apt-get.cc:846 cmdline/apt-get.cc:1980 +#: cmdline/apt-get.cc:844 cmdline/apt-get.cc:1927 #, c-format msgid "Couldn't determine free space in %s" msgstr "Kunne ikke bestemme ledig plads i %s" -#: cmdline/apt-get.cc:849 +#: cmdline/apt-get.cc:847 #, c-format msgid "You don't have enough free space in %s." msgstr "Du har ikke nok ledig plads i %s." -#: cmdline/apt-get.cc:864 cmdline/apt-get.cc:884 +#: cmdline/apt-get.cc:862 cmdline/apt-get.cc:882 msgid "Trivial Only specified but this is not a trivial operation." msgstr "'Trivial Only' angivet, men dette er ikke en triviel handling." -#: cmdline/apt-get.cc:866 +#: cmdline/apt-get.cc:864 msgid "Yes, do as I say!" msgstr "Ja, g�r som jeg siger!" -#: cmdline/apt-get.cc:868 +#: cmdline/apt-get.cc:866 #, c-format msgid "" "You are about to do something potentially harmful.\n" @@ -858,28 +856,28 @@ msgstr "" "For at forts�tte, skal du skrive '%s'\n" " ?] " -#: cmdline/apt-get.cc:874 cmdline/apt-get.cc:893 +#: cmdline/apt-get.cc:872 cmdline/apt-get.cc:891 msgid "Abort." msgstr "Afbryder." -#: cmdline/apt-get.cc:889 +#: cmdline/apt-get.cc:887 msgid "Do you want to continue [Y/n]? " msgstr "Vil du forts�tte [J/n]? " -#: cmdline/apt-get.cc:961 cmdline/apt-get.cc:1365 cmdline/apt-get.cc:2023 +#: cmdline/apt-get.cc:959 cmdline/apt-get.cc:1336 cmdline/apt-get.cc:1970 #, c-format msgid "Failed to fetch %s %s\n" msgstr "Kunne ikke hente %s %s\n" -#: cmdline/apt-get.cc:979 +#: cmdline/apt-get.cc:977 msgid "Some files failed to download" msgstr "Nedhentningen af filer mislykkedes" -#: cmdline/apt-get.cc:980 cmdline/apt-get.cc:2032 +#: cmdline/apt-get.cc:978 cmdline/apt-get.cc:1979 msgid "Download complete and in download only mode" msgstr "Nedhentning afsluttet i 'hent-kun'-tilstand" -#: cmdline/apt-get.cc:986 +#: cmdline/apt-get.cc:984 msgid "" "Unable to fetch some archives, maybe run apt-get update or try with --fix-" "missing?" @@ -887,49 +885,49 @@ msgstr "" "Kunne ikke hente nogle af arkiverne. Pr�v evt. at k�re 'apt-get update' " "eller pr�v med --fix-missing." -#: cmdline/apt-get.cc:990 +#: cmdline/apt-get.cc:988 msgid "--fix-missing and media swapping is not currently supported" msgstr "--fix-missing og medieskift underst�ttes endnu ikke" -#: cmdline/apt-get.cc:995 +#: cmdline/apt-get.cc:993 msgid "Unable to correct missing packages." msgstr "Kunne ikke rette manglende pakker." -#: cmdline/apt-get.cc:996 +#: cmdline/apt-get.cc:994 msgid "Aborting install." msgstr "Afbryder installationen." -#: cmdline/apt-get.cc:1030 +#: cmdline/apt-get.cc:1028 #, c-format msgid "Note, selecting %s instead of %s\n" msgstr "Bem�rk, at %s v�lges fremfor %s\n" -#: cmdline/apt-get.cc:1040 +#: cmdline/apt-get.cc:1038 #, c-format msgid "Skipping %s, it is already installed and upgrade is not set.\n" msgstr "" "Overspringer %s, da den allerede er installeret og opgradering er " "deaktiveret.\n" -#: cmdline/apt-get.cc:1058 +#: cmdline/apt-get.cc:1056 #, c-format msgid "Package %s is not installed, so not removed\n" msgstr "Pakken %s er ikke installeret, s� den afinstalleres ikke\n" -#: cmdline/apt-get.cc:1069 +#: cmdline/apt-get.cc:1067 #, c-format msgid "Package %s is a virtual package provided by:\n" msgstr "Pakken %s er en virtuel pakke, der kan leveres af:\n" -#: cmdline/apt-get.cc:1081 +#: cmdline/apt-get.cc:1079 msgid " [Installed]" msgstr " [Installeret]" -#: cmdline/apt-get.cc:1086 +#: cmdline/apt-get.cc:1084 msgid "You should explicitly select one to install." msgstr "Du b�r eksplicit v�lge en at installere." -#: cmdline/apt-get.cc:1091 +#: cmdline/apt-get.cc:1089 #, c-format msgid "" "Package %s is not available, but is referred to by another package.\n" @@ -940,49 +938,49 @@ msgstr "" "anden pakke. Det kan betyde at denne pakke blevet overfl�diggjort eller \n" "kun kan hentes fra andre kilder\n" -#: cmdline/apt-get.cc:1110 +#: cmdline/apt-get.cc:1108 msgid "However the following packages replace it:" msgstr "Dog kan f�lgende pakker erstatte den:" -#: cmdline/apt-get.cc:1113 +#: cmdline/apt-get.cc:1111 #, c-format msgid "Package %s has no installation candidate" msgstr "Pakken %s har ingen installationskandidat" -#: cmdline/apt-get.cc:1133 +#: cmdline/apt-get.cc:1131 #, c-format msgid "Reinstallation of %s is not possible, it cannot be downloaded.\n" msgstr "Geninstallering af %s er ikke mulig, da den ikke kan hentes.\n" -#: cmdline/apt-get.cc:1141 +#: cmdline/apt-get.cc:1139 #, c-format msgid "%s is already the newest version.\n" msgstr "%s er i forvejen den nyeste version.\n" -#: cmdline/apt-get.cc:1168 +#: cmdline/apt-get.cc:1166 #, c-format msgid "Release '%s' for '%s' was not found" msgstr "Udgaven '%s' for '%s' blev ikke fundet" -#: cmdline/apt-get.cc:1170 +#: cmdline/apt-get.cc:1168 #, c-format msgid "Version '%s' for '%s' was not found" msgstr "Versionen '%s' for '%s' blev ikke fundet" -#: cmdline/apt-get.cc:1176 +#: cmdline/apt-get.cc:1174 #, c-format msgid "Selected version %s (%s) for %s\n" msgstr "Valgte version %s (%s) af %s\n" -#: cmdline/apt-get.cc:1313 +#: cmdline/apt-get.cc:1284 msgid "The update command takes no arguments" msgstr "'update'-kommandoen benytter ingen parametre" -#: cmdline/apt-get.cc:1326 cmdline/apt-get.cc:1420 +#: cmdline/apt-get.cc:1297 cmdline/apt-get.cc:1391 msgid "Unable to lock the list directory" msgstr "Kunne ikke l�se listemappen" -#: cmdline/apt-get.cc:1384 +#: cmdline/apt-get.cc:1355 msgid "" "Some index files failed to download, they have been ignored, or old ones " "used instead." @@ -990,25 +988,25 @@ msgstr "" "Nogle indeksfiler kunne ikke hentes, de er blevet ignoreret eller de gamle " "bruges i stedet." -#: cmdline/apt-get.cc:1403 +#: cmdline/apt-get.cc:1374 msgid "Internal error, AllUpgrade broke stuff" msgstr "Intern fejl, AllUpgrade �delagde noget" -#: cmdline/apt-get.cc:1502 cmdline/apt-get.cc:1538 +#: cmdline/apt-get.cc:1473 cmdline/apt-get.cc:1509 #, c-format msgid "Couldn't find package %s" msgstr "Kunne ikke finde pakken %s" -#: cmdline/apt-get.cc:1525 +#: cmdline/apt-get.cc:1496 #, c-format msgid "Note, selecting %s for regex '%s'\n" msgstr "Bem�rk, v�lger %s som regul�rt udtryk '%s'\n" -#: cmdline/apt-get.cc:1555 +#: cmdline/apt-get.cc:1526 msgid "You might want to run `apt-get -f install' to correct these:" msgstr "Du kan muligvis rette det ved at k�re 'apt-get -f install':" -#: cmdline/apt-get.cc:1558 +#: cmdline/apt-get.cc:1529 msgid "" "Unmet dependencies. Try 'apt-get -f install' with no packages (or specify a " "solution)." @@ -1016,7 +1014,7 @@ msgstr "" "Uopfyldte afh�ngigheder. Pr�v 'apt-get -f install' uden pakker (eller angiv " "en l�sning)." -#: cmdline/apt-get.cc:1570 +#: cmdline/apt-get.cc:1541 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" @@ -1027,7 +1025,7 @@ msgstr "" "en umulig situation eller bruger den ustabile distribution, hvor enkelte\n" "pakker endnu ikke er lavet eller gjort tilg�ngelige." -#: cmdline/apt-get.cc:1578 +#: cmdline/apt-get.cc:1549 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" @@ -1036,119 +1034,114 @@ msgstr "" "Siden du kan bad om en enkelt handling, kan pakken h�jst sandsynligt slet\n" "ikke installeres og du b�r indsende en fejlrapport for denne pakke." -#: cmdline/apt-get.cc:1583 +#: cmdline/apt-get.cc:1554 msgid "The following information may help to resolve the situation:" msgstr "F�lgende oplysninger kan hj�lpe dig med at klare situationen:" -#: cmdline/apt-get.cc:1586 +#: cmdline/apt-get.cc:1557 msgid "Broken packages" msgstr "�delagte pakker" -#: cmdline/apt-get.cc:1612 +#: cmdline/apt-get.cc:1583 msgid "The following extra packages will be installed:" msgstr "F�lgende yderligere pakker vil blive installeret:" -#: cmdline/apt-get.cc:1683 +#: cmdline/apt-get.cc:1654 msgid "Suggested packages:" msgstr "Foresl�ede pakker:" -#: cmdline/apt-get.cc:1684 +#: cmdline/apt-get.cc:1655 msgid "Recommended packages:" msgstr "Anbefalede pakker:" -#: cmdline/apt-get.cc:1704 +#: cmdline/apt-get.cc:1675 msgid "Calculating upgrade... " msgstr "Beregner opgraderingen... " -#: cmdline/apt-get.cc:1707 methods/ftp.cc:702 methods/connect.cc:101 +#: cmdline/apt-get.cc:1678 methods/ftp.cc:702 methods/connect.cc:101 msgid "Failed" msgstr "Mislykkedes" -#: cmdline/apt-get.cc:1712 +#: cmdline/apt-get.cc:1683 msgid "Done" msgstr "F�rdig" -#: cmdline/apt-get.cc:1777 cmdline/apt-get.cc:1785 +#: cmdline/apt-get.cc:1748 cmdline/apt-get.cc:1756 msgid "Internal error, problem resolver broke stuff" msgstr "Intern fejl. Probleml�seren �delagde noget" -#: cmdline/apt-get.cc:1885 +#: cmdline/apt-get.cc:1856 msgid "Must specify at least one package to fetch source for" msgstr "Du skal angive mindst �n pakke at hente kildeteksten til" -#: cmdline/apt-get.cc:1915 cmdline/apt-get.cc:2144 +#: cmdline/apt-get.cc:1883 cmdline/apt-get.cc:2091 #, c-format msgid "Unable to find a source package for %s" msgstr "Kunne ikke finde kildetekstpakken for %s" -#: cmdline/apt-get.cc:1959 -#, fuzzy, c-format -msgid "Skiping already downloaded file '%s'\n" -msgstr "Overspringer udpakning af allerede udpakket kildetekst i %s\n" - -#: cmdline/apt-get.cc:1983 +#: cmdline/apt-get.cc:1930 #, c-format msgid "You don't have enough free space in %s" msgstr "Du har ikke nok ledig plads i %s" -#: cmdline/apt-get.cc:1988 +#: cmdline/apt-get.cc:1935 #, c-format msgid "Need to get %sB/%sB of source archives.\n" msgstr "%sB/%sB skal hentes fra kildetekst-arkiverne.\n" -#: cmdline/apt-get.cc:1991 +#: cmdline/apt-get.cc:1938 #, c-format msgid "Need to get %sB of source archives.\n" msgstr "%sB skal hentes fra kildetekst-arkiverne.\n" -#: cmdline/apt-get.cc:1997 +#: cmdline/apt-get.cc:1944 #, c-format msgid "Fetch source %s\n" msgstr "Henter kildetekst %s\n" -#: cmdline/apt-get.cc:2028 +#: cmdline/apt-get.cc:1975 msgid "Failed to fetch some archives." msgstr "Nogle arkiver kunne ikke hentes." -#: cmdline/apt-get.cc:2056 +#: cmdline/apt-get.cc:2003 #, c-format msgid "Skipping unpack of already unpacked source in %s\n" msgstr "Overspringer udpakning af allerede udpakket kildetekst i %s\n" -#: cmdline/apt-get.cc:2068 +#: cmdline/apt-get.cc:2015 #, c-format msgid "Unpack command '%s' failed.\n" msgstr "Udpakningskommandoen '%s' fejlede.\n" -#: cmdline/apt-get.cc:2069 +#: cmdline/apt-get.cc:2016 #, c-format msgid "Check if the 'dpkg-dev' package is installed.\n" msgstr "Tjek om pakken 'dpkg-dev' er installeret.\n" -#: cmdline/apt-get.cc:2086 +#: cmdline/apt-get.cc:2033 #, c-format msgid "Build command '%s' failed.\n" msgstr "Opbygningskommandoen '%s' fejlede.\n" -#: cmdline/apt-get.cc:2105 +#: cmdline/apt-get.cc:2052 msgid "Child process failed" msgstr "Barneprocessen fejlede" -#: cmdline/apt-get.cc:2121 +#: cmdline/apt-get.cc:2068 msgid "Must specify at least one package to check builddeps for" msgstr "Skal angive mindst �n pakke at tjekke opbygningsafh�ngigheder for" -#: cmdline/apt-get.cc:2149 +#: cmdline/apt-get.cc:2096 #, c-format msgid "Unable to get build-dependency information for %s" msgstr "Kunne ikke hente oplysninger om opbygningsafh�ngigheder for %s" -#: cmdline/apt-get.cc:2169 +#: cmdline/apt-get.cc:2116 #, c-format msgid "%s has no build depends.\n" msgstr "%s har ingen opbygningsafh�ngigheder.\n" -#: cmdline/apt-get.cc:2221 +#: cmdline/apt-get.cc:2168 #, c-format msgid "" "%s dependency for %s cannot be satisfied because the package %s cannot be " @@ -1156,7 +1149,7 @@ msgid "" msgstr "" "%s-afh�ngigheden for %s kan ikke opfyldes, da pakken %s ikke blev fundet" -#: cmdline/apt-get.cc:2273 +#: cmdline/apt-get.cc:2220 #, c-format msgid "" "%s dependency for %s cannot be satisfied because no available versions of " @@ -1165,32 +1158,32 @@ msgstr "" "%s-afh�ngigheden for %s kan ikke opfyldes, da ingen af de tilg�ngelige " "udgaver af pakken %s kan tilfredsstille versions-kravene" -#: cmdline/apt-get.cc:2308 +#: cmdline/apt-get.cc:2255 #, c-format msgid "Failed to satisfy %s dependency for %s: Installed package %s is too new" msgstr "" "Kunne ikke opfylde %s-afh�ngigheden for %s: Den installerede pakke %s er for " "ny" -#: cmdline/apt-get.cc:2333 +#: cmdline/apt-get.cc:2280 #, c-format msgid "Failed to satisfy %s dependency for %s: %s" msgstr "Kunne ikke opfylde %s-afh�ngigheden for %s: %s" -#: cmdline/apt-get.cc:2347 +#: cmdline/apt-get.cc:2294 #, c-format msgid "Build-dependencies for %s could not be satisfied." msgstr "Opbygningsafh�ngigheden for %s kunne ikke opfyldes." -#: cmdline/apt-get.cc:2351 +#: cmdline/apt-get.cc:2298 msgid "Failed to process build dependencies" msgstr "Kunne ikke behandler opbygningsafh�ngighederne" -#: cmdline/apt-get.cc:2383 +#: cmdline/apt-get.cc:2330 msgid "Supported modules:" msgstr "Underst�ttede moduler:" -#: cmdline/apt-get.cc:2424 +#: cmdline/apt-get.cc:2371 msgid "" "Usage: apt-get [options] command\n" " apt-get [options] install|remove pkg1 [pkg2 ...]\n" @@ -1447,7 +1440,7 @@ msgstr "Dobbelt ops�tningsfil %s/%s" msgid "Failed to write file %s" msgstr "Kunne ikke skrive filen %s" -#: apt-inst/dirstream.cc:96 apt-inst/dirstream.cc:104 +#: apt-inst/dirstream.cc:80 apt-inst/dirstream.cc:88 #, c-format msgid "Failed to close file %s" msgstr "Kunne ikke lukke filen %s" @@ -1500,8 +1493,7 @@ msgid "File %s/%s overwrites the one in the package %s" msgstr "File %s/%s overskriver filen i pakken %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 +#: apt-pkg/contrib/cdromutl.cc:153 apt-pkg/acquire.cc:417 apt-pkg/clean.cc:38 #, c-format msgid "Unable to read %s" msgstr "Kunne ikke l�se %s" @@ -1531,9 +1523,9 @@ msgid "The info and temp directories need to be on the same filesystem" msgstr "Mapperne info og temp skal ligge i samme filsystem" #. 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:748 +#: apt-pkg/pkgcachegen.cc:817 apt-pkg/pkgcachegen.cc:822 +#: apt-pkg/pkgcachegen.cc:945 msgid "Reading package lists" msgstr "Indl�ser pakkelisterne" @@ -1672,11 +1664,12 @@ msgid "File not found" msgstr "Fil blev ikke fundet" #: methods/copy.cc:42 methods/gpgv.cc:265 methods/gzip.cc:133 -#: methods/gzip.cc:142 +#: methods/gzip.cc:142 methods/rred.cc:234 methods/rred.cc:243 msgid "Failed to stat" msgstr "Kunne ikke finde" #: methods/copy.cc:79 methods/gpgv.cc:262 methods/gzip.cc:139 +#: methods/rred.cc:240 msgid "Failed to set modification time" msgstr "Kunne ikke angive �ndringstidspunkt" @@ -1804,7 +1797,7 @@ msgstr "Tidsudl�b p� datasokkel-forbindelse" msgid "Unable to accept connection" msgstr "Kunne ikke acceptere forbindelse" -#: methods/ftp.cc:864 methods/http.cc:963 methods/rsh.cc:303 +#: methods/ftp.cc:864 methods/http.cc:921 methods/rsh.cc:303 msgid "Problem hashing file" msgstr "Problem ved \"hashing\" af fil" @@ -1937,77 +1930,77 @@ msgstr "Kunne ikke �bne datar�r for %s" msgid "Read error from %s process" msgstr "L�sefejl fra %s-process" -#: methods/http.cc:381 +#: methods/http.cc:345 msgid "Waiting for headers" msgstr "Afventer hoveder" -#: methods/http.cc:527 +#: methods/http.cc:491 #, 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:535 +#: methods/http.cc:499 msgid "Bad header line" msgstr "Ugyldig linje i hovedet" -#: methods/http.cc:554 methods/http.cc:561 +#: methods/http.cc:518 methods/http.cc:525 msgid "The HTTP server sent an invalid reply header" msgstr "http-serveren sendte et ugyldigt svarhovede" -#: methods/http.cc:590 +#: methods/http.cc:554 msgid "The HTTP server sent an invalid Content-Length header" msgstr "http-serveren sendte et ugyldigt Content-Length-hovede" -#: methods/http.cc:605 +#: methods/http.cc:569 msgid "The HTTP server sent an invalid Content-Range header" msgstr "http-serveren sendte et ugyldigt Content-Range-hovede" -#: methods/http.cc:607 +#: methods/http.cc:571 msgid "This HTTP server has broken range support" msgstr "" "Denne http-servere har fejlagtig underst�ttelse af intervaller ('ranges')" -#: methods/http.cc:631 +#: methods/http.cc:595 msgid "Unknown date format" msgstr "Ukendt datoformat" -#: methods/http.cc:778 +#: methods/http.cc:742 msgid "Select failed" msgstr "Valg mislykkedes" -#: methods/http.cc:783 +#: methods/http.cc:747 msgid "Connection timed out" msgstr "Tidsudl�b p� forbindelsen" -#: methods/http.cc:806 +#: methods/http.cc:770 msgid "Error writing to output file" msgstr "Fejl ved skrivning af uddatafil" -#: methods/http.cc:837 +#: methods/http.cc:798 msgid "Error writing to file" msgstr "Fejl ved skrivning til fil" -#: methods/http.cc:865 +#: methods/http.cc:823 msgid "Error writing to the file" msgstr "Fejl ved skrivning til filen" -#: methods/http.cc:879 +#: methods/http.cc:837 msgid "Error reading from server. Remote end closed connection" msgstr "Fejl ved l�sning fra serveren. Den fjerne ende lukkede forbindelsen" -#: methods/http.cc:881 +#: methods/http.cc:839 msgid "Error reading from server" msgstr "Fejl ved l�sning fra server" -#: methods/http.cc:1112 +#: methods/http.cc:1070 msgid "Bad header data" msgstr "Ugyldige hoved-data" -#: methods/http.cc:1129 +#: methods/http.cc:1087 msgid "Connection failed" msgstr "Forbindelsen mislykkedes" -#: methods/http.cc:1220 +#: methods/http.cc:1178 msgid "Internal error" msgstr "Intern fejl" @@ -2020,7 +2013,7 @@ msgstr "Kan ikke udf�re mmap for en tom fil" msgid "Couldn't make mmap of %lu bytes" msgstr "Kunne ikke udf�re mmap for %lu byte" -#: apt-pkg/contrib/strutl.cc:938 +#: apt-pkg/contrib/strutl.cc:984 #, c-format msgid "Selection %s not found" msgstr "Det valgte %s blev ikke fundet" @@ -2141,7 +2134,7 @@ msgstr "Ugyldig handling %s" msgid "Unable to stat the mount point %s" msgstr "Kunne ikke finde monteringspunktet %s" -#: apt-pkg/contrib/cdromutl.cc:149 apt-pkg/acquire.cc:427 apt-pkg/clean.cc:44 +#: apt-pkg/contrib/cdromutl.cc:149 apt-pkg/acquire.cc:423 apt-pkg/clean.cc:44 #, c-format msgid "Unable to change to %s" msgstr "Kunne ikke skifte til %s" @@ -2217,72 +2210,72 @@ msgstr "Fejl ved frigivelse af filen" msgid "Problem syncing the file" msgstr "Problem under synkronisering af fil" -#: apt-pkg/pkgcache.cc:126 +#: apt-pkg/pkgcache.cc:135 msgid "Empty package cache" msgstr "Tomt pakke-mellemlager" -#: apt-pkg/pkgcache.cc:132 +#: apt-pkg/pkgcache.cc:141 msgid "The package cache file is corrupted" msgstr "Pakke-mellemlagerets fil er �delagt" -#: apt-pkg/pkgcache.cc:137 +#: apt-pkg/pkgcache.cc:146 msgid "The package cache file is an incompatible version" msgstr "Pakke-mellemlagerets fil er af en inkompatibel version" -#: apt-pkg/pkgcache.cc:142 +#: apt-pkg/pkgcache.cc:151 #, c-format msgid "This APT does not support the versioning system '%s'" msgstr "Denne APT underst�tter ikke versionssystemet '%s'" -#: apt-pkg/pkgcache.cc:147 +#: apt-pkg/pkgcache.cc:156 msgid "The package cache was built for a different architecture" msgstr "Pakke-mellemlageret er lavet til en anden arkitektur" -#: apt-pkg/pkgcache.cc:218 +#: apt-pkg/pkgcache.cc:227 msgid "Depends" msgstr "Afh�ngigheder" -#: apt-pkg/pkgcache.cc:218 +#: apt-pkg/pkgcache.cc:227 msgid "PreDepends" msgstr "Pr�-afh�ngigheder" -#: apt-pkg/pkgcache.cc:218 +#: apt-pkg/pkgcache.cc:227 msgid "Suggests" msgstr "Foresl�ede" -#: apt-pkg/pkgcache.cc:219 +#: apt-pkg/pkgcache.cc:228 msgid "Recommends" msgstr "Anbefalede" -#: apt-pkg/pkgcache.cc:219 +#: apt-pkg/pkgcache.cc:228 msgid "Conflicts" msgstr "Konflikter" -#: apt-pkg/pkgcache.cc:219 +#: apt-pkg/pkgcache.cc:228 msgid "Replaces" msgstr "Erstatter" -#: apt-pkg/pkgcache.cc:220 +#: apt-pkg/pkgcache.cc:229 msgid "Obsoletes" msgstr "Overfl�digg�r" -#: apt-pkg/pkgcache.cc:231 +#: apt-pkg/pkgcache.cc:240 msgid "important" msgstr "vigtig" -#: apt-pkg/pkgcache.cc:231 +#: apt-pkg/pkgcache.cc:240 msgid "required" msgstr "kr�vet" -#: apt-pkg/pkgcache.cc:231 +#: apt-pkg/pkgcache.cc:240 msgid "standard" msgstr "standard" -#: apt-pkg/pkgcache.cc:232 +#: apt-pkg/pkgcache.cc:241 msgid "optional" msgstr "frivillig" -#: apt-pkg/pkgcache.cc:232 +#: apt-pkg/pkgcache.cc:241 msgid "extra" msgstr "ekstra" @@ -2308,52 +2301,52 @@ msgstr "Kunne ikke tolke pakkefilen %s (1)" msgid "Unable to parse package file %s (2)" msgstr "Kunne ikke tolke pakkefilen %s (2)" -#: apt-pkg/sourcelist.cc:94 +#: apt-pkg/sourcelist.cc:87 #, c-format msgid "Malformed line %lu in source list %s (URI)" msgstr "Ugyldig linje %lu i kildelisten %s (URI)" -#: apt-pkg/sourcelist.cc:96 +#: apt-pkg/sourcelist.cc:89 #, c-format msgid "Malformed line %lu in source list %s (dist)" msgstr "Ugyldig linje %lu i kildelisten %s (dist)" -#: apt-pkg/sourcelist.cc:99 +#: apt-pkg/sourcelist.cc:92 #, c-format msgid "Malformed line %lu in source list %s (URI parse)" msgstr "Ugyldig linje %lu i kildelisten %s (tolkning af URI)" -#: apt-pkg/sourcelist.cc:105 +#: apt-pkg/sourcelist.cc:98 #, c-format msgid "Malformed line %lu in source list %s (absolute dist)" msgstr "Ugyldig linje %lu i kildelisten %s (absolut dist)" -#: apt-pkg/sourcelist.cc:112 +#: apt-pkg/sourcelist.cc:105 #, c-format msgid "Malformed line %lu in source list %s (dist parse)" msgstr "Ugyldig linje %lu i kildelisten %s (tolkning af dist)" -#: apt-pkg/sourcelist.cc:203 +#: apt-pkg/sourcelist.cc:156 #, c-format msgid "Opening %s" msgstr "�bner %s" -#: apt-pkg/sourcelist.cc:220 apt-pkg/cdrom.cc:426 +#: apt-pkg/sourcelist.cc:170 apt-pkg/cdrom.cc:450 #, c-format msgid "Line %u too long in source list %s." msgstr "Linjen %u er for lang i kildelisten %s." -#: apt-pkg/sourcelist.cc:240 +#: apt-pkg/sourcelist.cc:187 #, c-format msgid "Malformed line %u in source list %s (type)" msgstr "Ugyldig linje %u i kildelisten %s (type)" -#: apt-pkg/sourcelist.cc:244 +#: apt-pkg/sourcelist.cc:191 #, fuzzy, c-format msgid "Type '%s' is not known on line %u in source list %s" msgstr "Typen '%s' er ukendt p� linje %u i kildelisten %s" -#: apt-pkg/sourcelist.cc:252 apt-pkg/sourcelist.cc:255 +#: apt-pkg/sourcelist.cc:199 apt-pkg/sourcelist.cc:202 #, c-format msgid "Malformed line %u in source list %s (vendor id)" msgstr "Ugyldig linje %u i kildelisten %s (producent-id)" @@ -2405,7 +2398,7 @@ msgstr "Listemappen %spartial mangler." msgid "Archive directory %spartial is missing." msgstr "Arkivmappen %spartial mangler." -#: apt-pkg/acquire.cc:821 +#: apt-pkg/acquire.cc:817 #, c-format msgid "Downloading file %li of %li (%s remaining)" msgstr "Henter fil %li ud af %li (%s tilbage)" @@ -2425,12 +2418,12 @@ msgstr "Metoden %s startede ikke korrekt" msgid "Please insert the disc labeled: '%s' in the drive '%s' and press enter." msgstr "Inds�t disken med navnet: '%s' i drevet '%s' og tryk retur." -#: apt-pkg/init.cc:120 +#: apt-pkg/init.cc:122 #, c-format msgid "Packaging system '%s' is not supported" msgstr "Pakkesystemet '%s' underst�ttes ikke" -#: apt-pkg/init.cc:136 +#: apt-pkg/init.cc:138 msgid "Unable to determine a suitable packaging system type" msgstr "Kunne ikke bestemme en passende pakkesystemtype" @@ -2473,88 +2466,104 @@ msgstr "Mellemlageret benytter en inkompatibel versionsstyring" msgid "Error occurred while processing %s (NewPackage)" msgstr "Der skete en fejl under behandlingen af %s (NewPackage)" -#: apt-pkg/pkgcachegen.cc:129 +#: apt-pkg/pkgcachegen.cc:132 #, c-format msgid "Error occurred while processing %s (UsePackage1)" msgstr "Der skete en fejl under behandlingen af %s (UsePackage1)" -#: apt-pkg/pkgcachegen.cc:150 +#: apt-pkg/pkgcachegen.cc:155 +#, fuzzy, c-format +msgid "Error occured while processing %s (NewFileDesc1)" +msgstr "Der skete en fejl under behandlingen af %s (NewFileVer1)" + +#: apt-pkg/pkgcachegen.cc:180 #, c-format msgid "Error occurred while processing %s (UsePackage2)" msgstr "Der skete en fejl under behandlingen af %s (UsePackage2)" -#: apt-pkg/pkgcachegen.cc:154 +#: apt-pkg/pkgcachegen.cc:184 #, c-format msgid "Error occurred while processing %s (NewFileVer1)" msgstr "Der skete en fejl under behandlingen af %s (NewFileVer1)" -#: apt-pkg/pkgcachegen.cc:184 +#: apt-pkg/pkgcachegen.cc:215 #, c-format msgid "Error occurred while processing %s (NewVersion1)" msgstr "Der skete en fejl under behandlingen af %s (NewVersion1)" -#: apt-pkg/pkgcachegen.cc:188 +#: apt-pkg/pkgcachegen.cc:219 #, c-format msgid "Error occurred while processing %s (UsePackage3)" msgstr "Der skete en fejl under behandlingen af %s (UsePackage3)" -#: apt-pkg/pkgcachegen.cc:192 +#: apt-pkg/pkgcachegen.cc:223 #, c-format msgid "Error occurred while processing %s (NewVersion2)" msgstr "Der skete en fejl under behandlingen af %s (NewVersion2)" -#: apt-pkg/pkgcachegen.cc:207 +#: apt-pkg/pkgcachegen.cc:247 +#, fuzzy, c-format +msgid "Error occured while processing %s (NewFileDesc2)" +msgstr "Der skete en fejl under behandlingen af %s (NewFileVer1)" + +#: apt-pkg/pkgcachegen.cc:253 msgid "Wow, you exceeded the number of package names this APT is capable of." msgstr "" "Hold da op! Du n�ede over det antal pakkenavne, denne APT kan h�ndtere." -#: apt-pkg/pkgcachegen.cc:210 +#: apt-pkg/pkgcachegen.cc:256 msgid "Wow, you exceeded the number of versions this APT is capable of." msgstr "Hold da op! Du n�ede over det antal versioner, denne APT kan h�ndtere." -#: apt-pkg/pkgcachegen.cc:213 +#: apt-pkg/pkgcachegen.cc:259 +#, fuzzy +msgid "Wow, you exceeded the number of descriptions this APT is capable of." +msgstr "Hold da op! Du n�ede over det antal versioner, denne APT kan h�ndtere." + +#: apt-pkg/pkgcachegen.cc:262 msgid "Wow, you exceeded the number of dependencies this APT is capable of." msgstr "" "Hold da op! Du n�ede over det antal afh�ngigheder, denne APT kan h�ndtere." -#: apt-pkg/pkgcachegen.cc:241 +#: apt-pkg/pkgcachegen.cc:290 #, c-format msgid "Error occurred while processing %s (FindPkg)" msgstr "Der skete en fejl under behandlingen af %s (FindPkg)" -#: apt-pkg/pkgcachegen.cc:254 +#: apt-pkg/pkgcachegen.cc:303 #, c-format msgid "Error occurred while processing %s (CollectFileProvides)" msgstr "Der skete en fejl under behandlingen af %s (CollectfileProvides)" -#: apt-pkg/pkgcachegen.cc:260 +#: apt-pkg/pkgcachegen.cc:309 #, c-format msgid "Package %s %s was not found while processing file dependencies" msgstr "Pakken %s %s blev ikke fundet under behandlingen af filafh�ngigheder" -#: apt-pkg/pkgcachegen.cc:574 +#: apt-pkg/pkgcachegen.cc:679 #, c-format msgid "Couldn't stat source package list %s" msgstr "Kunne ikke finde kildepakkelisten %s" -#: apt-pkg/pkgcachegen.cc:658 +#: apt-pkg/pkgcachegen.cc:763 msgid "Collecting File Provides" msgstr "Samler filudbud" -#: apt-pkg/pkgcachegen.cc:785 apt-pkg/pkgcachegen.cc:792 +#: apt-pkg/pkgcachegen.cc:890 apt-pkg/pkgcachegen.cc:897 msgid "IO Error saving source cache" msgstr "IO-fejl ved gemning af kilde-mellemlageret" -#: apt-pkg/acquire-item.cc:126 +#: apt-pkg/acquire-item.cc:129 #, c-format msgid "rename failed, %s (%s -> %s)." msgstr "omd�bning mislykkedes, %s (%s -> %s)." -#: apt-pkg/acquire-item.cc:236 apt-pkg/acquire-item.cc:911 +#: apt-pkg/acquire-item.cc:391 apt-pkg/acquire-item.cc:635 +#: apt-pkg/acquire-item.cc:1336 msgid "MD5Sum mismatch" msgstr "MD5Sum stemmer ikke" -#: apt-pkg/acquire-item.cc:719 +#: apt-pkg/acquire-item.cc:1150 #, c-format msgid "" "I wasn't able to locate a file for the %s package. This might mean you need " @@ -2563,7 +2572,7 @@ msgstr "" "Jeg kunne ikke lokalisere filen til %s-pakken. Det betyder muligvis at du er " "n�dt til manuelt at reparere denne pakke. (grundet manglende arch)" -#: apt-pkg/acquire-item.cc:778 +#: apt-pkg/acquire-item.cc:1203 #, c-format msgid "" "I wasn't able to locate file for the %s package. This might mean you need to " @@ -2572,13 +2581,13 @@ msgstr "" "Jeg kunne ikke lokalisere filen til %s-pakken. Det betyder muligvis at du er " "n�dt til manuelt at reparere denne pakke." -#: apt-pkg/acquire-item.cc:814 +#: apt-pkg/acquire-item.cc:1239 #, c-format msgid "" "The package index files are corrupted. No Filename: field for package %s." msgstr "Pakkeindeksfilerne er i stykker. Intet 'Filename:'-felt for pakken %s." -#: apt-pkg/acquire-item.cc:901 +#: apt-pkg/acquire-item.cc:1326 msgid "Size mismatch" msgstr "St�rrelsen stemmer ikke" @@ -2587,7 +2596,7 @@ msgstr "St�rrelsen stemmer ikke" msgid "Vendor block %s contains no fingerprint" msgstr "Leverand�rblok %s inderholder intet fingeraftryk" -#: apt-pkg/cdrom.cc:507 +#: apt-pkg/cdrom.cc:531 #, c-format msgid "" "Using CD-ROM mount point %s\n" @@ -2596,47 +2605,49 @@ msgstr "" "Bruger cdrom-monteringspunktet %s\n" "Monterer cdrom\n" -#: apt-pkg/cdrom.cc:516 apt-pkg/cdrom.cc:598 +#: apt-pkg/cdrom.cc:540 apt-pkg/cdrom.cc:622 msgid "Identifying.. " msgstr "Identificerer.. " -#: apt-pkg/cdrom.cc:541 +#: apt-pkg/cdrom.cc:565 #, c-format msgid "Stored label: %s \n" msgstr "Gemt m�rkat: %s \n" -#: apt-pkg/cdrom.cc:561 +#: apt-pkg/cdrom.cc:585 #, c-format msgid "Using CD-ROM mount point %s\n" msgstr "Bruger cdrom-monteringspunktet %s\n" -#: apt-pkg/cdrom.cc:579 +#: apt-pkg/cdrom.cc:603 msgid "Unmounting CD-ROM\n" msgstr "Afmonterer cdrom\n" -#: apt-pkg/cdrom.cc:583 +#: apt-pkg/cdrom.cc:607 msgid "Waiting for disc...\n" msgstr "Venter p� disken...\n" #. Mount the new CDROM -#: apt-pkg/cdrom.cc:591 +#: apt-pkg/cdrom.cc:615 msgid "Mounting CD-ROM...\n" msgstr "Monterer cdrom...\n" -#: apt-pkg/cdrom.cc:609 +#: apt-pkg/cdrom.cc:633 msgid "Scanning disc for index files..\n" msgstr "Skanner disken for indeksfiler..\n" -#: apt-pkg/cdrom.cc:647 -#, c-format -msgid "Found %i package indexes, %i source indexes and %i signatures\n" +#: apt-pkg/cdrom.cc:673 +#, fuzzy, c-format +msgid "" +"Found %i package indexes, %i source indexes, %i translation indexes and %i " +"signatures\n" msgstr "Fandt %i pakkeindekser, %i kildeindekser og %i signaturer\n" -#: apt-pkg/cdrom.cc:710 +#: apt-pkg/cdrom.cc:737 msgid "That is not a valid name, try again.\n" msgstr "Det er ikke et gyldigt navn, pr�v igen.\n" -#: apt-pkg/cdrom.cc:726 +#: apt-pkg/cdrom.cc:753 #, c-format msgid "" "This disc is called: \n" @@ -2645,38 +2656,38 @@ msgstr "" "Denne disk hedder: \n" " %s \n" -#: apt-pkg/cdrom.cc:730 +#: apt-pkg/cdrom.cc:757 msgid "Copying package lists..." msgstr "Kopierer pakkelisterne..." -#: apt-pkg/cdrom.cc:754 +#: apt-pkg/cdrom.cc:783 msgid "Writing new source list\n" msgstr "Skriver ny kildeliste\n" -#: apt-pkg/cdrom.cc:763 +#: apt-pkg/cdrom.cc:792 msgid "Source list entries for this disc are:\n" msgstr "Denne disk har f�lgende kildeliste-indgange:\n" -#: apt-pkg/cdrom.cc:803 +#: apt-pkg/cdrom.cc:832 msgid "Unmounting CD-ROM..." msgstr "Afmonterer cdrom..." -#: apt-pkg/indexcopy.cc:261 +#: apt-pkg/indexcopy.cc:263 apt-pkg/indexcopy.cc:830 #, c-format msgid "Wrote %i records.\n" msgstr "Skrev %i poster.\n" -#: 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 "Skrev %i poster med %i manglende filer.\n" -#: 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 "Skrev %i poster med %i ikke-trufne filer\n" -#: 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 "Skrev %i poster med %i manglende filer og %i ikke-trufne filer\n" @@ -2731,10 +2742,28 @@ msgstr "G�r klar til at fjerne %s inklusive ops�tning" msgid "Removed with config %s" msgstr "Fjernede %s inklusive ops�tning" +#: methods/rred.cc:219 +#, fuzzy +msgid "Could not patch file" +msgstr "Kunne ikke �bne filen %s" + #: methods/rsh.cc:330 msgid "Connection closed prematurely" msgstr "Forbindelsen lukkedes for hurtigt" +#~ msgid "Please provide a name for this Disc, such as 'Debian 2.1r1 Disk 1'" +#~ msgstr "Angiv et navn for denne disk, som f.eks. 'Debian 2.1r1 Disk 1'" + +#~ msgid "Please insert a Disc in the drive and press enter" +#~ msgstr "Inds�t en disk i drevet og tryk retur" + +#~ msgid "Repeat this process for the rest of the CDs in your set." +#~ msgstr "Gentag processen for resten af cd'erne i dit s�t." + +#, fuzzy +#~ msgid "Skiping already downloaded file '%s'\n" +#~ msgstr "Overspringer udpakning af allerede udpakket kildetekst i %s\n" + #~ msgid "Unknown vendor ID '%s' in line %u of source list %s" #~ msgstr "Ukendt leverand�r-ID '%s' p� linje %u i kildelisten %s" @@ -7,7 +7,7 @@ msgid "" msgstr "" "Project-Id-Version: apt 0.5.26\n" "Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2006-01-04 18:51+0100\n" +"POT-Creation-Date: 2005-10-17 19:31+0200\n" "PO-Revision-Date: 2005-06-15 18:22+0200\n" "Last-Translator: Michael Piefel <piefel@debian.org>\n" "Language-Team: <de@li.org>\n" @@ -15,145 +15,155 @@ msgstr "" "Content-Type: text/plain; charset=UTF-8\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 "Paket %s Version %s hat eine nichterfüllte Abhängigkeit:\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 +#: 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:1419 cmdline/apt-cache.cc:1570 #, c-format msgid "Unable to locate package %s" msgstr "Kann Paket %s nicht finden" -#: cmdline/apt-cache.cc:232 +#: cmdline/apt-cache.cc:245 msgid "Total package names : " msgstr "Gesamtzahl an Paketnamen: " -#: cmdline/apt-cache.cc:272 +#: cmdline/apt-cache.cc:285 msgid " Normal packages: " msgstr " davon gewöhnliche Pakete: " -#: cmdline/apt-cache.cc:273 +#: cmdline/apt-cache.cc:286 msgid " Pure virtual packages: " msgstr " davon rein virtuelle Pakete: " -#: cmdline/apt-cache.cc:274 +#: cmdline/apt-cache.cc:287 msgid " Single virtual packages: " msgstr " davon einzelne virtuelle Pakete: " -#: cmdline/apt-cache.cc:275 +#: cmdline/apt-cache.cc:288 msgid " Mixed virtual packages: " msgstr " davon gemischte virtuelle Pakete: " -#: cmdline/apt-cache.cc:276 +#: cmdline/apt-cache.cc:289 msgid " Missing: " msgstr " davon fehlend: " -#: cmdline/apt-cache.cc:278 +#: cmdline/apt-cache.cc:291 msgid "Total distinct versions: " msgstr "Gesamtzahl an unterschiedlichen Versionen: " -#: cmdline/apt-cache.cc:280 +#: cmdline/apt-cache.cc:293 +#, fuzzy +msgid "Total Distinct Descriptions: " +msgstr "Gesamtzahl an unterschiedlichen Versionen: " + +#: cmdline/apt-cache.cc:295 msgid "Total dependencies: " msgstr "Gesamtzahl an Abhängigkeiten: " -#: cmdline/apt-cache.cc:283 +#: cmdline/apt-cache.cc:298 msgid "Total ver/file relations: " msgstr "Gesamtzahl an Version/Datei-Beziehungen: " -#: cmdline/apt-cache.cc:285 +#: cmdline/apt-cache.cc:300 +#, fuzzy +msgid "Total Desc/File relations: " +msgstr "Gesamtzahl an Version/Datei-Beziehungen: " + +#: cmdline/apt-cache.cc:302 msgid "Total Provides mappings: " msgstr "Gesamtzahl an Bereitstellungen: " -#: cmdline/apt-cache.cc:297 +#: cmdline/apt-cache.cc:314 msgid "Total globbed strings: " msgstr "Gesamtzahl an Mustern: " -#: cmdline/apt-cache.cc:311 +#: cmdline/apt-cache.cc:328 msgid "Total dependency version space: " msgstr "Gesamtmenge an Abhängigkeits/Versionsspeicher: " -#: cmdline/apt-cache.cc:316 +#: cmdline/apt-cache.cc:333 msgid "Total slack space: " msgstr "Gesamtmenge an Slack: " -#: cmdline/apt-cache.cc:324 +#: cmdline/apt-cache.cc:341 msgid "Total space accounted for: " msgstr "Gesamtmenge an Speicher: " -#: 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 "Paketdatei %s ist nicht synchronisiert." -#: cmdline/apt-cache.cc:1231 +#: cmdline/apt-cache.cc:1293 msgid "You must give exactly one pattern" msgstr "Sie müssen genau ein Muster angeben" -#: cmdline/apt-cache.cc:1385 +#: cmdline/apt-cache.cc:1447 msgid "No packages found" msgstr "Keine Pakete gefunden" -#: cmdline/apt-cache.cc:1462 +#: cmdline/apt-cache.cc:1524 msgid "Package files:" msgstr "Paketdateien:" -#: cmdline/apt-cache.cc:1469 cmdline/apt-cache.cc:1555 +#: cmdline/apt-cache.cc:1531 cmdline/apt-cache.cc:1617 msgid "Cache is out of sync, can't x-ref a package file" msgstr "Cache ist nicht sychron, kann eine Paketdatei nicht querverweisen" -#: cmdline/apt-cache.cc:1470 +#: cmdline/apt-cache.cc:1532 #, c-format msgid "%4i %s\n" msgstr "%4i %s\n" #. Show any packages have explicit pins -#: cmdline/apt-cache.cc:1482 +#: cmdline/apt-cache.cc:1544 msgid "Pinned packages:" msgstr "Festgehaltene Pakete (»Pin«):" -#: cmdline/apt-cache.cc:1494 cmdline/apt-cache.cc:1535 +#: cmdline/apt-cache.cc:1556 cmdline/apt-cache.cc:1597 msgid "(not found)" msgstr "(nicht gefunden)" #. Installed version -#: cmdline/apt-cache.cc:1515 +#: cmdline/apt-cache.cc:1577 msgid " Installed: " msgstr " Installiert:" -#: cmdline/apt-cache.cc:1517 cmdline/apt-cache.cc:1525 +#: cmdline/apt-cache.cc:1579 cmdline/apt-cache.cc:1587 msgid "(none)" msgstr "(keine)" #. Candidate Version -#: cmdline/apt-cache.cc:1522 +#: cmdline/apt-cache.cc:1584 msgid " Candidate: " msgstr " Mögliche Pakete:" -#: cmdline/apt-cache.cc:1532 +#: cmdline/apt-cache.cc:1594 msgid " Package pin: " msgstr " Paketstecknadel: " #. Show the priority tables -#: cmdline/apt-cache.cc:1541 +#: cmdline/apt-cache.cc:1603 msgid " Version table:" msgstr " Versions-Tabelle:" -#: cmdline/apt-cache.cc:1556 +#: cmdline/apt-cache.cc:1618 #, c-format msgid " %4i %s\n" msgstr " %4i %s\n" -#: cmdline/apt-cache.cc:1651 cmdline/apt-cdrom.cc:138 cmdline/apt-config.cc:70 +#: cmdline/apt-cache.cc:1713 cmdline/apt-cdrom.cc:138 cmdline/apt-config.cc:70 #: cmdline/apt-extracttemplates.cc:225 ftparchive/apt-ftparchive.cc:550 -#: cmdline/apt-get.cc:2378 cmdline/apt-sortpkgs.cc:144 +#: cmdline/apt-get.cc:2325 cmdline/apt-sortpkgs.cc:144 #, c-format msgid "%s %s for %s %s compiled on %s %s\n" msgstr "%s %s für %s %s kompiliert am %s %s\n" -#: cmdline/apt-cache.cc:1658 +#: cmdline/apt-cache.cc:1720 msgid "" "Usage: apt-cache [options] command\n" " apt-cache [options] add file1 [file2 ...]\n" @@ -228,21 +238,6 @@ msgstr "" "tmp\n" "Siehe auch apt-cache(8) und apt.conf(5) für weitere Informationen.\n" -#: cmdline/apt-cdrom.cc:78 -msgid "Please provide a name for this Disc, such as 'Debian 2.1r1 Disk 1'" -msgstr "" -"Bitte geben Sie einen Namen für die CD an, wie zum Beispiel »Debian 2.2r1 " -"Disk 1«" - -#: cmdline/apt-cdrom.cc:93 -msgid "Please insert a Disc in the drive and press enter" -msgstr "" -"Bitte legen Sie ein Medium ins Laufwerk und drücken Sie die Eingabetaste" - -#: cmdline/apt-cdrom.cc:117 -msgid "Repeat this process for the rest of the CDs in your set." -msgstr "Wiederholen Sie dieses Prozedere für Ihre restlichen CDs diese Reihe." - #: cmdline/apt-config.cc:41 msgid "Arguments not in pairs" msgstr "Argumente nicht paarweise" @@ -308,7 +303,7 @@ msgstr "" " -o=? Eine beliebige Konfigurationsoption setzen, z. B. -o dir::cache=/" "tmp\n" -#: cmdline/apt-extracttemplates.cc:267 apt-pkg/pkgcachegen.cc:710 +#: cmdline/apt-extracttemplates.cc:267 apt-pkg/pkgcachegen.cc:815 #, c-format msgid "Unable to write to %s" msgstr "Kann nicht nach %s schreiben" @@ -537,12 +532,12 @@ msgstr "Kann auf %s nicht zugreifen." msgid "Archive had no package field" msgstr "Archiv hatte kein Paket-Feld" -#: ftparchive/writer.cc:394 ftparchive/writer.cc:603 +#: ftparchive/writer.cc:394 ftparchive/writer.cc:602 #, c-format msgid " %s has no override entry\n" msgstr " %s hat keinen Eintrag in der Override-Liste.\n" -#: ftparchive/writer.cc:437 ftparchive/writer.cc:689 +#: ftparchive/writer.cc:437 ftparchive/writer.cc:688 #, c-format msgid " %s maintainer is %s not %s\n" msgstr " %s-Maintainer ist %s und nicht %s\n" @@ -642,79 +637,79 @@ msgstr "Problem beim Unlinking von %s" msgid "Failed to rename %s to %s" msgstr "Konnte %s nicht in %s umbenennen" -#: cmdline/apt-get.cc:120 +#: cmdline/apt-get.cc:118 msgid "Y" msgstr "J" -#: cmdline/apt-get.cc:142 cmdline/apt-get.cc:1515 +#: cmdline/apt-get.cc:140 cmdline/apt-get.cc:1486 #, c-format msgid "Regex compilation error - %s" msgstr "Fehler beim Kompilieren eines regulären Ausdrucks - %s" -#: cmdline/apt-get.cc:237 +#: cmdline/apt-get.cc:235 msgid "The following packages have unmet dependencies:" msgstr "Die folgenden Pakete haben nichterfüllte Abhängigkeiten:" -#: cmdline/apt-get.cc:327 +#: cmdline/apt-get.cc:325 #, c-format msgid "but %s is installed" msgstr "aber %s ist installiert" -#: cmdline/apt-get.cc:329 +#: cmdline/apt-get.cc:327 #, c-format msgid "but %s is to be installed" msgstr "aber %s soll installiert werden" -#: cmdline/apt-get.cc:336 +#: cmdline/apt-get.cc:334 msgid "but it is not installable" msgstr "ist aber nicht installierbar" -#: cmdline/apt-get.cc:338 +#: cmdline/apt-get.cc:336 msgid "but it is a virtual package" msgstr "ist aber ein virtuelles Paket" -#: cmdline/apt-get.cc:341 +#: cmdline/apt-get.cc:339 msgid "but it is not installed" msgstr "ist aber nicht installiert" -#: cmdline/apt-get.cc:341 +#: cmdline/apt-get.cc:339 msgid "but it is not going to be installed" msgstr "soll aber nicht installiert werden" -#: cmdline/apt-get.cc:346 +#: cmdline/apt-get.cc:344 msgid " or" msgstr " oder " -#: cmdline/apt-get.cc:375 +#: cmdline/apt-get.cc:373 msgid "The following NEW packages will be installed:" msgstr "Die folgenden NEUEN Pakete werden installiert:" -#: cmdline/apt-get.cc:401 +#: cmdline/apt-get.cc:399 msgid "The following packages will be REMOVED:" msgstr "Die folgenden Pakete werden ENTFERNT:" -#: cmdline/apt-get.cc:423 +#: cmdline/apt-get.cc:421 msgid "The following packages have been kept back:" msgstr "Die folgenden Pakete sind zurückgehalten worden:" -#: cmdline/apt-get.cc:444 +#: cmdline/apt-get.cc:442 msgid "The following packages will be upgraded:" msgstr "Die folgenden Pakete werden aktualisiert:" -#: cmdline/apt-get.cc:465 +#: cmdline/apt-get.cc:463 msgid "The following packages will be DOWNGRADED:" msgstr "Die folgenden Pakete werden DEAKTUALISIERT:" -#: cmdline/apt-get.cc:485 +#: cmdline/apt-get.cc:483 msgid "The following held packages will be changed:" msgstr "Die folgenden gehaltenen Pakete werden verändert:" -#: cmdline/apt-get.cc:538 +#: cmdline/apt-get.cc:536 #, c-format msgid "%s (due to %s) " msgstr "%s (wegen %s) " -#: cmdline/apt-get.cc:546 +#: cmdline/apt-get.cc:544 #, fuzzy msgid "" "WARNING: The following essential packages will be removed.\n" @@ -723,147 +718,147 @@ msgstr "" "WARNUNG: Die folgenden essentiellen Pakete werden entfernt.\n" "Dies sollte NICHT geschehen, wenn Sie nicht genau wissen, was Sie tun!" -#: cmdline/apt-get.cc:577 +#: cmdline/apt-get.cc:575 #, c-format msgid "%lu upgraded, %lu newly installed, " msgstr "%lu aktualisiert, %lu neu installiert, " -#: cmdline/apt-get.cc:581 +#: cmdline/apt-get.cc:579 #, c-format msgid "%lu reinstalled, " msgstr "%lu erneut installiert, " -#: cmdline/apt-get.cc:583 +#: cmdline/apt-get.cc:581 #, c-format msgid "%lu downgraded, " msgstr "%lu deaktualisiert, " -#: cmdline/apt-get.cc:585 +#: cmdline/apt-get.cc:583 #, c-format msgid "%lu to remove and %lu not upgraded.\n" msgstr "%lu zu entfernen und %lu nicht aktualisiert.\n" -#: cmdline/apt-get.cc:589 +#: cmdline/apt-get.cc:587 #, c-format msgid "%lu not fully installed or removed.\n" msgstr "%lu nicht vollständig installiert oder entfernt.\n" -#: cmdline/apt-get.cc:649 +#: cmdline/apt-get.cc:647 msgid "Correcting dependencies..." msgstr "Abhängigkeit werden korrigiert..." -#: cmdline/apt-get.cc:652 +#: cmdline/apt-get.cc:650 msgid " failed." msgstr " fehlgeschlagen." -#: cmdline/apt-get.cc:655 +#: cmdline/apt-get.cc:653 msgid "Unable to correct dependencies" msgstr "Kann Abhängigkeiten nicht korrigieren" -#: cmdline/apt-get.cc:658 +#: cmdline/apt-get.cc:656 msgid "Unable to minimize the upgrade set" msgstr "Kann die Menge zu erneuernder Pakete nicht minimieren" -#: cmdline/apt-get.cc:660 +#: cmdline/apt-get.cc:658 msgid " Done" msgstr " Fertig" -#: cmdline/apt-get.cc:664 +#: cmdline/apt-get.cc:662 msgid "You might want to run `apt-get -f install' to correct these." msgstr "" "Sie möchten wahrscheinlich »apt-get -f install« aufrufen, um dies zu " "korrigieren." -#: cmdline/apt-get.cc:667 +#: cmdline/apt-get.cc:665 msgid "Unmet dependencies. Try using -f." msgstr "Nichterfüllte Abhängigkeiten. Versuchen Sie, -f zu benutzen." -#: cmdline/apt-get.cc:689 +#: cmdline/apt-get.cc:687 msgid "WARNING: The following packages cannot be authenticated!" msgstr "WARNUNG: Die folgenden Pakete können nicht authentifiziert werden!" -#: cmdline/apt-get.cc:693 +#: cmdline/apt-get.cc:691 msgid "Authentication warning overridden.\n" msgstr "" -#: cmdline/apt-get.cc:700 +#: cmdline/apt-get.cc:698 msgid "Install these packages without verification [y/N]? " msgstr "Diese Pakete ohne Überprüfung installieren [j/N]? " -#: cmdline/apt-get.cc:702 +#: cmdline/apt-get.cc:700 msgid "Some packages could not be authenticated" msgstr "Einige Pakete konnten nicht authentifiziert werden" -#: cmdline/apt-get.cc:711 cmdline/apt-get.cc:858 +#: cmdline/apt-get.cc:709 cmdline/apt-get.cc:856 msgid "There are problems and -y was used without --force-yes" msgstr "Es gab Probleme und -y wurde ohne --force-yes verwendet" -#: cmdline/apt-get.cc:755 +#: cmdline/apt-get.cc:753 msgid "Internal error, InstallPackages was called with broken packages!" msgstr "Interner Fehler, InstallPackages mit kaputten Pakete aufgerufen!" -#: cmdline/apt-get.cc:764 +#: cmdline/apt-get.cc:762 msgid "Packages need to be removed but remove is disabled." msgstr "Pakete müssen entfernt werden, aber Entfernen ist abgeschaltet." -#: cmdline/apt-get.cc:775 +#: cmdline/apt-get.cc:773 msgid "Internal error, Ordering didn't finish" msgstr "Interner Fehler, Anordnung beendete nicht" -#: cmdline/apt-get.cc:791 cmdline/apt-get.cc:1809 cmdline/apt-get.cc:1842 +#: cmdline/apt-get.cc:789 cmdline/apt-get.cc:1780 cmdline/apt-get.cc:1813 msgid "Unable to lock the download directory" msgstr "Kann kein Lock für das Downloadverzeichnis erhalten." -#: cmdline/apt-get.cc:801 cmdline/apt-get.cc:1890 cmdline/apt-get.cc:2126 +#: cmdline/apt-get.cc:799 cmdline/apt-get.cc:1861 cmdline/apt-get.cc:2073 #: apt-pkg/cachefile.cc:67 msgid "The list of sources could not be read." msgstr "Die Liste der Quellen konnte nicht gelesen werden." -#: cmdline/apt-get.cc:816 +#: cmdline/apt-get.cc:814 msgid "How odd.. The sizes didn't match, email apt@packages.debian.org" msgstr "" "Wie merkwürdig... Die Größen haben nicht übereingestimmt, schreiben Sie an " "apt@packages.debian.org" -#: cmdline/apt-get.cc:821 +#: cmdline/apt-get.cc:819 #, c-format msgid "Need to get %sB/%sB of archives.\n" msgstr "Es müssen noch %sB von %sB Archiven geholt werden.\n" -#: cmdline/apt-get.cc:824 +#: cmdline/apt-get.cc:822 #, c-format msgid "Need to get %sB of archives.\n" msgstr "Es müssen %sB Archive geholt werden.\n" -#: cmdline/apt-get.cc:829 +#: cmdline/apt-get.cc:827 #, c-format msgid "After unpacking %sB of additional disk space will be used.\n" msgstr "Nach dem Auspacken werden %sB Plattenplatz zusätzlich benutzt.\n" -#: cmdline/apt-get.cc:832 +#: cmdline/apt-get.cc:830 #, c-format msgid "After unpacking %sB disk space will be freed.\n" msgstr "Nach dem Auspacken werden %sB Plattenplatz freigegeben worden sein.\n" -#: cmdline/apt-get.cc:846 cmdline/apt-get.cc:1980 +#: cmdline/apt-get.cc:844 cmdline/apt-get.cc:1927 #, c-format msgid "Couldn't determine free space in %s" msgstr "Konnte freien Platz in %s nicht bestimmen" -#: cmdline/apt-get.cc:849 +#: cmdline/apt-get.cc:847 #, c-format msgid "You don't have enough free space in %s." msgstr "Sie haben nicht genug Platz in %s." -#: cmdline/apt-get.cc:864 cmdline/apt-get.cc:884 +#: cmdline/apt-get.cc:862 cmdline/apt-get.cc:882 msgid "Trivial Only specified but this is not a trivial operation." msgstr "»Nur triviale« angegeben, aber das ist keine triviale Operation." -#: cmdline/apt-get.cc:866 +#: cmdline/apt-get.cc:864 msgid "Yes, do as I say!" msgstr "Ja, tu was ich sage!" -#: cmdline/apt-get.cc:868 +#: cmdline/apt-get.cc:866 #, fuzzy, c-format msgid "" "You are about to do something potentially harmful.\n" @@ -874,28 +869,28 @@ msgstr "" "Zum Fortfahren geben Sie bitte »%s« ein.\n" " ?] " -#: cmdline/apt-get.cc:874 cmdline/apt-get.cc:893 +#: cmdline/apt-get.cc:872 cmdline/apt-get.cc:891 msgid "Abort." msgstr "Abbruch." -#: cmdline/apt-get.cc:889 +#: cmdline/apt-get.cc:887 msgid "Do you want to continue [Y/n]? " msgstr "Möchten Sie fortfahren [J/n]? " -#: cmdline/apt-get.cc:961 cmdline/apt-get.cc:1365 cmdline/apt-get.cc:2023 +#: cmdline/apt-get.cc:959 cmdline/apt-get.cc:1336 cmdline/apt-get.cc:1970 #, c-format msgid "Failed to fetch %s %s\n" msgstr "Konnte %s nicht holen %s\n" -#: cmdline/apt-get.cc:979 +#: cmdline/apt-get.cc:977 msgid "Some files failed to download" msgstr "Einige Dateien konnten nicht heruntergeladen werden" -#: cmdline/apt-get.cc:980 cmdline/apt-get.cc:2032 +#: cmdline/apt-get.cc:978 cmdline/apt-get.cc:1979 msgid "Download complete and in download only mode" msgstr "Herunterladen abgeschlossen und im Nur-Herunterladen-Modus" -#: cmdline/apt-get.cc:986 +#: cmdline/apt-get.cc:984 msgid "" "Unable to fetch some archives, maybe run apt-get update or try with --fix-" "missing?" @@ -903,48 +898,48 @@ msgstr "" "Konnte einige Archive nicht herunterladen, vielleicht »apt-get update« oder " "mit »--fix-missing« probieren?" -#: cmdline/apt-get.cc:990 +#: cmdline/apt-get.cc:988 msgid "--fix-missing and media swapping is not currently supported" msgstr "--fix-missing und Wechselmedien werden zurzeit nicht unterstützt" -#: cmdline/apt-get.cc:995 +#: cmdline/apt-get.cc:993 msgid "Unable to correct missing packages." msgstr "Konnte fehlende Pakete nicht korrigieren." -#: cmdline/apt-get.cc:996 +#: cmdline/apt-get.cc:994 msgid "Aborting install." msgstr "Installation abgebrochen." -#: cmdline/apt-get.cc:1030 +#: cmdline/apt-get.cc:1028 #, c-format msgid "Note, selecting %s instead of %s\n" msgstr "Achtung, wähle %s an Stelle von %s\n" -#: cmdline/apt-get.cc:1040 +#: cmdline/apt-get.cc:1038 #, c-format msgid "Skipping %s, it is already installed and upgrade is not set.\n" msgstr "" "Überspringe %s, es ist schon installiert und »upgrade« ist nicht gesetzt.\n" -#: cmdline/apt-get.cc:1058 +#: cmdline/apt-get.cc:1056 #, c-format msgid "Package %s is not installed, so not removed\n" msgstr "Paket %s ist nicht installiert, wird also auch nicht entfernt\n" -#: cmdline/apt-get.cc:1069 +#: cmdline/apt-get.cc:1067 #, c-format msgid "Package %s is a virtual package provided by:\n" msgstr "Pakete %s ist ein virtuelles Pakete, das bereitgestellt wird von:\n" -#: cmdline/apt-get.cc:1081 +#: cmdline/apt-get.cc:1079 msgid " [Installed]" msgstr " [Installiert]" -#: cmdline/apt-get.cc:1086 +#: cmdline/apt-get.cc:1084 msgid "You should explicitly select one to install." msgstr "Sie sollten eines explizit zum Installieren auswählen." -#: cmdline/apt-get.cc:1091 +#: cmdline/apt-get.cc:1089 #, c-format msgid "" "Package %s is not available, but is referred to by another package.\n" @@ -955,51 +950,51 @@ msgstr "" "Paket referenziert. Das kann heißen, dass das Paket fehlt, dass es veraltet\n" "ist oder nur aus einer anderen Quelle verfügbar ist.\n" -#: cmdline/apt-get.cc:1110 +#: cmdline/apt-get.cc:1108 msgid "However the following packages replace it:" msgstr "Doch die folgenden Pakete ersetzen es:" -#: cmdline/apt-get.cc:1113 +#: cmdline/apt-get.cc:1111 #, c-format msgid "Package %s has no installation candidate" msgstr "Paket %s hat keinen Installationskandidaten" -#: cmdline/apt-get.cc:1133 +#: cmdline/apt-get.cc:1131 #, c-format msgid "Reinstallation of %s is not possible, it cannot be downloaded.\n" msgstr "" "Re-Installation von %s ist nicht möglich,\n" "es kann nicht heruntergeladen werden.\n" -#: cmdline/apt-get.cc:1141 +#: cmdline/apt-get.cc:1139 #, c-format msgid "%s is already the newest version.\n" msgstr "%s ist schon die neueste Version.\n" -#: cmdline/apt-get.cc:1168 +#: cmdline/apt-get.cc:1166 #, c-format msgid "Release '%s' for '%s' was not found" msgstr "Release »%s« für »%s« konnte nicht gefunden werden" -#: cmdline/apt-get.cc:1170 +#: cmdline/apt-get.cc:1168 #, c-format msgid "Version '%s' for '%s' was not found" msgstr "Version »%s« für »%s« konnte nicht gefunden werden" -#: cmdline/apt-get.cc:1176 +#: cmdline/apt-get.cc:1174 #, c-format msgid "Selected version %s (%s) for %s\n" msgstr "Gewählte Version %s (%s) für %s\n" -#: cmdline/apt-get.cc:1313 +#: cmdline/apt-get.cc:1284 msgid "The update command takes no arguments" msgstr "Der Befehl »update« nimmt keine Argumente" -#: cmdline/apt-get.cc:1326 cmdline/apt-get.cc:1420 +#: cmdline/apt-get.cc:1297 cmdline/apt-get.cc:1391 msgid "Unable to lock the list directory" msgstr "Kann kein Lock auf das Listenverzeichnis bekommen" -#: cmdline/apt-get.cc:1384 +#: cmdline/apt-get.cc:1355 msgid "" "Some index files failed to download, they have been ignored, or old ones " "used instead." @@ -1007,27 +1002,27 @@ msgstr "" "Einige Indexdateien konnten nicht heruntergeladen werden, sie wurden " "ignoriert oder alte an ihrer Stelle benutzt." -#: cmdline/apt-get.cc:1403 +#: cmdline/apt-get.cc:1374 msgid "Internal error, AllUpgrade broke stuff" msgstr "Interner Fehler, AllUpgrade hat was kaputt gemacht" -#: cmdline/apt-get.cc:1502 cmdline/apt-get.cc:1538 +#: cmdline/apt-get.cc:1473 cmdline/apt-get.cc:1509 #, c-format msgid "Couldn't find package %s" msgstr "Konnte Paket %s nicht finden" -#: cmdline/apt-get.cc:1525 +#: cmdline/apt-get.cc:1496 #, c-format msgid "Note, selecting %s for regex '%s'\n" msgstr "Achtung, wähle %s für reg. Ausdruck »%s«\n" -#: cmdline/apt-get.cc:1555 +#: cmdline/apt-get.cc:1526 msgid "You might want to run `apt-get -f install' to correct these:" msgstr "" "Sie möchten wahrscheinlich »apt-get -f install« aufrufen, um dies zu " "korrigieren:" -#: cmdline/apt-get.cc:1558 +#: cmdline/apt-get.cc:1529 msgid "" "Unmet dependencies. Try 'apt-get -f install' with no packages (or specify a " "solution)." @@ -1035,7 +1030,7 @@ msgstr "" "Nichterfüllte Abhängigkeiten. Versuchen Sie »apt-get -f install« ohne " "jeglich Pakete (oder geben Sie eine Lösung an)." -#: cmdline/apt-get.cc:1570 +#: cmdline/apt-get.cc:1541 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" @@ -1047,7 +1042,7 @@ msgstr "" "instabile Distribution verwenden, einige erforderliche Pakete noch nicht\n" "kreiert oder aus Incoming herausbewegt wurden." -#: cmdline/apt-get.cc:1578 +#: cmdline/apt-get.cc:1549 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" @@ -1058,124 +1053,119 @@ msgstr "" "dass das Paket einfach nicht installierbar ist und eine Fehlermeldung über\n" "dieses Paket erfolgen sollte." -#: cmdline/apt-get.cc:1583 +#: cmdline/apt-get.cc:1554 msgid "The following information may help to resolve the situation:" msgstr "" "Die folgenden Informationen helfen Ihnen vielleicht, die Situation zu lösen:" -#: cmdline/apt-get.cc:1586 +#: cmdline/apt-get.cc:1557 msgid "Broken packages" msgstr "Kaputte Pakete" -#: cmdline/apt-get.cc:1612 +#: cmdline/apt-get.cc:1583 msgid "The following extra packages will be installed:" msgstr "Die folgenden zusätzlichen Pakete werden installiert:" -#: cmdline/apt-get.cc:1683 +#: cmdline/apt-get.cc:1654 msgid "Suggested packages:" msgstr "Vorgeschlagene Pakete:" -#: cmdline/apt-get.cc:1684 +#: cmdline/apt-get.cc:1655 msgid "Recommended packages:" msgstr "Empfohlene Pakete:" -#: cmdline/apt-get.cc:1704 +#: cmdline/apt-get.cc:1675 msgid "Calculating upgrade... " msgstr "Berechne Upgrade..." -#: cmdline/apt-get.cc:1707 methods/ftp.cc:702 methods/connect.cc:101 +#: cmdline/apt-get.cc:1678 methods/ftp.cc:702 methods/connect.cc:101 msgid "Failed" msgstr "Fehlgeschlagen" -#: cmdline/apt-get.cc:1712 +#: cmdline/apt-get.cc:1683 msgid "Done" msgstr "Fertig" -#: cmdline/apt-get.cc:1777 cmdline/apt-get.cc:1785 +#: cmdline/apt-get.cc:1748 cmdline/apt-get.cc:1756 msgid "Internal error, problem resolver broke stuff" msgstr "Interner Fehler, der Problem-Löser hat was kaputt gemacht" -#: cmdline/apt-get.cc:1885 +#: cmdline/apt-get.cc:1856 msgid "Must specify at least one package to fetch source for" msgstr "" "Es muss mindesten ein Paket angegeben werden, dessen Quellen geholt werden " "sollen" -#: cmdline/apt-get.cc:1915 cmdline/apt-get.cc:2144 +#: cmdline/apt-get.cc:1883 cmdline/apt-get.cc:2091 #, c-format msgid "Unable to find a source package for %s" msgstr "Kann Quellpaket für %s nicht finden" -#: cmdline/apt-get.cc:1959 -#, fuzzy, c-format -msgid "Skiping already downloaded file '%s'\n" -msgstr "Überspringe Entpacken der schon entpackten Quelle in %s\n" - -#: cmdline/apt-get.cc:1983 +#: cmdline/apt-get.cc:1930 #, c-format msgid "You don't have enough free space in %s" msgstr "Sie haben nicht genug freien Platz in %s" -#: cmdline/apt-get.cc:1988 +#: cmdline/apt-get.cc:1935 #, c-format msgid "Need to get %sB/%sB of source archives.\n" msgstr "Es müssen noch %sB/%sB der Quellarchive geholt werden.\n" -#: cmdline/apt-get.cc:1991 +#: cmdline/apt-get.cc:1938 #, c-format msgid "Need to get %sB of source archives.\n" msgstr "Es müssen %sB der Quellarchive geholt werden.\n" -#: cmdline/apt-get.cc:1997 +#: cmdline/apt-get.cc:1944 #, c-format msgid "Fetch source %s\n" msgstr "Hole Quelle %s\n" -#: cmdline/apt-get.cc:2028 +#: cmdline/apt-get.cc:1975 msgid "Failed to fetch some archives." msgstr "Konnte einige Archive nicht holen." -#: cmdline/apt-get.cc:2056 +#: cmdline/apt-get.cc:2003 #, c-format msgid "Skipping unpack of already unpacked source in %s\n" msgstr "Überspringe Entpacken der schon entpackten Quelle in %s\n" -#: cmdline/apt-get.cc:2068 +#: cmdline/apt-get.cc:2015 #, c-format msgid "Unpack command '%s' failed.\n" msgstr "Entpack-Befehl »%s« fehlgeschlagen.\n" -#: cmdline/apt-get.cc:2069 +#: cmdline/apt-get.cc:2016 #, c-format msgid "Check if the 'dpkg-dev' package is installed.\n" msgstr "" -#: cmdline/apt-get.cc:2086 +#: cmdline/apt-get.cc:2033 #, c-format msgid "Build command '%s' failed.\n" msgstr "Build-Befehl »%s« fehlgeschlagen.\n" -#: cmdline/apt-get.cc:2105 +#: cmdline/apt-get.cc:2052 msgid "Child process failed" msgstr "Kindprozess fehlgeschlagen" -#: cmdline/apt-get.cc:2121 +#: cmdline/apt-get.cc:2068 msgid "Must specify at least one package to check builddeps for" msgstr "" "Es muss zumindest ein Paket angegeben werden, dessen Build-Dependencies\n" "überprüft werden sollen." -#: cmdline/apt-get.cc:2149 +#: cmdline/apt-get.cc:2096 #, c-format msgid "Unable to get build-dependency information for %s" msgstr "Information zu Build-Dependencies für %s konnte nicht gefunden werden." -#: cmdline/apt-get.cc:2169 +#: cmdline/apt-get.cc:2116 #, c-format msgid "%s has no build depends.\n" msgstr "%s hat keine Build-Dependencies.\n" -#: cmdline/apt-get.cc:2221 +#: cmdline/apt-get.cc:2168 #, c-format msgid "" "%s dependency for %s cannot be satisfied because the package %s cannot be " @@ -1184,7 +1174,7 @@ msgstr "" "%s Abhängigkeit für %s kann nicht befriedigt werden, da Paket %s nicht " "gefunden werden kann." -#: cmdline/apt-get.cc:2273 +#: cmdline/apt-get.cc:2220 #, c-format msgid "" "%s dependency for %s cannot be satisfied because no available versions of " @@ -1193,32 +1183,32 @@ msgstr "" "%s Abhängigkeit für %s kann nicht befriedigt werden, da keine verfügbare " "Version von Paket %s die Versionsanforderungen erfüllen kann." -#: cmdline/apt-get.cc:2308 +#: cmdline/apt-get.cc:2255 #, c-format msgid "Failed to satisfy %s dependency for %s: Installed package %s is too new" msgstr "" "Konnte die %s-Abhängigkeit für %s nicht erfüllen: Installiertes Paket %s ist " "zu neu." -#: cmdline/apt-get.cc:2333 +#: cmdline/apt-get.cc:2280 #, c-format msgid "Failed to satisfy %s dependency for %s: %s" msgstr "Konnte die %s-Abhängigkeit für %s nicht erfüllen: %s" -#: cmdline/apt-get.cc:2347 +#: cmdline/apt-get.cc:2294 #, c-format msgid "Build-dependencies for %s could not be satisfied." msgstr "Build-Abhängigkeit für %s konnte nicht erfüllt werden." -#: cmdline/apt-get.cc:2351 +#: cmdline/apt-get.cc:2298 msgid "Failed to process build dependencies" msgstr "Verarbeitung der Build-Dependencies fehlgeschlagen" -#: cmdline/apt-get.cc:2383 +#: cmdline/apt-get.cc:2330 msgid "Supported modules:" msgstr "Unterstützte Module:" -#: cmdline/apt-get.cc:2424 +#: cmdline/apt-get.cc:2371 msgid "" "Usage: apt-get [options] command\n" " apt-get [options] install|remove pkg1 [pkg2 ...]\n" @@ -1479,7 +1469,7 @@ msgstr "Doppelte Konfigurationsdatei %s/%s" msgid "Failed to write file %s" msgstr "Konnte nicht in Datei %s schreiben" -#: apt-inst/dirstream.cc:96 apt-inst/dirstream.cc:104 +#: apt-inst/dirstream.cc:80 apt-inst/dirstream.cc:88 #, c-format msgid "Failed to close file %s" msgstr "Konnte Datei %s nicht schließen" @@ -1532,8 +1522,7 @@ msgid "File %s/%s overwrites the one in the package %s" msgstr "Datei %s/%s überschreibt die Datei in Paket %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 +#: apt-pkg/contrib/cdromutl.cc:153 apt-pkg/acquire.cc:417 apt-pkg/clean.cc:38 #, c-format msgid "Unable to read %s" msgstr "Kann %s nicht lesen" @@ -1564,9 +1553,9 @@ msgstr "" "Die »info«- und »temp«-Verzeichnisse müssen im selben Dateisystem liegen" #. 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:748 +#: apt-pkg/pkgcachegen.cc:817 apt-pkg/pkgcachegen.cc:822 +#: apt-pkg/pkgcachegen.cc:945 msgid "Reading package lists" msgstr "Paketlisten werden gelesen" @@ -1709,11 +1698,12 @@ msgstr "Datei nicht gefunden" # looks like someone hardcoded English grammar
#: methods/copy.cc:42 methods/gpgv.cc:265 methods/gzip.cc:133 -#: methods/gzip.cc:142 +#: methods/gzip.cc:142 methods/rred.cc:234 methods/rred.cc:243 msgid "Failed to stat" msgstr "Kann nicht zugreifen." #: methods/copy.cc:79 methods/gpgv.cc:262 methods/gzip.cc:139 +#: methods/rred.cc:240 msgid "Failed to set modification time" msgstr "Kann Änderungszeitpunkt nicht setzen" @@ -1842,7 +1832,7 @@ msgstr "Datenverbindungsaufbau erlitt Zeitüberschreitung" msgid "Unable to accept connection" msgstr "Kann Verbindung nicht annehmen" -#: methods/ftp.cc:864 methods/http.cc:963 methods/rsh.cc:303 +#: methods/ftp.cc:864 methods/http.cc:921 methods/rsh.cc:303 msgid "Problem hashing file" msgstr "Bei Bestimmung des Hashwertes einer Datei trat ein Problem auf" @@ -1975,78 +1965,78 @@ msgstr "Konnte keine Pipe für %s öffnen" msgid "Read error from %s process" msgstr "Lesefehler von Prozess %s" -#: methods/http.cc:381 +#: methods/http.cc:345 msgid "Waiting for headers" msgstr "Warte auf Kopfzeilen (header)" -#: methods/http.cc:527 +#: methods/http.cc:491 #, c-format msgid "Got a single header line over %u chars" msgstr "Erhielt einzelne Kopfzeile aus %u Zeichen" -#: methods/http.cc:535 +#: methods/http.cc:499 msgid "Bad header line" msgstr "Schlechte Kopfzeile" -#: methods/http.cc:554 methods/http.cc:561 +#: methods/http.cc:518 methods/http.cc:525 msgid "The HTTP server sent an invalid reply header" msgstr "Der http-Server sandte eine ungültige Antwort-Kopfzeile" -#: methods/http.cc:590 +#: methods/http.cc:554 msgid "The HTTP server sent an invalid Content-Length header" msgstr "Der http-Server sandte eine ungültige »Content-Length«-Kopfzeile" -#: methods/http.cc:605 +#: methods/http.cc:569 msgid "The HTTP server sent an invalid Content-Range header" msgstr "Der http-Server sandte eine ungültige »Content-Range«-Kopfzeile" -#: methods/http.cc:607 +#: methods/http.cc:571 msgid "This HTTP server has broken range support" msgstr "Der http-Server unterstützt Dateiteilübertragung nur fehlerhaft." -#: methods/http.cc:631 +#: methods/http.cc:595 msgid "Unknown date format" msgstr "Unbekanntes Datumsformat" -#: methods/http.cc:778 +#: methods/http.cc:742 msgid "Select failed" msgstr "Auswahl fehlgeschlagen" -#: methods/http.cc:783 +#: methods/http.cc:747 msgid "Connection timed out" msgstr "Verbindung erlitt Zeitüberschreitung" -#: methods/http.cc:806 +#: methods/http.cc:770 msgid "Error writing to output file" msgstr "Fehler beim Schreiben einer Ausgabedatei" -#: methods/http.cc:837 +#: methods/http.cc:798 msgid "Error writing to file" msgstr "Fehler beim Schreiben einer Datei" -#: methods/http.cc:865 +#: methods/http.cc:823 msgid "Error writing to the file" msgstr "Fehler beim Schreiben der Datei" -#: methods/http.cc:879 +#: methods/http.cc:837 msgid "Error reading from server. Remote end closed connection" msgstr "" "Fehler beim Lesen vom Server: Das entfernte Ende hat die Verbindung " "geschlossen" -#: methods/http.cc:881 +#: methods/http.cc:839 msgid "Error reading from server" msgstr "Fehler beim Lesen vom Server" -#: methods/http.cc:1112 +#: methods/http.cc:1070 msgid "Bad header data" msgstr "Fehlerhafte Kopfzeilendaten" -#: methods/http.cc:1129 +#: methods/http.cc:1087 msgid "Connection failed" msgstr "Verbindung fehlgeschlagen" -#: methods/http.cc:1220 +#: methods/http.cc:1178 msgid "Internal error" msgstr "Interner Fehler" @@ -2059,7 +2049,7 @@ msgstr "Kann eine leere Datei nicht mit mmap abbilden" msgid "Couldn't make mmap of %lu bytes" msgstr "Konnte kein mmap von %lu Bytes durchführen" -#: apt-pkg/contrib/strutl.cc:938 +#: apt-pkg/contrib/strutl.cc:984 #, c-format msgid "Selection %s not found" msgstr "Auswahl %s nicht gefunden" @@ -2181,7 +2171,7 @@ msgstr "Ungültige Operation %s." msgid "Unable to stat the mount point %s" msgstr "Kann auf den Einhängepunkt %s nicht zugreifen." -#: apt-pkg/contrib/cdromutl.cc:149 apt-pkg/acquire.cc:427 apt-pkg/clean.cc:44 +#: apt-pkg/contrib/cdromutl.cc:149 apt-pkg/acquire.cc:423 apt-pkg/clean.cc:44 #, c-format msgid "Unable to change to %s" msgstr "Kann nicht nach %s wechseln" @@ -2257,72 +2247,72 @@ msgstr "Beim Unlinking Datei trat ein Problem auf" msgid "Problem syncing the file" msgstr "Beim Synchronisieren einer Datei trat ein Problem auf" -#: apt-pkg/pkgcache.cc:126 +#: apt-pkg/pkgcache.cc:135 msgid "Empty package cache" msgstr "Leerer Paketcache" -#: apt-pkg/pkgcache.cc:132 +#: apt-pkg/pkgcache.cc:141 msgid "The package cache file is corrupted" msgstr "Die Paketcachedatei ist korrumpiert" -#: apt-pkg/pkgcache.cc:137 +#: apt-pkg/pkgcache.cc:146 msgid "The package cache file is an incompatible version" msgstr "Die Paketcachedatei ist in einer inkompatiblen Version" -#: apt-pkg/pkgcache.cc:142 +#: apt-pkg/pkgcache.cc:151 #, c-format msgid "This APT does not support the versioning system '%s'" msgstr "Dieses APT unterstützt das Versionssystem »%s« nicht" -#: apt-pkg/pkgcache.cc:147 +#: apt-pkg/pkgcache.cc:156 msgid "The package cache was built for a different architecture" msgstr "Der Paketcache wurde für eine andere Architektur aufgebaut" -#: apt-pkg/pkgcache.cc:218 +#: apt-pkg/pkgcache.cc:227 msgid "Depends" msgstr "Hängt ab" -#: apt-pkg/pkgcache.cc:218 +#: apt-pkg/pkgcache.cc:227 msgid "PreDepends" msgstr "Hängt ab (vorher)" -#: apt-pkg/pkgcache.cc:218 +#: apt-pkg/pkgcache.cc:227 msgid "Suggests" msgstr "Schlägt vor" -#: apt-pkg/pkgcache.cc:219 +#: apt-pkg/pkgcache.cc:228 msgid "Recommends" msgstr "Empfiehlt" -#: apt-pkg/pkgcache.cc:219 +#: apt-pkg/pkgcache.cc:228 msgid "Conflicts" msgstr "Kollidiert" -#: apt-pkg/pkgcache.cc:219 +#: apt-pkg/pkgcache.cc:228 msgid "Replaces" msgstr "Ersetzt" -#: apt-pkg/pkgcache.cc:220 +#: apt-pkg/pkgcache.cc:229 msgid "Obsoletes" msgstr "Veraltet" -#: apt-pkg/pkgcache.cc:231 +#: apt-pkg/pkgcache.cc:240 msgid "important" msgstr "wichtig" -#: apt-pkg/pkgcache.cc:231 +#: apt-pkg/pkgcache.cc:240 msgid "required" msgstr "erforderlich" -#: apt-pkg/pkgcache.cc:231 +#: apt-pkg/pkgcache.cc:240 msgid "standard" msgstr "standard" -#: apt-pkg/pkgcache.cc:232 +#: apt-pkg/pkgcache.cc:241 msgid "optional" msgstr "optional" -#: apt-pkg/pkgcache.cc:232 +#: apt-pkg/pkgcache.cc:241 msgid "extra" msgstr "extra" @@ -2348,52 +2338,52 @@ msgstr "Kann Paketdatei %s nicht parsen (1)" msgid "Unable to parse package file %s (2)" msgstr "Kann Paketdatei %s nicht parsen (2)" -#: apt-pkg/sourcelist.cc:94 +#: apt-pkg/sourcelist.cc:87 #, c-format msgid "Malformed line %lu in source list %s (URI)" msgstr "Missgestaltete Zeile %lu in Quellliste %s (»URI«)" -#: apt-pkg/sourcelist.cc:96 +#: apt-pkg/sourcelist.cc:89 #, c-format msgid "Malformed line %lu in source list %s (dist)" msgstr "Missgestaltete Zeile %lu in Quellliste %s (»dist«)" -#: apt-pkg/sourcelist.cc:99 +#: apt-pkg/sourcelist.cc:92 #, c-format msgid "Malformed line %lu in source list %s (URI parse)" msgstr "Missgestaltete Zeile %lu in Quellliste %s (»URI parse«)" -#: apt-pkg/sourcelist.cc:105 +#: apt-pkg/sourcelist.cc:98 #, c-format msgid "Malformed line %lu in source list %s (absolute dist)" msgstr "Missgestaltete Zeile %lu in Quellliste %s (»absolute dist«)" -#: apt-pkg/sourcelist.cc:112 +#: apt-pkg/sourcelist.cc:105 #, c-format msgid "Malformed line %lu in source list %s (dist parse)" msgstr "Missgestaltete Zeile %lu in Quellliste %s (»dist parse«)" -#: apt-pkg/sourcelist.cc:203 +#: apt-pkg/sourcelist.cc:156 #, c-format msgid "Opening %s" msgstr "%s wird geöffnet" -#: apt-pkg/sourcelist.cc:220 apt-pkg/cdrom.cc:426 +#: apt-pkg/sourcelist.cc:170 apt-pkg/cdrom.cc:450 #, c-format msgid "Line %u too long in source list %s." msgstr "Zeile %u zu lang in der Quellliste %s." -#: apt-pkg/sourcelist.cc:240 +#: apt-pkg/sourcelist.cc:187 #, c-format msgid "Malformed line %u in source list %s (type)" msgstr "Missgestaltete Zeile %u in Quellliste %s (»type«)" -#: apt-pkg/sourcelist.cc:244 +#: apt-pkg/sourcelist.cc:191 #, fuzzy, c-format msgid "Type '%s' is not known on line %u in source list %s" msgstr "Typ »%s« ist unbekannt in Zeile %u der Quellliste %s" -#: apt-pkg/sourcelist.cc:252 apt-pkg/sourcelist.cc:255 +#: apt-pkg/sourcelist.cc:199 apt-pkg/sourcelist.cc:202 #, c-format msgid "Malformed line %u in source list %s (vendor id)" msgstr "Missgestaltete Zeile %u in Quellliste %s (»vendor id«)" @@ -2445,7 +2435,7 @@ msgstr "Listenverzeichnis %spartial fehlt." msgid "Archive directory %spartial is missing." msgstr "Archivverzeichnis %spartial fehlt." -#: apt-pkg/acquire.cc:821 +#: apt-pkg/acquire.cc:817 #, c-format msgid "Downloading file %li of %li (%s remaining)" msgstr "" @@ -2468,12 +2458,12 @@ msgstr "" " »%s«\n" "in Laufwerk »%s« und drücken Sie die Eingabetaste.\n" -#: apt-pkg/init.cc:120 +#: apt-pkg/init.cc:122 #, c-format msgid "Packaging system '%s' is not supported" msgstr "Paketierungssystem »%s« wird nicht unterstützt" -#: apt-pkg/init.cc:136 +#: apt-pkg/init.cc:138 msgid "Unable to determine a suitable packaging system type" msgstr "Kann keinen passenden Paketierungssystem-Typ bestimmen" @@ -2521,92 +2511,110 @@ msgstr "Dieser Paketcache wurde für ein inkompatibles Versionssystem aufgebaut" msgid "Error occurred while processing %s (NewPackage)" msgstr "Ein Fehler trat beim Bearbeiten von %s auf (NewPackage)" -#: apt-pkg/pkgcachegen.cc:129 +#: apt-pkg/pkgcachegen.cc:132 #, c-format msgid "Error occurred while processing %s (UsePackage1)" msgstr "Ein Fehler trat beim Bearbeiten von %s auf (UsePackage1)" -#: apt-pkg/pkgcachegen.cc:150 +#: apt-pkg/pkgcachegen.cc:155 +#, fuzzy, c-format +msgid "Error occured while processing %s (NewFileDesc1)" +msgstr "Ein Fehler trat beim Bearbeiten von %s auf (NewFileVer1)" + +#: apt-pkg/pkgcachegen.cc:180 #, c-format msgid "Error occurred while processing %s (UsePackage2)" msgstr "Ein Fehler trat beim Bearbeiten von %s auf (UsePackage2)" -#: apt-pkg/pkgcachegen.cc:154 +#: apt-pkg/pkgcachegen.cc:184 #, c-format msgid "Error occurred while processing %s (NewFileVer1)" msgstr "Ein Fehler trat beim Bearbeiten von %s auf (NewFileVer1)" -#: apt-pkg/pkgcachegen.cc:184 +#: apt-pkg/pkgcachegen.cc:215 #, c-format msgid "Error occurred while processing %s (NewVersion1)" msgstr "Ein Fehler trat beim Bearbeiten von %s auf (NewVersion1)" -#: apt-pkg/pkgcachegen.cc:188 +#: apt-pkg/pkgcachegen.cc:219 #, c-format msgid "Error occurred while processing %s (UsePackage3)" msgstr "Ein Fehler trat beim Bearbeiten von %s auf (UsePackage3)" -#: apt-pkg/pkgcachegen.cc:192 +#: apt-pkg/pkgcachegen.cc:223 #, c-format msgid "Error occurred while processing %s (NewVersion2)" msgstr "Ein Fehler trat beim Bearbeiten von %s auf (NewVersion2)" -#: apt-pkg/pkgcachegen.cc:207 +#: apt-pkg/pkgcachegen.cc:247 +#, fuzzy, c-format +msgid "Error occured while processing %s (NewFileDesc2)" +msgstr "Ein Fehler trat beim Bearbeiten von %s auf (NewFileVer1)" + +#: apt-pkg/pkgcachegen.cc:253 msgid "Wow, you exceeded the number of package names this APT is capable of." msgstr "" "Toll, Sie haben die Anzahl an Paketen überschritten, die APT handhaben kann." -#: apt-pkg/pkgcachegen.cc:210 +#: apt-pkg/pkgcachegen.cc:256 msgid "Wow, you exceeded the number of versions this APT is capable of." msgstr "" "Toll, Sie haben die Anzahl an Versionen überschritten, die APT handhaben " "kann." -#: apt-pkg/pkgcachegen.cc:213 +#: apt-pkg/pkgcachegen.cc:259 +#, fuzzy +msgid "Wow, you exceeded the number of descriptions this APT is capable of." +msgstr "" +"Toll, Sie haben die Anzahl an Versionen überschritten, die APT handhaben " +"kann." + +#: apt-pkg/pkgcachegen.cc:262 msgid "Wow, you exceeded the number of dependencies this APT is capable of." msgstr "" "Toll, Sie haben die Anzahl an Abhängigkeiten überschritten, die APT " "handhaben kann." -#: apt-pkg/pkgcachegen.cc:241 +#: apt-pkg/pkgcachegen.cc:290 #, c-format msgid "Error occurred while processing %s (FindPkg)" msgstr "Fehler trat beim Bearbeiten von %s auf (FindPkg)" -#: apt-pkg/pkgcachegen.cc:254 +#: apt-pkg/pkgcachegen.cc:303 #, c-format msgid "Error occurred while processing %s (CollectFileProvides)" msgstr "Fehler trat beim Bearbeiten von %s auf (CollectFileProvides)" -#: apt-pkg/pkgcachegen.cc:260 +#: apt-pkg/pkgcachegen.cc:309 #, c-format msgid "Package %s %s was not found while processing file dependencies" msgstr "" "Paket %s %s wurde nicht gefunden beim Verarbeiten der Dateiabhängigkeiten" -#: apt-pkg/pkgcachegen.cc:574 +#: apt-pkg/pkgcachegen.cc:679 #, c-format msgid "Couldn't stat source package list %s" msgstr "Kann nicht auf die Liste %s der Quellpakete zugreifen." -#: apt-pkg/pkgcachegen.cc:658 +#: apt-pkg/pkgcachegen.cc:763 msgid "Collecting File Provides" msgstr "Sammle Datei-Empfehlungen ein" -#: apt-pkg/pkgcachegen.cc:785 apt-pkg/pkgcachegen.cc:792 +#: apt-pkg/pkgcachegen.cc:890 apt-pkg/pkgcachegen.cc:897 msgid "IO Error saving source cache" msgstr "E/A-Fehler beim Sichern des Quellcaches" -#: apt-pkg/acquire-item.cc:126 +#: apt-pkg/acquire-item.cc:129 #, c-format msgid "rename failed, %s (%s -> %s)." msgstr "Umbenennen fehlgeschlagen, %s (%s -> %s)." -#: apt-pkg/acquire-item.cc:236 apt-pkg/acquire-item.cc:911 +#: apt-pkg/acquire-item.cc:391 apt-pkg/acquire-item.cc:635 +#: apt-pkg/acquire-item.cc:1336 msgid "MD5Sum mismatch" msgstr "MD5-Summe stimmt nicht" -#: apt-pkg/acquire-item.cc:719 +#: apt-pkg/acquire-item.cc:1150 #, c-format msgid "" "I wasn't able to locate a file for the %s package. This might mean you need " @@ -2615,7 +2623,7 @@ msgstr "" "Ich konnte keine Datei für Paket %s finden. Das könnte heißen, dass Sie " "dieses Paket von Hand korrigieren müssen (aufgrund fehlender Architektur)." -#: apt-pkg/acquire-item.cc:778 +#: apt-pkg/acquire-item.cc:1203 #, c-format msgid "" "I wasn't able to locate file for the %s package. This might mean you need to " @@ -2624,14 +2632,14 @@ msgstr "" "Ich konnte keine Datei für Paket %s finden. Das könnte heißen, dass Sie " "dieses Paket von Hand korrigieren müssen." -#: apt-pkg/acquire-item.cc:814 +#: apt-pkg/acquire-item.cc:1239 #, c-format msgid "" "The package index files are corrupted. No Filename: field for package %s." msgstr "" "Die Paketindexdateien sind korrumpiert: Kein Filename:-Feld für Paket %s." -#: apt-pkg/acquire-item.cc:901 +#: apt-pkg/acquire-item.cc:1326 msgid "Size mismatch" msgstr "Größe stimmt nicht" @@ -2640,7 +2648,7 @@ msgstr "Größe stimmt nicht" msgid "Vendor block %s contains no fingerprint" msgstr "Herstellerblock %s enthält keinen Fingerabdruck" -#: apt-pkg/cdrom.cc:507 +#: apt-pkg/cdrom.cc:531 #, c-format msgid "" "Using CD-ROM mount point %s\n" @@ -2649,47 +2657,49 @@ msgstr "" "Benutze CD-ROM-Einhängpunkt %s\n" "Hänge CD ein\n" -#: apt-pkg/cdrom.cc:516 apt-pkg/cdrom.cc:598 +#: apt-pkg/cdrom.cc:540 apt-pkg/cdrom.cc:622 msgid "Identifying.. " msgstr "Identifiziere... " -#: apt-pkg/cdrom.cc:541 +#: apt-pkg/cdrom.cc:565 #, c-format msgid "Stored label: %s \n" msgstr "Gespeicherte Kennzeichnung: %s \n" -#: apt-pkg/cdrom.cc:561 +#: apt-pkg/cdrom.cc:585 #, c-format msgid "Using CD-ROM mount point %s\n" msgstr "Benutze CD-ROM-Einhängpunkt %s\n" -#: apt-pkg/cdrom.cc:579 +#: apt-pkg/cdrom.cc:603 msgid "Unmounting CD-ROM\n" msgstr "Hänge CD-ROM aus\n" -#: apt-pkg/cdrom.cc:583 +#: apt-pkg/cdrom.cc:607 msgid "Waiting for disc...\n" msgstr "Warte auf CD...\n" #. Mount the new CDROM -#: apt-pkg/cdrom.cc:591 +#: apt-pkg/cdrom.cc:615 msgid "Mounting CD-ROM...\n" msgstr "Hänge CD-ROM ein...\n" -#: apt-pkg/cdrom.cc:609 +#: apt-pkg/cdrom.cc:633 msgid "Scanning disc for index files..\n" msgstr "Suche auf CD nach Index-Dateien...\n" -#: apt-pkg/cdrom.cc:647 -#, c-format -msgid "Found %i package indexes, %i source indexes and %i signatures\n" +#: apt-pkg/cdrom.cc:673 +#, fuzzy, c-format +msgid "" +"Found %i package indexes, %i source indexes, %i translation indexes and %i " +"signatures\n" msgstr "Fand %i Paketindexe, %i Quellenindexe und %i Signaturen\n" -#: apt-pkg/cdrom.cc:710 +#: apt-pkg/cdrom.cc:737 msgid "That is not a valid name, try again.\n" msgstr "Dies ist kein gültiger Name, versuchen Sie es erneut.\n" -#: apt-pkg/cdrom.cc:726 +#: apt-pkg/cdrom.cc:753 #, c-format msgid "" "This disc is called: \n" @@ -2698,38 +2708,38 @@ msgstr "" "Diese CD heißt jetzt: \n" "»%s«\n" -#: apt-pkg/cdrom.cc:730 +#: apt-pkg/cdrom.cc:757 msgid "Copying package lists..." msgstr "Kopiere Paketlisten..." -#: apt-pkg/cdrom.cc:754 +#: apt-pkg/cdrom.cc:783 msgid "Writing new source list\n" msgstr "Schreibe neue Quellliste\n" -#: apt-pkg/cdrom.cc:763 +#: apt-pkg/cdrom.cc:792 msgid "Source list entries for this disc are:\n" msgstr "Quelllisteneinträge für diese CD sind:\n" -#: apt-pkg/cdrom.cc:803 +#: apt-pkg/cdrom.cc:832 msgid "Unmounting CD-ROM..." msgstr "Hänge CD-ROM aus..." -#: apt-pkg/indexcopy.cc:261 +#: apt-pkg/indexcopy.cc:263 apt-pkg/indexcopy.cc:830 #, c-format msgid "Wrote %i records.\n" msgstr "Es wurden %i Datensätze geschrieben.\n" -#: 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 "Es wurden %i Datensätze mit %i fehlenden Dateien geschrieben.\n" -#: 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 "Es wurden %i Datensätze mit %i nicht passenden Dateien geschrieben.\n" -#: 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 "" @@ -2786,10 +2796,32 @@ msgstr "" msgid "Removed with config %s" msgstr "" +#: methods/rred.cc:219 +#, fuzzy +msgid "Could not patch file" +msgstr "Konnte Datei %s nicht öffnen" + #: methods/rsh.cc:330 msgid "Connection closed prematurely" msgstr "Verbindung zu früh beendet" +#~ msgid "Please provide a name for this Disc, such as 'Debian 2.1r1 Disk 1'" +#~ msgstr "" +#~ "Bitte geben Sie einen Namen für die CD an, wie zum Beispiel »Debian 2.2r1 " +#~ "Disk 1«" + +#~ msgid "Please insert a Disc in the drive and press enter" +#~ msgstr "" +#~ "Bitte legen Sie ein Medium ins Laufwerk und drücken Sie die Eingabetaste" + +#~ msgid "Repeat this process for the rest of the CDs in your set." +#~ msgstr "" +#~ "Wiederholen Sie dieses Prozedere für Ihre restlichen CDs diese Reihe." + +#, fuzzy +#~ msgid "Skiping already downloaded file '%s'\n" +#~ msgstr "Überspringe Entpacken der schon entpackten Quelle in %s\n" + #~ msgid "Unknown vendor ID '%s' in line %u of source list %s" #~ msgstr "Unbekannte Herstellerkennung »%s« in Zeile %u der Quellliste %s" |