From a537ce19f955f39ee62281bb12bc71a4c67bc635 Mon Sep 17 00:00:00 2001 From: Michael Vogt Date: Mon, 2 Dec 2013 08:01:00 +0100 Subject: first version with test --- test/integration/test-apt-sources-deb822 | 45 ++++++++++++++++++++++++++++++++ 1 file changed, 45 insertions(+) create mode 100755 test/integration/test-apt-sources-deb822 (limited to 'test/integration') diff --git a/test/integration/test-apt-sources-deb822 b/test/integration/test-apt-sources-deb822 new file mode 100755 index 000000000..cdf30c02a --- /dev/null +++ b/test/integration/test-apt-sources-deb822 @@ -0,0 +1,45 @@ +#!/bin/sh +set -e + +TESTDIR=$(readlink -f $(dirname $0)) +. $TESTDIR/framework + +setupenvironment +configarchitecture "i386" + +BASE="Type: deb +URL: http://ftp.debian.org/debian +Dist: stable +Section: main +Comment: Some random string + that can be very long" + +# simple case +echo "$BASE" > rootdir/etc/apt/sources.list + +testequal "'http://ftp.debian.org/debian/dists/stable/main/binary-i386/Packages.bz2' ftp.debian.org_debian_dists_stable_main_binary-i386_Packages 0 : +'http://ftp.debian.org/debian/dists/stable/main/i18n/Translation-en.bz2' ftp.debian.org_debian_dists_stable_main_i18n_Translation-en 0 : +'http://ftp.debian.org/debian/dists/stable/InRelease' ftp.debian.org_debian_dists_stable_InRelease 0 " aptget update --print-uris + + +# Two entries +echo "$BASE" > rootdir/etc/apt/sources.list +echo "" >> rootdir/etc/apt/sources.list +echo "$BASE" | sed s/stable/unstable/ >> rootdir/etc/apt/sources.list + +testequal "'http://ftp.debian.org/debian/dists/stable/main/binary-i386/Packages.bz2' ftp.debian.org_debian_dists_stable_main_binary-i386_Packages 0 : +'http://ftp.debian.org/debian/dists/stable/main/i18n/Translation-en.bz2' ftp.debian.org_debian_dists_stable_main_i18n_Translation-en 0 : +'http://ftp.debian.org/debian/dists/stable/InRelease' ftp.debian.org_debian_dists_stable_InRelease 0 +'http://ftp.debian.org/debian/dists/unstable/main/binary-i386/Packages.bz2' ftp.debian.org_debian_dists_unstable_main_binary-i386_Packages 0 : +'http://ftp.debian.org/debian/dists/unstable/main/i18n/Translation-en.bz2' ftp.debian.org_debian_dists_unstable_main_i18n_Translation-en 0 : +'http://ftp.debian.org/debian/dists/unstable/InRelease' ftp.debian.org_debian_dists_unstable_InRelease 0 " aptget update --print-uris + + +# ARCH option +echo "$BASE" > rootdir/etc/apt/sources.list +echo "Arch: amd64,armel" >> rootdir/etc/apt/sources.list + +testequal "'http://ftp.debian.org/debian/dists/stable/main/binary-amd64/Packages.bz2' ftp.debian.org_debian_dists_stable_main_binary-amd64_Packages 0 : +'http://ftp.debian.org/debian/dists/stable/main/binary-armel/Packages.bz2' ftp.debian.org_debian_dists_stable_main_binary-armel_Packages 0 : +'http://ftp.debian.org/debian/dists/stable/main/i18n/Translation-en.bz2' ftp.debian.org_debian_dists_stable_main_i18n_Translation-en 0 : +'http://ftp.debian.org/debian/dists/stable/InRelease' ftp.debian.org_debian_dists_stable_InRelease 0 " aptget update --print-uris -- cgit v1.2.3-70-g09d2 From 300b15e3456aff88b3016a8bac90a0ba8911db8f Mon Sep 17 00:00:00 2001 From: Michael Vogt Date: Mon, 2 Dec 2013 08:36:10 +0100 Subject: fix section adding --- apt-pkg/sourcelist.cc | 11 ++++++++++- test/integration/test-apt-sources-deb822 | 10 ++++++++++ 2 files changed, 20 insertions(+), 1 deletion(-) (limited to 'test/integration') diff --git a/apt-pkg/sourcelist.cc b/apt-pkg/sourcelist.cc index 1261ebb52..4883e2fab 100644 --- a/apt-pkg/sourcelist.cc +++ b/apt-pkg/sourcelist.cc @@ -273,7 +273,16 @@ bool pkgSourceList::ReadAppend(string File) for (unsigned int j=0; j < sizeof(option_str)/sizeof(char*); j++) if (Tags.Exists(option_str[j])) Options[option_str[j]] = Tags.FindS(option_str[j]); - Parse->CreateItem(SrcList, URI, Dist, Section, Options); + + // now create one item per section + std::vector list; + if (Section.find(",")) + list = StringSplit(Section, ","); + else + list = StringSplit(Section, " "); + for (int i=0; i < list.size(); i++) + Parse->CreateItem(SrcList, URI, Dist, list[i], Options); + i++; } // we are done diff --git a/test/integration/test-apt-sources-deb822 b/test/integration/test-apt-sources-deb822 index cdf30c02a..6e9700bb0 100755 --- a/test/integration/test-apt-sources-deb822 +++ b/test/integration/test-apt-sources-deb822 @@ -22,6 +22,16 @@ testequal "'http://ftp.debian.org/debian/dists/stable/main/binary-i386/Packages. 'http://ftp.debian.org/debian/dists/stable/InRelease' ftp.debian.org_debian_dists_stable_InRelease 0 " aptget update --print-uris +# two sections (we support both "," and " " as seperator) +echo "$BASE" | sed s/main/"main,contrib"/ > rootdir/etc/apt/sources.list + +testequal "'http://ftp.debian.org/debian/dists/stable/main/binary-i386/Packages.bz2' ftp.debian.org_debian_dists_stable_main_binary-i386_Packages 0 : +'http://ftp.debian.org/debian/dists/stable/contrib/binary-i386/Packages.bz2' ftp.debian.org_debian_dists_stable_contrib_binary-i386_Packages 0 : +'http://ftp.debian.org/debian/dists/stable/contrib/i18n/Translation-en.bz2' ftp.debian.org_debian_dists_stable_contrib_i18n_Translation-en 0 : +'http://ftp.debian.org/debian/dists/stable/main/i18n/Translation-en.bz2' ftp.debian.org_debian_dists_stable_main_i18n_Translation-en 0 : +'http://ftp.debian.org/debian/dists/stable/InRelease' ftp.debian.org_debian_dists_stable_InRelease 0 " aptget update --print-uris + + # Two entries echo "$BASE" > rootdir/etc/apt/sources.list echo "" >> rootdir/etc/apt/sources.list -- cgit v1.2.3-70-g09d2 From 47d2bc78adb49f3182f9a3d7a4baea363e772d64 Mon Sep 17 00:00:00 2001 From: David Kalnischkies Date: Fri, 6 Dec 2013 12:17:48 +0100 Subject: implement POC client-side merging of pdiffs via apt-file MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit The idea of pdiffs is to avoid downloading the hole file by patching the existing index. This works very well, but becomes slow if a lot of patches needs to be applied to reconstruct an up-to-date index and in recent years more and more dinstall (or similar) runs are executed creating more and more pdiffs in the same amount of time, so pdiffs became less useful. The solution is simple: Reduce the amount of patches (which are very small) which need to be applied on top of the index we have available (which is usually pretty big). This can be done in two ways: Either merge the patches on the server-side so that the client has to download only one patch or the patches are all downloaded and merged on the client-side. The first needs a client who is doing one step at a time who can also skip patches if it needs (APT supports this for a long time now). The later is implemented by this commit, but depends on the server NOT merging the patches and the patches being in a strict order in which no patch is skipped. This is traditionally the case for dak, but other repository creators support merging – e.g. reprepro (which helpfully adds a flag indicating that the patches are merged). To support both or even mixes a client needs more information which isn't available for now. This POC uses the external diffindex-rred included in apt-file to do the heavy lifting of merging & applying all patches in one pass, hence to test this feature apt-file needs to be installed. --- apt-pkg/acquire-item.cc | 151 +++++++++++++++++++++++++++++++++++++- apt-pkg/acquire-item.h | 100 ++++++++++++++++++++++++- methods/rred.cc | 128 ++++++++++++++++++++++++-------- test/integration/test-pdiff-usage | 147 ++++++++++++++++++++++++++++++++----- 4 files changed, 470 insertions(+), 56 deletions(-) (limited to 'test/integration') diff --git a/apt-pkg/acquire-item.cc b/apt-pkg/acquire-item.cc index 009531c2e..b5b9577ef 100644 --- a/apt-pkg/acquire-item.cc +++ b/apt-pkg/acquire-item.cc @@ -498,14 +498,42 @@ bool pkgAcqDiffIndex::ParseDiffIndex(string IndexDiffFile) /*{{{*/ } // we have something, queue the next diff - if(found) + if(found) { // queue the diffs string::size_type const last_space = Description.rfind(" "); if(last_space != string::npos) Description.erase(last_space, Description.size()-last_space); - new pkgAcqIndexDiffs(Owner, RealURI, Description, Desc.ShortDesc, - ExpectedHash, ServerSha1, available_patches); + + /* decide if we should download patches one by one or in one go: + The first is good if the server merges patches, but many don't so client + based merging can be attempt in which case the second is better. + "bad things" will happen if patches are merged on the server, + but client side merging is attempt as well */ + bool pdiff_merge = _config->FindB("Acquire::PDiffs::Merge", true); + if (pdiff_merge == true) + { + // this perl script is provided by apt-file + pdiff_merge = FileExists(_config->FindFile("Dir::Bin::rred", "/usr/bin/diffindex-rred")); + if (pdiff_merge == true) + { + // reprepro adds this flag if it has merged patches on the server + std::string const precedence = Tags.FindS("X-Patch-Precedence"); + pdiff_merge = (precedence != "merged"); + } + } + + if (pdiff_merge == false) + new pkgAcqIndexDiffs(Owner, RealURI, Description, Desc.ShortDesc, + ExpectedHash, ServerSha1, available_patches); + else + { + std::vector *diffs = new std::vector(available_patches.size()); + for(size_t i = 0; i < available_patches.size(); ++i) + (*diffs)[i] = new pkgAcqIndexMergeDiffs(Owner, RealURI, Description, Desc.ShortDesc, ExpectedHash, + available_patches[i], diffs); + } + Complete = false; Status = StatDone; Dequeue(); @@ -754,6 +782,123 @@ void pkgAcqIndexDiffs::Done(string Message,unsigned long long Size,string Md5Has } } /*}}}*/ +// AcqIndexMergeDiffs::AcqIndexMergeDiffs - Constructor /*{{{*/ +pkgAcqIndexMergeDiffs::pkgAcqIndexMergeDiffs(pkgAcquire *Owner, + string const &URI, string const &URIDesc, + string const &ShortDesc, HashString const &ExpectedHash, + DiffInfo const &patch, + std::vector const * const allPatches) + : Item(Owner), RealURI(URI), ExpectedHash(ExpectedHash), + patch(patch),allPatches(allPatches), State(StateFetchDiff) +{ + + DestFile = _config->FindDir("Dir::State::lists") + "partial/"; + DestFile += URItoFileName(URI); + + Debug = _config->FindB("Debug::pkgAcquire::Diffs",false); + + Description = URIDesc; + Desc.Owner = this; + Desc.ShortDesc = ShortDesc; + + Desc.URI = string(RealURI) + ".diff/" + patch.file + ".gz"; + Desc.Description = Description + " " + patch.file + string(".pdiff"); + DestFile = _config->FindDir("Dir::State::lists") + "partial/"; + DestFile += URItoFileName(RealURI + ".diff/" + patch.file); + + if(Debug) + std::clog << "pkgAcqIndexMergeDiffs: " << Desc.URI << std::endl; + + QueueURI(Desc); +} + /*}}}*/ +void pkgAcqIndexMergeDiffs::Failed(string Message,pkgAcquire::MethodConfig *Cnf)/*{{{*/ +{ + if(Debug) + std::clog << "pkgAcqIndexMergeDiffs failed: " << Desc.URI << " with " << Message << std::endl; + Complete = false; + Status = StatDone; + Dequeue(); + + // check if we are the first to fail, otherwise we are done here + State = StateDoneDiff; + for (std::vector::const_iterator I = allPatches->begin(); + I != allPatches->end(); ++I) + if ((*I)->State == StateErrorDiff) + return; + + // first failure means we should fallback + State = StateErrorDiff; + std::clog << "Falling back to normal index file aquire" << std::endl; + new pkgAcqIndex(Owner, RealURI, Description,Desc.ShortDesc, + ExpectedHash); +} + /*}}}*/ +void pkgAcqIndexMergeDiffs::Done(string Message,unsigned long long Size,string Md5Hash, /*{{{*/ + pkgAcquire::MethodConfig *Cnf) +{ + if(Debug) + std::clog << "pkgAcqIndexMergeDiffs::Done(): " << Desc.URI << std::endl; + + Item::Done(Message,Size,Md5Hash,Cnf); + + string const FinalFile = _config->FindDir("Dir::State::lists") + URItoFileName(RealURI); + + if (State == StateFetchDiff) + { + // rred expects the patch as $FinalFile.ed.$patchname.gz + Rename(DestFile, FinalFile + ".ed." + patch.file + ".gz"); + + // check if this is the last completed diff + State = StateDoneDiff; + for (std::vector::const_iterator I = allPatches->begin(); + I != allPatches->end(); ++I) + if ((*I)->State != StateDoneDiff) + { + if(Debug) + std::clog << "Not the last done diff in the batch: " << Desc.URI << std::endl; + return; + } + + // this is the last completed diff, so we are ready to apply now + State = StateApplyDiff; + + if(Debug) + std::clog << "Sending to rred method: " << FinalFile << std::endl; + + Local = true; + Desc.URI = "rred:" + FinalFile; + QueueURI(Desc); + Mode = "rred"; + return; + } + // success in download/apply all diffs, clean up + else if (State == StateApplyDiff) + { + // see if we really got the expected file + if(!ExpectedHash.empty() && !ExpectedHash.VerifyFile(DestFile)) + { + RenameOnError(HashSumMismatch); + return; + } + + // move the result into place + if(Debug) + std::clog << "Moving patched file in place: " << std::endl + << DestFile << " -> " << FinalFile << std::endl; + Rename(DestFile, FinalFile); + chmod(FinalFile.c_str(), 0644); + + // otherwise lists cleanup will eat the file + DestFile = FinalFile; + + // all set and done + Complete = true; + if(Debug) + std::clog << "allDone: " << DestFile << "\n" << std::endl; + } +} + /*}}}*/ // AcqIndex::AcqIndex - Constructor /*{{{*/ // --------------------------------------------------------------------- /* The package file is added to the queue and a second class is diff --git a/apt-pkg/acquire-item.h b/apt-pkg/acquire-item.h index 6b4f73708..5a1c7979c 100644 --- a/apt-pkg/acquire-item.h +++ b/apt-pkg/acquire-item.h @@ -429,7 +429,105 @@ class pkgAcqDiffIndex : public pkgAcquire::Item std::string ShortDesc, HashString ExpectedHash); }; /*}}}*/ -/** \brief An item that is responsible for fetching all the patches {{{ +/** \brief An item that is responsible for fetching client-merge patches {{{ + * that need to be applied to a given package index file. + * + * Instead of downloading and applying each patch one by one like its + * sister #pkgAcqIndexDiffs this class will download all patches at once + * and call rred with all the patches downloaded once. Rred will then + * merge and apply them in one go, which should be a lot faster – but is + * incompatible with server-based merges of patches like reprepro can do. + * + * \sa pkgAcqDiffIndex, pkgAcqIndex + */ +class pkgAcqIndexMergeDiffs : public pkgAcquire::Item +{ + protected: + + /** \brief If \b true, debugging output will be written to + * std::clog. + */ + bool Debug; + + /** \brief description of the item that is currently being + * downloaded. + */ + pkgAcquire::ItemDesc Desc; + + /** \brief URI of the package index file that is being + * reconstructed. + */ + std::string RealURI; + + /** \brief HashSum of the package index file that is being + * reconstructed. + */ + HashString ExpectedHash; + + /** \brief description of the file being downloaded. */ + std::string Description; + + /** \brief information about the current patch */ + struct DiffInfo const patch; + + /** \brief list of all download items for the patches */ + std::vector const * const allPatches; + + /** The current status of this patch. */ + enum DiffState + { + /** \brief The diff is currently being fetched. */ + StateFetchDiff, + + /** \brief The diff is currently being applied. */ + StateApplyDiff, + + /** \brief the work with this diff is done */ + StateDoneDiff, + + /** \brief something bad happened and fallback was triggered */ + StateErrorDiff + } 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(std::string Message,pkgAcquire::MethodConfig *Cnf); + + virtual void Done(std::string Message,unsigned long long Size,std::string Md5Hash, + pkgAcquire::MethodConfig *Cnf); + virtual std::string DescURI() {return RealURI + "Index";}; + + /** \brief Create an index merge-diff item. + * + * \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 ExpectedHash 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 patch contains infos about the patch this item is supposed + * to download which were read from the index + * + * \param allPatches contains all related items so that each item can + * check if it was the last one to complete the download step + */ + pkgAcqIndexMergeDiffs(pkgAcquire *Owner,std::string const &URI,std::string const &URIDesc, + std::string const &ShortDesc, HashString const &ExpectedHash, + DiffInfo const &patch, std::vector const * const allPatches); +}; + /*}}}*/ +/** \brief An item that is responsible for fetching server-merge patches {{{ * that need to be applied to a given package index file. * * After downloading and applying a single patch, this item will diff --git a/methods/rred.cc b/methods/rred.cc index 7c65f8f92..bea8ed263 100644 --- a/methods/rred.cc +++ b/methods/rred.cc @@ -11,6 +11,8 @@ #include #include +#include +#include #include #include #include @@ -465,50 +467,112 @@ bool RredMethod::Fetch(FetchItem *Itm) /*{{{*/ } else URIStart(Res); - 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::Gzip); - FileFd To(Itm->DestFile,FileFd::WriteAtomic); - To.EraseOnFailure(); - if (_error->PendingError() == true) - return false; - + std::string lastPatchName; Hashes Hash; - // now do the actual patching - State const result = patchMMap(Patch, From, To, &Hash); - if (result == MMAP_FAILED) { - // retry with patchFile - Patch.Seek(0); - From.Seek(0); - To.Open(Itm->DestFile,FileFd::WriteAtomic); + + // check for a single ed file + if (FileExists(Path+".ed") == true) + { + if (Debug == true) + std::clog << "Patching " << Path << " with " << Path + << ".ed and putting result into " << Itm->DestFile << std::endl; + + // Open the source and destination files + lastPatchName = Path + ".ed"; + FileFd From(Path,FileFd::ReadOnly); + FileFd To(Itm->DestFile,FileFd::WriteAtomic); + To.EraseOnFailure(); + FileFd Patch(lastPatchName, FileFd::ReadOnly, FileFd::Gzip); if (_error->PendingError() == true) - return false; - if (patchFile(Patch, From, To, &Hash) != ED_OK) { - return _error->WarningE("rred", _("Could not patch %s with mmap and with file operation usage - the patch seems to be corrupt."), Path.c_str()); + return false; + + // now do the actual patching + State const result = patchMMap(Patch, From, To, &Hash); + if (result == MMAP_FAILED) { + // retry with patchFile + Patch.Seek(0); + From.Seek(0); + To.Open(Itm->DestFile,FileFd::WriteAtomic); + if (_error->PendingError() == true) + return false; + if (patchFile(Patch, From, To, &Hash) != ED_OK) { + return _error->WarningE("rred", _("Could not patch %s with mmap and with file operation usage - the patch seems to be corrupt."), Path.c_str()); + } else if (Debug == true) { + std::clog << "rred: finished file patching of " << Path << " after mmap failed." << std::endl; + } + } else if (result != ED_OK) { + return _error->Errno("rred", _("Could not patch %s with mmap (but no mmap specific fail) - the patch seems to be corrupt."), Path.c_str()); } else if (Debug == true) { - std::clog << "rred: finished file patching of " << Path << " after mmap failed." << std::endl; + std::clog << "rred: finished mmap patching of " << Path << std::endl; } - } else if (result != ED_OK) { - return _error->Errno("rred", _("Could not patch %s with mmap (but no mmap specific fail) - the patch seems to be corrupt."), Path.c_str()); - } else if (Debug == true) { - std::clog << "rred: finished mmap patching of " << Path << std::endl; + + // write out the result + From.Close(); + Patch.Close(); + To.Close(); } + else + { + if (Debug == true) + std::clog << "Patching " << Path << " with all " << Path << ".ed.*.gz files and " + << "putting result into " << Itm->DestFile << std::endl; + + int From = open(Path.c_str(), O_RDONLY); + unlink(Itm->DestFile.c_str()); + int To = open(Itm->DestFile.c_str(), O_WRONLY | O_CREAT | O_EXCL, 0644); + SetCloseExec(From, false); + SetCloseExec(To, false); + + _error->PushToStack(); + std::vector patches = GetListOfFilesInDir(flNotFile(Path), "gz", true, false); + _error->RevertToStack(); + + std::string externalrred = _config->Find("Dir::Bin::rred", "/usr/bin/diffindex-rred"); + std::vector Args; + Args.reserve(22); + Args.push_back(externalrred.c_str()); + + std::string const baseName = Path + ".ed."; + for (std::vector::const_iterator p = patches.begin(); + p != patches.end(); ++p) + if (p->compare(0, baseName.length(), baseName) == 0) + Args.push_back(p->c_str()); + + Args.push_back(NULL); + + pid_t Patcher = ExecFork(); + if (Patcher == 0) { + dup2(From, STDIN_FILENO); + dup2(To, STDOUT_FILENO); + + execvp(Args[0], (char **) &Args[0]); + std::cerr << "Failed to execute patcher " << Args[0] << "!" << std::endl; + _exit(100); + } + // last is NULL, so the one before is the last patch + lastPatchName = Args[Args.size() - 2]; - // write out the result - From.Close(); - Patch.Close(); - To.Close(); + if (ExecWait(Patcher, "rred") == false) + return _error->Errno("rred", "Patching via external rred failed"); + + close(From); + close(To); + + struct stat Buf; + if (stat(Itm->DestFile.c_str(), &Buf) != 0) + return _error->Errno("stat",_("Failed to stat")); + + To = open(Path.c_str(), O_RDONLY); + Hash.AddFD(To, Buf.st_size); + close(To); + } /* Transfer the modification times from the patch file to be able to see in which state the file should be and use the access time from the "old" file */ struct stat BufBase, BufPatch; if (stat(Path.c_str(),&BufBase) != 0 || - stat(std::string(Path+".ed").c_str(),&BufPatch) != 0) + stat(lastPatchName.c_str(), &BufPatch) != 0) return _error->Errno("stat",_("Failed to stat")); struct utimbuf TimeBuf; diff --git a/test/integration/test-pdiff-usage b/test/integration/test-pdiff-usage index ac0563b7f..5a06e0ccb 100755 --- a/test/integration/test-pdiff-usage +++ b/test/integration/test-pdiff-usage @@ -5,39 +5,146 @@ TESTDIR=$(readlink -f $(dirname $0)) . $TESTDIR/framework setupenvironment -configarchitecture "i386" +configarchitecture 'i386' buildaptarchive setupflataptarchive changetowebserver -signreleasefiles -testsuccess aptget update -testnopackage newstuff PKGFILE="${TESTDIR}/$(echo "$(basename $0)" | sed 's#^test-#Packages-#')" -testequal "$(cat ${PKGFILE}) + +echo '#!/bin/sh +touch merge-was-used +/usr/bin/diffindex-rred "$@"' > extrred +chmod +x extrred +echo 'Dir::Bin::rred "./extrred";' > rootdir/etc/apt/apt.conf.d/99rred + +wasmergeused() { + testsuccess aptget update "$@" + msgtest 'Check if the right pdiff merger was used' + if [ -e ./merge-was-used ]; then + rm -f ./merge-was-used + if echo "$*" | grep -q -- '-o Acquire::PDiffs::Merge=1'; then + msgpass + else + msgfail "Merge shouldn't have been used, but was" + fi + elif echo "$*" | grep -q -- '-o Acquire::PDiffs::Merge=1'; then + msgfail "Merge should have been used, but wasn't" + else + msgpass + fi +} + +testrun() { + # setup the base + find aptarchive -name 'Packages*' -type f -delete + cp ${PKGFILE} aptarchive/Packages + compressfile 'aptarchive/Packages' + generatereleasefiles + signreleasefiles + rm -rf aptarchive/Packages.diff rootdir/var/lib/apt/lists + testsuccess aptget update "$@" + cp -a rootdir/var/lib/apt/lists rootdir/var/lib/apt/lists-bak + testnopackage newstuff + testequal "$(cat ${PKGFILE}) " aptcache show apt oldstuff -cp ${PKGFILE}-new aptarchive/Packages -compressfile 'aptarchive/Packages' -rm -rf aptarchive/Packages.diff -mkdir -p aptarchive/Packages.diff -PATCHFILE="aptarchive/Packages.diff/$(date +%Y-%m-%d-%H%M.%S)" -diff -e ${PKGFILE} ${PKGFILE}-new > ${PATCHFILE} || true -cat $PATCHFILE | gzip > ${PATCHFILE}.gz -PATCHINDEX="aptarchive/Packages.diff/Index" -echo "SHA1-Current: $(sha1sum ${PKGFILE}-new | cut -d' ' -f 1) $(stat -c%s ${PKGFILE}-new) + # apply with one patch + cp ${PKGFILE}-new aptarchive/Packages + compressfile 'aptarchive/Packages' + mkdir -p aptarchive/Packages.diff + PATCHFILE="aptarchive/Packages.diff/$(date +%Y-%m-%d-%H%M.%S)" + diff -e ${PKGFILE} ${PKGFILE}-new > ${PATCHFILE} || true + cat $PATCHFILE | gzip > ${PATCHFILE}.gz + PATCHINDEX='aptarchive/Packages.diff/Index' + echo "SHA1-Current: $(sha1sum ${PKGFILE}-new | cut -d' ' -f 1) $(stat -c%s ${PKGFILE}-new) SHA1-History: 9f4148e06d7faa37062994ff10d0c842d7017513 33053002 2010-08-18-2013.28 $(sha1sum $PKGFILE | cut -d' ' -f 1) $(stat -c%s $PKGFILE) $(basename $PATCHFILE) SHA1-Patches: 7651fc0ac57cd83d41c63195a9342e2db5650257 19722 2010-08-18-0814.28 $(sha1sum $PATCHFILE | cut -d' ' -f 1) $(stat -c%s $PATCHFILE) $(basename $PATCHFILE)" > $PATCHINDEX -generatereleasefiles '+1hour' -signreleasefiles -find aptarchive -name 'Packages*' -type f -delete -testsuccess aptget update + generatereleasefiles '+1hour' + signreleasefiles + find aptarchive -name 'Packages*' -type f -delete + wasmergeused "$@" + testnopackage oldstuff + testequal "$(cat ${PKGFILE}-new) +" aptcache show apt newstuff -testnopackage oldstuff -testequal "$(cat ${PKGFILE}-new) + # index is already up-to-date + find rootdir/var/lib/apt/lists -name '*.IndexDiff' -type f -delete + testsuccess aptget update "$@" + testequal "$(cat ${PKGFILE}-new) " aptcache show apt newstuff + + # apply with two patches + cp ${PKGFILE}-new aptarchive/Packages + echo ' +Package: futurestuff +Version: 1.0 +Architecture: i386 +Maintainer: Joe Sixpack +Installed-Size: 202 +Filename: pool/futurestuff_1.0_i386.deb +Size: 202200 +MD5sum: 311aeeaaae5ba33aff1ceaf3e1f76671 +SHA1: 3c695e028f7a1ae324deeaae5ba332desa81088c +SHA256: b46fd154615edaae5ba33c56a5cc0e7deaef23e2da3e4f129727fd660f28f050 +Description: some cool and shiny future stuff + This package will appear in the next next mirror update +Description-md5: d5f89fbbc2ce34c455dfee9b67d82b6b' >> aptarchive/Packages + + compressfile 'aptarchive/Packages' + PATCHFILE2="aptarchive/Packages.diff/$(date -d 'now + 1hour' '+%Y-%m-%d-%H%M.%S')" + diff -e ${PKGFILE}-new aptarchive/Packages > ${PATCHFILE2} || true + cat $PATCHFILE2 | gzip > ${PATCHFILE2}.gz + echo "SHA1-Current: $(sha1sum aptarchive/Packages | cut -d' ' -f 1) $(stat -c%s aptarchive/Packages) +SHA1-History: + 9f4148e06d7faa37062994ff10d0c842d7017513 33053002 2010-08-18-2013.28 + $(sha1sum ${PKGFILE} | cut -d' ' -f 1) $(stat -c%s ${PKGFILE}) $(basename ${PATCHFILE}) + $(sha1sum ${PKGFILE}-new | cut -d' ' -f 1) $(stat -c%s ${PKGFILE}-new) $(basename ${PATCHFILE2}) +SHA1-Patches: + 7651fc0ac57cd83d41c63195a9342e2db5650257 19722 2010-08-18-0814.28 + $(sha1sum $PATCHFILE | cut -d' ' -f 1) $(stat -c%s $PATCHFILE) $(basename $PATCHFILE) + $(sha1sum ${PATCHFILE2} | cut -d' ' -f 1) $(stat -c%s ${PATCHFILE2}) $(basename ${PATCHFILE2})" > $PATCHINDEX + generatereleasefiles '+2hour' + signreleasefiles + cp -a aptarchive/Packages Packages-future + find aptarchive -name 'Packages*' -type f -delete + rm -rf rootdir/var/lib/apt/lists + cp -a rootdir/var/lib/apt/lists-bak rootdir/var/lib/apt/lists + wasmergeused "$@" + testnopackage oldstuff + testequal "$(cat Packages-future) +" aptcache show apt newstuff futurestuff + + # patch applying fails, but successful fallback + rm -rf rootdir/var/lib/apt/lists + cp -a rootdir/var/lib/apt/lists-bak rootdir/var/lib/apt/lists + cp ${PKGFILE}-new aptarchive/Packages + compressfile 'aptarchive/Packages' + mkdir -p aptarchive/Packages.diff + PATCHFILE="aptarchive/Packages.diff/$(date +%Y-%m-%d-%H%M.%S)" + diff -e ${PKGFILE} ${PKGFILE}-new > ${PATCHFILE} || true + PATCHINDEX='aptarchive/Packages.diff/Index' + echo "SHA1-Current: $(sha1sum ${PKGFILE}-new | cut -d' ' -f 1) $(stat -c%s ${PKGFILE}-new) +SHA1-History: + 9f4148e06d7faa37062994ff10d0c842d7017513 33053002 2010-08-18-2013.28 + $(sha1sum $PKGFILE | cut -d' ' -f 1) $(stat -c%s $PKGFILE) $(basename $PATCHFILE) +SHA1-Patches: + 7651fc0ac57cd83d41c63195a9342e2db5650257 19722 2010-08-18-0814.28 + $(sha1sum $PATCHFILE | cut -d' ' -f 1) $(stat -c%s $PATCHFILE) $(basename $PATCHFILE)" > $PATCHINDEX + echo 'I am Mallory and I change files' >> $PATCHFILE + cat $PATCHFILE | gzip > ${PATCHFILE}.gz + generatereleasefiles '+1hour' + signreleasefiles + testsuccess aptget update "$@" + testnopackage oldstuff + testequal "$(cat ${PKGFILE}-new) +" aptcache show apt newstuff +} + +testrun -o Debug::pkgAcquire::Diffs=1 -o Debug::pkgAcquire::rred=1 -o Acquire::PDiffs::Merge=0 +testrun -o Debug::pkgAcquire::Diffs=1 -o Debug::pkgAcquire::rred=1 -o Acquire::PDiffs::Merge=1 -- cgit v1.2.3-70-g09d2 From d2d68aaf5bc2211e9c488f2603ccb4e5fd591a6d Mon Sep 17 00:00:00 2001 From: Michael Vogt Date: Sat, 4 Jan 2014 15:39:04 +0100 Subject: improve tests --- apt-pkg/sourcelist.cc | 3 ++- test/integration/framework | 13 +++++++++++-- test/integration/test-apt-sources-deb822 | 21 ++++++++++++++++----- 3 files changed, 29 insertions(+), 8 deletions(-) (limited to 'test/integration') diff --git a/apt-pkg/sourcelist.cc b/apt-pkg/sourcelist.cc index 99cdbe030..35e13b6f5 100644 --- a/apt-pkg/sourcelist.cc +++ b/apt-pkg/sourcelist.cc @@ -342,7 +342,8 @@ bool pkgSourceList::ParseFileDeb822(string File) // check if there are any options we support const char* option_str[] = { - "arch", "arch+", "arch-", "trusted" }; + "arch", "arch+", "arch-", "trusted", + }; for (unsigned int j=0; j < sizeof(option_str)/sizeof(char*); j++) if (Tags.Exists(option_str[j])) Options[option_str[j]] = Tags.FindS(option_str[j]); diff --git a/test/integration/framework b/test/integration/framework index a28363768..6ada1e9cc 100644 --- a/test/integration/framework +++ b/test/integration/framework @@ -948,13 +948,22 @@ testempty() { test -z "$($* 2>&1)" && msgpass || msgfail } -testequal() { +testequalwithmsg() { + local MSG="$1" + shift local COMPAREFILE=$(mktemp) addtrap "rm $COMPAREFILE;" echo "$1" > $COMPAREFILE shift - msgtest "Test for equality of" "$*" + msgtest "$MSG" $* 2>&1 | checkdiff $COMPAREFILE - && msgpass || msgfail +} + +testequal() { + local EXPECTED="$1" + shift + local MSG="Test for equality of $*" + testequalwithmsg "$MSG" "$EXPECTED" $* } testequalor2() { diff --git a/test/integration/test-apt-sources-deb822 b/test/integration/test-apt-sources-deb822 index 6e9700bb0..24fb1bdb0 100755 --- a/test/integration/test-apt-sources-deb822 +++ b/test/integration/test-apt-sources-deb822 @@ -7,7 +7,17 @@ TESTDIR=$(readlink -f $(dirname $0)) setupenvironment configarchitecture "i386" -BASE="Type: deb +echo "deb http://ftp.debian.org/debian stable main" > rootdir/etc/apt/sources.list +testequalwithmsg "Old style sources.list works" "'http://ftp.debian.org/debian/dists/stable/main/binary-i386/Packages.bz2' ftp.debian.org_debian_dists_stable_main_binary-i386_Packages 0 : +'http://ftp.debian.org/debian/dists/stable/main/i18n/Translation-en.bz2' ftp.debian.org_debian_dists_stable_main_i18n_Translation-en 0 : +'http://ftp.debian.org/debian/dists/stable/InRelease' ftp.debian.org_debian_dists_stable_InRelease 0 " aptget update --print-uris + + +BASE="# some comment +# that contains a : as well +#Type: meep + +Type: deb URL: http://ftp.debian.org/debian Dist: stable Section: main @@ -17,7 +27,7 @@ Comment: Some random string # simple case echo "$BASE" > rootdir/etc/apt/sources.list -testequal "'http://ftp.debian.org/debian/dists/stable/main/binary-i386/Packages.bz2' ftp.debian.org_debian_dists_stable_main_binary-i386_Packages 0 : +testequalwithmsg "Simple deb822 sources.list works" "'http://ftp.debian.org/debian/dists/stable/main/binary-i386/Packages.bz2' ftp.debian.org_debian_dists_stable_main_binary-i386_Packages 0 : 'http://ftp.debian.org/debian/dists/stable/main/i18n/Translation-en.bz2' ftp.debian.org_debian_dists_stable_main_i18n_Translation-en 0 : 'http://ftp.debian.org/debian/dists/stable/InRelease' ftp.debian.org_debian_dists_stable_InRelease 0 " aptget update --print-uris @@ -25,7 +35,7 @@ testequal "'http://ftp.debian.org/debian/dists/stable/main/binary-i386/Packages. # two sections (we support both "," and " " as seperator) echo "$BASE" | sed s/main/"main,contrib"/ > rootdir/etc/apt/sources.list -testequal "'http://ftp.debian.org/debian/dists/stable/main/binary-i386/Packages.bz2' ftp.debian.org_debian_dists_stable_main_binary-i386_Packages 0 : +testequalwithmsg "Two sections deb822 sources.list work" "'http://ftp.debian.org/debian/dists/stable/main/binary-i386/Packages.bz2' ftp.debian.org_debian_dists_stable_main_binary-i386_Packages 0 : 'http://ftp.debian.org/debian/dists/stable/contrib/binary-i386/Packages.bz2' ftp.debian.org_debian_dists_stable_contrib_binary-i386_Packages 0 : 'http://ftp.debian.org/debian/dists/stable/contrib/i18n/Translation-en.bz2' ftp.debian.org_debian_dists_stable_contrib_i18n_Translation-en 0 : 'http://ftp.debian.org/debian/dists/stable/main/i18n/Translation-en.bz2' ftp.debian.org_debian_dists_stable_main_i18n_Translation-en 0 : @@ -37,7 +47,7 @@ echo "$BASE" > rootdir/etc/apt/sources.list echo "" >> rootdir/etc/apt/sources.list echo "$BASE" | sed s/stable/unstable/ >> rootdir/etc/apt/sources.list -testequal "'http://ftp.debian.org/debian/dists/stable/main/binary-i386/Packages.bz2' ftp.debian.org_debian_dists_stable_main_binary-i386_Packages 0 : +testequalwithmsg "Multiple entries in deb822 sources.list work" "'http://ftp.debian.org/debian/dists/stable/main/binary-i386/Packages.bz2' ftp.debian.org_debian_dists_stable_main_binary-i386_Packages 0 : 'http://ftp.debian.org/debian/dists/stable/main/i18n/Translation-en.bz2' ftp.debian.org_debian_dists_stable_main_i18n_Translation-en 0 : 'http://ftp.debian.org/debian/dists/stable/InRelease' ftp.debian.org_debian_dists_stable_InRelease 0 'http://ftp.debian.org/debian/dists/unstable/main/binary-i386/Packages.bz2' ftp.debian.org_debian_dists_unstable_main_binary-i386_Packages 0 : @@ -49,7 +59,8 @@ testequal "'http://ftp.debian.org/debian/dists/stable/main/binary-i386/Packages. echo "$BASE" > rootdir/etc/apt/sources.list echo "Arch: amd64,armel" >> rootdir/etc/apt/sources.list -testequal "'http://ftp.debian.org/debian/dists/stable/main/binary-amd64/Packages.bz2' ftp.debian.org_debian_dists_stable_main_binary-amd64_Packages 0 : +testequalwithmsg "Arch: option in deb822 sources.list works" "'http://ftp.debian.org/debian/dists/stable/main/binary-amd64/Packages.bz2' ftp.debian.org_debian_dists_stable_main_binary-amd64_Packages 0 : 'http://ftp.debian.org/debian/dists/stable/main/binary-armel/Packages.bz2' ftp.debian.org_debian_dists_stable_main_binary-armel_Packages 0 : 'http://ftp.debian.org/debian/dists/stable/main/i18n/Translation-en.bz2' ftp.debian.org_debian_dists_stable_main_i18n_Translation-en 0 : 'http://ftp.debian.org/debian/dists/stable/InRelease' ftp.debian.org_debian_dists_stable_InRelease 0 " aptget update --print-uris + -- cgit v1.2.3-70-g09d2 From 4194c9aee2766845618ef0431fd4803b0467aab7 Mon Sep 17 00:00:00 2001 From: Michael Vogt Date: Sat, 4 Jan 2014 16:23:32 +0100 Subject: improve error message --- apt-pkg/sourcelist.cc | 34 +++++++++++++++++++++----------- apt-pkg/sourcelist.h | 2 +- test/integration/test-apt-sources-deb822 | 30 ++++++++++++++++++++-------- 3 files changed, 45 insertions(+), 21 deletions(-) (limited to 'test/integration') diff --git a/apt-pkg/sourcelist.cc b/apt-pkg/sourcelist.cc index 35e13b6f5..5e4a58e95 100644 --- a/apt-pkg/sourcelist.cc +++ b/apt-pkg/sourcelist.cc @@ -240,8 +240,14 @@ bool pkgSourceList::Read(string File) bool pkgSourceList::ReadAppend(string File) { if (_config->FindB("APT::Sources::Use-Deb822", true) == true) - if (ParseFileDeb822(File)) + { + int lines_parsed =ParseFileDeb822(File); + if (lines_parsed < 0) + return false; + else if (lines_parsed > 0) return true; + // no lines parsed ... fall through and use old style parser + } return ParseFileOldStyle(File); } @@ -303,10 +309,9 @@ bool pkgSourceList::ParseFileOldStyle(string File) /*}}}*/ // SourceList::ParseFileDeb822 - Parse deb822 style sources.list /*{{{*/ // --------------------------------------------------------------------- -/* */ -bool pkgSourceList::ParseFileDeb822(string File) +/* Returns: the number of stanzas parsed*/ +int pkgSourceList::ParseFileDeb822(string File) { - pkgTagSection Tags; map Options; unsigned int i=0; @@ -318,7 +323,7 @@ bool pkgSourceList::ParseFileDeb822(string File) if (_error->PendingError() == true) { _error->RevertToStack(); - return false; + return 0; } _error->MergeWithStack(); @@ -331,11 +336,19 @@ bool pkgSourceList::ParseFileDeb822(string File) string const type = Tags.FindS("Type"); Type *Parse = Type::GetType(type.c_str()); if (Parse == 0) - return _error->Error(_("Type '%s' is not known on stanza %u in source list %s"),type.c_str(),i,Fd.Name().c_str()); + { + _error->Error(_("Type '%s' is not known on stanza %u in source list %s"),type.c_str(),i,Fd.Name().c_str()); + // true means we do not retry with old-style sources.list + return -1; + } string URI = Tags.FindS("URL"); if (!Parse->FixupURI(URI)) - return _error->Error(_("Malformed stanza %u in source list %s (URI parse)"),i,Fd.Name().c_str()); + { + _error->Error(_("Malformed stanza %u in source list %s (URI parse)"),i,Fd.Name().c_str()); + // means we do not retry with old-style sources.list + return -1; + } string Dist = Tags.FindS("Dist"); Dist = SubstVar(Dist,"$(ARCH)",_config->Find("APT::Architecture")); @@ -362,11 +375,8 @@ bool pkgSourceList::ParseFileDeb822(string File) i++; } - // we are done - if(i>0) - return true; - - return false; + // we are done, return the number of stanzas read + return i; } /*}}}*/ // SourceList::FindIndex - Get the index associated with a file /*{{{*/ diff --git a/apt-pkg/sourcelist.h b/apt-pkg/sourcelist.h index 5e0d585bb..d83c76d6a 100644 --- a/apt-pkg/sourcelist.h +++ b/apt-pkg/sourcelist.h @@ -76,7 +76,7 @@ class pkgSourceList std::vector SrcList; - bool ParseFileDeb822(std::string File); + int ParseFileDeb822(std::string File); bool ParseFileOldStyle(std::string File); public: diff --git a/test/integration/test-apt-sources-deb822 b/test/integration/test-apt-sources-deb822 index 24fb1bdb0..bacad1ed4 100755 --- a/test/integration/test-apt-sources-deb822 +++ b/test/integration/test-apt-sources-deb822 @@ -7,7 +7,9 @@ TESTDIR=$(readlink -f $(dirname $0)) setupenvironment configarchitecture "i386" -echo "deb http://ftp.debian.org/debian stable main" > rootdir/etc/apt/sources.list +SOURCES="rootdir/etc/apt/sources.list" + +echo "deb http://ftp.debian.org/debian stable main" > $SOURCES testequalwithmsg "Old style sources.list works" "'http://ftp.debian.org/debian/dists/stable/main/binary-i386/Packages.bz2' ftp.debian.org_debian_dists_stable_main_binary-i386_Packages 0 : 'http://ftp.debian.org/debian/dists/stable/main/i18n/Translation-en.bz2' ftp.debian.org_debian_dists_stable_main_i18n_Translation-en 0 : 'http://ftp.debian.org/debian/dists/stable/InRelease' ftp.debian.org_debian_dists_stable_InRelease 0 " aptget update --print-uris @@ -25,7 +27,7 @@ Comment: Some random string that can be very long" # simple case -echo "$BASE" > rootdir/etc/apt/sources.list +echo "$BASE" > $SOURCES testequalwithmsg "Simple deb822 sources.list works" "'http://ftp.debian.org/debian/dists/stable/main/binary-i386/Packages.bz2' ftp.debian.org_debian_dists_stable_main_binary-i386_Packages 0 : 'http://ftp.debian.org/debian/dists/stable/main/i18n/Translation-en.bz2' ftp.debian.org_debian_dists_stable_main_i18n_Translation-en 0 : @@ -33,7 +35,7 @@ testequalwithmsg "Simple deb822 sources.list works" "'http://ftp.debian.org/debi # two sections (we support both "," and " " as seperator) -echo "$BASE" | sed s/main/"main,contrib"/ > rootdir/etc/apt/sources.list +echo "$BASE" | sed s/main/"main,contrib"/ > $SOURCES testequalwithmsg "Two sections deb822 sources.list work" "'http://ftp.debian.org/debian/dists/stable/main/binary-i386/Packages.bz2' ftp.debian.org_debian_dists_stable_main_binary-i386_Packages 0 : 'http://ftp.debian.org/debian/dists/stable/contrib/binary-i386/Packages.bz2' ftp.debian.org_debian_dists_stable_contrib_binary-i386_Packages 0 : @@ -43,9 +45,9 @@ testequalwithmsg "Two sections deb822 sources.list work" "'http://ftp.debian.org # Two entries -echo "$BASE" > rootdir/etc/apt/sources.list -echo "" >> rootdir/etc/apt/sources.list -echo "$BASE" | sed s/stable/unstable/ >> rootdir/etc/apt/sources.list +echo "$BASE" > $SOURCES +echo "" >> $SOURCES +echo "$BASE" | sed s/stable/unstable/ >> $SOURCES testequalwithmsg "Multiple entries in deb822 sources.list work" "'http://ftp.debian.org/debian/dists/stable/main/binary-i386/Packages.bz2' ftp.debian.org_debian_dists_stable_main_binary-i386_Packages 0 : 'http://ftp.debian.org/debian/dists/stable/main/i18n/Translation-en.bz2' ftp.debian.org_debian_dists_stable_main_i18n_Translation-en 0 : @@ -56,11 +58,23 @@ testequalwithmsg "Multiple entries in deb822 sources.list work" "'http://ftp.deb # ARCH option -echo "$BASE" > rootdir/etc/apt/sources.list -echo "Arch: amd64,armel" >> rootdir/etc/apt/sources.list +echo "$BASE" > $SOURCES +echo "Arch: amd64,armel" >> $SOURCES testequalwithmsg "Arch: option in deb822 sources.list works" "'http://ftp.debian.org/debian/dists/stable/main/binary-amd64/Packages.bz2' ftp.debian.org_debian_dists_stable_main_binary-amd64_Packages 0 : 'http://ftp.debian.org/debian/dists/stable/main/binary-armel/Packages.bz2' ftp.debian.org_debian_dists_stable_main_binary-armel_Packages 0 : 'http://ftp.debian.org/debian/dists/stable/main/i18n/Translation-en.bz2' ftp.debian.org_debian_dists_stable_main_i18n_Translation-en 0 : 'http://ftp.debian.org/debian/dists/stable/InRelease' ftp.debian.org_debian_dists_stable_InRelease 0 " aptget update --print-uris +# invalid sources.list file +echo "deb http://ftp.debian.org" > $SOURCES + +testequalwithmsg "Invalid sources.list file gives proper error" "E: Malformed line 1 in source list $TMPWORKINGDIRECTORY/rootdir/etc/apt/sources.list (dist) +E: The list of sources could not be read." aptget update --print-uris + +echo "Type: deb +Dist: stable +" > $SOURCES + +testequalwithmsg "Invalid deb822 sources.list file gives proper error" "E: Malformed stanza 0 in source list $TMPWORKINGDIRECTORY/rootdir/etc/apt/sources.list (URI parse) +E: The list of sources could not be read." aptget update --print-uris -- cgit v1.2.3-70-g09d2 From f7c7f4821e8050b6185c652215e639cbc0089769 Mon Sep 17 00:00:00 2001 From: David Kalnischkies Date: Tue, 10 Dec 2013 15:37:02 +0100 Subject: use C.UTF-8 in testcases as locale Git-Dch: Ignore --- test/integration/framework | 10 +++++----- 1 file changed, 5 insertions(+), 5 deletions(-) (limited to 'test/integration') diff --git a/test/integration/framework b/test/integration/framework index a28363768..8aacb7456 100644 --- a/test/integration/framework +++ b/test/integration/framework @@ -202,7 +202,7 @@ setupenvironment() { echo "DPKG::options:: \"--log=${TMPWORKINGDIRECTORY}/rootdir/var/log/dpkg.log\";" >> aptconfig.conf echo 'quiet::NoUpdate "true";' >> aptconfig.conf echo "Acquire::https::CaInfo \"${TESTDIR}/apt.pem\";" > rootdir/etc/apt/apt.conf.d/99https - export LC_ALL=C + export LC_ALL=C.UTF-8 export PATH="${PATH}:/usr/local/sbin:/usr/sbin:/sbin" configcompression '.' 'gz' #'bz2' 'lzma' 'xz' msgdone "info" @@ -288,7 +288,7 @@ setupsimplenativepackage() { local VERSION="$3" local RELEASE="${4:-unstable}" local DEPENDENCIES="$5" - local DESCRIPTION="${6:-"Description: an autogenerated dummy ${NAME}=${VERSION}/${RELEASE} + local DESCRIPTION="${6:-"an autogenerated dummy ${NAME}=${VERSION}/${RELEASE} If you find such a package installed on your system, something went horribly wrong! They are autogenerated und used only by testcases and surf no other propose…"}" @@ -338,7 +338,7 @@ buildsimplenativepackage() { local VERSION="$3" local RELEASE="${4:-unstable}" local DEPENDENCIES="$5" - local DESCRIPTION="${6:-"Description: an autogenerated dummy ${NAME}=${VERSION}/${RELEASE} + local DESCRIPTION="${6:-"an autogenerated dummy ${NAME}=${VERSION}/${RELEASE} If you find such a package installed on your system, something went horribly wrong! They are autogenerated und used only by testcases and surf no other propose…"}" @@ -535,7 +535,7 @@ insertpackage() { local VERSION="$4" local DEPENDENCIES="$5" local PRIORITY="${6:-optional}" - local DESCRIPTION="${7:-"Description: an autogenerated dummy ${NAME}=${VERSION}/${RELEASE} + local DESCRIPTION="${7:-"an autogenerated dummy ${NAME}=${VERSION}/${RELEASE} If you find such a package installed on your system, something went horribly wrong! They are autogenerated und used only by testcases and surf no other propose…"}" @@ -595,7 +595,7 @@ insertinstalledpackage() { local DEPENDENCIES="$4" local PRIORITY="${5:-optional}" local STATUS="${6:-install ok installed}" - local DESCRIPTION="${7:-"Description: an autogenerated dummy ${NAME}=${VERSION}/installed + local DESCRIPTION="${7:-"an autogenerated dummy ${NAME}=${VERSION}/installed If you find such a package installed on your system, something went horribly wrong! They are autogenerated und used only by testcases and surf no other propose…"}" -- cgit v1.2.3-70-g09d2 From bf9e744761f605e537878b7524ea9023493e4c5b Mon Sep 17 00:00:00 2001 From: David Kalnischkies Date: Tue, 10 Dec 2013 18:23:47 +0100 Subject: tests: default to 'sid' codename for 'unstable' Git-Dch: Ignore --- test/integration/framework | 7 ++++++- test/integration/test-ubuntu-bug-784473-InRelease-one-message-only | 2 +- 2 files changed, 7 insertions(+), 2 deletions(-) (limited to 'test/integration') diff --git a/test/integration/framework b/test/integration/framework index 8aacb7456..60a8167fa 100644 --- a/test/integration/framework +++ b/test/integration/framework @@ -662,7 +662,12 @@ compressfile() { } # can be overridden by testcases for their pleasure -getcodenamefromsuite() { echo -n "$1"; } +getcodenamefromsuite() { + case "$1" in + unstable) echo 'sid';; + *) echo -n "$1";; + esac +} getreleaseversionfromsuite() { true; } getlabelfromsuite() { true; } diff --git a/test/integration/test-ubuntu-bug-784473-InRelease-one-message-only b/test/integration/test-ubuntu-bug-784473-InRelease-one-message-only index e9d684309..50ca2bf57 100755 --- a/test/integration/test-ubuntu-bug-784473-InRelease-one-message-only +++ b/test/integration/test-ubuntu-bug-784473-InRelease-one-message-only @@ -35,5 +35,5 @@ testequal "Package files: 100 ${ROOTDIR}/rootdir/var/lib/dpkg/status release a=now 500 file:${ROOTDIR}/aptarchive/ unstable/main i386 Packages - release a=unstable,n=unstable,c=main + release a=unstable,n=sid,c=main Pinned packages:" aptcache policy -- cgit v1.2.3-70-g09d2 From c5909dcfdc65ce8120d641227976ba4597fd3e70 Mon Sep 17 00:00:00 2001 From: David Kalnischkies Date: Wed, 11 Dec 2013 13:39:51 +0100 Subject: test apt-get source release selection with suite and codename Git-Dch: Ignore --- test/integration/test-apt-get-source | 14 +++++++++++++- 1 file changed, 13 insertions(+), 1 deletion(-) (limited to 'test/integration') diff --git a/test/integration/test-apt-get-source b/test/integration/test-apt-get-source index 3ee7a9e23..083e26db1 100755 --- a/test/integration/test-apt-get-source +++ b/test/integration/test-apt-get-source @@ -39,12 +39,24 @@ Need to get 0 B of source archives. 'file://${APTARCHIVE}/foo_2.0.dsc' foo_2.0.dsc 0 MD5Sum:d41d8cd98f00b204e9800998ecf8427e 'file://${APTARCHIVE}/foo_2.0.tar.gz' foo_2.0.tar.gz 0 MD5Sum:d41d8cd98f00b204e9800998ecf8427e" aptget source -q --print-uris foo -# select by release +# select by release: suite testequal "$HEADER Selected version '1.0' (stable) for foo Need to get 0 B of source archives. 'file://${APTARCHIVE}/foo_1.0.dsc' foo_1.0.dsc 0 MD5Sum:d41d8cd98f00b204e9800998ecf8427e 'file://${APTARCHIVE}/foo_1.0.tar.gz' foo_1.0.tar.gz 0 MD5Sum:d41d8cd98f00b204e9800998ecf8427e" aptget source -q --print-uris foo/stable +testequal "$HEADER +Selected version '2.0' (unstable) for foo +Need to get 0 B of source archives. +'file://${APTARCHIVE}/foo_2.0.dsc' foo_2.0.dsc 0 MD5Sum:d41d8cd98f00b204e9800998ecf8427e +'file://${APTARCHIVE}/foo_2.0.tar.gz' foo_2.0.tar.gz 0 MD5Sum:d41d8cd98f00b204e9800998ecf8427e" aptget source -q --print-uris foo/unstable + +# select by release: codename +testequal "$HEADER +Selected version '2.0' (sid) for foo +Need to get 0 B of source archives. +'file://${APTARCHIVE}/foo_2.0.dsc' foo_2.0.dsc 0 MD5Sum:d41d8cd98f00b204e9800998ecf8427e +'file://${APTARCHIVE}/foo_2.0.tar.gz' foo_2.0.tar.gz 0 MD5Sum:d41d8cd98f00b204e9800998ecf8427e" aptget source -q --print-uris foo/sid # select by version testequal "$HEADER -- cgit v1.2.3-70-g09d2 From 50bd6fd3794dd1f61185302129dc6cd218d20b98 Mon Sep 17 00:00:00 2001 From: David Kalnischkies Date: Wed, 15 Jan 2014 17:23:05 +0100 Subject: integrate Anthonys rred with POC for client-side merge Providing the benefits of both without the downsides :) (ABI breaks or external dependencies) For this Anthonys rred is equipped with: - magic-filename-pickup of patches rather than explicit messages - use of FileFd instead of FILE* to get on-the-fly uncompress of the gzip compressed pdiff patches The acquire code in turn stops checking for apt-file's helper as our own rred is now clever enough for our needs. --- apt-pkg/acquire-item.cc | 11 ++--- methods/rred.cc | 94 +++++++++++---------------------------- test/integration/test-pdiff-usage | 23 +++++++--- 3 files changed, 45 insertions(+), 83 deletions(-) (limited to 'test/integration') diff --git a/apt-pkg/acquire-item.cc b/apt-pkg/acquire-item.cc index 7f6443555..1185908f3 100644 --- a/apt-pkg/acquire-item.cc +++ b/apt-pkg/acquire-item.cc @@ -513,14 +513,9 @@ bool pkgAcqDiffIndex::ParseDiffIndex(string IndexDiffFile) /*{{{*/ bool pdiff_merge = _config->FindB("Acquire::PDiffs::Merge", true); if (pdiff_merge == true) { - // this perl script is provided by apt-file - pdiff_merge = FileExists(_config->FindFile("Dir::Bin::rred", "/usr/bin/diffindex-rred")); - if (pdiff_merge == true) - { - // reprepro adds this flag if it has merged patches on the server - std::string const precedence = Tags.FindS("X-Patch-Precedence"); - pdiff_merge = (precedence != "merged"); - } + // reprepro adds this flag if it has merged patches on the server + std::string const precedence = Tags.FindS("X-Patch-Precedence"); + pdiff_merge = (precedence != "merged"); } if (pdiff_merge == false) diff --git a/methods/rred.cc b/methods/rred.cc index ed3fcc82e..313166160 100644 --- a/methods/rred.cc +++ b/methods/rred.cc @@ -407,13 +407,13 @@ class Patch { public: - void read_diff(FILE *f) + void read_diff(FileFd &f) { char buffer[BLOCK_SIZE]; bool cmdwanted = true; Change ch(0); - while(fgets(buffer, sizeof(buffer), f)) + while(f.ReadLine(buffer, sizeof(buffer))) { if (cmdwanted) { char *m, *c; @@ -534,66 +534,11 @@ class Patch { } }; -bool LookupPatches(const std::string &Message, std::vector &lines) -{ - const char *Tag = "Patches"; - const size_t Length = strlen(Tag); - - std::string::const_iterator I, J; - - std::clog << "Looking for \"Patches:\" section in message:\n\n" << Message << "\n\n"; - std::clog.flush(); - - for (I = Message.begin(); I + Length < Message.end(); ++I) - { - if (I[Length] == ':' && stringcasecmp(I, I+Length, Tag) == 0) - { - // found the tag, now read the patches - for(;;) { - for (; I < Message.end() && *I != '\n'; ++I); - if (I < Message.end()) I++; - if (I == Message.end() || *I != ' ') - break; - while (I < Message.end() && isspace(*I)) I++; - for (J = I; J < Message.end() && *J != '\n'; ++J) - ; - do - J--; - while (I < J && isspace(*J)); - if (I < J) - lines.push_back(std::string(I,++J)); - else - break; - I = J; - } - std::clog << "Found " << lines.size() << " patches!\n"; - std::clog.flush(); - return true; - } - } - std::clog << "Found no patches! :(\n"; - std::clog.flush(); - return false; -} - - class RredMethod : public pkgAcqMethod { private: bool Debug; - std::vector patchpaths; protected: - virtual bool HandleMessage(int Number, std::string Message) { - if (Number == 600) - { - patchpaths.clear(); - LookupPatches(Message, patchpaths); - std::clog << "Ended up with " << patchpaths.size() << " patches!\n"; - std::clog.flush(); - } - return pkgAcqMethod::HandleMessage(Number, Message); - } - virtual bool Fetch(FetchItem *Itm) { Debug = _config->FindB("Debug::pkgAcquire::RRed", false); URI Get = Itm->Uri; @@ -601,17 +546,29 @@ class RredMethod : public pkgAcqMethod { FetchResult Res; Res.Filename = Itm->DestFile; - if (Itm->Uri.empty()) { + if (Itm->Uri.empty()) + { Path = Itm->DestFile; Itm->DestFile.append(".result"); } else URIStart(Res); + std::vector patchpaths; Patch patch; - if (patchpaths.empty()) - { + if (FileExists(Path + ".ed") == true) patchpaths.push_back(Path + ".ed"); + else + { + _error->PushToStack(); + std::vector patches = GetListOfFilesInDir(flNotFile(Path), "gz", true, false); + _error->RevertToStack(); + + std::string const baseName = Path + ".ed."; + for (std::vector::const_iterator p = patches.begin(); + p != patches.end(); ++p) + if (p->compare(0, baseName.length(), baseName) == 0) + patchpaths.push_back(*p); } std::string patch_name; @@ -624,13 +581,15 @@ class RredMethod : public pkgAcqMethod { std::clog << "Patching " << Path << " with " << patch_name << std::endl; - FILE *p = fopen(patch_name.c_str(), "r"); - if (p == NULL) { - std::clog << "Could not open patch file " << patch_name << std::endl; + FileFd p; + // all patches are compressed, even if the name doesn't reflect it + if (p.Open(patch_name, FileFd::ReadOnly, FileFd::Gzip) == false) { + std::cerr << "Could not open patch file " << patch_name << std::endl; + _error->DumpErrors(std::cerr); abort(); } patch.read_diff(p); - fclose(p); + p.Close(); } if (Debug == true) @@ -697,10 +656,9 @@ int main(int argc, char **argv) } for (; i < argc; i++) { - FILE *p; - p = fopen(argv[i], "r"); - if (!p) { - perror(argv[i]); + FileFd p; + if (p.Open(argv[i], FileFd::ReadOnly) == false) { + _error->DumpErrors(std::cerr); exit(1); } patch.read_diff(p); diff --git a/test/integration/test-pdiff-usage b/test/integration/test-pdiff-usage index 5a06e0ccb..ad31511b9 100755 --- a/test/integration/test-pdiff-usage +++ b/test/integration/test-pdiff-usage @@ -20,10 +20,19 @@ chmod +x extrred echo 'Dir::Bin::rred "./extrred";' > rootdir/etc/apt/apt.conf.d/99rred wasmergeused() { - testsuccess aptget update "$@" + msgtest 'Test for successful execution of' "$*" + local OUTPUT=$(mktemp) + addtrap "rm $OUTPUT;" + if aptget update "$@" >${OUTPUT} 2>&1; then + msgpass + else + echo + cat $OUTPUT + msgfail + fi + msgtest 'Check if the right pdiff merger was used' - if [ -e ./merge-was-used ]; then - rm -f ./merge-was-used + if grep -q '^pkgAcqIndexMergeDiffs::Done(): rred' $OUTPUT; then if echo "$*" | grep -q -- '-o Acquire::PDiffs::Merge=1'; then msgpass else @@ -50,7 +59,7 @@ testrun() { testequal "$(cat ${PKGFILE}) " aptcache show apt oldstuff - # apply with one patch + msgmsg 'Testcase: apply with one patch' cp ${PKGFILE}-new aptarchive/Packages compressfile 'aptarchive/Packages' mkdir -p aptarchive/Packages.diff @@ -73,13 +82,13 @@ SHA1-Patches: testequal "$(cat ${PKGFILE}-new) " aptcache show apt newstuff - # index is already up-to-date + msgmsg 'Testcase: index is already up-to-date' find rootdir/var/lib/apt/lists -name '*.IndexDiff' -type f -delete testsuccess aptget update "$@" testequal "$(cat ${PKGFILE}-new) " aptcache show apt newstuff - # apply with two patches + msgmsg 'Testcase: apply with two patches' cp ${PKGFILE}-new aptarchive/Packages echo ' Package: futurestuff @@ -120,7 +129,7 @@ SHA1-Patches: testequal "$(cat Packages-future) " aptcache show apt newstuff futurestuff - # patch applying fails, but successful fallback + msgmsg 'Testcase: patch applying fails, but successful fallback' rm -rf rootdir/var/lib/apt/lists cp -a rootdir/var/lib/apt/lists-bak rootdir/var/lib/apt/lists cp ${PKGFILE}-new aptarchive/Packages -- cgit v1.2.3-70-g09d2 From f74a6fa120759d0a1bd4a5aff0dc2c50911b5407 Mon Sep 17 00:00:00 2001 From: David Kalnischkies Date: Wed, 15 Jan 2014 18:44:47 +0100 Subject: rework some testcases to not spit out text Rework also uncovers two FIXMEs Git-Dch: Ignore --- test/integration/framework | 22 ++++---- test/integration/test-apt-progress-fd-conffile | 17 +++++-- test/integration/test-apt-sources-deb822 | 70 ++++++++++++++------------ test/integration/test-bug-728500-tempdir | 19 +++++-- 4 files changed, 77 insertions(+), 51 deletions(-) (limited to 'test/integration') diff --git a/test/integration/framework b/test/integration/framework index 6ada1e9cc..2fe059280 100644 --- a/test/integration/framework +++ b/test/integration/framework @@ -948,22 +948,22 @@ testempty() { test -z "$($* 2>&1)" && msgpass || msgfail } -testequalwithmsg() { - local MSG="$1" - shift +testequal() { + local MSG='Test of equality of' + if [ "$1" = '--nomsg' ]; then + MSG='' + shift + fi + local COMPAREFILE=$(mktemp) addtrap "rm $COMPAREFILE;" echo "$1" > $COMPAREFILE shift - msgtest "$MSG" - $* 2>&1 | checkdiff $COMPAREFILE - && msgpass || msgfail -} -testequal() { - local EXPECTED="$1" - shift - local MSG="Test for equality of $*" - testequalwithmsg "$MSG" "$EXPECTED" $* + if [ -n "$MSG" ]; then + msgtest "$MSG" "$*" + fi + $* 2>&1 | checkdiff $COMPAREFILE - && msgpass || msgfail } testequalor2() { diff --git a/test/integration/test-apt-progress-fd-conffile b/test/integration/test-apt-progress-fd-conffile index 0b42b1b2f..085d5e871 100755 --- a/test/integration/test-apt-progress-fd-conffile +++ b/test/integration/test-apt-progress-fd-conffile @@ -32,12 +32,19 @@ testsuccess aptget install compiz-core=1.0 # fake conffile change echo "meep" >> rootdir/etc/compiz.conf/compiz.conf -# install +# FIXME: Is there really no way to see if dpkg actually prompts? +msgtest 'Test for successful execution of' 'apt-get install compiz-core=2.0' +OUTPUT=$(mktemp) +addtrap "rm $OUTPUT;" exec 3> apt-progress.log -echo n | aptget install compiz-core=2.0 -o APT::Status-Fd=3 -o Dpkg::Use-Pty=false +if aptget install compiz-core=2.0 -o APT::Status-Fd=3 -o Dpkg::Use-Pty=false -o dpkg::options::='--force-confold' >${OUTPUT} 2>&1; then + msgpass +else + echo + cat $OUTPUT + msgfail +fi # and ensure there is a conffile message in the file -msgtest "Conffile prompt in apt-progress.log" +msgtest 'Test status fd for an included' 'pmconffile msg' grep -q "pmconffile:/etc/compiz.conf/compiz.conf" apt-progress.log && msgpass || (cat apt-progress.log && msgfail) - -cat apt-progress.log \ No newline at end of file diff --git a/test/integration/test-apt-sources-deb822 b/test/integration/test-apt-sources-deb822 index bacad1ed4..8c022767f 100755 --- a/test/integration/test-apt-sources-deb822 +++ b/test/integration/test-apt-sources-deb822 @@ -5,17 +5,10 @@ TESTDIR=$(readlink -f $(dirname $0)) . $TESTDIR/framework setupenvironment -configarchitecture "i386" +configarchitecture 'i386' -SOURCES="rootdir/etc/apt/sources.list" - -echo "deb http://ftp.debian.org/debian stable main" > $SOURCES -testequalwithmsg "Old style sources.list works" "'http://ftp.debian.org/debian/dists/stable/main/binary-i386/Packages.bz2' ftp.debian.org_debian_dists_stable_main_binary-i386_Packages 0 : -'http://ftp.debian.org/debian/dists/stable/main/i18n/Translation-en.bz2' ftp.debian.org_debian_dists_stable_main_i18n_Translation-en 0 : -'http://ftp.debian.org/debian/dists/stable/InRelease' ftp.debian.org_debian_dists_stable_InRelease 0 " aptget update --print-uris - - -BASE="# some comment +SOURCES='rootdir/etc/apt/sources.list' +BASE='# some comment # that contains a : as well #Type: meep @@ -24,57 +17,72 @@ URL: http://ftp.debian.org/debian Dist: stable Section: main Comment: Some random string - that can be very long" + that can be very long' -# simple case -echo "$BASE" > $SOURCES -testequalwithmsg "Simple deb822 sources.list works" "'http://ftp.debian.org/debian/dists/stable/main/binary-i386/Packages.bz2' ftp.debian.org_debian_dists_stable_main_binary-i386_Packages 0 : +msgtest 'Test old-style sources.list' +echo "deb http://ftp.debian.org/debian stable main" > $SOURCES +testequal --nomsg "'http://ftp.debian.org/debian/dists/stable/main/binary-i386/Packages.bz2' ftp.debian.org_debian_dists_stable_main_binary-i386_Packages 0 : 'http://ftp.debian.org/debian/dists/stable/main/i18n/Translation-en.bz2' ftp.debian.org_debian_dists_stable_main_i18n_Translation-en 0 : -'http://ftp.debian.org/debian/dists/stable/InRelease' ftp.debian.org_debian_dists_stable_InRelease 0 " aptget update --print-uris +'http://ftp.debian.org/debian/dists/stable/InRelease' ftp.debian.org_debian_dists_stable_InRelease 0 " aptget update --print-uris -# two sections (we support both "," and " " as seperator) -echo "$BASE" | sed s/main/"main,contrib"/ > $SOURCES +msgtest 'Test simple deb822 sources.list' +echo "$BASE" > $SOURCES +testequal --nomsg "'http://ftp.debian.org/debian/dists/stable/main/binary-i386/Packages.bz2' ftp.debian.org_debian_dists_stable_main_binary-i386_Packages 0 : +'http://ftp.debian.org/debian/dists/stable/main/i18n/Translation-en.bz2' ftp.debian.org_debian_dists_stable_main_i18n_Translation-en 0 : +'http://ftp.debian.org/debian/dists/stable/InRelease' ftp.debian.org_debian_dists_stable_InRelease 0 " aptget update --print-uris -testequalwithmsg "Two sections deb822 sources.list work" "'http://ftp.debian.org/debian/dists/stable/main/binary-i386/Packages.bz2' ftp.debian.org_debian_dists_stable_main_binary-i386_Packages 0 : + +msgtest 'Test deb822 with two sections' 'seperated by comma' +echo "$BASE" | sed 's/main/main,contrib/' > $SOURCES +testequal --nomsg "'http://ftp.debian.org/debian/dists/stable/main/binary-i386/Packages.bz2' ftp.debian.org_debian_dists_stable_main_binary-i386_Packages 0 : 'http://ftp.debian.org/debian/dists/stable/contrib/binary-i386/Packages.bz2' ftp.debian.org_debian_dists_stable_contrib_binary-i386_Packages 0 : 'http://ftp.debian.org/debian/dists/stable/contrib/i18n/Translation-en.bz2' ftp.debian.org_debian_dists_stable_contrib_i18n_Translation-en 0 : 'http://ftp.debian.org/debian/dists/stable/main/i18n/Translation-en.bz2' ftp.debian.org_debian_dists_stable_main_i18n_Translation-en 0 : -'http://ftp.debian.org/debian/dists/stable/InRelease' ftp.debian.org_debian_dists_stable_InRelease 0 " aptget update --print-uris +'http://ftp.debian.org/debian/dists/stable/InRelease' ftp.debian.org_debian_dists_stable_InRelease 0 " aptget update --print-uris + +# FIXME: Advertised, but not supported at the moment +#msgtest 'Test deb822 with two sections' 'seperated by space' +#echo "$BASE" | sed 's/main/main contrib/' > $SOURCES +#testequal --nomsg "'http://ftp.debian.org/debian/dists/stable/main/binary-i386/Packages.bz2' ftp.debian.org_debian_dists_stable_main_binary-i386_Packages 0 : +#'http://ftp.debian.org/debian/dists/stable/contrib/binary-i386/Packages.bz2' ftp.debian.org_debian_dists_stable_contrib_binary-i386_Packages 0 : +#'http://ftp.debian.org/debian/dists/stable/contrib/i18n/Translation-en.bz2' ftp.debian.org_debian_dists_stable_contrib_i18n_Translation-en 0 : +#'http://ftp.debian.org/debian/dists/stable/main/i18n/Translation-en.bz2' ftp.debian.org_debian_dists_stable_main_i18n_Translation-en 0 : +#'http://ftp.debian.org/debian/dists/stable/InRelease' ftp.debian.org_debian_dists_stable_InRelease 0 " aptget update --print-uris -# Two entries + +msgtest 'Test deb822 with' 'two entries' echo "$BASE" > $SOURCES echo "" >> $SOURCES echo "$BASE" | sed s/stable/unstable/ >> $SOURCES - -testequalwithmsg "Multiple entries in deb822 sources.list work" "'http://ftp.debian.org/debian/dists/stable/main/binary-i386/Packages.bz2' ftp.debian.org_debian_dists_stable_main_binary-i386_Packages 0 : +testequal --nomsg "'http://ftp.debian.org/debian/dists/stable/main/binary-i386/Packages.bz2' ftp.debian.org_debian_dists_stable_main_binary-i386_Packages 0 : 'http://ftp.debian.org/debian/dists/stable/main/i18n/Translation-en.bz2' ftp.debian.org_debian_dists_stable_main_i18n_Translation-en 0 : 'http://ftp.debian.org/debian/dists/stable/InRelease' ftp.debian.org_debian_dists_stable_InRelease 0 'http://ftp.debian.org/debian/dists/unstable/main/binary-i386/Packages.bz2' ftp.debian.org_debian_dists_unstable_main_binary-i386_Packages 0 : 'http://ftp.debian.org/debian/dists/unstable/main/i18n/Translation-en.bz2' ftp.debian.org_debian_dists_unstable_main_i18n_Translation-en 0 : -'http://ftp.debian.org/debian/dists/unstable/InRelease' ftp.debian.org_debian_dists_unstable_InRelease 0 " aptget update --print-uris +'http://ftp.debian.org/debian/dists/unstable/InRelease' ftp.debian.org_debian_dists_unstable_InRelease 0 " aptget update --print-uris -# ARCH option +msgtest 'Test deb822' 'architecture option' echo "$BASE" > $SOURCES echo "Arch: amd64,armel" >> $SOURCES - -testequalwithmsg "Arch: option in deb822 sources.list works" "'http://ftp.debian.org/debian/dists/stable/main/binary-amd64/Packages.bz2' ftp.debian.org_debian_dists_stable_main_binary-amd64_Packages 0 : +testequal --nomsg "'http://ftp.debian.org/debian/dists/stable/main/binary-amd64/Packages.bz2' ftp.debian.org_debian_dists_stable_main_binary-amd64_Packages 0 : 'http://ftp.debian.org/debian/dists/stable/main/binary-armel/Packages.bz2' ftp.debian.org_debian_dists_stable_main_binary-armel_Packages 0 : 'http://ftp.debian.org/debian/dists/stable/main/i18n/Translation-en.bz2' ftp.debian.org_debian_dists_stable_main_i18n_Translation-en 0 : 'http://ftp.debian.org/debian/dists/stable/InRelease' ftp.debian.org_debian_dists_stable_InRelease 0 " aptget update --print-uris -# invalid sources.list file -echo "deb http://ftp.debian.org" > $SOURCES -testequalwithmsg "Invalid sources.list file gives proper error" "E: Malformed line 1 in source list $TMPWORKINGDIRECTORY/rootdir/etc/apt/sources.list (dist) +msgtest 'Test old-style sources.list file which has' 'malformed dist' +echo "deb http://ftp.debian.org" > $SOURCES +testequal --nomsg "E: Malformed line 1 in source list $TMPWORKINGDIRECTORY/rootdir/etc/apt/sources.list (dist) E: The list of sources could not be read." aptget update --print-uris + +msgtest 'Test deb822 sources.list file which has' 'malformed URI' echo "Type: deb Dist: stable " > $SOURCES - -testequalwithmsg "Invalid deb822 sources.list file gives proper error" "E: Malformed stanza 0 in source list $TMPWORKINGDIRECTORY/rootdir/etc/apt/sources.list (URI parse) +testequal --nomsg "E: Malformed stanza 0 in source list $TMPWORKINGDIRECTORY/rootdir/etc/apt/sources.list (URI parse) E: The list of sources could not be read." aptget update --print-uris diff --git a/test/integration/test-bug-728500-tempdir b/test/integration/test-bug-728500-tempdir index 0606538a1..0451fc1ed 100755 --- a/test/integration/test-bug-728500-tempdir +++ b/test/integration/test-bug-728500-tempdir @@ -7,12 +7,23 @@ TESTDIR=$(readlink -f $(dirname $0)) setupenvironment configarchitecture 'i386' -buildsimplenativepackage 'coolstuff' 'all' '1.0' 'unstable' +insertpackage 'unstable' 'coolstuff' 'all' '1.0' setupaptarchive changetowebserver -msgtest 'Test with incorect TMPDIR' +msgtest 'Test apt-get update with incorrect' 'TMPDIR' + +OUTPUT=$(mktemp) +addtrap "rm $OUTPUT;" export TMPDIR=/does-not-exists -aptget update && msgpass || msgfail -unset TMPDIR \ No newline at end of file +if aptget update >${OUTPUT} 2>&1; then + msgpass +else + echo + cat $OUTPUT + msgfail +fi +unset TMPDIR + +testequal 'coolstuff' aptcache pkgnames -- cgit v1.2.3-70-g09d2 From db6594dfc508378b6d658aff2761da5406404238 Mon Sep 17 00:00:00 2001 From: Michael Vogt Date: Thu, 16 Jan 2014 08:03:24 +0100 Subject: remove "," in components again --- apt-pkg/sourcelist.cc | 6 +----- test/integration/test-apt-sources-deb822 | 11 ----------- 2 files changed, 1 insertion(+), 16 deletions(-) (limited to 'test/integration') diff --git a/apt-pkg/sourcelist.cc b/apt-pkg/sourcelist.cc index 5e4a58e95..42ada7e18 100644 --- a/apt-pkg/sourcelist.cc +++ b/apt-pkg/sourcelist.cc @@ -363,11 +363,7 @@ int pkgSourceList::ParseFileDeb822(string File) // now create one item per section string const Section = Tags.FindS("Section"); - std::vector list; - if (Section.find(",")) - list = StringSplit(Section, ","); - else - list = StringSplit(Section, " "); + std::vector list = StringSplit(Section, " "); for (std::vector::const_iterator I = list.begin(); I != list.end(); I++) Parse->CreateItem(SrcList, URI, Dist, (*I), Options); diff --git a/test/integration/test-apt-sources-deb822 b/test/integration/test-apt-sources-deb822 index bacad1ed4..b110c1462 100755 --- a/test/integration/test-apt-sources-deb822 +++ b/test/integration/test-apt-sources-deb822 @@ -33,17 +33,6 @@ testequalwithmsg "Simple deb822 sources.list works" "'http://ftp.debian.org/debi 'http://ftp.debian.org/debian/dists/stable/main/i18n/Translation-en.bz2' ftp.debian.org_debian_dists_stable_main_i18n_Translation-en 0 : 'http://ftp.debian.org/debian/dists/stable/InRelease' ftp.debian.org_debian_dists_stable_InRelease 0 " aptget update --print-uris - -# two sections (we support both "," and " " as seperator) -echo "$BASE" | sed s/main/"main,contrib"/ > $SOURCES - -testequalwithmsg "Two sections deb822 sources.list work" "'http://ftp.debian.org/debian/dists/stable/main/binary-i386/Packages.bz2' ftp.debian.org_debian_dists_stable_main_binary-i386_Packages 0 : -'http://ftp.debian.org/debian/dists/stable/contrib/binary-i386/Packages.bz2' ftp.debian.org_debian_dists_stable_contrib_binary-i386_Packages 0 : -'http://ftp.debian.org/debian/dists/stable/contrib/i18n/Translation-en.bz2' ftp.debian.org_debian_dists_stable_contrib_i18n_Translation-en 0 : -'http://ftp.debian.org/debian/dists/stable/main/i18n/Translation-en.bz2' ftp.debian.org_debian_dists_stable_main_i18n_Translation-en 0 : -'http://ftp.debian.org/debian/dists/stable/InRelease' ftp.debian.org_debian_dists_stable_InRelease 0 " aptget update --print-uris - - # Two entries echo "$BASE" > $SOURCES echo "" >> $SOURCES -- cgit v1.2.3-70-g09d2 From 7037aab52fc935298b033a4c7ba7ccb5b697622e Mon Sep 17 00:00:00 2001 From: Michael Vogt Date: Thu, 16 Jan 2014 16:25:33 +0100 Subject: * refactor to have a new virtual ParseStanza Have a similar ParseStanza() to the current ParseLine(). Rename the Architectures options in deb822 to make it more user friendly --- apt-pkg/sourcelist.cc | 65 +++++++++++++++++++------------- apt-pkg/sourcelist.h | 5 +++ test/integration/test-apt-sources-deb822 | 2 +- 3 files changed, 45 insertions(+), 27 deletions(-) (limited to 'test/integration') diff --git a/apt-pkg/sourcelist.cc b/apt-pkg/sourcelist.cc index 42ada7e18..fe0eace07 100644 --- a/apt-pkg/sourcelist.cc +++ b/apt-pkg/sourcelist.cc @@ -71,6 +71,44 @@ bool pkgSourceList::Type::FixupURI(string &URI) const return true; } /*}}}*/ +bool pkgSourceList::Type::ParseStanza(vector &List, + pkgTagSection &Tags, + int i, + FileFd &Fd) +{ + map Options; + + string URI = Tags.FindS("URL"); + if (!FixupURI(URI)) + { + _error->Error(_("Malformed stanza %u in source list %s (URI parse)"),i,Fd.Name().c_str()); + return false; + } + + string Dist = Tags.FindS("Dist"); + Dist = SubstVar(Dist,"$(ARCH)",_config->Find("APT::Architecture")); + + // Define external/internal options + const char* option_deb822[] = { + "Architectures", "Architectures-Add", "Architectures-Delete", "Trusted", + }; + const char* option_internal[] = { + "arch", "arch+", "arch-", "trusted", + }; + for (unsigned int j=0; j < sizeof(option_deb822)/sizeof(char*); j++) + if (Tags.Exists(option_deb822[j])) + Options[option_internal[j]] = Tags.FindS(option_deb822[j]); + + // now create one item per section + string const Section = Tags.FindS("Section"); + std::vector list = StringSplit(Section, " "); + for (std::vector::const_iterator I = list.begin(); + I != list.end(); I++) + return CreateItem(List, URI, Dist, (*I), Options); + + return true; +} + // Type::ParseLine - Parse a single line /*{{{*/ // --------------------------------------------------------------------- /* This is a generic one that is the 'usual' format for sources.list @@ -313,7 +351,6 @@ bool pkgSourceList::ParseFileOldStyle(string File) int pkgSourceList::ParseFileDeb822(string File) { pkgTagSection Tags; - map Options; unsigned int i=0; // see if we can read the file @@ -338,35 +375,11 @@ int pkgSourceList::ParseFileDeb822(string File) if (Parse == 0) { _error->Error(_("Type '%s' is not known on stanza %u in source list %s"),type.c_str(),i,Fd.Name().c_str()); - // true means we do not retry with old-style sources.list return -1; } - string URI = Tags.FindS("URL"); - if (!Parse->FixupURI(URI)) - { - _error->Error(_("Malformed stanza %u in source list %s (URI parse)"),i,Fd.Name().c_str()); - // means we do not retry with old-style sources.list + if (!Parse->ParseStanza(SrcList, Tags, i, Fd)) return -1; - } - - string Dist = Tags.FindS("Dist"); - Dist = SubstVar(Dist,"$(ARCH)",_config->Find("APT::Architecture")); - - // check if there are any options we support - const char* option_str[] = { - "arch", "arch+", "arch-", "trusted", - }; - for (unsigned int j=0; j < sizeof(option_str)/sizeof(char*); j++) - if (Tags.Exists(option_str[j])) - Options[option_str[j]] = Tags.FindS(option_str[j]); - - // now create one item per section - string const Section = Tags.FindS("Section"); - std::vector list = StringSplit(Section, " "); - for (std::vector::const_iterator I = list.begin(); - I != list.end(); I++) - Parse->CreateItem(SrcList, URI, Dist, (*I), Options); i++; } diff --git a/apt-pkg/sourcelist.h b/apt-pkg/sourcelist.h index d83c76d6a..0ccb4aa00 100644 --- a/apt-pkg/sourcelist.h +++ b/apt-pkg/sourcelist.h @@ -31,6 +31,7 @@ #include #include #include +#include #ifndef APT_8_CLEANER_HEADERS #include @@ -60,6 +61,10 @@ class pkgSourceList const char *Label; bool FixupURI(std::string &URI) const; + virtual bool ParseStanza(std::vector &List, + pkgTagSection &Tags, + int stanza_n, + FileFd &Fd); virtual bool ParseLine(std::vector &List, const char *Buffer, unsigned long const &CurLine,std::string const &File) const; diff --git a/test/integration/test-apt-sources-deb822 b/test/integration/test-apt-sources-deb822 index b110c1462..fcb6010c3 100755 --- a/test/integration/test-apt-sources-deb822 +++ b/test/integration/test-apt-sources-deb822 @@ -48,7 +48,7 @@ testequalwithmsg "Multiple entries in deb822 sources.list work" "'http://ftp.deb # ARCH option echo "$BASE" > $SOURCES -echo "Arch: amd64,armel" >> $SOURCES +echo "Architectures: amd64,armel" >> $SOURCES testequalwithmsg "Arch: option in deb822 sources.list works" "'http://ftp.debian.org/debian/dists/stable/main/binary-amd64/Packages.bz2' ftp.debian.org_debian_dists_stable_main_binary-amd64_Packages 0 : 'http://ftp.debian.org/debian/dists/stable/main/binary-armel/Packages.bz2' ftp.debian.org_debian_dists_stable_main_binary-armel_Packages 0 : -- cgit v1.2.3-70-g09d2 From 796a0eff1acebe858632c344e77bfc3189b2244f Mon Sep 17 00:00:00 2001 From: Michael Vogt Date: Thu, 16 Jan 2014 17:00:56 +0100 Subject: rename "distribution" in sources.list to "suite" --- apt-pkg/sourcelist.cc | 2 +- doc/sources.list.5.xml | 38 +++++++++++++++++--------------- test/integration/test-apt-sources-deb822 | 4 ++-- 3 files changed, 23 insertions(+), 21 deletions(-) (limited to 'test/integration') diff --git a/apt-pkg/sourcelist.cc b/apt-pkg/sourcelist.cc index fe0eace07..ddebd206d 100644 --- a/apt-pkg/sourcelist.cc +++ b/apt-pkg/sourcelist.cc @@ -85,7 +85,7 @@ bool pkgSourceList::Type::ParseStanza(vector &List, return false; } - string Dist = Tags.FindS("Dist"); + string Dist = Tags.FindS("Suite"); Dist = SubstVar(Dist,"$(ARCH)",_config->Find("APT::Architecture")); // Define external/internal options diff --git a/doc/sources.list.5.xml b/doc/sources.list.5.xml index ef5219ec2..7a82bd4ce 100644 --- a/doc/sources.list.5.xml +++ b/doc/sources.list.5.xml @@ -79,19 +79,19 @@ The format for a sources.list entry using the deb and deb-src types is: - deb [ options ] uri distribution [component1] [component2] [...] + deb [ options ] uri suite [component1] [component2] [...] Alternatively a rfc822 style format is also supported: Type: deb URI: http://example.com - Dist: stable + Suite: stable Section: component1 component2 [option1]: [option1-value] Type: deb-src URI: http://example.com - Dist: stable + Suite: stable Section: component1 component2 [option1]: [option1-value] @@ -99,14 +99,14 @@ The URI for the deb type must specify the base of the Debian distribution, from which APT will find the information it needs. - distribution can specify an exact path, in which case the - components must be omitted and distribution must end with + suite can specify an exact path, in which case the + components must be omitted and suite must end with a slash (/). This is useful for the case when only a particular sub-section of the archive denoted by the URI is of interest. - If distribution does not specify an exact path, at least + If suite does not specify an exact path, at least one component must be present. - distribution may also contain a variable, + suite may also contain a variable, $(ARCH) which expands to the Debian architecture (such as amd64 or armel) used on the system. This permits architecture-independent @@ -114,17 +114,19 @@ of interest when specifying an exact path, APT will automatically generate a URI with the current architecture otherwise. - Since only one distribution can be specified per line it may be necessary - to have multiple lines for the same URI, if a subset of all available - distributions or components at that location is desired. - APT will sort the URI list after it has generated a complete set - internally, and will collapse multiple references to the same Internet - host, for instance, into a single connection, so that it does not - inefficiently establish an FTP connection, close it, do something else, - and then re-establish a connection to that same host. This feature is - useful for accessing busy FTP sites with limits on the number of - simultaneous anonymous users. APT also parallelizes connections to - different hosts to more effectively deal with sites with low bandwidth. + In the traditional style sources.list format since only one + distribution can be specified per line it may be necessary to have + multiple lines for the same URI, if a subset of all available + distributions or components at that location is desired. APT will + sort the URI list after it has generated a complete set internally, + and will collapse multiple references to the same Internet host, + for instance, into a single connection, so that it does not + inefficiently establish an FTP connection, close it, do something + else, and then re-establish a connection to that same host. This + feature is useful for accessing busy FTP sites with limits on the + number of simultaneous anonymous users. APT also parallelizes + connections to different hosts to more effectively deal with sites + with low bandwidth. options is always optional and needs to be surrounded by square brackets. It can consist of multiple settings in the form diff --git a/test/integration/test-apt-sources-deb822 b/test/integration/test-apt-sources-deb822 index fcb6010c3..00ca102be 100755 --- a/test/integration/test-apt-sources-deb822 +++ b/test/integration/test-apt-sources-deb822 @@ -21,7 +21,7 @@ BASE="# some comment Type: deb URL: http://ftp.debian.org/debian -Dist: stable +Suite: stable Section: main Comment: Some random string that can be very long" @@ -62,7 +62,7 @@ testequalwithmsg "Invalid sources.list file gives proper error" "E: Malformed li E: The list of sources could not be read." aptget update --print-uris echo "Type: deb -Dist: stable +Suite: stable " > $SOURCES testequalwithmsg "Invalid deb822 sources.list file gives proper error" "E: Malformed stanza 0 in source list $TMPWORKINGDIRECTORY/rootdir/etc/apt/sources.list (URI parse) -- cgit v1.2.3-70-g09d2 From a51fa92c521a6790446108a54ad1d9b6a16515ff Mon Sep 17 00:00:00 2001 From: Michael Vogt Date: Thu, 16 Jan 2014 17:03:07 +0100 Subject: rename URL to Uri in deb822-sources --- apt-pkg/sourcelist.cc | 2 +- doc/sources.list.5.xml | 4 ++-- test/integration/test-apt-sources-deb822 | 2 +- 3 files changed, 4 insertions(+), 4 deletions(-) (limited to 'test/integration') diff --git a/apt-pkg/sourcelist.cc b/apt-pkg/sourcelist.cc index ddebd206d..0cea8dc7f 100644 --- a/apt-pkg/sourcelist.cc +++ b/apt-pkg/sourcelist.cc @@ -78,7 +78,7 @@ bool pkgSourceList::Type::ParseStanza(vector &List, { map Options; - string URI = Tags.FindS("URL"); + string URI = Tags.FindS("Uri"); if (!FixupURI(URI)) { _error->Error(_("Malformed stanza %u in source list %s (URI parse)"),i,Fd.Name().c_str()); diff --git a/doc/sources.list.5.xml b/doc/sources.list.5.xml index 7a82bd4ce..e770023d5 100644 --- a/doc/sources.list.5.xml +++ b/doc/sources.list.5.xml @@ -84,13 +84,13 @@ Alternatively a rfc822 style format is also supported: Type: deb - URI: http://example.com + Uri: http://example.com Suite: stable Section: component1 component2 [option1]: [option1-value] Type: deb-src - URI: http://example.com + Uri: http://example.com Suite: stable Section: component1 component2 [option1]: [option1-value] diff --git a/test/integration/test-apt-sources-deb822 b/test/integration/test-apt-sources-deb822 index 00ca102be..edf52487c 100755 --- a/test/integration/test-apt-sources-deb822 +++ b/test/integration/test-apt-sources-deb822 @@ -20,7 +20,7 @@ BASE="# some comment #Type: meep Type: deb -URL: http://ftp.debian.org/debian +Uri: http://ftp.debian.org/debian Suite: stable Section: main Comment: Some random string -- cgit v1.2.3-70-g09d2 From d73743ddae1228bcd409700d8d0ffbe26e2e6cd1 Mon Sep 17 00:00:00 2001 From: Michael Vogt Date: Thu, 16 Jan 2014 17:13:18 +0100 Subject: support multiple "Suite:" entries --- apt-pkg/sourcelist.cc | 27 ++++++++++++++++++--------- test/integration/test-apt-sources-deb822 | 8 ++++++++ 2 files changed, 26 insertions(+), 9 deletions(-) (limited to 'test/integration') diff --git a/apt-pkg/sourcelist.cc b/apt-pkg/sourcelist.cc index 0cea8dc7f..09d8287a0 100644 --- a/apt-pkg/sourcelist.cc +++ b/apt-pkg/sourcelist.cc @@ -85,9 +85,6 @@ bool pkgSourceList::Type::ParseStanza(vector &List, return false; } - string Dist = Tags.FindS("Suite"); - Dist = SubstVar(Dist,"$(ARCH)",_config->Find("APT::Architecture")); - // Define external/internal options const char* option_deb822[] = { "Architectures", "Architectures-Add", "Architectures-Delete", "Trusted", @@ -99,13 +96,25 @@ bool pkgSourceList::Type::ParseStanza(vector &List, if (Tags.Exists(option_deb822[j])) Options[option_internal[j]] = Tags.FindS(option_deb822[j]); - // now create one item per section + // now create one item per suite/section + string Suite = Tags.FindS("Suite"); + Suite = SubstVar(Suite,"$(ARCH)",_config->Find("APT::Architecture")); string const Section = Tags.FindS("Section"); - std::vector list = StringSplit(Section, " "); - for (std::vector::const_iterator I = list.begin(); - I != list.end(); I++) - return CreateItem(List, URI, Dist, (*I), Options); - + + std::vector list_dist = StringSplit(Suite, " "); + std::vector list_section = StringSplit(Section, " "); + for (std::vector::const_iterator I = list_dist.begin(); + I != list_dist.end(); I++) + { + for (std::vector::const_iterator J = list_section.begin(); + J != list_section.end(); J++) + { + if (CreateItem(List, URI, (*I), (*J), Options) == false) + { + return false; + } + } + } return true; } diff --git a/test/integration/test-apt-sources-deb822 b/test/integration/test-apt-sources-deb822 index edf52487c..67d119565 100755 --- a/test/integration/test-apt-sources-deb822 +++ b/test/integration/test-apt-sources-deb822 @@ -45,6 +45,14 @@ testequalwithmsg "Multiple entries in deb822 sources.list work" "'http://ftp.deb 'http://ftp.debian.org/debian/dists/unstable/main/i18n/Translation-en.bz2' ftp.debian.org_debian_dists_unstable_main_i18n_Translation-en 0 : 'http://ftp.debian.org/debian/dists/unstable/InRelease' ftp.debian.org_debian_dists_unstable_InRelease 0 " aptget update --print-uris +# two suite entries +echo "$BASE" | sed -e "s/stable/stable unstable/" > $SOURCES +testequalwithmsg "Two Suite entries deb822 sources.list work" "'http://ftp.debian.org/debian/dists/stable/main/binary-i386/Packages.bz2' ftp.debian.org_debian_dists_stable_main_binary-i386_Packages 0 : +'http://ftp.debian.org/debian/dists/stable/main/i18n/Translation-en.bz2' ftp.debian.org_debian_dists_stable_main_i18n_Translation-en 0 : +'http://ftp.debian.org/debian/dists/stable/InRelease' ftp.debian.org_debian_dists_stable_InRelease 0 +'http://ftp.debian.org/debian/dists/unstable/main/binary-i386/Packages.bz2' ftp.debian.org_debian_dists_unstable_main_binary-i386_Packages 0 : +'http://ftp.debian.org/debian/dists/unstable/main/i18n/Translation-en.bz2' ftp.debian.org_debian_dists_unstable_main_i18n_Translation-en 0 : +'http://ftp.debian.org/debian/dists/unstable/InRelease' ftp.debian.org_debian_dists_unstable_InRelease 0 " aptget update --print-uris # ARCH option echo "$BASE" > $SOURCES -- cgit v1.2.3-70-g09d2 From bee0670b2dc8c50ddfc65731c00383da4d377cae Mon Sep 17 00:00:00 2001 From: David Kalnischkies Date: Thu, 16 Jan 2014 17:21:13 +0100 Subject: show the error message if the webserver start failed Can happen e.g. if port 8080 is already used by something else Git-Dch: Ignore --- test/integration/framework | 8 ++++++-- 1 file changed, 6 insertions(+), 2 deletions(-) (limited to 'test/integration') diff --git a/test/integration/framework b/test/integration/framework index 60a8167fa..c4953812b 100644 --- a/test/integration/framework +++ b/test/integration/framework @@ -835,10 +835,14 @@ changetowebserver() { else shift fi - local LOG='/dev/null' if test -x ${APTWEBSERVERBINDIR}/aptwebserver; then cd aptarchive - aptwebserver -o aptwebserver::fork=1 "$@" >$LOG 2>&1 + local LOG="$(mktemp)" + addtrap "rm $LOG;" + if ! aptwebserver -o aptwebserver::fork=1 "$@" >$LOG 2>&1 ; then + cat $LOG + false + fi local PID="$(cat aptwebserver.pid)" if [ -z "$PID" ]; then msgdie 'Could not fork aptwebserver successfully' -- cgit v1.2.3-70-g09d2 From 77a45bebc9168b396334630ef109c1d48ddaf930 Mon Sep 17 00:00:00 2001 From: David Kalnischkies Date: Thu, 16 Jan 2014 23:51:05 +0100 Subject: use our own homedir for gpg in testcases Git-Dch: Ignore --- test/integration/framework | 25 +++++++++++++++++++++++-- 1 file changed, 23 insertions(+), 2 deletions(-) (limited to 'test/integration') diff --git a/test/integration/framework b/test/integration/framework index c4953812b..1db1946db 100644 --- a/test/integration/framework +++ b/test/integration/framework @@ -124,6 +124,13 @@ gdb() { http() { LD_LIBRARY_PATH=${BUILDDIRECTORY} ${BUILDDIRECTORY}/methods/http } +gpg() { + # see apt-key for the whole trickery. Setup is done in setupenvironment + command gpg --ignore-time-conflict --no-options --no-default-keyring \ + --homedir "${TMPWORKINGDIRECTORY}/gnupghome" \ + --no-auto-check-trustdb --trust-model always \ + "$@" +} exitwithstatus() { # error if we about to overflow, but ... @@ -205,6 +212,20 @@ setupenvironment() { export LC_ALL=C.UTF-8 export PATH="${PATH}:/usr/local/sbin:/usr/sbin:/sbin" configcompression '.' 'gz' #'bz2' 'lzma' 'xz' + + # gpg needs a trustdb to function, but it can't be invalid (not even empty) + # see also apt-key where this trickery comes from: + local TRUSTDBDIR="${TMPWORKINGDIRECTORY}/gnupghome" + mkdir "$TRUSTDBDIR" + chmod 700 "$TRUSTDBDIR" + # We also don't use a secret keyring, of course, but gpg panics and + # implodes if there isn't one available - and writeable for imports + local SECRETKEYRING="${TRUSTDBDIR}/secring.gpg" + touch $SECRETKEYRING + # now create the trustdb with an (empty) dummy keyring + # newer gpg versions are fine without it, but play it safe for now + gpg --quiet --check-trustdb --secret-keyring $SECRETKEYRING --keyring $SECRETKEYRING >/dev/null 2>&1 + msgdone "info" } @@ -390,7 +411,7 @@ Package: $NAME" >> ${BUILDDIR}/debian/control | while read SRC; do echo "pool/${SRC}" >> ${BUILDDIR}/../${RELEASE}.${DISTSECTION}.srclist # if expr match "${SRC}" '.*\.dsc' >/dev/null 2>&1; then -# gpg --yes --no-default-keyring --secret-keyring ./keys/joesixpack.sec \ +# gpg --yes --secret-keyring ./keys/joesixpack.sec \ # --keyring ./keys/joesixpack.pub --default-key 'Joe Sixpack' \ # --clearsign -o "${BUILDDIR}/../${SRC}.sign" "${BUILDDIR}/../$SRC" # mv "${BUILDDIR}/../${SRC}.sign" "${BUILDDIR}/../$SRC" @@ -764,7 +785,7 @@ setupaptarchive() { signreleasefiles() { local SIGNER="${1:-Joe Sixpack}" - local GPG="gpg --batch --yes --no-default-keyring --trustdb-name rootdir/etc/apt/trustdb.gpg" + local GPG="gpg --batch --yes" msgninfo "\tSign archive with $SIGNER key… " local REXKEY='keys/rexexpired' local SECEXPIREBAK="${REXKEY}.sec.bak" -- cgit v1.2.3-70-g09d2 From 0954c58eeb07f5c3c6e6385e0547924a4917c21d Mon Sep 17 00:00:00 2001 From: David Kalnischkies Date: Fri, 17 Jan 2014 01:02:47 +0100 Subject: improve stdout/stderr usage correctness in test framework Also adds a friendly note about how many tests were run/passed so that the end of the testrun isn't all that negative by just showing fails. (It now tells us that we have 111 tests at the moment!) Git-Dch: Ignore --- test/integration/framework | 26 +++++++++++++------------- test/integration/run-tests | 22 +++++++++++++++------- test/integration/test-apt-get-download | 3 ++- 3 files changed, 30 insertions(+), 21 deletions(-) (limited to 'test/integration') diff --git a/test/integration/framework b/test/integration/framework index 1db1946db..8d9f99d64 100644 --- a/test/integration/framework +++ b/test/integration/framework @@ -19,24 +19,24 @@ fi msgdie() { echo "${CERROR}E: $1${CNORMAL}" >&2; exit 1; } msgwarn() { echo "${CWARNING}W: $1${CNORMAL}" >&2; } -msgmsg() { echo "${CMSG}$1${CNORMAL}" >&2; } -msginfo() { echo "${CINFO}I: $1${CNORMAL}" >&2; } -msgdebug() { echo "${CDEBUG}D: $1${CNORMAL}" >&2; } -msgdone() { echo "${CDONE}DONE${CNORMAL}" >&2; } +msgmsg() { echo "${CMSG}$1${CNORMAL}"; } +msginfo() { echo "${CINFO}I: $1${CNORMAL}"; } +msgdebug() { echo "${CDEBUG}D: $1${CNORMAL}"; } +msgdone() { echo "${CDONE}DONE${CNORMAL}"; } msgnwarn() { echo -n "${CWARNING}W: $1${CNORMAL}" >&2; } -msgnmsg() { echo -n "${CMSG}$1${CNORMAL}" >&2; } -msgninfo() { echo -n "${CINFO}I: $1${CNORMAL}" >&2; } -msgndebug() { echo -n "${CDEBUG}D: $1${CNORMAL}" >&2; } +msgnmsg() { echo -n "${CMSG}$1${CNORMAL}"; } +msgninfo() { echo -n "${CINFO}I: $1${CNORMAL}"; } +msgndebug() { echo -n "${CDEBUG}D: $1${CNORMAL}"; } msgtest() { while [ -n "$1" ]; do - echo -n "${CINFO}$1${CCMD} " >&2; - echo -n "$(echo "$2" | sed -e 's/^aptc/apt-c/' -e 's/^aptg/apt-g/' -e 's/^aptf/apt-f/')${CINFO} " >&2; + echo -n "${CINFO}$1${CCMD} " + echo -n "$(echo "$2" | sed -e 's/^aptc/apt-c/' -e 's/^aptg/apt-g/' -e 's/^aptf/apt-f/')${CINFO} " shift if [ -n "$1" ]; then shift; else break; fi done - echo -n "…${CNORMAL} " >&2; + echo -n "…${CNORMAL} " } -msgpass() { echo "${CPASS}PASS${CNORMAL}" >&2; } +msgpass() { echo "${CPASS}PASS${CNORMAL}"; } msgskip() { echo "${CWARNING}SKIP${CNORMAL}" >&2; } msgfail() { if [ $# -gt 0 ]; then echo "${CFAIL}FAIL: $*${CNORMAL}" >&2; @@ -57,7 +57,7 @@ if [ $MSGLEVEL -le 2 ]; then msgmsg() { true; } msgnmsg() { true; } msgtest() { true; } - msgpass() { echo -n " ${CPASS}P${CNORMAL}" >&2; } + msgpass() { echo -n " ${CPASS}P${CNORMAL}"; } msgskip() { echo -n " ${CWARNING}S${CNORMAL}" >&2; } if [ -n "$CFAIL" ]; then msgfail() { echo -n " ${CFAIL}FAIL${CNORMAL}" >&2; EXIT_CODE=$((EXIT_CODE+1)); } @@ -81,7 +81,7 @@ msgdone() { [ "$1" = "die" -a $MSGLEVEL -le 0 ]; then true; else - echo "${CDONE}DONE${CNORMAL}" >&2; + echo "${CDONE}DONE${CNORMAL}"; fi } diff --git a/test/integration/run-tests b/test/integration/run-tests index 7316016e2..881c1c56b 100755 --- a/test/integration/run-tests +++ b/test/integration/run-tests @@ -2,6 +2,9 @@ set -e FAIL=0 +PASS=0 +ALL=0 + FAILED_TESTS="" DIR=$(readlink -f $(dirname $0)) if [ "$1" = "-q" ]; then @@ -29,18 +32,23 @@ for testcase in $(run-parts --list $DIR | grep '/test-'); do echo "${CTEST}Run Testcase ${CHIGH}$(basename ${testcase})${CRESET}" fi if ! ${testcase}; then - FAIL=$((FAIL+1)) - FAILED_TESTS="$FAILED_TESTS $(basename $testcase)" - echo "$(basename $testcase) ... FAIL" - fi + FAIL=$((FAIL+1)) + FAILED_TESTS="$FAILED_TESTS $(basename $testcase)" + echo >&2 "$(basename $testcase) ... FAIL" + else + PASS=$((PASS+1)) + fi + ALL=$((ALL+1)) if [ "$MSGLEVEL" -le 2 ]; then echo fi done -echo "failures: $FAIL" -if [ -n "$FAILED_TESTS" ]; then - echo "Failed tests: $FAILED_TESTS"; +echo >&2 "Statistics: $ALL tests were run: $PASS successfully and $FAIL failed" +if [ -n "$FAILED_TESTS" ]; then + echo >&2 "Failed tests: $FAILED_TESTS" +else + echo >&2 'All tests seem to have been run successfully. What could possibly go wrong?' fi # ensure we don't overflow exit $((FAIL <= 255 ? FAIL : 255)) diff --git a/test/integration/test-apt-get-download b/test/integration/test-apt-get-download index 6eac079f3..fce0be018 100755 --- a/test/integration/test-apt-get-download +++ b/test/integration/test-apt-get-download @@ -19,7 +19,8 @@ testdownload() { APT="${APT}/${3}" fi msgtest "Test download of package file $1 with" "$APT" - aptget -qq download ${APT} && test -f $1 && msgpass || msgfail + testsuccess --nomsg aptget download ${APT} + testsuccess test -f $1 rm $1 } -- cgit v1.2.3-70-g09d2 From 1410955589dc9f0eaa290907cac070b7ebf93b6a Mon Sep 17 00:00:00 2001 From: Michael Vogt Date: Fri, 17 Jan 2014 08:43:14 +0100 Subject: add missing integration test for "apt list" --- apt-private/private-list.cc | 12 ++++++---- apt-private/private-output.cc | 8 ++++--- cmdline/apt.cc | 23 +++++++++++--------- test/integration/framework | 10 +++++---- test/integration/test-apt-binary | 47 ++++++++++++++++++++++++++++++++++++++++ 5 files changed, 79 insertions(+), 21 deletions(-) create mode 100755 test/integration/test-apt-binary (limited to 'test/integration') diff --git a/apt-private/private-list.cc b/apt-private/private-list.cc index a02ebf02d..fbb66d204 100644 --- a/apt-private/private-list.cc +++ b/apt-private/private-list.cc @@ -101,11 +101,15 @@ private: /*}}}*/ void ListAllVersions(pkgCacheFile &CacheFile, pkgRecords &records, /*{{{*/ pkgCache::PkgIterator P, - std::ostream &outs) + std::ostream &outs, + bool include_summary=true) { for (pkgCache::VerIterator Ver = P.VersionList(); Ver.end() == false; Ver++) - ListSingleVersion(CacheFile, records, Ver, outs); + { + ListSingleVersion(CacheFile, records, Ver, outs, include_summary); + outs << "\n"; + } } /*}}}*/ // list - list package based on criteria /*{{{*/ @@ -136,7 +140,7 @@ bool List(CommandLine &Cmd) PackageNameMatcher matcher(patterns); LocalitySortedVersionSet bag; - OpTextProgress progress; + OpTextProgress progress(*_config); progress.OverallProgress(0, Cache->Head().PackageCount, Cache->Head().PackageCount, @@ -147,7 +151,7 @@ bool List(CommandLine &Cmd) std::stringstream outs; if(_config->FindB("APT::Cmd::All-Versions", false) == true) { - ListAllVersions(CacheFile, records, V.ParentPkg(), outs); + ListAllVersions(CacheFile, records, V.ParentPkg(), outs, includeSummary); output_map.insert(std::make_pair( V.ParentPkg().Name(), outs.str())); } else { diff --git a/apt-private/private-output.cc b/apt-private/private-output.cc index 91d13f31b..a8bbad9e5 100644 --- a/apt-private/private-output.cc +++ b/apt-private/private-output.cc @@ -114,11 +114,13 @@ std::string GetVersion(pkgCacheFile &CacheFile, pkgCache::VerIterator V)/*{{{*/ pkgCache::PkgIterator P = V.ParentPkg(); if (V == P.CurrentVer()) { + std::string inst_str = DeNull(V.VerStr()); +#if 0 // FIXME: do we want this or something like this? pkgDepCache *DepCache = CacheFile.GetDepCache(); pkgDepCache::StateCache &state = (*DepCache)[P]; - std::string inst_str = DeNull(V.VerStr()); if (state.Upgradable()) return "**"+inst_str; +#endif return inst_str; } @@ -224,11 +226,11 @@ void ListSingleVersion(pkgCacheFile &CacheFile, pkgRecords &records, /*{{{*/ else out << GetVersion(CacheFile, V); } - out << " " << GetArchitecture(CacheFile, P) << " "; + out << " " << GetArchitecture(CacheFile, P); if (include_summary) { out << std::endl - << " " << GetShortDescription(CacheFile, records, P) + << " " << GetShortDescription(CacheFile, records, P) << std::endl; } } diff --git a/cmdline/apt.cc b/cmdline/apt.cc index 2d3966e86..8dc4c292a 100644 --- a/cmdline/apt.cc +++ b/cmdline/apt.cc @@ -114,16 +114,6 @@ int main(int argc, const char *argv[]) /*{{{*/ std::vector Args = getCommandArgs("apt", CommandLine::GetCommand(Cmds, argc, argv)); - if(!isatty(1)) - { - std::cerr << std::endl - << "WARNING: " << argv[0] << " " - << "does not have a stable CLI interface yet. " - << "Use with caution in scripts." - << std::endl - << std::endl; - } - InitOutput(); // Set up gettext support @@ -149,6 +139,19 @@ int main(int argc, const char *argv[]) /*{{{*/ return 100; } + if(!isatty(STDOUT_FILENO) && + _config->FindB("Apt::Cmd::Disable-Script-Warning", false) == false) + { + std::cerr << std::endl + << "WARNING: " << argv[0] << " " + << "does not have a stable CLI interface yet. " + << "Use with caution in scripts." + << std::endl + << std::endl; + } + if (!isatty(STDOUT_FILENO) && _config->FindI("quiet", -1) == -1) + _config->Set("quiet","1"); + // See if the help should be shown if (_config->FindB("help") == true || _config->FindB("version") == true || diff --git a/test/integration/framework b/test/integration/framework index a28363768..6620c78dd 100644 --- a/test/integration/framework +++ b/test/integration/framework @@ -99,6 +99,7 @@ aptconfig() { runapt apt-config $*; } aptcache() { runapt apt-cache $*; } aptcdrom() { runapt apt-cdrom $*; } aptget() { runapt apt-get $*; } +apt() { runapt apt $*; } aptftparchive() { runapt apt-ftparchive $*; } aptkey() { runapt apt-key $*; } aptmark() { runapt apt-mark $*; } @@ -202,6 +203,7 @@ setupenvironment() { echo "DPKG::options:: \"--log=${TMPWORKINGDIRECTORY}/rootdir/var/log/dpkg.log\";" >> aptconfig.conf echo 'quiet::NoUpdate "true";' >> aptconfig.conf echo "Acquire::https::CaInfo \"${TESTDIR}/apt.pem\";" > rootdir/etc/apt/apt.conf.d/99https + echo "Apt::Cmd::Disable-Script-Warning \"1\";" > rootdir/etc/apt/apt.conf.d/apt-binary export LC_ALL=C export PATH="${PATH}:/usr/local/sbin:/usr/sbin:/sbin" configcompression '.' 'gz' #'bz2' 'lzma' 'xz' @@ -288,7 +290,7 @@ setupsimplenativepackage() { local VERSION="$3" local RELEASE="${4:-unstable}" local DEPENDENCIES="$5" - local DESCRIPTION="${6:-"Description: an autogenerated dummy ${NAME}=${VERSION}/${RELEASE} + local DESCRIPTION="${6:-"an autogenerated dummy ${NAME}=${VERSION}/${RELEASE} If you find such a package installed on your system, something went horribly wrong! They are autogenerated und used only by testcases and surf no other propose…"}" @@ -338,7 +340,7 @@ buildsimplenativepackage() { local VERSION="$3" local RELEASE="${4:-unstable}" local DEPENDENCIES="$5" - local DESCRIPTION="${6:-"Description: an autogenerated dummy ${NAME}=${VERSION}/${RELEASE} + local DESCRIPTION="${6:-"an autogenerated dummy ${NAME}=${VERSION}/${RELEASE} If you find such a package installed on your system, something went horribly wrong! They are autogenerated und used only by testcases and surf no other propose…"}" @@ -535,7 +537,7 @@ insertpackage() { local VERSION="$4" local DEPENDENCIES="$5" local PRIORITY="${6:-optional}" - local DESCRIPTION="${7:-"Description: an autogenerated dummy ${NAME}=${VERSION}/${RELEASE} + local DESCRIPTION="${7:-"an autogenerated dummy ${NAME}=${VERSION}/${RELEASE} If you find such a package installed on your system, something went horribly wrong! They are autogenerated und used only by testcases and surf no other propose…"}" @@ -595,7 +597,7 @@ insertinstalledpackage() { local DEPENDENCIES="$4" local PRIORITY="${5:-optional}" local STATUS="${6:-install ok installed}" - local DESCRIPTION="${7:-"Description: an autogenerated dummy ${NAME}=${VERSION}/installed + local DESCRIPTION="${7:-"an autogenerated dummy ${NAME}=${VERSION}/installed If you find such a package installed on your system, something went horribly wrong! They are autogenerated und used only by testcases and surf no other propose…"}" diff --git a/test/integration/test-apt-binary b/test/integration/test-apt-binary new file mode 100755 index 000000000..8d5df9051 --- /dev/null +++ b/test/integration/test-apt-binary @@ -0,0 +1,47 @@ +#!/bin/sh +set -e + +TESTDIR=$(readlink -f $(dirname $0)) +. $TESTDIR/framework + +setupenvironment +configarchitecture "i386" + +insertpackage 'unstable' 'foo' 'all' '1.0' +insertinstalledpackage 'bar' 'i386' '1.0' + +insertinstalledpackage 'foobar' 'i386' '1.0' +insertpackage 'unstable' 'foobar' 'i386' '2.0' + +setupaptarchive + +APTARCHIVE=$(readlink -f ./aptarchive) + +testequal "Listing... +bar/now 1.0 [installed,local] i386 +foo/unstable 1.0 all +foobar/unstable 2.0 [upgradable from: 1.0] i386" apt list + +testequal "Listing... +foo/unstable 1.0 all +foobar/unstable 2.0 [upgradable from: 1.0] i386" apt list "foo*" + +testequal "Listing... +foobar/unstable 2.0 [upgradable from: 1.0] i386" apt list --upgradable + +# FIXME: hm, hm - does it make sense to have this different? shouldn't +# we use "installed,upgradable" consitently? +testequal "Listing... +bar/now 1.0 [installed,local] i386 +foobar/now 1.0 [installed,upgradable to: 2.0] i386" apt list --installed + +testequal "Listing... +foobar/unstable 2.0 [upgradable from: 1.0] i386 +foobar/now 1.0 [installed,upgradable to: 2.0] i386 +" apt list foobar --all-versions + +testequal "Listing... +bar/now 1.0 [installed,local] i386 + an autogenerated dummy bar=1.0/installed +" apt list bar --verbose + -- cgit v1.2.3-70-g09d2 From 846856f450a06dcb91bb214791b4eda2380f20ff Mon Sep 17 00:00:00 2001 From: David Kalnischkies Date: Fri, 17 Jan 2014 17:36:47 +0100 Subject: correct some quoting offenses also avoids redirecting messages from dpkg-deb to /dev/null as it might fail (as it is quiet picky) and we should know why if it does. Git-Dch: Ignore --- test/integration/framework | 74 +++++++++++++++++++++++++++------------------- 1 file changed, 43 insertions(+), 31 deletions(-) (limited to 'test/integration') diff --git a/test/integration/framework b/test/integration/framework index 8d9f99d64..066cdb265 100644 --- a/test/integration/framework +++ b/test/integration/framework @@ -87,39 +87,41 @@ msgdone() { runapt() { msgdebug "Executing: ${CCMD}$*${CDEBUG} " + local CMD="$1" + shift if [ -f ./aptconfig.conf ]; then - MALLOC_PERTURB_=21 MALLOC_CHECK_=2 APT_CONFIG=aptconfig.conf LD_LIBRARY_PATH=${BUILDDIRECTORY} ${BUILDDIRECTORY}/$* + MALLOC_PERTURB_=21 MALLOC_CHECK_=2 APT_CONFIG=aptconfig.conf LD_LIBRARY_PATH=${BUILDDIRECTORY} ${BUILDDIRECTORY}/$CMD "$@" elif [ -f ../aptconfig.conf ]; then - MALLOC_PERTURB_=21 MALLOC_CHECK_=2 APT_CONFIG=../aptconfig.conf LD_LIBRARY_PATH=${BUILDDIRECTORY} ${BUILDDIRECTORY}/$* + MALLOC_PERTURB_=21 MALLOC_CHECK_=2 APT_CONFIG=../aptconfig.conf LD_LIBRARY_PATH=${BUILDDIRECTORY} ${BUILDDIRECTORY}/$CMD "$@" else - MALLOC_PERTURB_=21 MALLOC_CHECK_=2 LD_LIBRARY_PATH=${BUILDDIRECTORY} ${BUILDDIRECTORY}/$* + MALLOC_PERTURB_=21 MALLOC_CHECK_=2 LD_LIBRARY_PATH=${BUILDDIRECTORY} ${BUILDDIRECTORY}/$CMD "$@" fi } -aptconfig() { runapt apt-config $*; } -aptcache() { runapt apt-cache $*; } -aptcdrom() { runapt apt-cdrom $*; } -aptget() { runapt apt-get $*; } -aptftparchive() { runapt apt-ftparchive $*; } -aptkey() { runapt apt-key $*; } -aptmark() { runapt apt-mark $*; } +aptconfig() { runapt apt-config "$@"; } +aptcache() { runapt apt-cache "$@"; } +aptcdrom() { runapt apt-cdrom "$@"; } +aptget() { runapt apt-get "$@"; } +aptftparchive() { runapt apt-ftparchive "$@"; } +aptkey() { runapt apt-key "$@"; } +aptmark() { runapt apt-mark "$@"; } aptwebserver() { - LD_LIBRARY_PATH=${APTWEBSERVERBINDIR} ${APTWEBSERVERBINDIR}/aptwebserver $*; + LD_LIBRARY_PATH=${APTWEBSERVERBINDIR} ${APTWEBSERVERBINDIR}/aptwebserver "$@"; } dpkg() { - $(which dpkg) --root=${TMPWORKINGDIRECTORY}/rootdir --force-not-root --force-bad-path --log=${TMPWORKINGDIRECTORY}/rootdir/var/log/dpkg.log $* + command dpkg --root=${TMPWORKINGDIRECTORY}/rootdir --force-not-root --force-bad-path --log=${TMPWORKINGDIRECTORY}/rootdir/var/log/dpkg.log "$@" } aptitude() { if [ -f ./aptconfig.conf ]; then - APT_CONFIG=aptconfig.conf LD_LIBRARY_PATH=${BUILDDIRECTORY} $(which aptitude) $* + APT_CONFIG=aptconfig.conf LD_LIBRARY_PATH=${BUILDDIRECTORY} command aptitude "$@" elif [ -f ../aptconfig.conf ]; then - APT_CONFIG=../aptconfig.conf LD_LIBRARY_PATH=${BUILDDIRECTORY} $(which aptitude) $* + APT_CONFIG=../aptconfig.conf LD_LIBRARY_PATH=${BUILDDIRECTORY} command aptitude "$@" else - LD_LIBRARY_PATH=${BUILDDIRECTORY} $(which aptitude) $* + LD_LIBRARY_PATH=${BUILDDIRECTORY} command aptitude "$@" fi } gdb() { echo "gdb: run »$*«" - APT_CONFIG=aptconfig.conf LD_LIBRARY_PATH=${BUILDDIRECTORY} $(which gdb) ${BUILDDIRECTORY}/$1 --args $* + APT_CONFIG=aptconfig.conf LD_LIBRARY_PATH=${BUILDDIRECTORY} command gdb ${BUILDDIRECTORY}/$1 --args "$@" } http() { LD_LIBRARY_PATH=${BUILDDIRECTORY} ${BUILDDIRECTORY}/methods/http @@ -203,7 +205,7 @@ setupenvironment() { echo "DPKG::options:: \"--root=${TMPWORKINGDIRECTORY}/rootdir\";" >> aptconfig.conf echo "DPKG::options:: \"--force-not-root\";" >> aptconfig.conf echo "DPKG::options:: \"--force-bad-path\";" >> aptconfig.conf - if ! $(which dpkg) --assert-multi-arch >/dev/null 2>&1; then + if ! command dpkg --assert-multi-arch >/dev/null 2>&1; then echo "DPKG::options:: \"--force-architecture\";" >> aptconfig.conf # Added to test multiarch before dpkg is ready for it… fi echo "DPKG::options:: \"--log=${TMPWORKINGDIRECTORY}/rootdir/var/log/dpkg.log\";" >> aptconfig.conf @@ -267,7 +269,7 @@ configdpkg() { fi fi rm -f rootdir/etc/apt/apt.conf.d/00foreigndpkg - if $(which dpkg) --assert-multi-arch >/dev/null 2>&1; then + if command dpkg --assert-multi-arch >/dev/null 2>&1 ; then local ARCHS="$(getarchitectures)" if echo "$ARCHS" | grep -E -q '[^ ]+ [^ ]+'; then DPKGARCH="$(dpkg --print-architecture)" @@ -429,7 +431,12 @@ Package: $NAME" >> ${BUILDDIR}/debian/control (cd ${BUILDDIR}; dpkg-gencontrol -DArchitecture=$arch) (cd ${BUILDDIR}/debian/tmp; md5sum $(find usr/ -type f) > DEBIAN/md5sums) - dpkg-deb --build ${BUILDDIR}/debian/tmp ${BUILDDIR}/.. 2> /dev/null > /dev/null + local LOG="${BUILDDIR}/../${NAME}_${VERSION}_${arch}.dpkg-deb.log" + if ! dpkg-deb --build ${BUILDDIR}/debian/tmp ${BUILDDIR}/.. >$LOG 2>&1; then + cat $LOG + false + fi + rm $LOG echo "pool/${NAME}_${VERSION}_${arch}.deb" >> ${BUILDDIR}/../${RELEASE}.${DISTSECTION}.pkglist done @@ -445,14 +452,19 @@ buildpackage() { local RELEASE=$2 local SECTION=$3 local ARCH=$(getarchitecture $4) - msgninfo "Build package $(echo "$BUILDDIR" | grep -o '[^/]*$') for ${RELEASE} in ${SECTION}… " + local PKGNAME="$(echo "$BUILDDIR" | grep -o '[^/]*$')" + local BUILDLOG="$(readlink -f "${BUILDDIR}/../${PKGNAME}_${RELEASE}_${SECTION}.dpkg-bp.log")" + msgninfo "Build package ${PKGNAME} for ${RELEASE} in ${SECTION}… " cd $BUILDDIR if [ "$ARCH" = "all" ]; then ARCH="$(dpkg-architecture -qDEB_HOST_ARCH 2> /dev/null)" fi - local BUILT="$(dpkg-buildpackage -uc -us -a$ARCH 2> /dev/null)" - local PKGS="$( echo "$BUILT" | grep '^dpkg-deb: building package' | cut -d'/' -f 2 | sed -e "s#'\.##")" - local SRCS="$( echo "$BUILT" | grep '^dpkg-source: info: building' | grep -o '[a-z0-9._+~-]*$')" + if ! dpkg-buildpackage -uc -us -a$ARCH >$BUILDLOG 2>&1 ; then + cat $BUILDLOG + false + fi + local PKGS="$(grep '^dpkg-deb: building package' $BUILDLOG | cut -d'/' -f 2 | sed -e "s#'\.##")" + local SRCS="$(grep '^dpkg-source: info: building' $BUILDLOG | grep -o '[a-z0-9._+~-]*$')" cd - > /dev/null for PKG in $PKGS; do echo "pool/${PKG}" >> ${TMPWORKINGDIRECTORY}/incoming/${RELEASE}.${SECTION}.pkglist @@ -465,9 +477,9 @@ buildpackage() { buildaptarchive() { if [ -d incoming ]; then - buildaptarchivefromincoming $* + buildaptarchivefromincoming "$@" else - buildaptarchivefromfiles $* + buildaptarchivefromfiles "$@" fi } @@ -952,7 +964,7 @@ Filename: ${2} } checkdiff() { - local DIFFTEXT="$($(which diff) -u $* | sed -e '/^---/ d' -e '/^+++/ d' -e '/^@@/ d')" + local DIFFTEXT="$(command diff -u "$@" | sed -e '/^---/ d' -e '/^+++/ d' -e '/^@@/ d')" if [ -n "$DIFFTEXT" ]; then echo echo "$DIFFTEXT" @@ -1026,7 +1038,7 @@ N: No packages found" testnopackage() { msgtest "Test for non-existent packages" "apt-cache show $*" - local SHOWPKG="$(aptcache show $* 2>&1 | grep '^Package: ')" + local SHOWPKG="$(aptcache show "$@" 2>&1 | grep '^Package: ')" if [ -n "$SHOWPKG" ]; then echo echo "$SHOWPKG" @@ -1038,10 +1050,10 @@ testnopackage() { testdpkginstalled() { msgtest "Test for correctly installed package(s) with" "dpkg -l $*" - local PKGS="$(dpkg -l $* 2>/dev/null | grep '^i' | wc -l)" + local PKGS="$(dpkg -l "$@" 2>/dev/null | grep '^i' | wc -l)" if [ "$PKGS" != $# ]; then echo $PKGS - dpkg -l $* | grep '^[a-z]' + dpkg -l "$@" | grep '^[a-z]' msgfail return 1 fi @@ -1050,10 +1062,10 @@ testdpkginstalled() { testdpkgnotinstalled() { msgtest "Test for correctly not-installed package(s) with" "dpkg -l $*" - local PKGS="$(dpkg -l $* 2> /dev/null | grep '^i' | wc -l)" + local PKGS="$(dpkg -l "$@" 2> /dev/null | grep '^i' | wc -l)" if [ "$PKGS" != 0 ]; then echo - dpkg -l $* | grep '^[a-z]' + dpkg -l "$@" | grep '^[a-z]' msgfail return 1 fi -- cgit v1.2.3-70-g09d2 From 039382803d4172d512789e507c1e9a2559a4f235 Mon Sep 17 00:00:00 2001 From: David Kalnischkies Date: Fri, 17 Jan 2014 17:53:15 +0100 Subject: use our tmpdir instead of creating tmpfiles Maintaining (mainly the deletion of them) is a pain and they litter /tmp while the testcase is run for no good reason as we could just as well drop it into our tmpdir we have anyway and let them be deleted with the rest automatically Git-Dch: Ignore --- test/integration/framework | 32 ++++++++++++-------------------- 1 file changed, 12 insertions(+), 20 deletions(-) (limited to 'test/integration') diff --git a/test/integration/framework b/test/integration/framework index 066cdb265..bbe77dcf8 100644 --- a/test/integration/framework +++ b/test/integration/framework @@ -179,7 +179,7 @@ setupenvironment() { mkdir rootdir aptarchive keys cd rootdir mkdir -p etc/apt/apt.conf.d etc/apt/sources.list.d etc/apt/trusted.gpg.d etc/apt/preferences.d - mkdir -p var/cache var/lib var/log + mkdir -p var/cache var/lib var/log tmp mkdir -p var/lib/dpkg/info var/lib/dpkg/updates var/lib/dpkg/triggers touch var/lib/dpkg/available mkdir -p usr/lib/apt @@ -844,8 +844,7 @@ webserverconfig() { downloadfile "http://localhost:8080/_config/set/${1}/${2}" '/dev/null' >/dev/null local DOWNLOG='download-testfile.log' rm -f "$DOWNLOG" - local STATUS="$(mktemp)" - addtrap "rm $STATUS;" + local STATUS="${TMPWORKINGDIRECTORY}/rootdir/tmp/webserverconfig.status" downloadfile "http://localhost:8080/_config/find/aptwebserver::last-status-code" "$STATUS" > "$DOWNLOG" if [ "$(cat "$STATUS")" = '200' ]; then msgpass @@ -853,6 +852,7 @@ webserverconfig() { cat >&2 "$DOWNLOG" msgfail "Statuscode was $(cat "$STATUS")" fi + rm "$STATUS" } rewritesourceslist() { @@ -870,9 +870,7 @@ changetowebserver() { fi if test -x ${APTWEBSERVERBINDIR}/aptwebserver; then cd aptarchive - local LOG="$(mktemp)" - addtrap "rm $LOG;" - if ! aptwebserver -o aptwebserver::fork=1 "$@" >$LOG 2>&1 ; then + if ! aptwebserver -o aptwebserver::fork=1 "$@" >webserver.log 2>&1 ; then cat $LOG false fi @@ -991,8 +989,7 @@ testempty() { } testequal() { - local COMPAREFILE=$(mktemp) - addtrap "rm $COMPAREFILE;" + local COMPAREFILE="${TMPWORKINGDIRECTORY}/rootdir/tmp/testequal.comparefile" echo "$1" > $COMPAREFILE shift msgtest "Test for equality of" "$*" @@ -1000,10 +997,9 @@ testequal() { } testequalor2() { - local COMPAREFILE1=$(mktemp) - local COMPAREFILE2=$(mktemp) - local COMPAREAGAINST=$(mktemp) - addtrap "rm $COMPAREFILE1 $COMPAREFILE2 $COMPAREAGAINST;" + local COMPAREFILE1="${TMPWORKINGDIRECTORY}/rootdir/tmp/testequalor2.comparefile1" + local COMPAREFILE2="${TMPWORKINGDIRECTORY}/rootdir/tmp/testequalor2.comparefile2" + local COMPAREAGAINST="${TMPWORKINGDIRECTORY}/rootdir/tmp/testequalor2.compareagainst" echo "$1" > $COMPAREFILE1 echo "$2" > $COMPAREFILE2 shift 2 @@ -1029,8 +1025,7 @@ N: Can't select versions from package '$1' as it is purely virtual" msgtest "Test for virtual packages" "apt-cache show $PACKAGE" VIRTUAL="${VIRTUAL} N: No packages found" - local COMPAREFILE=$(mktemp) - addtrap "rm $COMPAREFILE;" + local COMPAREFILE="${TMPWORKINGDIRECTORY}/rootdir/tmp/testshowvirtual.comparefile" local ARCH="$(getarchitecture 'native')" echo "$VIRTUAL" | sed -e "s/:$ARCH//" -e 's/:all//' > $COMPAREFILE aptcache show -q=0 $PACKAGE 2>&1 | checkdiff $COMPAREFILE - && msgpass || msgfail @@ -1073,8 +1068,7 @@ testdpkgnotinstalled() { } testmarkedauto() { - local COMPAREFILE=$(mktemp) - addtrap "rm $COMPAREFILE;" + local COMPAREFILE="${TMPWORKINGDIRECTORY}/rootdir/tmp/testmarkedauto.comparefile" if [ -n "$1" ]; then msgtest 'Test for correctly marked as auto-installed' "$*" while [ -n "$1" ]; do echo "$1"; shift; done | sort > $COMPAREFILE @@ -1091,8 +1085,7 @@ testsuccess() { else msgtest 'Test for successful execution of' "$*" fi - local OUTPUT=$(mktemp) - addtrap "rm $OUTPUT;" + local OUTPUT="${TMPWORKINGDIRECTORY}/rootdir/tmp/testsuccess.output" if $@ >${OUTPUT} 2>&1; then msgpass else @@ -1108,8 +1101,7 @@ testfailure() { else msgtest 'Test for failure in execution of' "$*" fi - local OUTPUT=$(mktemp) - addtrap "rm $OUTPUT;" + local OUTPUT="${TMPWORKINGDIRECTORY}/rootdir/tmp/testfailure.output" if $@ >${OUTPUT} 2>&1; then echo cat $OUTPUT -- cgit v1.2.3-70-g09d2 From eb9dee9602941af8a62f619817f1956ce7363074 Mon Sep 17 00:00:00 2001 From: David Kalnischkies Date: Fri, 17 Jan 2014 19:37:45 +0100 Subject: ensure the right permissions as dpkg-deb ensists otherwise you get with pickier umasks errors like: dpkg-deb: error: control directory has bad permissions 700 (must be >=0755 and <=0775) so we just force a 755 for the control directory and dpkg is happy. Git-Dch: Ignore --- test/integration/framework | 2 ++ 1 file changed, 2 insertions(+) (limited to 'test/integration') diff --git a/test/integration/framework b/test/integration/framework index bbe77dcf8..15c51e6ef 100644 --- a/test/integration/framework +++ b/test/integration/framework @@ -432,6 +432,8 @@ Package: $NAME" >> ${BUILDDIR}/debian/control (cd ${BUILDDIR}; dpkg-gencontrol -DArchitecture=$arch) (cd ${BUILDDIR}/debian/tmp; md5sum $(find usr/ -type f) > DEBIAN/md5sums) local LOG="${BUILDDIR}/../${NAME}_${VERSION}_${arch}.dpkg-deb.log" + # ensure the right permissions as dpkg-deb ensists + chmod 755 ${BUILDDIR}/debian/tmp/DEBIAN if ! dpkg-deb --build ${BUILDDIR}/debian/tmp ${BUILDDIR}/.. >$LOG 2>&1; then cat $LOG false -- cgit v1.2.3-70-g09d2 From 866e9fadf892368fcb50e6a192bcdd350cfe8e5c Mon Sep 17 00:00:00 2001 From: Michael Vogt Date: Fri, 17 Jan 2014 20:41:55 +0100 Subject: implement suggestion by donkult (thanks!) --- apt-pkg/sourcelist.cc | 4 ++-- doc/sources.list.5.xml | 4 ++-- test/integration/test-apt-sources-deb822 | 2 +- test/libapt/sourcelist_test.cc | 4 ++-- 4 files changed, 7 insertions(+), 7 deletions(-) (limited to 'test/integration') diff --git a/apt-pkg/sourcelist.cc b/apt-pkg/sourcelist.cc index 09d8287a0..51b766095 100644 --- a/apt-pkg/sourcelist.cc +++ b/apt-pkg/sourcelist.cc @@ -78,7 +78,7 @@ bool pkgSourceList::Type::ParseStanza(vector &List, { map Options; - string URI = Tags.FindS("Uri"); + string URI = Tags.FindS("URI"); if (!FixupURI(URI)) { _error->Error(_("Malformed stanza %u in source list %s (URI parse)"),i,Fd.Name().c_str()); @@ -87,7 +87,7 @@ bool pkgSourceList::Type::ParseStanza(vector &List, // Define external/internal options const char* option_deb822[] = { - "Architectures", "Architectures-Add", "Architectures-Delete", "Trusted", + "Architectures", "Architectures-Add", "Architectures-Remove", "Trusted", }; const char* option_internal[] = { "arch", "arch+", "arch-", "trusted", diff --git a/doc/sources.list.5.xml b/doc/sources.list.5.xml index e770023d5..7a82bd4ce 100644 --- a/doc/sources.list.5.xml +++ b/doc/sources.list.5.xml @@ -84,13 +84,13 @@ Alternatively a rfc822 style format is also supported: Type: deb - Uri: http://example.com + URI: http://example.com Suite: stable Section: component1 component2 [option1]: [option1-value] Type: deb-src - Uri: http://example.com + URI: http://example.com Suite: stable Section: component1 component2 [option1]: [option1-value] diff --git a/test/integration/test-apt-sources-deb822 b/test/integration/test-apt-sources-deb822 index 67d119565..a055c8d5e 100755 --- a/test/integration/test-apt-sources-deb822 +++ b/test/integration/test-apt-sources-deb822 @@ -20,7 +20,7 @@ BASE="# some comment #Type: meep Type: deb -Uri: http://ftp.debian.org/debian +URI: http://ftp.debian.org/debian Suite: stable Section: main Comment: Some random string diff --git a/test/libapt/sourcelist_test.cc b/test/libapt/sourcelist_test.cc index 1d30bd85b..6a625770f 100644 --- a/test/libapt/sourcelist_test.cc +++ b/test/libapt/sourcelist_test.cc @@ -23,14 +23,14 @@ int main(int argc, char *argv[]) { const char contents[] = "" "Type: deb\n" - "Uri: http://ftp.debian.org/debian\n" + "URI: http://ftp.debian.org/debian\n" "Suite: stable\n" "Section: main\n" "Comment: Some random string\n" " that can be very long\n" "\n" "Type: deb\n" - "Uri: http://ftp.debian.org/debian\n" + "URI: http://ftp.debian.org/debian\n" "Suite: unstable\n" "Section: main non-free\n" ; -- cgit v1.2.3-70-g09d2 From 1290422a1074e59bf37241596d60e28afb76fb5c Mon Sep 17 00:00:00 2001 From: David Kalnischkies Date: Fri, 17 Jan 2014 22:43:42 +0100 Subject: get color/msglevel handling for tests in line MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Without a PTY attached do not use color, but use the same MSGLEVEL with or without a PTY. The level is better adjust via flags – especially as it is likely that without a PTY you want fullblown logs instead of the reduced display you get with -q otherwise. Git-Dch: Ignore --- test/integration/framework | 30 ++++++++++++++++++------------ test/integration/run-tests | 35 +++++++++++++++++++++++------------ 2 files changed, 41 insertions(+), 24 deletions(-) (limited to 'test/integration') diff --git a/test/integration/framework b/test/integration/framework index 15c51e6ef..3ea9f3774 100644 --- a/test/integration/framework +++ b/test/integration/framework @@ -3,18 +3,24 @@ EXIT_CODE=0 # we all like colorful messages -if expr match "$(readlink -f /proc/$$/fd/1)" '/dev/pts/[0-9]\+' > /dev/null && \ - expr match "$(readlink -f /proc/$$/fd/2)" '/dev/pts/[0-9]\+' > /dev/null; then - CERROR="" # red - CWARNING="" # yellow - CMSG="" # green - CINFO="" # light blue - CDEBUG="" # blue - CNORMAL="" # default system console color - CDONE="" # green - CPASS="" # green - CFAIL="" # red - CCMD="" # pink +if [ "$MSGCOLOR" != 'NO' ]; then + if ! expr match "$(readlink -f /proc/$$/fd/1)" '/dev/pts/[0-9]\+' > /dev/null; then + export MSGCOLOR='NO' + fi +fi + + +if [ "$MSGCOLOR" != 'NO' ]; then + CERROR="\033[1;31m" # red + CWARNING="\033[1;33m" # yellow + CMSG="\033[1;32m" # green + CINFO="\033[1;96m" # light blue + CDEBUG="\033[1;94m" # blue + CNORMAL="\033[0;39m" # default system console color + CDONE="\033[1;32m" # green + CPASS="\033[1;32m" # green + CFAIL="\033[1;31m" # red + CCMD="\033[1;35m" # pink fi msgdie() { echo "${CERROR}E: $1${CNORMAL}" >&2; exit 1; } diff --git a/test/integration/run-tests b/test/integration/run-tests index 881c1c56b..79d5d1a29 100755 --- a/test/integration/run-tests +++ b/test/integration/run-tests @@ -7,22 +7,33 @@ ALL=0 FAILED_TESTS="" DIR=$(readlink -f $(dirname $0)) -if [ "$1" = "-q" ]; then - export MSGLEVEL=2 -elif [ "$1" = "-v" ]; then - export MSGLEVEL=4 -fi +while [ -n "$1" ]; do + if [ "$1" = "-q" ]; then + export MSGLEVEL=2 + elif [ "$1" = "-v" ]; then + export MSGLEVEL=4 + elif [ "$1" = '--color=no' ]; then + export MSGCOLOR='NO' + else + echo >&2 "WARNING: Unknown parameter »$1« will be ignored" + fi + shift +done +export MSGLEVEL="${MSGLEVEL:-3}" -if expr match "$(readlink -f /proc/$$/fd/1)" '/dev/pts/[0-9]\+' > /dev/null; then +if [ "$MSGCOLOR" != 'NO' ]; then + if ! expr match "$(readlink -f /proc/$$/fd/1)" '/dev/pts/[0-9]\+' > /dev/null; then + export MSGCOLOR='NO' + fi +fi +if [ "$MSGCOLOR" != 'NO' ]; then CTEST='\033[1;32m' CHIGH='\033[1;35m' CRESET='\033[0m' -elif [ -z "${MSGLEVEL}" ]; then - export MSGLEVEL=2 -fi - -if [ -z "$MSGLEVEL" ]; then - MSGLEVEL=5 +else + CTEST='' + CHIGH='' + CRESET='' fi for testcase in $(run-parts --list $DIR | grep '/test-'); do -- cgit v1.2.3-70-g09d2 From 6c069a2247781754bcc8574687cb98b493c6ab8a Mon Sep 17 00:00:00 2001 From: Michael Vogt Date: Sat, 18 Jan 2014 20:51:03 +0100 Subject: rename "Suite/Section" to plural --- apt-pkg/sourcelist.cc | 4 ++-- doc/sources.list.5.xml | 10 +++++----- test/integration/test-apt-sources-deb822 | 6 +++--- test/libapt/sourcelist_test.cc | 4 ++-- 4 files changed, 12 insertions(+), 12 deletions(-) (limited to 'test/integration') diff --git a/apt-pkg/sourcelist.cc b/apt-pkg/sourcelist.cc index 51b766095..4e580ba04 100644 --- a/apt-pkg/sourcelist.cc +++ b/apt-pkg/sourcelist.cc @@ -97,9 +97,9 @@ bool pkgSourceList::Type::ParseStanza(vector &List, Options[option_internal[j]] = Tags.FindS(option_deb822[j]); // now create one item per suite/section - string Suite = Tags.FindS("Suite"); + string Suite = Tags.FindS("Suites"); Suite = SubstVar(Suite,"$(ARCH)",_config->Find("APT::Architecture")); - string const Section = Tags.FindS("Section"); + string const Section = Tags.FindS("Sections"); std::vector list_dist = StringSplit(Suite, " "); std::vector list_section = StringSplit(Section, " "); diff --git a/doc/sources.list.5.xml b/doc/sources.list.5.xml index 7a82bd4ce..87f4d5fc5 100644 --- a/doc/sources.list.5.xml +++ b/doc/sources.list.5.xml @@ -20,7 +20,7 @@ &apt-email; &apt-product; - 2012-06-09T00:00:00Z + 2014-01-18T00:00:00Z @@ -85,14 +85,14 @@ Type: deb URI: http://example.com - Suite: stable - Section: component1 component2 + Suites: stable + Sections: component1 component2 [option1]: [option1-value] Type: deb-src URI: http://example.com - Suite: stable - Section: component1 component2 + Suites: stable + Sections: component1 component2 [option1]: [option1-value] diff --git a/test/integration/test-apt-sources-deb822 b/test/integration/test-apt-sources-deb822 index a055c8d5e..c73b942d4 100755 --- a/test/integration/test-apt-sources-deb822 +++ b/test/integration/test-apt-sources-deb822 @@ -21,8 +21,8 @@ BASE="# some comment Type: deb URI: http://ftp.debian.org/debian -Suite: stable -Section: main +Suites: stable +Sections: main Comment: Some random string that can be very long" @@ -70,7 +70,7 @@ testequalwithmsg "Invalid sources.list file gives proper error" "E: Malformed li E: The list of sources could not be read." aptget update --print-uris echo "Type: deb -Suite: stable +Suites: stable " > $SOURCES testequalwithmsg "Invalid deb822 sources.list file gives proper error" "E: Malformed stanza 0 in source list $TMPWORKINGDIRECTORY/rootdir/etc/apt/sources.list (URI parse) diff --git a/test/libapt/sourcelist_test.cc b/test/libapt/sourcelist_test.cc index 6a625770f..ae5d11f66 100644 --- a/test/libapt/sourcelist_test.cc +++ b/test/libapt/sourcelist_test.cc @@ -24,8 +24,8 @@ int main(int argc, char *argv[]) const char contents[] = "" "Type: deb\n" "URI: http://ftp.debian.org/debian\n" - "Suite: stable\n" - "Section: main\n" + "Suites: stable\n" + "Sections: main\n" "Comment: Some random string\n" " that can be very long\n" "\n" -- cgit v1.2.3-70-g09d2 From e67b9a23d7646d2f1e21bf4039fa71cc66b628c5 Mon Sep 17 00:00:00 2001 From: Michael Vogt Date: Mon, 20 Jan 2014 07:43:17 +0100 Subject: add Description tag for deb822 sources --- doc/sources.list.5.xml | 4 ++++ test/integration/test-apt-sources-deb822 | 6 +++--- test/libapt/sourcelist_test.cc | 4 ++-- 3 files changed, 9 insertions(+), 5 deletions(-) (limited to 'test/integration') diff --git a/doc/sources.list.5.xml b/doc/sources.list.5.xml index 87f4d5fc5..b2b682292 100644 --- a/doc/sources.list.5.xml +++ b/doc/sources.list.5.xml @@ -87,6 +87,8 @@ URI: http://example.com Suites: stable Sections: component1 component2 + Description: short + long long long [option1]: [option1-value] Type: deb-src @@ -94,6 +96,8 @@ Suites: stable Sections: component1 component2 [option1]: [option1-value] + Description: short + long long long diff --git a/test/integration/test-apt-sources-deb822 b/test/integration/test-apt-sources-deb822 index c73b942d4..34708d2d1 100755 --- a/test/integration/test-apt-sources-deb822 +++ b/test/integration/test-apt-sources-deb822 @@ -23,12 +23,11 @@ Type: deb URI: http://ftp.debian.org/debian Suites: stable Sections: main -Comment: Some random string - that can be very long" +Description: summay + and the long part" # simple case echo "$BASE" > $SOURCES - testequalwithmsg "Simple deb822 sources.list works" "'http://ftp.debian.org/debian/dists/stable/main/binary-i386/Packages.bz2' ftp.debian.org_debian_dists_stable_main_binary-i386_Packages 0 : 'http://ftp.debian.org/debian/dists/stable/main/i18n/Translation-en.bz2' ftp.debian.org_debian_dists_stable_main_i18n_Translation-en 0 : 'http://ftp.debian.org/debian/dists/stable/InRelease' ftp.debian.org_debian_dists_stable_InRelease 0 " aptget update --print-uris @@ -75,3 +74,4 @@ Suites: stable testequalwithmsg "Invalid deb822 sources.list file gives proper error" "E: Malformed stanza 0 in source list $TMPWORKINGDIRECTORY/rootdir/etc/apt/sources.list (URI parse) E: The list of sources could not be read." aptget update --print-uris + diff --git a/test/libapt/sourcelist_test.cc b/test/libapt/sourcelist_test.cc index ae5d11f66..b9dd47207 100644 --- a/test/libapt/sourcelist_test.cc +++ b/test/libapt/sourcelist_test.cc @@ -26,8 +26,8 @@ int main(int argc, char *argv[]) "URI: http://ftp.debian.org/debian\n" "Suites: stable\n" "Sections: main\n" - "Comment: Some random string\n" - " that can be very long\n" + "Description: short\n" + " long description that can be very long\n" "\n" "Type: deb\n" "URI: http://ftp.debian.org/debian\n" -- cgit v1.2.3-70-g09d2 From 7dd62ea93413a73b4ec394b16ff4e0367d226395 Mon Sep 17 00:00:00 2001 From: Michael Vogt Date: Mon, 20 Jan 2014 07:59:11 +0100 Subject: add support for Enabled: no in deb822 sources.list --- apt-pkg/sourcelist.cc | 4 ++++ doc/sources.list.5.xml | 5 +++-- test/integration/test-apt-sources-deb822 | 4 ++++ 3 files changed, 11 insertions(+), 2 deletions(-) (limited to 'test/integration') diff --git a/apt-pkg/sourcelist.cc b/apt-pkg/sourcelist.cc index 4e580ba04..5d41fb00e 100644 --- a/apt-pkg/sourcelist.cc +++ b/apt-pkg/sourcelist.cc @@ -84,6 +84,10 @@ bool pkgSourceList::Type::ParseStanza(vector &List, _error->Error(_("Malformed stanza %u in source list %s (URI parse)"),i,Fd.Name().c_str()); return false; } + + string Enabled = Tags.FindS("Enabled"); + if (Enabled.size() > 0 && StringToBool(Enabled) == false) + return true; // Define external/internal options const char* option_deb822[] = { diff --git a/doc/sources.list.5.xml b/doc/sources.list.5.xml index b2b682292..a2f6e985e 100644 --- a/doc/sources.list.5.xml +++ b/doc/sources.list.5.xml @@ -85,7 +85,7 @@ Type: deb URI: http://example.com - Suites: stable + Suites: stable testing Sections: component1 component2 Description: short long long long @@ -95,9 +95,10 @@ URI: http://example.com Suites: stable Sections: component1 component2 - [option1]: [option1-value] + Enabled: no Description: short long long long + [option1]: [option1-value] diff --git a/test/integration/test-apt-sources-deb822 b/test/integration/test-apt-sources-deb822 index 34708d2d1..f461314e6 100755 --- a/test/integration/test-apt-sources-deb822 +++ b/test/integration/test-apt-sources-deb822 @@ -75,3 +75,7 @@ Suites: stable testequalwithmsg "Invalid deb822 sources.list file gives proper error" "E: Malformed stanza 0 in source list $TMPWORKINGDIRECTORY/rootdir/etc/apt/sources.list (URI parse) E: The list of sources could not be read." aptget update --print-uris +# with Enabled: false +echo "$BASE" > $SOURCES +echo "Enabled: no" >> $SOURCES +testempty aptget update --print-uris -- cgit v1.2.3-70-g09d2 From 75c10df1533ede97e05fef3d1e2fc6a22fc4db00 Mon Sep 17 00:00:00 2001 From: Michael Vogt Date: Mon, 20 Jan 2014 08:10:50 +0100 Subject: add support for multiple URIs in deb822 style sources.list --- apt-pkg/sourcelist.cc | 29 ++++++++++++++++++----------- doc/sources.list.5.xml | 4 ++-- test/integration/test-apt-sources-deb822 | 11 ++++++++++- test/libapt/sourcelist_test.cc | 4 ++-- 4 files changed, 32 insertions(+), 16 deletions(-) (limited to 'test/integration') diff --git a/apt-pkg/sourcelist.cc b/apt-pkg/sourcelist.cc index 5d41fb00e..339005149 100644 --- a/apt-pkg/sourcelist.cc +++ b/apt-pkg/sourcelist.cc @@ -78,13 +78,6 @@ bool pkgSourceList::Type::ParseStanza(vector &List, { map Options; - string URI = Tags.FindS("URI"); - if (!FixupURI(URI)) - { - _error->Error(_("Malformed stanza %u in source list %s (URI parse)"),i,Fd.Name().c_str()); - return false; - } - string Enabled = Tags.FindS("Enabled"); if (Enabled.size() > 0 && StringToBool(Enabled) == false) return true; @@ -104,20 +97,34 @@ bool pkgSourceList::Type::ParseStanza(vector &List, string Suite = Tags.FindS("Suites"); Suite = SubstVar(Suite,"$(ARCH)",_config->Find("APT::Architecture")); string const Section = Tags.FindS("Sections"); + string URIS = Tags.FindS("URIs"); + std::vector list_uris = StringSplit(URIS, " "); std::vector list_dist = StringSplit(Suite, " "); std::vector list_section = StringSplit(Section, " "); - for (std::vector::const_iterator I = list_dist.begin(); - I != list_dist.end(); I++) + + for (std::vector::const_iterator U = list_uris.begin(); + U != list_uris.end(); U++) { - for (std::vector::const_iterator J = list_section.begin(); - J != list_section.end(); J++) + std::string URI = (*U); + if (!FixupURI(URI)) + { + _error->Error(_("Malformed stanza %u in source list %s (URI parse)"),i,Fd.Name().c_str()); + return false; + } + + for (std::vector::const_iterator I = list_dist.begin(); + I != list_dist.end(); I++) + { + for (std::vector::const_iterator J = list_section.begin(); + J != list_section.end(); J++) { if (CreateItem(List, URI, (*I), (*J), Options) == false) { return false; } } + } } return true; } diff --git a/doc/sources.list.5.xml b/doc/sources.list.5.xml index a2f6e985e..5a421293e 100644 --- a/doc/sources.list.5.xml +++ b/doc/sources.list.5.xml @@ -84,7 +84,7 @@ Alternatively a rfc822 style format is also supported: Type: deb - URI: http://example.com + URIs: http://example.com Suites: stable testing Sections: component1 component2 Description: short @@ -92,7 +92,7 @@ [option1]: [option1-value] Type: deb-src - URI: http://example.com + URIs: http://example.com Suites: stable Sections: component1 component2 Enabled: no diff --git a/test/integration/test-apt-sources-deb822 b/test/integration/test-apt-sources-deb822 index f461314e6..5c91dd6f5 100755 --- a/test/integration/test-apt-sources-deb822 +++ b/test/integration/test-apt-sources-deb822 @@ -20,7 +20,7 @@ BASE="# some comment #Type: meep Type: deb -URI: http://ftp.debian.org/debian +URIs: http://ftp.debian.org/debian Suites: stable Sections: main Description: summay @@ -79,3 +79,12 @@ E: The list of sources could not be read." aptget update --print-uris echo "$BASE" > $SOURCES echo "Enabled: no" >> $SOURCES testempty aptget update --print-uris + +# multiple URIs +echo "$BASE" | sed -e 's#http://ftp.debian.org/debian#http://ftp.debian.org/debian http://ftp.de.debian.org/debian#' > $SOURCES +testequalwithmsg "Multiple URIs work" "'http://ftp.de.debian.org/debian/dists/stable/main/binary-i386/Packages.bz2' ftp.de.debian.org_debian_dists_stable_main_binary-i386_Packages 0 : +'http://ftp.de.debian.org/debian/dists/stable/main/i18n/Translation-en.bz2' ftp.de.debian.org_debian_dists_stable_main_i18n_Translation-en 0 : +'http://ftp.de.debian.org/debian/dists/stable/InRelease' ftp.de.debian.org_debian_dists_stable_InRelease 0 +'http://ftp.debian.org/debian/dists/stable/main/binary-i386/Packages.bz2' ftp.debian.org_debian_dists_stable_main_binary-i386_Packages 0 : +'http://ftp.debian.org/debian/dists/stable/main/i18n/Translation-en.bz2' ftp.debian.org_debian_dists_stable_main_i18n_Translation-en 0 : +'http://ftp.debian.org/debian/dists/stable/InRelease' ftp.debian.org_debian_dists_stable_InRelease 0 " aptget update --print-uris diff --git a/test/libapt/sourcelist_test.cc b/test/libapt/sourcelist_test.cc index b9dd47207..3597b3d58 100644 --- a/test/libapt/sourcelist_test.cc +++ b/test/libapt/sourcelist_test.cc @@ -23,14 +23,14 @@ int main(int argc, char *argv[]) { const char contents[] = "" "Type: deb\n" - "URI: http://ftp.debian.org/debian\n" + "URIs: http://ftp.debian.org/debian\n" "Suites: stable\n" "Sections: main\n" "Description: short\n" " long description that can be very long\n" "\n" "Type: deb\n" - "URI: http://ftp.debian.org/debian\n" + "URIs: http://ftp.debian.org/debian\n" "Suite: unstable\n" "Section: main non-free\n" ; -- cgit v1.2.3-70-g09d2 From 7f316a3feab95370f1dd28c08c58bc3c140bf0a0 Mon Sep 17 00:00:00 2001 From: Michael Vogt Date: Mon, 20 Jan 2014 08:17:43 +0100 Subject: add support for multipl types in one line --- apt-pkg/sourcelist.cc | 25 +++++++++++++++---------- doc/sources.list.5.xml | 8 ++++---- test/integration/test-apt-sources-deb822 | 13 ++++++++++--- test/libapt/sourcelist_test.cc | 8 ++++---- 4 files changed, 33 insertions(+), 21 deletions(-) (limited to 'test/integration') diff --git a/apt-pkg/sourcelist.cc b/apt-pkg/sourcelist.cc index 339005149..bbc514f5b 100644 --- a/apt-pkg/sourcelist.cc +++ b/apt-pkg/sourcelist.cc @@ -387,21 +387,26 @@ int pkgSourceList::ParseFileDeb822(string File) // read step by step while (Sources.Step(Tags) == true) { - if(!Tags.Exists("Type")) + if(!Tags.Exists("Types")) continue; - string const type = Tags.FindS("Type"); - Type *Parse = Type::GetType(type.c_str()); - if (Parse == 0) + string const types = Tags.FindS("Types"); + std::vector list_types = StringSplit(types, " "); + for (std::vector::const_iterator I = list_types.begin(); + I != list_types.end(); I++) { - _error->Error(_("Type '%s' is not known on stanza %u in source list %s"),type.c_str(),i,Fd.Name().c_str()); - return -1; - } + Type *Parse = Type::GetType((*I).c_str()); + if (Parse == 0) + { + _error->Error(_("Type '%s' is not known on stanza %u in source list %s"), (*I).c_str(),i,Fd.Name().c_str()); + return -1; + } - if (!Parse->ParseStanza(SrcList, Tags, i, Fd)) - return -1; + if (!Parse->ParseStanza(SrcList, Tags, i, Fd)) + return -1; - i++; + i++; + } } // we are done, return the number of stanzas read diff --git a/doc/sources.list.5.xml b/doc/sources.list.5.xml index 5a421293e..4d0c4d502 100644 --- a/doc/sources.list.5.xml +++ b/doc/sources.list.5.xml @@ -83,7 +83,7 @@ Alternatively a rfc822 style format is also supported: - Type: deb + Types: deb deb-src URIs: http://example.com Suites: stable testing Sections: component1 component2 @@ -91,9 +91,9 @@ long long long [option1]: [option1-value] - Type: deb-src - URIs: http://example.com - Suites: stable + Types: deb + URIs: http://another.example.com + Suites: experimental Sections: component1 component2 Enabled: no Description: short diff --git a/test/integration/test-apt-sources-deb822 b/test/integration/test-apt-sources-deb822 index 5c91dd6f5..e74fc4cb9 100755 --- a/test/integration/test-apt-sources-deb822 +++ b/test/integration/test-apt-sources-deb822 @@ -17,9 +17,9 @@ testequalwithmsg "Old style sources.list works" "'http://ftp.debian.org/debian/d BASE="# some comment # that contains a : as well -#Type: meep +#Types: meep -Type: deb +Types: deb URIs: http://ftp.debian.org/debian Suites: stable Sections: main @@ -68,7 +68,7 @@ echo "deb http://ftp.debian.org" > $SOURCES testequalwithmsg "Invalid sources.list file gives proper error" "E: Malformed line 1 in source list $TMPWORKINGDIRECTORY/rootdir/etc/apt/sources.list (dist) E: The list of sources could not be read." aptget update --print-uris -echo "Type: deb +echo "Types: deb Suites: stable " > $SOURCES @@ -88,3 +88,10 @@ testequalwithmsg "Multiple URIs work" "'http://ftp.de.debian.org/debian/dists/st 'http://ftp.debian.org/debian/dists/stable/main/binary-i386/Packages.bz2' ftp.debian.org_debian_dists_stable_main_binary-i386_Packages 0 : 'http://ftp.debian.org/debian/dists/stable/main/i18n/Translation-en.bz2' ftp.debian.org_debian_dists_stable_main_i18n_Translation-en 0 : 'http://ftp.debian.org/debian/dists/stable/InRelease' ftp.debian.org_debian_dists_stable_InRelease 0 " aptget update --print-uris + +# multiple Type in one field +echo "$BASE" | sed -e 's#Types: deb#Types: deb deb-src#' > $SOURCES +testequalwithmsg "Multiple Types work" "'http://ftp.debian.org/debian/dists/stable/main/source/Sources.bz2' ftp.debian.org_debian_dists_stable_main_source_Sources 0 : +'http://ftp.debian.org/debian/dists/stable/main/binary-i386/Packages.bz2' ftp.debian.org_debian_dists_stable_main_binary-i386_Packages 0 : +'http://ftp.debian.org/debian/dists/stable/main/i18n/Translation-en.bz2' ftp.debian.org_debian_dists_stable_main_i18n_Translation-en 0 : +'http://ftp.debian.org/debian/dists/stable/InRelease' ftp.debian.org_debian_dists_stable_InRelease 0 " aptget update --print-uris diff --git a/test/libapt/sourcelist_test.cc b/test/libapt/sourcelist_test.cc index 3597b3d58..6ab30ba67 100644 --- a/test/libapt/sourcelist_test.cc +++ b/test/libapt/sourcelist_test.cc @@ -22,17 +22,17 @@ void remove_tmpfile(void) int main(int argc, char *argv[]) { const char contents[] = "" - "Type: deb\n" + "Types: deb\n" "URIs: http://ftp.debian.org/debian\n" "Suites: stable\n" "Sections: main\n" "Description: short\n" " long description that can be very long\n" "\n" - "Type: deb\n" + "Types: deb\n" "URIs: http://ftp.debian.org/debian\n" - "Suite: unstable\n" - "Section: main non-free\n" + "Suites: unstable\n" + "Sections: main non-free\n" ; FileFd fd; -- cgit v1.2.3-70-g09d2 From 1bef0dd58a281ca2f2900a48459d2c87b4ba8bba Mon Sep 17 00:00:00 2001 From: Michael Vogt Date: Wed, 22 Jan 2014 08:25:02 +0100 Subject: add integration test for apt search --- apt-private/private-search.cc | 2 +- test/integration/test-apt-binary | 47 ------------------------------------ test/integration/test-apt-cli-list | 47 ++++++++++++++++++++++++++++++++++++ test/integration/test-apt-cli-search | 45 ++++++++++++++++++++++++++++++++++ 4 files changed, 93 insertions(+), 48 deletions(-) delete mode 100755 test/integration/test-apt-binary create mode 100755 test/integration/test-apt-cli-list create mode 100755 test/integration/test-apt-cli-search (limited to 'test/integration') diff --git a/apt-private/private-search.cc b/apt-private/private-search.cc index ff4140fa7..9d7f36138 100644 --- a/apt-private/private-search.cc +++ b/apt-private/private-search.cc @@ -53,7 +53,7 @@ bool FullTextSearch(CommandLine &CmdL) /*{{{*/ std::map::const_iterator K; LocalitySortedVersionSet bag; - OpTextProgress progress; + OpTextProgress progress(*_config); progress.OverallProgress(0, 100, 50, _("Sorting")); GetLocalitySortedVersionSet(CacheFile, bag, progress); LocalitySortedVersionSet::iterator V = bag.begin(); diff --git a/test/integration/test-apt-binary b/test/integration/test-apt-binary deleted file mode 100755 index 8d5df9051..000000000 --- a/test/integration/test-apt-binary +++ /dev/null @@ -1,47 +0,0 @@ -#!/bin/sh -set -e - -TESTDIR=$(readlink -f $(dirname $0)) -. $TESTDIR/framework - -setupenvironment -configarchitecture "i386" - -insertpackage 'unstable' 'foo' 'all' '1.0' -insertinstalledpackage 'bar' 'i386' '1.0' - -insertinstalledpackage 'foobar' 'i386' '1.0' -insertpackage 'unstable' 'foobar' 'i386' '2.0' - -setupaptarchive - -APTARCHIVE=$(readlink -f ./aptarchive) - -testequal "Listing... -bar/now 1.0 [installed,local] i386 -foo/unstable 1.0 all -foobar/unstable 2.0 [upgradable from: 1.0] i386" apt list - -testequal "Listing... -foo/unstable 1.0 all -foobar/unstable 2.0 [upgradable from: 1.0] i386" apt list "foo*" - -testequal "Listing... -foobar/unstable 2.0 [upgradable from: 1.0] i386" apt list --upgradable - -# FIXME: hm, hm - does it make sense to have this different? shouldn't -# we use "installed,upgradable" consitently? -testequal "Listing... -bar/now 1.0 [installed,local] i386 -foobar/now 1.0 [installed,upgradable to: 2.0] i386" apt list --installed - -testequal "Listing... -foobar/unstable 2.0 [upgradable from: 1.0] i386 -foobar/now 1.0 [installed,upgradable to: 2.0] i386 -" apt list foobar --all-versions - -testequal "Listing... -bar/now 1.0 [installed,local] i386 - an autogenerated dummy bar=1.0/installed -" apt list bar --verbose - diff --git a/test/integration/test-apt-cli-list b/test/integration/test-apt-cli-list new file mode 100755 index 000000000..8d5df9051 --- /dev/null +++ b/test/integration/test-apt-cli-list @@ -0,0 +1,47 @@ +#!/bin/sh +set -e + +TESTDIR=$(readlink -f $(dirname $0)) +. $TESTDIR/framework + +setupenvironment +configarchitecture "i386" + +insertpackage 'unstable' 'foo' 'all' '1.0' +insertinstalledpackage 'bar' 'i386' '1.0' + +insertinstalledpackage 'foobar' 'i386' '1.0' +insertpackage 'unstable' 'foobar' 'i386' '2.0' + +setupaptarchive + +APTARCHIVE=$(readlink -f ./aptarchive) + +testequal "Listing... +bar/now 1.0 [installed,local] i386 +foo/unstable 1.0 all +foobar/unstable 2.0 [upgradable from: 1.0] i386" apt list + +testequal "Listing... +foo/unstable 1.0 all +foobar/unstable 2.0 [upgradable from: 1.0] i386" apt list "foo*" + +testequal "Listing... +foobar/unstable 2.0 [upgradable from: 1.0] i386" apt list --upgradable + +# FIXME: hm, hm - does it make sense to have this different? shouldn't +# we use "installed,upgradable" consitently? +testequal "Listing... +bar/now 1.0 [installed,local] i386 +foobar/now 1.0 [installed,upgradable to: 2.0] i386" apt list --installed + +testequal "Listing... +foobar/unstable 2.0 [upgradable from: 1.0] i386 +foobar/now 1.0 [installed,upgradable to: 2.0] i386 +" apt list foobar --all-versions + +testequal "Listing... +bar/now 1.0 [installed,local] i386 + an autogenerated dummy bar=1.0/installed +" apt list bar --verbose + diff --git a/test/integration/test-apt-cli-search b/test/integration/test-apt-cli-search new file mode 100755 index 000000000..aa6018bca --- /dev/null +++ b/test/integration/test-apt-cli-search @@ -0,0 +1,45 @@ +#!/bin/sh +set -e + +TESTDIR=$(readlink -f $(dirname $0)) +. $TESTDIR/framework + +setupenvironment +configarchitecture "i386" + +DESCR='Some description that has a unusual word xxyyzz and aabbcc' +DESCR2='Some other description with the unusual aabbcc only' +insertpackage 'unstable' 'foo' 'all' '1.0' '' '' "$DESCR" +insertpackage 'testing' 'bar' 'i386' '2.0' '' '' "$DESCR2" + +setupaptarchive + +APTARCHIVE=$(readlink -f ./aptarchive) + +# with OP progress +testequal "Sorting... +Full Text Search... +foo/unstable 1.0 all + $DESCR +" apt search xxyyzz + +# without op progress +testequal "foo/unstable 1.0 all + $DESCR +" apt search -qq xxyyzz + +# search with multiple words is a AND search +testequal "foo/unstable 1.0 all + $DESCR +" apt search -qq aabbcc xxyyzz + +# output is sorted and search word finds both package +testequal "bar/testing 2.0 i386 + $DESCR2 + +foo/unstable 1.0 all + $DESCR +" apt search -qq aabbcc + + + -- cgit v1.2.3-70-g09d2 From 6d73fe5be080e66a4f6ff2b250ed1957ae7ac063 Mon Sep 17 00:00:00 2001 From: Michael Vogt Date: Wed, 22 Jan 2014 16:41:00 +0100 Subject: add test for apt show --- cmdline/apt.cc | 3 ++- test/integration/test-apt-cli-search | 3 --- test/integration/test-apt-cli-show | 29 +++++++++++++++++++++++++++++ 3 files changed, 31 insertions(+), 4 deletions(-) create mode 100755 test/integration/test-apt-cli-show (limited to 'test/integration') diff --git a/cmdline/apt.cc b/cmdline/apt.cc index 61d5d938a..07ade6b7c 100644 --- a/cmdline/apt.cc +++ b/cmdline/apt.cc @@ -103,10 +103,11 @@ int main(int argc, const char *argv[]) /*{{{*/ CommandLine::Dispatch Cmds[] = {{"list",&List}, {"search", &FullTextSearch}, {"show", &APT::Cmd::ShowPackage}, - // needs root + // package stuff {"install",&DoInstall}, {"remove", &DoInstall}, {"purge", &DoInstall}, + // system wide stuff {"update",&DoUpdate}, {"upgrade",&DoAptUpgrade}, // misc diff --git a/test/integration/test-apt-cli-search b/test/integration/test-apt-cli-search index aa6018bca..979aff880 100755 --- a/test/integration/test-apt-cli-search +++ b/test/integration/test-apt-cli-search @@ -40,6 +40,3 @@ testequal "bar/testing 2.0 i386 foo/unstable 1.0 all $DESCR " apt search -qq aabbcc - - - diff --git a/test/integration/test-apt-cli-show b/test/integration/test-apt-cli-show new file mode 100755 index 000000000..0ab3d2e56 --- /dev/null +++ b/test/integration/test-apt-cli-show @@ -0,0 +1,29 @@ +#!/bin/sh +set -e + +TESTDIR=$(readlink -f $(dirname $0)) +. $TESTDIR/framework + +setupenvironment +configarchitecture "i386" + +DESCR='Some description + That has multiple lines' +insertpackage 'unstable' 'foo' 'all' '1.0' '' '' "$DESCR" + +setupaptarchive + +APTARCHIVE=$(readlink -f ./aptarchive) + +# note that we do not display Description-md5 with the "apt" cmd +testequal "Package: foo +Priority: optional +Section: other +Installed-Size: 42 +Maintainer: Joe Sixpack +Architecture: all +Version: 1.0 +Filename: pool/main/foo/foo_1.0_all.deb +Description: Some description + That has multiple lines +" apt show foo -- cgit v1.2.3-70-g09d2 From 9e51c0b6a3a1a36336820eda11bcfd5534d9d80c Mon Sep 17 00:00:00 2001 From: Michael Vogt Date: Wed, 22 Jan 2014 17:18:26 +0100 Subject: "apt show" show user friendly size info The size/installed-size is displayed via SizeToStr() and Size is rewriten to "Download-Size" to make clear what size is refered to here. --- apt-pkg/tagfile.cc | 84 +++++++++++++++++++------------------- apt-private/private-show.cc | 28 +++++++++---- test/integration/test-apt-cli-show | 3 +- 3 files changed, 65 insertions(+), 50 deletions(-) (limited to 'test/integration') diff --git a/apt-pkg/tagfile.cc b/apt-pkg/tagfile.cc index bef3c76ba..b92b2c15a 100644 --- a/apt-pkg/tagfile.cc +++ b/apt-pkg/tagfile.cc @@ -567,52 +567,54 @@ bool TFRewrite(FILE *Output,pkgTagSection const &Tags,const char *Order[], } // Write all all of the tags, in order. - for (unsigned int I = 0; Order[I] != 0; I++) + if (Order != NULL) { - bool Rewritten = false; - - // See if this is a field that needs to be rewritten - for (unsigned int J = 0; Rewrite != 0 && Rewrite[J].Tag != 0; J++) + for (unsigned int I = 0; Order[I] != 0; I++) { - if (strcasecmp(Rewrite[J].Tag,Order[I]) == 0) - { - Visited[J] |= 2; - if (Rewrite[J].Rewrite != 0 && Rewrite[J].Rewrite[0] != 0) - { - if (isspace(Rewrite[J].Rewrite[0])) - fprintf(Output,"%s:%s\n",Rewrite[J].NewTag,Rewrite[J].Rewrite); - else - fprintf(Output,"%s: %s\n",Rewrite[J].NewTag,Rewrite[J].Rewrite); - } - - Rewritten = true; - break; - } - } + bool Rewritten = false; + + // See if this is a field that needs to be rewritten + for (unsigned int J = 0; Rewrite != 0 && Rewrite[J].Tag != 0; J++) + { + if (strcasecmp(Rewrite[J].Tag,Order[I]) == 0) + { + Visited[J] |= 2; + if (Rewrite[J].Rewrite != 0 && Rewrite[J].Rewrite[0] != 0) + { + if (isspace(Rewrite[J].Rewrite[0])) + fprintf(Output,"%s:%s\n",Rewrite[J].NewTag,Rewrite[J].Rewrite); + else + fprintf(Output,"%s: %s\n",Rewrite[J].NewTag,Rewrite[J].Rewrite); + } + Rewritten = true; + break; + } + } - // See if it is in the fragment - unsigned Pos; - if (Tags.Find(Order[I],Pos) == false) - continue; - Visited[Pos] |= 1; - - if (Rewritten == true) - continue; + // See if it is in the fragment + unsigned Pos; + if (Tags.Find(Order[I],Pos) == false) + continue; + Visited[Pos] |= 1; + + if (Rewritten == true) + continue; - /* Write out this element, taking a moment to rewrite the tag - in case of changes of case. */ - const char *Start; - const char *Stop; - Tags.Get(Start,Stop,Pos); + /* Write out this element, taking a moment to rewrite the tag + in case of changes of case. */ + const char *Start; + const char *Stop; + Tags.Get(Start,Stop,Pos); - if (fputs(Order[I],Output) < 0) - return _error->Errno("fputs","IO Error to output"); - Start += strlen(Order[I]); - if (fwrite(Start,Stop - Start,1,Output) != 1) - return _error->Errno("fwrite","IO Error to output"); - if (Stop[-1] != '\n') - fprintf(Output,"\n"); - } + if (fputs(Order[I],Output) < 0) + return _error->Errno("fputs","IO Error to output"); + Start += strlen(Order[I]); + if (fwrite(Start,Stop - Start,1,Output) != 1) + return _error->Errno("fwrite","IO Error to output"); + if (Stop[-1] != '\n') + fprintf(Output,"\n"); + } + } // Now write all the old tags that were missed. for (unsigned int I = 0; I != Tags.Count(); I++) diff --git a/apt-private/private-show.cc b/apt-private/private-show.cc index 0aa42ecce..32a49cc5c 100644 --- a/apt-private/private-show.cc +++ b/apt-private/private-show.cc @@ -57,20 +57,32 @@ bool DisplayRecord(pkgCacheFile &CacheFile, pkgCache::VerIterator V, return false; pkgTagSection Tags; pkgTagFile TagF(&PkgF); - + + if (TagF.Jump(Tags, V.FileList()->Offset) == false) + return _error->Error("Internal Error, Unable to parse a package record"); + + // make size nice + std::string installed_size; + if (Tags.FindI("Installed-Size") > 0) + installed_size = SizeToStr(Tags.FindI("Installed-Size")*1024); + else + installed_size = _("unknown"); + std::string package_size; + if (Tags.FindI("Size") > 0) + package_size = SizeToStr(Tags.FindI("Size")); + else + package_size = _("unknown"); + TFRewriteData RW[] = { {"Conffiles",0}, {"Description",0}, {"Description-md5",0}, + {"Installed-Size", installed_size.c_str(), 0}, + {"Size", package_size.c_str(), "Download-Size"}, {} }; - const char *Zero = 0; - if (TagF.Jump(Tags, V.FileList()->Offset) == false || - TFRewrite(stdout,Tags,&Zero,RW) == false) - { - _error->Error("Internal Error, Unable to parse a package record"); - return false; - } + if(TFRewrite(stdout, Tags, NULL, RW) == false) + return _error->Error("Internal Error, Unable to parse a package record"); // write the description pkgRecords Recs(*Cache); diff --git a/test/integration/test-apt-cli-show b/test/integration/test-apt-cli-show index 0ab3d2e56..bbb2de7ef 100755 --- a/test/integration/test-apt-cli-show +++ b/test/integration/test-apt-cli-show @@ -19,11 +19,12 @@ APTARCHIVE=$(readlink -f ./aptarchive) testequal "Package: foo Priority: optional Section: other -Installed-Size: 42 +Installed-Size: 43.0 k Maintainer: Joe Sixpack Architecture: all Version: 1.0 Filename: pool/main/foo/foo_1.0_all.deb +Download-Size: unknown Description: Some description That has multiple lines " apt show foo -- cgit v1.2.3-70-g09d2 From 0c8b6001694bb0ddf9eb6bc4936151592e1a07fa Mon Sep 17 00:00:00 2001 From: Michael Vogt Date: Thu, 23 Jan 2014 08:12:02 +0100 Subject: include "Archive-Origin" in the apt show output --- apt-private/private-output.h | 6 +++++- apt-private/private-show.cc | 2 ++ test/integration/test-apt-cli-show | 1 + 3 files changed, 8 insertions(+), 1 deletion(-) (limited to 'test/integration') diff --git a/apt-private/private-output.h b/apt-private/private-output.h index c3c76bb92..ba04ee221 100644 --- a/apt-private/private-output.h +++ b/apt-private/private-output.h @@ -28,7 +28,7 @@ void ListSingleVersion(pkgCacheFile &CacheFile, pkgRecords &records, bool include_summary=true); - +// helper to describe global state bool ShowList(std::ostream &out, std::string Title, std::string List, std::string VersionsList); void ShowBroken(std::ostream &out,CacheFile &Cache,bool Now); @@ -43,6 +43,10 @@ bool ShowEssential(std::ostream &out,CacheFile &Cache); void Stats(std::ostream &out, pkgDepCache &Dep); +// helpers to display single package data +std::string +GetArchiveSuite(pkgCacheFile &CacheFile, pkgCache::VerIterator ver); + // prompting bool YnPrompt(bool Default=true); bool AnalPrompt(const char *Text); diff --git a/apt-private/private-show.cc b/apt-private/private-show.cc index 9a8386167..244347421 100644 --- a/apt-private/private-show.cc +++ b/apt-private/private-show.cc @@ -73,12 +73,14 @@ bool DisplayRecord(pkgCacheFile &CacheFile, pkgCache::VerIterator V, else package_size = _("unknown"); + std::string suite = GetArchiveSuite(CacheFile, V); TFRewriteData RW[] = { {"Conffiles",0}, {"Description",0}, {"Description-md5",0}, {"Installed-Size", installed_size.c_str(), 0}, {"Size", package_size.c_str(), "Download-Size"}, + {"Archive-Origin", suite.c_str(), 0}, {} }; if(TFRewrite(stdout, Tags, NULL, RW) == false) diff --git a/test/integration/test-apt-cli-show b/test/integration/test-apt-cli-show index bbb2de7ef..ba56e3260 100755 --- a/test/integration/test-apt-cli-show +++ b/test/integration/test-apt-cli-show @@ -25,6 +25,7 @@ Architecture: all Version: 1.0 Filename: pool/main/foo/foo_1.0_all.deb Download-Size: unknown +Archive-Origin: unstable Description: Some description That has multiple lines " apt show foo -- cgit v1.2.3-70-g09d2 From 59e81cec3e2277e367f14f113168421909c42035 Mon Sep 17 00:00:00 2001 From: Michael Vogt Date: Fri, 24 Jan 2014 20:33:02 +0100 Subject: add "apt full-upgrade" and tweak "apt upgrade" There is a new "apt full-upgrade" that performs a apt-get dist-upgrade. "apt dist-upgrade" is still supported as a alias. The "apt upgrade" code is changed so that it mirrors the behavior of "apt-get upgrade --with-new-pkgs" and also honors "apt uprade --no-new-pkgs". --- .gitignore | 1 + apt-private/private-cmndline.cc | 5 ----- apt-private/private-upgrade.cc | 9 +++++++++ apt-private/private-upgrade.h | 1 + cmdline/apt-get.cc | 8 -------- cmdline/apt.cc | 32 +++++++++++++++++--------------- test/integration/test-apt-cli-upgrade | 34 ++++++++++++++++++++++++++++++++++ 7 files changed, 62 insertions(+), 28 deletions(-) create mode 100755 test/integration/test-apt-cli-upgrade (limited to 'test/integration') diff --git a/.gitignore b/.gitignore index 321b15471..69a229c3e 100644 --- a/.gitignore +++ b/.gitignore @@ -1,3 +1,4 @@ +*~ # build artifacts /aclocal.m4 /autom4te.cache/ diff --git a/apt-private/private-cmndline.cc b/apt-private/private-cmndline.cc index cbb40d42e..d6d7bca64 100644 --- a/apt-private/private-cmndline.cc +++ b/apt-private/private-cmndline.cc @@ -230,11 +230,6 @@ bool addArgumentsAPT(std::vector &Args, char const * const Cm addArg('v', "verbose", "APT::Cmd::List-Include-Summary", 0); addArg('a', "all-versions", "APT::Cmd::All-Versions", 0); } - else if (CmdMatches("upgrade")) - { - // FIXME: find a better term - addArg(0,"dist","APT::Cmd::Dist-Upgrade", CommandLine::Boolean); - } else if (addArgumentsAPTGet(Args, Cmd) || addArgumentsAPTCache(Args, Cmd)) { // we have no (supported) command-name overlaps so far, so we call diff --git a/apt-private/private-upgrade.cc b/apt-private/private-upgrade.cc index e76b5d7fc..a97e6d25b 100644 --- a/apt-private/private-upgrade.cc +++ b/apt-private/private-upgrade.cc @@ -1,3 +1,4 @@ + // Includes /*{{{*/ #include #include @@ -39,6 +40,14 @@ bool DoDistUpgrade(CommandLine &CmdL) return UpgradeHelper(CmdL, 0); } /*}}}*/ +bool DoUpgrade(CommandLine &CmdL) /*{{{*/ +{ + if (_config->FindB("APT::Get::Upgrade-Allow-New", false) == true) + return DoUpgradeWithAllowNewPackages(CmdL); + else + return DoUpgradeNoNewPackages(CmdL); +} + /*}}}*/ // DoUpgradeNoNewPackages - Upgrade all packages /*{{{*/ // --------------------------------------------------------------------- /* Upgrade all packages without installing new packages or erasing old diff --git a/apt-private/private-upgrade.h b/apt-private/private-upgrade.h index 050d3a668..5efc66bf7 100644 --- a/apt-private/private-upgrade.h +++ b/apt-private/private-upgrade.h @@ -5,6 +5,7 @@ bool DoDistUpgrade(CommandLine &CmdL); +bool DoUpgrade(CommandLine &CmdL); bool DoUpgradeNoNewPackages(CommandLine &CmdL); bool DoUpgradeWithAllowNewPackages(CommandLine &CmdL); diff --git a/cmdline/apt-get.cc b/cmdline/apt-get.cc index 8a0772ce2..da7d28a1e 100644 --- a/cmdline/apt-get.cc +++ b/cmdline/apt-get.cc @@ -1677,14 +1677,6 @@ void SigWinch(int) if (ioctl(1, TIOCGWINSZ, &ws) != -1 && ws.ws_col >= 5) ScreenWidth = ws.ws_col - 1; #endif -} - /*}}}*/ -bool DoUpgrade(CommandLine &CmdL) /*{{{*/ -{ - if (_config->FindB("APT::Get::Upgrade-Allow-New", false) == true) - return DoUpgradeWithAllowNewPackages(CmdL); - else - return DoUpgradeNoNewPackages(CmdL); } /*}}}*/ int main(int argc,const char *argv[]) /*{{{*/ diff --git a/cmdline/apt.cc b/cmdline/apt.cc index 07ade6b7c..6fe25e3f3 100644 --- a/cmdline/apt.cc +++ b/cmdline/apt.cc @@ -81,7 +81,8 @@ bool ShowHelp(CommandLine &CmdL) " install - install packages\n" " remove - remove packages\n" "\n" - " upgrade - upgrade the systems packages\n" + " upgrade - upgrade the system by installing/upgrading packages\n" + "full-upgrade - upgrade the system by removing/installing/upgrading packages\n" "\n" " edit-sources - edit the source information file\n" ); @@ -89,29 +90,29 @@ bool ShowHelp(CommandLine &CmdL) return true; } -// figure out what kind of upgrade the user wants -bool DoAptUpgrade(CommandLine &CmdL) -{ - if (_config->FindB("Apt::Cmd::Dist-Upgrade")) - return DoDistUpgrade(CmdL); - else - return DoUpgradeWithAllowNewPackages(CmdL); -} - int main(int argc, const char *argv[]) /*{{{*/ { - CommandLine::Dispatch Cmds[] = {{"list",&List}, + CommandLine::Dispatch Cmds[] = { + // query + {"list",&List}, {"search", &FullTextSearch}, {"show", &APT::Cmd::ShowPackage}, + // package stuff {"install",&DoInstall}, {"remove", &DoInstall}, {"purge", &DoInstall}, + // system wide stuff {"update",&DoUpdate}, - {"upgrade",&DoAptUpgrade}, + {"upgrade",&DoUpgrade}, + {"full-upgrade",&DoDistUpgrade}, + // for compat with muscle memory + {"dist-upgrade",&DoDistUpgrade}, + // misc {"edit-sources",&EditSources}, + // helper {"moo",&DoMoo}, {"help",&ShowHelp}, @@ -131,9 +132,10 @@ int main(int argc, const char *argv[]) /*{{{*/ return 100; } - // FIXME: move into a new libprivate/private-install.cc:Install() - _config->Set("DPkgPM::Progress", "1"); - _config->Set("Apt::Color", "1"); + // some different defaults + _config->CndSet("DPkgPM::Progress", "1"); + _config->CndSet("Apt::Color", "1"); + _config->CndSet("APT::Get::Upgrade-Allow-New", true); // Parse the command line and initialize the package library CommandLine CmdL(Args.data(), _config); diff --git a/test/integration/test-apt-cli-upgrade b/test/integration/test-apt-cli-upgrade new file mode 100755 index 000000000..163a55576 --- /dev/null +++ b/test/integration/test-apt-cli-upgrade @@ -0,0 +1,34 @@ +#!/bin/sh +set -e + +TESTDIR=$(readlink -f $(dirname $0)) +. $TESTDIR/framework + +setupenvironment +configarchitecture "i386" + +insertpackage 'unstable' 'foo' 'all' '2.0' 'Depends: foo-new-dependency' +insertpackage 'unstable' 'foo-new-dependency' 'all' '2.0' +insertinstalledpackage 'foo' 'all' '1.0' + +setupaptarchive + +APTARCHIVE=$(readlink -f ./aptarchive) + +# default is to allow new dependencies +testequal "Calculating upgrade... Done +The following NEW packages will be installed: + foo-new-dependency +The following packages will be upgraded: + foo +1 upgraded, 1 newly installed, 0 to remove and 0 not upgraded. +Inst foo-new-dependency (2.0 unstable [all]) +Inst foo [1.0] (2.0 unstable [all]) +Conf foo-new-dependency (2.0 unstable [all]) +Conf foo (2.0 unstable [all])" apt upgrade -qq -s + +# ensure +testequal "Calculating upgrade... Done +The following packages have been kept back: + foo +0 upgraded, 0 newly installed, 0 to remove and 1 not upgraded." apt upgrade -qq -s --no-new-pkgs -- cgit v1.2.3-70-g09d2 From 85d7c0eb60efd0de13ad331676b6227f52bed6c6 Mon Sep 17 00:00:00 2001 From: Michael Vogt Date: Fri, 24 Jan 2014 21:03:49 +0100 Subject: Show "Manual-Installed: {yes|no}" in apt show --- apt-private/private-show.cc | 12 ++++++++++++ test/integration/test-apt-cli-show | 5 ++++- 2 files changed, 16 insertions(+), 1 deletion(-) (limited to 'test/integration') diff --git a/apt-private/private-show.cc b/apt-private/private-show.cc index 244347421..cee132843 100644 --- a/apt-private/private-show.cc +++ b/apt-private/private-show.cc @@ -37,6 +37,9 @@ bool DisplayRecord(pkgCacheFile &CacheFile, pkgCache::VerIterator V, pkgCache *Cache = CacheFile.GetPkgCache(); if (unlikely(Cache == NULL)) return false; + pkgDepCache *depCache = CacheFile.GetDepCache(); + if (unlikely(depCache == NULL)) + return false; // Find an appropriate file pkgCache::VerFileIterator Vf = V.FileList(); @@ -73,6 +76,13 @@ bool DisplayRecord(pkgCacheFile &CacheFile, pkgCache::VerIterator V, else package_size = _("unknown"); + pkgDepCache::StateCache &state = (*depCache)[V.ParentPkg()]; + bool is_installed = V.ParentPkg().CurrentVer() == V; + const char *manual_installed; + if (is_installed) + manual_installed = !(state.Flags & pkgCache::Flag::Auto) ? "yes" : "no"; + else + manual_installed = 0; std::string suite = GetArchiveSuite(CacheFile, V); TFRewriteData RW[] = { {"Conffiles",0}, @@ -81,8 +91,10 @@ bool DisplayRecord(pkgCacheFile &CacheFile, pkgCache::VerIterator V, {"Installed-Size", installed_size.c_str(), 0}, {"Size", package_size.c_str(), "Download-Size"}, {"Archive-Origin", suite.c_str(), 0}, + {"Manual-Installed", manual_installed, 0}, {} }; + if(TFRewrite(stdout, Tags, NULL, RW) == false) return _error->Error("Internal Error, Unable to parse a package record"); diff --git a/test/integration/test-apt-cli-show b/test/integration/test-apt-cli-show index ba56e3260..11a93f268 100755 --- a/test/integration/test-apt-cli-show +++ b/test/integration/test-apt-cli-show @@ -10,12 +10,14 @@ configarchitecture "i386" DESCR='Some description That has multiple lines' insertpackage 'unstable' 'foo' 'all' '1.0' '' '' "$DESCR" +insertinstalledpackage 'foo' 'all' '1.0' setupaptarchive APTARCHIVE=$(readlink -f ./aptarchive) # note that we do not display Description-md5 with the "apt" cmd +# and also show some additional fields that are calculated testequal "Package: foo Priority: optional Section: other @@ -25,7 +27,8 @@ Architecture: all Version: 1.0 Filename: pool/main/foo/foo_1.0_all.deb Download-Size: unknown -Archive-Origin: unstable +Archive-Origin: unstable,now +Manual-Installed: yes Description: Some description That has multiple lines " apt show foo -- cgit v1.2.3-70-g09d2 From 17622532ce19a1bcebfebdfc9ec20a7e3df9dbff Mon Sep 17 00:00:00 2001 From: Michael Vogt Date: Fri, 24 Jan 2014 22:20:28 +0100 Subject: hide more from apt show Hide the Hashes,Filename,Multi-Arch,Architecture by default from "apt show". The information is still available via apt-cache show. Also improve the output of the Size- --- apt-private/private-show.cc | 15 ++++++++++++--- test/integration/test-apt-cli-show | 8 +++----- 2 files changed, 15 insertions(+), 8 deletions(-) (limited to 'test/integration') diff --git a/apt-private/private-show.cc b/apt-private/private-show.cc index ba8b266ee..60d951316 100644 --- a/apt-private/private-show.cc +++ b/apt-private/private-show.cc @@ -76,12 +76,12 @@ bool DisplayRecord(pkgCacheFile &CacheFile, pkgCache::VerIterator V, // make size nice std::string installed_size; if (Tags.FindI("Installed-Size") > 0) - installed_size = SizeToStr(Tags.FindI("Installed-Size")*1024); + strprintf(installed_size, "%sB", SizeToStr(Tags.FindI("Installed-Size")*1024).c_str()); else installed_size = _("unknown"); std::string package_size; if (Tags.FindI("Size") > 0) - package_size = SizeToStr(Tags.FindI("Size")); + strprintf(package_size, "%sB", SizeToStr(Tags.FindI("Size")).c_str()); else package_size = _("unknown"); @@ -92,9 +92,18 @@ bool DisplayRecord(pkgCacheFile &CacheFile, pkgCache::VerIterator V, manual_installed = !(state.Flags & pkgCache::Flag::Auto) ? "yes" : "no"; else manual_installed = 0; + + // FIXME: add verbose that does not do the removal of the tags? TFRewriteData RW[] = { - // delete + // delete, apt-cache show has this info and most users do not care + {"MD5sum", 0}, + {"SHA1", 0}, + {"SHA256", 0}, + {"Filename", 0}, + {"Multi-Arch", 0}, + {"Architecture", 0}, {"Conffiles",0}, + // we use the translated description {"Description",0}, {"Description-md5",0}, // improve diff --git a/test/integration/test-apt-cli-show b/test/integration/test-apt-cli-show index 11a93f268..91cc9a3c0 100755 --- a/test/integration/test-apt-cli-show +++ b/test/integration/test-apt-cli-show @@ -21,14 +21,12 @@ APTARCHIVE=$(readlink -f ./aptarchive) testequal "Package: foo Priority: optional Section: other -Installed-Size: 43.0 k +Installed-Size: 43.0 kB Maintainer: Joe Sixpack -Architecture: all Version: 1.0 -Filename: pool/main/foo/foo_1.0_all.deb Download-Size: unknown -Archive-Origin: unstable,now -Manual-Installed: yes +APT-Manual-Installed: yes +APT-Sources: file:$APTARCHIVE/ unstable/main i386 Packages Description: Some description That has multiple lines " apt show foo -- cgit v1.2.3-70-g09d2 From 41e6bd080db8995bc7617569f0719bccc31e0da8 Mon Sep 17 00:00:00 2001 From: Michael Vogt Date: Sat, 25 Jan 2014 14:53:03 +0100 Subject: support " " in deb822 source options --- apt-pkg/sourcelist.cc | 8 +++++++- test/integration/test-apt-sources-deb822 | 2 +- 2 files changed, 8 insertions(+), 2 deletions(-) (limited to 'test/integration') diff --git a/apt-pkg/sourcelist.cc b/apt-pkg/sourcelist.cc index 4e580ba04..8462027c5 100644 --- a/apt-pkg/sourcelist.cc +++ b/apt-pkg/sourcelist.cc @@ -20,6 +20,7 @@ #include #include +#include #include /*}}}*/ @@ -94,7 +95,12 @@ bool pkgSourceList::Type::ParseStanza(vector &List, }; for (unsigned int j=0; j < sizeof(option_deb822)/sizeof(char*); j++) if (Tags.Exists(option_deb822[j])) - Options[option_internal[j]] = Tags.FindS(option_deb822[j]); + { + // for deb822 the " " is the delimiter, but the backend expects "," + std::string option = Tags.FindS(option_deb822[j]); + std::replace(option.begin(), option.end(), ' ', ','); + Options[option_internal[j]] = option; + } // now create one item per suite/section string Suite = Tags.FindS("Suites"); diff --git a/test/integration/test-apt-sources-deb822 b/test/integration/test-apt-sources-deb822 index 6e9a02417..723796018 100755 --- a/test/integration/test-apt-sources-deb822 +++ b/test/integration/test-apt-sources-deb822 @@ -66,7 +66,7 @@ testequal --nomsg "'http://ftp.debian.org/debian/dists/stable/main/binary-i386/P msgtest 'Test deb822' 'architecture option' echo "$BASE" > $SOURCES -echo "Architectures: amd64,armel" >> $SOURCES +echo "Architectures: amd64 armel" >> $SOURCES testequal --nomsg "'http://ftp.debian.org/debian/dists/stable/main/binary-amd64/Packages.bz2' ftp.debian.org_debian_dists_stable_main_binary-amd64_Packages 0 : 'http://ftp.debian.org/debian/dists/stable/main/binary-armel/Packages.bz2' ftp.debian.org_debian_dists_stable_main_binary-armel_Packages 0 : 'http://ftp.debian.org/debian/dists/stable/main/i18n/Translation-en.bz2' ftp.debian.org_debian_dists_stable_main_i18n_Translation-en 0 : -- cgit v1.2.3-70-g09d2 From a0db467c7eb0e63b8e74887403689e2b446dde7f Mon Sep 17 00:00:00 2001 From: David Kalnischkies Date: Sun, 26 Jan 2014 13:06:31 +0100 Subject: fixup merge issues introduced in 796673c Issues in doc/po/de.po (fixed by Chris already) and test/integration/framework Git-Dch: Ignore --- test/integration/framework | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) (limited to 'test/integration') diff --git a/test/integration/framework b/test/integration/framework index 5439244f7..5b9a58568 100644 --- a/test/integration/framework +++ b/test/integration/framework @@ -880,7 +880,8 @@ changetowebserver() { fi if test -x ${APTWEBSERVERBINDIR}/aptwebserver; then cd aptarchive - if ! aptwebserver -o aptwebserver::fork=1 "$@" >webserver.log 2>&1 ; then + local LOG="webserver.log" + if ! aptwebserver -o aptwebserver::fork=1 "$@" >$LOG 2>&1 ; then cat $LOG false fi @@ -1006,7 +1007,6 @@ testequal() { fi local COMPAREFILE="${TMPWORKINGDIRECTORY}/rootdir/tmp/testequal.comparefile" - addtrap "rm $COMPAREFILE;" echo "$1" > $COMPAREFILE shift -- cgit v1.2.3-70-g09d2 From bae81c1307e956aa8928c9d6a77830fb733cd61f Mon Sep 17 00:00:00 2001 From: David Kalnischkies Date: Sun, 26 Jan 2014 15:29:10 +0100 Subject: enable deb822 sources for associated testcase Git-Dch: Ignore --- test/integration/test-apt-sources-deb822 | 6 ++++-- 1 file changed, 4 insertions(+), 2 deletions(-) (limited to 'test/integration') diff --git a/test/integration/test-apt-sources-deb822 b/test/integration/test-apt-sources-deb822 index 742adb5e2..87f1886ea 100755 --- a/test/integration/test-apt-sources-deb822 +++ b/test/integration/test-apt-sources-deb822 @@ -7,6 +7,8 @@ TESTDIR=$(readlink -f $(dirname $0)) setupenvironment configarchitecture 'i386' +echo 'APT::Sources::Use-Deb822 "true";' > rootdir/etc/apt/apt.conf.d/00enabledeb822 + SOURCES='rootdir/etc/apt/sources.list' BASE='# some comment # that contains a : as well @@ -19,13 +21,13 @@ Sections: main Description: summay and the long part' -msgtest 'Test old-style sources.list' +msgtest 'Test sources.list' 'old style' echo "deb http://ftp.debian.org/debian stable main" > $SOURCES testequal --nomsg "'http://ftp.debian.org/debian/dists/stable/main/binary-i386/Packages.bz2' ftp.debian.org_debian_dists_stable_main_binary-i386_Packages 0 : 'http://ftp.debian.org/debian/dists/stable/main/i18n/Translation-en.bz2' ftp.debian.org_debian_dists_stable_main_i18n_Translation-en 0 : 'http://ftp.debian.org/debian/dists/stable/InRelease' ftp.debian.org_debian_dists_stable_InRelease 0 " aptget update --print-uris -msgtest 'Test simple deb822 sources.list' +msgtest 'Test sources.list' 'simple deb822' echo "$BASE" > $SOURCES testequal --nomsg "'http://ftp.debian.org/debian/dists/stable/main/binary-i386/Packages.bz2' ftp.debian.org_debian_dists_stable_main_binary-i386_Packages 0 : 'http://ftp.debian.org/debian/dists/stable/main/i18n/Translation-en.bz2' ftp.debian.org_debian_dists_stable_main_i18n_Translation-en 0 : -- cgit v1.2.3-70-g09d2 From 6f43fac607c94f423f1d01708ecf947a8a303d38 Mon Sep 17 00:00:00 2001 From: Michael Vogt Date: Tue, 28 Jan 2014 17:20:19 +0100 Subject: add test for Suite with path --- test/integration/test-apt-sources-deb822 | 11 +++++++++++ 1 file changed, 11 insertions(+) (limited to 'test/integration') diff --git a/test/integration/test-apt-sources-deb822 b/test/integration/test-apt-sources-deb822 index 87f1886ea..5f54b7531 100755 --- a/test/integration/test-apt-sources-deb822 +++ b/test/integration/test-apt-sources-deb822 @@ -99,3 +99,14 @@ testequal --nomsg "'http://ftp.debian.org/debian/dists/stable/main/source/Source 'http://ftp.debian.org/debian/dists/stable/main/binary-i386/Packages.bz2' ftp.debian.org_debian_dists_stable_main_binary-i386_Packages 0 : 'http://ftp.debian.org/debian/dists/stable/main/i18n/Translation-en.bz2' ftp.debian.org_debian_dists_stable_main_i18n_Translation-en 0 : 'http://ftp.debian.org/debian/dists/stable/InRelease' ftp.debian.org_debian_dists_stable_InRelease 0 " aptget update --print-uris + +# a Suite +msgtest 'Test deb822 sources.list file which has' 'a exact path and no sections' +cat > $SOURCES < Date: Wed, 29 Jan 2014 10:37:17 +0100 Subject: fix apt-get download truncation (closes: #736962) --- cmdline/apt-get.cc | 9 ++++++--- test/integration/test-apt-get-download | 7 +++++++ 2 files changed, 13 insertions(+), 3 deletions(-) (limited to 'test/integration') diff --git a/cmdline/apt-get.cc b/cmdline/apt-get.cc index da7d28a1e..6bff6e7de 100644 --- a/cmdline/apt-get.cc +++ b/cmdline/apt-get.cc @@ -678,14 +678,17 @@ bool DoDownload(CommandLine &CmdL) // copy files in local sources to the current directory for (pkgAcquire::ItemIterator I = Fetcher.ItemsBegin(); I != Fetcher.ItemsEnd(); ++I) - if ((*I)->Local == true && (*I)->Status == pkgAcquire::Item::StatDone) + { + std::string const filename = cwd + flNotDir((*I)->DestFile); + if ((*I)->Local == true && + filename != (*I)->DestFile && + (*I)->Status == pkgAcquire::Item::StatDone) { - std::string const filename = cwd + flNotDir((*I)->DestFile); std::ifstream src((*I)->DestFile.c_str(), std::ios::binary); std::ofstream dst(filename.c_str(), std::ios::binary); dst << src.rdbuf(); } - + } return Failed == false; } /*}}}*/ diff --git a/test/integration/test-apt-get-download b/test/integration/test-apt-get-download index fce0be018..c2a5c3d8e 100755 --- a/test/integration/test-apt-get-download +++ b/test/integration/test-apt-get-download @@ -24,6 +24,7 @@ testdownload() { rm $1 } +# normal case(es) testdownload apt_1.0_all.deb apt stable testdownload apt_2.0_all.deb apt @@ -32,3 +33,9 @@ testequal "'file://${DEBFILE}' apt_2.0_all.deb $(stat -c%s $DEBFILE) SHA512:$(sh # deb:677887 testequal "E: Can't find a source to download version '1.0' of 'vrms:i386'" aptget download vrms + +# deb:736962 - apt-get download foo && +aptget download apt +aptget download apt +testsuccess test -s apt_2.0_all.deb +rm -f apt_1.0_all.deb -- cgit v1.2.3-70-g09d2 From e62aa1dd8099aeb8bb667253ca22c56b93f521d1 Mon Sep 17 00:00:00 2001 From: David Kalnischkies Date: Wed, 29 Jan 2014 23:02:51 +0100 Subject: pkgTagFile: if we have seen the end, do not try to see more Asking for more via Step() will notice that we are done with the file already and will result in a fail, which means we can't find the last sections anymore (which is especially painful if we haven't moved at all as in the testcase we haven't even looked at one of the sources leading to a strange behaviour) Reported-By: Niall Walsh --- apt-pkg/tagfile.cc | 6 ++++- test/integration/test-apt-get-source-multisources | 30 +++++++++++++++++++++++ 2 files changed, 35 insertions(+), 1 deletion(-) create mode 100755 test/integration/test-apt-get-source-multisources (limited to 'test/integration') diff --git a/apt-pkg/tagfile.cc b/apt-pkg/tagfile.cc index b92b2c15a..832a40d1e 100644 --- a/apt-pkg/tagfile.cc +++ b/apt-pkg/tagfile.cc @@ -207,7 +207,11 @@ bool pkgTagFile::Jump(pkgTagSection &Tag,unsigned long long Offset) unsigned long long Dist = Offset - d->iOffset; d->Start += Dist; d->iOffset += Dist; - return Step(Tag); + // if we have seen the end, don't ask for more + if (d->Done == true) + return Tag.Scan(d->Start, d->End - d->Start); + else + return Step(Tag); } // Reposition and reload.. diff --git a/test/integration/test-apt-get-source-multisources b/test/integration/test-apt-get-source-multisources new file mode 100755 index 000000000..cc759e8c1 --- /dev/null +++ b/test/integration/test-apt-get-source-multisources @@ -0,0 +1,30 @@ +#!/bin/sh +set -e + +TESTDIR=$(readlink -f $(dirname $0)) +. $TESTDIR/framework + +setupenvironment +configarchitecture 'armhf' + +insertsource 'unstable' 'adduser' 'all' '3.113+nmu3' +insertsource 'stable' 'python-fll' 'all' '0.9.11' + +insertpackage 'unstable' 'adduser' 'all' '3.113+nmu3' +insertpackage 'stable' 'python-fll' 'all' '0.9.11' + +setupaptarchive + +APTARCHIVE=$(readlink -f ./aptarchive) + +HEADER="Reading package lists... +Building dependency tree..." +testequal "$HEADER +Need to get 0 B of source archives. +'file://${APTARCHIVE}/adduser_3.113+nmu3.dsc' adduser_3.113+nmu3.dsc 0 MD5Sum:d41d8cd98f00b204e9800998ecf8427e +'file://${APTARCHIVE}/python-fll_0.9.11.dsc' python-fll_0.9.11.dsc 0 MD5Sum:d41d8cd98f00b204e9800998ecf8427e" aptget source -qdy --print-uris --dsc-only adduser=3.113 python-fll=0.9.11 + +testequal "$HEADER +Need to get 0 B of source archives. +'file://${APTARCHIVE}/python-fll_0.9.11.dsc' python-fll_0.9.11.dsc 0 MD5Sum:d41d8cd98f00b204e9800998ecf8427e +'file://${APTARCHIVE}/adduser_3.113+nmu3.dsc' adduser_3.113+nmu3.dsc 0 MD5Sum:d41d8cd98f00b204e9800998ecf8427e" aptget source -qdy --print-uris --dsc-only python-fll=0.9.11 adduser=3.113 -- cgit v1.2.3-70-g09d2 From 4afa7d18b37661996d188959ba7917824e1545d3 Mon Sep 17 00:00:00 2001 From: Michael Vogt Date: Fri, 31 Jan 2014 08:57:34 +0100 Subject: show "status" in apt list last --- apt-private/private-output.cc | 49 +++++++++++++++++++------------------- test/integration/test-apt-cli-list | 18 +++++++------- 2 files changed, 33 insertions(+), 34 deletions(-) (limited to 'test/integration') diff --git a/apt-private/private-output.cc b/apt-private/private-output.cc index e9b8037da..2ae112af4 100644 --- a/apt-private/private-output.cc +++ b/apt-private/private-output.cc @@ -190,45 +190,44 @@ void ListSingleVersion(pkgCacheFile &CacheFile, pkgRecords &records, /*{{{*/ // raring/linux-kernel version [upradable: new-version] // description pkgPolicy *policy = CacheFile.GetPolicy(); - out << std::setiosflags(std::ios::left) - << _config->Find("APT::Color::Highlight", "") - << name_str - << _config->Find("APT::Color::Neutral", "") - << "/" << suite - << " "; + std::string VersionStr = GetVersion(CacheFile, V); + std::string CandidateVerStr = GetCandidateVersion(CacheFile, P); + std::string InstalledVerStr = GetInstalledVersion(CacheFile, P); + std::string StatusStr; if(P.CurrentVer() == V && state.Upgradable()) { - out << GetVersion(CacheFile, V) - << " " - << "[" << _("installed,upgradable to: ") - << GetCandidateVersion(CacheFile, P) << "]"; + strprintf(StatusStr, _("[installed,upgradable to: %s]"), + CandidateVerStr.c_str()); } else if (P.CurrentVer() == V) { - out << GetVersion(CacheFile, V) - << " "; if(!V.Downloadable()) - out << _("[installed,local]"); + StatusStr = _("[installed,local]"); else if(V.Automatic() && state.Garbage) - out << _("[installed,auto-removable]"); + StatusStr = _("[installed,auto-removable]"); else if (state.Flags & pkgCache::Flag::Auto) - out << _("[installed,automatic]"); + StatusStr = _("[installed,automatic]"); else - out << _("[installed]"); + StatusStr = _("[installed]"); } else if (P.CurrentVer() && policy->GetCandidateVer(P) == V && state.Upgradable()) { - out << GetVersion(CacheFile, V) - << " " - << _("[upgradable from: ") - << GetInstalledVersion(CacheFile, P) << "]"; + strprintf(StatusStr, _("[upgradable from: %s]"), + InstalledVerStr.c_str()); } else { if (V.ParentPkg()->CurrentState == pkgCache::State::ConfigFiles) - out << GetVersion(CacheFile, V) - << " " - << _("[residual-config]"); + StatusStr = _("[residual-config]"); else - out << GetVersion(CacheFile, V); + StatusStr = ""; } - out << " " << GetArchitecture(CacheFile, P); + out << std::setiosflags(std::ios::left) + << _config->Find("APT::Color::Highlight", "") + << name_str + << _config->Find("APT::Color::Neutral", "") + << "/" << suite + << " " + << VersionStr << " " + << GetArchitecture(CacheFile, P); + if (StatusStr != "") + out << " " << StatusStr; if (include_summary) { out << std::endl diff --git a/test/integration/test-apt-cli-list b/test/integration/test-apt-cli-list index 8d5df9051..47507aeb8 100755 --- a/test/integration/test-apt-cli-list +++ b/test/integration/test-apt-cli-list @@ -18,30 +18,30 @@ setupaptarchive APTARCHIVE=$(readlink -f ./aptarchive) testequal "Listing... -bar/now 1.0 [installed,local] i386 +bar/now 1.0 i386 [installed,local] foo/unstable 1.0 all -foobar/unstable 2.0 [upgradable from: 1.0] i386" apt list +foobar/unstable 2.0 i386 [upgradable from: 1.0]" apt list testequal "Listing... foo/unstable 1.0 all -foobar/unstable 2.0 [upgradable from: 1.0] i386" apt list "foo*" +foobar/unstable 2.0 i386 [upgradable from: 1.0]" apt list "foo*" testequal "Listing... -foobar/unstable 2.0 [upgradable from: 1.0] i386" apt list --upgradable +foobar/unstable 2.0 i386 [upgradable from: 1.0]" apt list --upgradable # FIXME: hm, hm - does it make sense to have this different? shouldn't # we use "installed,upgradable" consitently? testequal "Listing... -bar/now 1.0 [installed,local] i386 -foobar/now 1.0 [installed,upgradable to: 2.0] i386" apt list --installed +bar/now 1.0 i386 [installed,local] +foobar/now 1.0 i386 [installed,upgradable to: 2.0]" apt list --installed testequal "Listing... -foobar/unstable 2.0 [upgradable from: 1.0] i386 -foobar/now 1.0 [installed,upgradable to: 2.0] i386 +foobar/unstable 2.0 i386 [upgradable from: 1.0] +foobar/now 1.0 i386 [installed,upgradable to: 2.0] " apt list foobar --all-versions testequal "Listing... -bar/now 1.0 [installed,local] i386 +bar/now 1.0 i386 [installed,local] an autogenerated dummy bar=1.0/installed " apt list bar --verbose -- cgit v1.2.3-70-g09d2 From 0dfc7eef47519bd6b48ceaa4341b72ec40560988 Mon Sep 17 00:00:00 2001 From: Michael Vogt Date: Tue, 4 Feb 2014 10:18:16 +0100 Subject: Fix multiarch package upgrade issue When checking for negative dependencies in MarkInstall() ensure that only dependencies that are relevant (i.e. getting installed) are checked. --- apt-pkg/depcache.cc | 5 +++++ test/integration/test-bug-multiarch-upgrade | 29 +++++++++++++++++++++++++++++ 2 files changed, 34 insertions(+) create mode 100755 test/integration/test-bug-multiarch-upgrade (limited to 'test/integration') diff --git a/apt-pkg/depcache.cc b/apt-pkg/depcache.cc index f9c891c86..a3bb4fd3d 100644 --- a/apt-pkg/depcache.cc +++ b/apt-pkg/depcache.cc @@ -1253,6 +1253,11 @@ bool pkgDepCache::MarkInstall(PkgIterator const &Pkg,bool AutoInst, if (PkgState[Pkg->ID].InstallVer == 0) continue; + /* Ignore negative dependencies that we are not going to + get installed */ + if (PkgState[Pkg->ID].InstallVer != *I) + continue; + if ((Start->Version != 0 || TrgPkg != Pkg) && PkgState[Pkg->ID].CandidateVer != PkgState[Pkg->ID].InstallVer && PkgState[Pkg->ID].CandidateVer != *I && diff --git a/test/integration/test-bug-multiarch-upgrade b/test/integration/test-bug-multiarch-upgrade new file mode 100755 index 000000000..dc3725df1 --- /dev/null +++ b/test/integration/test-bug-multiarch-upgrade @@ -0,0 +1,29 @@ +#!/bin/sh +set -e + +TESTDIR=$(readlink -f $(dirname $0)) +. $TESTDIR/framework +setupenvironment +configarchitecture 'amd64' 'i386' + +insertinstalledpackage 'libcups2' 'amd64' '1' 'Multi-Arch: same' +insertinstalledpackage 'libcups2' 'i386' '1' 'Multi-Arch: same' + +insertpackage 'unstable' 'libcups2' 'amd64' '0' 'Multi-Arch: same' +insertpackage 'unstable' 'libcups2' 'amd64' '2' 'Multi-Arch: same' +insertpackage 'unstable' 'libcups2' 'i386' '0' 'Multi-Arch: same' +insertpackage 'unstable' 'libcups2' 'i386' '2' 'Multi-Arch: same' + +setupaptarchive + +testequal 'Reading package lists... +Building dependency tree... +The following extra packages will be installed: + libcups2 +The following packages will be upgraded: + libcups2 libcups2:i386 +2 upgraded, 0 newly installed, 0 to remove and 0 not upgraded. +Inst libcups2 [1] (2 unstable [amd64]) [libcups2:amd64 on libcups2:i386] [libcups2:i386 on libcups2:amd64] [libcups2:i386 ] +Inst libcups2:i386 [1] (2 unstable [i386]) +Conf libcups2 (2 unstable [amd64]) +Conf libcups2:i386 (2 unstable [i386])' aptget install -s libcups2:i386 -- cgit v1.2.3-70-g09d2 From 33b813ce44c7bafeb2a36b66fd004f8d94a2cbe4 Mon Sep 17 00:00:00 2001 From: Michael Vogt Date: Wed, 5 Feb 2014 17:35:33 +0100 Subject: move isatty() check into InitOutput() --- apt-private/private-output.cc | 3 +++ cmdline/apt-get.cc | 4 ---- cmdline/apt.cc | 2 -- test/integration/test-apt-cli-upgrade | 6 ++---- 4 files changed, 5 insertions(+), 10 deletions(-) (limited to 'test/integration') diff --git a/apt-private/private-output.cc b/apt-private/private-output.cc index 2ae112af4..420ca14d5 100644 --- a/apt-private/private-output.cc +++ b/apt-private/private-output.cc @@ -30,6 +30,9 @@ unsigned int ScreenWidth = 80 - 1; /* - 1 for the cursor */ bool InitOutput() /*{{{*/ { + if (!isatty(STDOUT_FILENO) && _config->FindI("quiet", -1) == -1) + _config->Set("quiet","1"); + c0out.rdbuf(cout.rdbuf()); c1out.rdbuf(cout.rdbuf()); c2out.rdbuf(cout.rdbuf()); diff --git a/cmdline/apt-get.cc b/cmdline/apt-get.cc index 6bff6e7de..1019ff325 100644 --- a/cmdline/apt-get.cc +++ b/cmdline/apt-get.cc @@ -1736,10 +1736,6 @@ int main(int argc,const char *argv[]) /*{{{*/ // see if we are in simulate mode CheckSimulateMode(CmdL); - // Deal with stdout not being a tty - if (!isatty(STDOUT_FILENO) && _config->FindI("quiet", -1) == -1) - _config->Set("quiet","1"); - // Setup the output streams InitOutput(); diff --git a/cmdline/apt.cc b/cmdline/apt.cc index 6fe25e3f3..6ad470faa 100644 --- a/cmdline/apt.cc +++ b/cmdline/apt.cc @@ -156,8 +156,6 @@ int main(int argc, const char *argv[]) /*{{{*/ << std::endl << std::endl; } - if (!isatty(STDOUT_FILENO) && _config->FindI("quiet", -1) == -1) - _config->Set("quiet","1"); // See if the help should be shown if (_config->FindB("help") == true || diff --git a/test/integration/test-apt-cli-upgrade b/test/integration/test-apt-cli-upgrade index 163a55576..21ce69413 100755 --- a/test/integration/test-apt-cli-upgrade +++ b/test/integration/test-apt-cli-upgrade @@ -16,8 +16,7 @@ setupaptarchive APTARCHIVE=$(readlink -f ./aptarchive) # default is to allow new dependencies -testequal "Calculating upgrade... Done -The following NEW packages will be installed: +testequal "The following NEW packages will be installed: foo-new-dependency The following packages will be upgraded: foo @@ -28,7 +27,6 @@ Conf foo-new-dependency (2.0 unstable [all]) Conf foo (2.0 unstable [all])" apt upgrade -qq -s # ensure -testequal "Calculating upgrade... Done -The following packages have been kept back: +testequal "The following packages have been kept back: foo 0 upgraded, 0 newly installed, 0 to remove and 1 not upgraded." apt upgrade -qq -s --no-new-pkgs -- cgit v1.2.3-70-g09d2 From 446551c8ffd2c9cb9dcd707c94590e73009f7dd9 Mon Sep 17 00:00:00 2001 From: David Kalnischkies Date: Thu, 6 Feb 2014 00:13:10 +0100 Subject: discard impossible candidates in MarkInstall If a (Pre-)Depends can't be satisfied there is no point in keeping the candidate as is as it is impossible to find a solution for it, so we can just as well reset the candidate to the currently installed version. We avoid trying to install this impossible candidate later on this way. Closes: #735967 --- apt-pkg/depcache.cc | 9 ++- .../test-bug-735967-lib32-to-i386-unavailable | 86 ++++++++++++++++++++++ 2 files changed, 93 insertions(+), 2 deletions(-) create mode 100755 test/integration/test-bug-735967-lib32-to-i386-unavailable (limited to 'test/integration') diff --git a/apt-pkg/depcache.cc b/apt-pkg/depcache.cc index f9c891c86..7e75a6fe3 100644 --- a/apt-pkg/depcache.cc +++ b/apt-pkg/depcache.cc @@ -1134,8 +1134,13 @@ bool pkgDepCache::MarkInstall(PkgIterator const &Pkg,bool AutoInst, std::clog << OutputInDepth(Depth) << Start << " can't be satisfied!" << std::endl; if (Start.IsCritical() == false) continue; - // if the dependency was critical, we can't install it, so remove it again - MarkDelete(Pkg,false,Depth + 1, false); + // if the dependency was critical, we have absolutely no chance to install it, + // so if it wasn't installed remove it again. If it was, discard the candidate + // as the problemresolver will trip over it otherwise trying to install it (#735967) + if (Pkg->CurrentVer == 0) + MarkDelete(Pkg,false,Depth + 1, false); + else + SetCandidateVersion(Pkg.CurrentVer()); return false; } diff --git a/test/integration/test-bug-735967-lib32-to-i386-unavailable b/test/integration/test-bug-735967-lib32-to-i386-unavailable new file mode 100755 index 000000000..4dbe1d25d --- /dev/null +++ b/test/integration/test-bug-735967-lib32-to-i386-unavailable @@ -0,0 +1,86 @@ +#!/bin/sh +set -e + +TESTDIR=$(readlink -f $(dirname $0)) +. $TESTDIR/framework + +setupenvironment +configarchitecture 'i386' 'amd64' + +insertpackage 'unstable' 'lib32nss-mdns' 'amd64' '0.10-6' 'Depends: libnss-mdns-i386 (= 0.10-6)' +insertpackage 'unstable' 'libnss-mdns' 'amd64,i386' '0.10-6' 'Multi-Arch: same +Breaks: lib32nss-mdns (<< 0.10-6)' +insertpackage 'unstable' 'libnss-mdns-i386' 'i386' '0.10-6' 'Multi-Arch: foreign +Depends: libnss-mdns' + +insertpackage 'unstable' 'foo' 'amd64' '1' 'Depends: libfoo' +insertpackage 'unstable' 'libfoo' 'amd64' '1' 'Depends: libfoo-bin' +insertpackage 'unstable' 'libfoo-bin' 'i386' '0.10-6' 'Multi-Arch: foreign' + +insertinstalledpackage 'lib32nss-mdns' 'amd64' '0.9-1' +insertinstalledpackage 'libnss-mdns' 'amd64' '0.9-1' + +insertinstalledpackage 'i-make-packages-important' 'all' '1' 'Depends: libnss-mdns' + +setupaptarchive --no-update + +# make libnss-mdns-i386 unavailable +configarchitecture 'amd64' +testsuccess aptget update + +testequal 'Reading package lists... +Building dependency tree... +The following packages will be REMOVED: + lib32nss-mdns +The following packages will be upgraded: + libnss-mdns +1 upgraded, 0 newly installed, 1 to remove and 0 not upgraded. +Remv lib32nss-mdns [0.9-1] +Inst libnss-mdns [0.9-1] (0.10-6 unstable [amd64]) +Conf libnss-mdns (0.10-6 unstable [amd64])' aptget dist-upgrade -s + +testequal 'Reading package lists... +Building dependency tree... +Some packages could not be installed. This may mean that you have +requested an impossible situation or if you are using the unstable +distribution that some required packages have not yet been created +or been moved out of Incoming. +The following information may help to resolve the situation: + +The following packages have unmet dependencies: + foo : Depends: libfoo but it is not going to be installed +E: Unable to correct problems, you have held broken packages.' aptget install foo -s + +# activate multiarch +configarchitecture 'amd64' 'i386' +testsuccess aptget update + +testequal 'Reading package lists... +Building dependency tree... +The following NEW packages will be installed: + libnss-mdns:i386 libnss-mdns-i386:i386 +The following packages will be upgraded: + lib32nss-mdns libnss-mdns +2 upgraded, 2 newly installed, 0 to remove and 0 not upgraded. +Inst lib32nss-mdns [0.9-1] (0.10-6 unstable [amd64]) [] +Inst libnss-mdns [0.9-1] (0.10-6 unstable [amd64]) [] +Inst libnss-mdns:i386 (0.10-6 unstable [i386]) [] +Inst libnss-mdns-i386:i386 (0.10-6 unstable [i386]) +Conf libnss-mdns:i386 (0.10-6 unstable [i386]) +Conf libnss-mdns (0.10-6 unstable [amd64]) +Conf libnss-mdns-i386:i386 (0.10-6 unstable [i386]) +Conf lib32nss-mdns (0.10-6 unstable [amd64])' aptget dist-upgrade -s + +testequal 'Reading package lists... +Building dependency tree... +The following extra packages will be installed: + libfoo libfoo-bin:i386 +The following NEW packages will be installed: + foo libfoo libfoo-bin:i386 +0 upgraded, 3 newly installed, 0 to remove and 2 not upgraded. +Inst libfoo-bin:i386 (0.10-6 unstable [i386]) +Inst libfoo (1 unstable [amd64]) +Inst foo (1 unstable [amd64]) +Conf libfoo-bin:i386 (0.10-6 unstable [i386]) +Conf libfoo (1 unstable [amd64]) +Conf foo (1 unstable [amd64])' aptget install foo -s -- cgit v1.2.3-70-g09d2 From cc130d7114425cc6f8c315e6cbc68be2cb4d3c38 Mon Sep 17 00:00:00 2001 From: Colin Watson Date: Thu, 30 Jan 2014 14:08:08 +0000 Subject: multicompress with externals sets wrong file modes Copy from the bug description: After we upgraded the Ubuntu master archive from lucid to precise, we noticed that Translation-en.bz2 was being written with mode 0600 rather than 0644, which broke our mirroring. This is no longer reproducible as such in unstable because apt now links against libbz2, but it's still reproducible with xz; it happens because multicompress fchmods one end of the compression pipe in this case rather than the target file. [Original testcase slightly modified to comply with house-style] Closes: 737130 --- ftparchive/multicompress.cc | 2 +- .../test-bug-737130-multicompress-file-modes | 30 ++++++++++++++++++++++ 2 files changed, 31 insertions(+), 1 deletion(-) create mode 100755 test/integration/test-bug-737130-multicompress-file-modes (limited to 'test/integration') diff --git a/ftparchive/multicompress.cc b/ftparchive/multicompress.cc index 265fb1a80..c1bd6037a 100644 --- a/ftparchive/multicompress.cc +++ b/ftparchive/multicompress.cc @@ -365,7 +365,7 @@ bool MultiCompress::Child(int const &FD) for (Files *I = Outputs; I != 0; I = I->Next) { // Set the correct file modes - fchmod(I->TmpFile.Fd(),Permissions); + chmod(I->TmpFile.Name().c_str(),Permissions); if (rename(I->TmpFile.Name().c_str(),I->Output.c_str()) != 0) _error->Errno("rename",_("Failed to rename %s to %s"), diff --git a/test/integration/test-bug-737130-multicompress-file-modes b/test/integration/test-bug-737130-multicompress-file-modes new file mode 100755 index 000000000..7df6339a2 --- /dev/null +++ b/test/integration/test-bug-737130-multicompress-file-modes @@ -0,0 +1,30 @@ +#!/bin/sh +set -e + +TESTDIR=$(readlink -f $(dirname $0)) +. $TESTDIR/framework +setupenvironment +configarchitecture 'i386' + +cat >aptarchive/ftparchive.conf < Date: Thu, 6 Feb 2014 20:48:52 +0100 Subject: fix remaining testcase-bugs from my armel box Git-Dch: Ignore --- test/integration/test-apt-get-autoremove | 10 +-- .../test-architecture-specification-parsing | 82 ++++++++++++---------- ...ight-loop-configure-with-unpacking-new-packages | 29 ++++++-- 3 files changed, 70 insertions(+), 51 deletions(-) (limited to 'test/integration') diff --git a/test/integration/test-apt-get-autoremove b/test/integration/test-apt-get-autoremove index 68ea1c574..acde4b096 100755 --- a/test/integration/test-apt-get-autoremove +++ b/test/integration/test-apt-get-autoremove @@ -42,12 +42,12 @@ testsuccess aptget autoremove -y testdpkgnotinstalled 'po-debconf' testmarkedauto -sed -i rootdir/var/log/apt/history.log -e '/^Commandline: / d' -e '/^Start-Date: / d' -e '/^End-Date: / d' -testfileequal 'rootdir/var/log/apt/history.log' ' -Install: unrelated:i386 (1), debhelper:i386 (8.0.0), po-debconf:i386 (1.0.16, automatic) - +sed rootdir/var/log/apt/history.log -e '/^Commandline: / d' -e '/^Start-Date: / d' -e '/^End-Date: / d' -e 's#), #)\nInstall: #g' | sort -u > apt-history.log +testfileequal 'apt-history.log' ' +Install: debhelper:i386 (8.0.0) +Install: po-debconf:i386 (1.0.16, automatic) +Install: unrelated:i386 (1) Remove: debhelper:i386 (8.0.0) - Remove: po-debconf:i386 (1.0.16)' testsuccess aptget install debhelper -y diff --git a/test/integration/test-architecture-specification-parsing b/test/integration/test-architecture-specification-parsing index 2741509a7..a43354871 100755 --- a/test/integration/test-architecture-specification-parsing +++ b/test/integration/test-architecture-specification-parsing @@ -4,102 +4,106 @@ set -e TESTDIR=$(readlink -f $(dirname $0)) . $TESTDIR/framework setupenvironment -configarchitecture 'amd64' 'armel' -buildsimplenativepackage 'pkg-arch-foo' 'amd64' '1.0' 'stable' 'Build-Depends: foo [amd64 !amd64] -Depends: foo [amd64 !amd64]' -buildsimplenativepackage 'pkg-arch-no-foo' 'amd64' '1.0' 'stable' 'Build-Depends: foo [!amd64 amd64] -Depends: foo [!amd64 amd64]' -buildsimplenativepackage 'pkg-arch-foo-unrelated-no' 'amd64' '1.0' 'stable' 'Build-Depends: foo [!kfreebsd-any amd64] -Depends: foo [!kfreebsd-any amd64]' -buildsimplenativepackage 'pkg-arch-foo-unrelated-no2' 'amd64' '1.0' 'stable' 'Build-Depends: foo [amd64 !kfreebsd-any] -Depends: foo [amd64 !kfreebsd-any]' -buildsimplenativepackage 'no-depends' 'armel' '1.0' 'stable' 'Build-Depends: foo [armhf], bar [arm] -Depends: foo [armhf], bar [arm]' +# we need this construct here as it isn't really possible to fake native arch for dpkg-* tools +NATIVE="$(command dpkg --print-architecture)" +configarchitecture "${NATIVE}" 'armel' + +buildsimplenativepackage 'pkg-arch-foo' "$NATIVE" '1.0' 'stable' "Build-Depends: foo [${NATIVE} !${NATIVE}] +Depends: foo [${NATIVE} !${NATIVE}]" +buildsimplenativepackage 'pkg-arch-no-foo' "$NATIVE" '1.0' 'stable' "Build-Depends: foo [!${NATIVE} ${NATIVE}] +Depends: foo [!${NATIVE} ${NATIVE}]" +buildsimplenativepackage 'pkg-arch-foo-unrelated-no' "$NATIVE" '1.0' 'stable' "Build-Depends: foo [!kfreebsd-any ${NATIVE}] +Depends: foo [!kfreebsd-any ${NATIVE}]" +buildsimplenativepackage 'pkg-arch-foo-unrelated-no2' "$NATIVE" '1.0' 'stable' "Build-Depends: foo [${NATIVE} !kfreebsd-any] +Depends: foo [${NATIVE} !kfreebsd-any]" +buildsimplenativepackage 'no-depends' 'armel' '1.0' 'stable' 'Build-Depends: foo [armeb], bar [arm] +Depends: foo [armeb], bar [arm]' -buildsimplenativepackage 'foo' 'amd64' '1.0' 'stable' +buildsimplenativepackage 'foo' "$NATIVE" '1.0' 'stable' insertinstalledpackage 'build-essential' 'all' '11.5' 'Multi-Arch: foreign' setupaptarchive -testequal 'Reading package lists... +testequal "Reading package lists... Building dependency tree... The following extra packages will be installed: foo The following NEW packages will be installed: foo pkg-arch-foo 0 upgraded, 2 newly installed, 0 to remove and 0 not upgraded. -Inst foo (1.0 stable [amd64]) -Inst pkg-arch-foo (1.0 stable [amd64]) -Conf foo (1.0 stable [amd64]) -Conf pkg-arch-foo (1.0 stable [amd64])' aptget install pkg-arch-foo -s +Inst foo (1.0 stable [${NATIVE}]) +Inst pkg-arch-foo (1.0 stable [${NATIVE}]) +Conf foo (1.0 stable [${NATIVE}]) +Conf pkg-arch-foo (1.0 stable [${NATIVE}])" aptget install pkg-arch-foo -s -testequal 'Reading package lists... +testequal "Reading package lists... Building dependency tree... The following NEW packages will be installed: pkg-arch-no-foo 0 upgraded, 1 newly installed, 0 to remove and 0 not upgraded. -Inst pkg-arch-no-foo (1.0 stable [amd64]) -Conf pkg-arch-no-foo (1.0 stable [amd64])' aptget install pkg-arch-no-foo -s +Inst pkg-arch-no-foo (1.0 stable [${NATIVE}]) +Conf pkg-arch-no-foo (1.0 stable [${NATIVE}])" aptget install pkg-arch-no-foo -s -testequal 'Reading package lists... +testequal "Reading package lists... Building dependency tree... The following extra packages will be installed: foo The following NEW packages will be installed: foo pkg-arch-foo-unrelated-no 0 upgraded, 2 newly installed, 0 to remove and 0 not upgraded. -Inst foo (1.0 stable [amd64]) -Inst pkg-arch-foo-unrelated-no (1.0 stable [amd64]) -Conf foo (1.0 stable [amd64]) -Conf pkg-arch-foo-unrelated-no (1.0 stable [amd64])' aptget install pkg-arch-foo-unrelated-no -s +Inst foo (1.0 stable [${NATIVE}]) +Inst pkg-arch-foo-unrelated-no (1.0 stable [${NATIVE}]) +Conf foo (1.0 stable [${NATIVE}]) +Conf pkg-arch-foo-unrelated-no (1.0 stable [${NATIVE}])" aptget install pkg-arch-foo-unrelated-no -s -testequal 'Reading package lists... +testequal "Reading package lists... Building dependency tree... The following extra packages will be installed: foo The following NEW packages will be installed: foo pkg-arch-foo-unrelated-no2 0 upgraded, 2 newly installed, 0 to remove and 0 not upgraded. -Inst foo (1.0 stable [amd64]) -Inst pkg-arch-foo-unrelated-no2 (1.0 stable [amd64]) -Conf foo (1.0 stable [amd64]) -Conf pkg-arch-foo-unrelated-no2 (1.0 stable [amd64])' aptget install pkg-arch-foo-unrelated-no2 -s +Inst foo (1.0 stable [${NATIVE}]) +Inst pkg-arch-foo-unrelated-no2 (1.0 stable [${NATIVE}]) +Conf foo (1.0 stable [${NATIVE}]) +Conf pkg-arch-foo-unrelated-no2 (1.0 stable [${NATIVE}])" aptget install pkg-arch-foo-unrelated-no2 -s -testequal 'Reading package lists... +testequal "Reading package lists... Building dependency tree... The following NEW packages will be installed: foo 0 upgraded, 1 newly installed, 0 to remove and 0 not upgraded. -Inst foo (1.0 stable [amd64]) -Conf foo (1.0 stable [amd64])' aptget build-dep pkg-arch-foo -s +Inst foo (1.0 stable [${NATIVE}]) +Conf foo (1.0 stable [${NATIVE}])" aptget build-dep pkg-arch-foo -s testequal 'Reading package lists... Building dependency tree... 0 upgraded, 0 newly installed, 0 to remove and 0 not upgraded.' aptget build-dep pkg-arch-no-foo -s -testequal 'Reading package lists... +testequal "Reading package lists... Building dependency tree... The following NEW packages will be installed: foo 0 upgraded, 1 newly installed, 0 to remove and 0 not upgraded. -Inst foo (1.0 stable [amd64]) -Conf foo (1.0 stable [amd64])' aptget build-dep pkg-arch-foo-unrelated-no -s +Inst foo (1.0 stable [${NATIVE}]) +Conf foo (1.0 stable [${NATIVE}])" aptget build-dep pkg-arch-foo-unrelated-no -s -testequal 'Reading package lists... +testequal "Reading package lists... Building dependency tree... The following NEW packages will be installed: foo 0 upgraded, 1 newly installed, 0 to remove and 0 not upgraded. -Inst foo (1.0 stable [amd64]) -Conf foo (1.0 stable [amd64])' aptget build-dep pkg-arch-foo-unrelated-no2 -s +Inst foo (1.0 stable [${NATIVE}]) +Conf foo (1.0 stable [${NATIVE}])" aptget build-dep pkg-arch-foo-unrelated-no2 -s testequal 'Reading package lists... Building dependency tree... 0 upgraded, 0 newly installed, 0 to remove and 0 not upgraded.' aptget build-dep no-depends -s # this is not really testing APT - more that dpkg is in line with us +configarchitecture 'amd64' 'armel' testequal 'Reading package lists... Building dependency tree... The following NEW packages will be installed: diff --git a/test/integration/test-very-tight-loop-configure-with-unpacking-new-packages b/test/integration/test-very-tight-loop-configure-with-unpacking-new-packages index 7f3b05e59..5856cd744 100755 --- a/test/integration/test-very-tight-loop-configure-with-unpacking-new-packages +++ b/test/integration/test-very-tight-loop-configure-with-unpacking-new-packages @@ -15,19 +15,18 @@ Breaks: libreoffice-core (>= 3+), libreoffice-core (<= 3~), libreoffice-style-ga insertinstalledpackage 'libreoffice-style-galaxy' 'amd64' '3' 'Depends: libreoffice-core Provides: libreoffice-style' -buildsimplenativepackage 'libreoffice' 'amd64' '4' 'sid' 'Depends: libreoffice-core (= 4)' -buildsimplenativepackage 'libreoffice-core' 'amd64' '4' 'sid' 'Depends: libreoffice-common (>= 4) +insertpackage 'sid' 'libreoffice' 'amd64' '4' 'Depends: libreoffice-core (= 4)' +insertpackage 'sid' 'libreoffice-core' 'amd64' '4' 'Depends: libreoffice-common (>= 4) Breaks: libreoffice-common (<< 4), libreoffice-style-galaxy (<< 4)' -buildsimplenativepackage 'libreoffice-common' 'all' '4' 'sid' 'Depends: libreoffice-style, ure +insertpackage 'sid' 'libreoffice-common' 'all' '4' 'Depends: libreoffice-style, ure Breaks: libreoffice-core (>= 4+), libreoffice-core (<= 4~), libreoffice-style-galaxy (>= 4+), libreoffice-style-galaxy (<= 4~)' -buildsimplenativepackage 'libreoffice-style-galaxy' 'amd64' '4' 'sid' 'Depends: libreoffice-core +insertpackage 'sid' 'libreoffice-style-galaxy' 'amd64' '4' 'Depends: libreoffice-core Provides: libreoffice-style' - -buildsimplenativepackage 'ure' 'amd64' '4' 'sid' +insertpackage 'sid' 'ure' 'amd64' '4' setupaptarchive -testequal 'Reading package lists... +testequalor2 'Reading package lists... Building dependency tree... The following NEW packages will be installed: ure @@ -43,4 +42,20 @@ Conf ure (4 sid [amd64]) Conf libreoffice-style-galaxy (4 sid [amd64]) Conf libreoffice-common (4 sid [all]) Conf libreoffice-core (4 sid [amd64]) +Conf libreoffice (4 sid [amd64])' 'Reading package lists... +Building dependency tree... +The following NEW packages will be installed: + ure +The following packages will be upgraded: + libreoffice libreoffice-common libreoffice-core libreoffice-style-galaxy +4 upgraded, 1 newly installed, 0 to remove and 0 not upgraded. +Inst libreoffice [3] (4 sid [amd64]) [] +Inst libreoffice-style-galaxy [3] (4 sid [amd64]) [libreoffice-common:amd64 on libreoffice-style-galaxy:amd64] [libreoffice-common:amd64 ] +Inst libreoffice-core [3] (4 sid [amd64]) [libreoffice-common:amd64 on libreoffice-core:amd64] [libreoffice-common:amd64 on libreoffice-style-galaxy:amd64] [libreoffice-core:amd64 on libreoffice-common:amd64] [libreoffice-common:amd64 ] +Inst libreoffice-common [3] (4 sid [all]) [] +Inst ure (4 sid [amd64]) +Conf ure (4 sid [amd64]) +Conf libreoffice-style-galaxy (4 sid [amd64]) +Conf libreoffice-common (4 sid [all]) +Conf libreoffice-core (4 sid [amd64]) Conf libreoffice (4 sid [amd64])' aptget dist-upgrade -s -- cgit v1.2.3-70-g09d2 From 34d6ece7566ea4fcda2286478b31641378aefc93 Mon Sep 17 00:00:00 2001 From: David Kalnischkies Date: Mon, 10 Feb 2014 17:55:13 +0100 Subject: always cleanup patchfiles at the end of rred call With APT::Get::List-Cleanup disabled the ed-style patch files are lingering in the lists/ directory otherwise. That was kinda okay in the old none-client-merge as the filename was always the same so it was constantly overridden, but now with different names for client-merge quiet a few could pill up on the system and are used by the next call as it picks them up based on the filename. --- apt-pkg/acquire-item.cc | 9 +++++++++ test/integration/test-pdiff-usage | 28 +++++++++++++++++++++------- 2 files changed, 30 insertions(+), 7 deletions(-) (limited to 'test/integration') diff --git a/apt-pkg/acquire-item.cc b/apt-pkg/acquire-item.cc index 1185908f3..60003c023 100644 --- a/apt-pkg/acquire-item.cc +++ b/apt-pkg/acquire-item.cc @@ -757,6 +757,7 @@ void pkgAcqIndexDiffs::Done(string Message,unsigned long long Size,string Md5Has { // remove the just applied patch available_patches.erase(available_patches.begin()); + unlink((FinalFile + ".ed").c_str()); // move into place if(Debug) @@ -887,6 +888,14 @@ void pkgAcqIndexMergeDiffs::Done(string Message,unsigned long long Size,string M // otherwise lists cleanup will eat the file DestFile = FinalFile; + // ensure the ed's are gone regardless of list-cleanup + for (std::vector::const_iterator I = allPatches->begin(); + I != allPatches->end(); ++I) + { + std::string patch = FinalFile + ".ed." + (*I)->patch.file + ".gz"; + unlink(patch.c_str()); + } + // all set and done Complete = true; if(Debug) diff --git a/test/integration/test-pdiff-usage b/test/integration/test-pdiff-usage index ad31511b9..afe1ad443 100755 --- a/test/integration/test-pdiff-usage +++ b/test/integration/test-pdiff-usage @@ -31,6 +31,16 @@ wasmergeused() { msgfail fi + msgtest 'No intermediate patch files' 'still exist' + local EDS="$(find rootdir/var/lib/apt/lists -name '*.ed' -o -name '*.ed.*')" + if [ -z "$EDS" ]; then + msgpass + else + echo + echo "$EDS" + msgfail + fi + msgtest 'Check if the right pdiff merger was used' if grep -q '^pkgAcqIndexMergeDiffs::Done(): rred' $OUTPUT; then if echo "$*" | grep -q -- '-o Acquire::PDiffs::Merge=1'; then @@ -46,7 +56,7 @@ wasmergeused() { } testrun() { - # setup the base + msgmsg "Testcase: setup the base with: $*" find aptarchive -name 'Packages*' -type f -delete cp ${PKGFILE} aptarchive/Packages compressfile 'aptarchive/Packages' @@ -59,7 +69,7 @@ testrun() { testequal "$(cat ${PKGFILE}) " aptcache show apt oldstuff - msgmsg 'Testcase: apply with one patch' + msgmsg "Testcase: apply with one patch: $*" cp ${PKGFILE}-new aptarchive/Packages compressfile 'aptarchive/Packages' mkdir -p aptarchive/Packages.diff @@ -82,13 +92,13 @@ SHA1-Patches: testequal "$(cat ${PKGFILE}-new) " aptcache show apt newstuff - msgmsg 'Testcase: index is already up-to-date' + msgmsg "Testcase: index is already up-to-date: $*" find rootdir/var/lib/apt/lists -name '*.IndexDiff' -type f -delete testsuccess aptget update "$@" testequal "$(cat ${PKGFILE}-new) " aptcache show apt newstuff - msgmsg 'Testcase: apply with two patches' + msgmsg "Testcase: apply with two patches: $*" cp ${PKGFILE}-new aptarchive/Packages echo ' Package: futurestuff @@ -129,7 +139,7 @@ SHA1-Patches: testequal "$(cat Packages-future) " aptcache show apt newstuff futurestuff - msgmsg 'Testcase: patch applying fails, but successful fallback' + msgmsg "Testcase: patch applying fails, but successful fallback: $*" rm -rf rootdir/var/lib/apt/lists cp -a rootdir/var/lib/apt/lists-bak rootdir/var/lib/apt/lists cp ${PKGFILE}-new aptarchive/Packages @@ -154,6 +164,10 @@ SHA1-Patches: testequal "$(cat ${PKGFILE}-new) " aptcache show apt newstuff } +echo 'Debug::pkgAcquire::Diffs "true"; +Debug::pkgAcquire::rred "true";' > rootdir/etc/apt/apt.conf.d/rreddebug.conf -testrun -o Debug::pkgAcquire::Diffs=1 -o Debug::pkgAcquire::rred=1 -o Acquire::PDiffs::Merge=0 -testrun -o Debug::pkgAcquire::Diffs=1 -o Debug::pkgAcquire::rred=1 -o Acquire::PDiffs::Merge=1 +testrun -o Acquire::PDiffs::Merge=0 -o APT::Get::List-Cleanup=1 +testrun -o Acquire::PDiffs::Merge=1 -o APT::Get::List-Cleanup=1 +testrun -o Acquire::PDiffs::Merge=0 -o APT::Get::List-Cleanup=0 +testrun -o Acquire::PDiffs::Merge=1 -o APT::Get::List-Cleanup=0 -- cgit v1.2.3-70-g09d2 From e209542632e61b9bf07b809c333f1e4b9de7fde9 Mon Sep 17 00:00:00 2001 From: David Kalnischkies Date: Mon, 10 Feb 2014 18:06:28 +0100 Subject: use VersionSet in download to handle repeats Closes: 738103 --- cmdline/apt-get.cc | 6 +++--- test/integration/test-apt-get-download | 13 +++++++++---- 2 files changed, 12 insertions(+), 7 deletions(-) (limited to 'test/integration') diff --git a/cmdline/apt-get.cc b/cmdline/apt-get.cc index 6bff6e7de..2a9964722 100644 --- a/cmdline/apt-get.cc +++ b/cmdline/apt-get.cc @@ -630,8 +630,8 @@ bool DoDownload(CommandLine &CmdL) return false; APT::CacheSetHelper helper(c0out); - APT::VersionList verset = APT::VersionList::FromCommandLine(Cache, - CmdL.FileList + 1, APT::VersionList::CANDIDATE, helper); + APT::VersionSet verset = APT::VersionSet::FromCommandLine(Cache, + CmdL.FileList + 1, APT::VersionSet::CANDIDATE, helper); if (verset.empty() == true) return false; @@ -650,7 +650,7 @@ bool DoDownload(CommandLine &CmdL) std::string const cwd = SafeGetCWD(); _config->Set("Dir::Cache::Archives", cwd); int i = 0; - for (APT::VersionList::const_iterator Ver = verset.begin(); + for (APT::VersionSet::const_iterator Ver = verset.begin(); Ver != verset.end(); ++Ver, ++i) { pkgAcquire::Item *I = new pkgAcqArchive(&Fetcher, SrcList, &Recs, *Ver, storefile[i]); diff --git a/test/integration/test-apt-get-download b/test/integration/test-apt-get-download index c2a5c3d8e..ec809e0ce 100755 --- a/test/integration/test-apt-get-download +++ b/test/integration/test-apt-get-download @@ -34,8 +34,13 @@ testequal "'file://${DEBFILE}' apt_2.0_all.deb $(stat -c%s $DEBFILE) SHA512:$(sh # deb:677887 testequal "E: Can't find a source to download version '1.0' of 'vrms:i386'" aptget download vrms -# deb:736962 - apt-get download foo && -aptget download apt -aptget download apt +# deb:736962 +testsuccess aptget download apt +testsuccess aptget download apt +testsuccess test -s apt_2.0_all.deb + +rm -f apt_1.0_all.deb apt_2.0_all.deb + +# deb:738103 +testsuccess aptget download apt apt apt/unstable apt=2.0 testsuccess test -s apt_2.0_all.deb -rm -f apt_1.0_all.deb -- cgit v1.2.3-70-g09d2 From 8f3594c3487800edc2a97af1f3290049776dc556 Mon Sep 17 00:00:00 2001 From: Michael Vogt Date: Wed, 12 Feb 2014 07:59:07 +0100 Subject: Use a APT::VersionSet instead of a VersionList Use a APT::VersionSet instead of a APT::VersionList in DoDownload() to ensure that there is only one version in the set even if the user passes multiple identical name/versions on the commandline (Bug#738103) --- cmdline/apt-get.cc | 6 +++--- test/integration/test-apt-get-download | 5 +++++ 2 files changed, 8 insertions(+), 3 deletions(-) (limited to 'test/integration') diff --git a/cmdline/apt-get.cc b/cmdline/apt-get.cc index 1019ff325..4d609104c 100644 --- a/cmdline/apt-get.cc +++ b/cmdline/apt-get.cc @@ -630,8 +630,8 @@ bool DoDownload(CommandLine &CmdL) return false; APT::CacheSetHelper helper(c0out); - APT::VersionList verset = APT::VersionList::FromCommandLine(Cache, - CmdL.FileList + 1, APT::VersionList::CANDIDATE, helper); + APT::VersionSet verset = APT::VersionSet::FromCommandLine(Cache, + CmdL.FileList + 1, APT::VersionSet::CANDIDATE, helper); if (verset.empty() == true) return false; @@ -650,7 +650,7 @@ bool DoDownload(CommandLine &CmdL) std::string const cwd = SafeGetCWD(); _config->Set("Dir::Cache::Archives", cwd); int i = 0; - for (APT::VersionList::const_iterator Ver = verset.begin(); + for (APT::VersionSet::const_iterator Ver = verset.begin(); Ver != verset.end(); ++Ver, ++i) { pkgAcquire::Item *I = new pkgAcqArchive(&Fetcher, SrcList, &Recs, *Ver, storefile[i]); diff --git a/test/integration/test-apt-get-download b/test/integration/test-apt-get-download index c2a5c3d8e..0d92283f1 100755 --- a/test/integration/test-apt-get-download +++ b/test/integration/test-apt-get-download @@ -39,3 +39,8 @@ aptget download apt aptget download apt testsuccess test -s apt_2.0_all.deb rm -f apt_1.0_all.deb + +# deb:738103 - apt-get download foo foo fails +rm -f apt_*.deb +aptget download apt apt +testsuccess test -s apt_2.0_all.deb -- cgit v1.2.3-70-g09d2 From 362b152c38195a3d51406285011fc34238158bda Mon Sep 17 00:00:00 2001 From: Michael Vogt Date: Thu, 13 Feb 2014 09:51:57 +0100 Subject: remove duplicated apt-get download apt apt test --- test/integration/test-apt-get-download | 4 ---- 1 file changed, 4 deletions(-) (limited to 'test/integration') diff --git a/test/integration/test-apt-get-download b/test/integration/test-apt-get-download index 7cce6ef29..be3144e1f 100755 --- a/test/integration/test-apt-get-download +++ b/test/integration/test-apt-get-download @@ -45,7 +45,3 @@ rm -f apt_1.0_all.deb apt_2.0_all.deb testsuccess aptget download apt apt apt/unstable apt=2.0 testsuccess test -s apt_2.0_all.deb -# deb:738103 - apt-get download foo foo fails -rm -f apt_*.deb -aptget download apt apt -testsuccess test -s apt_2.0_all.deb -- cgit v1.2.3-70-g09d2 From f9b4f12d65b827612b29071f05d605bc05fa62bd Mon Sep 17 00:00:00 2001 From: David Kalnischkies Date: Thu, 13 Feb 2014 23:38:28 +0100 Subject: report https download start only if we really get it Reporting it via progress means that e.g. a redirect will trigger it, too, so you get a Get & Hit while http only reports a Hit as it should be. --- methods/https.cc | 3 ++- test/integration/test-bug-602412-dequote-redirect | 33 ++++++++++++++--------- test/interactive-helper/aptwebserver.cc | 20 +++++++++++--- 3 files changed, 39 insertions(+), 17 deletions(-) (limited to 'test/integration') diff --git a/methods/https.cc b/methods/https.cc index 146b2bfb8..d97fddf9e 100644 --- a/methods/https.cc +++ b/methods/https.cc @@ -75,6 +75,8 @@ HttpsMethod::write_data(void *buffer, size_t size, size_t nmemb, void *userp) { HttpsMethod *me = (HttpsMethod *)userp; + if (me->Res.Size == 0) + me->URIStart(me->Res); if(me->File->Write(buffer, size*nmemb) != true) return false; @@ -88,7 +90,6 @@ HttpsMethod::progress_callback(void *clientp, double dltotal, double dlnow, HttpsMethod *me = (HttpsMethod *)clientp; if(dltotal > 0 && me->Res.Size == 0) { me->Res.Size = (unsigned long long)dltotal; - me->URIStart(me->Res); } return 0; } diff --git a/test/integration/test-bug-602412-dequote-redirect b/test/integration/test-bug-602412-dequote-redirect index bcebb57b8..6393f0c27 100755 --- a/test/integration/test-bug-602412-dequote-redirect +++ b/test/integration/test-bug-602412-dequote-redirect @@ -15,15 +15,24 @@ changetowebserver -o aptwebserver::redirect::replace::/pool/=/newpool/ \ mv aptarchive/pool aptarchive/newpool mv aptarchive/dists aptarchive/newdists -msgtest 'Test redirection works in' 'apt-get update' -testsuccess --nomsg aptget update - -# check that I-M-S header is kept in redirections -testequal 'Hit http://localhost:8080 unstable InRelease -Hit http://localhost:8080 unstable/main Sources -Hit http://localhost:8080 unstable/main amd64 Packages -Hit http://localhost:8080 unstable/main Translation-en -Reading package lists...' aptget update #-o debug::pkgacquire=1 -o debug::pkgacquire::worker=1 - -msgtest 'Test redirection works in' 'package download' -testsuccess --nomsg aptget install unrelated --download-only -y +testrun() { + msgtest 'Test redirection works in' 'apt-get update' + testsuccess --nomsg aptget update + + # check that I-M-S header is kept in redirections + testequal "Hit $1 unstable InRelease +Hit $1 unstable/main Sources +Hit $1 unstable/main amd64 Packages +Hit $1 unstable/main Translation-en +Reading package lists..." aptget update + + msgtest 'Test redirection works in' 'package download' + testsuccess --nomsg aptget install unrelated --download-only -y +} + +testrun 'http://localhost:8080' + +rm -rf rootdir/var/lib/apt/lists rootdir/var/cache/apt/archives +changetohttpswebserver + +testrun 'https://localhost:4433' diff --git a/test/interactive-helper/aptwebserver.cc b/test/interactive-helper/aptwebserver.cc index b7663a76a..992f802a6 100644 --- a/test/interactive-helper/aptwebserver.cc +++ b/test/interactive-helper/aptwebserver.cc @@ -197,9 +197,14 @@ void sendRedirect(int const client, int const httpcode, std::string const &uri,/ response.append(request).append(""); addDataHeaders(headers, response); std::string location("Location: "); - if (strncmp(uri.c_str(), "http://", 7) != 0) + if (strncmp(uri.c_str(), "http://", 7) != 0 && strncmp(uri.c_str(), "https://", 8) != 0) { - location.append("http://").append(LookupTag(request, "Host")).append("/"); + std::string const host = LookupTag(request, "Host"); + if (host.find(":4433") != std::string::npos) + location.append("https://"); + else + location.append("http://"); + location.append(host).append("/"); if (strncmp("/home/", uri.c_str(), strlen("/home/")) == 0 && uri.find("/public_html/") != std::string::npos) { std::string homeuri = SubstVar(uri, "/home/", "~"); @@ -507,7 +512,8 @@ void * handleClient(void * voidclient) /*{{{*/ std::string redirect = "/" + filename; for (::Configuration::Item *I = Replaces->Child; I != NULL; I = I->Next) redirect = SubstVar(redirect, I->Tag, I->Value); - redirect.erase(0,1); + if (redirect.empty() == false && redirect[0] == '/') + redirect.erase(0,1); if (redirect != filename) { sendRedirect(client, 301, redirect, *m, sendContent); @@ -542,7 +548,13 @@ void * handleClient(void * voidclient) /*{{{*/ } // deal with the request - if (RealFileExists(filename) == true) + if (_config->FindB("aptwebserver::support::http", true) == false && + LookupTag(*m, "Host").find(":4433") == std::string::npos) + { + sendError(client, 400, *m, sendContent, "HTTP disabled, all requests must be HTTPS"); + continue; + } + else if (RealFileExists(filename) == true) { FileFd data(filename, FileFd::ReadOnly); std::string condition = LookupTag(*m, "If-Modified-Since", ""); -- cgit v1.2.3-70-g09d2 From 9082a1fc7be02f58cbe18a34539c6a3436463dd0 Mon Sep 17 00:00:00 2001 From: David Kalnischkies Date: Fri, 14 Feb 2014 00:30:58 +0100 Subject: allow http protocol to switch to https switch protocols at random is a bad idea if e.g. http can switch to file, so we limit the possibilities to http to http and http to https. As very few people (less than 1% according to popcon) have https installed this likely changes nothing in terms of failure. The commit is adding a friendly hint which package needs to be installed though. --- apt-pkg/acquire-worker.cc | 7 +++- methods/server.cc | 14 ++++--- test/integration/framework | 2 +- test/integration/test-bug-738785-switch-protocol | 52 ++++++++++++++++++++++++ 4 files changed, 68 insertions(+), 7 deletions(-) create mode 100755 test/integration/test-bug-738785-switch-protocol (limited to 'test/integration') diff --git a/apt-pkg/acquire-worker.cc b/apt-pkg/acquire-worker.cc index 44a84216a..44c3e4e17 100644 --- a/apt-pkg/acquire-worker.cc +++ b/apt-pkg/acquire-worker.cc @@ -109,7 +109,12 @@ bool pkgAcquire::Worker::Start() // Get the method path string Method = _config->FindDir("Dir::Bin::Methods") + Access; if (FileExists(Method) == false) - return _error->Error(_("The method driver %s could not be found."),Method.c_str()); + { + _error->Error(_("The method driver %s could not be found."),Method.c_str()); + if (Access == "https") + _error->Notice(_("Is the package %s installed?"), "apt-transport-https"); + return false; + } if (Debug == true) clog << "Starting method '" << Method << '\'' << endl; diff --git a/methods/server.cc b/methods/server.cc index 76faa7e7f..6dd3970a6 100644 --- a/methods/server.cc +++ b/methods/server.cc @@ -291,11 +291,15 @@ ServerMethod::DealWithHeaders(FetchResult &Res) } else { - NextURI = DeQuoteString(Server->Location); - URI tmpURI = NextURI; - // Do not allow a redirection to switch protocol - if (tmpURI.Access == "http") - return TRY_AGAIN_OR_REDIRECT; + NextURI = DeQuoteString(Server->Location); + URI tmpURI = NextURI; + URI Uri = Queue->Uri; + // same protocol redirects are okay + if (tmpURI.Access == Uri.Access) + return TRY_AGAIN_OR_REDIRECT; + // as well as http to https + else if (Uri.Access == "http" && tmpURI.Access == "https") + return TRY_AGAIN_OR_REDIRECT; } /* else pass through for error message */ } diff --git a/test/integration/framework b/test/integration/framework index 5b9a58568..f3699861b 100644 --- a/test/integration/framework +++ b/test/integration/framework @@ -190,7 +190,7 @@ setupenvironment() { mkdir -p var/lib/dpkg/info var/lib/dpkg/updates var/lib/dpkg/triggers touch var/lib/dpkg/available mkdir -p usr/lib/apt - ln -s ${BUILDDIRECTORY}/methods usr/lib/apt/methods + ln -s ${METHODSDIR} usr/lib/apt/methods cd .. local PACKAGESFILE=$(echo "$(basename $0)" | sed -e 's/^test-/Packages-/' -e 's/^skip-/Packages-/') if [ -f "${TESTDIRECTORY}/${PACKAGESFILE}" ]; then diff --git a/test/integration/test-bug-738785-switch-protocol b/test/integration/test-bug-738785-switch-protocol new file mode 100755 index 000000000..d3469f34f --- /dev/null +++ b/test/integration/test-bug-738785-switch-protocol @@ -0,0 +1,52 @@ +#!/bin/sh +set -e + +TESTDIR=$(readlink -f $(dirname $0)) +. $TESTDIR/framework + +setupenvironment +configarchitecture "i386" + +buildsimplenativepackage 'apt' 'all' '1.0' 'stable' + +# setup http redirecting to https +setupaptarchive --no-update +changetowebserver -o 'aptwebserver::redirect::replace::/redirectme/=https://localhost:4433/' \ + -o 'aptwebserver::support::http=false' +changetohttpswebserver +sed -i -e 's#:4433/#:8080/redirectme#' -e 's# https:# http:#' rootdir/etc/apt/sources.list.d/* + +testsuccess aptget update -o Debug::Acquire::http=1 -o Debug::Acquire::https=1 -o Debug::pkgAcquire::Worker=1 + +msgtest 'Test that the webserver does not answer' 'http requests' +downloadfile 'http://localhost:8080//pool/apt_1.0/changelog' >/dev/null 2>&1 && msgfail || msgpass + +echo 'Apt::Changelogs::Server "http://localhost:8080/redirectme";' > rootdir/etc/apt/apt.conf.d/changelog.conf +testequal "'http://localhost:8080/redirectme/pool/apt_1.0/changelog'" aptget changelog apt --print-uris + +testsuccess aptget changelog apt -d +testsuccess test -s apt.changelog +rm -f apt.changelog + +testsuccess aptget download apt +testsuccess test -s apt_1.0_all.deb +rm apt_1.0_all.deb + +testsuccess aptget install apt -y +testdpkginstalled 'apt' + +# create a copy of all methods, expect https +eval `aptconfig shell METHODS Dir::Bin::Methods/d` +COPYMETHODS='usr/lib/apt/methods' +rm rootdir/$COPYMETHODS +mkdir -p rootdir/$COPYMETHODS +cd rootdir/$COPYMETHODS +find $METHODS \! -type d | while read meth; do + ln -s $meth +done +rm https +cd - >/dev/null +echo "Dir::Bin::Methods \"${COPYMETHODS}\";" >> aptconfig.conf + +aptget download apt +testsuccess test ! -e apt_1.0_all.deb -- cgit v1.2.3-70-g09d2 From 75b093128e7ced667f8ed89a5367af461e727736 Mon Sep 17 00:00:00 2001 From: David Kalnischkies Date: Fri, 14 Feb 2014 00:44:06 +0100 Subject: enforce 'house-style' on changelog testcase Git-Dch: Ignore --- test/integration/test-apt-get-changelog | 10 +++++----- 1 file changed, 5 insertions(+), 5 deletions(-) (limited to 'test/integration') diff --git a/test/integration/test-apt-get-changelog b/test/integration/test-apt-get-changelog index d013cc458..a73c3e249 100755 --- a/test/integration/test-apt-get-changelog +++ b/test/integration/test-apt-get-changelog @@ -9,11 +9,11 @@ configarchitecture "i386" buildsimplenativepackage 'apt' 'all' '1.0' 'stable' -setupaptarchive +setupaptarchive --no-update changetowebserver -aptget update -qq +testsuccess aptget update -echo 'Apt::Changelogs::Server "http://localhost:8080/";' >> ./aptconfig.conf +echo 'Apt::Changelogs::Server "http://localhost:8080/";' > rootdir/etc/apt/apt.conf.d/changelog.conf testequal "'http://localhost:8080//pool/apt_1.0/changelog'" aptget changelog apt --print-uris @@ -24,7 +24,7 @@ aptget changelog apt -qq > apt.changelog testfileequal 'apt.changelog' "$(cat aptarchive/pool/apt_1.0/changelog)" rm apt.changelog -aptget changelog apt -d -qq +testsuccess aptget changelog apt -d testfileequal 'apt.changelog' "$(cat aptarchive/pool/apt_1.0/changelog)" rm apt.changelog aptarchive/pool/apt_1.0/changelog @@ -32,7 +32,7 @@ aptget changelog apt -qq -o APT::Changelogs::Server='http://not-on-the-main-serv testfileequal 'apt.changelog' "$(cat aptarchive/pool/apt_1.0.changelog)" rm apt.changelog -aptget changelog apt -d -qq +testsuccess aptget changelog apt -d testfileequal 'apt.changelog' "$(cat aptarchive/pool/apt_1.0.changelog)" rm apt.changelog aptarchive/pool/apt_1.0.changelog -- cgit v1.2.3-70-g09d2 From 3f621056f7f672988c0efc6d38935c22b5ae041f Mon Sep 17 00:00:00 2001 From: Michael Vogt Date: Fri, 14 Feb 2014 17:32:42 +0100 Subject: test/integration/test-bug-723705-tagfile-truncates-fields: fix autopkgtest failure --- test/integration/test-bug-723705-tagfile-truncates-fields | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) (limited to 'test/integration') diff --git a/test/integration/test-bug-723705-tagfile-truncates-fields b/test/integration/test-bug-723705-tagfile-truncates-fields index 3180e7fc9..29f98550c 100755 --- a/test/integration/test-bug-723705-tagfile-truncates-fields +++ b/test/integration/test-bug-723705-tagfile-truncates-fields @@ -8,7 +8,7 @@ configarchitecture 'amd64' setupaptarchive -aptget install --print-uris -y cdebconf-newt-terminal cdebconf-gtk-terminal 2>&1 | sed 's#file:///tmp/tmp.[^/]\+#file:///tmp#g' > filename.log +aptget install --print-uris -y cdebconf-newt-terminal cdebconf-gtk-terminal 2>&1 | sed "s#file://${TMPWORKINGDIRECTORY}#file:///tmp#g" > filename.log testfileequal filename.log "Reading package lists... Building dependency tree... -- cgit v1.2.3-70-g09d2 From dc95fee18e8df2b00404c7d0f321f5b78e00f170 Mon Sep 17 00:00:00 2001 From: Michael Vogt Date: Fri, 14 Feb 2014 17:11:07 +0100 Subject: disable https->http redirects in libcurl This change prevents changing the protocol from https to http. --- methods/https.cc | 3 +++ test/integration/framework | 2 +- test/integration/test-apt-https-no-redirect | 24 ++++++++++++++++++++++++ test/integration/test-bug-738785-switch-protocol | 2 +- 4 files changed, 29 insertions(+), 2 deletions(-) create mode 100755 test/integration/test-apt-https-no-redirect (limited to 'test/integration') diff --git a/methods/https.cc b/methods/https.cc index d97fddf9e..9422df2f0 100644 --- a/methods/https.cc +++ b/methods/https.cc @@ -185,8 +185,11 @@ bool HttpsMethod::Fetch(FetchItem *Itm) curl_easy_setopt(curl, CURLOPT_WRITEDATA, this); curl_easy_setopt(curl, CURLOPT_PROGRESSFUNCTION, progress_callback); curl_easy_setopt(curl, CURLOPT_PROGRESSDATA, this); + // options curl_easy_setopt(curl, CURLOPT_NOPROGRESS, false); curl_easy_setopt(curl, CURLOPT_FILETIME, true); + // only allow redirects to https + curl_easy_setopt(curl, CURLOPT_REDIR_PROTOCOLS, CURLPROTO_HTTPS); // SSL parameters are set by default to the common (non mirror-specific) value // if available (or a default one) and gets overload by mirror-specific ones. diff --git a/test/integration/framework b/test/integration/framework index f3699861b..e4f018472 100644 --- a/test/integration/framework +++ b/test/integration/framework @@ -901,7 +901,7 @@ changetohttpswebserver() { msgdie 'You need to install stunnel4 for https testcases' fi if [ ! -e "${TMPWORKINGDIRECTORY}/aptarchive/aptwebserver.pid" ]; then - changetowebserver --no-rewrite + changetowebserver --no-rewrite "$@" fi echo "pid = ${TMPWORKINGDIRECTORY}/aptarchive/stunnel.pid cert = ${TESTDIRECTORY}/apt.pem diff --git a/test/integration/test-apt-https-no-redirect b/test/integration/test-apt-https-no-redirect new file mode 100755 index 000000000..c405d1167 --- /dev/null +++ b/test/integration/test-apt-https-no-redirect @@ -0,0 +1,24 @@ +#!/bin/sh +set -e + +TESTDIR=$(readlink -f $(dirname $0)) +. $TESTDIR/framework + +setupenvironment +configarchitecture "i386" + +buildsimplenativepackage 'apt' 'all' '1.0' 'stable' +setupaptarchive --no-update + +changetohttpswebserver -o 'aptwebserver::redirect::replace::/redirectme/=http://localhost:8080/' + +msgtest 'normal http download works' +downloadfile 'http://localhost:8080/pool/apt_1.0/changelog' changelog2 >/dev/null 2>/dev/null && msgpass || msgfail + +msgtest 'normal https download works' +downloadfile 'https://localhost:4433/pool/apt_1.0/changelog' changelog >/dev/null 2>/dev/null && msgpass || msgfail + +msgtest 'redirecting https to http does not work' +downloadfile 'https://localhost:4433/redirectme/pool/apt_1.0/changelog' changelog3 2>&1 | grep "Protocol http not supported or disabled in libcurl" > /dev/null && msgpass + + diff --git a/test/integration/test-bug-738785-switch-protocol b/test/integration/test-bug-738785-switch-protocol index d3469f34f..bc3c6dbad 100755 --- a/test/integration/test-bug-738785-switch-protocol +++ b/test/integration/test-bug-738785-switch-protocol @@ -19,7 +19,7 @@ sed -i -e 's#:4433/#:8080/redirectme#' -e 's# https:# http:#' rootdir/etc/apt/so testsuccess aptget update -o Debug::Acquire::http=1 -o Debug::Acquire::https=1 -o Debug::pkgAcquire::Worker=1 msgtest 'Test that the webserver does not answer' 'http requests' -downloadfile 'http://localhost:8080//pool/apt_1.0/changelog' >/dev/null 2>&1 && msgfail || msgpass +downloadfile 'http://localhost:8080/pool/apt_1.0/changelog' changelog >/dev/null 2>&1 && msgfail || msgpass echo 'Apt::Changelogs::Server "http://localhost:8080/redirectme";' > rootdir/etc/apt/apt.conf.d/changelog.conf testequal "'http://localhost:8080/redirectme/pool/apt_1.0/changelog'" aptget changelog apt --print-uris -- cgit v1.2.3-70-g09d2 From 5543218acdbbeef1d9f6d118e0b86a765c341430 Mon Sep 17 00:00:00 2001 From: David Kalnischkies Date: Fri, 14 Feb 2014 18:35:35 +0100 Subject: honor option to disable pulses for the testcases Git-Dch: Ignore --- apt-private/acqprogress.cc | 7 +++++-- apt-private/acqprogress.h | 2 +- test/integration/test-bug-738785-switch-protocol | 3 ++- 3 files changed, 8 insertions(+), 4 deletions(-) (limited to 'test/integration') diff --git a/apt-private/acqprogress.cc b/apt-private/acqprogress.cc index af2d0f461..3aafea4f2 100644 --- a/apt-private/acqprogress.cc +++ b/apt-private/acqprogress.cc @@ -30,10 +30,13 @@ using namespace std; // AcqTextStatus::AcqTextStatus - Constructor /*{{{*/ // --------------------------------------------------------------------- /* */ -AcqTextStatus::AcqTextStatus(unsigned int &ScreenWidth,unsigned int Quiet) : - ScreenWidth(ScreenWidth), ID(0), Quiet(Quiet) +AcqTextStatus::AcqTextStatus(unsigned int &ScreenWidth,unsigned int const Quiet) : + pkgAcquireStatus(), ScreenWidth(ScreenWidth), ID(0), Quiet(Quiet) { BlankLine[0] = 0; + // testcases use it to disable pulses without disabling other user messages + if (_config->FindB("quiet::NoUpdate", false) == true) + this->Quiet = 1; } /*}}}*/ // AcqTextStatus::Start - Downloading has started /*{{{*/ diff --git a/apt-private/acqprogress.h b/apt-private/acqprogress.h index e47bfb72d..e12dafe50 100644 --- a/apt-private/acqprogress.h +++ b/apt-private/acqprogress.h @@ -32,7 +32,7 @@ class AcqTextStatus : public pkgAcquireStatus bool Pulse(pkgAcquire *Owner); - AcqTextStatus(unsigned int &ScreenWidth,unsigned int Quiet); + AcqTextStatus(unsigned int &ScreenWidth,unsigned int const Quiet); }; #endif diff --git a/test/integration/test-bug-738785-switch-protocol b/test/integration/test-bug-738785-switch-protocol index bc3c6dbad..b51be244a 100755 --- a/test/integration/test-bug-738785-switch-protocol +++ b/test/integration/test-bug-738785-switch-protocol @@ -48,5 +48,6 @@ rm https cd - >/dev/null echo "Dir::Bin::Methods \"${COPYMETHODS}\";" >> aptconfig.conf -aptget download apt +testequal "E: The method driver $(pwd)/rootdir/usr/lib/apt/methods/https could not be found. +N: Is the package apt-transport-https installed?" aptget download apt -q=0 testsuccess test ! -e apt_1.0_all.deb -- cgit v1.2.3-70-g09d2 From 889b0072a93a5afe9ffec93ab791d584c64754a0 Mon Sep 17 00:00:00 2001 From: David Kalnischkies Date: Fri, 14 Feb 2014 18:59:46 +0100 Subject: add a testcase to check for forbidden https→http downgrades MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Git-Dch: Ignore --- methods/https.cc | 3 ++- test/integration/framework | 2 +- test/integration/test-bug-738785-switch-protocol | 12 +++++++++++- 3 files changed, 14 insertions(+), 3 deletions(-) (limited to 'test/integration') diff --git a/methods/https.cc b/methods/https.cc index 9422df2f0..e713be19f 100644 --- a/methods/https.cc +++ b/methods/https.cc @@ -188,7 +188,8 @@ bool HttpsMethod::Fetch(FetchItem *Itm) // options curl_easy_setopt(curl, CURLOPT_NOPROGRESS, false); curl_easy_setopt(curl, CURLOPT_FILETIME, true); - // only allow redirects to https + // only allow curl to handle https, not the other stuff it supports + curl_easy_setopt(curl, CURLOPT_PROTOCOLS, CURLPROTO_HTTPS); curl_easy_setopt(curl, CURLOPT_REDIR_PROTOCOLS, CURLPROTO_HTTPS); // SSL parameters are set by default to the common (non mirror-specific) value diff --git a/test/integration/framework b/test/integration/framework index e4f018472..08d796a10 100644 --- a/test/integration/framework +++ b/test/integration/framework @@ -1119,7 +1119,7 @@ testfailure() { if [ "$1" = '--nomsg' ]; then shift else - msgtest 'Test for failure in execution of' "$*" + msgtest 'Test for failure in execution of' "$*" fi local OUTPUT="${TMPWORKINGDIRECTORY}/rootdir/tmp/testfailure.output" if $@ >${OUTPUT} 2>&1; then diff --git a/test/integration/test-bug-738785-switch-protocol b/test/integration/test-bug-738785-switch-protocol index b51be244a..1e5748eae 100755 --- a/test/integration/test-bug-738785-switch-protocol +++ b/test/integration/test-bug-738785-switch-protocol @@ -12,6 +12,7 @@ buildsimplenativepackage 'apt' 'all' '1.0' 'stable' # setup http redirecting to https setupaptarchive --no-update changetowebserver -o 'aptwebserver::redirect::replace::/redirectme/=https://localhost:4433/' \ + -o 'aptwebserver::redirect::replace::/downgrademe/=http://localhost:8080/' \ -o 'aptwebserver::support::http=false' changetohttpswebserver sed -i -e 's#:4433/#:8080/redirectme#' -e 's# https:# http:#' rootdir/etc/apt/sources.list.d/* @@ -38,7 +39,7 @@ testdpkginstalled 'apt' # create a copy of all methods, expect https eval `aptconfig shell METHODS Dir::Bin::Methods/d` COPYMETHODS='usr/lib/apt/methods' -rm rootdir/$COPYMETHODS +mv rootdir/${COPYMETHODS} rootdir/${COPYMETHODS}.bak mkdir -p rootdir/$COPYMETHODS cd rootdir/$COPYMETHODS find $METHODS \! -type d | while read meth; do @@ -51,3 +52,12 @@ echo "Dir::Bin::Methods \"${COPYMETHODS}\";" >> aptconfig.conf testequal "E: The method driver $(pwd)/rootdir/usr/lib/apt/methods/https could not be found. N: Is the package apt-transport-https installed?" aptget download apt -q=0 testsuccess test ! -e apt_1.0_all.deb + +# revert to all methods +rm -rf rootdir/$COPYMETHODS +mv rootdir/${COPYMETHODS}.bak rootdir/${COPYMETHODS} + +# check that downgrades from https to http are not allowed +webserverconfig 'aptwebserver::support::http' 'true' +sed -i -e 's#:8080/redirectme#:4433/downgrademe#' -e 's# http:# https:#' rootdir/etc/apt/sources.list.d/* +testfailure aptget update -- cgit v1.2.3-70-g09d2 From e5bdcc8708ee571a7d7d54bbdfa7e226300344ea Mon Sep 17 00:00:00 2001 From: Michael Vogt Date: Mon, 5 Nov 2012 11:31:29 +0100 Subject: add testcase for the autoremove feature Conflicts: debian/apt.auto-removal.sh --- test/integration/test-kernel-helper-autoremove | 33 ++++++++++++++++++++++ .../test-kernel-helper-autoremove.fake-dpkg | 13 +++++++++ 2 files changed, 46 insertions(+) create mode 100755 test/integration/test-kernel-helper-autoremove create mode 100644 test/integration/test-kernel-helper-autoremove.fake-dpkg (limited to 'test/integration') diff --git a/test/integration/test-kernel-helper-autoremove b/test/integration/test-kernel-helper-autoremove new file mode 100755 index 000000000..a4c31283e --- /dev/null +++ b/test/integration/test-kernel-helper-autoremove @@ -0,0 +1,33 @@ +#!/bin/sh + +set -e + +# setup testdir +TESTDIR=$(readlink -f $(dirname $0)) +. $TESTDIR/framework + +TMPDIR=$(mktemp -d) +cd $TMPDIR +addtrap "cd /; rm -rf $TMPDIR" + +# create mock environment +mkdir apt.conf.d +cat > aptconfig.conf < Date: Mon, 5 Nov 2012 11:39:47 +0100 Subject: also check that the running kernel is kept --- test/integration/test-kernel-helper-autoremove | 4 +++- test/integration/test-kernel-helper-autoremove.fake-dpkg | 2 +- 2 files changed, 4 insertions(+), 2 deletions(-) (limited to 'test/integration') diff --git a/test/integration/test-kernel-helper-autoremove b/test/integration/test-kernel-helper-autoremove index a4c31283e..4c0571b13 100755 --- a/test/integration/test-kernel-helper-autoremove +++ b/test/integration/test-kernel-helper-autoremove @@ -28,6 +28,8 @@ sh ${TESTDIR}/../../debian/apt.auto-removal.sh # and ensure its there, valid and version 10.0.0-1 is there too test -e $TMPDIR/apt.conf.d/01autoremove-kernels apt-config -c ${APT_CONFIG} dump|grep -q "APT::NeverAutoRemove::.*\^linux-image-10.0.0-1-generic\.\*" +# ... and also that the running kernel is exlucded +apt-config -c ${APT_CONFIG} dump|grep -q "APT::NeverAutoRemove::.*\^linux-image-$(uname -r)\.\*" # done -msgpass \ No newline at end of file +msgpass diff --git a/test/integration/test-kernel-helper-autoremove.fake-dpkg b/test/integration/test-kernel-helper-autoremove.fake-dpkg index aec6d4418..a365c5370 100644 --- a/test/integration/test-kernel-helper-autoremove.fake-dpkg +++ b/test/integration/test-kernel-helper-autoremove.fake-dpkg @@ -3,7 +3,7 @@ set -e if [ "$1" = "-l" ]; then echo "ii linux-image-1.0.0-2-generic 1.0.01-2 amd64" - echo "ii linux-image-3.5.0-17-generic 3.5.0-17 amd64" + echo "ii linux-image-$(uname -r) not-used amd64" echo "ii linux-image-10.0.0-1-generic 10.0.0.1-1 amd64" elif [ "$1" = "--compare-versions" ]; then dpkg "$1" "$2" "$3" "$4" -- cgit v1.2.3-70-g09d2 From d27a691d72c8cc07767e92ae94bdfe391d9e9513 Mon Sep 17 00:00:00 2001 From: Steve Langasek Date: Mon, 5 Nov 2012 12:32:50 -0800 Subject: typo fix --- test/integration/test-kernel-helper-autoremove | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) (limited to 'test/integration') diff --git a/test/integration/test-kernel-helper-autoremove b/test/integration/test-kernel-helper-autoremove index 4c0571b13..52fa01bc5 100755 --- a/test/integration/test-kernel-helper-autoremove +++ b/test/integration/test-kernel-helper-autoremove @@ -28,7 +28,7 @@ sh ${TESTDIR}/../../debian/apt.auto-removal.sh # and ensure its there, valid and version 10.0.0-1 is there too test -e $TMPDIR/apt.conf.d/01autoremove-kernels apt-config -c ${APT_CONFIG} dump|grep -q "APT::NeverAutoRemove::.*\^linux-image-10.0.0-1-generic\.\*" -# ... and also that the running kernel is exlucded +# ... and also that the running kernel is excluded apt-config -c ${APT_CONFIG} dump|grep -q "APT::NeverAutoRemove::.*\^linux-image-$(uname -r)\.\*" # done -- cgit v1.2.3-70-g09d2 From c6918c16c7b98fe709b4f7af5fa1c43f201fb1af Mon Sep 17 00:00:00 2001 From: Steve Langasek Date: Mon, 5 Nov 2012 13:11:39 -0800 Subject: Make the test more verbose and check for the negative case of a kernel that should not be marked not-for-autoremoval --- test/integration/test-kernel-helper-autoremove | 15 +++++++++++---- 1 file changed, 11 insertions(+), 4 deletions(-) (limited to 'test/integration') diff --git a/test/integration/test-kernel-helper-autoremove b/test/integration/test-kernel-helper-autoremove index 52fa01bc5..37c1b6a43 100755 --- a/test/integration/test-kernel-helper-autoremove +++ b/test/integration/test-kernel-helper-autoremove @@ -25,11 +25,18 @@ install -m755 $TESTDIR/test-kernel-helper-autoremove.fake-dpkg $TMPDIR/fake-dpkg # run the helper sh ${TESTDIR}/../../debian/apt.auto-removal.sh +msgtest 'Check that kernel autoremoval list is correctly created' # and ensure its there, valid and version 10.0.0-1 is there too -test -e $TMPDIR/apt.conf.d/01autoremove-kernels -apt-config -c ${APT_CONFIG} dump|grep -q "APT::NeverAutoRemove::.*\^linux-image-10.0.0-1-generic\.\*" +test -e $TMPDIR/apt.conf.d/01autoremove-kernels && msgpass || msgfail + +msgtest 'Check that most recent kernel is saved from autoremoval' +apt-config -c ${APT_CONFIG} dump|grep -q "APT::NeverAutoRemove::.*\^linux-image-10.0.0-1-generic\.\*" && msgpass || msgfail + # ... and also that the running kernel is excluded -apt-config -c ${APT_CONFIG} dump|grep -q "APT::NeverAutoRemove::.*\^linux-image-$(uname -r)\.\*" +msgtest 'Check that running kernel is saved from autoremoval' +apt-config -c ${APT_CONFIG} dump|grep -q "APT::NeverAutoRemove::.*\^linux-image-$(uname -r)\.\*" && msgpass || msgfail +# and that the old kernel is *not* excluded from autoremoval +msgtest 'Check that older kernels are not excluded from autoremoval' +apt-config -c ${APT_CONFIG} dump | grep -q "APT::NeverAutoRemove::.*\^linux-image-1\.0\.0-2-generic\.\*" && msgfail || msgpass # done -msgpass -- cgit v1.2.3-70-g09d2 From d269b88d95686b77a170af203d0f4a7e44d28fc8 Mon Sep 17 00:00:00 2001 From: Steve Langasek Date: Mon, 5 Nov 2012 14:44:59 -0800 Subject: Additional test for the case when installed version != newest version --- test/integration/test-kernel-helper-autoremove | 17 +++++++++++++++-- 1 file changed, 15 insertions(+), 2 deletions(-) (limited to 'test/integration') diff --git a/test/integration/test-kernel-helper-autoremove b/test/integration/test-kernel-helper-autoremove index 37c1b6a43..ffcd3963a 100755 --- a/test/integration/test-kernel-helper-autoremove +++ b/test/integration/test-kernel-helper-autoremove @@ -23,7 +23,7 @@ export APT_CONFIG install -m755 $TESTDIR/test-kernel-helper-autoremove.fake-dpkg $TMPDIR/fake-dpkg # run the helper -sh ${TESTDIR}/../../debian/apt.auto-removal.sh +sh ${TESTDIR}/../../debian/apt.auto-removal.sh msgtest 'Check that kernel autoremoval list is correctly created' # and ensure its there, valid and version 10.0.0-1 is there too @@ -38,5 +38,18 @@ apt-config -c ${APT_CONFIG} dump|grep -q "APT::NeverAutoRemove::.*\^linux-image- # and that the old kernel is *not* excluded from autoremoval msgtest 'Check that older kernels are not excluded from autoremoval' -apt-config -c ${APT_CONFIG} dump | grep -q "APT::NeverAutoRemove::.*\^linux-image-1\.0\.0-2-generic\.\*" && msgfail || msgpass +apt-config -c ${APT_CONFIG} dump|grep -q "APT::NeverAutoRemove::.*\^linux-image-1\.0\.01-2-generic\.\*" && msgfail || msgpass + +msgtest "Check that the older kernel is retained when it's being installed" +sh ${TESTDIR}/../../debian/apt.auto-removal.sh 1.0.01-2-generic +test -e $TMPDIR/apt.conf.d/01autoremove-kernels +if ! apt-config -c ${APT_CONFIG} dump|grep -q "APT::NeverAutoRemove::.*\^linux-image-10.0.0-1-generic\.\*" \ + || ! apt-config -c ${APT_CONFIG} dump|grep -q "APT::NeverAutoRemove::.*\^linux-image-$(uname -r)\.\*" \ + || ! apt-config -c ${APT_CONFIG} dump|grep -q "APT::NeverAutoRemove::.*\^linux-image-1\.0\.01-2-generic\.\*" +then + msgfail +else + msgpass +fi + # done -- cgit v1.2.3-70-g09d2 From f2f53128c01f0620ab21c312cd6601d903aaae3c Mon Sep 17 00:00:00 2001 From: Michael Vogt Date: Fri, 14 Feb 2014 22:01:35 +0100 Subject: fix the test-kernel-helper-autoremove testcase --- test/integration/test-kernel-helper-autoremove | 12 ++++++------ 1 file changed, 6 insertions(+), 6 deletions(-) (limited to 'test/integration') diff --git a/test/integration/test-kernel-helper-autoremove b/test/integration/test-kernel-helper-autoremove index ffcd3963a..2b165d100 100755 --- a/test/integration/test-kernel-helper-autoremove +++ b/test/integration/test-kernel-helper-autoremove @@ -30,22 +30,22 @@ msgtest 'Check that kernel autoremoval list is correctly created' test -e $TMPDIR/apt.conf.d/01autoremove-kernels && msgpass || msgfail msgtest 'Check that most recent kernel is saved from autoremoval' -apt-config -c ${APT_CONFIG} dump|grep -q "APT::NeverAutoRemove::.*\^linux-image-10.0.0-1-generic\.\*" && msgpass || msgfail +apt-config -c ${APT_CONFIG} dump|grep -q "APT::NeverAutoRemove::.*\^linux-image-10.0.0-1-generic" && msgpass || msgfail # ... and also that the running kernel is excluded msgtest 'Check that running kernel is saved from autoremoval' -apt-config -c ${APT_CONFIG} dump|grep -q "APT::NeverAutoRemove::.*\^linux-image-$(uname -r)\.\*" && msgpass || msgfail +apt-config -c ${APT_CONFIG} dump|grep -q "APT::NeverAutoRemove::.*\^linux-image-$(uname -r)" && msgpass || msgfail # and that the old kernel is *not* excluded from autoremoval msgtest 'Check that older kernels are not excluded from autoremoval' -apt-config -c ${APT_CONFIG} dump|grep -q "APT::NeverAutoRemove::.*\^linux-image-1\.0\.01-2-generic\.\*" && msgfail || msgpass +apt-config -c ${APT_CONFIG} dump|grep -q "APT::NeverAutoRemove::.*\^linux-image-1\.0\.01-2-generic" && msgfail || msgpass msgtest "Check that the older kernel is retained when it's being installed" sh ${TESTDIR}/../../debian/apt.auto-removal.sh 1.0.01-2-generic test -e $TMPDIR/apt.conf.d/01autoremove-kernels -if ! apt-config -c ${APT_CONFIG} dump|grep -q "APT::NeverAutoRemove::.*\^linux-image-10.0.0-1-generic\.\*" \ - || ! apt-config -c ${APT_CONFIG} dump|grep -q "APT::NeverAutoRemove::.*\^linux-image-$(uname -r)\.\*" \ - || ! apt-config -c ${APT_CONFIG} dump|grep -q "APT::NeverAutoRemove::.*\^linux-image-1\.0\.01-2-generic\.\*" +if ! apt-config -c ${APT_CONFIG} dump|grep -q "APT::NeverAutoRemove::.*\^linux-image-10.0.0-1-generic" \ + || ! apt-config -c ${APT_CONFIG} dump|grep -q "APT::NeverAutoRemove::.*\^linux-image-$(uname -r)" \ + || ! apt-config -c ${APT_CONFIG} dump|grep -q "APT::NeverAutoRemove::.*\^linux-image-1\.0\.01-2-generic" then msgfail else -- cgit v1.2.3-70-g09d2 From 1e3f4083db29bba600b9725e9456b0e140975c99 Mon Sep 17 00:00:00 2001 From: Michael Vogt Date: Sat, 22 Feb 2014 18:34:33 +0100 Subject: Fix typos in documentation (codespell) --- COMPILING | 2 +- README.ddtp | 4 ++-- README.make | 2 +- README.progress-reporting | 2 +- apt-inst/contrib/arfile.cc | 2 +- apt-inst/contrib/extracttar.cc | 2 +- apt-inst/extract.cc | 4 ++-- apt-inst/filelist.cc | 4 ++-- apt-pkg/acquire-item.cc | 20 ++++++++--------- apt-pkg/acquire-worker.cc | 2 +- apt-pkg/acquire.cc | 6 ++--- apt-pkg/algorithms.cc | 12 +++++----- apt-pkg/algorithms.h | 4 ++-- apt-pkg/aptconfiguration.cc | 8 +++---- apt-pkg/aptconfiguration.h | 10 ++++----- apt-pkg/cacheiterators.h | 6 ++--- apt-pkg/cdrom.h | 2 +- apt-pkg/clean.cc | 2 +- apt-pkg/contrib/cdromutl.cc | 4 ++-- apt-pkg/contrib/cmndline.cc | 2 +- apt-pkg/contrib/crc-16.cc | 2 +- apt-pkg/contrib/error.h | 2 +- apt-pkg/contrib/fileutl.cc | 6 ++--- apt-pkg/contrib/gpgv.h | 2 +- apt-pkg/contrib/macros.h | 2 +- apt-pkg/contrib/md5.h | 2 +- apt-pkg/contrib/mmap.h | 4 ++-- apt-pkg/contrib/progress.h | 2 +- apt-pkg/contrib/sha2_internal.cc | 2 +- apt-pkg/contrib/strutl.cc | 10 ++++----- apt-pkg/deb/deblistparser.cc | 2 +- apt-pkg/deb/debsystem.cc | 2 +- apt-pkg/deb/debversion.cc | 4 ++-- apt-pkg/depcache.cc | 6 ++--- apt-pkg/depcache.h | 2 +- apt-pkg/edsp.h | 6 ++--- apt-pkg/indexfile.h | 4 ++-- apt-pkg/orderlist.cc | 8 +++---- apt-pkg/packagemanager.cc | 16 ++++++------- apt-pkg/pkgcache.cc | 4 ++-- apt-pkg/pkgcache.h | 2 +- apt-pkg/pkgsystem.h | 4 ++-- apt-pkg/upgrade.cc | 2 +- buildlib/fail.mak | 2 +- buildlib/program.mak | 2 +- cmdline/apt-config.cc | 2 +- cmdline/apt-get.cc | 4 ++-- cmdline/apt-internal-solver.cc | 6 ++--- cmdline/apt-key.in | 4 ++-- configure.ac | 2 +- debian/apt.cron.daily | 4 ++-- debian/changelog | 4 ++++ doc/Bugs | 8 +++---- doc/design.sgml | 2 +- doc/dpkg-tech.sgml | 6 ++--- doc/examples/configure-index | 2 +- doc/files.sgml | 2 +- doc/libapt-pkg2_to_3.txt | 4 ++-- doc/method.sgml | 6 ++--- doc/style.txt | 8 +++---- ftparchive/apt-ftparchive.cc | 2 +- methods/file.cc | 2 +- methods/ftp.cc | 4 ++-- methods/ftp.h | 2 +- methods/http.cc | 4 ++-- methods/http.h | 2 +- methods/https.cc | 4 ++-- methods/https.h | 2 +- methods/mirror.cc | 6 ++--- methods/mirror.h | 2 +- methods/rfc2553emu.h | 2 +- methods/rsh.cc | 2 +- methods/server.cc | 6 ++--- test/integration/framework | 2 +- test/integration/test-apt-get-source | 2 +- ...17690-allow-unauthenticated-makes-all-untrusted | 2 +- .../test-sourceslist-arch-plusminus-options | 2 +- test/libapt/globalerror_test.cc | 26 +++++++++++----------- 78 files changed, 171 insertions(+), 167 deletions(-) (limited to 'test/integration') diff --git a/COMPILING b/COMPILING index bc934c846..1076c6366 100644 --- a/COMPILING +++ b/COMPILING @@ -27,7 +27,7 @@ I am not interested in making 'ultra portable code'. I will accept patches to make the code that already exists conform more to SUS or POSIX, but I don't really care if your not-SUS OS doesn't work. It is simply too much work to maintain patches for dysfunctional OSs. I highly suggest you -contact your vendor and express intrest in a conforming C library. +contact your vendor and express interest in a conforming C library. That said, there are lots of finicky problems that must be dealt with even between the supported OS's. Primarily the path I choose to take is to put diff --git a/README.ddtp b/README.ddtp index 98f6109aa..5865b4e02 100644 --- a/README.ddtp +++ b/README.ddtp @@ -52,7 +52,7 @@ 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 +description of the package with the right md5 chechsum. The environment of the user will controlled this process (LANG, LANGUAGE, LC_MESSAGES, etc). With this the package system will never show a outdated translation. @@ -60,7 +60,7 @@ 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 +Now the first files are accessible at http://ddtp.debian.org/pdesc/translatefiles/ If you found wrong translations, please read the guides on diff --git a/README.make b/README.make index 69d79d37a..db5f36e94 100644 --- a/README.make +++ b/README.make @@ -25,7 +25,7 @@ of these parameters will have an immediate effect. The use of makefile.in and configure substitutions across build makefiles is not used at all. Furthermore, the make system runs with a current directory equal to the -source directory irregardless of the destination directory. This means +source directory regardless of the destination directory. This means #include "" and #include <> work as expected and more importantly running 'make' in the source directory will work as expected. The environment variable or make parameter 'BUILD' sets the build directory. diff --git a/README.progress-reporting b/README.progress-reporting index b575e7879..91c0a8ac0 100644 --- a/README.progress-reporting +++ b/README.progress-reporting @@ -2,7 +2,7 @@ Install-progress reporting -------------------------- If the apt options: "APT::Status-Fd" is set, apt will send status -reports to that fd. The status information is seperated with a ':', +reports to that fd. The status information is separated with a ':', there are the following status conditions: status = {"pmstatus", "dlstatus", "conffile-prompt", "error", "media-change" } diff --git a/apt-inst/contrib/arfile.cc b/apt-inst/contrib/arfile.cc index 9d84c1784..77dbc55d6 100644 --- a/apt-inst/contrib/arfile.cc +++ b/apt-inst/contrib/arfile.cc @@ -6,7 +6,7 @@ AR File - Handle an 'AR' archive AR Archives have plain text headers at the start of each file - section. The headers are aligned on a 2 byte boundry. + section. The headers are aligned on a 2 byte boundary. Information about the structure of AR files can be found in ar(5) on a BSD system, or in the binutils source. diff --git a/apt-inst/contrib/extracttar.cc b/apt-inst/contrib/extracttar.cc index fb4db42f8..2437c9749 100644 --- a/apt-inst/contrib/extracttar.cc +++ b/apt-inst/contrib/extracttar.cc @@ -6,7 +6,7 @@ Extract a Tar - Tar Extractor Some performance measurements showed that zlib performed quite poorly - in comparision to a forked gzip process. This tar extractor makes use + in comparison to a forked gzip process. This tar extractor makes use of the fact that dup'd file descriptors have the same seek pointer and that gzip will not read past the end of a compressed stream, even if there is more data. We use the dup property to track extraction diff --git a/apt-inst/extract.cc b/apt-inst/extract.cc index 2c95fba92..b3dfccfc6 100644 --- a/apt-inst/extract.cc +++ b/apt-inst/extract.cc @@ -10,7 +10,7 @@ object is unpacked to '.dpkg.new' then the original is hardlinked to '.dpkg.tmp' and finally the new object is renamed to overwrite the old one. From an external perspective the file never ceased to exist. - After the archive has been sucessfully unpacked the .dpkg.tmp files + After the archive has been successfully unpacked the .dpkg.tmp files are erased. A failure causes all the .dpkg.tmp files to be restored. Decisions about unpacking go like this: @@ -22,7 +22,7 @@ [Note, this is reduced to only check if a file was expected to be there] - If the existing link/file is not a directory then it is replaced - irregardless + regardless - If the existing link/directory is being replaced by a directory then absolutely nothing happens. - If the existing link/directory is being replaced by a link then diff --git a/apt-inst/filelist.cc b/apt-inst/filelist.cc index 879c07855..defc4f4df 100644 --- a/apt-inst/filelist.cc +++ b/apt-inst/filelist.cc @@ -5,14 +5,14 @@ File Listing - Manages a Cache of File -> Package names. - Diversions add some signficant complexity to the system. To keep + Diversions add some significant complexity to the system. To keep storage space down in the very special case of a diverted file no extra bytes are allocated in the Node structure. Instead a diversion is inserted directly into the hash table and its flag bit set. Every lookup for that filename will always return the diversion. The hash buckets are stored in sorted form, with diversions having - the higest sort order. Identical files are assigned the same file + the highest sort order. Identical files are assigned the same file pointer, thus after a search all of the nodes owning that file can be found by iterating down the bucket. diff --git a/apt-pkg/acquire-item.cc b/apt-pkg/acquire-item.cc index 60003c023..36bb48382 100644 --- a/apt-pkg/acquire-item.cc +++ b/apt-pkg/acquire-item.cc @@ -129,7 +129,7 @@ void pkgAcquire::Item::Done(string Message,unsigned long long Size,string Hash, /*}}}*/ // Acquire::Item::Rename - Rename a file /*{{{*/ // --------------------------------------------------------------------- -/* This helper function is used by alot of item methods as thier final +/* This helper function is used by a lot of item methods as their final step */ void pkgAcquire::Item::Rename(string From,string To) { @@ -299,7 +299,7 @@ void pkgAcqSubIndex::Done(string Message,unsigned long long Size,string Md5Hash, return; } - // sucess in downloading the index + // success in downloading the index // rename the index if(Debug) std::clog << "Renaming: " << DestFile << " -> " << FinalFile << std::endl; @@ -327,7 +327,7 @@ bool pkgAcqSubIndex::ParseIndex(string const &IndexFile) /*{{{*/ /*}}}*/ // AcqDiffIndex::AcqDiffIndex - Constructor /*{{{*/ // --------------------------------------------------------------------- -/* Get the DiffIndex file first and see if there are patches availabe +/* Get the DiffIndex file first and see if there are patches available * 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 @@ -548,7 +548,7 @@ 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; + << "Falling back to normal index file acquire" << std::endl; new pkgAcqIndex(Owner, RealURI, Description, Desc.ShortDesc, ExpectedHash); @@ -569,7 +569,7 @@ void pkgAcqDiffIndex::Done(string Message,unsigned long long Size,string Md5Hash string FinalFile; FinalFile = _config->FindDir("Dir::State::lists")+URItoFileName(RealURI); - // sucess in downloading the index + // success in downloading the index // rename the index FinalFile += string(".IndexDiff"); if(Debug) @@ -628,7 +628,7 @@ void pkgAcqIndexDiffs::Failed(string Message,pkgAcquire::MethodConfig *Cnf) /*{{ { if(Debug) std::clog << "pkgAcqIndexDiffs failed: " << Desc.URI << std::endl - << "Falling back to normal index file aquire" << std::endl; + << "Falling back to normal index file acquire" << std::endl; new pkgAcqIndex(Owner, RealURI, Description,Desc.ShortDesc, ExpectedHash); Finish(); @@ -733,7 +733,7 @@ void pkgAcqIndexDiffs::Done(string Message,unsigned long long Size,string Md5Has string FinalFile; FinalFile = _config->FindDir("Dir::State::lists")+URItoFileName(RealURI); - // sucess in downloading a diff, enter ApplyDiff state + // success in downloading a diff, enter ApplyDiff state if(State == StateFetchDiff) { @@ -825,7 +825,7 @@ void pkgAcqIndexMergeDiffs::Failed(string Message,pkgAcquire::MethodConfig *Cnf) // first failure means we should fallback State = StateErrorDiff; - std::clog << "Falling back to normal index file aquire" << std::endl; + std::clog << "Falling back to normal index file acquire" << std::endl; new pkgAcqIndex(Owner, RealURI, Description,Desc.ShortDesc, ExpectedHash); } @@ -1240,7 +1240,7 @@ pkgAcqMetaSig::pkgAcqMetaSig(pkgAcquire *Owner, /*{{{*/ if (RealFileExists(Final) == true) { // File was already in place. It needs to be re-downloaded/verified - // because Release might have changed, we do give it a differnt + // because Release might have changed, we do give it a different // name than DestFile because otherwise the http method will // send If-Range requests and there are too many broken servers // out there that do not understand them @@ -2021,7 +2021,7 @@ bool pkgAcqArchive::QueueNext() return true; } - /* Hmm, we have a file and its size does not match, this shouldnt + /* Hmm, we have a file and its size does not match, this shouldn't happen.. */ unlink(FinalFile.c_str()); } diff --git a/apt-pkg/acquire-worker.cc b/apt-pkg/acquire-worker.cc index 44c3e4e17..de62080da 100644 --- a/apt-pkg/acquire-worker.cc +++ b/apt-pkg/acquire-worker.cc @@ -568,7 +568,7 @@ bool pkgAcquire::Worker::InFdReady() /*}}}*/ // Worker::MethodFailure - Called when the method fails /*{{{*/ // --------------------------------------------------------------------- -/* This is called when the method is belived to have failed, probably because +/* This is called when the method is believed to have failed, probably because read returned -1. */ bool pkgAcquire::Worker::MethodFailure() { diff --git a/apt-pkg/acquire.cc b/apt-pkg/acquire.cc index a8a5abd34..120e809e1 100644 --- a/apt-pkg/acquire.cc +++ b/apt-pkg/acquire.cc @@ -5,9 +5,9 @@ Acquire - File Acquiration - The core element for the schedual system is the concept of a named + The core element for the schedule system is the concept of a named queue. Each queue is unique and each queue has a name derived from the - URI. The degree of paralization can be controled by how the queue + URI. The degree of paralization can be controlled by how the queue name is derived from the URI. ##################################################################### */ @@ -175,7 +175,7 @@ void pkgAcquire::Add(Worker *Work) // --------------------------------------------------------------------- /* A worker has died. This can not be done while the select loop is running as it would require that RunFds could handling a changing list state and - it cant.. */ + it can't.. */ void pkgAcquire::Remove(Worker *Work) { if (Running == true) diff --git a/apt-pkg/algorithms.cc b/apt-pkg/algorithms.cc index 8644a8138..0363ab3e2 100644 --- a/apt-pkg/algorithms.cc +++ b/apt-pkg/algorithms.cc @@ -424,7 +424,7 @@ void pkgProblemResolver::MakeScores() /* This is arbitrary, it should be high enough to elevate an essantial package above most other packages but low enough to allow an obsolete essential packages to be removed by - a conflicts on a powerfull normal package (ie libc6) */ + a conflicts on a powerful normal package (ie libc6) */ if ((I->Flags & pkgCache::Flag::Essential) == pkgCache::Flag::Essential || (I->Flags & pkgCache::Flag::Important) == pkgCache::Flag::Important) Score += PrioEssentials; @@ -441,7 +441,7 @@ void pkgProblemResolver::MakeScores() Score += PrioInstalledAndNotObsolete; } - // Now that we have the base scores we go and propogate dependencies + // Now that we have the base scores we go and propagate dependencies for (pkgCache::PkgIterator I = Cache.PkgBegin(); I.end() == false; ++I) { if (Cache[I].InstallVer == 0) @@ -485,7 +485,7 @@ void pkgProblemResolver::MakeScores() } } - /* Now we propogate along provides. This makes the packages that + /* Now we propagate along provides. This makes the packages that provide important packages extremely important */ for (pkgCache::PkgIterator I = Cache.PkgBegin(); I.end() == false; ++I) { @@ -640,7 +640,7 @@ bool pkgProblemResolver::Resolve(bool BrokenFix) adjusting the package will inflict. It goes from highest score to lowest and corrects all of the breaks by - keeping or removing the dependant packages. If that fails then it removes + keeping or removing the dependent packages. If that fails then it removes the package itself and goes on. The routine should be able to intelligently go from any broken state to a fixed state. @@ -830,7 +830,7 @@ bool pkgProblemResolver::ResolveInternal(bool const BrokenFix) /* Look across the version list. If there are no possible targets then we keep the package and bail. This is necessary - if a package has a dep on another package that cant be found */ + if a package has a dep on another package that can't be found */ SPtrArray VList = Start.AllTargets(); if (*VList == 0 && (Flags[I->ID] & Protected) != Protected && Start.IsNegative() == false && @@ -1183,7 +1183,7 @@ bool pkgProblemResolver::ResolveByKeepInternal() continue; /* Keep the package. If this works then great, otherwise we have - to be significantly more agressive and manipulate its dependencies */ + to be significantly more aggressive and manipulate its dependencies */ if ((Flags[I->ID] & Protected) == 0) { if (Debug == true) diff --git a/apt-pkg/algorithms.h b/apt-pkg/algorithms.h index 5a9a77415..489d81159 100644 --- a/apt-pkg/algorithms.h +++ b/apt-pkg/algorithms.h @@ -10,7 +10,7 @@ see all of the effects of an upgrade run. pkgDistUpgrade computes an upgrade that causes as many packages as - possible to move to the newest verison. + possible to move to the newest version. pkgApplyStatus sets the target state based on the content of the status field in the status file. It is important to get proper crash recovery. @@ -44,7 +44,7 @@ using std::ostream; #endif #ifndef APT_9_CLEANER_HEADERS -// include pkg{DistUpgrade,AllUpgrade,MiniizeUpgrade} here for compatiblity +// include pkg{DistUpgrade,AllUpgrade,MiniizeUpgrade} here for compatibility #include #include #endif diff --git a/apt-pkg/aptconfiguration.cc b/apt-pkg/aptconfiguration.cc index 1ebcf97bc..0b0b546c5 100644 --- a/apt-pkg/aptconfiguration.cc +++ b/apt-pkg/aptconfiguration.cc @@ -27,9 +27,9 @@ #include /*}}}*/ namespace APT { -// getCompressionTypes - Return Vector of usbale compressiontypes /*{{{*/ +// getCompressionTypes - Return Vector of usable compressiontypes /*{{{*/ // --------------------------------------------------------------------- -/* return a vector of compression types in the prefered order. */ +/* return a vector of compression types in the preferred order. */ std::vector const Configuration::getCompressionTypes(bool const &Cached) { static std::vector types; @@ -109,7 +109,7 @@ const Configuration::getCompressionTypes(bool const &Cached) { /*}}}*/ // GetLanguages - Return Vector of Language Codes /*{{{*/ // --------------------------------------------------------------------- -/* return a vector of language codes in the prefered order. +/* return a vector of language codes in the preferred order. the special word "environment" will be replaced with the long and the short code of the local settings and it will be insured that this will not add duplicates. So in an german local the setting "environment, de_DE, en, de" @@ -330,7 +330,7 @@ bool const Configuration::checkLanguage(std::string Lang, bool const All) { return (std::find(langs.begin(), langs.end(), Lang) != langs.end()); } /*}}}*/ -// getArchitectures - Return Vector of prefered Architectures /*{{{*/ +// getArchitectures - Return Vector of preferred Architectures /*{{{*/ std::vector const Configuration::getArchitectures(bool const &Cached) { using std::string; diff --git a/apt-pkg/aptconfiguration.h b/apt-pkg/aptconfiguration.h index d22b675c0..bf7deae85 100644 --- a/apt-pkg/aptconfiguration.h +++ b/apt-pkg/aptconfiguration.h @@ -37,14 +37,14 @@ public: /*{{{*/ * \param Cached saves the result so we need to calculated it only once * this parameter should ony be used for testing purposes. * - * \return a vector of the compression types in the prefered usage order + * \return a vector of the compression types in the preferred usage order */ std::vector static const getCompressionTypes(bool const &Cached = true); /** \brief Returns a vector of Language Codes * * Languages can be defined with their two or five chars long code. - * This methods handles the various ways to set the prefered codes, + * This methods handles the various ways to set the preferred codes, * honors the environment and ensures that the codes are not listed twice. * * The special word "environment" will be replaced with the long and the short @@ -52,7 +52,7 @@ public: /*{{{*/ * duplicates. So in an german local the setting "environment, de_DE, en, de" * will result in "de_DE, de, en". * - * Another special word is "none" which separates the prefered from all codes + * Another special word is "none" which separates the preferred from all codes * in this setting. So setting and method can be used to get codes the user want * to see or to get all language codes APT (should) have Translations available. * @@ -62,7 +62,7 @@ public: /*{{{*/ * \param Locale don't get the locale from the system but use this one instead * this parameter should ony be used for testing purposes. * - * \return a vector of (all) Language Codes in the prefered usage order + * \return a vector of (all) Language Codes in the preferred usage order */ std::vector static const getLanguages(bool const &All = false, bool const &Cached = true, char const ** const Locale = 0); @@ -80,7 +80,7 @@ public: /*{{{*/ * \param Cached saves the result so we need to calculated it only once * this parameter should ony be used for testing purposes. * - * \return a vector of Architectures in prefered order + * \return a vector of Architectures in preferred order */ std::vector static const getArchitectures(bool const &Cached = true); diff --git a/apt-pkg/cacheiterators.h b/apt-pkg/cacheiterators.h index 886d84838..ea6a4afba 100644 --- a/apt-pkg/cacheiterators.h +++ b/apt-pkg/cacheiterators.h @@ -46,7 +46,7 @@ template class pkgCache::Iterator : * The implementation of this method should be pretty short * as it will only return the Pointer into the mmap stored * in the owner but the name of this pointer is different for - * each stucture and we want to abstract here at least for the + * each structure and we want to abstract here at least for the * basic methods from the actual structure. * \return Pointer to the first structure of this type */ @@ -198,7 +198,7 @@ class pkgCache::VerIterator : public Iterator { /** \brief compares two version and returns if they are similar This method should be used to identify if two pseudo versions are - refering to the same "real" version */ + referring to the same "real" version */ inline bool SimilarVer(const VerIterator &B) const { return (B.end() == false && S->Hash == B->Hash && strcmp(VerStr(), B.VerStr()) == 0); }; @@ -419,7 +419,7 @@ class pkgCache::DescFileIterator : public Iterator { inline DescFileIterator(pkgCache &Owner,DescFile *Trg) : Iterator(Owner, Trg) {}; }; /*}}}*/ -// Inlined Begin functions cant be in the class because of order problems /*{{{*/ +// Inlined Begin functions can't be in the class because of order problems /*{{{*/ inline pkgCache::PkgIterator pkgCache::GrpIterator::PackageList() const {return PkgIterator(*Owner,Owner->PkgP + S->FirstPackage);}; inline pkgCache::VerIterator pkgCache::PkgIterator::VersionList() const diff --git a/apt-pkg/cdrom.h b/apt-pkg/cdrom.h index db637b96d..c58593550 100644 --- a/apt-pkg/cdrom.h +++ b/apt-pkg/cdrom.h @@ -88,7 +88,7 @@ struct CdromDevice /*{{{*/ class pkgUdevCdromDevices /*{{{*/ { protected: - // libudev dlopen stucture + // libudev dlopen structure void *libudev_handle; struct udev* (*udev_new)(void); int (*udev_enumerate_add_match_property)(struct udev_enumerate *udev_enumerate, const char *property, const char *value); diff --git a/apt-pkg/clean.cc b/apt-pkg/clean.cc index eae419e34..2dea8ffdd 100644 --- a/apt-pkg/clean.cc +++ b/apt-pkg/clean.cc @@ -105,7 +105,7 @@ bool pkgArchiveCleaner::Go(std::string Dir,pkgCache &Cache) break; } - // See if this verison matches the file + // See if this version matches the file if (IsFetchable == true && Ver == V.VerStr()) break; } diff --git a/apt-pkg/contrib/cdromutl.cc b/apt-pkg/contrib/cdromutl.cc index afa01a562..20210ec0a 100644 --- a/apt-pkg/contrib/cdromutl.cc +++ b/apt-pkg/contrib/cdromutl.cc @@ -47,8 +47,8 @@ bool IsMounted(string &Path) if (Path[Path.length() - 1] != '/') Path += '/'; - /* First we check if the path is actualy mounted, we do this by - stating the path and the previous directory (carefull of links!) + /* First we check if the path is actually mounted, we do this by + stating the path and the previous directory (careful of links!) and comparing their device fields. */ struct stat Buf,Buf2; if (stat(Path.c_str(),&Buf) != 0 || diff --git a/apt-pkg/contrib/cmndline.cc b/apt-pkg/contrib/cmndline.cc index 2086d91ca..ed5800007 100644 --- a/apt-pkg/contrib/cmndline.cc +++ b/apt-pkg/contrib/cmndline.cc @@ -293,7 +293,7 @@ bool CommandLine::HandleOpt(int &I,int argc,const char *argv[], // Look for an argument. while (1) { - // Look at preceeding text + // Look at preceding text char Buffer[300]; if (Argument == 0) { diff --git a/apt-pkg/contrib/crc-16.cc b/apt-pkg/contrib/crc-16.cc index 4058821f9..f5df2d8b1 100644 --- a/apt-pkg/contrib/crc-16.cc +++ b/apt-pkg/contrib/crc-16.cc @@ -10,7 +10,7 @@ Al Longyear Modified by Jason Gunthorpe to fit the local coding - style, this code is belived to be in the Public Domain. + style, this code is believed to be in the Public Domain. ##################################################################### */ /*}}}*/ diff --git a/apt-pkg/contrib/error.h b/apt-pkg/contrib/error.h index 7d09b2d4a..bcee70b1a 100644 --- a/apt-pkg/contrib/error.h +++ b/apt-pkg/contrib/error.h @@ -229,7 +229,7 @@ public: /*{{{*/ /** \brief is the list empty? * * The default checks if the list is empty or contains only notices, - * if you want to check if also no notices happend set the parameter + * if you want to check if also no notices happened set the parameter * flag to \b false. * * \param WithoutNotice does notices count, default is \b true, so no diff --git a/apt-pkg/contrib/fileutl.cc b/apt-pkg/contrib/fileutl.cc index 536284064..52411a762 100644 --- a/apt-pkg/contrib/fileutl.cc +++ b/apt-pkg/contrib/fileutl.cc @@ -222,7 +222,7 @@ int GetLock(string File,bool Errors) int FD = open(File.c_str(),O_RDWR | O_CREAT | O_NOFOLLOW,0640); if (FD < 0) { - // Read only .. cant have locking problems there. + // Read only .. can't have locking problems there. if (errno == EROFS) { _error->Warning(_("Not using locking for read only lock file %s"),File.c_str()); @@ -238,7 +238,7 @@ int GetLock(string File,bool Errors) } SetCloseExec(FD,true); - // Aquire a write lock + // Acquire a write lock struct flock fl; fl.l_type = F_WRLCK; fl.l_whence = SEEK_SET; @@ -1256,7 +1256,7 @@ FileFd::~FileFd() /*}}}*/ // FileFd::Read - Read a bit of the file /*{{{*/ // --------------------------------------------------------------------- -/* We are carefull to handle interruption by a signal while reading +/* We are careful to handle interruption by a signal while reading gracefully. */ bool FileFd::Read(void *To,unsigned long long Size,unsigned long long *Actual) { diff --git a/apt-pkg/contrib/gpgv.h b/apt-pkg/contrib/gpgv.h index 45f069058..1d79a52ac 100644 --- a/apt-pkg/contrib/gpgv.h +++ b/apt-pkg/contrib/gpgv.h @@ -29,7 +29,7 @@ * for reading. Use #OpenMaybeClearSignedFile to access the message * instead to ensure you are only reading signed data. * - * The method does not return, but has some noteable exit-codes: + * The method does not return, but has some notable exit-codes: * 111 signals an internal error like the inability to execute gpgv, * 112 indicates a clear-signed file which doesn't include a message, * which can happen if APT is run while on a network requiring diff --git a/apt-pkg/contrib/macros.h b/apt-pkg/contrib/macros.h index 62e7b65db..e53d01b8f 100644 --- a/apt-pkg/contrib/macros.h +++ b/apt-pkg/contrib/macros.h @@ -44,7 +44,7 @@ #define _boundv(a,b,c) b = _bound(a,b,c) #define ABS(a) (((a) < (0)) ?-(a) : (a)) -/* Usefull count macro, use on an array of things and it will return the +/* Useful count macro, use on an array of things and it will return the number of items in the array */ #define _count(a) (sizeof(a)/sizeof(a[0])) diff --git a/apt-pkg/contrib/md5.h b/apt-pkg/contrib/md5.h index 25631b166..195455645 100644 --- a/apt-pkg/contrib/md5.h +++ b/apt-pkg/contrib/md5.h @@ -10,7 +10,7 @@ store a MD5Sum in 16 bytes of memory. A MD5Sum is used to generate a (hopefully) unique 16 byte number for a - block of data. This can be used to gaurd against corruption of a file. + block of data. This can be used to guard against corruption of a file. MD5 should not be used for tamper protection, use SHA or something more secure. diff --git a/apt-pkg/contrib/mmap.h b/apt-pkg/contrib/mmap.h index 6bd4a2d86..c1dfedf6d 100644 --- a/apt-pkg/contrib/mmap.h +++ b/apt-pkg/contrib/mmap.h @@ -6,7 +6,7 @@ MMap Class - Provides 'real' mmap or a faked mmap using read(). The purpose of this code is to provide a generic way for clients to - access the mmap function. In enviroments that do not support mmap + access the mmap function. In environments that do not support mmap from file fd's this function will use read and normal allocated memory. @@ -15,7 +15,7 @@ The DynamicMMap class is used to help the on-disk data structure generators. It provides a large allocated workspace and members - to allocate space from the workspace in an effecient fashion. + to allocate space from the workspace in an efficient fashion. This source is placed in the Public Domain, do with it what you will It was originally written by Jason Gunthorpe. diff --git a/apt-pkg/contrib/progress.h b/apt-pkg/contrib/progress.h index 3a6943aee..f7fbc9ccf 100644 --- a/apt-pkg/contrib/progress.h +++ b/apt-pkg/contrib/progress.h @@ -7,7 +7,7 @@ This class allows lengthy operations to communicate their progress to the GUI. The progress model is simple and is not designed to handle - the complex case of the multi-activity aquire class. + the complex case of the multi-activity acquire class. The model is based on the concept of an overall operation consisting of a series of small sub operations. Each sub operation has it's own diff --git a/apt-pkg/contrib/sha2_internal.cc b/apt-pkg/contrib/sha2_internal.cc index f84fb761c..bb2560252 100644 --- a/apt-pkg/contrib/sha2_internal.cc +++ b/apt-pkg/contrib/sha2_internal.cc @@ -65,7 +65,7 @@ * Please make sure that your system defines BYTE_ORDER. If your * architecture is little-endian, make sure it also defines * LITTLE_ENDIAN and that the two (BYTE_ORDER and LITTLE_ENDIAN) are - * equivilent. + * equivalent. * * If your system does not define the above, then you can do so by * hand like this: diff --git a/apt-pkg/contrib/strutl.cc b/apt-pkg/contrib/strutl.cc index 962112854..d4f53ea3a 100644 --- a/apt-pkg/contrib/strutl.cc +++ b/apt-pkg/contrib/strutl.cc @@ -426,7 +426,7 @@ string TimeToStr(unsigned long Sec) /*}}}*/ // SubstVar - Substitute a string for another string /*{{{*/ // --------------------------------------------------------------------- -/* This replaces all occurances of Subst with Contents in Str. */ +/* This replaces all occurrences of Subst with Contents in Str. */ string SubstVar(const string &Str,const string &Subst,const string &Contents) { string::size_type Pos = 0; @@ -926,7 +926,7 @@ bool FTPMDTMStrToTime(const char* const str,time_t &time) /*}}}*/ // StrToTime - Converts a string into a time_t /*{{{*/ // --------------------------------------------------------------------- -/* This handles all 3 populare time formats including RFC 1123, RFC 1036 +/* This handles all 3 popular time formats including RFC 1123, RFC 1036 and the C library asctime format. It requires the GNU library function 'timegm' to convert a struct tm in UTC to a time_t. For some bizzar reason the C library does not provide any such function :< This also @@ -1313,7 +1313,7 @@ string StripEpoch(const string &VerStr) // tolower_ascii - tolower() function that ignores the locale /*{{{*/ // --------------------------------------------------------------------- /* This little function is the most called method we have and tries - therefore to do the absolut minimum - and is noteable faster than + therefore to do the absolut minimum - and is notable faster than standard tolower/toupper and as a bonus avoids problems with different locales - we only operate on ascii chars anyway. */ int tolower_ascii(int const c) @@ -1324,9 +1324,9 @@ int tolower_ascii(int const c) } /*}}}*/ -// CheckDomainList - See if Host is in a , seperate list /*{{{*/ +// CheckDomainList - See if Host is in a , separate list /*{{{*/ // --------------------------------------------------------------------- -/* The domain list is a comma seperate list of domains that are suffix +/* The domain list is a comma separate list of domains that are suffix matched against the argument */ bool CheckDomainList(const string &Host,const string &List) { diff --git a/apt-pkg/deb/deblistparser.cc b/apt-pkg/deb/deblistparser.cc index 68d544e1f..acdcc4554 100644 --- a/apt-pkg/deb/deblistparser.cc +++ b/apt-pkg/deb/deblistparser.cc @@ -758,7 +758,7 @@ bool debListParser::GrabWord(string Word,WordList *List,unsigned char &Out) /*}}}*/ // ListParser::Step - Move to the next section in the file /*{{{*/ // --------------------------------------------------------------------- -/* This has to be carefull to only process the correct architecture */ +/* This has to be careful to only process the correct architecture */ bool debListParser::Step() { iOffset = Tags.Offset(); diff --git a/apt-pkg/deb/debsystem.cc b/apt-pkg/deb/debsystem.cc index 7ed6936c3..b95ff15df 100644 --- a/apt-pkg/deb/debsystem.cc +++ b/apt-pkg/deb/debsystem.cc @@ -193,7 +193,7 @@ bool debSystem::Initialize(Configuration &Cnf) /*}}}*/ // System::ArchiveSupported - Is a file format supported /*{{{*/ // --------------------------------------------------------------------- -/* The standard name for a deb is 'deb'.. There are no seperate versions +/* The standard name for a deb is 'deb'.. There are no separate versions of .deb to worry about.. */ bool debSystem::ArchiveSupported(const char *Type) { diff --git a/apt-pkg/deb/debversion.cc b/apt-pkg/deb/debversion.cc index 140561262..74e2552ff 100644 --- a/apt-pkg/deb/debversion.cc +++ b/apt-pkg/deb/debversion.cc @@ -116,7 +116,7 @@ int debVersioningSystem::CmpFragment(const char *A,const char *AEnd, return 1; } - // Shouldnt happen + // Shouldn't happen return 1; } /*}}}*/ @@ -221,7 +221,7 @@ bool debVersioningSystem::CheckDep(const char *PkgVer, if (PkgVer == DepVer) return Op == pkgCache::Dep::Equals || Op == pkgCache::Dep::LessEq || Op == pkgCache::Dep::GreaterEq; - // Perform the actual comparision. + // Perform the actual comparison. int const Res = CmpVersion(PkgVer, DepVer); switch (Op) { diff --git a/apt-pkg/depcache.cc b/apt-pkg/depcache.cc index c39e8c628..a12e6963d 100644 --- a/apt-pkg/depcache.cc +++ b/apt-pkg/depcache.cc @@ -789,7 +789,7 @@ bool pkgDepCache::MarkKeep(PkgIterator const &Pkg, bool Soft, bool FromUser, // - this makes sense as default when all Garbage dependencies // are automatically marked for removal (as aptitude does). // setting a package for keep then makes it no longer autoinstalled - // for all other use-case this action is rather suprising + // for all other use-case this action is rather surprising if(FromUser && !P.Marked) P.Flags &= ~Flag::Auto; #endif @@ -1195,7 +1195,7 @@ bool pkgDepCache::MarkInstall(PkgIterator const &Pkg,bool AutoInst, } } - /* This bit is for processing the possibilty of an install/upgrade + /* This bit is for processing the possibility of an install/upgrade fixing the problem for "positive" dependencies */ if (Start.IsNegative() == false && (DepState[Start->ID] & DepCVer) == DepCVer) { @@ -1315,7 +1315,7 @@ bool pkgDepCache::IsInstallOkMultiArchSameVersionSynced(PkgIterator const &Pkg, // (simple string-compare as stuff like '1' == '0:1-0' can't happen here) if (P->CurrentVer == 0 || strcmp(Pkg.CandVersion(), P.CandVersion()) == 0) continue; - // packages loosing M-A:same can be out-of-sync + // packages losing M-A:same can be out-of-sync VerIterator CV = PkgState[P->ID].CandidateVerIter(*this); if (unlikely(CV.end() == true) || (CV->MultiArch & pkgCache::Version::Same) != pkgCache::Version::Same) diff --git a/apt-pkg/depcache.h b/apt-pkg/depcache.h index 61c9aa559..f6848f383 100644 --- a/apt-pkg/depcache.h +++ b/apt-pkg/depcache.h @@ -15,7 +15,7 @@ This structure is important to support the readonly status of the cache file. When the data is saved the cache will be refereshed from our - internal rep and written to disk. Then the actual persistant data + internal rep and written to disk. Then the actual persistent data files will be put on the disk. Each dependency is compared against 3 target versions to produce to diff --git a/apt-pkg/edsp.h b/apt-pkg/edsp.h index 12b06d143..fd4436f60 100644 --- a/apt-pkg/edsp.h +++ b/apt-pkg/edsp.h @@ -2,7 +2,7 @@ /** Description \file edsp.h {{{ ###################################################################### Set of methods to help writing and reading everything needed for EDSP - with the noteable exception of reading a scenario for conversion into + with the notable exception of reading a scenario for conversion into a Cache as this is handled by edsp interface for listparser and friends ##################################################################### */ /*}}}*/ @@ -182,13 +182,13 @@ public: * they were unable to calculate a solution for a given task. * Obviously they can't send a solution through, so this * methods deals with formatting an error message correctly - * so that the front-ends can recieve and display it. + * so that the front-ends can receive and display it. * * The first line of the message should be a short description * of the error so it can be used for dialog titles or alike * * \param uuid of this error message - * \param message is free form text to discribe the error + * \param message is free form text to describe the error * \param output the front-end listens for error messages */ bool static WriteError(char const * const uuid, std::string const &message, FILE* output); diff --git a/apt-pkg/indexfile.h b/apt-pkg/indexfile.h index 2d433b60a..a0096fa34 100644 --- a/apt-pkg/indexfile.h +++ b/apt-pkg/indexfile.h @@ -10,12 +10,12 @@ Binary index files Binary translation files - Bianry index files decribing the local system + Binary index files describing the local system Source index files They are all bundled together here, and the interfaces for sources.list, acquire, cache gen and record parsing all use this class - to acess the underlying representation. + to access the underlying representation. ##################################################################### */ /*}}}*/ diff --git a/apt-pkg/orderlist.cc b/apt-pkg/orderlist.cc index 984ae1d10..21b5fc4e7 100644 --- a/apt-pkg/orderlist.cc +++ b/apt-pkg/orderlist.cc @@ -566,10 +566,10 @@ bool pkgOrderList::VisitProvides(DepIterator D,bool Critical) // --------------------------------------------------------------------- /* This is the core ordering routine. It calls the set dependency consideration functions which then potentialy call this again. Finite - depth is achived through the colouring mechinism. */ + depth is achieved through the colouring mechinism. */ bool pkgOrderList::VisitNode(PkgIterator Pkg, char const* from) { - // Looping or irrelevent. + // Looping or irrelevant. // This should probably trancend not installed packages if (Pkg.end() == true || IsFlag(Pkg,Added) == true || IsFlag(Pkg,AddPending) == true || IsFlag(Pkg,InList) == false) @@ -824,7 +824,7 @@ bool pkgOrderList::DepUnPackPre(DepIterator D) The forwards depends loop is designed to bring the packages dependents close to the package. This helps reduce deconfigure time. - Loops are irrelevent to this. */ + Loops are irrelevant to this. */ bool pkgOrderList::DepUnPackDep(DepIterator D) { @@ -840,7 +840,7 @@ bool pkgOrderList::DepUnPackDep(DepIterator D) D.ParentPkg().CurrentVer() != D.ParentVer()) continue; - // The dep will not break so it is irrelevent. + // The dep will not break so it is irrelevant. if (CheckDep(D) == true) continue; diff --git a/apt-pkg/packagemanager.cc b/apt-pkg/packagemanager.cc index 3fdd9b637..5f9a31264 100644 --- a/apt-pkg/packagemanager.cc +++ b/apt-pkg/packagemanager.cc @@ -215,7 +215,7 @@ bool pkgPackageManager::CreateOrderList() return true; } /*}}}*/ -// PM::DepAlwaysTrue - Returns true if this dep is irrelevent /*{{{*/ +// PM::DepAlwaysTrue - Returns true if this dep is irrelevant /*{{{*/ // --------------------------------------------------------------------- /* The restriction on provides is to eliminate the case when provides are transitioning between valid states [ie exim to smail] */ @@ -243,11 +243,11 @@ bool pkgPackageManager::CheckRConflicts(PkgIterator Pkg,DepIterator D, D->Type != pkgCache::Dep::Obsoletes) continue; - // The package hasnt been changed + // The package hasn't been changed if (List->IsNow(Pkg) == false) continue; - // Ignore self conflicts, ignore conflicts from irrelevent versions + // Ignore self conflicts, ignore conflicts from irrelevant versions if (D.IsIgnorable(Pkg) || D.ParentVer() != D.ParentPkg().CurrentVer()) continue; @@ -314,7 +314,7 @@ bool pkgPackageManager::ConfigureAll() Note on failure: This method can fail, without causing any problems. This can happen when using Immediate-Configure-All, SmartUnPack may call - SmartConfigure, it may fail because of a complex dependancy situation, but + SmartConfigure, it may fail because of a complex dependency situation, but a error will only be reported if ConfigureAll fails. This is why some of the messages this function reports on failure (return false;) as just warnings only shown when debuging*/ @@ -596,7 +596,7 @@ bool pkgPackageManager::SmartRemove(PkgIterator Pkg) /*}}}*/ // PM::SmartUnPack - Install helper /*{{{*/ // --------------------------------------------------------------------- -/* This puts the system in a state where it can Unpack Pkg, if Pkg is allready +/* This puts the system in a state where it can Unpack Pkg, if Pkg is already unpacked, or when it has been unpacked, if Immediate==true it configures it. */ bool pkgPackageManager::SmartUnPack(PkgIterator Pkg) { @@ -623,7 +623,7 @@ bool pkgPackageManager::SmartUnPack(PkgIterator Pkg, bool const Immediate, int c /* PreUnpack Checks: This loop checks and attempts to rectify and problems that would prevent the package being unpacked. It addresses: PreDepends, Conflicts, Obsoletes and Breaks (DpkgBreaks). Any resolutions that do not require it should avoid configuration (calling SmartUnpack with Immediate=true), this is because when unpacking some packages with - complex dependancy structures, trying to configure some packages while breaking the loops can complicate things . + complex dependency structures, trying to configure some packages while breaking the loops can complicate things . This will be either dealt with if the package is configured as a dependency of Pkg (if and when Pkg is configured), or by the ConfigureAll call at the end of the for loop in OrderInstall. */ bool Changed = false; @@ -790,7 +790,7 @@ bool pkgPackageManager::SmartUnPack(PkgIterator Pkg, bool const Immediate, int c { if (List->IsFlag(BrokenPkg,pkgOrderList::Loop) && PkgLoop) { - // This dependancy has already been dealt with by another SmartUnPack on Pkg + // This dependency has already been dealt with by another SmartUnPack on Pkg break; } else @@ -1003,7 +1003,7 @@ pkgPackageManager::OrderResult pkgPackageManager::OrderInstall() DoneSomething = true; if (ImmConfigureAll) { - /* ConfigureAll here to pick up and packages left unconfigured becuase they were unpacked in the + /* ConfigureAll here to pick up and packages left unconfigured because they were unpacked in the "PreUnpack Checks" section */ if (!ConfigureAll()) return Failed; diff --git a/apt-pkg/pkgcache.cc b/apt-pkg/pkgcache.cc index 52e814c0b..67a2a709d 100644 --- a/apt-pkg/pkgcache.cc +++ b/apt-pkg/pkgcache.cc @@ -8,7 +8,7 @@ Please see doc/apt-pkg/cache.sgml for a more detailed description of this format. Also be sure to keep that file up-to-date!! - This is the general utility functions for cache managment. They provide + This is the general utility functions for cache management. They provide a complete set of accessor functions for the cache. The cacheiterators header contains the STL-like iterators that can be used to easially navigate the cache as well as seemlessly dereference the mmap'd @@ -499,7 +499,7 @@ pkgCache::PkgIterator::CurVersion() const // ostream operator to handle string representation of a package /*{{{*/ // --------------------------------------------------------------------- /* Output name < cur.rent.version -> candid.ate.version | new.est.version > (section) - Note that the characters <|>() are all literal above. Versions will be ommited + Note that the characters <|>() are all literal above. Versions will be omitted if they provide no new information (e.g. there is no newer version than candidate) If no version and/or section can be found "none" is used. */ std::ostream& diff --git a/apt-pkg/pkgcache.h b/apt-pkg/pkgcache.h index 1a7013551..c31c5f30b 100644 --- a/apt-pkg/pkgcache.h +++ b/apt-pkg/pkgcache.h @@ -354,7 +354,7 @@ struct pkgCache::Group the hash index of the name in the pkgCache::Header::PkgHashTable A package can be created for every architecture so package names are - not unique, but it is garanteed that packages with the same name + not unique, but it is guaranteed that packages with the same name are sequencel ordered in the list. Packages with the same name can be accessed with the Group. */ diff --git a/apt-pkg/pkgsystem.h b/apt-pkg/pkgsystem.h index 75f7b9fcc..eb75df412 100644 --- a/apt-pkg/pkgsystem.h +++ b/apt-pkg/pkgsystem.h @@ -7,7 +7,7 @@ Instances of this class can be thought of as factories or meta-classes for a variety of more specialized classes. Together this class and - it's speciallized offspring completely define the environment and how + it's specialized offspring completely define the environment and how to access resources for a specific system. There are several sub areas that are all orthogonal - each system has a unique combination of these sub areas: @@ -23,7 +23,7 @@ - Selection of local 'status' indexes that make up the pkgCache. It is important to note that the handling of index files is not a - function of the system. Index files are handled through a seperate + function of the system. Index files are handled through a separate abstraction - the only requirement is that the index files have the same idea of versioning as the target system. diff --git a/apt-pkg/upgrade.cc b/apt-pkg/upgrade.cc index f06f6d40d..d6f6933dd 100644 --- a/apt-pkg/upgrade.cc +++ b/apt-pkg/upgrade.cc @@ -225,7 +225,7 @@ bool pkgMinimizeUpgrade(pkgDepCache &Cache) Cache.MarkInstall(I, false, 0, false); else { - // If keep didnt actually do anything then there was no change.. + // If keep didn't actually do anything then there was no change.. if (Cache[I].Upgrade() == false) Change = true; } diff --git a/buildlib/fail.mak b/buildlib/fail.mak index dfc194e1e..fc187766d 100644 --- a/buildlib/fail.mak +++ b/buildlib/fail.mak @@ -4,7 +4,7 @@ # Input # $(MESSAGE) - The message to show -# $(PROGRAM) - The program/libary/whatever. +# $(PROGRAM) - The program/library/whatever. # See defaults.mak for information about LOCAL diff --git a/buildlib/program.mak b/buildlib/program.mak index e0e76316c..da538f5eb 100644 --- a/buildlib/program.mak +++ b/buildlib/program.mak @@ -6,7 +6,7 @@ # $(SOURCE) - The source code to use # $(PROGRAM) - The name of the program # $(SLIBS) - Shared libs to link against -# $(LIB_MAKES) - Shared libary make files to depend on - to ensure we get +# $(LIB_MAKES) - Shared library make files to depend on - to ensure we get # remade when the shared library version increases. # See defaults.mak for information about LOCAL diff --git a/cmdline/apt-config.cc b/cmdline/apt-config.cc index 3481eaf5f..30c2a22d5 100644 --- a/cmdline/apt-config.cc +++ b/cmdline/apt-config.cc @@ -8,7 +8,7 @@ This program will parse a config file and then do something with it. Commands: - shell - Shell mode. After this a series of word pairs should occure. + shell - Shell mode. After this a series of word pairs should occur. The first is the environment var to set and the second is the key to set it from. Use like: eval `apt-config shell QMode apt::QMode` diff --git a/cmdline/apt-get.cc b/cmdline/apt-get.cc index 4d609104c..12e385b69 100644 --- a/cmdline/apt-get.cc +++ b/cmdline/apt-get.cc @@ -15,7 +15,7 @@ upgrade - Smart-Download the newest versions of all packages dselect-upgrade - Follows dselect's changes to the Status: field and installes new and removes old packages - dist-upgrade - Powerfull upgrader designed to handle the issues with + dist-upgrade - Powerful upgrader designed to handle the issues with a new distribution. install - Download and install a given package (by name, not by .deb) check - Update the package cache and check for broken packages @@ -513,7 +513,7 @@ bool DoDSelectUpgrade(CommandLine &CmdL) } /* Resolve any problems that dselect created, allupgrade cannot handle - such things. We do so quite agressively too.. */ + such things. We do so quite aggressively too.. */ if (Cache->BrokenCount() != 0) { pkgProblemResolver Fix(Cache); diff --git a/cmdline/apt-internal-solver.cc b/cmdline/apt-internal-solver.cc index 53b38ea43..bf5b8c1fe 100644 --- a/cmdline/apt-internal-solver.cc +++ b/cmdline/apt-internal-solver.cc @@ -160,16 +160,16 @@ int main(int argc,const char *argv[]) /*{{{*/ if (upgrade == true) { if (pkgAllUpgrade(CacheFile) == false) { - EDSP::WriteError("ERR_UNSOLVABLE_UPGRADE", "An upgrade error occured", output); + EDSP::WriteError("ERR_UNSOLVABLE_UPGRADE", "An upgrade error occurred", output); return 0; } } else if (distUpgrade == true) { if (pkgDistUpgrade(CacheFile) == false) { - EDSP::WriteError("ERR_UNSOLVABLE_DIST_UPGRADE", "An dist-upgrade error occured", output); + EDSP::WriteError("ERR_UNSOLVABLE_DIST_UPGRADE", "An dist-upgrade error occurred", output); return 0; } } else if (Fix.Resolve() == false) { - EDSP::WriteError("ERR_UNSOLVABLE", "An error occured", output); + EDSP::WriteError("ERR_UNSOLVABLE", "An error occurred", output); return 0; } diff --git a/cmdline/apt-key.in b/cmdline/apt-key.in index 0ced500db..0774cf4b7 100644 --- a/cmdline/apt-key.in +++ b/cmdline/apt-key.in @@ -18,7 +18,7 @@ touch $SECRETKEYRING GPG_CMD="$GPG_CMD --homedir $GPGHOMEDIR" # create the trustdb with an (empty) dummy keyring # older gpgs required it, newer gpgs even warn that it isn't needed, -# but require it nontheless for some commands, so we just play safe +# but require it nonetheless for some commands, so we just play safe # here for the foreseeable future and create a dummy one $GPG_CMD --quiet --check-trustdb --keyring $SECRETKEYRING >/dev/null 2>&1 # tell gpg that it shouldn't try to maintain a trustdb file @@ -187,7 +187,7 @@ remove_key_from_keyring() { echo >&2 "Key ${2} is in keyring ${1}, but can't be removed as it is read only." return fi - # check if it is the only key in the keyring and if so remove the keyring alltogether + # check if it is the only key in the keyring and if so remove the keyring altogether if [ '1' = "$($GPG --with-colons --list-keys | grep "^pub:[^:]*:[^:]*:[^:]*:[0-9A-F]\+:" | wc -l)" ]; then mv -f "$1" "${1}~" # behave like gpg return diff --git a/configure.ac b/configure.ac index a5a9fe0b8..083e7c494 100644 --- a/configure.ac +++ b/configure.ac @@ -5,7 +5,7 @@ dnl linux architectures and configurations, it is not used to make the dnl code more portable dnl You MUST have an environment that has all the POSIX functions and -dnl some of the more populare bsd/sysv ones (like select). You'll also +dnl some of the more popular bsd/sysv ones (like select). You'll also dnl need a C++ compiler that is semi-standard conformant, exceptions are dnl not used but STL is. diff --git a/debian/apt.cron.daily b/debian/apt.cron.daily index 2616af1dd..71ac76555 100644 --- a/debian/apt.cron.daily +++ b/debian/apt.cron.daily @@ -34,7 +34,7 @@ # APT::Archives::MinAge "2"; (old, deprecated) # APT::Periodic::MinAge "2"; (new) # - Set minimum age of a package file. If a file is younger it -# will not be deleted (0=disable). Usefull to prevent races +# will not be deleted (0=disable). Useful to prevent races # and to keep backups of the packages for emergency. # # APT::Archives::MaxSize "0"; (old, deprecated) @@ -384,7 +384,7 @@ fi now=$(date +%s) # Support old Archive for compatibility. -# Document only Periodic for all controling parameters of this script. +# Document only Periodic for all controlling parameters of this script. UpdateInterval=0 eval $(apt-config shell UpdateInterval APT::Periodic::Update-Package-Lists) diff --git a/debian/changelog b/debian/changelog index 78c2d4573..eb5e079bc 100644 --- a/debian/changelog +++ b/debian/changelog @@ -1,6 +1,10 @@ apt (0.9.15.4) UNRELEASED; urgency=low + [ Michael Vogt ] * remove auto-generated apt-key and sources.list on clean (closes: 739749) + + [ Guillem Jover ] + * Fix typos in documentation (codespell) -- Michael Vogt Sat, 22 Feb 2014 17:58:08 +0100 diff --git a/doc/Bugs b/doc/Bugs index deb7334db..d584dce49 100644 --- a/doc/Bugs +++ b/doc/Bugs @@ -31,12 +31,12 @@ #27601: srange errors from dselect Summary: Couldn't locate an archive source Status: Require status file - Believed to be fixed in 0.1.9, was not reproducable w/ given + Believed to be fixed in 0.1.9, was not reproducible w/ given status file #27841: apt: apt depends on a missing library Status: New versions of APT in slink have been compiled with libstdc++2.9 #23984: apt: support for "no_proxy" would be nice - Status: Planed to be integrated into the new methods via the configuration + Status: Planned to be integrated into the new methods via the configuration file Done - Use Acquire::http::proxy::host.com="DIRECT" #25021: apt: Need some control over multiple connections @@ -83,7 +83,7 @@ Status: Fix the man pages. This certainly will be done in 0.3.0 #24799: Some suggestions for the apt method in dselect Summary: Wants to be able to specifiy -d from dselect - Status: Likely a APT_OPTIONS enviornment variable will be created, -d can + Status: Likely a APT_OPTIONS environment variable will be created, -d can be put there. There is already an APT_CONFIG in 0.3, APT_OPTIONS may also appear.. @@ -112,7 +112,7 @@ APT now sends a max age header. See the apt.conf(5) #28172: HTTP Proxy cache refresh should be forced for corrupted packages Summary: Some problem resulted in a corrupted package - Status: I belive this reflects a deeper problem and the suggested solution + Status: I believe this reflects a deeper problem and the suggested solution is only a band-aide patch. I intend to close this bug when #24685 is fixed with a configuration directive. Use -o acquire::http::no-cache=true diff --git a/doc/design.sgml b/doc/design.sgml index 1ddf49fd8..67406aa01 100644 --- a/doc/design.sgml +++ b/doc/design.sgml @@ -48,7 +48,7 @@ that additional functionality in the underlying dpkg would also be requested.

-

Diety/dselect are the first introduction that people have to +

Deity/dselect are the first introduction that people have to Debian, and unfortunately this first impression contributes greatly to the public perception of the distribution. It is imperative that this be a showcase for Debian, rather than diff --git a/doc/dpkg-tech.sgml b/doc/dpkg-tech.sgml index 1a15f6a4c..ce0c5fa83 100644 --- a/doc/dpkg-tech.sgml +++ b/doc/dpkg-tech.sgml @@ -322,7 +322,7 @@ The main principal of the new-format Debian archive (I won't describe the old format - for that have a look at deb-old.5), is that the archive really is an archive - as used by "ar" and friends. However, dpkg-deb uses this format internally, rather than calling "ar". Inside this archive, there are usually -the folowing members:- +the following members:- debian-binary @@ -349,7 +349,7 @@ supports the following options:- --build (-b) <dir> - builds a .deb archive, takes a directory which contains all the files as an argument. Note that the directory <dir>/DEBIAN will be packed separately into the control archive. ---contents (-c) <debfile> - Lists the contents of ther "data.tar.gz" +--contents (-c) <debfile> - Lists the contents of the "data.tar.gz" member. --control (-e) <debfile> - Extracts the control archive into a directory called DEBIAN. Alternatively, with another argument, it will extract @@ -450,7 +450,7 @@ cleaned up when dpkg exits cleanly.

Juding by the use of the updates directory I would call it a Journal. Inorder -to effeciently ensure the complete integrity of the status file dpkg will +to efficiently ensure the complete integrity of the status file dpkg will "checkpoint" or journal all of it's activities in the updates directory. By merging the contents of the updates directory (in order!!) against the original status file it can get the precise current state of the system, diff --git a/doc/examples/configure-index b/doc/examples/configure-index index f4d9d17f2..93e96cf16 100644 --- a/doc/examples/configure-index +++ b/doc/examples/configure-index @@ -142,7 +142,7 @@ APT // APT::Archives::MinAge "2"; (old, deprecated) MinAge "2"; // (new) // - Set minimum age of a package file. If a file is younger it - // will not be deleted (0=disable). Usefull to prevent races + // will not be deleted (0=disable). Useful to prevent races // and to keep backups of the packages for emergency. // APT::Archives::MaxSize "0"; (old, deprecated) diff --git a/doc/files.sgml b/doc/files.sgml index a52efc756..56c7f574d 100644 --- a/doc/files.sgml +++ b/doc/files.sgml @@ -201,7 +201,7 @@ from partial into archives/. Any files found in archives/ can be assumed to be verified.

-No directory structure is transfered from the receiving site and all .deb +No directory structure is transferred from the receiving site and all .deb file names conform to debian conventions. No short (msdos) filename should be placed in archives. If the need arises .debs should be unpacked, scanned and renamed to their correct internal names. This is mostly to prevent diff --git a/doc/libapt-pkg2_to_3.txt b/doc/libapt-pkg2_to_3.txt index c1f71f9f2..b94dc666e 100644 --- a/doc/libapt-pkg2_to_3.txt +++ b/doc/libapt-pkg2_to_3.txt @@ -3,7 +3,7 @@ people need to be aware of.. Many of this changes are done so that most old source will continue to function, but perhaps at reduced functionality. * pkgDepCache is no longer self initilizing, you have to call the Init - method seperately after constructing it. Users of pkgCacheFile do not + method separately after constructing it. Users of pkgCacheFile do not need to worry about this * GetCandidateVer/etc is gone from the pkgCache. It exists only in the DepCache and is just an inline around the new Policy class @@ -55,7 +55,7 @@ source will continue to function, but perhaps at reduced functionality. (should be transparent largely) * Locking is handled differently, there is no dpkg lock class, the _system class provides Lock/UnLock methods -* pkgDepCache is not a subclass of pkgCache, it agregates it now. Some +* pkgDepCache is not a subclass of pkgCache, it aggregates it now. Some compatibility functions are provided that make this transition fairly easy. * The following functions have had minor argument changes: diff --git a/doc/method.sgml b/doc/method.sgml index 27db50173..5aa7b52e8 100644 --- a/doc/method.sgml +++ b/doc/method.sgml @@ -246,14 +246,14 @@ pre-transfer status for Internet type methods. Fields: Message 200 URI Start -Indicates the URI is starting to be transfered. The URI is specified +Indicates the URI is starting to be transferred. The URI is specified along with stats about the file itself. Fields: URI, Size, Last-Modified, Resume-Point 201 URI Done -Indicates that a URI has completed being transfered. It is possible +Indicates that a URI has completed being transferred. It is possible to specify a 201 URI Done without a URI Start which would -mean no data was transfered but the file is now available. A Filename +mean no data was transferred but the file is now available. A Filename field is specified when the URI is directly available in the local pathname space. APT will either directly use that file or copy it into another location. It is possible to return Alt-* fields to indicate that diff --git a/doc/style.txt b/doc/style.txt index 2072251d0..7658b0314 100644 --- a/doc/style.txt +++ b/doc/style.txt @@ -9,7 +9,7 @@ Ver - A version Indenting, Comments, Etc ~~~~~~~~~~~~~~~~~~~~~~~~ Would make Linus cry :P However it is what I prefer. 3 space indent, -8 space tab all braces on seperate lines, function return on the same line +8 space tab all braces on separate lines, function return on the same line as the function, cases aligned with their code. The 'indent' options for this style are: indent -bl -bli0 -di1 -i3 -nsc -ts8 -npcs -npsl @@ -60,13 +60,13 @@ almost always designates a change in ownership rules). * Pass by non-const reference may be used to indicate a OUT type variable * Pass by pointer (except in the case where the pointer is really an array) should be used when the object will be retained or ownership will be - transfered. Ownership transference should be rare and noted by a comment. + transferred. Ownership transference should be rare and noted by a comment. * Standard C things (FILE * etc) should be left as is. * Return by references should indicate a borrowed object * Return by pointer (except arrays) should indicate ownership is - transfered. Return by pointer should not be used unless ownership is - transfered. + transferred. Return by pointer should not be used unless ownership is + transferred. * Return by pointer to variable indicates ownership transfer unless the pointer is an 'input' parameter (designated generally by an =0, indicating a default of 'none') diff --git a/ftparchive/apt-ftparchive.cc b/ftparchive/apt-ftparchive.cc index 2639bc2f6..712f8469a 100644 --- a/ftparchive/apt-ftparchive.cc +++ b/ftparchive/apt-ftparchive.cc @@ -864,7 +864,7 @@ bool Generate(CommandLine &CmdL) unsigned long MaxContentsChange = Setup.FindI("Default::MaxContentsChange",UINT_MAX)*1024; for (vector::iterator I = PkgList.begin(); I != PkgList.end(); ++I) { - // This record is not relevent + // This record is not relevant if (I->ContentsDone == true || I->Contents.empty() == true) continue; diff --git a/methods/file.cc b/methods/file.cc index 7ed4e6f60..3d0687c5b 100644 --- a/methods/file.cc +++ b/methods/file.cc @@ -5,7 +5,7 @@ File URI method for APT - This simply checks that the file specified exists, if so the relevent + This simply checks that the file specified exists, if so the relevant information is returned. If a .gz filename is specified then the file name with .gz removed will also be checked and information about it will be returned in Alt-* diff --git a/methods/ftp.cc b/methods/ftp.cc index 70bf4f607..621f48476 100644 --- a/methods/ftp.cc +++ b/methods/ftp.cc @@ -3,7 +3,7 @@ // $Id: ftp.cc,v 1.31.2.1 2004/01/16 18:58:50 mdz Exp $ /* ###################################################################### - FTP Aquire Method - This is the FTP aquire method for APT. + FTP Acquire Method - This is the FTP acquire method for APT. This is a very simple implementation that does not try to optimize at all. Commands are sent syncronously with the FTP server (as the @@ -946,7 +946,7 @@ FtpMethod::FtpMethod() : pkgAcqMethod("1.0",SendConfig) /*}}}*/ // FtpMethod::SigTerm - Handle a fatal signal /*{{{*/ // --------------------------------------------------------------------- -/* This closes and timestamps the open file. This is neccessary to get +/* This closes and timestamps the open file. This is necessary to get resume behavoir on user abort */ void FtpMethod::SigTerm(int) { diff --git a/methods/ftp.h b/methods/ftp.h index 2634f0732..8055c389f 100644 --- a/methods/ftp.h +++ b/methods/ftp.h @@ -3,7 +3,7 @@ // $Id: ftp.h,v 1.4 2001/03/06 07:15:29 jgg Exp $ /* ###################################################################### - FTP Aquire Method - This is the FTP aquire method for APT. + FTP Acquire Method - This is the FTP acquire method for APT. ##################################################################### */ /*}}}*/ diff --git a/methods/http.cc b/methods/http.cc index 96c4e3ca0..42b31beeb 100644 --- a/methods/http.cc +++ b/methods/http.cc @@ -3,7 +3,7 @@ // $Id: http.cc,v 1.59 2004/05/08 19:42:35 mdz Exp $ /* ###################################################################### - HTTP Acquire Method - This is the HTTP aquire method for APT. + HTTP Acquire Method - This is the HTTP acquire method for APT. It uses HTTP/1.1 and many of the fancy options there-in, such as pipelining, range, if-range and so on. @@ -732,7 +732,7 @@ void HttpMethod::SendReq(FetchItem *Itm) } // If we ask for uncompressed files servers might respond with content- - // negotation which lets us end up with compressed files we do not support, + // negotiation which lets us end up with compressed files we do not support, // see 657029, 657560 and co, so if we have no extension on the request // ask for text only. As a sidenote: If there is nothing to negotate servers // seem to be nice and ignore it. diff --git a/methods/http.h b/methods/http.h index 02c04e8ae..450a42eed 100644 --- a/methods/http.h +++ b/methods/http.h @@ -3,7 +3,7 @@ // $Id: http.h,v 1.12 2002/04/18 05:09:38 jgg Exp $ /* ###################################################################### - HTTP Acquire Method - This is the HTTP aquire method for APT. + HTTP Acquire Method - This is the HTTP acquire method for APT. ##################################################################### */ /*}}}*/ diff --git a/methods/https.cc b/methods/https.cc index e713be19f..febe6a0f0 100644 --- a/methods/https.cc +++ b/methods/https.cc @@ -3,7 +3,7 @@ // $Id: http.cc,v 1.59 2004/05/08 19:42:35 mdz Exp $ /* ###################################################################### - HTTPS Acquire Method - This is the HTTPS aquire method for APT. + HTTPS Acquire Method - This is the HTTPS acquire method for APT. It uses libcurl @@ -309,7 +309,7 @@ bool HttpsMethod::Fetch(FetchItem *Itm) curl_easy_setopt(curl, CURLOPT_ERRORBUFFER, curl_errorstr); // If we ask for uncompressed files servers might respond with content- - // negotation which lets us end up with compressed files we do not support, + // negotiation which lets us end up with compressed files we do not support, // see 657029, 657560 and co, so if we have no extension on the request // ask for text only. As a sidenote: If there is nothing to negotate servers // seem to be nice and ignore it. diff --git a/methods/https.h b/methods/https.h index 89a89d19c..ab0dd3407 100644 --- a/methods/https.h +++ b/methods/https.h @@ -3,7 +3,7 @@ // $Id: http.h,v 1.12 2002/04/18 05:09:38 jgg Exp $ /* ###################################################################### - HTTP Acquire Method - This is the HTTP aquire method for APT. + HTTP Acquire Method - This is the HTTP acquire method for APT. ##################################################################### */ /*}}}*/ diff --git a/methods/mirror.cc b/methods/mirror.cc index 83ef0d133..085f3717b 100644 --- a/methods/mirror.cc +++ b/methods/mirror.cc @@ -3,7 +3,7 @@ // $Id: mirror.cc,v 1.59 2004/05/08 19:42:35 mdz Exp $ /* ###################################################################### - Mirror Aquire Method - This is the Mirror aquire method for APT. + Mirror Acquire Method - This is the Mirror acquire method for APT. ##################################################################### */ /*}}}*/ @@ -49,7 +49,7 @@ using namespace std; * of the failure that is also send to LP * * TODO: - * - deal with runing as non-root because we can't write to the lists + * - deal with running as non-root because we can't write to the lists dir then -> use the cached mirror file * - better method to download than having a pkgAcquire interface here * and better error handling there! @@ -290,7 +290,7 @@ bool MirrorMethod::InitMirrors() // FIXME: make the mirror selection more clever, do not // just use the first one! // BUT: we can not make this random, the mirror has to be - // stable accross session, because otherwise we can + // stable across session, because otherwise we can // get into sync issues (got indexfiles from mirror A, // but packages from mirror B - one might be out of date etc) ifstream in(MirrorFile.c_str()); diff --git a/methods/mirror.h b/methods/mirror.h index 81e531e21..1dd9f2ec6 100644 --- a/methods/mirror.h +++ b/methods/mirror.h @@ -3,7 +3,7 @@ // $Id: http.h,v 1.12 2002/04/18 05:09:38 jgg Exp $ /* ###################################################################### - MIRROR Aquire Method - This is the MIRROR aquire method for APT. + MIRROR Acquire Method - This is the MIRROR acquire method for APT. ##################################################################### */ /*}}}*/ diff --git a/methods/rfc2553emu.h b/methods/rfc2553emu.h index b15facb31..ad7ddf48a 100644 --- a/methods/rfc2553emu.h +++ b/methods/rfc2553emu.h @@ -75,7 +75,7 @@ #endif /* If we don't have getaddrinfo then we probably don't have - sockaddr_storage either (same RFC) so we definately will not be + sockaddr_storage either (same RFC) so we definitely will not be doing any IPv6 stuff. Do not use the members of this structure to retain portability, cast to a sockaddr. */ #define sockaddr_storage sockaddr_in diff --git a/methods/rsh.cc b/methods/rsh.cc index 4e1aaea26..550f77eca 100644 --- a/methods/rsh.cc +++ b/methods/rsh.cc @@ -255,7 +255,7 @@ bool RSHConn::WriteMsg(std::string &Text,bool Sync,const char *Fmt,...) /*}}}*/ // RSHConn::Size - Return the size of the file /*{{{*/ // --------------------------------------------------------------------- -/* Right now for successfull transfer the file size must be known in +/* Right now for successful transfer the file size must be known in advance. */ bool RSHConn::Size(const char *Path,unsigned long long &Size) { diff --git a/methods/server.cc b/methods/server.cc index 6dd3970a6..ef90c809c 100644 --- a/methods/server.cc +++ b/methods/server.cc @@ -86,7 +86,7 @@ ServerState::RunHeadersResult ServerState::RunHeaders(FileFd * const File) if (Result == 100) continue; - // Tidy up the connection persistance state. + // Tidy up the connection persistence state. if (Encoding == Closes && HaveContent == true) Persistent = false; @@ -146,7 +146,7 @@ bool ServerState::HeaderLine(string Line) return _error->Error(_("The HTTP server sent an invalid reply header")); } - /* Check the HTTP response header to get the default persistance + /* Check the HTTP response header to get the default persistence state. */ if (Major < 1) Persistent = false; @@ -366,7 +366,7 @@ ServerMethod::DealWithHeaders(FetchResult &Res) /*}}}*/ // ServerMethod::SigTerm - Handle a fatal signal /*{{{*/ // --------------------------------------------------------------------- -/* This closes and timestamps the open file. This is neccessary to get +/* This closes and timestamps the open file. This is necessary to get resume behavoir on user abort */ void ServerMethod::SigTerm(int) { diff --git a/test/integration/framework b/test/integration/framework index 08d796a10..63df86df7 100644 --- a/test/integration/framework +++ b/test/integration/framework @@ -947,7 +947,7 @@ URI: $1 Filename: ${2} " # simple worker keeping stdin open until we are done (201) or error (400) - # and requesting new URIs on try-agains/redirects inbetween + # and requesting new URIs on try-agains/redirects in-between { tail -n 999 -f "$DOWNLOG" & echo "TAILPID: $!"; } | while read f1 f2; do if [ "$f1" = 'TAILPID:' ]; then TAILPID="$f2" diff --git a/test/integration/test-apt-get-source b/test/integration/test-apt-get-source index 083e26db1..33bd980d0 100755 --- a/test/integration/test-apt-get-source +++ b/test/integration/test-apt-get-source @@ -65,7 +65,7 @@ Need to get 0 B of source archives. 'file://${APTARCHIVE}/foo_1.0.tar.gz' foo_1.0.tar.gz 0 MD5Sum:d41d8cd98f00b204e9800998ecf8427e" aptget source -q --print-uris foo=1.0 # select by release with no binary package (Bug#731102) but ensure to get -# higest version +# highest version testequal "$HEADER Selected version '0.1' (wheezy) for foo Need to get 0 B of source archives. diff --git a/test/integration/test-bug-617690-allow-unauthenticated-makes-all-untrusted b/test/integration/test-bug-617690-allow-unauthenticated-makes-all-untrusted index 633c197c0..f93510fd7 100755 --- a/test/integration/test-bug-617690-allow-unauthenticated-makes-all-untrusted +++ b/test/integration/test-bug-617690-allow-unauthenticated-makes-all-untrusted @@ -11,7 +11,7 @@ buildsimplenativepackage 'cool' 'i386' '1.0' 'unstable' setupaptarchive --no-update testfileexists() { - msgtest 'Test for existance of file' "$1" + msgtest 'Test for existence of file' "$1" test -e "$1" && msgpass || msgfail rm -f "$1" } diff --git a/test/integration/test-sourceslist-arch-plusminus-options b/test/integration/test-sourceslist-arch-plusminus-options index 0d4d7448f..0091964e6 100755 --- a/test/integration/test-sourceslist-arch-plusminus-options +++ b/test/integration/test-sourceslist-arch-plusminus-options @@ -76,7 +76,7 @@ echo 'deb [arch=mips,i386 arch-=mips] http://example.org/debian stable rocks' > testbinaries 'substract from a arch-set' 'i386' echo 'deb [arch=mips,i386 arch-=mips] http://example.org/debian stable rocks' > rootdir/etc/apt/sources.list -testbinaries 'useless substract from a arch-set' 'i386' +testbinaries 'useless subtract from a arch-set' 'i386' echo 'deb [arch=mips,i386 arch+=armhf] http://example.org/debian stable rocks' > rootdir/etc/apt/sources.list testbinaries 'addition to a arch-set' 'i386' 'mips' 'armhf' diff --git a/test/libapt/globalerror_test.cc b/test/libapt/globalerror_test.cc index 72044d493..b6939231d 100644 --- a/test/libapt/globalerror_test.cc +++ b/test/libapt/globalerror_test.cc @@ -15,17 +15,17 @@ int main(int argc,char *argv[]) equals(_error->empty(), true); equals(_error->empty(GlobalError::DEBUG), false); equals(_error->PendingError(), false); - equals(_error->Error("%s horrible %s %d times", "Something", "happend", 2), false); + equals(_error->Error("%s horrible %s %d times", "Something", "happened", 2), false); equals(_error->PendingError(), true); std::string text; equals(_error->PopMessage(text), false); equals(_error->PendingError(), true); equals(text, "A Notice"); equals(_error->PopMessage(text), true); - equals(text, "Something horrible happend 2 times"); + equals(text, "Something horrible happened 2 times"); equals(_error->empty(GlobalError::DEBUG), true); equals(_error->PendingError(), false); - equals(_error->Error("%s horrible %s %d times", "Something", "happend", 2), false); + equals(_error->Error("%s horrible %s %d times", "Something", "happened", 2), false); equals(_error->PendingError(), true); equals(_error->empty(GlobalError::FATAL), false); _error->Discard(); @@ -33,7 +33,7 @@ int main(int argc,char *argv[]) equals(_error->empty(), true); equals(_error->PendingError(), false); equals(_error->Notice("%s Notice", "A"), false); - equals(_error->Error("%s horrible %s %d times", "Something", "happend", 2), false); + equals(_error->Error("%s horrible %s %d times", "Something", "happened", 2), false); equals(_error->PendingError(), true); equals(_error->empty(GlobalError::NOTICE), false); _error->PushToStack(); @@ -49,12 +49,12 @@ int main(int argc,char *argv[]) equals(_error->PendingError(), true); equals(text, "A Notice"); equals(_error->PopMessage(text), true); - equals(text, "Something horrible happend 2 times"); + equals(text, "Something horrible happened 2 times"); equals(_error->PendingError(), false); equals(_error->empty(), true); equals(_error->Notice("%s Notice", "A"), false); - equals(_error->Error("%s horrible %s %d times", "Something", "happend", 2), false); + equals(_error->Error("%s horrible %s %d times", "Something", "happened", 2), false); equals(_error->PendingError(), true); equals(_error->empty(GlobalError::NOTICE), false); _error->PushToStack(); @@ -70,7 +70,7 @@ int main(int argc,char *argv[]) equals(_error->PendingError(), true); equals(text, "A Notice"); equals(_error->PopMessage(text), true); - equals(text, "Something horrible happend 2 times"); + equals(text, "Something horrible happened 2 times"); equals(_error->PendingError(), false); equals(_error->empty(), false); equals(_error->PopMessage(text), false); @@ -78,24 +78,24 @@ int main(int argc,char *argv[]) equals(_error->empty(), true); errno = 0; - equals(_error->Errno("errno", "%s horrible %s %d times", "Something", "happend", 2), false); + equals(_error->Errno("errno", "%s horrible %s %d times", "Something", "happened", 2), false); equals(_error->empty(), false); equals(_error->PendingError(), true); equals(_error->PopMessage(text), true); equals(_error->PendingError(), false); - equals(text, std::string("Something horrible happend 2 times - errno (0: ").append(textOfErrnoZero).append(")")); + equals(text, std::string("Something horrible happened 2 times - errno (0: ").append(textOfErrnoZero).append(")")); equals(_error->empty(), true); std::string longText; for (size_t i = 0; i < 500; ++i) longText.append("a"); - equals(_error->Error("%s horrible %s %d times", longText.c_str(), "happend", 2), false); + equals(_error->Error("%s horrible %s %d times", longText.c_str(), "happened", 2), false); equals(_error->PopMessage(text), true); - equals(text, std::string(longText).append(" horrible happend 2 times")); + equals(text, std::string(longText).append(" horrible happened 2 times")); - equals(_error->Errno("errno", "%s horrible %s %d times", longText.c_str(), "happend", 2), false); + equals(_error->Errno("errno", "%s horrible %s %d times", longText.c_str(), "happened", 2), false); equals(_error->PopMessage(text), true); - equals(text, std::string(longText).append(" horrible happend 2 times - errno (0: ").append(textOfErrnoZero).append(")")); + equals(text, std::string(longText).append(" horrible happened 2 times - errno (0: ").append(textOfErrnoZero).append(")")); equals(_error->Warning("Репозиторий не обновлён и будут %d %s", 4, "test"), false); equals(_error->PopMessage(text), false); -- cgit v1.2.3-70-g09d2 From adff049d96e27242b5784455399238df8680dceb Mon Sep 17 00:00:00 2001 From: Michael Vogt Date: Sat, 22 Feb 2014 21:07:38 +0100 Subject: add testcase for Bug#718329 --- test/integration/framework | 3 +- .../test-apt-bug-718329-support-data.tar | 34 ++++++++++++++++++++++ 2 files changed, 36 insertions(+), 1 deletion(-) create mode 100755 test/integration/test-apt-bug-718329-support-data.tar (limited to 'test/integration') diff --git a/test/integration/framework b/test/integration/framework index 63df86df7..be2cb95d1 100644 --- a/test/integration/framework +++ b/test/integration/framework @@ -377,6 +377,7 @@ buildsimplenativepackage() { local SECTION="${7:-others}" local PRIORITY="${8:-optional}" local FILE_TREE="$9" + local COMPRESS_TYPE="${10:-gzip}" local DISTSECTION if [ "$SECTION" = "$(echo "$SECTION" | cut -d'/' -f 2)" ]; then DISTSECTION="main" @@ -442,7 +443,7 @@ Package: $NAME" >> ${BUILDDIR}/debian/control local LOG="${BUILDDIR}/../${NAME}_${VERSION}_${arch}.dpkg-deb.log" # ensure the right permissions as dpkg-deb ensists chmod 755 ${BUILDDIR}/debian/tmp/DEBIAN - if ! dpkg-deb --build ${BUILDDIR}/debian/tmp ${BUILDDIR}/.. >$LOG 2>&1; then + if ! dpkg-deb -Z${COMPRESS_TYPE} --build ${BUILDDIR}/debian/tmp ${BUILDDIR}/.. >$LOG 2>&1; then cat $LOG false fi diff --git a/test/integration/test-apt-bug-718329-support-data.tar b/test/integration/test-apt-bug-718329-support-data.tar new file mode 100755 index 000000000..5cfb31917 --- /dev/null +++ b/test/integration/test-apt-bug-718329-support-data.tar @@ -0,0 +1,34 @@ +#!/bin/sh +set -e + +test_process_package_with_compression() { + COMPRESSOR="$1" + DATA_TAR="$2" + + msgtest "Testing apt-ftparchive with compression type: $COMPRESSOR" + + buildsimplenativepackage 'pkg' 'all' '1.0' '' '' 'some descr' '' '' '' "$COMPRESSOR" + testequal "debian-binary +control.tar.gz +$DATA_TAR" ar t incoming/pkg_1.0_all.deb + + testequal "Package: pkg" echo "$(aptftparchive packages incoming/|grep ^Package)" + + testequal "usr/bin/pkg-all pkg +usr/share/doc/pkg/FEATURES pkg +usr/share/doc/pkg/changelog pkg +usr/share/doc/pkg/copyright pkg" aptftparchive contents incoming/ + + rm -rf incoming/* +} + +TESTDIR=$(readlink -f $(dirname $0)) +. $TESTDIR/framework + +setupenvironment +test_process_package_with_compression "gzip" "data.tar.gz" +test_process_package_with_compression "none" "data.tar" +test_process_package_with_compression "xz" "data.tar.xz" + + + -- cgit v1.2.3-70-g09d2 From 3e5f181e51bc94fa45e9a36fb094cd3051212013 Mon Sep 17 00:00:00 2001 From: Michael Vogt Date: Sat, 22 Feb 2014 22:04:22 +0100 Subject: fix ADT failure in downloadfile() --- test/integration/framework | 6 +++++- 1 file changed, 5 insertions(+), 1 deletion(-) (limited to 'test/integration') diff --git a/test/integration/framework b/test/integration/framework index be2cb95d1..99214ef73 100644 --- a/test/integration/framework +++ b/test/integration/framework @@ -935,6 +935,10 @@ changetocdrom() { downloadfile() { PROTO="$(echo "$1" | cut -d':' -f 1)" + if [ ! -x "${METHODSDIR}/${PROTO}" ]; then + msgwarn "can not find ${METHODSDIR}/${PROTO}" + return 1 + fi local DOWNLOG="${TMPWORKINGDIRECTORY}/download.log" rm -f "$DOWNLOG" touch "$DOWNLOG" @@ -963,7 +967,7 @@ Filename: ${2} break fi done - } | LD_LIBRARY_PATH=${BUILDDIRECTORY} ${BUILDDIRECTORY}/methods/${PROTO} 2>&1 | tee "$DOWNLOG" + } | LD_LIBRARY_PATH=${BUILDDIRECTORY} ${METHODSDIR}/${PROTO} 2>&1 | tee "$DOWNLOG" rm "$DOWNLOG" # only if the file exists the download was successful if [ -e "$2" ]; then -- cgit v1.2.3-70-g09d2 From 3c74988b38b9ef9326639603a9687ec0d292dfc9 Mon Sep 17 00:00:00 2001 From: Michael Vogt Date: Sat, 22 Feb 2014 22:28:36 +0100 Subject: skip test if "apt" is not build --- test/integration/test-apt-cli-list | 6 ++++++ test/integration/test-apt-cli-search | 6 ++++++ test/integration/test-apt-cli-show | 6 ++++++ test/integration/test-apt-cli-upgrade | 7 +++++++ 4 files changed, 25 insertions(+) (limited to 'test/integration') diff --git a/test/integration/test-apt-cli-list b/test/integration/test-apt-cli-list index 47507aeb8..47cfb624a 100755 --- a/test/integration/test-apt-cli-list +++ b/test/integration/test-apt-cli-list @@ -7,6 +7,12 @@ TESTDIR=$(readlink -f $(dirname $0)) setupenvironment configarchitecture "i386" +if [ ! -x ${BUILDDIRECTORY}/apt ]; then + msgmsg "No ${BUILDDIRECTORY}/apt" + msgskip + exit 0 +fi + insertpackage 'unstable' 'foo' 'all' '1.0' insertinstalledpackage 'bar' 'i386' '1.0' diff --git a/test/integration/test-apt-cli-search b/test/integration/test-apt-cli-search index 979aff880..84650b366 100755 --- a/test/integration/test-apt-cli-search +++ b/test/integration/test-apt-cli-search @@ -7,6 +7,12 @@ TESTDIR=$(readlink -f $(dirname $0)) setupenvironment configarchitecture "i386" +if [ ! -x ${BUILDDIRECTORY}/apt ]; then + msgmsg "No ${BUILDDIRECTORY}/apt" + msgskip + exit 0 +fi + DESCR='Some description that has a unusual word xxyyzz and aabbcc' DESCR2='Some other description with the unusual aabbcc only' insertpackage 'unstable' 'foo' 'all' '1.0' '' '' "$DESCR" diff --git a/test/integration/test-apt-cli-show b/test/integration/test-apt-cli-show index 91cc9a3c0..4c8e134d6 100755 --- a/test/integration/test-apt-cli-show +++ b/test/integration/test-apt-cli-show @@ -7,6 +7,12 @@ TESTDIR=$(readlink -f $(dirname $0)) setupenvironment configarchitecture "i386" +if [ ! -x ${BUILDDIRECTORY}/apt ]; then + msgmsg "No ${BUILDDIRECTORY}/apt" + msgskip + exit 0 +fi + DESCR='Some description That has multiple lines' insertpackage 'unstable' 'foo' 'all' '1.0' '' '' "$DESCR" diff --git a/test/integration/test-apt-cli-upgrade b/test/integration/test-apt-cli-upgrade index 21ce69413..b6ee2270b 100755 --- a/test/integration/test-apt-cli-upgrade +++ b/test/integration/test-apt-cli-upgrade @@ -7,6 +7,13 @@ TESTDIR=$(readlink -f $(dirname $0)) setupenvironment configarchitecture "i386" +if [ ! -x ${BUILDDIRECTORY}/apt ]; then + msgmsg "No ${BUILDDIRECTORY}/apt" + msgskip + exit 0 +fi + + insertpackage 'unstable' 'foo' 'all' '2.0' 'Depends: foo-new-dependency' insertpackage 'unstable' 'foo-new-dependency' 'all' '2.0' insertinstalledpackage 'foo' 'all' '1.0' -- cgit v1.2.3-70-g09d2 From 00f2d6c1aa60e8e5cf0e2a0db62e5e39088cb763 Mon Sep 17 00:00:00 2001 From: Michael Vogt Date: Sun, 23 Feb 2014 00:05:43 +0100 Subject: test/integration/test-ubuntu-bug-346386-apt-get-update-paywall: use http-method from METHODSDIR --- test/integration/test-ubuntu-bug-346386-apt-get-update-paywall | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) (limited to 'test/integration') diff --git a/test/integration/test-ubuntu-bug-346386-apt-get-update-paywall b/test/integration/test-ubuntu-bug-346386-apt-get-update-paywall index 1576c396c..7112d2b45 100755 --- a/test/integration/test-ubuntu-bug-346386-apt-get-update-paywall +++ b/test/integration/test-ubuntu-bug-346386-apt-get-update-paywall @@ -22,7 +22,7 @@ Config-Item: Acquire::http::DependOnSTDIN=0 600 Acquire URI URI: http://localhost:8080/holygrail Filename: knights-talking -' | http >/dev/null 2>&1 && msgpass || msgfail +' | ${METHODSDIR}/http >/dev/null 2>&1 && msgpass || msgfail testfileequal knights-talking 'ni ni ni' ensure_n_canary_strings_in_dir() { -- cgit v1.2.3-70-g09d2 From ed9665aedf77b3b8345bd4ed33de7885738e29f0 Mon Sep 17 00:00:00 2001 From: Michael Vogt Date: Thu, 27 Feb 2014 16:46:05 +0100 Subject: initial version of apt-helper --- apt-pkg/acquire-item.cc | 2 +- cmdline/apt-helper.cc | 127 ++++++++++++++++++++++++++++ cmdline/makefile | 7 ++ debian/rules | 3 + debian/tests/run-tests | 1 + test/integration/framework | 43 ++-------- test/integration/test-apt-https-no-redirect | 2 +- 7 files changed, 148 insertions(+), 37 deletions(-) create mode 100644 cmdline/apt-helper.cc (limited to 'test/integration') diff --git a/apt-pkg/acquire-item.cc b/apt-pkg/acquire-item.cc index 36bb48382..de03011bf 100644 --- a/apt-pkg/acquire-item.cc +++ b/apt-pkg/acquire-item.cc @@ -2201,7 +2201,7 @@ pkgAcqFile::pkgAcqFile(pkgAcquire *Owner,string URI,string Hash, if (stat(DestFile.c_str(),&Buf) == 0) { // Hmm, the partial file is too big, erase it - if ((unsigned long long)Buf.st_size > Size) + if ((Size > 0) && (unsigned long long)Buf.st_size > Size) unlink(DestFile.c_str()); else PartialSize = Buf.st_size; diff --git a/cmdline/apt-helper.cc b/cmdline/apt-helper.cc new file mode 100644 index 000000000..c1c8b2178 --- /dev/null +++ b/cmdline/apt-helper.cc @@ -0,0 +1,127 @@ +// -*- mode: cpp; mode: fold -*- +// Description /*{{{*/ +/* ##################################################################### + apt-helper - cmdline helpers + ##################################################################### */ + /*}}}*/ +// Include Files /*{{{*/ +#include + +#include +#include +#include +#include +#include +#include +#include +#include + +#include +#include +#include + +#include +#include +#include +#include +#include +#include + + + +#include + /*}}}*/ +using namespace std; + +bool DoDownloadFile(CommandLine &CmdL) +{ + if (CmdL.FileSize() <= 2) + return _error->Error(_("Must specify at least one pair url/filename")); + + + pkgAcquire Fetcher; + AcqTextStatus Stat(ScreenWidth, _config->FindI("quiet",0)); + Fetcher.Setup(&Stat); + std::string download_uri = CmdL.FileList[1]; + std::string targetfile = CmdL.FileList[2]; + new pkgAcqFile(&Fetcher, download_uri, "", 0, "desc", "short-desc", + "dest-dir-ignored", targetfile); + Fetcher.Run(); + if (!FileExists(targetfile)) + { + _error->Error(_("Download Failed")); + return false; + } + return true; +} + +bool ShowHelp(CommandLine &CmdL) +{ + ioprintf(cout,_("%s %s for %s compiled on %s %s\n"),PACKAGE,PACKAGE_VERSION, + COMMON_ARCH,__DATE__,__TIME__); + + if (_config->FindB("version") == true) + return true; + + cout << + _("Usage: apt-helper [options] command\n" + " apt-helper [options] download-file uri target-path\n" + "\n" + "apt-helper is a internal helper for apt\n" + "\n" + "Commands:\n" + " download-file - download the given uri to the target-path\n" + "\n" + " This APT helper has Super Meep Powers.\n"); + return true; +} + + +int main(int argc,const char *argv[]) /*{{{*/ +{ + CommandLine::Dispatch Cmds[] = {{"help",&ShowHelp}, + {"download-file", &DoDownloadFile}, + {0,0}}; + + std::vector Args = getCommandArgs( + "apt-download", CommandLine::GetCommand(Cmds, argc, argv)); + + // Set up gettext support + setlocale(LC_ALL,""); + textdomain(PACKAGE); + + // Parse the command line and initialize the package library + CommandLine CmdL(Args.data(),_config); + if (pkgInitConfig(*_config) == false || + CmdL.Parse(argc,argv) == false || + pkgInitSystem(*_config,_system) == false) + { + if (_config->FindB("version") == true) + ShowHelp(CmdL); + _error->DumpErrors(); + return 100; + } + + // See if the help should be shown + if (_config->FindB("help") == true || + _config->FindB("version") == true || + CmdL.FileSize() == 0) + { + ShowHelp(CmdL); + return 0; + } + + InitOutput(); + + // Match the operation + CmdL.DispatchArg(Cmds); + + // Print any errors or warnings found during parsing + bool const Errors = _error->PendingError(); + if (_config->FindI("quiet",0) > 0) + _error->DumpErrors(); + else + _error->DumpErrors(GlobalError::DEBUG); + return Errors == true ? 100 : 0; +} + /*}}}*/ diff --git a/cmdline/makefile b/cmdline/makefile index f89192e10..c4a249cd6 100644 --- a/cmdline/makefile +++ b/cmdline/makefile @@ -47,6 +47,13 @@ LIB_MAKES = apt-pkg/makefile SOURCE = apt-mark.cc include $(PROGRAM_H) +# The apt-helper +PROGRAM=apt-helper +SLIBS = -lapt-pkg -lapt-private $(INTLLIBS) +LIB_MAKES = apt-pkg/makefile +SOURCE = apt-helper.cc +include $(PROGRAM_H) + # The apt-report-mirror-failure program #SOURCE=apt-report-mirror-failure #TO=$(BIN) diff --git a/debian/rules b/debian/rules index 1b3782ab6..eec016607 100755 --- a/debian/rules +++ b/debian/rules @@ -207,6 +207,9 @@ apt: build-binary build-manpages debian/apt.install #mv debian/$@/usr/bin/apt-report-mirror-failure \ # debian/$@/usr/lib/apt/apt-report-mirror-failure \ + # move the apt-helper in place + mv debian/$@/usr/bin/apt-helper debian/$@/usr/lib/apt/apt-helper + dh_bugfiles -p$@ dh_lintian -p$@ dh_installexamples -p$@ $(BLD)/docs/examples/* diff --git a/debian/tests/run-tests b/debian/tests/run-tests index 6dc4eaa93..e03db9b0c 100644 --- a/debian/tests/run-tests +++ b/debian/tests/run-tests @@ -14,5 +14,6 @@ make -C test/interactive-helper/ # run against the installed apt APT_INTEGRATION_TESTS_WEBSERVER_BIN_DIR=$(pwd)/build/bin \ APT_INTEGRATION_TESTS_METHODS_DIR=/usr/lib/apt/methods \ +APT_INTEGRATION_TESTS_LIBEXEC_DIR=/usr/lib/apt/ \ APT_INTEGRATION_TESTS_BUILD_DIR=/usr/bin \ ./test/integration/run-tests diff --git a/test/integration/framework b/test/integration/framework index 99214ef73..911a4d742 100644 --- a/test/integration/framework +++ b/test/integration/framework @@ -111,6 +111,9 @@ aptftparchive() { runapt apt-ftparchive "$@"; } aptkey() { runapt apt-key "$@"; } aptmark() { runapt apt-mark "$@"; } apt() { runapt apt "$@"; } +apthelper() { + LD_LIBRARY_PATH=${APTHELPERBINDIR} ${APTHELPERBINDIR}/apt-helper "$@"; +} aptwebserver() { LD_LIBRARY_PATH=${APTWEBSERVERBINDIR} ${APTWEBSERVERBINDIR}/aptwebserver "$@"; } @@ -177,6 +180,7 @@ setupenvironment() { # allow overriding the default BUILDDIR location BUILDDIRECTORY=${APT_INTEGRATION_TESTS_BUILD_DIR:-"${TESTDIRECTORY}/../../build/bin"} METHODSDIR=${APT_INTEGRATION_TESTS_METHODS_DIR:-"${BUILDDIRECTORY}/methods"} + APTHELPERBINDIR=${APT_INTEGRATION_TESTS_LIBEXEC_DIR:-"${BUILDDIRECTORY}"} APTWEBSERVERBINDIR=${APT_INTEGRATION_TESTS_WEBSERVER_BIN_DIR:-"${BUILDDIRECTORY}"} test -x "${BUILDDIRECTORY}/apt-get" || msgdie "You need to build tree first" # ----- @@ -934,41 +938,10 @@ changetocdrom() { } downloadfile() { - PROTO="$(echo "$1" | cut -d':' -f 1)" - if [ ! -x "${METHODSDIR}/${PROTO}" ]; then - msgwarn "can not find ${METHODSDIR}/${PROTO}" - return 1 - fi - local DOWNLOG="${TMPWORKINGDIRECTORY}/download.log" - rm -f "$DOWNLOG" - touch "$DOWNLOG" - { - echo "601 Configuration -Config-Item: Acquire::https::CaInfo=${TESTDIR}/apt.pem -Config-Item: Debug::Acquire::${PROTO}=1 - -600 Acquire URI -URI: $1 -Filename: ${2} -" - # simple worker keeping stdin open until we are done (201) or error (400) - # and requesting new URIs on try-agains/redirects in-between - { tail -n 999 -f "$DOWNLOG" & echo "TAILPID: $!"; } | while read f1 f2; do - if [ "$f1" = 'TAILPID:' ]; then - TAILPID="$f2" - elif [ "$f1" = 'New-URI:' ]; then - echo "600 Acquire URI -URI: $f2 -Filename: ${2} -" - elif [ "$f1" = '201' ] || [ "$f1" = '400' ]; then - # tail would only die on next read – which never happens - test -z "$TAILPID" || kill -s HUP "$TAILPID" - break - fi - done - } | LD_LIBRARY_PATH=${BUILDDIRECTORY} ${METHODSDIR}/${PROTO} 2>&1 | tee "$DOWNLOG" - rm "$DOWNLOG" + PROTO="$(echo "$1" | cut -d':' -f 1)" + apthelper -o Acquire::https::CaInfo=${TESTDIR}/apt.pem \ + -o Debug::Acquire::${PROTO}=1 \ + download-file "$1" "$2" 2>&1 # only if the file exists the download was successful if [ -e "$2" ]; then return 0 diff --git a/test/integration/test-apt-https-no-redirect b/test/integration/test-apt-https-no-redirect index c405d1167..0408c6832 100755 --- a/test/integration/test-apt-https-no-redirect +++ b/test/integration/test-apt-https-no-redirect @@ -19,6 +19,6 @@ msgtest 'normal https download works' downloadfile 'https://localhost:4433/pool/apt_1.0/changelog' changelog >/dev/null 2>/dev/null && msgpass || msgfail msgtest 'redirecting https to http does not work' -downloadfile 'https://localhost:4433/redirectme/pool/apt_1.0/changelog' changelog3 2>&1 | grep "Protocol http not supported or disabled in libcurl" > /dev/null && msgpass +downloadfile 'https://localhost:4433/redirectme/pool/apt_1.0/changelog' changelog3 2>&1 | grep "Protocol http not supported or disabled in libcurl" > /dev/null && msgpass || msgfail -- cgit v1.2.3-70-g09d2 From e43a426e5d402d36eb180935fbbf1430a4a86e3f Mon Sep 17 00:00:00 2001 From: Michael Vogt Date: Thu, 27 Feb 2014 16:46:05 +0100 Subject: initial version of apt-helper --- apt-pkg/acquire-item.cc | 2 +- cmdline/apt-helper.cc | 127 ++++++++++++++++++++++++++++ cmdline/makefile | 7 ++ debian/rules | 3 + debian/tests/run-tests | 1 + test/integration/framework | 69 ++++----------- test/integration/test-apt-https-no-redirect | 20 ++++- 7 files changed, 174 insertions(+), 55 deletions(-) create mode 100644 cmdline/apt-helper.cc (limited to 'test/integration') diff --git a/apt-pkg/acquire-item.cc b/apt-pkg/acquire-item.cc index 36bb48382..de03011bf 100644 --- a/apt-pkg/acquire-item.cc +++ b/apt-pkg/acquire-item.cc @@ -2201,7 +2201,7 @@ pkgAcqFile::pkgAcqFile(pkgAcquire *Owner,string URI,string Hash, if (stat(DestFile.c_str(),&Buf) == 0) { // Hmm, the partial file is too big, erase it - if ((unsigned long long)Buf.st_size > Size) + if ((Size > 0) && (unsigned long long)Buf.st_size > Size) unlink(DestFile.c_str()); else PartialSize = Buf.st_size; diff --git a/cmdline/apt-helper.cc b/cmdline/apt-helper.cc new file mode 100644 index 000000000..c1c8b2178 --- /dev/null +++ b/cmdline/apt-helper.cc @@ -0,0 +1,127 @@ +// -*- mode: cpp; mode: fold -*- +// Description /*{{{*/ +/* ##################################################################### + apt-helper - cmdline helpers + ##################################################################### */ + /*}}}*/ +// Include Files /*{{{*/ +#include + +#include +#include +#include +#include +#include +#include +#include +#include + +#include +#include +#include + +#include +#include +#include +#include +#include +#include + + + +#include + /*}}}*/ +using namespace std; + +bool DoDownloadFile(CommandLine &CmdL) +{ + if (CmdL.FileSize() <= 2) + return _error->Error(_("Must specify at least one pair url/filename")); + + + pkgAcquire Fetcher; + AcqTextStatus Stat(ScreenWidth, _config->FindI("quiet",0)); + Fetcher.Setup(&Stat); + std::string download_uri = CmdL.FileList[1]; + std::string targetfile = CmdL.FileList[2]; + new pkgAcqFile(&Fetcher, download_uri, "", 0, "desc", "short-desc", + "dest-dir-ignored", targetfile); + Fetcher.Run(); + if (!FileExists(targetfile)) + { + _error->Error(_("Download Failed")); + return false; + } + return true; +} + +bool ShowHelp(CommandLine &CmdL) +{ + ioprintf(cout,_("%s %s for %s compiled on %s %s\n"),PACKAGE,PACKAGE_VERSION, + COMMON_ARCH,__DATE__,__TIME__); + + if (_config->FindB("version") == true) + return true; + + cout << + _("Usage: apt-helper [options] command\n" + " apt-helper [options] download-file uri target-path\n" + "\n" + "apt-helper is a internal helper for apt\n" + "\n" + "Commands:\n" + " download-file - download the given uri to the target-path\n" + "\n" + " This APT helper has Super Meep Powers.\n"); + return true; +} + + +int main(int argc,const char *argv[]) /*{{{*/ +{ + CommandLine::Dispatch Cmds[] = {{"help",&ShowHelp}, + {"download-file", &DoDownloadFile}, + {0,0}}; + + std::vector Args = getCommandArgs( + "apt-download", CommandLine::GetCommand(Cmds, argc, argv)); + + // Set up gettext support + setlocale(LC_ALL,""); + textdomain(PACKAGE); + + // Parse the command line and initialize the package library + CommandLine CmdL(Args.data(),_config); + if (pkgInitConfig(*_config) == false || + CmdL.Parse(argc,argv) == false || + pkgInitSystem(*_config,_system) == false) + { + if (_config->FindB("version") == true) + ShowHelp(CmdL); + _error->DumpErrors(); + return 100; + } + + // See if the help should be shown + if (_config->FindB("help") == true || + _config->FindB("version") == true || + CmdL.FileSize() == 0) + { + ShowHelp(CmdL); + return 0; + } + + InitOutput(); + + // Match the operation + CmdL.DispatchArg(Cmds); + + // Print any errors or warnings found during parsing + bool const Errors = _error->PendingError(); + if (_config->FindI("quiet",0) > 0) + _error->DumpErrors(); + else + _error->DumpErrors(GlobalError::DEBUG); + return Errors == true ? 100 : 0; +} + /*}}}*/ diff --git a/cmdline/makefile b/cmdline/makefile index f89192e10..c4a249cd6 100644 --- a/cmdline/makefile +++ b/cmdline/makefile @@ -47,6 +47,13 @@ LIB_MAKES = apt-pkg/makefile SOURCE = apt-mark.cc include $(PROGRAM_H) +# The apt-helper +PROGRAM=apt-helper +SLIBS = -lapt-pkg -lapt-private $(INTLLIBS) +LIB_MAKES = apt-pkg/makefile +SOURCE = apt-helper.cc +include $(PROGRAM_H) + # The apt-report-mirror-failure program #SOURCE=apt-report-mirror-failure #TO=$(BIN) diff --git a/debian/rules b/debian/rules index 1b3782ab6..eec016607 100755 --- a/debian/rules +++ b/debian/rules @@ -207,6 +207,9 @@ apt: build-binary build-manpages debian/apt.install #mv debian/$@/usr/bin/apt-report-mirror-failure \ # debian/$@/usr/lib/apt/apt-report-mirror-failure \ + # move the apt-helper in place + mv debian/$@/usr/bin/apt-helper debian/$@/usr/lib/apt/apt-helper + dh_bugfiles -p$@ dh_lintian -p$@ dh_installexamples -p$@ $(BLD)/docs/examples/* diff --git a/debian/tests/run-tests b/debian/tests/run-tests index 6dc4eaa93..e03db9b0c 100644 --- a/debian/tests/run-tests +++ b/debian/tests/run-tests @@ -14,5 +14,6 @@ make -C test/interactive-helper/ # run against the installed apt APT_INTEGRATION_TESTS_WEBSERVER_BIN_DIR=$(pwd)/build/bin \ APT_INTEGRATION_TESTS_METHODS_DIR=/usr/lib/apt/methods \ +APT_INTEGRATION_TESTS_LIBEXEC_DIR=/usr/lib/apt/ \ APT_INTEGRATION_TESTS_BUILD_DIR=/usr/bin \ ./test/integration/run-tests diff --git a/test/integration/framework b/test/integration/framework index 99214ef73..d9bacef83 100644 --- a/test/integration/framework +++ b/test/integration/framework @@ -90,18 +90,18 @@ msgdone() { echo "${CDONE}DONE${CNORMAL}"; fi } - +getaptconfig() { + if [ -f ./aptconfig.conf ]; then + echo "./aptconfig.conf" + elif [ -f ../aptconfig.conf ]; then + echo "../aptconfig.conf" + fi +} runapt() { msgdebug "Executing: ${CCMD}$*${CDEBUG} " local CMD="$1" shift - if [ -f ./aptconfig.conf ]; then - MALLOC_PERTURB_=21 MALLOC_CHECK_=2 APT_CONFIG=aptconfig.conf LD_LIBRARY_PATH=${BUILDDIRECTORY} ${BUILDDIRECTORY}/$CMD "$@" - elif [ -f ../aptconfig.conf ]; then - MALLOC_PERTURB_=21 MALLOC_CHECK_=2 APT_CONFIG=../aptconfig.conf LD_LIBRARY_PATH=${BUILDDIRECTORY} ${BUILDDIRECTORY}/$CMD "$@" - else - MALLOC_PERTURB_=21 MALLOC_CHECK_=2 LD_LIBRARY_PATH=${BUILDDIRECTORY} ${BUILDDIRECTORY}/$CMD "$@" - fi + MALLOC_PERTURB_=21 MALLOC_CHECK_=2 APT_CONFIG="$(getaptconfig)" LD_LIBRARY_PATH=${BUILDDIRECTORY} ${BUILDDIRECTORY}/$CMD "$@" } aptconfig() { runapt apt-config "$@"; } aptcache() { runapt apt-cache "$@"; } @@ -111,6 +111,9 @@ aptftparchive() { runapt apt-ftparchive "$@"; } aptkey() { runapt apt-key "$@"; } aptmark() { runapt apt-mark "$@"; } apt() { runapt apt "$@"; } +apthelper() { + APT_CONFIG="$(getaptconfig)" LD_LIBRARY_PATH=${APTHELPERBINDIR} ${APTHELPERBINDIR}/apt-helper "$@"; +} aptwebserver() { LD_LIBRARY_PATH=${APTWEBSERVERBINDIR} ${APTWEBSERVERBINDIR}/aptwebserver "$@"; } @@ -118,17 +121,11 @@ dpkg() { command dpkg --root=${TMPWORKINGDIRECTORY}/rootdir --force-not-root --force-bad-path --log=${TMPWORKINGDIRECTORY}/rootdir/var/log/dpkg.log "$@" } aptitude() { - if [ -f ./aptconfig.conf ]; then - APT_CONFIG=aptconfig.conf LD_LIBRARY_PATH=${BUILDDIRECTORY} command aptitude "$@" - elif [ -f ../aptconfig.conf ]; then - APT_CONFIG=../aptconfig.conf LD_LIBRARY_PATH=${BUILDDIRECTORY} command aptitude "$@" - else - LD_LIBRARY_PATH=${BUILDDIRECTORY} command aptitude "$@" - fi + APT_CONFIG="$(getaptconfig)" LD_LIBRARY_PATH=${BUILDDIRECTORY} command aptitude "$@" } gdb() { echo "gdb: run »$*«" - APT_CONFIG=aptconfig.conf LD_LIBRARY_PATH=${BUILDDIRECTORY} command gdb ${BUILDDIRECTORY}/$1 --args "$@" + APT_CONFIG="$(getaptconfig)" LD_LIBRARY_PATH=${BUILDDIRECTORY} command gdb ${BUILDDIRECTORY}/$1 --args "$@" } http() { LD_LIBRARY_PATH=${BUILDDIRECTORY} ${BUILDDIRECTORY}/methods/http @@ -177,6 +174,7 @@ setupenvironment() { # allow overriding the default BUILDDIR location BUILDDIRECTORY=${APT_INTEGRATION_TESTS_BUILD_DIR:-"${TESTDIRECTORY}/../../build/bin"} METHODSDIR=${APT_INTEGRATION_TESTS_METHODS_DIR:-"${BUILDDIRECTORY}/methods"} + APTHELPERBINDIR=${APT_INTEGRATION_TESTS_LIBEXEC_DIR:-"${BUILDDIRECTORY}"} APTWEBSERVERBINDIR=${APT_INTEGRATION_TESTS_WEBSERVER_BIN_DIR:-"${BUILDDIRECTORY}"} test -x "${BUILDDIRECTORY}/apt-get" || msgdie "You need to build tree first" # ----- @@ -934,41 +932,10 @@ changetocdrom() { } downloadfile() { - PROTO="$(echo "$1" | cut -d':' -f 1)" - if [ ! -x "${METHODSDIR}/${PROTO}" ]; then - msgwarn "can not find ${METHODSDIR}/${PROTO}" - return 1 - fi - local DOWNLOG="${TMPWORKINGDIRECTORY}/download.log" - rm -f "$DOWNLOG" - touch "$DOWNLOG" - { - echo "601 Configuration -Config-Item: Acquire::https::CaInfo=${TESTDIR}/apt.pem -Config-Item: Debug::Acquire::${PROTO}=1 - -600 Acquire URI -URI: $1 -Filename: ${2} -" - # simple worker keeping stdin open until we are done (201) or error (400) - # and requesting new URIs on try-agains/redirects in-between - { tail -n 999 -f "$DOWNLOG" & echo "TAILPID: $!"; } | while read f1 f2; do - if [ "$f1" = 'TAILPID:' ]; then - TAILPID="$f2" - elif [ "$f1" = 'New-URI:' ]; then - echo "600 Acquire URI -URI: $f2 -Filename: ${2} -" - elif [ "$f1" = '201' ] || [ "$f1" = '400' ]; then - # tail would only die on next read – which never happens - test -z "$TAILPID" || kill -s HUP "$TAILPID" - break - fi - done - } | LD_LIBRARY_PATH=${BUILDDIRECTORY} ${METHODSDIR}/${PROTO} 2>&1 | tee "$DOWNLOG" - rm "$DOWNLOG" + PROTO="$(echo "$1" | cut -d':' -f 1)" + apthelper -o Acquire::https::CaInfo=${TESTDIR}/apt.pem \ + -o Debug::Acquire::${PROTO}=1 \ + download-file "$1" "$2" 2>&1 # only if the file exists the download was successful if [ -e "$2" ]; then return 0 diff --git a/test/integration/test-apt-https-no-redirect b/test/integration/test-apt-https-no-redirect index c405d1167..106d4bced 100755 --- a/test/integration/test-apt-https-no-redirect +++ b/test/integration/test-apt-https-no-redirect @@ -12,13 +12,27 @@ setupaptarchive --no-update changetohttpswebserver -o 'aptwebserver::redirect::replace::/redirectme/=http://localhost:8080/' +DOWNLOG='download-testfile.log' msgtest 'normal http download works' -downloadfile 'http://localhost:8080/pool/apt_1.0/changelog' changelog2 >/dev/null 2>/dev/null && msgpass || msgfail +downloadfile 'http://localhost:8080/pool/apt_1.0/changelog' changelog2 > "$DOWNLOG" && msgpass || msgfail msgtest 'normal https download works' -downloadfile 'https://localhost:4433/pool/apt_1.0/changelog' changelog >/dev/null 2>/dev/null && msgpass || msgfail +downloadfile 'https://localhost:4433/pool/apt_1.0/changelog' changelog > "$DOWNLOG" && msgpass || msgfail msgtest 'redirecting https to http does not work' -downloadfile 'https://localhost:4433/redirectme/pool/apt_1.0/changelog' changelog3 2>&1 | grep "Protocol http not supported or disabled in libcurl" > /dev/null && msgpass +if ! downloadfile 'https://localhost:4433/redirectme/pool/apt_1.0/changelog' changelog3 > "$DOWNLOG"; then + msgpass +else + cat >&2 "$DOWNLOG" + msgfail +fi + +msgtest 'https methods given proper error on redirect attempt' +if grep -q 'Protocol http not supported or disabled in libcurl' "$DOWNLOG"; then + msgpass +else + cat >&2 "$DOWNLOG" + msgfail +fi -- cgit v1.2.3-70-g09d2 From c1409d1be88557529c62883be3174793481233de Mon Sep 17 00:00:00 2001 From: Michael Vogt Date: Wed, 12 Mar 2014 20:33:05 +0100 Subject: add hashsum support in apt-file download and add more tests --- apt-pkg/contrib/fileutl.cc | 11 +++++++++++ apt-pkg/contrib/fileutl.h | 1 + cmdline/apt-helper.cc | 11 +++++++++++ test/integration/test-apt-helper | 37 +++++++++++++++++++++++++++++++++++++ 4 files changed, 60 insertions(+) create mode 100755 test/integration/test-apt-helper (limited to 'test/integration') diff --git a/apt-pkg/contrib/fileutl.cc b/apt-pkg/contrib/fileutl.cc index 52411a762..79bcf112c 100644 --- a/apt-pkg/contrib/fileutl.cc +++ b/apt-pkg/contrib/fileutl.cc @@ -1841,3 +1841,14 @@ std::string GetTempDir() return string(tmpdir); } + +bool Rename(std::string From, std::string To) +{ + if (rename(From.c_str(),To.c_str()) != 0) + { + _error->Error(_("rename failed, %s (%s -> %s)."),strerror(errno), + From.c_str(),To.c_str()); + return false; + } + return true; +} diff --git a/apt-pkg/contrib/fileutl.h b/apt-pkg/contrib/fileutl.h index e752e9621..f0569b6fd 100644 --- a/apt-pkg/contrib/fileutl.h +++ b/apt-pkg/contrib/fileutl.h @@ -164,6 +164,7 @@ bool RealFileExists(std::string File); bool DirectoryExists(std::string const &Path) __attrib_const; bool CreateDirectory(std::string const &Parent, std::string const &Path); time_t GetModificationTime(std::string const &Path); +bool Rename(std::string From, std::string To); std::string GetTempDir(); diff --git a/cmdline/apt-helper.cc b/cmdline/apt-helper.cc index c1c8b2178..4a24b01d9 100644 --- a/cmdline/apt-helper.cc +++ b/cmdline/apt-helper.cc @@ -44,6 +44,9 @@ bool DoDownloadFile(CommandLine &CmdL) Fetcher.Setup(&Stat); std::string download_uri = CmdL.FileList[1]; std::string targetfile = CmdL.FileList[2]; + HashString hash; + if (CmdL.FileSize() > 3) + hash = HashString(CmdL.FileList[3]); new pkgAcqFile(&Fetcher, download_uri, "", 0, "desc", "short-desc", "dest-dir-ignored", targetfile); Fetcher.Run(); @@ -52,6 +55,14 @@ bool DoDownloadFile(CommandLine &CmdL) _error->Error(_("Download Failed")); return false; } + if(hash.empty() == false) + if(hash.VerifyFile(targetfile) == false) + { + _error->Error(_("HashSum Failed")); + Rename(targetfile, targetfile+".failed"); + return false; + } + return true; } diff --git a/test/integration/test-apt-helper b/test/integration/test-apt-helper new file mode 100755 index 000000000..37ed95181 --- /dev/null +++ b/test/integration/test-apt-helper @@ -0,0 +1,37 @@ +#!/bin/sh +set -e + +TESTDIR=$(readlink -f $(dirname $0)) +. $TESTDIR/framework + +setupenvironment +configarchitecture "i386" + +changetohttpswebserver + +echo "foo" > aptarchive/foo + +msgtest 'apt-file download-file md5sum' +apthelper -qq download-file http://localhost:8080/foo foo2 MD5Sum:d3b07384d113edec49eaa6238ad5ff00 && msgpass || msgfail +testfileequal foo2 'foo' + +msgtest 'apt-file download-file sha1' +apthelper -qq download-file http://localhost:8080/foo foo1 SHA1:f1d2d2f924e986ac86fdf7b36c94bcdf32beec15 && msgpass || msgfail +testfileequal foo1 'foo' + +msgtest 'apt-file download-file sha256' +apthelper -qq download-file http://localhost:8080/foo foo3 SHA256:b5bb9d8014a0f9b1d61e21e796d78dccdf1352f23cd32812f4850b878ae4944c && msgpass || msgfail +testfileequal foo3 'foo' + +msgtest 'apt-file download-file no-hash' +apthelper -qq download-file http://localhost:8080/foo foo4 && msgpass || msgfail +testfileequal foo4 'foo' + +msgtest 'apt-file download-file wrong hash' +if ! apthelper -qq download-file http://localhost:8080/foo foo5 MD5Sum:aabbcc 2>&1 2> download.stderr; then + msgpass +else + msgfail +fi +testfileequal download.stderr 'E: HashSum Failed' +testfileequal foo5.failed 'foo' -- cgit v1.2.3-70-g09d2 From 8daf68e366fa9fa2794ae667f51562663856237c Mon Sep 17 00:00:00 2001 From: David Kalnischkies Date: Sat, 15 Feb 2014 13:38:39 +0100 Subject: propagate a negative score point along breaks/conflicts versioned -dev packages like db and boost have the problem of no dependencies which would give them a competitive advantage against an older incarnation of the -dev package, so they tend to be kept back until the old version is removed from the archive, which, if the user has older releases in its sources can take a long time (or never happens). The newer version has a conflicts/breaks against the older one, but the older one hasn't against the newer, so by giving via the conflicts the older one a reduced score the newer one can win if there is no other reason to keep it. If both have a conflict against each other the scoring will cancel itself out, so no harm done. This gives "action" a slightly bigger edge in breaks/conflicts cases than before, but holding back isn't a really good solution anyway. --- apt-pkg/algorithms.cc | 39 +++++++++++------- .../test-allow-scores-for-all-dependency-types | 47 ++++++++++++++++++++++ 2 files changed, 72 insertions(+), 14 deletions(-) create mode 100755 test/integration/test-allow-scores-for-all-dependency-types (limited to 'test/integration') diff --git a/apt-pkg/algorithms.cc b/apt-pkg/algorithms.cc index 0363ab3e2..db1ebd7e3 100644 --- a/apt-pkg/algorithms.cc +++ b/apt-pkg/algorithms.cc @@ -394,8 +394,18 @@ void pkgProblemResolver::MakeScores() }; int PrioEssentials = _config->FindI("pkgProblemResolver::Scores::Essentials",100); int PrioInstalledAndNotObsolete = _config->FindI("pkgProblemResolver::Scores::NotObsolete",1); - int PrioDepends = _config->FindI("pkgProblemResolver::Scores::Depends",1); - int PrioRecommends = _config->FindI("pkgProblemResolver::Scores::Recommends",1); + int DepMap[] = { + 0, + _config->FindI("pkgProblemResolver::Scores::Depends",1), + _config->FindI("pkgProblemResolver::Scores::PreDepends",1), + _config->FindI("pkgProblemResolver::Scores::Suggests",0), + _config->FindI("pkgProblemResolver::Scores::Recommends",1), + _config->FindI("pkgProblemResolver::Scores::Conflicts",-1), + _config->FindI("pkgProblemResolver::Scores::Replaces",0), + _config->FindI("pkgProblemResolver::Scores::Obsoletes",0), + _config->FindI("pkgProblemResolver::Scores::Breaks",-1), + _config->FindI("pkgProblemResolver::Scores::Enhances",0) + }; int AddProtected = _config->FindI("pkgProblemResolver::Scores::AddProtected",10000); int AddEssential = _config->FindI("pkgProblemResolver::Scores::AddEssential",5000); @@ -408,8 +418,15 @@ void pkgProblemResolver::MakeScores() << " Extra => " << PrioMap[pkgCache::State::Extra] << endl << " Essentials => " << PrioEssentials << endl << " InstalledAndNotObsolete => " << PrioInstalledAndNotObsolete << endl - << " Depends => " << PrioDepends << endl - << " Recommends => " << PrioRecommends << endl + << " Pre-Depends => " << DepMap[pkgCache::Dep::PreDepends] << endl + << " Depends => " << DepMap[pkgCache::Dep::Depends] << endl + << " Recommends => " << DepMap[pkgCache::Dep::Recommends] << endl + << " Suggests => " << DepMap[pkgCache::Dep::Suggests] << endl + << " Conflicts => " << DepMap[pkgCache::Dep::Conflicts] << endl + << " Breaks => " << DepMap[pkgCache::Dep::DpkgBreaks] << endl + << " Replaces => " << DepMap[pkgCache::Dep::Replaces] << endl + << " Obsoletes => " << DepMap[pkgCache::Dep::Obsoletes] << endl + << " Enhances => " << DepMap[pkgCache::Dep::Enhances] << endl << " AddProtected => " << AddProtected << endl << " AddEssential => " << AddEssential << endl; @@ -446,17 +463,11 @@ void pkgProblemResolver::MakeScores() { if (Cache[I].InstallVer == 0) continue; - + for (pkgCache::DepIterator D = Cache[I].InstVerIter(Cache).DependsList(); D.end() == false; ++D) - { - if (D->Type == pkgCache::Dep::Depends || - D->Type == pkgCache::Dep::PreDepends) - Scores[D.TargetPkg()->ID] += PrioDepends; - else if (D->Type == pkgCache::Dep::Recommends) - Scores[D.TargetPkg()->ID] += PrioRecommends; - } - } - + Scores[D.TargetPkg()->ID] += DepMap[D->Type]; + } + // Copy the scores to advoid additive looping SPtrArray OldScores = new int[Size]; memcpy(OldScores,Scores,sizeof(*Scores)*Size); diff --git a/test/integration/test-allow-scores-for-all-dependency-types b/test/integration/test-allow-scores-for-all-dependency-types new file mode 100755 index 000000000..7e15a883b --- /dev/null +++ b/test/integration/test-allow-scores-for-all-dependency-types @@ -0,0 +1,47 @@ +#!/bin/sh +set -e + +TESTDIR=$(readlink -f $(dirname $0)) +. $TESTDIR/framework +setupenvironment +configarchitecture 'amd64' + +insertinstalledpackage 'libdb-dev' 'amd64' '5.1.7' 'Depends: libdb5.1-dev' +insertinstalledpackage 'libdb5.1-dev' 'amd64' '5.1.29-7' + +insertpackage 'unstable' 'libdb-dev' 'amd64' '5.3.0' 'Depends: libdb5.3-dev +Conflicts: libdb5.1-dev' +insertpackage 'unstable' 'libdb5.1-dev' 'amd64' '5.1.29-7' +insertpackage 'unstable' 'libdb5.3-dev' 'amd64' '5.3.28-3' 'Conflicts: libdb5.1-dev' + +insertpackage 'unstable' 'foo' 'amd64' '1' +insertpackage 'unstable' 'bar' 'amd64' '1' +insertpackage 'unstable' 'foo' 'amd64' '2' 'Conflicts: bar' +insertpackage 'unstable' 'bar' 'amd64' '2' 'Conflicts: foo' + +setupaptarchive + +testequal 'Reading package lists... +Building dependency tree... +The following packages will be REMOVED: + libdb5.1-dev +The following NEW packages will be installed: + libdb5.3-dev +The following packages will be upgraded: + libdb-dev +1 upgraded, 1 newly installed, 1 to remove and 0 not upgraded. +Remv libdb5.1-dev [5.1.29-7] [libdb-dev:amd64 ] +Inst libdb-dev [5.1.7] (5.3.0 unstable [amd64]) [] +Inst libdb5.3-dev (5.3.28-3 unstable [amd64]) +Conf libdb5.3-dev (5.3.28-3 unstable [amd64]) +Conf libdb-dev (5.3.0 unstable [amd64])' aptget dist-upgrade -s + +rm rootdir/var/lib/dpkg/status +insertinstalledpackage 'foo' 'amd64' '1' +insertinstalledpackage 'bar' 'amd64' '1' + +testequal 'Reading package lists... +Building dependency tree... +The following packages have been kept back: + bar foo +0 upgraded, 0 newly installed, 0 to remove and 2 not upgraded.' aptget dist-upgrade -s -- cgit v1.2.3-70-g09d2 From 2252183c69fb5e3e020b45c37d9728b3437d797d Mon Sep 17 00:00:00 2001 From: David Kalnischkies Date: Sun, 23 Feb 2014 22:22:15 +0100 Subject: show debug output only if told so in packagemanager Git-Dch: Ignore --- apt-pkg/packagemanager.cc | 3 ++- test/integration/test-conflicts-loop | 12 +++--------- 2 files changed, 5 insertions(+), 10 deletions(-) (limited to 'test/integration') diff --git a/apt-pkg/packagemanager.cc b/apt-pkg/packagemanager.cc index 5f9a31264..0be76b311 100644 --- a/apt-pkg/packagemanager.cc +++ b/apt-pkg/packagemanager.cc @@ -741,7 +741,8 @@ bool pkgPackageManager::SmartUnPack(PkgIterator Pkg, bool const Immediate, int c // See if the current version is conflicting if (ConflictPkg.CurrentVer() == Ver && List->IsNow(ConflictPkg)) { - clog << OutputInDepth(Depth) << Pkg.FullName() << " conflicts with " << ConflictPkg.FullName() << endl; + if (Debug) + clog << OutputInDepth(Depth) << Pkg.FullName() << " conflicts with " << ConflictPkg.FullName() << endl; /* If a loop is not present or has not yet been detected, attempt to unpack packages to resolve this conflict. If there is a loop present, remove packages to resolve this conflict */ if (List->IsFlag(ConflictPkg,pkgOrderList::Loop) == false) diff --git a/test/integration/test-conflicts-loop b/test/integration/test-conflicts-loop index 4407fbd9d..4978fe1e8 100755 --- a/test/integration/test-conflicts-loop +++ b/test/integration/test-conflicts-loop @@ -6,11 +6,11 @@ TESTDIR=$(readlink -f $(dirname $0)) setupenvironment configarchitecture "i386" -insertinstalledpackage 'openjdk-6-jre' 'i386' '6b16-1.8-0ubuntu1' +insertinstalledpackage 'openjdk-6-jre' 'i386' '6b16-1.8-0ubuntu1' insertpackage 'unstable' 'openjdk-6-jre' 'i386' '6b20-1.9.8-0ubuntu1~10.04.1' 'Conflicts: openjdk-6-jre-headless (<< 6b17~pre3-1), openjdk-6-jre-lib (<< 6b17~pre3-1)' -insertinstalledpackage 'openjdk-6-jre-lib' 'i386' '6b16-1.8-0ubuntu1' +insertinstalledpackage 'openjdk-6-jre-lib' 'i386' '6b16-1.8-0ubuntu1' insertpackage 'unstable' 'openjdk-6-jre-lib' 'i386' '6b20-1.9.8-0ubuntu1~10.04.1' 'Conflicts: openjdk-6-jre (<< 6b17~pre3-1), openjdk-6-jre-headless (<< 6b17~pre3-1)' -insertinstalledpackage 'openjdk-6-jre-headless' 'i386' '6b16-1.8-0ubuntu1' +insertinstalledpackage 'openjdk-6-jre-headless' 'i386' '6b16-1.8-0ubuntu1' insertpackage 'unstable' 'openjdk-6-jre-headless' 'i386' '6b20-1.9.8-0ubuntu1~10.04.1' 'Conflicts: openjdk-6-jre (<< 6b17~pre3-1), openjdk-6-jre-lib (<< 6b17~pre3-1)' setupaptarchive @@ -19,16 +19,10 @@ testequal 'Reading package lists... Building dependency tree... The following packages will be upgraded: openjdk-6-jre openjdk-6-jre-headless openjdk-6-jre-lib - openjdk-6-jre-lib:i386 conflicts with openjdk-6-jre:i386 - openjdk-6-jre:i386 conflicts with openjdk-6-jre-headless:i386 - openjdk-6-jre-headless:i386 conflicts with openjdk-6-jre:i386 3 upgraded, 0 newly installed, 0 to remove and 0 not upgraded. Remv openjdk-6-jre [6b16-1.8-0ubuntu1] - openjdk-6-jre-headless:i386 conflicts with openjdk-6-jre-lib:i386 Remv openjdk-6-jre-lib [6b16-1.8-0ubuntu1] Inst openjdk-6-jre-headless [6b16-1.8-0ubuntu1] (6b20-1.9.8-0ubuntu1~10.04.1 unstable [i386]) - openjdk-6-jre:i386 conflicts with openjdk-6-jre-lib:i386 - openjdk-6-jre:i386 conflicts with openjdk-6-jre-lib:i386 Inst openjdk-6-jre [6b16-1.8-0ubuntu1] (6b20-1.9.8-0ubuntu1~10.04.1 unstable [i386]) Inst openjdk-6-jre-lib [6b16-1.8-0ubuntu1] (6b20-1.9.8-0ubuntu1~10.04.1 unstable [i386]) Conf openjdk-6-jre-lib (6b20-1.9.8-0ubuntu1~10.04.1 unstable [i386]) -- cgit v1.2.3-70-g09d2 From 9ec748ff103840c4c65471ca00d3b72984131ce4 Mon Sep 17 00:00:00 2001 From: David Kalnischkies Date: Sun, 23 Feb 2014 22:24:27 +0100 Subject: check version before adding scores in resolver Prevents that "old" dependencies have an influence in the scoring. With positive dependencies this is usually not a problem, but negative dependencies can linger around for a long time. --- apt-pkg/algorithms.cc | 13 +- .../test-allow-scores-for-all-dependency-types | 131 ++++++++++++++++++--- 2 files changed, 126 insertions(+), 18 deletions(-) (limited to 'test/integration') diff --git a/apt-pkg/algorithms.cc b/apt-pkg/algorithms.cc index 4d86e5ff8..8320e7ef0 100644 --- a/apt-pkg/algorithms.cc +++ b/apt-pkg/algorithms.cc @@ -459,7 +459,18 @@ void pkgProblemResolver::MakeScores() // propagate score points along dependencies for (pkgCache::DepIterator D = Cache[I].InstVerIter(Cache).DependsList(); D.end() == false; ++D) - Scores[D.TargetPkg()->ID] += DepMap[D->Type]; + { + if (DepMap[D->Type] == 0) + continue; + pkgCache::PkgIterator const T = D.TargetPkg(); + if (D->Version != 0) + { + pkgCache::VerIterator const IV = Cache[T].InstVerIter(Cache); + if (IV.end() == true || D.IsSatisfied(IV) != D.IsNegative()) + continue; + } + Scores[T->ID] += DepMap[D->Type]; + } } // Copy the scores to advoid additive looping diff --git a/test/integration/test-allow-scores-for-all-dependency-types b/test/integration/test-allow-scores-for-all-dependency-types index 7e15a883b..a5c98f3d6 100755 --- a/test/integration/test-allow-scores-for-all-dependency-types +++ b/test/integration/test-allow-scores-for-all-dependency-types @@ -6,21 +6,51 @@ TESTDIR=$(readlink -f $(dirname $0)) setupenvironment configarchitecture 'amd64' -insertinstalledpackage 'libdb-dev' 'amd64' '5.1.7' 'Depends: libdb5.1-dev' -insertinstalledpackage 'libdb5.1-dev' 'amd64' '5.1.29-7' - -insertpackage 'unstable' 'libdb-dev' 'amd64' '5.3.0' 'Depends: libdb5.3-dev +insertpackage 'unversioned' 'libdb-dev' 'amd64' '5.3.0' 'Depends: libdb5.3-dev Conflicts: libdb5.1-dev' -insertpackage 'unstable' 'libdb5.1-dev' 'amd64' '5.1.29-7' -insertpackage 'unstable' 'libdb5.3-dev' 'amd64' '5.3.28-3' 'Conflicts: libdb5.1-dev' +insertpackage 'unversioned' 'libdb5.1-dev' 'amd64' '5.1.29-7' +insertpackage 'unversioned' 'libdb5.3-dev' 'amd64' '5.3.28-3' 'Conflicts: libdb5.1-dev' + +insertpackage 'unversioned' 'foo' 'amd64' '1' +insertpackage 'unversioned' 'bar' 'amd64' '1' +insertpackage 'unversioned' 'foo' 'amd64' '2' 'Conflicts: bar' +insertpackage 'unversioned' 'bar' 'amd64' '2' 'Conflicts: foo' +insertpackage 'unversioned' 'baz' 'amd64' '2' 'Depends: bar | foo' + +insertpackage 'versioned' 'libdb-dev' 'amd64' '5.3.0' 'Depends: libdb5.3-dev +Conflicts: libdb5.1-dev (<< 5.2)' +insertpackage 'versioned' 'libdb5.3-dev' 'amd64' '5.3.28-3' 'Conflicts: libdb5.1-dev (<< 5.2)' + +insertpackage 'versioned' 'foo' 'amd64' '2' 'Conflicts: bar (<= 2)' +insertpackage 'versioned' 'bar' 'amd64' '2' 'Conflicts: foo (<= 2)' +insertpackage 'versioned' 'baz' 'amd64' '2' 'Depends: bar (>= 2) | foo (>= 2)' + +insertpackage 'multipleno' 'foo' 'amd64' '2.1' 'Conflicts: bar (<= 3)' +insertpackage 'multipleno' 'bar' 'amd64' '2.1' 'Conflicts: foo (<= 3), foo (<= 1)' -insertpackage 'unstable' 'foo' 'amd64' '1' -insertpackage 'unstable' 'bar' 'amd64' '1' -insertpackage 'unstable' 'foo' 'amd64' '2' 'Conflicts: bar' -insertpackage 'unstable' 'bar' 'amd64' '2' 'Conflicts: foo' +insertpackage 'multipleyes' 'foo' 'amd64' '2.2' 'Conflicts: bar (<= 3)' +# having foo multiple times as conflict is a non-advisable hack in general +insertpackage 'multipleyes' 'bar' 'amd64' '2.2' 'Conflicts: foo (<= 3), foo (<= 3)' +cp rootdir/var/lib/dpkg/status rootdir/var/lib/dpkg/status-backup setupaptarchive +insertinstalledpackage 'libdb-dev' 'amd64' '5.1.7' 'Depends: libdb5.1-dev' +insertinstalledpackage 'libdb5.1-dev' 'amd64' '5.1.29-7' +testequal 'Reading package lists... +Building dependency tree... +The following packages will be REMOVED: + libdb5.1-dev +The following NEW packages will be installed: + libdb5.3-dev +The following packages will be upgraded: + libdb-dev +1 upgraded, 1 newly installed, 1 to remove and 0 not upgraded. +Remv libdb5.1-dev [5.1.29-7] [libdb-dev:amd64 ] +Inst libdb-dev [5.1.7] (5.3.0 unversioned [amd64]) [] +Inst libdb5.3-dev (5.3.28-3 unversioned [amd64]) +Conf libdb5.3-dev (5.3.28-3 unversioned [amd64]) +Conf libdb-dev (5.3.0 unversioned [amd64])' aptget dist-upgrade -st unversioned testequal 'Reading package lists... Building dependency tree... The following packages will be REMOVED: @@ -31,17 +61,84 @@ The following packages will be upgraded: libdb-dev 1 upgraded, 1 newly installed, 1 to remove and 0 not upgraded. Remv libdb5.1-dev [5.1.29-7] [libdb-dev:amd64 ] -Inst libdb-dev [5.1.7] (5.3.0 unstable [amd64]) [] -Inst libdb5.3-dev (5.3.28-3 unstable [amd64]) -Conf libdb5.3-dev (5.3.28-3 unstable [amd64]) -Conf libdb-dev (5.3.0 unstable [amd64])' aptget dist-upgrade -s +Inst libdb-dev [5.1.7] (5.3.0 versioned [amd64]) [] +Inst libdb5.3-dev (5.3.28-3 versioned [amd64]) +Conf libdb5.3-dev (5.3.28-3 versioned [amd64]) +Conf libdb-dev (5.3.0 versioned [amd64])' aptget dist-upgrade -st versioned -rm rootdir/var/lib/dpkg/status +cp -f rootdir/var/lib/dpkg/status-backup rootdir/var/lib/dpkg/status insertinstalledpackage 'foo' 'amd64' '1' insertinstalledpackage 'bar' 'amd64' '1' - testequal 'Reading package lists... Building dependency tree... The following packages have been kept back: bar foo -0 upgraded, 0 newly installed, 0 to remove and 2 not upgraded.' aptget dist-upgrade -s +0 upgraded, 0 newly installed, 0 to remove and 2 not upgraded.' aptget dist-upgrade -st unversioned +testequal 'Reading package lists... +Building dependency tree... +The following packages have been kept back: + bar foo +0 upgraded, 0 newly installed, 0 to remove and 2 not upgraded.' aptget dist-upgrade -st versioned +testequal 'Reading package lists... +Building dependency tree... +The following packages have been kept back: + bar foo +0 upgraded, 0 newly installed, 0 to remove and 2 not upgraded.' aptget dist-upgrade -st multipleno +testequal 'Reading package lists... +Building dependency tree... +The following packages will be REMOVED: + foo +The following packages will be upgraded: + bar +1 upgraded, 0 newly installed, 1 to remove and 0 not upgraded. +Remv foo [1] +Inst bar [1] (2.2 multipleyes [amd64]) +Conf bar (2.2 multipleyes [amd64])' aptget dist-upgrade -st multipleyes + +testequal 'Reading package lists... +Building dependency tree... +The following NEW packages will be installed: + baz +0 upgraded, 1 newly installed, 0 to remove and 2 not upgraded. +Inst baz (2 unversioned [amd64]) +Conf baz (2 unversioned [amd64])' aptget install baz -st unversioned +testequal 'Reading package lists... +Building dependency tree... +The following extra packages will be installed: + foo +The following packages will be REMOVED: + bar +The following NEW packages will be installed: + baz +The following packages will be upgraded: + foo +1 upgraded, 1 newly installed, 1 to remove and 0 not upgraded. +Remv bar [1] +Inst foo [1] (2 versioned [amd64]) +Inst baz (2 versioned [amd64]) +Conf foo (2 versioned [amd64]) +Conf baz (2 versioned [amd64])' aptget install baz -st versioned + +testequal 'Reading package lists... +Building dependency tree... +The following NEW packages will be installed: + baz +0 upgraded, 1 newly installed, 0 to remove and 2 not upgraded. +Inst baz (2 unversioned [amd64]) +Conf baz (2 unversioned [amd64])' aptget install baz -st unversioned +testequal 'Reading package lists... +Building dependency tree... +The following extra packages will be installed: + foo +The following packages will be REMOVED: + bar +The following NEW packages will be installed: + baz +The following packages will be upgraded: + foo +1 upgraded, 1 newly installed, 1 to remove and 0 not upgraded. +Remv bar [1] +Inst foo [1] (2 versioned [amd64]) +Inst baz (2 versioned [amd64]) +Conf foo (2 versioned [amd64]) +Conf baz (2 versioned [amd64])' aptget install baz -st versioned -- cgit v1.2.3-70-g09d2 From ce7f128c020e1347f91c6074238fc5da58c5df71 Mon Sep 17 00:00:00 2001 From: David Kalnischkies Date: Tue, 25 Feb 2014 14:26:18 +0100 Subject: support DEB_BUILD_PROFILES and -P for build profiles Inspired by the rest of the patch in 661537, but abstract the parsing of various ways of setting the build profiles more so it can potentially be reused and all apt parts have the same behaviour. Especially config options, cmdline options and environment will not be combined as proposed as this isn't APTs usual behaviour and dpkg doesn't do it either, so one overrides the other as it normally does. --- apt-pkg/aptconfiguration.cc | 26 +++- apt-pkg/aptconfiguration.h | 5 + apt-pkg/deb/deblistparser.cc | 2 +- apt-private/private-cmndline.cc | 2 + cmdline/apt-config.cc | 5 + cmdline/apt-get.cc | 6 + debian/control | 2 +- doc/apt-get.8.xml | 13 +- doc/apt.conf.5.xml | 9 ++ test/integration/framework | 6 + .../test-bug-661537-build-profiles-support | 147 +++++++++++++++++++++ 11 files changed, 219 insertions(+), 4 deletions(-) create mode 100755 test/integration/test-bug-661537-build-profiles-support (limited to 'test/integration') diff --git a/apt-pkg/aptconfiguration.cc b/apt-pkg/aptconfiguration.cc index f5c758e14..3948854c6 100644 --- a/apt-pkg/aptconfiguration.cc +++ b/apt-pkg/aptconfiguration.cc @@ -426,7 +426,7 @@ void Configuration::setDefaultConfigurationForCompressors() { } } /*}}}*/ -// getCompressors - Return Vector of usbale compressors /*{{{*/ +// getCompressors - Return Vector of usealbe compressors /*{{{*/ // --------------------------------------------------------------------- /* return a vector of compressors used by apt-ftparchive in the multicompress functionality or to detect data.tar files */ @@ -508,4 +508,28 @@ Configuration::Compressor::Compressor(char const *name, char const *extension, UncompressArgs.push_back(uncompressArg); } /*}}}*/ +// getBuildProfiles - return a vector of enabled build profiles /*{{{*/ +std::vector const Configuration::getBuildProfiles() { + // order is: override value (~= commandline), environment variable, list (~= config file) + std::string profiles_env = getenv("DEB_BUILD_PROFILES") == 0 ? "" : getenv("DEB_BUILD_PROFILES"); + if (profiles_env.empty() == false) { + profiles_env = SubstVar(profiles_env, " ", ","); + std::string const bp = _config->Find("APT::Build-Profiles"); + _config->Clear("APT::Build-Profiles"); + if (bp.empty() == false) + _config->Set("APT::Build-Profiles", bp); + } + return _config->FindVector("APT::Build-Profiles", profiles_env); +} +std::string const Configuration::getBuildProfilesString() { + std::vector profiles = getBuildProfiles(); + if (profiles.empty() == true) + return ""; + std::vector::const_iterator p = profiles.begin(); + std::string list = *p; + for (; p != profiles.end(); ++p) + list.append(",").append(*p); + return list; +} + /*}}}*/ } diff --git a/apt-pkg/aptconfiguration.h b/apt-pkg/aptconfiguration.h index bf7deae85..026493c6d 100644 --- a/apt-pkg/aptconfiguration.h +++ b/apt-pkg/aptconfiguration.h @@ -117,6 +117,11 @@ public: /*{{{*/ /** \brief Return a vector of extensions supported for data.tar's */ std::vector static const getCompressorExtensions(); + + /** \return Return a vector of enabled build profile specifications */ + std::vector static const getBuildProfiles(); + /** \return Return a comma-separated list of enabled build profile specifications */ + std::string static const getBuildProfilesString(); /*}}}*/ private: /*{{{*/ void static setDefaultConfigurationForCompressors(); diff --git a/apt-pkg/deb/deblistparser.cc b/apt-pkg/deb/deblistparser.cc index a4795f15d..89f3514c9 100644 --- a/apt-pkg/deb/deblistparser.cc +++ b/apt-pkg/deb/deblistparser.cc @@ -625,7 +625,7 @@ const char *debListParser::ParseDepends(const char *Start,const char *Stop, if (unlikely(I == Stop)) return 0; - std::vector const profiles = _config->FindVector("APT::Build-Profiles"); + std::vector const profiles = APT::Configuration::getBuildProfiles(); const char *End = I; bool Found = false; diff --git a/apt-private/private-cmndline.cc b/apt-private/private-cmndline.cc index ef7d65f3c..b99443210 100644 --- a/apt-private/private-cmndline.cc +++ b/apt-private/private-cmndline.cc @@ -141,6 +141,7 @@ bool addArgumentsAPTGet(std::vector &Args, char const * const { addArg('b', "compile", "APT::Get::Compile", 0); addArg('b', "build", "APT::Get::Compile", 0); + addArg('P', "build-profiles", "APT::Build-Profiles", CommandLine::HasArg); addArg(0, "diff-only", "APT::Get::Diff-Only", 0); addArg(0, "debian-only", "APT::Get::Diff-Only", 0); addArg(0, "tar-only", "APT::Get::Tar-Only", 0); @@ -149,6 +150,7 @@ bool addArgumentsAPTGet(std::vector &Args, char const * const else if (CmdMatches("build-dep")) { addArg('a', "host-architecture", "APT::Get::Host-Architecture", CommandLine::HasArg); + addArg('P', "build-profiles", "APT::Build-Profiles", CommandLine::HasArg); addArg(0, "purge", "APT::Get::Purge", 0); addArg(0, "solver", "APT::Solver", CommandLine::HasArg); // this has no effect *but* sbuild is using it (see LP: #1255806) diff --git a/cmdline/apt-config.cc b/cmdline/apt-config.cc index 30c2a22d5..9f20b3c1b 100644 --- a/cmdline/apt-config.cc +++ b/cmdline/apt-config.cc @@ -155,6 +155,11 @@ int main(int argc,const char *argv[]) /*{{{*/ _config->Set(comp + "UncompressArg::", *a); } + std::vector const profiles = APT::Configuration::getBuildProfiles(); + _config->Clear("APT::Build-Profiles"); + for (std::vector::const_iterator p = profiles.begin(); p != profiles.end(); ++p) + _config->Set("APT::Build-Profiles::", *p); + // Match the operation CmdL.DispatchArg(Cmds); diff --git a/cmdline/apt-get.cc b/cmdline/apt-get.cc index 12e385b69..f8de80a91 100644 --- a/cmdline/apt-get.cc +++ b/cmdline/apt-get.cc @@ -970,6 +970,12 @@ bool DoSource(CommandLine &CmdL) string buildopts = _config->Find("APT::Get::Host-Architecture"); if (buildopts.empty() == false) buildopts = "-a" + buildopts + " "; + + // get all active build profiles + std::string const profiles = APT::Configuration::getBuildProfilesString(); + if (profiles.empty() == false) + buildopts.append(" -P").append(profiles).append(" "); + buildopts.append(_config->Find("DPkg::Build-Options","-b -uc")); // Call dpkg-buildpackage diff --git a/debian/control b/debian/control index 2d58d0711..5ce68414e 100644 --- a/debian/control +++ b/debian/control @@ -21,7 +21,7 @@ Depends: ${shlibs:Depends}, ${misc:Depends}, ${apt:keyring}, gnupg Replaces: manpages-pl (<< 20060617-3~), manpages-it (<< 2.80-4~) Breaks: manpages-pl (<< 20060617-3~), manpages-it (<< 2.80-4~) Conflicts: python-apt (<< 0.7.93.2~) -Suggests: aptitude | synaptic | wajig, dpkg-dev, apt-doc, python-apt +Suggests: aptitude | synaptic | wajig, dpkg-dev (>= 1.17.2), apt-doc, python-apt Description: commandline package manager This package provides commandline tools for searching and managing as well as querying information about packages diff --git a/doc/apt-get.8.xml b/doc/apt-get.8.xml index 595ea875d..1ed08904e 100644 --- a/doc/apt-get.8.xml +++ b/doc/apt-get.8.xml @@ -371,7 +371,18 @@ by apt-get source --compile and how cross-builddependencies are satisfied. By default is it not set which means that the host architecture is the same as the build architecture (which is defined by APT::Architecture). - Configuration Item: APT::Get::Host-Architecture + Configuration Item: APT::Get::Host-Architecture. + + + + + + This option controls the activated build profiles for which + a source package is built by apt-get source --compile and + how build dependencies are satisfied. By default no build profile is active. + More than one build profile can be activated at a time by concatenating them + with a comma. + Configuration Item: APT::Build-Profiles. diff --git a/doc/apt.conf.5.xml b/doc/apt.conf.5.xml index bfc43ba29..78f6a27a2 100644 --- a/doc/apt.conf.5.xml +++ b/doc/apt.conf.5.xml @@ -177,6 +177,15 @@ DPkg::Pre-Install-Pkgs {"/usr/sbin/dpkg-preconfigure --apt";}; + + + List of all build profiles enabled for build-dependency resolution, + without the "profile." namespace prefix. + By default this list is empty. The DEB_BUILD_PROFILES + as used by &dpkg-buildpackage; overrides the list notation. + + + Default release to install packages from if more than one version is available. Contains release name, codename or release version. Examples: 'stable', 'testing', diff --git a/test/integration/framework b/test/integration/framework index 911a4d742..9c4ac87d3 100644 --- a/test/integration/framework +++ b/test/integration/framework @@ -120,6 +120,9 @@ aptwebserver() { dpkg() { command dpkg --root=${TMPWORKINGDIRECTORY}/rootdir --force-not-root --force-bad-path --log=${TMPWORKINGDIRECTORY}/rootdir/var/log/dpkg.log "$@" } +dpkgcheckbuilddeps() { + command dpkg-checkbuilddeps --admindir=${TMPWORKINGDIRECTORY}/rootdir/var/lib/dpkg "$@" +} aptitude() { if [ -f ./aptconfig.conf ]; then APT_CONFIG=aptconfig.conf LD_LIBRARY_PATH=${BUILDDIRECTORY} command aptitude "$@" @@ -240,6 +243,9 @@ setupenvironment() { # newer gpg versions are fine without it, but play it safe for now gpg --quiet --check-trustdb --secret-keyring $SECRETKEYRING --keyring $SECRETKEYRING >/dev/null 2>&1 + # cleanup the environment a bit + unset GREP_OPTIONS DEB_BUILD_PROFILES + msgdone "info" } diff --git a/test/integration/test-bug-661537-build-profiles-support b/test/integration/test-bug-661537-build-profiles-support new file mode 100755 index 000000000..ae1403f71 --- /dev/null +++ b/test/integration/test-bug-661537-build-profiles-support @@ -0,0 +1,147 @@ +#!/bin/sh +set -e + +TESTDIR=$(readlink -f $(dirname $0)) +. $TESTDIR/framework +setupenvironment +configarchitecture 'amd64' 'i386' 'armel' + +insertinstalledpackage 'build-essential' 'all' '0' 'Multi-Arch: foreign' + +insertpackage 'unstable' 'foo' 'all' '1.0' +insertpackage 'unstable' 'bar' 'all' '1.0' + +insertsource 'unstable' 'buildprofiles' 'any' '1' 'Build-Depends: foo (>= 1.0) [i386 arm] , bar' + +# table from https://wiki.debian.org/BuildProfileSpec +insertsource 'unstable' 'spec-1' 'any' '1' 'Build-Depends: foo ' +insertsource 'unstable' 'spec-2' 'any' '1' 'Build-Depends: foo ' +insertsource 'unstable' 'spec-3' 'any' '1' 'Build-Depends: foo ' +insertsource 'unstable' 'spec-4' 'any' '1' 'Build-Depends: foo ' +insertsource 'unstable' 'spec-5' 'any' '1' 'Build-Depends: foo ' +insertsource 'unstable' 'spec-6' 'any' '1' 'Build-Depends: foo ' +# multiple stanzas not supported: error out +insertsource 'unstable' 'spec-7' 'any' '1' 'Build-Depends: foo ' +insertsource 'unstable' 'spec-8' 'any' '1' 'Build-Depends: foo ' + +setupaptarchive + +testequal 'Reading package lists... +Building dependency tree... +The following NEW packages will be installed: + bar +0 upgraded, 1 newly installed, 0 to remove and 0 not upgraded. +Inst bar (1.0 unstable [all]) +Conf bar (1.0 unstable [all])' aptget build-dep buildprofiles -s + +testequal 'Reading package lists... +Building dependency tree... +The following NEW packages will be installed: + bar foo +0 upgraded, 2 newly installed, 0 to remove and 0 not upgraded. +Inst bar (1.0 unstable [all]) +Inst foo (1.0 unstable [all]) +Conf bar (1.0 unstable [all]) +Conf foo (1.0 unstable [all])' aptget build-dep buildprofiles -s -o APT::Architecture=i386 + +testequal 'Reading package lists... +Building dependency tree... +The following NEW packages will be installed: + bar +0 upgraded, 1 newly installed, 0 to remove and 0 not upgraded. +Inst bar (1.0 unstable [all]) +Conf bar (1.0 unstable [all])' aptget build-dep buildprofiles -s -o APT::Architecture=armel + +testequal 'Reading package lists... +Building dependency tree... +The following NEW packages will be installed: + bar +0 upgraded, 1 newly installed, 0 to remove and 0 not upgraded. +Inst bar (1.0 unstable [all]) +Conf bar (1.0 unstable [all])' aptget build-dep buildprofiles -s -o APT::Architecture=i386 -P stage1 + +KEEP='Reading package lists... +Building dependency tree... +The following NEW packages will be installed: + foo +0 upgraded, 1 newly installed, 0 to remove and 0 not upgraded. +Inst foo (1.0 unstable [all]) +Conf foo (1.0 unstable [all])' +DROP='Reading package lists... +Building dependency tree... +0 upgraded, 0 newly installed, 0 to remove and 0 not upgraded.' + +msgtest 'Check if version of installed dpkg is high enough for' 'build profiles support' +if dpkg --compare-versions "$(command dpkg-query --showformat='${Version}' --show dpkg)" 'ge' '1.17.2'; then + msgpass + testwithdpkg() { + msgtest "Test with" "dpkg-checkbuilddeps -d '$1' -P '$2'" + local OUTPUT="${TMPWORKINGDIRECTORY}/rootdir/tmp/testwithdpkg.output" + if dpkgcheckbuilddeps -d "$1" -P "$2" /dev/null >$OUTPUT 2>&1; then + if [ "$3" = "$DROP" ]; then + msgpass + else + cat $OUTPUT + msgfail + fi + else + if [ "$3" = "$KEEP" ]; then + msgpass + else + cat $OUTPUT + msgfail + fi + fi + } +else + msgskip + testwithdpkg() { + msgtest "Test with" "dpkg-checkbuilddeps -d '$1' -P '$2'" + msgskip + } +fi + +testprofile() { + if [ -n "$3" ]; then + testequal "$4" aptget build-dep "$1" -s -P "$3" + export DEB_BUILD_PROFILES="$(echo "$3" | tr ',' ' ')" + testequal "$4" aptget build-dep "$1" -s -o with::environment=1 + unset DEB_BUILD_PROFILES + else + testequal "$4" aptget build-dep "$1" -s + fi + testwithdpkg "$2" "$3" "$4" +} + +testprofile 'spec-1' 'foo ' '' "$KEEP" +testprofile 'spec-1' 'foo ' 'stage1' "$DROP" +testprofile 'spec-1' 'foo ' 'notest' "$KEEP" +testprofile 'spec-1' 'foo ' 'stage1,notest' "$DROP" + +testprofile 'spec-2' 'foo ' '' "$DROP" +testprofile 'spec-2' 'foo ' 'stage1' "$KEEP" +testprofile 'spec-2' 'foo ' 'notest' "$DROP" +testprofile 'spec-2' 'foo ' 'stage1,notest' "$KEEP" + +testprofile 'spec-3' 'foo ' '' "$KEEP" +testprofile 'spec-3' 'foo ' 'stage1' "$DROP" +testprofile 'spec-3' 'foo ' 'notest' "$DROP" +testprofile 'spec-3' 'foo ' 'stage1,notest' "$DROP" + +testprofile 'spec-4' 'foo ' '' "$DROP" +testprofile 'spec-4' 'foo ' 'stage1' "$KEEP" +testprofile 'spec-4' 'foo ' 'notest' "$KEEP" +testprofile 'spec-4' 'foo ' 'stage1,notest' "$KEEP" + +testprofile 'spec-5' 'foo ' '' "$KEEP" +testprofile 'spec-5' 'foo ' 'stage1' "$DROP" +testprofile 'spec-5' 'foo ' 'notest' "$KEEP" +testprofile 'spec-5' 'foo ' 'stage1,notest' "$DROP" + +testprofile 'spec-6' 'foo ' '' "$KEEP" +testprofile 'spec-6' 'foo ' 'stage1' "$KEEP" +testprofile 'spec-6' 'foo ' 'notest' "$DROP" +testprofile 'spec-6' 'foo ' 'stage1,notest' "$KEEP" + +testfailure aptget build-dep spec-7 -s +testfailure aptget build-dep spec-8 -s -- cgit v1.2.3-70-g09d2 From be2337962df21addb8386f4262bde0ed0fbcad86 Mon Sep 17 00:00:00 2001 From: David Kalnischkies Date: Tue, 25 Feb 2014 17:21:44 +0100 Subject: unset LANGUAGE in the testing framework directly Git-Dch: Ignore --- debian/tests/run-tests | 3 --- test/integration/framework | 5 +++-- 2 files changed, 3 insertions(+), 5 deletions(-) (limited to 'test/integration') diff --git a/debian/tests/run-tests b/debian/tests/run-tests index e03db9b0c..41bafda99 100644 --- a/debian/tests/run-tests +++ b/debian/tests/run-tests @@ -2,9 +2,6 @@ set -e -unset LANGUAGE -export LC_ALL=C - # we need the buildin webserver for the tests if [ ! -e environment.mak ]; then make startup diff --git a/test/integration/framework b/test/integration/framework index 9c4ac87d3..83deafe88 100644 --- a/test/integration/framework +++ b/test/integration/framework @@ -226,8 +226,6 @@ setupenvironment() { echo 'quiet::NoUpdate "true";' >> aptconfig.conf echo "Acquire::https::CaInfo \"${TESTDIR}/apt.pem\";" > rootdir/etc/apt/apt.conf.d/99https echo "Apt::Cmd::Disable-Script-Warning \"1\";" > rootdir/etc/apt/apt.conf.d/apt-binary - export LC_ALL=C.UTF-8 - export PATH="${PATH}:/usr/local/sbin:/usr/sbin:/sbin" configcompression '.' 'gz' #'bz2' 'lzma' 'xz' # gpg needs a trustdb to function, but it can't be invalid (not even empty) @@ -244,6 +242,9 @@ setupenvironment() { gpg --quiet --check-trustdb --secret-keyring $SECRETKEYRING --keyring $SECRETKEYRING >/dev/null 2>&1 # cleanup the environment a bit + export PATH="${PATH}:/usr/local/sbin:/usr/sbin:/sbin" + export LC_ALL=C.UTF-8 + unset LANGUAGE unset GREP_OPTIONS DEB_BUILD_PROFILES msgdone "info" -- cgit v1.2.3-70-g09d2 From 0caa5a4c6472d1b74444c4f38ced6c3b89fa50fe Mon Sep 17 00:00:00 2001 From: David Kalnischkies Date: Sat, 8 Mar 2014 17:29:46 +0100 Subject: do not configure already unpacked packages needlessly The unpack of a M-A:same package will force the unpack of all its siblings directly to prevent that they could be separated by later immediate actions. In commit 634985f8 a call to SmartConfigure was introduced to configure these packages at the time the installation order encounters them. Usually, the unpack order is already okay, so that this 'earlier' unpack was not needed and if it wouldn't have been done, the package would now only be unpacked, but by configuring the package now we impose new requirements which must be satisfied. The code is clever enough to handle this most of the time (it worked for 2 years!), but it isn't needed and in very coupled cases this can fail. Removing this call again removes this extra burden and so simplifies the ordering as can be seen in the modified tests. Famous last words, but I don't see a reason for this extra burden to exist hence the remove. Closes: 740843 --- apt-pkg/packagemanager.cc | 17 +++---- test/integration/framework | 14 ++++-- .../test-bug-740843-versioned-up-down-breaks | 55 ++++++++++++++++++++++ test/integration/test-bug-multiarch-upgrade | 4 +- .../test-ignore-provides-if-versioned-breaks | 4 +- .../test-ignore-provides-if-versioned-conflicts | 4 +- ...prevent-markinstall-multiarch-same-versionscrew | 8 ++-- ...ight-loop-configure-with-unpacking-new-packages | 4 +- 8 files changed, 82 insertions(+), 28 deletions(-) create mode 100755 test/integration/test-bug-740843-versioned-up-down-breaks (limited to 'test/integration') diff --git a/apt-pkg/packagemanager.cc b/apt-pkg/packagemanager.cc index 4d08fb3ba..5d6bc6bd2 100644 --- a/apt-pkg/packagemanager.cc +++ b/apt-pkg/packagemanager.cc @@ -622,6 +622,8 @@ bool pkgPackageManager::SmartUnPack(PkgIterator Pkg, bool const Immediate, int c clog << " (replace version " << Pkg.CurrentVer().VerStr() << " with " << InstallVer.VerStr() << ")"; if (PkgLoop) clog << " (Only Perform PreUnpack Checks)"; + if (Immediate) + clog << " immediately"; clog << endl; } @@ -963,21 +965,14 @@ pkgPackageManager::OrderResult pkgPackageManager::OrderInstall() for (pkgOrderList::iterator I = List->begin(); I != List->end(); ++I) { PkgIterator Pkg(Cache,*I); - + if (List->IsNow(Pkg) == false) { - if (!List->IsFlag(Pkg,pkgOrderList::Configured) && !NoImmConfigure) { - if (SmartConfigure(Pkg, 0) == false && Debug) - _error->Warning("Internal Error, Could not configure %s",Pkg.FullName().c_str()); - // FIXME: The above warning message might need changing - } else { - if (Debug == true) - clog << "Skipping already done " << Pkg.FullName() << endl; - } + if (Debug == true) + clog << "Skipping already done " << Pkg.FullName() << endl; continue; - } - + if (List->IsMissing(Pkg) == true) { if (Debug == true) diff --git a/test/integration/framework b/test/integration/framework index 83deafe88..d66171783 100644 --- a/test/integration/framework +++ b/test/integration/framework @@ -1010,11 +1010,15 @@ testequalor2() { shift 2 msgtest "Test for equality OR of" "$*" $* >$COMPAREAGAINST 2>&1 || true - (checkdiff $COMPAREFILE1 $COMPAREAGAINST 1> /dev/null || - checkdiff $COMPAREFILE2 $COMPAREAGAINST 1> /dev/null) && msgpass || - ( echo "\n${CINFO}Diff against OR 1${CNORMAL}" "$(checkdiff $COMPAREFILE1 $COMPAREAGAINST)" \ - "\n${CINFO}Diff against OR 2${CNORMAL}" "$(checkdiff $COMPAREFILE2 $COMPAREAGAINST)" && - msgfail ) + if checkdiff $COMPAREFILE1 $COMPAREAGAINST 1> /dev/null || checkdiff $COMPAREFILE2 $COMPAREAGAINST 1> /dev/null; then + msgpass + else + echo -n "\n${CINFO}Diff against OR 1${CNORMAL}" + checkdiff $COMPAREFILE1 $COMPAREAGAINST || true + echo -n "${CINFO}Diff against OR 2${CNORMAL}" + checkdiff $COMPAREFILE2 $COMPAREAGAINST || true + msgfail + fi } testshowvirtual() { diff --git a/test/integration/test-bug-740843-versioned-up-down-breaks b/test/integration/test-bug-740843-versioned-up-down-breaks new file mode 100755 index 000000000..cb035a71f --- /dev/null +++ b/test/integration/test-bug-740843-versioned-up-down-breaks @@ -0,0 +1,55 @@ +#!/bin/sh +set -e + +TESTDIR=$(readlink -f $(dirname $0)) +. $TESTDIR/framework +setupenvironment +configarchitecture 'amd64' 'i386' + +insertinstalledpackage 'foo-driver' 'amd64' '1' 'Depends: libfoo (= 1) +Recommends: libgl1-foo-glx (= 1) +Breaks: libgl1-foo-glx (<< 1), libgl1-foo-glx (>> 1)' +insertinstalledpackage 'libgl1-foo-glx' 'amd64,i386' '1' 'Depends: libfoo (= 1) +Multi-Arch: same' +insertinstalledpackage 'libfoo' 'amd64,i386' '1' 'Multi-Arch: same' + +buildsimplenativepackage 'foo-driver' 'amd64' '2' 'stable' 'Depends: libfoo (= 2) +Recommends: libgl1-foo-glx (= 2) +Breaks: libgl1-foo-glx (<< 2), libgl1-foo-glx (>> 2)' +buildsimplenativepackage 'libgl1-foo-glx' 'amd64,i386' '2' 'stable' 'Depends: libfoo (= 2) +Multi-Arch: same' +buildsimplenativepackage 'libfoo' 'amd64,i386' '2' 'stable' 'Multi-Arch: same' + +setupaptarchive + +testequalor2 'Reading package lists... +Building dependency tree... +The following packages will be upgraded: + foo-driver libfoo libfoo:i386 libgl1-foo-glx libgl1-foo-glx:i386 +5 upgraded, 0 newly installed, 0 to remove and 0 not upgraded. +Inst libgl1-foo-glx [1] (2 stable [amd64]) [libgl1-foo-glx:amd64 on libgl1-foo-glx:i386] [libgl1-foo-glx:i386 on libgl1-foo-glx:amd64] [foo-driver:amd64 on libgl1-foo-glx:amd64] [libgl1-foo-glx:i386 foo-driver:amd64 ] +Inst libgl1-foo-glx:i386 [1] (2 stable [i386]) [foo-driver:amd64 on libgl1-foo-glx:amd64] [foo-driver:amd64 on libgl1-foo-glx:i386] [foo-driver:amd64 ] +Inst foo-driver [1] (2 stable [amd64]) [] +Inst libfoo:i386 [1] (2 stable [i386]) [libfoo:amd64 on libfoo:i386] [libfoo:i386 on libfoo:amd64] [libfoo:amd64 ] +Inst libfoo [1] (2 stable [amd64]) +Conf libfoo:i386 (2 stable [i386]) +Conf libfoo (2 stable [amd64]) +Conf libgl1-foo-glx:i386 (2 stable [i386]) +Conf libgl1-foo-glx (2 stable [amd64]) +Conf foo-driver (2 stable [amd64])' 'Reading package lists... +Building dependency tree... +The following packages will be upgraded: + foo-driver libfoo libfoo:i386 libgl1-foo-glx libgl1-foo-glx:i386 +5 upgraded, 0 newly installed, 0 to remove and 0 not upgraded. +Inst libgl1-foo-glx [1] (2 stable [amd64]) [foo-driver:amd64 on libgl1-foo-glx:amd64] [libgl1-foo-glx:amd64 on libgl1-foo-glx:i386] [libgl1-foo-glx:i386 on libgl1-foo-glx:amd64] [foo-driver:amd64 libgl1-foo-glx:i386 ] +Inst libgl1-foo-glx:i386 [1] (2 stable [i386]) [foo-driver:amd64 on libgl1-foo-glx:amd64] [foo-driver:amd64 on libgl1-foo-glx:i386] [foo-driver:amd64 ] +Inst foo-driver [1] (2 stable [amd64]) [] +Inst libfoo:i386 [1] (2 stable [i386]) [libfoo:amd64 on libfoo:i386] [libfoo:i386 on libfoo:amd64] [libfoo:amd64 ] +Inst libfoo [1] (2 stable [amd64]) +Conf libfoo:i386 (2 stable [i386]) +Conf libfoo (2 stable [amd64]) +Conf libgl1-foo-glx:i386 (2 stable [i386]) +Conf libgl1-foo-glx (2 stable [amd64]) +Conf foo-driver (2 stable [amd64])' aptget dist-upgrade -s + +testsuccess aptget dist-upgrade -y -o Debug::pkgPackageManager=1 -o Debug::pkgOrderList=1 diff --git a/test/integration/test-bug-multiarch-upgrade b/test/integration/test-bug-multiarch-upgrade index dc3725df1..c29e1f903 100755 --- a/test/integration/test-bug-multiarch-upgrade +++ b/test/integration/test-bug-multiarch-upgrade @@ -25,5 +25,5 @@ The following packages will be upgraded: 2 upgraded, 0 newly installed, 0 to remove and 0 not upgraded. Inst libcups2 [1] (2 unstable [amd64]) [libcups2:amd64 on libcups2:i386] [libcups2:i386 on libcups2:amd64] [libcups2:i386 ] Inst libcups2:i386 [1] (2 unstable [i386]) -Conf libcups2 (2 unstable [amd64]) -Conf libcups2:i386 (2 unstable [i386])' aptget install -s libcups2:i386 +Conf libcups2:i386 (2 unstable [i386]) +Conf libcups2 (2 unstable [amd64])' aptget install -s libcups2:i386 diff --git a/test/integration/test-ignore-provides-if-versioned-breaks b/test/integration/test-ignore-provides-if-versioned-breaks index f8b4544a0..745f7d206 100755 --- a/test/integration/test-ignore-provides-if-versioned-breaks +++ b/test/integration/test-ignore-provides-if-versioned-breaks @@ -142,9 +142,9 @@ The following packages will be upgraded: 2 upgraded, 2 newly installed, 0 to remove and 2 not upgraded. Inst foo-same:amd64 [2.0] (4.0 unstable [amd64]) [foo-same:amd64 on foo-same:i386] [foo-same:i386 on foo-same:amd64] [foo-same:i386 ] Inst foo-same [2.0] (4.0 unstable [i386]) -Conf foo-same:amd64 (4.0 unstable [amd64]) -Conf foo-same (4.0 unstable [i386]) Inst foo-same-breaker-3 (1.0 unstable [i386]) Inst foo-same-provider (1.0 unstable [i386]) +Conf foo-same (4.0 unstable [i386]) +Conf foo-same:amd64 (4.0 unstable [amd64]) Conf foo-same-breaker-3 (1.0 unstable [i386]) Conf foo-same-provider (1.0 unstable [i386])' aptget install foo-same-provider foo-same-breaker-3 -s diff --git a/test/integration/test-ignore-provides-if-versioned-conflicts b/test/integration/test-ignore-provides-if-versioned-conflicts index 44eafcff1..a07252768 100755 --- a/test/integration/test-ignore-provides-if-versioned-conflicts +++ b/test/integration/test-ignore-provides-if-versioned-conflicts @@ -142,9 +142,9 @@ The following packages will be upgraded: 2 upgraded, 2 newly installed, 0 to remove and 2 not upgraded. Inst foo-same:amd64 [2.0] (4.0 unstable [amd64]) [foo-same:amd64 on foo-same:i386] [foo-same:i386 on foo-same:amd64] [foo-same:i386 ] Inst foo-same [2.0] (4.0 unstable [i386]) -Conf foo-same:amd64 (4.0 unstable [amd64]) -Conf foo-same (4.0 unstable [i386]) Inst foo-same-breaker-3 (1.0 unstable [i386]) Inst foo-same-provider (1.0 unstable [i386]) +Conf foo-same (4.0 unstable [i386]) +Conf foo-same:amd64 (4.0 unstable [amd64]) Conf foo-same-breaker-3 (1.0 unstable [i386]) Conf foo-same-provider (1.0 unstable [i386])' aptget install foo-same-provider foo-same-breaker-3 -s diff --git a/test/integration/test-prevent-markinstall-multiarch-same-versionscrew b/test/integration/test-prevent-markinstall-multiarch-same-versionscrew index fed12dad0..d647856cb 100755 --- a/test/integration/test-prevent-markinstall-multiarch-same-versionscrew +++ b/test/integration/test-prevent-markinstall-multiarch-same-versionscrew @@ -55,14 +55,14 @@ Remv out-of-sync-gone-foreign:i386 [1] Remv out-of-sync-gone-native [1] Inst fine [1] (2 unstable [amd64]) [fine:amd64 on fine:i386] [fine:i386 on fine:amd64] [fine:i386 ] Inst fine:i386 [1] (2 unstable [i386]) -Conf fine (2 unstable [amd64]) -Conf fine:i386 (2 unstable [i386]) Inst fine-installed [1] (2 unstable [amd64]) [fine-installed:amd64 on fine-installed:i386] [fine-installed:i386 on fine-installed:amd64] [fine-installed:i386 ] Inst fine-installed:i386 [1] (2 unstable [i386]) -Conf fine-installed (2 unstable [amd64]) -Conf fine-installed:i386 (2 unstable [i386]) Inst out-of-sync-gone-foreign [1] (2 unstable [amd64]) Inst out-of-sync-gone-native:i386 [1] (2 unstable [i386]) +Conf fine:i386 (2 unstable [i386]) +Conf fine (2 unstable [amd64]) +Conf fine-installed:i386 (2 unstable [i386]) +Conf fine-installed (2 unstable [amd64]) Conf out-of-sync-gone-foreign (2 unstable [amd64]) Conf out-of-sync-gone-native:i386 (2 unstable [i386])' aptget dist-upgrade -s #-o Debug::pkgDepCache::Marker=1 diff --git a/test/integration/test-very-tight-loop-configure-with-unpacking-new-packages b/test/integration/test-very-tight-loop-configure-with-unpacking-new-packages index 5856cd744..c1d454f88 100755 --- a/test/integration/test-very-tight-loop-configure-with-unpacking-new-packages +++ b/test/integration/test-very-tight-loop-configure-with-unpacking-new-packages @@ -39,9 +39,9 @@ Inst libreoffice-core [3] (4 sid [amd64]) [libreoffice-core:amd64 on libreoffice Inst libreoffice-common [3] (4 sid [all]) [] Inst ure (4 sid [amd64]) Conf ure (4 sid [amd64]) -Conf libreoffice-style-galaxy (4 sid [amd64]) Conf libreoffice-common (4 sid [all]) Conf libreoffice-core (4 sid [amd64]) +Conf libreoffice-style-galaxy (4 sid [amd64]) Conf libreoffice (4 sid [amd64])' 'Reading package lists... Building dependency tree... The following NEW packages will be installed: @@ -55,7 +55,7 @@ Inst libreoffice-core [3] (4 sid [amd64]) [libreoffice-common:amd64 on libreoffi Inst libreoffice-common [3] (4 sid [all]) [] Inst ure (4 sid [amd64]) Conf ure (4 sid [amd64]) -Conf libreoffice-style-galaxy (4 sid [amd64]) Conf libreoffice-common (4 sid [all]) Conf libreoffice-core (4 sid [amd64]) +Conf libreoffice-style-galaxy (4 sid [amd64]) Conf libreoffice (4 sid [amd64])' aptget dist-upgrade -s -- cgit v1.2.3-70-g09d2 From 1e071c30340ef6b0f8279440a9fd369f27e9b34b Mon Sep 17 00:00:00 2001 From: David Kalnischkies Date: Sat, 8 Mar 2014 17:42:11 +0100 Subject: simplify apt-cdrom testcode Git-Dch: Ignore --- test/integration/test-apt-cdrom | 32 ++++++++++++++++---------------- 1 file changed, 16 insertions(+), 16 deletions(-) (limited to 'test/integration') diff --git a/test/integration/test-apt-cdrom b/test/integration/test-apt-cdrom index cc3483f9b..caaa351c0 100755 --- a/test/integration/test-apt-cdrom +++ b/test/integration/test-apt-cdrom @@ -24,9 +24,13 @@ cd - > /dev/null addtrap 'prefix' "chmod -R +w $PWD/rootdir/media/cdrom/dists/;" chmod -R -w rootdir/media/cdrom/dists -aptcdrom add -m -o quiet=1 > apt-cdrom.log 2>&1 -sed -i -e '/^Using CD-ROM/ d' -e '/gpgv/ d' -e '/^Identifying/ d' -e '/Reading / d' apt-cdrom.log -testfileequal apt-cdrom.log "Scanning disc for index files.. +aptcdromlog() { + rm -f rootdir/tmp/apt-cdrom.log + aptcdrom "$@" -o quiet=1 >rootdir/tmp/apt-cdrom.log 2>&1 + sed -e '/^Using CD-ROM/ d' -e '/gpgv/ d' -e '/^Identifying/ d' -e '/Reading / d' rootdir/tmp/apt-cdrom.log +} + +testequal "Scanning disc for index files.. Found 2 package indexes, 1 source indexes, 1 translation indexes and 1 signatures Found label 'Debian APT Testdisk 0.8.15' This disc is called: @@ -35,7 +39,9 @@ Writing new source list Source list entries for this disc are: deb cdrom:[Debian APT Testdisk 0.8.15]/ stable main deb-src cdrom:[Debian APT Testdisk 0.8.15]/ stable main -Repeat this process for the rest of the CDs in your set." +Repeat this process for the rest of the CDs in your set." aptcdromlog add -m + +testequal 'Stored label: Debian APT Testdisk 0.8.15' aptcdromlog ident -m testequal 'Reading package lists... Building dependency tree... @@ -54,9 +60,7 @@ Inst testing:i386 (0.8.15 stable [i386]) Conf testing:i386 (0.8.15 stable [i386])' aptget install testing:i386 -s # check Idempotence of apt-cdrom (and disabling of Translation dropping) -aptcdrom add -m -o quiet=1 -o APT::CDROM::DropTranslation=0 > apt-cdrom.log 2>&1 -sed -i -e '/^Using CD-ROM/ d' -e '/gpgv/ d' -e '/^Identifying/ d' -e '/Reading / d' apt-cdrom.log -testfileequal apt-cdrom.log "Scanning disc for index files.. +testequal "Scanning disc for index files.. Found 2 package indexes, 1 source indexes, 2 translation indexes and 1 signatures This disc is called: 'Debian APT Testdisk 0.8.15' @@ -64,12 +68,10 @@ Writing new source list Source list entries for this disc are: deb cdrom:[Debian APT Testdisk 0.8.15]/ stable main deb-src cdrom:[Debian APT Testdisk 0.8.15]/ stable main -Repeat this process for the rest of the CDs in your set." +Repeat this process for the rest of the CDs in your set." aptcdromlog add -m -o APT::CDROM::DropTranslation=0 # take Translations from previous runs as needed -aptcdrom add -m -o quiet=1 > apt-cdrom.log 2>&1 -sed -i -e '/^Using CD-ROM/ d' -e '/gpgv/ d' -e '/^Identifying/ d' -e '/Reading / d' apt-cdrom.log -testfileequal apt-cdrom.log "Scanning disc for index files.. +testequal "Scanning disc for index files.. Found 2 package indexes, 1 source indexes, 2 translation indexes and 1 signatures This disc is called: 'Debian APT Testdisk 0.8.15' @@ -77,14 +79,12 @@ Writing new source list Source list entries for this disc are: deb cdrom:[Debian APT Testdisk 0.8.15]/ stable main deb-src cdrom:[Debian APT Testdisk 0.8.15]/ stable main -Repeat this process for the rest of the CDs in your set." +Repeat this process for the rest of the CDs in your set." aptcdromlog add -m msgtest 'Test for the german description translation of' 'testing' aptcache show testing -o Acquire::Languages=de | grep -q '^Description-de: ' && msgpass || msgfail rm -rf rootdir/var/lib/apt/lists mkdir -p rootdir/var/lib/apt/lists/partial -aptcdrom add -m -o quiet=1 > apt-cdrom.log 2>&1 -sed -i -e '/^Using CD-ROM/ d' -e '/gpgv/ d' -e '/^Identifying/ d' -e '/Reading / d' apt-cdrom.log -testfileequal apt-cdrom.log "Scanning disc for index files.. +testequal "Scanning disc for index files.. Found 2 package indexes, 1 source indexes, 1 translation indexes and 1 signatures This disc is called: 'Debian APT Testdisk 0.8.15' @@ -92,7 +92,7 @@ Writing new source list Source list entries for this disc are: deb cdrom:[Debian APT Testdisk 0.8.15]/ stable main deb-src cdrom:[Debian APT Testdisk 0.8.15]/ stable main -Repeat this process for the rest of the CDs in your set." +Repeat this process for the rest of the CDs in your set." aptcdromlog add -m msgtest 'Test for the english description translation of' 'testing' aptcache show testing -o Acquire::Languages=en | grep -q '^Description-en: ' && msgpass || msgfail -- cgit v1.2.3-70-g09d2 From a0975c8d97f06ac116c5cea9a98993817ced0e86 Mon Sep 17 00:00:00 2001 From: David Kalnischkies Date: Mon, 10 Mar 2014 00:43:21 +0100 Subject: enable mount support for apt-cdrom in the tests Git-Dch: Ignore --- test/integration/framework | 13 +++++-- test/integration/test-apt-cdrom | 78 ++++++++++++++++++++++------------------- 2 files changed, 51 insertions(+), 40 deletions(-) (limited to 'test/integration') diff --git a/test/integration/framework b/test/integration/framework index d66171783..bf6fa0218 100644 --- a/test/integration/framework +++ b/test/integration/framework @@ -932,16 +932,23 @@ connect = 8080 changetocdrom() { mkdir -p rootdir/media/cdrom/.disk local CD="$(readlink -f rootdir/media/cdrom)" - echo "acquire::cdrom::mount \"${CD}\";" > rootdir/etc/apt/apt.conf.d/00cdrom - echo 'acquire::cdrom::autodetect 0;' >> rootdir/etc/apt/apt.conf.d/00cdrom + echo "acquire::cdrom::mount \"${CD}\"; +acquire::cdrom::${CD}/::mount \"mv ${CD}-unmounted ${CD}\"; +acquire::cdrom::${CD}/::umount \"mv ${CD} ${CD}-unmounted\"; +acquire::cdrom::autodetect 0;" > rootdir/etc/apt/apt.conf.d/00cdrom echo -n "$1" > ${CD}/.disk/info if [ ! -d aptarchive/dists ]; then msgdie 'Flat file archive cdroms can not be created currently' return 1 fi - mv aptarchive/dists $CD + mv aptarchive/dists "$CD" ln -s "$(readlink -f ./incoming)" $CD/pool find rootdir/etc/apt/sources.list.d/ -name 'apt-test-*.list' -delete + # start with an unmounted disk + mv "${CD}" "${CD}-unmounted" + # we don't want the disk to be modifiable + addtrap 'prefix' "chmod -f -R +w $PWD/rootdir/media/cdrom/dists/ $PWD/rootdir/media/cdrom-unmounted/dists/ || true;" + chmod -R -w rootdir/media/cdrom-unmounted/dists } downloadfile() { diff --git a/test/integration/test-apt-cdrom b/test/integration/test-apt-cdrom index caaa351c0..fddd26bd9 100755 --- a/test/integration/test-apt-cdrom +++ b/test/integration/test-apt-cdrom @@ -12,36 +12,59 @@ setupaptarchive --no-update changetocdrom 'Debian APT Testdisk 0.8.15' # -de is not in the Release file, but picked up anyway for compatibility -cd rootdir/media/cdrom/dists/stable/main/i18n +cd rootdir/media/cdrom-unmounted/dists/stable/main/i18n +chmod +w . sed -e '/^Description-en:/ d' -e '/^ / d' -e '/^$/ d' Translation-en > Translation-de echo 'Description-de: automatisch generiertes Testpaket testing=0.8.15/stable Diese Pakete sind nur für das testen von APT gedacht, sie erfüllen keinen Zweck auf einem normalen System… ' >> Translation-de compressfile Translation-de -rm Translation-en Translation-de +rm -f Translation-en Translation-de +chmod -R -w . cd - > /dev/null -addtrap 'prefix' "chmod -R +w $PWD/rootdir/media/cdrom/dists/;" -chmod -R -w rootdir/media/cdrom/dists aptcdromlog() { rm -f rootdir/tmp/apt-cdrom.log - aptcdrom "$@" -o quiet=1 >rootdir/tmp/apt-cdrom.log 2>&1 - sed -e '/^Using CD-ROM/ d' -e '/gpgv/ d' -e '/^Identifying/ d' -e '/Reading / d' rootdir/tmp/apt-cdrom.log + test ! -e rootdir/media/cdrom || echo "CD-ROM is mounted, but shouldn't be!" + test -e rootdir/media/cdrom-unmounted || echo "Unmounted CD-ROM doesn't exist, but it should!" + aptcdrom "$@" -o quiet=1 >rootdir/tmp/apt-cdrom.log 2>&1 Date: Mon, 10 Mar 2014 02:54:33 +0100 Subject: msgstr with elipses need three dots fixes some messages and their translation so that all of them have three dots for messages with an elipse. Many translations already had this. --- apt-pkg/cdrom.cc | 6 +++--- apt-private/private-install.cc | 2 +- po/ar.po | 15 +++++---------- po/ast.po | 16 ++++++---------- po/bg.po | 12 ++++-------- po/bs.po | 10 +++------- po/ca.po | 12 ++++-------- po/cs.po | 10 +++------- po/cy.po | 10 +++------- po/da.po | 22 +++++++++------------- po/de.po | 10 +++------- po/dz.po | 14 +++++--------- po/el.po | 10 +++------- po/es.po | 14 +++++--------- po/eu.po | 12 ++++-------- po/fi.po | 10 +++------- po/fr.po | 10 +++------- po/gl.po | 12 ++++-------- po/he.po | 10 +++------- po/hu.po | 10 +++------- po/it.po | 10 +++------- po/ja.po | 14 +++++--------- po/km.po | 14 +++++--------- po/ko.po | 12 ++++-------- po/ku.po | 10 +++------- po/lt.po | 14 +++++--------- po/mr.po | 14 +++++--------- po/nb.po | 14 +++++--------- po/ne.po | 12 ++++-------- po/nl.po | 10 +++------- po/nn.po | 13 ++++--------- po/pl.po | 14 +++++--------- po/pt.po | 16 ++++++---------- po/pt_BR.po | 16 ++++++---------- po/ro.po | 16 ++++++---------- po/ru.po | 14 +++++--------- po/sk.po | 14 +++++--------- po/sl.po | 14 +++++--------- po/sv.po | 18 +++++++----------- po/th.po | 16 ++++++---------- po/tl.po | 15 +++++---------- po/tr.po | 14 +++++--------- po/uk.po | 16 ++++++---------- po/vi.po | 10 +++------- po/zh_CN.po | 14 +++++--------- po/zh_TW.po | 14 +++++--------- test/integration/test-apt-cdrom | 4 ++-- 47 files changed, 205 insertions(+), 384 deletions(-) (limited to 'test/integration') diff --git a/apt-pkg/cdrom.cc b/apt-pkg/cdrom.cc index dd6d51e97..2635ede76 100644 --- a/apt-pkg/cdrom.cc +++ b/apt-pkg/cdrom.cc @@ -584,7 +584,7 @@ bool pkgCdrom::MountAndIdentCDROM(Configuration &Database, std::string &CDROM, s if (interactive == true) { if(log != NULL) - log->Update(_("Unmounting CD-ROM\n"), STEP_UNMOUNT); + log->Update(_("Unmounting CD-ROM...\n"), STEP_LAST); UnmountCdrom(CDROM); if(log != NULL) @@ -607,7 +607,7 @@ bool pkgCdrom::MountAndIdentCDROM(Configuration &Database, std::string &CDROM, s // Hash the CD to get an ID if (log != NULL) - log->Update(_("Identifying.. "), STEP_IDENT); + log->Update(_("Identifying... "), STEP_IDENT); if (IdentCdrom(CDROM,ident) == false) { @@ -669,7 +669,7 @@ bool pkgCdrom::Add(pkgCdromStatus *log) /*{{{*/ return false; if(log != NULL) - log->Update(_("Scanning disc for index files..\n"),STEP_SCAN); + log->Update(_("Scanning disc for index files...\n"),STEP_SCAN); // Get the CD structure vector List; diff --git a/apt-private/private-install.cc b/apt-private/private-install.cc index 8092af939..107ed398e 100644 --- a/apt-private/private-install.cc +++ b/apt-private/private-install.cc @@ -144,7 +144,7 @@ bool InstallPackages(CacheFile &Cache,bool ShwKept,bool Ask, bool Safety) if (DebBytes != Cache->DebSize()) { c0out << DebBytes << ',' << Cache->DebSize() << std::endl; - c0out << _("How odd.. The sizes didn't match, email apt@packages.debian.org") << std::endl; + c0out << _("How odd... The sizes didn't match, email apt@packages.debian.org") << std::endl; } // Number of bytes diff --git a/po/ar.po b/po/ar.po index 959f1549f..123e762a7 100644 --- a/po/ar.po +++ b/po/ar.po @@ -1020,8 +1020,8 @@ msgid "Internal error, Ordering didn't finish" msgstr "خطأ داخلي، لم تنته عملية الترتيب" #: apt-private/private-install.cc:159 -msgid "How odd.. The sizes didn't match, email apt@packages.debian.org" -msgstr "يا للغرابة.. لم تتطابق الأحجام، الرجاء مراسلة apt@packages.debian.org" +msgid "How odd... The sizes didn't match, email apt@packages.debian.org" +msgstr "يا للغرابة... لم تتطابق الأحجام، الرجاء مراسلة apt@packages.debian.org" #. TRANSLATOR: The required space between number and unit is already included #. in the replacement strings, so %sB will be correctly translate in e.g. 1,5 MB @@ -2932,10 +2932,6 @@ msgstr "" msgid "Using CD-ROM mount point %s\n" msgstr "" -#: apt-pkg/cdrom.cc:583 -msgid "Unmounting CD-ROM\n" -msgstr "فك تركيب القرص المدمج\n" - #: apt-pkg/cdrom.cc:588 msgid "Waiting for disc...\n" msgstr "بانتظار القرص...\n" @@ -2945,7 +2941,7 @@ msgid "Mounting CD-ROM...\n" msgstr "تركيب القرص...\n" #: apt-pkg/cdrom.cc:605 -msgid "Identifying.. " +msgid "Identifying... " msgstr "جاري التعرف..." #: apt-pkg/cdrom.cc:643 @@ -2954,12 +2950,11 @@ msgid "Stored label: %s\n" msgstr "" #: apt-pkg/cdrom.cc:652 apt-pkg/cdrom.cc:888 -#, fuzzy msgid "Unmounting CD-ROM...\n" -msgstr "فك تركيب القرص المدمج..." +msgstr "فك تركيب القرص المدمج...\n" #: apt-pkg/cdrom.cc:667 -msgid "Scanning disc for index files..\n" +msgid "Scanning disc for index files...\n" msgstr "" #: apt-pkg/cdrom.cc:717 diff --git a/po/ast.po b/po/ast.po index 4adfc036a..7e9f8b827 100644 --- a/po/ast.po +++ b/po/ast.po @@ -1129,8 +1129,8 @@ msgid "Internal error, Ordering didn't finish" msgstr "Error internu, ordenar nun finó" #: apt-private/private-install.cc:159 -msgid "How odd.. The sizes didn't match, email apt@packages.debian.org" -msgstr "Que raro.. Los tamaños nun concasen, escribe a apt@packages.debian.org" +msgid "How odd... The sizes didn't match, email apt@packages.debian.org" +msgstr "Que raro... Los tamaños nun concasen, escribe a apt@packages.debian.org" #. TRANSLATOR: The required space between number and unit is already included #. in the replacement strings, so %sB will be correctly translate in e.g. 1,5 MB @@ -3161,10 +3161,6 @@ msgstr "El bloque de fornidor %s nun contién una buelga dixital" msgid "Using CD-ROM mount point %s\n" msgstr "Usando el puntu de montaxe de CD-ROM %s\n" -#: apt-pkg/cdrom.cc:583 -msgid "Unmounting CD-ROM\n" -msgstr "Desmontando'l CD-ROM\n" - #: apt-pkg/cdrom.cc:588 msgid "Waiting for disc...\n" msgstr "Esperando'l discu...\n" @@ -3174,8 +3170,8 @@ msgid "Mounting CD-ROM...\n" msgstr "Montando'l CD-ROM...\n" #: apt-pkg/cdrom.cc:605 -msgid "Identifying.. " -msgstr "Identificando.. " +msgid "Identifying... " +msgstr "Identificando... " #: apt-pkg/cdrom.cc:643 #, c-format @@ -3184,10 +3180,10 @@ msgstr "Etiqueta guardada: %s\n" #: apt-pkg/cdrom.cc:652 apt-pkg/cdrom.cc:888 msgid "Unmounting CD-ROM...\n" -msgstr "Desmontando l CD-ROM...\n" +msgstr "Desmontando'l CD-ROM...\n" #: apt-pkg/cdrom.cc:667 -msgid "Scanning disc for index files..\n" +msgid "Scanning disc for index files...\n" msgstr "Buscando nel discu ficheros d'índices...\n" #: apt-pkg/cdrom.cc:717 diff --git a/po/bg.po b/po/bg.po index 2ac50d677..7c30864e8 100644 --- a/po/bg.po +++ b/po/bg.po @@ -1161,9 +1161,9 @@ msgid "Internal error, Ordering didn't finish" msgstr "Вътрешна грешка, „Ordering“ не завърши" #: apt-private/private-install.cc:159 -msgid "How odd.. The sizes didn't match, email apt@packages.debian.org" +msgid "How odd... The sizes didn't match, email apt@packages.debian.org" msgstr "" -"Странно.. Размерите не съвпадат, изпратете е-поща на apt@packages.debian.org" +"Странно... Размерите не съвпадат, изпратете е-поща на apt@packages.debian.org" #. TRANSLATOR: The required space between number and unit is already included #. in the replacement strings, so %sB will be correctly translate in e.g. 1,5 MB @@ -3217,10 +3217,6 @@ msgstr "Блокът на производителя %s не съдържа от msgid "Using CD-ROM mount point %s\n" msgstr "Използване на точка за монтиране на CD-ROM %s\n" -#: apt-pkg/cdrom.cc:583 -msgid "Unmounting CD-ROM\n" -msgstr "Демонтиране на CD-ROM\n" - #: apt-pkg/cdrom.cc:588 msgid "Waiting for disc...\n" msgstr "Чакане за диск...\n" @@ -3230,7 +3226,7 @@ msgid "Mounting CD-ROM...\n" msgstr "Монтиране на CD-ROM...\n" #: apt-pkg/cdrom.cc:605 -msgid "Identifying.. " +msgid "Identifying... " msgstr "Идентифициране..." #: apt-pkg/cdrom.cc:643 @@ -3243,7 +3239,7 @@ msgid "Unmounting CD-ROM...\n" msgstr "Демонтиране на CD-ROM...\n" #: apt-pkg/cdrom.cc:667 -msgid "Scanning disc for index files..\n" +msgid "Scanning disc for index files...\n" msgstr "Сканиране на диска за индексни файлове...\n" #: apt-pkg/cdrom.cc:717 diff --git a/po/bs.po b/po/bs.po index a336a4edf..ba1935da2 100644 --- a/po/bs.po +++ b/po/bs.po @@ -1025,7 +1025,7 @@ msgid "Internal error, Ordering didn't finish" msgstr "" #: apt-private/private-install.cc:159 -msgid "How odd.. The sizes didn't match, email apt@packages.debian.org" +msgid "How odd... The sizes didn't match, email apt@packages.debian.org" msgstr "" #. TRANSLATOR: The required space between number and unit is already included @@ -2924,10 +2924,6 @@ msgstr "" msgid "Using CD-ROM mount point %s\n" msgstr "" -#: apt-pkg/cdrom.cc:583 -msgid "Unmounting CD-ROM\n" -msgstr "" - #: apt-pkg/cdrom.cc:588 #, fuzzy msgid "Waiting for disc...\n" @@ -2938,7 +2934,7 @@ msgid "Mounting CD-ROM...\n" msgstr "" #: apt-pkg/cdrom.cc:605 -msgid "Identifying.. " +msgid "Identifying... " msgstr "" #: apt-pkg/cdrom.cc:643 @@ -2952,7 +2948,7 @@ msgid "Unmounting CD-ROM...\n" msgstr "Pogrešan CD" #: apt-pkg/cdrom.cc:667 -msgid "Scanning disc for index files..\n" +msgid "Scanning disc for index files...\n" msgstr "" #: apt-pkg/cdrom.cc:717 diff --git a/po/ca.po b/po/ca.po index a4779b71a..a30f1fd28 100644 --- a/po/ca.po +++ b/po/ca.po @@ -1148,7 +1148,7 @@ msgid "Internal error, Ordering didn't finish" msgstr "S'ha produït un error intern, l'ordenació no ha acabat" #: apt-private/private-install.cc:159 -msgid "How odd.. The sizes didn't match, email apt@packages.debian.org" +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" @@ -3201,10 +3201,6 @@ msgstr "El camp del proveïdor %s no té una empremta digital" 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:583 -msgid "Unmounting CD-ROM\n" -msgstr "S'està desmuntant el CD-ROM\n" - #: apt-pkg/cdrom.cc:588 msgid "Waiting for disc...\n" msgstr "S'està esperant al disc…\n" @@ -3214,7 +3210,7 @@ msgid "Mounting CD-ROM...\n" msgstr "S'està muntant el CD-ROM…\n" #: apt-pkg/cdrom.cc:605 -msgid "Identifying.. " +msgid "Identifying... " msgstr "S'està identificant…" #: apt-pkg/cdrom.cc:643 @@ -3224,10 +3220,10 @@ msgstr "S'ha emmagatzemat l'etiqueta: %s\n" #: apt-pkg/cdrom.cc:652 apt-pkg/cdrom.cc:888 msgid "Unmounting CD-ROM...\n" -msgstr "S'esta desmuntant el CD-ROM…\n" +msgstr "S'està desmuntant el CD-ROM…\n" #: apt-pkg/cdrom.cc:667 -msgid "Scanning disc for index files..\n" +msgid "Scanning disc for index files...\n" msgstr "S'està analitzant el disc per a fitxers d'índex…\n" #: apt-pkg/cdrom.cc:717 diff --git a/po/cs.po b/po/cs.po index c4f21b056..70b3cde8b 100644 --- a/po/cs.po +++ b/po/cs.po @@ -1137,7 +1137,7 @@ msgid "Internal error, Ordering didn't finish" msgstr "Vnitřní chyba, třídění nedoběhlo do konce" #: apt-private/private-install.cc:159 -msgid "How odd.. The sizes didn't match, email apt@packages.debian.org" +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" @@ -3159,10 +3159,6 @@ msgstr "Blok výrobce %s neobsahuje otisk klíče" msgid "Using CD-ROM mount point %s\n" msgstr "Používám přípojný bod %s\n" -#: apt-pkg/cdrom.cc:583 -msgid "Unmounting CD-ROM\n" -msgstr "Odpojuji CD-ROM\n" - #: apt-pkg/cdrom.cc:588 msgid "Waiting for disc...\n" msgstr "Čekám na disk…\n" @@ -3172,7 +3168,7 @@ msgid "Mounting CD-ROM...\n" msgstr "Připojuji CD-ROM…\n" #: apt-pkg/cdrom.cc:605 -msgid "Identifying.. " +msgid "Identifying... " msgstr "Rozpoznávám… " #: apt-pkg/cdrom.cc:643 @@ -3185,7 +3181,7 @@ msgid "Unmounting CD-ROM...\n" msgstr "Odpojuji CD-ROM…\n" #: apt-pkg/cdrom.cc:667 -msgid "Scanning disc for index files..\n" +msgid "Scanning disc for index files...\n" msgstr "Hledám na disku indexové soubory…\n" #: apt-pkg/cdrom.cc:717 diff --git a/po/cy.po b/po/cy.po index 81731354a..6700b0aa1 100644 --- a/po/cy.po +++ b/po/cy.po @@ -1157,7 +1157,7 @@ msgid "Internal error, Ordering didn't finish" msgstr "Gwall Mewnol wrth ychwanegu dargyfeiriad" #: apt-private/private-install.cc:159 -msgid "How odd.. The sizes didn't match, email apt@packages.debian.org" +msgid "How odd... The sizes didn't match, email apt@packages.debian.org" msgstr "" #. TRANSLATOR: The required space between number and unit is already included @@ -3218,10 +3218,6 @@ msgstr "Nid yw'r bloc darparwr %s yn cynnwys ôl bys" msgid "Using CD-ROM mount point %s\n" msgstr "" -#: apt-pkg/cdrom.cc:583 -msgid "Unmounting CD-ROM\n" -msgstr "" - #: apt-pkg/cdrom.cc:588 #, fuzzy msgid "Waiting for disc...\n" @@ -3232,7 +3228,7 @@ msgid "Mounting CD-ROM...\n" msgstr "" #: apt-pkg/cdrom.cc:605 -msgid "Identifying.. " +msgid "Identifying... " msgstr "" #: apt-pkg/cdrom.cc:643 @@ -3246,7 +3242,7 @@ msgid "Unmounting CD-ROM...\n" msgstr "CD Anghywir" #: apt-pkg/cdrom.cc:667 -msgid "Scanning disc for index files..\n" +msgid "Scanning disc for index files...\n" msgstr "" #: apt-pkg/cdrom.cc:717 diff --git a/po/da.po b/po/da.po index d8d6e1b66..36abe8cd7 100644 --- a/po/da.po +++ b/po/da.po @@ -1171,8 +1171,8 @@ msgid "Internal error, Ordering didn't finish" msgstr "Intern fejl. Sortering blev ikke fuldført" #: apt-private/private-install.cc:159 -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" +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" #. TRANSLATOR: The required space between number and unit is already included #. in the replacement strings, so %sB will be correctly translate in e.g. 1,5 MB @@ -3192,11 +3192,7 @@ msgstr "Leverandørblok %s inderholder intet fingeraftryk" #: apt-pkg/cdrom.cc:575 #, c-format msgid "Using CD-ROM mount point %s\n" -msgstr "Bruger cdrom-monteringspunktet %s\n" - -#: apt-pkg/cdrom.cc:583 -msgid "Unmounting CD-ROM\n" -msgstr "Afmonterer cdrom\n" +msgstr "Bruger CD-ROM-monteringspunktet %s\n" #: apt-pkg/cdrom.cc:588 msgid "Waiting for disc...\n" @@ -3204,11 +3200,11 @@ msgstr "Venter på disken ...\n" #: apt-pkg/cdrom.cc:597 msgid "Mounting CD-ROM...\n" -msgstr "Monterer cdrom ...\n" +msgstr "Monterer CD-ROM ...\n" #: apt-pkg/cdrom.cc:605 -msgid "Identifying.. " -msgstr "Identificerer .. " +msgid "Identifying... " +msgstr "Identificerer ... " #: apt-pkg/cdrom.cc:643 #, c-format @@ -3217,11 +3213,11 @@ msgstr "Gemt mærkat: %s \n" #: apt-pkg/cdrom.cc:652 apt-pkg/cdrom.cc:888 msgid "Unmounting CD-ROM...\n" -msgstr "Afmonterer cdrom ...\n" +msgstr "Afmonterer CD-ROM ...\n" #: apt-pkg/cdrom.cc:667 -msgid "Scanning disc for index files..\n" -msgstr "Skanner disken for indeksfiler ..\n" +msgid "Scanning disc for index files...\n" +msgstr "Skanner disken for indeksfiler ...\n" #: apt-pkg/cdrom.cc:717 #, c-format diff --git a/po/de.po b/po/de.po index 0ad8cf238..c62f3c9f1 100644 --- a/po/de.po +++ b/po/de.po @@ -1191,7 +1191,7 @@ msgid "Internal error, Ordering didn't finish" msgstr "Interner Fehler, Anordnung beendete nicht" #: apt-private/private-install.cc:159 -msgid "How odd.. The sizes didn't match, email apt@packages.debian.org" +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 " "eine E-Mail an apt@packages.debian.org (auf Englisch bitte)." @@ -3272,10 +3272,6 @@ msgstr "Herstellerblock %s enthält keinen Fingerabdruck." msgid "Using CD-ROM mount point %s\n" msgstr "Verwendeter CD-ROM-Einbindungspunkt: %s\n" -#: apt-pkg/cdrom.cc:583 -msgid "Unmounting CD-ROM\n" -msgstr "Lösen der CD-ROM-Einbindung\n" - #: apt-pkg/cdrom.cc:588 msgid "Waiting for disc...\n" msgstr "Warten auf Medium ...\n" @@ -3285,7 +3281,7 @@ msgid "Mounting CD-ROM...\n" msgstr "CD-ROM wird eingebunden ...\n" #: apt-pkg/cdrom.cc:605 -msgid "Identifying.. " +msgid "Identifying... " msgstr "Identifizieren ... " #: apt-pkg/cdrom.cc:643 @@ -3298,7 +3294,7 @@ msgid "Unmounting CD-ROM...\n" msgstr "Einbindung der CD-ROM wird gelöst ...\n" #: apt-pkg/cdrom.cc:667 -msgid "Scanning disc for index files..\n" +msgid "Scanning disc for index files...\n" msgstr "Durchsuchen des Mediums nach Index-Dateien ...\n" #: apt-pkg/cdrom.cc:717 diff --git a/po/dz.po b/po/dz.po index 2bb275d95..2e27d6bcb 100644 --- a/po/dz.po +++ b/po/dz.po @@ -1126,7 +1126,7 @@ msgid "Internal error, Ordering didn't finish" msgstr "ནང་འཁོད་འཛོལ་བ་ གོ་རིམ་བཟོ་ནི་ཚུ་མཇུག་མ་བསྡུ་བས།" #: apt-private/private-install.cc:159 -msgid "How odd.. The sizes didn't match, email apt@packages.debian.org" +msgid "How odd... The sizes didn't match, email apt@packages.debian.org" msgstr "" "ག་ཅི་གི་ཡ་མཚན་ཆེ་མི་ཆེ་ ཚད་འདི་གིས་ email apt@packages.debian.org་ལུ་མཐུན་སྒྲིག་མི་འབད་" "བས།" @@ -3143,10 +3143,6 @@ msgstr "%sསིལ་ཚོང་པ་སྡེབ་ཚན་གྱི་ན msgid "Using CD-ROM mount point %s\n" msgstr " %s སི་ཌི-རོམ་སྦྱར་བརྩེགས་ཀྱི་ས་ཚིགས་ལག་ལེན་འཐབ་དོ།\n" -#: apt-pkg/cdrom.cc:583 -msgid "Unmounting CD-ROM\n" -msgstr "སི་ཌི་-རོམ་བརྩེགས་བཤོལ་འབད་དོ།\n" - #: apt-pkg/cdrom.cc:588 msgid "Waiting for disc...\n" msgstr "ཌིསིཀ་གི་དོན་ལུ་བསྒུག་དོ...\n" @@ -3156,8 +3152,8 @@ msgid "Mounting CD-ROM...\n" msgstr "སི་ཌི་-རོམ་སྦྱར་བརྩེགས་འབད་དོ...\n" #: apt-pkg/cdrom.cc:605 -msgid "Identifying.. " -msgstr "ངོས་འཛིན་འབད་དོ.." +msgid "Identifying... " +msgstr "ངོས་འཛིན་འབད་དོ..." #: apt-pkg/cdrom.cc:643 #, c-format @@ -3170,8 +3166,8 @@ msgid "Unmounting CD-ROM...\n" msgstr "སི་ཌི་-རོམ་སྦྱར་བརྩེགས་མ་འབད་བར་བཞག་དོ..." #: apt-pkg/cdrom.cc:667 -msgid "Scanning disc for index files..\n" -msgstr "ཟུར་ཐོ་ཡིག་སྣོད་ཚུ་གི་དོན་ལུ་ ཌིསིཀ་ཞིབ་ལྟ་འབད་དོ..\n" +msgid "Scanning disc for index files...\n" +msgstr "ཟུར་ཐོ་ཡིག་སྣོད་ཚུ་གི་དོན་ལུ་ ཌིསིཀ་ཞིབ་ལྟ་འབད་དོ...\n" #: apt-pkg/cdrom.cc:717 #, fuzzy, c-format diff --git a/po/el.po b/po/el.po index 8a17a0faf..4d28fdb1d 100644 --- a/po/el.po +++ b/po/el.po @@ -1141,7 +1141,7 @@ msgid "Internal error, Ordering didn't finish" msgstr "Εσωτερικό Σφάλμα, η Ταξινόμηση δεν ολοκληρώθηκε" #: apt-private/private-install.cc:159 -msgid "How odd.. The sizes didn't match, email apt@packages.debian.org" +msgid "How odd... The sizes didn't match, email apt@packages.debian.org" msgstr "" "Πολύ περίεργο! Τα μεγέθη δεν ταιριάζουν, στείλτε μήνυμα στο apt@packages." "debian.org" @@ -3175,10 +3175,6 @@ msgstr "Η εγγραφή κατασκευαστή %s δεν περιέχει τ msgid "Using CD-ROM mount point %s\n" msgstr "Χρησιμοποιείται το σημείο προσάρτησης %s\n" -#: apt-pkg/cdrom.cc:583 -msgid "Unmounting CD-ROM\n" -msgstr "Αποπροσάρτηση του CD-ROM\n" - #: apt-pkg/cdrom.cc:588 msgid "Waiting for disc...\n" msgstr "Αναμονή για δίσκο...\n" @@ -3188,7 +3184,7 @@ msgid "Mounting CD-ROM...\n" msgstr "Προσάρτηση του CD-ROM...\n" #: apt-pkg/cdrom.cc:605 -msgid "Identifying.. " +msgid "Identifying... " msgstr "Αναγνώριση..." #: apt-pkg/cdrom.cc:643 @@ -3201,7 +3197,7 @@ msgid "Unmounting CD-ROM...\n" msgstr "Αποπροσάρτηση του CD-ROM...\n" #: apt-pkg/cdrom.cc:667 -msgid "Scanning disc for index files..\n" +msgid "Scanning disc for index files...\n" msgstr "Σάρωση του δίσκου για περιεχόμενα...\n" #: apt-pkg/cdrom.cc:717 diff --git a/po/es.po b/po/es.po index 4345690fe..ee0d55c29 100644 --- a/po/es.po +++ b/po/es.po @@ -1197,9 +1197,9 @@ msgid "Internal error, Ordering didn't finish" msgstr "Error interno, no terminó la ordenación" #: apt-private/private-install.cc:159 -msgid "How odd.. The sizes didn't match, email apt@packages.debian.org" +msgid "How odd... The sizes didn't match, email apt@packages.debian.org" msgstr "" -"Qué raro.. Los tamaños no concuerdan, mande un correo a apt@packages.debian." +"Qué raro... Los tamaños no concuerdan, mande un correo a apt@packages.debian." "org" #. TRANSLATOR: The required space between number and unit is already included @@ -3260,10 +3260,6 @@ msgstr "Bloque de fabricante %s sin huella digital" msgid "Using CD-ROM mount point %s\n" msgstr "Usando el punto de montaje del CD-ROM %s\n" -#: apt-pkg/cdrom.cc:583 -msgid "Unmounting CD-ROM\n" -msgstr "Desmontando el CD-ROM\n" - #: apt-pkg/cdrom.cc:588 msgid "Waiting for disc...\n" msgstr "Esperando el disco...\n" @@ -3273,8 +3269,8 @@ msgid "Mounting CD-ROM...\n" msgstr "Montando el CD-ROM...\n" #: apt-pkg/cdrom.cc:605 -msgid "Identifying.. " -msgstr "Identificando.. " +msgid "Identifying... " +msgstr "Identificando... " #: apt-pkg/cdrom.cc:643 #, c-format @@ -3286,7 +3282,7 @@ msgid "Unmounting CD-ROM...\n" msgstr "Desmontando el CD-ROM...\n" #: apt-pkg/cdrom.cc:667 -msgid "Scanning disc for index files..\n" +msgid "Scanning disc for index files...\n" msgstr "Buscando en el disco archivos de índices...\n" #: apt-pkg/cdrom.cc:717 diff --git a/po/eu.po b/po/eu.po index c54c859f9..a3a81bd6c 100644 --- a/po/eu.po +++ b/po/eu.po @@ -1125,9 +1125,9 @@ msgid "Internal error, Ordering didn't finish" msgstr "Barne errorea, ez da ordenatzeaz amaitu" #: apt-private/private-install.cc:159 -msgid "How odd.. The sizes didn't match, email apt@packages.debian.org" +msgid "How odd... The sizes didn't match, email apt@packages.debian.org" msgstr "" -"Hau bitxia.. Tamainak ez dira berdina, idatzi apt@packages.debian.org-ra " +"Hau bitxia... Tamainak ez dira berdina, idatzi apt@packages.debian.org-ra " "berri emanez (ingelesez)" #. TRANSLATOR: The required space between number and unit is already included @@ -3142,10 +3142,6 @@ msgstr "%s saltzaile blokeak ez du egiaztapen markarik" msgid "Using CD-ROM mount point %s\n" msgstr "%s CD-ROM muntatze puntua erabiltzen\n" -#: apt-pkg/cdrom.cc:583 -msgid "Unmounting CD-ROM\n" -msgstr "CD-ROM-a desmuntatzen\n" - #: apt-pkg/cdrom.cc:588 msgid "Waiting for disc...\n" msgstr "Diska itxaroten...\n" @@ -3155,7 +3151,7 @@ msgid "Mounting CD-ROM...\n" msgstr "CD-ROM-a muntatzen...\n" #: apt-pkg/cdrom.cc:605 -msgid "Identifying.. " +msgid "Identifying... " msgstr "Egiaztatzen... " #: apt-pkg/cdrom.cc:643 @@ -3168,7 +3164,7 @@ msgid "Unmounting CD-ROM...\n" msgstr "CD-ROM Desmuntatzen...\n" #: apt-pkg/cdrom.cc:667 -msgid "Scanning disc for index files..\n" +msgid "Scanning disc for index files...\n" msgstr "Indize fitxategien bila diska arakatzen...\n" #: apt-pkg/cdrom.cc:717 diff --git a/po/fi.po b/po/fi.po index 78245b153..11c765edf 100644 --- a/po/fi.po +++ b/po/fi.po @@ -1117,7 +1117,7 @@ msgid "Internal error, Ordering didn't finish" msgstr "Tapahtui sisäinen virhe, järjestäminen keskeytyi" #: apt-private/private-install.cc:159 -msgid "How odd.. The sizes didn't match, email apt@packages.debian.org" +msgid "How odd... The sizes didn't match, email apt@packages.debian.org" msgstr "" "No jo on... Koot eivät täsmää, sähköpostita email apt@packages.debian.org" @@ -3133,10 +3133,6 @@ msgstr "Toimittajan lohkosta %s puuttuu sormenjälki" msgid "Using CD-ROM mount point %s\n" msgstr "Käytetään rompun liitoskohtaa %s\n" -#: apt-pkg/cdrom.cc:583 -msgid "Unmounting CD-ROM\n" -msgstr "Irrotetaan romppu\n" - #: apt-pkg/cdrom.cc:588 msgid "Waiting for disc...\n" msgstr "Odotetaan levyä...\n" @@ -3146,7 +3142,7 @@ msgid "Mounting CD-ROM...\n" msgstr "Liitetään romppu...\n" #: apt-pkg/cdrom.cc:605 -msgid "Identifying.. " +msgid "Identifying... " msgstr "Tunnistetaan... " #: apt-pkg/cdrom.cc:643 @@ -3159,7 +3155,7 @@ msgid "Unmounting CD-ROM...\n" msgstr "Irrotetaan romppu...\n" #: apt-pkg/cdrom.cc:667 -msgid "Scanning disc for index files..\n" +msgid "Scanning disc for index files...\n" msgstr "Etsitään levyltä hakemistotiedostoja...\n" #: apt-pkg/cdrom.cc:717 diff --git a/po/fr.po b/po/fr.po index 5503dadb9..f5a93f9c9 100644 --- a/po/fr.po +++ b/po/fr.po @@ -1189,7 +1189,7 @@ msgid "Internal error, Ordering didn't finish" msgstr "Erreur interne. Le tri a été interrompu." #: apt-private/private-install.cc:159 -msgid "How odd.. The sizes didn't match, email apt@packages.debian.org" +msgid "How odd... The sizes didn't match, email apt@packages.debian.org" msgstr "" "Étrangement, les tailles ne correspondent pas. Veuillez le signaler par " "courriel à apt@packages.debian.org." @@ -3292,10 +3292,6 @@ msgstr "Le bloc de fournisseur %s ne comporte pas d'empreinte" msgid "Using CD-ROM mount point %s\n" msgstr "Utilisation du point de montage %s pour le cédérom\n" -#: apt-pkg/cdrom.cc:583 -msgid "Unmounting CD-ROM\n" -msgstr "Démontage du cédérom\n" - #: apt-pkg/cdrom.cc:588 msgid "Waiting for disc...\n" msgstr "Attente du disque...\n" @@ -3305,7 +3301,7 @@ msgid "Mounting CD-ROM...\n" msgstr "Montage du cédérom...\n" #: apt-pkg/cdrom.cc:605 -msgid "Identifying.. " +msgid "Identifying... " msgstr "Identification..." #: apt-pkg/cdrom.cc:643 @@ -3318,7 +3314,7 @@ msgid "Unmounting CD-ROM...\n" msgstr "Démontage du cédérom...\n" #: apt-pkg/cdrom.cc:667 -msgid "Scanning disc for index files..\n" +msgid "Scanning disc for index files...\n" msgstr "Examen du disque à la recherche de fichiers d'index...\n" #: apt-pkg/cdrom.cc:717 diff --git a/po/gl.po b/po/gl.po index 2a03773c2..273347481 100644 --- a/po/gl.po +++ b/po/gl.po @@ -1146,7 +1146,7 @@ msgid "Internal error, Ordering didn't finish" msgstr "Produciuse un erro interno; non rematou a ordenación" #: apt-private/private-install.cc:159 -msgid "How odd.. The sizes didn't match, email apt@packages.debian.org" +msgid "How odd... The sizes didn't match, email apt@packages.debian.org" msgstr "" "Que estraño... Os tamaños non coinciden; envíe un correo-e a apt@packages." "debian.org" @@ -3201,10 +3201,6 @@ msgstr "O bloque de provedor %s non contén unha pegada dixital" msgid "Using CD-ROM mount point %s\n" msgstr "Empregando o punto de montaxe de CD-ROM %s\n" -#: apt-pkg/cdrom.cc:583 -msgid "Unmounting CD-ROM\n" -msgstr "Desmontando o CD-ROM\n" - #: apt-pkg/cdrom.cc:588 msgid "Waiting for disc...\n" msgstr "Agardando polo disco...\n" @@ -3214,7 +3210,7 @@ msgid "Mounting CD-ROM...\n" msgstr "Montando o CD-ROM...\n" #: apt-pkg/cdrom.cc:605 -msgid "Identifying.. " +msgid "Identifying... " msgstr "Identificando... " #: apt-pkg/cdrom.cc:643 @@ -3227,8 +3223,8 @@ msgid "Unmounting CD-ROM...\n" msgstr "Desmontando o CD-ROM...\n" #: apt-pkg/cdrom.cc:667 -msgid "Scanning disc for index files..\n" -msgstr "Buscando os ficheiros de índices no disco..\n" +msgid "Scanning disc for index files...\n" +msgstr "Buscando os ficheiros de índices no disco...\n" #: apt-pkg/cdrom.cc:717 #, c-format diff --git a/po/he.po b/po/he.po index a2e3cba60..b70ae3b34 100644 --- a/po/he.po +++ b/po/he.po @@ -717,7 +717,7 @@ msgid "The list of sources could not be read." msgstr "רשימת המקורות לא ניתנת לקריאה." #: cmdline/apt-get.cc:836 -msgid "How odd.. The sizes didn't match, email apt@packages.debian.org" +msgid "How odd... The sizes didn't match, email apt@packages.debian.org" msgstr "" #: cmdline/apt-get.cc:841 @@ -2604,7 +2604,7 @@ msgid "" msgstr "" #: apt-pkg/cdrom.cc:534 apt-pkg/cdrom.cc:622 -msgid "Identifying.. " +msgid "Identifying... " msgstr "" #: apt-pkg/cdrom.cc:559 @@ -2621,10 +2621,6 @@ msgstr "" msgid "Using CD-ROM mount point %s\n" msgstr "" -#: apt-pkg/cdrom.cc:603 -msgid "Unmounting CD-ROM\n" -msgstr "" - #: apt-pkg/cdrom.cc:607 msgid "Waiting for disc...\n" msgstr "" @@ -2635,7 +2631,7 @@ msgid "Mounting CD-ROM...\n" msgstr "" #: apt-pkg/cdrom.cc:633 -msgid "Scanning disc for index files..\n" +msgid "Scanning disc for index files...\n" msgstr "" #: apt-pkg/cdrom.cc:673 diff --git a/po/hu.po b/po/hu.po index c28b83bfa..06c8efb6b 100644 --- a/po/hu.po +++ b/po/hu.po @@ -1159,7 +1159,7 @@ msgid "Internal error, Ordering didn't finish" msgstr "Belső hiba, a rendezés nem fejeződött be" #: apt-private/private-install.cc:159 -msgid "How odd.. The sizes didn't match, email apt@packages.debian.org" +msgid "How odd... The sizes didn't match, email apt@packages.debian.org" msgstr "A méretek nem egyeznek, írjon az apt@packages.debian.org címre" #. TRANSLATOR: The required space between number and unit is already included @@ -3209,10 +3209,6 @@ msgstr "A(z) %s terjesztőblokk nem tartalmaz ujjlenyomatot" msgid "Using CD-ROM mount point %s\n" msgstr "%s CD-ROM csatolási pont használata\n" -#: apt-pkg/cdrom.cc:583 -msgid "Unmounting CD-ROM\n" -msgstr "CD-ROM leválasztása\n" - #: apt-pkg/cdrom.cc:588 msgid "Waiting for disc...\n" msgstr "Várakozás a lemezre...\n" @@ -3222,7 +3218,7 @@ msgid "Mounting CD-ROM...\n" msgstr "CD-ROM csatolása...\n" #: apt-pkg/cdrom.cc:605 -msgid "Identifying.. " +msgid "Identifying... " msgstr "Azonosítás... " #: apt-pkg/cdrom.cc:643 @@ -3235,7 +3231,7 @@ msgid "Unmounting CD-ROM...\n" msgstr "CD-ROM leválasztása...\n" #: apt-pkg/cdrom.cc:667 -msgid "Scanning disc for index files..\n" +msgid "Scanning disc for index files...\n" msgstr "Indexfájlok keresése a lemezen...\n" #: apt-pkg/cdrom.cc:717 diff --git a/po/it.po b/po/it.po index d15f8f115..b58f1fe10 100644 --- a/po/it.po +++ b/po/it.po @@ -1180,7 +1180,7 @@ msgid "Internal error, Ordering didn't finish" msgstr "Errore interno, l'ordinamento non è stato terminato" #: apt-private/private-install.cc:159 -msgid "How odd.. The sizes didn't match, email apt@packages.debian.org" +msgid "How odd... The sizes didn't match, email apt@packages.debian.org" msgstr "" "Le dimensioni non corrispondono. Inviare un'email a: apt@packages.debian.org" @@ -3263,10 +3263,6 @@ msgstr "Il blocco vendor %s non contiene impronte" msgid "Using CD-ROM mount point %s\n" msgstr "Viene usato il punto di mount del CD-ROM %s\n" -#: apt-pkg/cdrom.cc:583 -msgid "Unmounting CD-ROM\n" -msgstr "Smontaggio CD-ROM\n" - #: apt-pkg/cdrom.cc:588 msgid "Waiting for disc...\n" msgstr "In attesa del disco...\n" @@ -3276,7 +3272,7 @@ msgid "Mounting CD-ROM...\n" msgstr "Montaggio CD-ROM...\n" #: apt-pkg/cdrom.cc:605 -msgid "Identifying.. " +msgid "Identifying... " msgstr "Identificazione... " #: apt-pkg/cdrom.cc:643 @@ -3289,7 +3285,7 @@ msgid "Unmounting CD-ROM...\n" msgstr "Smontaggio CD-ROM...\n" #: apt-pkg/cdrom.cc:667 -msgid "Scanning disc for index files..\n" +msgid "Scanning disc for index files...\n" msgstr "Analisi del disco per file indice...\n" #: apt-pkg/cdrom.cc:717 diff --git a/po/ja.po b/po/ja.po index 39899be0a..f85224cf9 100644 --- a/po/ja.po +++ b/po/ja.po @@ -1160,7 +1160,7 @@ msgid "Internal error, Ordering didn't finish" msgstr "内部エラー、調整が終わっていません" #: apt-private/private-install.cc:159 -msgid "How odd.. The sizes didn't match, email apt@packages.debian.org" +msgid "How odd... The sizes didn't match, email apt@packages.debian.org" msgstr "" "おっと、サイズがマッチしません。apt@packages.debian.org にメールしてください" @@ -3197,10 +3197,6 @@ msgstr "ベンダブロック %s は鍵指紋を含んでいません" msgid "Using CD-ROM mount point %s\n" msgstr "CD-ROM マウントポイント %s を使用します\n" -#: apt-pkg/cdrom.cc:583 -msgid "Unmounting CD-ROM\n" -msgstr "CD-ROM をアンマウントしています\n" - #: apt-pkg/cdrom.cc:588 msgid "Waiting for disc...\n" msgstr "ディスクを待っています ...\n" @@ -3210,8 +3206,8 @@ msgid "Mounting CD-ROM...\n" msgstr "CD-ROM をマウントしています ...\n" #: apt-pkg/cdrom.cc:605 -msgid "Identifying.. " -msgstr "確認しています.. " +msgid "Identifying... " +msgstr "確認しています... " #: apt-pkg/cdrom.cc:643 #, c-format @@ -3223,8 +3219,8 @@ msgid "Unmounting CD-ROM...\n" msgstr "CD-ROM をアンマウントしています ...\n" #: apt-pkg/cdrom.cc:667 -msgid "Scanning disc for index files..\n" -msgstr "ディスクのインデックスファイルを走査しています ..\n" +msgid "Scanning disc for index files...\n" +msgstr "ディスクのインデックスファイルを走査しています ...\n" #: apt-pkg/cdrom.cc:717 #, c-format diff --git a/po/km.po b/po/km.po index bc7f492b9..f0bb75c19 100644 --- a/po/km.po +++ b/po/km.po @@ -1110,7 +1110,7 @@ msgid "Internal error, Ordering didn't finish" msgstr "កំហុស​ខាងក្នុង​ ការ​រៀប​តាម​លំដាប់​មិន​បាន​បញ្ចប់ឡើយ" #: apt-private/private-install.cc:159 -msgid "How odd.. The sizes didn't match, email apt@packages.debian.org" +msgid "How odd... The sizes didn't match, email apt@packages.debian.org" msgstr "យី អី​ក៏​ចម្លែង​ម្លេះ.. ទំហំ​មិន​ដូច​គ្នា​ឡើយ ។ សូម​ផ្ញើ​អ៊ីមែល​ទៅ apt@packages.debian.org" #. TRANSLATOR: The required space between number and unit is already included @@ -3110,10 +3110,6 @@ msgstr "ប្លុក​ក្រុមហ៊ុន​លក់​ %s គ្ msgid "Using CD-ROM mount point %s\n" msgstr "ប្រើប្រាស់ចំណុចម៉ោន​ ស៊ីឌី​-រ៉ូម​ %s\n" -#: apt-pkg/cdrom.cc:583 -msgid "Unmounting CD-ROM\n" -msgstr "ការមិនម៉ោន​ ស៊ីឌី-រ៉ូម​\n" - #: apt-pkg/cdrom.cc:588 msgid "Waiting for disc...\n" msgstr "កំពុង​រង់ចាំឌីស​...\n" @@ -3123,8 +3119,8 @@ msgid "Mounting CD-ROM...\n" msgstr "កំពុង​ម៉ោន​ ស៊ីឌី​-រ៉ូម​...\n" #: apt-pkg/cdrom.cc:605 -msgid "Identifying.. " -msgstr "កំពុង​ធ្វើអត្តសញ្ញាណនា​.. " +msgid "Identifying... " +msgstr "កំពុង​ធ្វើអត្តសញ្ញាណនា​... " #: apt-pkg/cdrom.cc:643 #, c-format @@ -3137,8 +3133,8 @@ msgid "Unmounting CD-ROM...\n" msgstr "មិនកំពុងម៉ោន ស៊ីឌី​-រ៉ូម​ ទេ..." #: apt-pkg/cdrom.cc:667 -msgid "Scanning disc for index files..\n" -msgstr "កំពុង​ស្កេន​ឌីស​សម្រាប់​​ឯកសារ​លិបិក្រម​..\n" +msgid "Scanning disc for index files...\n" +msgstr "កំពុង​ស្កេន​ឌីស​សម្រាប់​​ឯកសារ​លិបិក្រម​...\n" #: apt-pkg/cdrom.cc:717 #, fuzzy, c-format diff --git a/po/ko.po b/po/ko.po index f6524c6dc..8b7f9ca86 100644 --- a/po/ko.po +++ b/po/ko.po @@ -1118,7 +1118,7 @@ msgid "Internal error, Ordering didn't finish" msgstr "내부 오류. 순서변경작업이 끝나지 않았습니다" #: apt-private/private-install.cc:159 -msgid "How odd.. The sizes didn't match, email apt@packages.debian.org" +msgid "How odd... The sizes didn't match, email apt@packages.debian.org" msgstr "" "이상하게도 크기가 서로 다릅니다. apt@packages.debian.org로 이메일을 보내주십" "시오." @@ -3131,10 +3131,6 @@ msgstr "벤더 블럭 %s의 핑거프린트가 없습니다" msgid "Using CD-ROM mount point %s\n" msgstr "CD-ROM 마운트 위치 %s 사용\n" -#: apt-pkg/cdrom.cc:583 -msgid "Unmounting CD-ROM\n" -msgstr "CD-ROM 마운트 해제하는 중입니다\n" - #: apt-pkg/cdrom.cc:588 msgid "Waiting for disc...\n" msgstr "디스크를 기다리는 중입니다...\n" @@ -3144,8 +3140,8 @@ msgid "Mounting CD-ROM...\n" msgstr "CD-ROM 마운트하는 중입니다...\n" #: apt-pkg/cdrom.cc:605 -msgid "Identifying.. " -msgstr "알아보는 중입니다.. " +msgid "Identifying... " +msgstr "알아보는 중입니다... " #: apt-pkg/cdrom.cc:643 #, c-format @@ -3157,7 +3153,7 @@ msgid "Unmounting CD-ROM...\n" msgstr "CD-ROM을 마운트 해제하는 중입니다...\n" #: apt-pkg/cdrom.cc:667 -msgid "Scanning disc for index files..\n" +msgid "Scanning disc for index files...\n" msgstr "디스크에서 색인 파일을 찾는 중입니다...\n" #: apt-pkg/cdrom.cc:717 diff --git a/po/ku.po b/po/ku.po index 421f1779f..078e0e745 100644 --- a/po/ku.po +++ b/po/ku.po @@ -1031,7 +1031,7 @@ msgid "Internal error, Ordering didn't finish" msgstr "" #: apt-private/private-install.cc:159 -msgid "How odd.. The sizes didn't match, email apt@packages.debian.org" +msgid "How odd... The sizes didn't match, email apt@packages.debian.org" msgstr "" #. TRANSLATOR: The required space between number and unit is already included @@ -2942,10 +2942,6 @@ msgstr "" msgid "Using CD-ROM mount point %s\n" msgstr "" -#: apt-pkg/cdrom.cc:583 -msgid "Unmounting CD-ROM\n" -msgstr "" - #: apt-pkg/cdrom.cc:588 msgid "Waiting for disc...\n" msgstr "" @@ -2955,7 +2951,7 @@ msgid "Mounting CD-ROM...\n" msgstr "" #: apt-pkg/cdrom.cc:605 -msgid "Identifying.. " +msgid "Identifying... " msgstr "" #: apt-pkg/cdrom.cc:643 @@ -2968,7 +2964,7 @@ msgid "Unmounting CD-ROM...\n" msgstr "" #: apt-pkg/cdrom.cc:667 -msgid "Scanning disc for index files..\n" +msgid "Scanning disc for index files...\n" msgstr "" #: apt-pkg/cdrom.cc:717 diff --git a/po/lt.po b/po/lt.po index b799099b6..362c69c58 100644 --- a/po/lt.po +++ b/po/lt.po @@ -1032,8 +1032,8 @@ msgid "Internal error, Ordering didn't finish" msgstr "" #: apt-private/private-install.cc:159 -msgid "How odd.. The sizes didn't match, email apt@packages.debian.org" -msgstr "Keista.. Dydis neatitinka, Parašykite laišką apt@packages.debian.org" +msgid "How odd... The sizes didn't match, email apt@packages.debian.org" +msgstr "Keista... Dydis neatitinka, Parašykite laišką apt@packages.debian.org" #. TRANSLATOR: The required space between number and unit is already included #. in the replacement strings, so %sB will be correctly translate in e.g. 1,5 MB @@ -3035,10 +3035,6 @@ msgstr "" msgid "Using CD-ROM mount point %s\n" msgstr "Naudojama CD-ROM prijungimo vieta %s\n" -#: apt-pkg/cdrom.cc:583 -msgid "Unmounting CD-ROM\n" -msgstr "Atjungiamas CD-ROM\n" - #: apt-pkg/cdrom.cc:588 msgid "Waiting for disc...\n" msgstr "Laukiama disko...\n" @@ -3048,8 +3044,8 @@ msgid "Mounting CD-ROM...\n" msgstr "Prijungiamas CD-ROM...\n" #: apt-pkg/cdrom.cc:605 -msgid "Identifying.. " -msgstr "Identifikuojama.. " +msgid "Identifying... " +msgstr "Identifikuojama... " #: apt-pkg/cdrom.cc:643 #, c-format @@ -3061,7 +3057,7 @@ msgid "Unmounting CD-ROM...\n" msgstr "Atjungiamas CD-ROM...\n" #: apt-pkg/cdrom.cc:667 -msgid "Scanning disc for index files..\n" +msgid "Scanning disc for index files...\n" msgstr "" #: apt-pkg/cdrom.cc:717 diff --git a/po/mr.po b/po/mr.po index ea1c478e9..c66fc52ac 100644 --- a/po/mr.po +++ b/po/mr.po @@ -1108,7 +1108,7 @@ msgid "Internal error, Ordering didn't finish" msgstr "अंतर्गत त्रुटी,क्रम अजून संपला नाही" #: apt-private/private-install.cc:159 -msgid "How odd.. The sizes didn't match, email apt@packages.debian.org" +msgid "How odd... The sizes didn't match, email apt@packages.debian.org" msgstr "किती विचित्र...आकार जुळत नाहीत, ईमेल apt@packages.debian.org" #. TRANSLATOR: The required space between number and unit is already included @@ -3120,10 +3120,6 @@ msgstr "विक्रेता गट %s मध्ये बोटाचे msgid "Using CD-ROM mount point %s\n" msgstr "सिडी-रॉमचे माउंट स्थान %s वापरुन\n" -#: apt-pkg/cdrom.cc:583 -msgid "Unmounting CD-ROM\n" -msgstr "सिडी-रॉम अनमाउंट करत आहे\n" - #: apt-pkg/cdrom.cc:588 msgid "Waiting for disc...\n" msgstr "डिस्क/चकती करिता प्रतिक्षा करीत आहे...\n" @@ -3133,8 +3129,8 @@ msgid "Mounting CD-ROM...\n" msgstr "सिडी-रॉम माउंट होत आहे...\n" #: apt-pkg/cdrom.cc:605 -msgid "Identifying.. " -msgstr "ओळखत आहे.." +msgid "Identifying... " +msgstr "ओळखत आहे..." #: apt-pkg/cdrom.cc:643 #, c-format @@ -3146,8 +3142,8 @@ msgid "Unmounting CD-ROM...\n" msgstr "सिडी-रॉम अनमाउंट होत आहे...\n" #: apt-pkg/cdrom.cc:667 -msgid "Scanning disc for index files..\n" -msgstr "संचिकाच्या यादी/सूचीसाठी डिस्क/चकती बारकाईने तपासत आहे..\n" +msgid "Scanning disc for index files...\n" +msgstr "संचिकाच्या यादी/सूचीसाठी डिस्क/चकती बारकाईने तपासत आहे...\n" #: apt-pkg/cdrom.cc:717 #, c-format diff --git a/po/nb.po b/po/nb.po index ff68ac0ca..6edc93013 100644 --- a/po/nb.po +++ b/po/nb.po @@ -1126,7 +1126,7 @@ msgid "Internal error, Ordering didn't finish" msgstr "Intern feil, sortering fullførte ikke" #: apt-private/private-install.cc:159 -msgid "How odd.. The sizes didn't match, email apt@packages.debian.org" +msgid "How odd... The sizes didn't match, email apt@packages.debian.org" msgstr "" "Så rart ... Størrelsene stemmer ikke overens, send en e-post til " "apt@packages.debian.org" @@ -3150,10 +3150,6 @@ msgstr "Utgivers blokk %s inneholder ikke no fingeravtrykk" msgid "Using CD-ROM mount point %s\n" msgstr "Bruker CD-ROM monteringspunkt %s\n" -#: apt-pkg/cdrom.cc:583 -msgid "Unmounting CD-ROM\n" -msgstr "Avmonterer CD-ROM\n" - #: apt-pkg/cdrom.cc:588 msgid "Waiting for disc...\n" msgstr "Venter på CD-en...\n" @@ -3163,8 +3159,8 @@ msgid "Mounting CD-ROM...\n" msgstr "Monterer CD-ROM...\n" #: apt-pkg/cdrom.cc:605 -msgid "Identifying.. " -msgstr "Indentifiserer.." +msgid "Identifying... " +msgstr "Indentifiserer..." #: apt-pkg/cdrom.cc:643 #, c-format @@ -3176,8 +3172,8 @@ msgid "Unmounting CD-ROM...\n" msgstr "Avmonterer CD-ROM ...\n" #: apt-pkg/cdrom.cc:667 -msgid "Scanning disc for index files..\n" -msgstr "Leter gjennom CD for indeksfiler..\n" +msgid "Scanning disc for index files...\n" +msgstr "Leter gjennom CD for indeksfiler...\n" #: apt-pkg/cdrom.cc:717 #, c-format diff --git a/po/ne.po b/po/ne.po index 30b7be69d..59da544fa 100644 --- a/po/ne.po +++ b/po/ne.po @@ -1109,7 +1109,7 @@ msgid "Internal error, Ordering didn't finish" msgstr "आन्तरिक त्रुटि, आदेश समाप्त भएको छैन" #: apt-private/private-install.cc:159 -msgid "How odd.. The sizes didn't match, email apt@packages.debian.org" +msgid "How odd... The sizes didn't match, email apt@packages.debian.org" msgstr "कस्तो नमिलेको.. साइजहरू मेल खाएन, apt@packages.debian.org इमेल गर्नुहोस्" #. TRANSLATOR: The required space between number and unit is already included @@ -3112,10 +3112,6 @@ msgstr "बिक्रता ब्ल्क %s ले कुनै औठा msgid "Using CD-ROM mount point %s\n" msgstr "सिडी रोम माउन्ट विन्दु प्रयोग गरिदैछ %s\n" -#: apt-pkg/cdrom.cc:583 -msgid "Unmounting CD-ROM\n" -msgstr "सिडी रोम अनमाउन्ट गरिदैछ\n" - #: apt-pkg/cdrom.cc:588 msgid "Waiting for disc...\n" msgstr "डिस्को लागि पर्खिदै...\n" @@ -3125,8 +3121,8 @@ msgid "Mounting CD-ROM...\n" msgstr "सिडी रोम माउन्ट गरिदै...\n" #: apt-pkg/cdrom.cc:605 -msgid "Identifying.. " -msgstr "परिचय गराइदैछ.." +msgid "Identifying... " +msgstr "परिचय गराइदैछ..." #: apt-pkg/cdrom.cc:643 #, c-format @@ -3139,7 +3135,7 @@ msgid "Unmounting CD-ROM...\n" msgstr "सिडी रोम अनमाउन्ट गरिदैछ..." #: apt-pkg/cdrom.cc:667 -msgid "Scanning disc for index files..\n" +msgid "Scanning disc for index files...\n" msgstr "अनुक्रमणिका फाइलहरुको लागि डिस्क स्क्यान गरिदैछ...\n" #: apt-pkg/cdrom.cc:717 diff --git a/po/nl.po b/po/nl.po index 48ac54a1b..c68ada677 100644 --- a/po/nl.po +++ b/po/nl.po @@ -1145,7 +1145,7 @@ msgid "Internal error, Ordering didn't finish" msgstr "Interne fout, rangschikken is niet voltooid" #: apt-private/private-install.cc:159 -msgid "How odd.. The sizes didn't match, email apt@packages.debian.org" +msgid "How odd... The sizes didn't match, email apt@packages.debian.org" msgstr "" "Merkwaardig... De groottes kwamen niet overeen, gelieve apt@packages.debian." "org te mailen" @@ -3202,10 +3202,6 @@ msgstr "Verkopersblok %s bevat geen vingerafdruk" msgid "Using CD-ROM mount point %s\n" msgstr "Er wordt gebruik gemaakt van CD-aankoppelpunt %s\n" -#: apt-pkg/cdrom.cc:583 -msgid "Unmounting CD-ROM\n" -msgstr "CD wordt losgekoppeld\n" - #: apt-pkg/cdrom.cc:588 msgid "Waiting for disc...\n" msgstr "Er wordt gewacht op de schijf...\n" @@ -3215,7 +3211,7 @@ msgid "Mounting CD-ROM...\n" msgstr "CD wordt aangekoppeld...\n" #: apt-pkg/cdrom.cc:605 -msgid "Identifying.. " +msgid "Identifying... " msgstr "Identificatie..." #: apt-pkg/cdrom.cc:643 @@ -3228,7 +3224,7 @@ msgid "Unmounting CD-ROM...\n" msgstr "CD wordt afgekoppeld...\n" #: apt-pkg/cdrom.cc:667 -msgid "Scanning disc for index files..\n" +msgid "Scanning disc for index files...\n" msgstr "Er wordt gescand voor indexbestanden...\n" #: apt-pkg/cdrom.cc:717 diff --git a/po/nn.po b/po/nn.po index 8b5275196..6409df3fc 100644 --- a/po/nn.po +++ b/po/nn.po @@ -1119,7 +1119,7 @@ msgid "Internal error, Ordering didn't finish" msgstr "Intern feil ved tilleggjing av avleiing" #: apt-private/private-install.cc:159 -msgid "How odd.. The sizes didn't match, email apt@packages.debian.org" +msgid "How odd... The sizes didn't match, email apt@packages.debian.org" msgstr "" #. TRANSLATOR: The required space between number and unit is already included @@ -3125,10 +3125,6 @@ msgstr "Utgjevarblokka %s inneheld ingen fingeravtrykk" msgid "Using CD-ROM mount point %s\n" msgstr "Brukar monteringspunktet %s for CD-ROM\n" -#: apt-pkg/cdrom.cc:583 -msgid "Unmounting CD-ROM\n" -msgstr "Avmonterer CD-ROM\n" - #: apt-pkg/cdrom.cc:588 msgid "Waiting for disc...\n" msgstr "Ventar p disk ...\n" @@ -3138,7 +3134,7 @@ msgid "Mounting CD-ROM...\n" msgstr "Monterer CD-ROM ...\n" #: apt-pkg/cdrom.cc:605 -msgid "Identifying.. " +msgid "Identifying... " msgstr "Identifiserer ... " #: apt-pkg/cdrom.cc:643 @@ -3147,12 +3143,11 @@ msgid "Stored label: %s\n" msgstr "Lagra etikett: %s \n" #: apt-pkg/cdrom.cc:652 apt-pkg/cdrom.cc:888 -#, fuzzy msgid "Unmounting CD-ROM...\n" -msgstr "Avmonterer CD-ROM ..." +msgstr "Avmonterer CD-ROM ...\n" #: apt-pkg/cdrom.cc:667 -msgid "Scanning disc for index files..\n" +msgid "Scanning disc for index files...\n" msgstr "Leitar etter indeksfiler p disken ...\n" #: apt-pkg/cdrom.cc:717 diff --git a/po/pl.po b/po/pl.po index 40e1016e7..71d03395e 100644 --- a/po/pl.po +++ b/po/pl.po @@ -1170,7 +1170,7 @@ msgid "Internal error, Ordering didn't finish" msgstr "Błąd wewnętrzny, sortowanie niezakończone" #: apt-private/private-install.cc:159 -msgid "How odd.. The sizes didn't match, email apt@packages.debian.org" +msgid "How odd... The sizes didn't match, email apt@packages.debian.org" msgstr "" "Wystąpił dziwny błąd - rozmiary się nie zgadzają. Proszę to zgłosić pod " "apt@packages.debian.org" @@ -3231,10 +3231,6 @@ msgstr "Blok producenta %s nie zawiera odcisku" msgid "Using CD-ROM mount point %s\n" msgstr "Użycie %s jako punktu montowania CD-ROM-u\n" -#: apt-pkg/cdrom.cc:583 -msgid "Unmounting CD-ROM\n" -msgstr "Odmontowanie CD-ROM-u\n" - #: apt-pkg/cdrom.cc:588 msgid "Waiting for disc...\n" msgstr "Oczekiwanie na płytę...\n" @@ -3244,8 +3240,8 @@ msgid "Mounting CD-ROM...\n" msgstr "Montowanie CD-ROM-u...\n" #: apt-pkg/cdrom.cc:605 -msgid "Identifying.. " -msgstr "Identyfikacja.. " +msgid "Identifying... " +msgstr "Identyfikacja... " #: apt-pkg/cdrom.cc:643 #, c-format @@ -3257,8 +3253,8 @@ msgid "Unmounting CD-ROM...\n" msgstr "Odmontowanie CD-ROM-u...\n" #: apt-pkg/cdrom.cc:667 -msgid "Scanning disc for index files..\n" -msgstr "Skanowanie płyty w poszukiwaniu plików indeksu..\n" +msgid "Scanning disc for index files...\n" +msgstr "Skanowanie płyty w poszukiwaniu plików indeksu...\n" #: apt-pkg/cdrom.cc:717 #, c-format diff --git a/po/pt.po b/po/pt.po index 516c18892..c30934820 100644 --- a/po/pt.po +++ b/po/pt.po @@ -1160,9 +1160,9 @@ msgid "Internal error, Ordering didn't finish" msgstr "Erro Interno, Ordering não terminou" #: apt-private/private-install.cc:159 -msgid "How odd.. The sizes didn't match, email apt@packages.debian.org" +msgid "How odd... The sizes didn't match, email apt@packages.debian.org" msgstr "" -"Estranho.. Os tamanhos não coincidiram, escreva para apt@packages.debian.org" +"Estranho... Os tamanhos não coincidiram, escreva para apt@packages.debian.org" #. TRANSLATOR: The required space between number and unit is already included #. in the replacement strings, so %sB will be correctly translate in e.g. 1,5 MB @@ -3221,10 +3221,6 @@ msgstr "O bloco de fabricante %s não contém a impressão digital" msgid "Using CD-ROM mount point %s\n" msgstr "A utilizar o ponto de montagem do CD-ROM %s\n" -#: apt-pkg/cdrom.cc:583 -msgid "Unmounting CD-ROM\n" -msgstr "A desmontar o CD-ROM\n" - #: apt-pkg/cdrom.cc:588 msgid "Waiting for disc...\n" msgstr "A aguardar pelo disco...\n" @@ -3234,8 +3230,8 @@ msgid "Mounting CD-ROM...\n" msgstr "A montar o CD-ROM...\n" #: apt-pkg/cdrom.cc:605 -msgid "Identifying.. " -msgstr "A identificar.. " +msgid "Identifying... " +msgstr "A identificar... " #: apt-pkg/cdrom.cc:643 #, c-format @@ -3247,8 +3243,8 @@ msgid "Unmounting CD-ROM...\n" msgstr "A desmontar o CD-ROM...\n" #: apt-pkg/cdrom.cc:667 -msgid "Scanning disc for index files..\n" -msgstr "A pesquisar os ficheiros de índice do disco..\n" +msgid "Scanning disc for index files...\n" +msgstr "A pesquisar os ficheiros de índice do disco...\n" #: apt-pkg/cdrom.cc:717 #, c-format diff --git a/po/pt_BR.po b/po/pt_BR.po index a9cff2f35..5aab79c68 100644 --- a/po/pt_BR.po +++ b/po/pt_BR.po @@ -1132,9 +1132,9 @@ msgid "Internal error, Ordering didn't finish" msgstr "Erro interno, Ordenação não finalizou" #: apt-private/private-install.cc:159 -msgid "How odd.. The sizes didn't match, email apt@packages.debian.org" +msgid "How odd... The sizes didn't match, email apt@packages.debian.org" msgstr "" -"Que estranho.. Os tamanhos não batem, mande e-mail para apt@packages.debian." +"Que estranho... Os tamanhos não batem, mande e-mail para apt@packages.debian." "org" #. TRANSLATOR: The required space between number and unit is already included @@ -3174,10 +3174,6 @@ msgstr "Bloco fornecedor %s não contém impressão digital (\"fingerprint\")" msgid "Using CD-ROM mount point %s\n" msgstr "Usando ponto de montagem de CD-ROM %s\n" -#: apt-pkg/cdrom.cc:583 -msgid "Unmounting CD-ROM\n" -msgstr "Desmontando CD-ROM\n" - #: apt-pkg/cdrom.cc:588 msgid "Waiting for disc...\n" msgstr "Aguardando por disco...\n" @@ -3187,8 +3183,8 @@ msgid "Mounting CD-ROM...\n" msgstr "Montando CD-ROM...\n" #: apt-pkg/cdrom.cc:605 -msgid "Identifying.. " -msgstr "Identificando.. " +msgid "Identifying... " +msgstr "Identificando... " #: apt-pkg/cdrom.cc:643 #, c-format @@ -3200,8 +3196,8 @@ msgid "Unmounting CD-ROM...\n" msgstr "Desmontando CD-ROM...\n" #: apt-pkg/cdrom.cc:667 -msgid "Scanning disc for index files..\n" -msgstr "Procurando por arquivos de índice no disco..\n" +msgid "Scanning disc for index files...\n" +msgstr "Procurando por arquivos de índice no disco...\n" #: apt-pkg/cdrom.cc:717 #, c-format diff --git a/po/ro.po b/po/ro.po index 1fde2d15b..d10785e00 100644 --- a/po/ro.po +++ b/po/ro.po @@ -1134,9 +1134,9 @@ msgid "Internal error, Ordering didn't finish" msgstr "Eroare internă, Ordering nu s-a terminat" #: apt-private/private-install.cc:159 -msgid "How odd.. The sizes didn't match, email apt@packages.debian.org" +msgid "How odd... The sizes didn't match, email apt@packages.debian.org" msgstr "" -"Ce ciudat.. Dimensiunile nu se potrivesc, scrieți la apt@packages.debian.org" +"Ce ciudat... Dimensiunile nu se potrivesc, scrieți la apt@packages.debian.org" #. TRANSLATOR: The required space between number and unit is already included #. in the replacement strings, so %sB will be correctly translate in e.g. 1,5 MB @@ -3180,10 +3180,6 @@ msgstr "Blocul vânzător %s nu conține amprentă" msgid "Using CD-ROM mount point %s\n" msgstr "Utilizare punct de montare CD-ROM %s\n" -#: apt-pkg/cdrom.cc:583 -msgid "Unmounting CD-ROM\n" -msgstr "Demontare CD-ROM\n" - #: apt-pkg/cdrom.cc:588 msgid "Waiting for disc...\n" msgstr "Aștept discul...\n" @@ -3193,8 +3189,8 @@ msgid "Mounting CD-ROM...\n" msgstr "Montez CD-ROM...\n" #: apt-pkg/cdrom.cc:605 -msgid "Identifying.. " -msgstr "Identificare.. " +msgid "Identifying... " +msgstr "Identificare... " #: apt-pkg/cdrom.cc:643 #, c-format @@ -3206,8 +3202,8 @@ msgid "Unmounting CD-ROM...\n" msgstr "Se demontează CD-ul...\n" #: apt-pkg/cdrom.cc:667 -msgid "Scanning disc for index files..\n" -msgstr "Scanez discul de fișierele index..\n" +msgid "Scanning disc for index files...\n" +msgstr "Scanez discul de fișierele index...\n" # DEVELOPERS: please consider using somehow plural forms #: apt-pkg/cdrom.cc:717 diff --git a/po/ru.po b/po/ru.po index 286d558d0..d087cd2b1 100644 --- a/po/ru.po +++ b/po/ru.po @@ -1170,7 +1170,7 @@ msgid "Internal error, Ordering didn't finish" msgstr "Внутренняя ошибка, Ordering не завершилась" #: apt-private/private-install.cc:159 -msgid "How odd.. The sizes didn't match, email apt@packages.debian.org" +msgid "How odd... The sizes didn't match, email apt@packages.debian.org" msgstr "Странно. Несовпадение размеров, напишите на apt@packages.debian.org" #. TRANSLATOR: The required space between number and unit is already included @@ -3236,10 +3236,6 @@ msgstr "Блок поставщика %s не содержит отпечатк msgid "Using CD-ROM mount point %s\n" msgstr "Использование %s в качестве точки монтирования CD-ROM\n" -#: apt-pkg/cdrom.cc:583 -msgid "Unmounting CD-ROM\n" -msgstr "Размонтирование CD-ROM\n" - #: apt-pkg/cdrom.cc:588 msgid "Waiting for disc...\n" msgstr "Ожидание операции работы с диском…\n" @@ -3249,8 +3245,8 @@ msgid "Mounting CD-ROM...\n" msgstr "Монтирование CD-ROM…\n" #: apt-pkg/cdrom.cc:605 -msgid "Identifying.. " -msgstr "Идентификация.. " +msgid "Identifying... " +msgstr "Идентификация... " #: apt-pkg/cdrom.cc:643 #, c-format @@ -3262,8 +3258,8 @@ msgid "Unmounting CD-ROM...\n" msgstr "Размонтирование CD-ROM…\n" #: apt-pkg/cdrom.cc:667 -msgid "Scanning disc for index files..\n" -msgstr "Поиск на диске индексных файлов..\n" +msgid "Scanning disc for index files...\n" +msgstr "Поиск на диске индексных файлов...\n" #: apt-pkg/cdrom.cc:717 #, c-format diff --git a/po/sk.po b/po/sk.po index 3f3266fb2..b20c0ef48 100644 --- a/po/sk.po +++ b/po/sk.po @@ -1147,7 +1147,7 @@ msgid "Internal error, Ordering didn't finish" msgstr "Vnútorná chyba, Triedenie sa neukončilo" #: apt-private/private-install.cc:159 -msgid "How odd.. The sizes didn't match, email apt@packages.debian.org" +msgid "How odd... The sizes didn't match, email apt@packages.debian.org" msgstr "" "Nezvyčajná udalosť... Veľkosti nesúhlasia, pošlite e-mail na apt@packages." "debian.org" @@ -3180,10 +3180,6 @@ msgstr "Blok výrobcu %s neobsahuje otlačok (fingerprint)" msgid "Using CD-ROM mount point %s\n" msgstr "Použije sa prípojný bod CD-ROM %s\n" -#: apt-pkg/cdrom.cc:583 -msgid "Unmounting CD-ROM\n" -msgstr "CD-ROM sa odpája\n" - #: apt-pkg/cdrom.cc:588 msgid "Waiting for disc...\n" msgstr "Čaká sa na disk...\n" @@ -3193,8 +3189,8 @@ msgid "Mounting CD-ROM...\n" msgstr "Pripája sa CD-ROM...\n" #: apt-pkg/cdrom.cc:605 -msgid "Identifying.. " -msgstr "Identifikuje sa.." +msgid "Identifying... " +msgstr "Identifikuje sa..." #: apt-pkg/cdrom.cc:643 #, c-format @@ -3206,8 +3202,8 @@ msgid "Unmounting CD-ROM...\n" msgstr "CD-ROM sa odpája...\n" #: apt-pkg/cdrom.cc:667 -msgid "Scanning disc for index files..\n" -msgstr "Na disku sa hľadajú indexové súbory..\n" +msgid "Scanning disc for index files...\n" +msgstr "Na disku sa hľadajú indexové súbory...\n" #: apt-pkg/cdrom.cc:717 #, c-format diff --git a/po/sl.po b/po/sl.po index 0de57e349..00c581d77 100644 --- a/po/sl.po +++ b/po/sl.po @@ -1143,9 +1143,9 @@ msgid "Internal error, Ordering didn't finish" msgstr "Notranja napaka, Urejanje se ni končalo" #: apt-private/private-install.cc:159 -msgid "How odd.. The sizes didn't match, email apt@packages.debian.org" +msgid "How odd... The sizes didn't match, email apt@packages.debian.org" msgstr "" -"Kako čudno .. Velikosti se ne ujemata, pošljite sporočilo na apt@packages." +"Kako čudno ... Velikosti se ne ujemata, pošljite sporočilo na apt@packages." "debian.org" #. TRANSLATOR: The required space between number and unit is already included @@ -3188,10 +3188,6 @@ msgstr "Ponudnikov blok %s ne vsebuje prstnega podpisa" msgid "Using CD-ROM mount point %s\n" msgstr "Uporabljanje CD-ROM-ove priklopne točke %s\n" -#: apt-pkg/cdrom.cc:583 -msgid "Unmounting CD-ROM\n" -msgstr "Odklapljanje CD-ROM-a\n" - #: apt-pkg/cdrom.cc:588 msgid "Waiting for disc...\n" msgstr "Čakanje na disk ...\n" @@ -3201,7 +3197,7 @@ msgid "Mounting CD-ROM...\n" msgstr "Priklapljanje CD-ROM-a ...\n" #: apt-pkg/cdrom.cc:605 -msgid "Identifying.. " +msgid "Identifying... " msgstr "Identificiranje ... " #: apt-pkg/cdrom.cc:643 @@ -3214,8 +3210,8 @@ msgid "Unmounting CD-ROM...\n" msgstr "Odklapljanje CD-ROM-a ...\n" #: apt-pkg/cdrom.cc:667 -msgid "Scanning disc for index files..\n" -msgstr "Preiskovanje diska za datoteke kazala ..\n" +msgid "Scanning disc for index files...\n" +msgstr "Preiskovanje diska za datoteke kazala ...\n" #: apt-pkg/cdrom.cc:717 #, c-format diff --git a/po/sv.po b/po/sv.po index 2423b54a9..9a5addfcf 100644 --- a/po/sv.po +++ b/po/sv.po @@ -1134,9 +1134,9 @@ msgid "Internal error, Ordering didn't finish" msgstr "Internt fel. Sorteringen färdigställdes inte" #: apt-private/private-install.cc:159 -msgid "How odd.. The sizes didn't match, email apt@packages.debian.org" +msgid "How odd... The sizes didn't match, email apt@packages.debian.org" msgstr "" -"Konstigt.. storlekarna stämde inte överens, skicka e-post till apt@packages." +"Konstigt... storlekarna stämde inte överens, skicka e-post till apt@packages." "debian.org" #. TRANSLATOR: The required space between number and unit is already included @@ -1536,7 +1536,7 @@ msgstr "Fel vid kompilering av reguljärt uttryck - %s" #: apt-private/private-cachefile.cc:87 msgid "Correcting dependencies..." -msgstr "Korrigerar beroenden...." +msgstr "Korrigerar beroenden..." #: apt-private/private-cachefile.cc:90 msgid " failed." @@ -3180,10 +3180,6 @@ msgstr "Leverantörsblocket %s saknar fingeravtryck" msgid "Using CD-ROM mount point %s\n" msgstr "Använder cd-rom-monteringspunkten %s\n" -#: apt-pkg/cdrom.cc:583 -msgid "Unmounting CD-ROM\n" -msgstr "Avmonterar cd-rom\n" - #: apt-pkg/cdrom.cc:588 msgid "Waiting for disc...\n" msgstr "Väntar på skiva...\n" @@ -3193,8 +3189,8 @@ msgid "Mounting CD-ROM...\n" msgstr "Monterar cd-rom...\n" #: apt-pkg/cdrom.cc:605 -msgid "Identifying.. " -msgstr "Identifierar.. " +msgid "Identifying... " +msgstr "Identifierar... " #: apt-pkg/cdrom.cc:643 #, c-format @@ -3203,10 +3199,10 @@ msgstr "Lagrad etikett: %s \n" #: apt-pkg/cdrom.cc:652 apt-pkg/cdrom.cc:888 msgid "Unmounting CD-ROM...\n" -msgstr "Avmonterar cd-rom...\n" +msgstr "Avmonterar CD-ROM...\n" #: apt-pkg/cdrom.cc:667 -msgid "Scanning disc for index files..\n" +msgid "Scanning disc for index files...\n" msgstr "Söker efter indexfiler på skivan...\n" #: apt-pkg/cdrom.cc:717 diff --git a/po/th.po b/po/th.po index a60dc7434..5c2c37fd8 100644 --- a/po/th.po +++ b/po/th.po @@ -1124,8 +1124,8 @@ msgid "Internal error, Ordering didn't finish" msgstr "ข้อผิดพลาดภายใน: การเรียงลำดับไม่เสร็จสิ้น" #: apt-private/private-install.cc:159 -msgid "How odd.. The sizes didn't match, email apt@packages.debian.org" -msgstr "แปลกประหลาด.. ขนาดไม่ตรงกัน กรุณาอีเมลแจ้ง apt@packages.debian.org" +msgid "How odd... The sizes didn't match, email apt@packages.debian.org" +msgstr "แปลกประหลาด... ขนาดไม่ตรงกัน กรุณาอีเมลแจ้ง apt@packages.debian.org" #. TRANSLATOR: The required space between number and unit is already included #. in the replacement strings, so %sB will be correctly translate in e.g. 1,5 MB @@ -3116,10 +3116,6 @@ msgstr "บล็อคผู้ผลิต %s ไม่มีลายนิ msgid "Using CD-ROM mount point %s\n" msgstr "กำลังใช้จุดเมานท์ซีดีรอม %s\n" -#: apt-pkg/cdrom.cc:583 -msgid "Unmounting CD-ROM\n" -msgstr "กำลังเลิกเมานท์ซีดีรอม\n" - #: apt-pkg/cdrom.cc:588 msgid "Waiting for disc...\n" msgstr "กำลังรอแผ่น...\n" @@ -3129,8 +3125,8 @@ msgid "Mounting CD-ROM...\n" msgstr "กำลังเมานท์ซีดีรอม...\n" #: apt-pkg/cdrom.cc:605 -msgid "Identifying.. " -msgstr "กำลังตรวจสอบชื่อแผ่น.. " +msgid "Identifying... " +msgstr "กำลังตรวจสอบชื่อแผ่น... " #: apt-pkg/cdrom.cc:643 #, c-format @@ -3142,8 +3138,8 @@ msgid "Unmounting CD-ROM...\n" msgstr "กำลังเลิกเมานท์ซีดีรอม...\n" #: apt-pkg/cdrom.cc:667 -msgid "Scanning disc for index files..\n" -msgstr "กำลังสำรวจข้อมูลในแผ่นเพื่อหาแฟ้มดัชนี..\n" +msgid "Scanning disc for index files...\n" +msgstr "กำลังสำรวจข้อมูลในแผ่นเพื่อหาแฟ้มดัชนี...\n" #: apt-pkg/cdrom.cc:717 #, c-format diff --git a/po/tl.po b/po/tl.po index fd43208ea..eedcc8ddd 100644 --- a/po/tl.po +++ b/po/tl.po @@ -1129,9 +1129,9 @@ msgid "Internal error, Ordering didn't finish" msgstr "Error na internal, hindi natapos ang pagsaayos na pagkasunud-sunod" #: apt-private/private-install.cc:159 -msgid "How odd.. The sizes didn't match, email apt@packages.debian.org" +msgid "How odd... The sizes didn't match, email apt@packages.debian.org" msgstr "" -"Nakapagtataka.. Hindi magkatugma ang laki, mag-email sa apt@packages.debian." +"Nakapagtataka... Hindi magkatugma ang laki, mag-email sa apt@packages.debian." "org" #. TRANSLATOR: The required space between number and unit is already included @@ -3161,10 +3161,6 @@ msgstr "Block ng nagbebenta %s ay walang fingerprint" msgid "Using CD-ROM mount point %s\n" msgstr "Ginagamit ang %s bilang mount point ng CD-ROM\n" -#: apt-pkg/cdrom.cc:583 -msgid "Unmounting CD-ROM\n" -msgstr "Ina-unmount ang CD-ROM\n" - #: apt-pkg/cdrom.cc:588 msgid "Waiting for disc...\n" msgstr "Hinihintay ang disc...\n" @@ -3174,7 +3170,7 @@ msgid "Mounting CD-ROM...\n" msgstr "Sinasalang ang CD-ROM...\n" #: apt-pkg/cdrom.cc:605 -msgid "Identifying.. " +msgid "Identifying... " msgstr "Kinikilala..." #: apt-pkg/cdrom.cc:643 @@ -3183,12 +3179,11 @@ msgid "Stored label: %s\n" msgstr "Naka-imbak na Label: %s \n" #: apt-pkg/cdrom.cc:652 apt-pkg/cdrom.cc:888 -#, fuzzy msgid "Unmounting CD-ROM...\n" -msgstr "Ina-unmount ang CD-ROM..." +msgstr "Ina-unmount ang CD-ROM...\n" #: apt-pkg/cdrom.cc:667 -msgid "Scanning disc for index files..\n" +msgid "Scanning disc for index files...\n" msgstr "Sinisiyasat ang Disc para sa talaksang index...\n" #: apt-pkg/cdrom.cc:717 diff --git a/po/tr.po b/po/tr.po index 4027ecc85..ce3042910 100644 --- a/po/tr.po +++ b/po/tr.po @@ -1149,9 +1149,9 @@ msgid "Internal error, Ordering didn't finish" msgstr "İç hata, Sıralama tamamlanamadı" #: apt-private/private-install.cc:159 -msgid "How odd.. The sizes didn't match, email apt@packages.debian.org" +msgid "How odd... The sizes didn't match, email apt@packages.debian.org" msgstr "" -"Ne kadar ilginç.. Boyutlar eşleşmedi, apt@packages.debian.org adresine " +"Ne kadar ilginç... Boyutlar eşleşmedi, apt@packages.debian.org adresine " "eposta atın." #. TRANSLATOR: The required space between number and unit is already included @@ -3206,10 +3206,6 @@ msgstr "Sağlayıcı bloğu %s parmak izi içermiyor" msgid "Using CD-ROM mount point %s\n" msgstr "CD-ROM bağlama noktası %s kullanılıyor\n" -#: apt-pkg/cdrom.cc:583 -msgid "Unmounting CD-ROM\n" -msgstr "CD-ROM ayrılıyor\n" - #: apt-pkg/cdrom.cc:588 msgid "Waiting for disc...\n" msgstr "Disk bekleniliyor...\n" @@ -3219,7 +3215,7 @@ msgid "Mounting CD-ROM...\n" msgstr "CD-ROM bağlanıyor...\n" #: apt-pkg/cdrom.cc:605 -msgid "Identifying.. " +msgid "Identifying... " msgstr "Tanımlanıyor... " #: apt-pkg/cdrom.cc:643 @@ -3232,8 +3228,8 @@ msgid "Unmounting CD-ROM...\n" msgstr "CD-ROM ayrılıyor...\n" #: apt-pkg/cdrom.cc:667 -msgid "Scanning disc for index files..\n" -msgstr "Disk, indeks dosyaları için taranıyor..\n" +msgid "Scanning disc for index files...\n" +msgstr "Disk, indeks dosyaları için taranıyor...\n" #: apt-pkg/cdrom.cc:717 #, c-format diff --git a/po/uk.po b/po/uk.po index 707124c13..770f83d3b 100644 --- a/po/uk.po +++ b/po/uk.po @@ -1167,8 +1167,8 @@ msgid "Internal error, Ordering didn't finish" msgstr "Внутрішня помилка, Ordering не завершилася" #: apt-private/private-install.cc:159 -msgid "How odd.. The sizes didn't match, email apt@packages.debian.org" -msgstr "Дивно.. Розбіжність розмірів, напишіть на apt@packages.debian.org" +msgid "How odd... The sizes didn't match, email apt@packages.debian.org" +msgstr "Дивно... Розбіжність розмірів, напишіть на apt@packages.debian.org" #. TRANSLATOR: The required space between number and unit is already included #. in the replacement strings, so %sB will be correctly translate in e.g. 1,5 MB @@ -3231,10 +3231,6 @@ msgstr "Блок постачальника %s не містить відбит msgid "Using CD-ROM mount point %s\n" msgstr "Використовується точка монтування CD-ROM: %s\n" -#: apt-pkg/cdrom.cc:583 -msgid "Unmounting CD-ROM\n" -msgstr "Демонтується CD-ROM\n" - #: apt-pkg/cdrom.cc:588 msgid "Waiting for disc...\n" msgstr "Чекаю на диск...\n" @@ -3244,8 +3240,8 @@ msgid "Mounting CD-ROM...\n" msgstr "Монтується CD-ROM...\n" #: apt-pkg/cdrom.cc:605 -msgid "Identifying.. " -msgstr "Ідентифікація.. " +msgid "Identifying... " +msgstr "Ідентифікація... " #: apt-pkg/cdrom.cc:643 #, c-format @@ -3257,8 +3253,8 @@ msgid "Unmounting CD-ROM...\n" msgstr "Демонтується CD-ROM...\n" #: apt-pkg/cdrom.cc:667 -msgid "Scanning disc for index files..\n" -msgstr "Сканується диск на вміст індексних файлів..\n" +msgid "Scanning disc for index files...\n" +msgstr "Сканується диск на вміст індексних файлів...\n" #: apt-pkg/cdrom.cc:717 #, c-format diff --git a/po/vi.po b/po/vi.po index 61f5ef3fe..d4d94e994 100644 --- a/po/vi.po +++ b/po/vi.po @@ -1204,7 +1204,7 @@ msgid "Internal error, Ordering didn't finish" msgstr "Gặp lỗi nội bộ: Tiến trình Sắp xếp chưa xong" #: apt-private/private-install.cc:159 -msgid "How odd.. The sizes didn't match, email apt@packages.debian.org" +msgid "How odd... The sizes didn't match, email apt@packages.debian.org" msgstr "" "Lạ nhỉ... Kích cỡ không khớp nhau. Hãy gửi thư cho " @@ -3259,10 +3259,6 @@ msgstr "Khối nhà bán %s không chứa vân tay" msgid "Using CD-ROM mount point %s\n" msgstr "Đang dùng điểm gắn đĩa CD-ROM %s\n" -#: apt-pkg/cdrom.cc:583 -msgid "Unmounting CD-ROM\n" -msgstr "Đang bỏ gắn CD-ROM...\n" - #: apt-pkg/cdrom.cc:588 msgid "Waiting for disc...\n" msgstr "Đang đợi đĩa...\n" @@ -3272,7 +3268,7 @@ msgid "Mounting CD-ROM...\n" msgstr "Đang gắn đĩa CD-ROM...\n" #: apt-pkg/cdrom.cc:605 -msgid "Identifying.. " +msgid "Identifying... " msgstr "Đang nhận diện... " #: apt-pkg/cdrom.cc:643 @@ -3285,7 +3281,7 @@ msgid "Unmounting CD-ROM...\n" msgstr "Đang bỏ gắn CD-ROM...\n" #: apt-pkg/cdrom.cc:667 -msgid "Scanning disc for index files..\n" +msgid "Scanning disc for index files...\n" msgstr "Đang quét đĩa tìm tập tin chỉ mục...\n" #: apt-pkg/cdrom.cc:717 diff --git a/po/zh_CN.po b/po/zh_CN.po index 31ae60ab0..970e35138 100644 --- a/po/zh_CN.po +++ b/po/zh_CN.po @@ -1112,7 +1112,7 @@ msgid "Internal error, Ordering didn't finish" msgstr "内部错误,Ordering 未能完成" #: apt-private/private-install.cc:159 -msgid "How odd.. The sizes didn't match, email apt@packages.debian.org" +msgid "How odd... The sizes didn't match, email apt@packages.debian.org" msgstr "怪了……文件大小不符,请发信给 apt@packages.debian.org 吧" #. TRANSLATOR: The required space between number and unit is already included @@ -3103,10 +3103,6 @@ msgstr "软件提供者数据块内 %s 没有包含指纹信息" msgid "Using CD-ROM mount point %s\n" msgstr "现把 %s 作为了 CD-ROM 的挂载点\n" -#: apt-pkg/cdrom.cc:583 -msgid "Unmounting CD-ROM\n" -msgstr "正在卸载 CD-ROM 文件系统\n" - #: apt-pkg/cdrom.cc:588 msgid "Waiting for disc...\n" msgstr "等待插入盘片……\n" @@ -3116,8 +3112,8 @@ msgid "Mounting CD-ROM...\n" msgstr "正在挂载 CD-ROM 文件系统……\n" #: apt-pkg/cdrom.cc:605 -msgid "Identifying.. " -msgstr "正在鉴别.. " +msgid "Identifying... " +msgstr "正在鉴别... " #: apt-pkg/cdrom.cc:643 #, c-format @@ -3129,8 +3125,8 @@ msgid "Unmounting CD-ROM...\n" msgstr "正在卸载 CD-ROM...\n" #: apt-pkg/cdrom.cc:667 -msgid "Scanning disc for index files..\n" -msgstr "正在盘片中查找索引文件..\n" +msgid "Scanning disc for index files...\n" +msgstr "正在盘片中查找索引文件...\n" #: apt-pkg/cdrom.cc:717 #, c-format diff --git a/po/zh_TW.po b/po/zh_TW.po index cdb02aa55..bbe96b72d 100644 --- a/po/zh_TW.po +++ b/po/zh_TW.po @@ -1105,7 +1105,7 @@ msgid "Internal error, Ordering didn't finish" msgstr "內部錯誤,排序未能完成" #: apt-private/private-install.cc:159 -msgid "How odd.. The sizes didn't match, email apt@packages.debian.org" +msgid "How odd... The sizes didn't match, email apt@packages.debian.org" msgstr "怪哉... 檔案大小不符,請發信給 apt@packages.debian.org" #. TRANSLATOR: The required space between number and unit is already included @@ -3097,10 +3097,6 @@ msgstr "提供者區塊 %s 沒有包含指紋碼" msgid "Using CD-ROM mount point %s\n" msgstr "使用光碟機掛載點 %s\n" -#: apt-pkg/cdrom.cc:583 -msgid "Unmounting CD-ROM\n" -msgstr "正在卸載光碟機\n" - #: apt-pkg/cdrom.cc:588 msgid "Waiting for disc...\n" msgstr "正在等待碟片...\n" @@ -3110,8 +3106,8 @@ msgid "Mounting CD-ROM...\n" msgstr "正在掛載光碟機... \n" #: apt-pkg/cdrom.cc:605 -msgid "Identifying.. " -msgstr "正在識別.." +msgid "Identifying... " +msgstr "正在識別..." #: apt-pkg/cdrom.cc:643 #, c-format @@ -3123,8 +3119,8 @@ msgid "Unmounting CD-ROM...\n" msgstr "正在卸載光碟機...\n" #: apt-pkg/cdrom.cc:667 -msgid "Scanning disc for index files..\n" -msgstr "正在掃描碟片中的索引檔..\n" +msgid "Scanning disc for index files...\n" +msgstr "正在掃描碟片中的索引檔...\n" #: apt-pkg/cdrom.cc:717 #, c-format diff --git a/test/integration/test-apt-cdrom b/test/integration/test-apt-cdrom index fddd26bd9..8d8fdf167 100755 --- a/test/integration/test-apt-cdrom +++ b/test/integration/test-apt-cdrom @@ -35,11 +35,11 @@ aptcdromlog() { } CDROM_PRE="Using CD-ROM mount point $(readlink -f ./rootdir/media)/cdrom/ -Unmounting CD-ROM +Unmounting CD-ROM... Waiting for disc... Please insert a Disc in the drive and press enter Mounting CD-ROM... -Scanning disc for index files.." +Scanning disc for index files..." CDROM_POST="This disc is called: 'Debian APT Testdisk 0.8.15' Writing new source list -- cgit v1.2.3-70-g09d2 From 0d58c26ad7b2308f08f4e6002cbf218605c1c7cf Mon Sep 17 00:00:00 2001 From: David Kalnischkies Date: Mon, 10 Mar 2014 14:15:45 +0100 Subject: improve debug output in case downloadfile fails Git-Dch: Ignore --- cmdline/apt-helper.cc | 15 +++--- test/integration/framework | 83 ++++++++++++++++++----------- test/integration/test-apt-https-no-redirect | 20 ++++--- test/integration/test-partial-file-support | 43 +++++---------- 4 files changed, 86 insertions(+), 75 deletions(-) (limited to 'test/integration') diff --git a/cmdline/apt-helper.cc b/cmdline/apt-helper.cc index d66b3ffae..37279ec28 100644 --- a/cmdline/apt-helper.cc +++ b/cmdline/apt-helper.cc @@ -19,6 +19,7 @@ #include #include +#include #include #include @@ -27,7 +28,6 @@ #include /*}}}*/ -using namespace std; static bool DoDownloadFile(CommandLine &CmdL) { @@ -43,23 +43,22 @@ static bool DoDownloadFile(CommandLine &CmdL) new pkgAcqFile(&Fetcher, download_uri, "", 0, "desc", "short-desc", "dest-dir-ignored", targetfile); Fetcher.Run(); - if (!FileExists(targetfile)) - { - _error->Error(_("Download Failed")); - return false; - } + bool Failed = false; + if (AcquireRun(Fetcher, 0, &Failed, NULL) == false || Failed == false || + FileExists(targetfile) == false) + return _error->Error(_("Download Failed")); return true; } static bool ShowHelp(CommandLine &) { - ioprintf(cout,_("%s %s for %s compiled on %s %s\n"),PACKAGE,PACKAGE_VERSION, + ioprintf(std::cout,_("%s %s for %s compiled on %s %s\n"),PACKAGE,PACKAGE_VERSION, COMMON_ARCH,__DATE__,__TIME__); if (_config->FindB("version") == true) return true; - cout << + std::cout << _("Usage: apt-helper [options] command\n" " apt-helper [options] download-file uri target-path\n" "\n" diff --git a/test/integration/framework b/test/integration/framework index bf6fa0218..c623e6231 100644 --- a/test/integration/framework +++ b/test/integration/framework @@ -863,18 +863,16 @@ signreleasefiles() { webserverconfig() { msgtest "Set webserver config option '${1}' to" "$2" - downloadfile "http://localhost:8080/_config/set/${1}/${2}" '/dev/null' >/dev/null - local DOWNLOG='download-testfile.log' - rm -f "$DOWNLOG" - local STATUS="${TMPWORKINGDIRECTORY}/rootdir/tmp/webserverconfig.status" - downloadfile "http://localhost:8080/_config/find/aptwebserver::last-status-code" "$STATUS" > "$DOWNLOG" - if [ "$(cat "$STATUS")" = '200' ]; then + local DOWNLOG='rootdir/tmp/download-testfile.log' + local STATUS='rootdir/tmp/webserverconfig.status' + rm -f "$STATUS" "$DOWNLOG" + if downloadfile "http://localhost:8080/_config/set/${1}/${2}" "$STATUS" > "$DOWNLOG"; then msgpass else - cat >&2 "$DOWNLOG" - msgfail "Statuscode was $(cat "$STATUS")" + cat "$DOWNLOG" "$STATUS" + msgfail fi - rm "$STATUS" + testwebserverlaststatuscode '200' } rewritesourceslist() { @@ -952,10 +950,10 @@ acquire::cdrom::autodetect 0;" > rootdir/etc/apt/apt.conf.d/00cdrom } downloadfile() { - PROTO="$(echo "$1" | cut -d':' -f 1)" - apthelper -o Acquire::https::CaInfo=${TESTDIR}/apt.pem \ - -o Debug::Acquire::${PROTO}=1 \ - download-file "$1" "$2" 2>&1 + local PROTO="$(echo "$1" | cut -d':' -f 1 )" + apthelper -o Acquire::https::CaInfo=${TESTDIR}/apt.pem \ + -o Debug::Acquire::${PROTO}=1 \ + download-file "$1" "$2" 2>&1 || true # only if the file exists the download was successful if [ -e "$2" ]; then return 0 @@ -967,8 +965,8 @@ downloadfile() { checkdiff() { local DIFFTEXT="$(command diff -u "$@" | sed -e '/^---/ d' -e '/^+++/ d' -e '/^@@/ d')" if [ -n "$DIFFTEXT" ]; then - echo - echo "$DIFFTEXT" + echo >&2 + echo >&2 "$DIFFTEXT" return 1 else return 0 @@ -1017,7 +1015,9 @@ testequalor2() { shift 2 msgtest "Test for equality OR of" "$*" $* >$COMPAREAGAINST 2>&1 || true - if checkdiff $COMPAREFILE1 $COMPAREAGAINST 1> /dev/null || checkdiff $COMPAREFILE2 $COMPAREAGAINST 1> /dev/null; then + if checkdiff $COMPAREFILE1 $COMPAREAGAINST >/dev/null 2>&1 || \ + checkdiff $COMPAREFILE2 $COMPAREAGAINST >/dev/null 2>&1 + then msgpass else echo -n "\n${CINFO}Diff against OR 1${CNORMAL}" @@ -1051,24 +1051,24 @@ testnopackage() { msgtest "Test for non-existent packages" "apt-cache show $*" local SHOWPKG="$(aptcache show "$@" 2>&1 | grep '^Package: ')" if [ -n "$SHOWPKG" ]; then - echo - echo "$SHOWPKG" + echo >&2 + echo >&2 "$SHOWPKG" msgfail - return 1 + else + msgpass fi - msgpass } testdpkginstalled() { msgtest "Test for correctly installed package(s) with" "dpkg -l $*" local PKGS="$(dpkg -l "$@" 2>/dev/null | grep '^i' | wc -l)" if [ "$PKGS" != $# ]; then - echo $PKGS - dpkg -l "$@" | grep '^[a-z]' + echo >&2 $PKGS + dpkg -l "$@" | grep '^[a-z]' >&2 msgfail - return 1 + else + msgpass fi - msgpass } testdpkgnotinstalled() { @@ -1076,11 +1076,11 @@ testdpkgnotinstalled() { local PKGS="$(dpkg -l "$@" 2> /dev/null | grep '^i' | wc -l)" if [ "$PKGS" != 0 ]; then echo - dpkg -l "$@" | grep '^[a-z]' + dpkg -l "$@" | grep '^[a-z]' >&2 msgfail - return 1 + else + msgpass fi - msgpass } testmarkedauto() { @@ -1105,8 +1105,8 @@ testsuccess() { if $@ >${OUTPUT} 2>&1; then msgpass else - echo - cat $OUTPUT + echo >&2 + cat >&2 $OUTPUT msgfail fi } @@ -1119,14 +1119,35 @@ testfailure() { fi local OUTPUT="${TMPWORKINGDIRECTORY}/rootdir/tmp/testfailure.output" if $@ >${OUTPUT} 2>&1; then - echo - cat $OUTPUT + echo >&2 + cat >&2 $OUTPUT msgfail else msgpass fi } +testwebserverlaststatuscode() { + local DOWNLOG='rootdir/tmp/webserverstatus-testfile.log' + local STATUS='rootdir/tmp/webserverstatus-statusfile.log' + rm -f "$DOWNLOG" "$STATUS" + msgtest 'Test last status code from the webserver was' "$1" + downloadfile "http://localhost:8080/_config/find/aptwebserver::last-status-code" "$STATUS" > "$DOWNLOG" + if [ "$(cat "$STATUS")" = "$1" ]; then + msgpass + else + echo >&2 + if [ -n "$2" ]; then + shift + echo >&2 '#### Additionally provided output files contain:' + cat >&2 "$@" + fi + echo >&2 '#### Download log of the status code:' + cat >&2 "$DOWNLOG" + msgfail "Status was $(cat "$STATUS")" + fi +} + pause() { echo "STOPPED execution. Press enter to continue" local IGNORE diff --git a/test/integration/test-apt-https-no-redirect b/test/integration/test-apt-https-no-redirect index 0408c6832..73352a28c 100755 --- a/test/integration/test-apt-https-no-redirect +++ b/test/integration/test-apt-https-no-redirect @@ -7,18 +7,24 @@ TESTDIR=$(readlink -f $(dirname $0)) setupenvironment configarchitecture "i386" -buildsimplenativepackage 'apt' 'all' '1.0' 'stable' +insertpackage 'stable' 'apt' 'all' '1' setupaptarchive --no-update +echo 'alright' > aptarchive/working changetohttpswebserver -o 'aptwebserver::redirect::replace::/redirectme/=http://localhost:8080/' -msgtest 'normal http download works' -downloadfile 'http://localhost:8080/pool/apt_1.0/changelog' changelog2 >/dev/null 2>/dev/null && msgpass || msgfail +msgtest 'download of a file works via' 'http' +downloadfile 'http://localhost:8080/working' httpfile >/dev/null 2>&1 && msgpass || msgfail +testfileequal httpfile 'alright' -msgtest 'normal https download works' -downloadfile 'https://localhost:4433/pool/apt_1.0/changelog' changelog >/dev/null 2>/dev/null && msgpass || msgfail +msgtest 'download of a file works via' 'https' +downloadfile 'https://localhost:4433/working' httpsfile >/dev/null 2>&1 && msgpass || msgfail +testfileequal httpsfile 'alright' -msgtest 'redirecting https to http does not work' -downloadfile 'https://localhost:4433/redirectme/pool/apt_1.0/changelog' changelog3 2>&1 | grep "Protocol http not supported or disabled in libcurl" > /dev/null && msgpass || msgfail +msgtest 'download of a file does not work if' 'https redirected to http' +downloadfile 'https://localhost:4433/redirectme/working' redirectfile >curloutput 2>&1 && msgfail || msgpass + +msgtest 'libcurl has forbidden access in last request to' 'http resource' +grep -q -- 'Protocol http not supported or disabled in libcurl' curloutput && msgpass || msgfail diff --git a/test/integration/test-partial-file-support b/test/integration/test-partial-file-support index 382789e68..5ab326def 100755 --- a/test/integration/test-partial-file-support +++ b/test/integration/test-partial-file-support @@ -13,17 +13,18 @@ copysource() { touch -d "$(stat --format '%y' "${TESTFILE}")" "$3" } +DOWNLOADLOG='rootdir/tmp/testdownloadfile.log' + testdownloadfile() { - local DOWNLOG='download-testfile.log' - rm -f "$DOWNLOG" + rm -f "$DOWNLOADLOG" msgtest "Testing download of file $2 with" "$1" - if ! downloadfile "$2" "$3" > "$DOWNLOG"; then - cat >&2 "$DOWNLOG" + if ! downloadfile "$2" "$3" > "$DOWNLOADLOG"; then + cat >&2 "$DOWNLOADLOG" msgfail else msgpass fi - cat "$DOWNLOG" | while read field hash; do + cat "$DOWNLOADLOG" | while read field hash; do local EXPECTED case "$field" in 'MD5Sum-Hash:') EXPECTED="$(md5sum "$TESTFILE" | cut -d' ' -f 1)";; @@ -40,28 +41,12 @@ testdownloadfile() { if [ "$EXPECTED" "$4" "$hash" ]; then msgpass else - cat >&2 "$DOWNLOG" + cat >&2 "$DOWNLOADLOG" msgfail "expected: $EXPECTED ; got: $hash" fi done } -testwebserverlaststatuscode() { - local DOWNLOG='download-testfile.log' - rm -f "$DOWNLOG" - local STATUS="$(mktemp)" - addtrap "rm $STATUS;" - msgtest 'Test last status code from the webserver was' "$1" - downloadfile "http://localhost:8080/_config/find/aptwebserver::last-status-code" "$STATUS" > "$DOWNLOG" - if [ "$(cat "$STATUS")" = "$1" ]; then - msgpass - else - cat >&2 "$DOWNLOG" - msgfail "Status was $(cat "$STATUS")" - fi -} - - TESTFILE='aptarchive/testfile' cp -a ${TESTDIR}/framework $TESTFILE @@ -70,34 +55,34 @@ testrun() { copysource $TESTFILE 0 ./testfile testdownloadfile 'no data' "${1}/testfile" './testfile' '=' - testwebserverlaststatuscode '200' + testwebserverlaststatuscode '200' "$DOWNLOADLOG" copysource $TESTFILE 20 ./testfile testdownloadfile 'valid partial data' "${1}/testfile" './testfile' '=' - testwebserverlaststatuscode '206' + testwebserverlaststatuscode '206' "$DOWNLOADLOG" copysource /dev/zero 20 ./testfile testdownloadfile 'invalid partial data' "${1}/testfile" './testfile' '!=' - testwebserverlaststatuscode '206' + testwebserverlaststatuscode '206' "$DOWNLOADLOG" copysource $TESTFILE 1M ./testfile testdownloadfile 'completely downloaded file' "${1}/testfile" './testfile' '=' - testwebserverlaststatuscode '416' + testwebserverlaststatuscode '416' "$DOWNLOADLOG" copysource /dev/zero 1M ./testfile testdownloadfile 'too-big partial file' "${1}/testfile" './testfile' '=' - testwebserverlaststatuscode '200' + testwebserverlaststatuscode '200' "$DOWNLOADLOG" copysource /dev/zero 20 ./testfile touch ./testfile testdownloadfile 'old data' "${1}/testfile" './testfile' '=' - testwebserverlaststatuscode '200' + testwebserverlaststatuscode '200' "$DOWNLOADLOG" webserverconfig 'aptwebserver::support::range' 'false' copysource $TESTFILE 20 ./testfile testdownloadfile 'no server support' "${1}/testfile" './testfile' '=' - testwebserverlaststatuscode '200' + testwebserverlaststatuscode '200' "$DOWNLOADLOG" } testrun 'http://localhost:8080' -- cgit v1.2.3-70-g09d2 From b9b0f6222c489db78331cc8be3c093538d22c70b Mon Sep 17 00:00:00 2001 From: David Kalnischkies Date: Mon, 10 Mar 2014 17:53:22 +0100 Subject: use a configurable list of versioned kernel packages With APT::VersionedKernelPackages users have the option of adding packages like pre-build out-of-tree modules to the list of automatically protected from being autoremoved. --- debian/apt.auto-removal.sh | 21 ++--- debian/apt.conf.autoremove | 9 +++ test/integration/framework | 10 ++- .../test-bug-1078697-missing-source-hashes | 35 --------- test/integration/test-kernel-helper-autoremove | 91 ++++++++++++---------- .../test-kernel-helper-autoremove.fake-dpkg | 13 ---- .../test-ubuntu-bug-1078697-missing-source-hashes | 35 +++++++++ 7 files changed, 113 insertions(+), 101 deletions(-) delete mode 100755 test/integration/test-bug-1078697-missing-source-hashes delete mode 100644 test/integration/test-kernel-helper-autoremove.fake-dpkg create mode 100755 test/integration/test-ubuntu-bug-1078697-missing-source-hashes (limited to 'test/integration') diff --git a/debian/apt.auto-removal.sh b/debian/apt.auto-removal.sh index d105f440a..9c4a4157d 100644 --- a/debian/apt.auto-removal.sh +++ b/debian/apt.auto-removal.sh @@ -72,22 +72,23 @@ $previous_version EOF ) -cat > "$config_file".dpkg-new <> "$config_file".dpkg-new - echo " \"^linux-image-extra-${kernel}$\";" >> "$config_file".dpkg-new - echo " \"^linux-signed-image-${kernel}$\";" >> "$config_file".dpkg-new - echo " \"^linux-backports-modules-.*-${kernel}$\";" >> "$config_file".dpkg-new - echo " \"^linux-headers-${kernel}$\";" >> "$config_file".dpkg-new -done -cat >> "$config_file".dpkg-new < "${config_file}.dpkg-new" +mv "${config_file}.dpkg-new" "$config_file" diff --git a/debian/apt.conf.autoremove b/debian/apt.conf.autoremove index 9684c9c7d..ea68f88fc 100644 --- a/debian/apt.conf.autoremove +++ b/debian/apt.conf.autoremove @@ -9,6 +9,15 @@ APT "^gnumach-image.*"; }; + VersionedKernelPackages + { + "linux-image"; + "linux-image-extra"; + "linux-signed-image"; + "linux-backports-modules-.*"; + "linux-headers"; + }; + Never-MarkAuto-Sections { "metapackages"; diff --git a/test/integration/framework b/test/integration/framework index c623e6231..dad8c99f0 100644 --- a/test/integration/framework +++ b/test/integration/framework @@ -93,14 +93,15 @@ msgdone() { runapt() { msgdebug "Executing: ${CCMD}$*${CDEBUG} " - local CMD="$1" + local CMD="${BUILDDIRECTORY}/$1" + if [ "$1" = 'sh' ]; then CMD='sh'; fi shift if [ -f ./aptconfig.conf ]; then - MALLOC_PERTURB_=21 MALLOC_CHECK_=2 APT_CONFIG=aptconfig.conf LD_LIBRARY_PATH=${BUILDDIRECTORY} ${BUILDDIRECTORY}/$CMD "$@" + MALLOC_PERTURB_=21 MALLOC_CHECK_=2 APT_CONFIG=aptconfig.conf LD_LIBRARY_PATH=${BUILDDIRECTORY} $CMD "$@" elif [ -f ../aptconfig.conf ]; then - MALLOC_PERTURB_=21 MALLOC_CHECK_=2 APT_CONFIG=../aptconfig.conf LD_LIBRARY_PATH=${BUILDDIRECTORY} ${BUILDDIRECTORY}/$CMD "$@" + MALLOC_PERTURB_=21 MALLOC_CHECK_=2 APT_CONFIG=../aptconfig.conf LD_LIBRARY_PATH=${BUILDDIRECTORY} $CMD "$@" else - MALLOC_PERTURB_=21 MALLOC_CHECK_=2 LD_LIBRARY_PATH=${BUILDDIRECTORY} ${BUILDDIRECTORY}/$CMD "$@" + MALLOC_PERTURB_=21 MALLOC_CHECK_=2 LD_LIBRARY_PATH=${BUILDDIRECTORY} $CMD "$@" fi } aptconfig() { runapt apt-config "$@"; } @@ -198,6 +199,7 @@ setupenvironment() { touch var/lib/dpkg/available mkdir -p usr/lib/apt ln -s ${METHODSDIR} usr/lib/apt/methods + ln -s ${BUILDDIRECTORY}/../../debian/apt.conf.autoremove etc/apt/apt.conf.d/01autoremove cd .. local PACKAGESFILE=$(echo "$(basename $0)" | sed -e 's/^test-/Packages-/' -e 's/^skip-/Packages-/') if [ -f "${TESTDIRECTORY}/${PACKAGESFILE}" ]; then diff --git a/test/integration/test-bug-1078697-missing-source-hashes b/test/integration/test-bug-1078697-missing-source-hashes deleted file mode 100755 index 6fcb856b5..000000000 --- a/test/integration/test-bug-1078697-missing-source-hashes +++ /dev/null @@ -1,35 +0,0 @@ -#!/bin/sh -set -e - -TESTDIR=$(readlink -f $(dirname $0)) -. $TESTDIR/framework -setupenvironment -configarchitecture "i386" - -msgtest 'Test apt-ftparchive source with missing hashes in .dsc' - -touch aptarchive/foo_1.0.tar.gz -cat > aptarchive/foo_1.0.dsc << EOF -Format: 3.0 (native) -Source: foo -Binary: foo -Architecture: all -Version: 1.0 -Package-List: - foo deb admin extra -Files: - d41d8cd98f00b204e9800998ecf8427e 0 foo_1.0.tar.gz -EOF - -# check for the SHA hashes -aptftparchive sources aptarchive/ > aptarchive/Sources 2>/dev/null || msgfail -test -n "$(grep Checksums-Sha512 aptarchive/Sources)" && msgpass || msgfail - -for hash in sha512sum sha256sum sha1sum; do - for f in foo_1.0.tar.gz foo_1.0.dsc; do - SUM=$($hash aptarchive/$f | cut -d' ' -f1) - msgtest "Test $hash hash matches for $f" - NEEDLE="$SUM $(stat -c%s aptarchive/$f) $f" - test -n "$SUM" && test -n "$(grep "$NEEDLE" aptarchive/Sources)" && msgpass || msgfail - done -done diff --git a/test/integration/test-kernel-helper-autoremove b/test/integration/test-kernel-helper-autoremove index 2b165d100..be30c6f6e 100755 --- a/test/integration/test-kernel-helper-autoremove +++ b/test/integration/test-kernel-helper-autoremove @@ -1,55 +1,68 @@ #!/bin/sh - set -e -# setup testdir TESTDIR=$(readlink -f $(dirname $0)) . $TESTDIR/framework +setupenvironment +configarchitecture 'native' -TMPDIR=$(mktemp -d) -cd $TMPDIR -addtrap "cd /; rm -rf $TMPDIR" +# the executed script would use the installed apt-config, +# which is outside of our control +msgtest 'Check that the installed apt-config supports' '--no-empty' +if apt-config dump --no-empty >/dev/null 2>&1; then + msgpass +else + msgskip + exit 0 +fi -# create mock environment -mkdir apt.conf.d -cat > aptconfig.conf < ./fake-dpkg < rootdir/etc/apt/apt.conf.d/99fakedpkg -# install fake-dpkg into it -install -m755 $TESTDIR/test-kernel-helper-autoremove.fake-dpkg $TMPDIR/fake-dpkg +catfail() { + echo >&2 + echo >&2 '### List of protected kernels:' + cat >&2 protected.list + msgfail +} -# run the helper -sh ${TESTDIR}/../../debian/apt.auto-removal.sh +testprotected() { + rm -f rootdir/etc/apt/apt.conf.d/01autoremove-kernels protected.list -msgtest 'Check that kernel autoremoval list is correctly created' -# and ensure its there, valid and version 10.0.0-1 is there too -test -e $TMPDIR/apt.conf.d/01autoremove-kernels && msgpass || msgfail + testsuccess runapt sh ${TESTDIR}/../../debian/apt.auto-removal.sh "$@" -msgtest 'Check that most recent kernel is saved from autoremoval' -apt-config -c ${APT_CONFIG} dump|grep -q "APT::NeverAutoRemove::.*\^linux-image-10.0.0-1-generic" && msgpass || msgfail + msgtest 'Check kernel autoremoval protection list' 'is created' + test -e rootdir/etc/apt/apt.conf.d/01autoremove-kernels && msgpass || msgfail -# ... and also that the running kernel is excluded -msgtest 'Check that running kernel is saved from autoremoval' -apt-config -c ${APT_CONFIG} dump|grep -q "APT::NeverAutoRemove::.*\^linux-image-$(uname -r)" && msgpass || msgfail + msgtest 'Check kernel autoremoval protection list' 'can be dumped' + aptconfig dump --no-empty --format '%v%n' 'APT::NeverAutoRemove' >protected.list 2>&1 && msgpass || catfail -# and that the old kernel is *not* excluded from autoremoval -msgtest 'Check that older kernels are not excluded from autoremoval' -apt-config -c ${APT_CONFIG} dump|grep -q "APT::NeverAutoRemove::.*\^linux-image-1\.0\.01-2-generic" && msgfail || msgpass + msgtest 'Check kernel autoremoval protection list' 'can be parsed' + grep -q '^[A-Z]: ' protected.list && catfail || msgpass -msgtest "Check that the older kernel is retained when it's being installed" -sh ${TESTDIR}/../../debian/apt.auto-removal.sh 1.0.01-2-generic -test -e $TMPDIR/apt.conf.d/01autoremove-kernels -if ! apt-config -c ${APT_CONFIG} dump|grep -q "APT::NeverAutoRemove::.*\^linux-image-10.0.0-1-generic" \ - || ! apt-config -c ${APT_CONFIG} dump|grep -q "APT::NeverAutoRemove::.*\^linux-image-$(uname -r)" \ - || ! apt-config -c ${APT_CONFIG} dump|grep -q "APT::NeverAutoRemove::.*\^linux-image-1\.0\.01-2-generic" -then - msgfail -else - msgpass -fi + msgtest 'Check kernel autoremoval protection list includes' 'most recent kernel' + grep -q '^\^linux-image-100\.0\.0-1-generic\$$' protected.list && msgpass || catfail + + msgtest 'Check kernel autoremoval protection list includes' 'running kernel' + grep -q "^\\^linux-image-$(uname -r)\\\$\$" protected.list && msgpass || catfail +} + +testprotected +msgtest 'Check kernel autoremoval protection list does not include' 'old kernel' +grep -q '^\^linux-image-1\.0\.0-2-generic\$$' protected.list && catfail || msgpass -# done +testprotected 1.0.0-2-generic +msgtest 'Check kernel autoremoval protection list includes' 'installed kernel' +grep -q '^\^linux-image-1\.0\.0-2-generic\$$' protected.list && msgpass || catfail diff --git a/test/integration/test-kernel-helper-autoremove.fake-dpkg b/test/integration/test-kernel-helper-autoremove.fake-dpkg deleted file mode 100644 index a365c5370..000000000 --- a/test/integration/test-kernel-helper-autoremove.fake-dpkg +++ /dev/null @@ -1,13 +0,0 @@ -#!/bin/sh -set -e - -if [ "$1" = "-l" ]; then - echo "ii linux-image-1.0.0-2-generic 1.0.01-2 amd64" - echo "ii linux-image-$(uname -r) not-used amd64" - echo "ii linux-image-10.0.0-1-generic 10.0.0.1-1 amd64" -elif [ "$1" = "--compare-versions" ]; then - dpkg "$1" "$2" "$3" "$4" -else - dpkg $@ -fi - diff --git a/test/integration/test-ubuntu-bug-1078697-missing-source-hashes b/test/integration/test-ubuntu-bug-1078697-missing-source-hashes new file mode 100755 index 000000000..6fcb856b5 --- /dev/null +++ b/test/integration/test-ubuntu-bug-1078697-missing-source-hashes @@ -0,0 +1,35 @@ +#!/bin/sh +set -e + +TESTDIR=$(readlink -f $(dirname $0)) +. $TESTDIR/framework +setupenvironment +configarchitecture "i386" + +msgtest 'Test apt-ftparchive source with missing hashes in .dsc' + +touch aptarchive/foo_1.0.tar.gz +cat > aptarchive/foo_1.0.dsc << EOF +Format: 3.0 (native) +Source: foo +Binary: foo +Architecture: all +Version: 1.0 +Package-List: + foo deb admin extra +Files: + d41d8cd98f00b204e9800998ecf8427e 0 foo_1.0.tar.gz +EOF + +# check for the SHA hashes +aptftparchive sources aptarchive/ > aptarchive/Sources 2>/dev/null || msgfail +test -n "$(grep Checksums-Sha512 aptarchive/Sources)" && msgpass || msgfail + +for hash in sha512sum sha256sum sha1sum; do + for f in foo_1.0.tar.gz foo_1.0.dsc; do + SUM=$($hash aptarchive/$f | cut -d' ' -f1) + msgtest "Test $hash hash matches for $f" + NEEDLE="$SUM $(stat -c%s aptarchive/$f) $f" + test -n "$SUM" && test -n "$(grep "$NEEDLE" aptarchive/Sources)" && msgpass || msgfail + done +done -- cgit v1.2.3-70-g09d2 From 33677a0cddd552f96963eac6dc74d8ffe9c1f2f6 Mon Sep 17 00:00:00 2001 From: David Kalnischkies Date: Mon, 10 Mar 2014 20:57:07 +0100 Subject: support kfreebsd and hurd in the kernel hook kfreebsd as well as hurd kernel packages call the postinst script as well so we just need to enable the correct parsing for installed packages and disable the "protect every version" hammer for them. --- debian/apt.auto-removal.sh | 16 +++------- debian/apt.conf.autoremove | 8 ++--- test/integration/framework | 2 +- test/integration/test-kernel-helper-autoremove | 44 ++++++++++++++++++++------ 4 files changed, 44 insertions(+), 26 deletions(-) (limited to 'test/integration') diff --git a/debian/apt.auto-removal.sh b/debian/apt.auto-removal.sh index 9c4a4157d..ab8201898 100644 --- a/debian/apt.auto-removal.sh +++ b/debian/apt.auto-removal.sh @@ -1,5 +1,4 @@ #!/bin/sh - set -e # Author: Steve Langasek @@ -42,7 +41,7 @@ version_test_gt () return "$?" } -list=$(${DPKG} -l 'linux-image-[0-9]*'|awk '/^ii/ && $2 !~ /-dbg$/ { print $2 }' | sed -e's/linux-image-//') +list="$(${DPKG} -l | awk '/^ii[ ]+(linux|kfreebsd|gnumach)-image-[0-9]*/ && $2 !~ /-dbg$/ { print $2 }' | sed -e 's#\(linux\|kfreebsd\|gnumach\)-image-##')" latest_version="" previous_version="" @@ -74,21 +73,16 @@ EOF generateconfig() { cat < "${config_file}.dpkg-new" mv "${config_file}.dpkg-new" "$config_file" diff --git a/debian/apt.conf.autoremove b/debian/apt.conf.autoremove index ea68f88fc..5b958c716 100644 --- a/debian/apt.conf.autoremove +++ b/debian/apt.conf.autoremove @@ -4,18 +4,18 @@ APT { "^firmware-linux.*"; "^linux-firmware$"; - "^kfreebsd-image.*"; - "^gnumach$"; - "^gnumach-image.*"; }; VersionedKernelPackages { "linux-image"; + "linux-headers"; "linux-image-extra"; "linux-signed-image"; "linux-backports-modules-.*"; - "linux-headers"; + "kfreebsd-image"; + "kfreebsd-headers"; + "gnumach-image"; }; Never-MarkAuto-Sections diff --git a/test/integration/framework b/test/integration/framework index dad8c99f0..6502dbad1 100644 --- a/test/integration/framework +++ b/test/integration/framework @@ -194,7 +194,7 @@ setupenvironment() { mkdir rootdir aptarchive keys cd rootdir mkdir -p etc/apt/apt.conf.d etc/apt/sources.list.d etc/apt/trusted.gpg.d etc/apt/preferences.d - mkdir -p var/cache var/lib var/log tmp + mkdir -p var/cache var/lib/apt var/log tmp mkdir -p var/lib/dpkg/info var/lib/dpkg/updates var/lib/dpkg/triggers touch var/lib/dpkg/available mkdir -p usr/lib/apt diff --git a/test/integration/test-kernel-helper-autoremove b/test/integration/test-kernel-helper-autoremove index be30c6f6e..cb1c54e81 100755 --- a/test/integration/test-kernel-helper-autoremove +++ b/test/integration/test-kernel-helper-autoremove @@ -4,7 +4,7 @@ set -e TESTDIR=$(readlink -f $(dirname $0)) . $TESTDIR/framework setupenvironment -configarchitecture 'native' +configarchitecture 'amd64' # the executed script would use the installed apt-config, # which is outside of our control @@ -16,21 +16,21 @@ else exit 0 fi -# install fake-dpkg into it +CURRENTKERNEL="linux-image-$(uname -r)" +insertinstalledpackage "$CURRENTKERNEL" 'amd64' '1' +insertinstalledpackage 'linux-image-1.0.0-2-generic' 'amd64' '1.0.0-2' +insertinstalledpackage 'linux-image-100.0.0-1-generic' 'amd64' '100.0.0-1' + +testsuccess aptmark auto "$CURRENTKERNEL" 'linux-image-1.0.0-2-generic' 'linux-image-100.0.0-1-generic' + cat > ./fake-dpkg < rootdir/etc/apt/apt.conf.d/99fakedpkg +# install fake-dpkg into it catfail() { echo >&2 echo >&2 '### List of protected kernels:' @@ -59,10 +59,34 @@ testprotected() { grep -q "^\\^linux-image-$(uname -r)\\\$\$" protected.list && msgpass || catfail } +testequal "Reading package lists... +Building dependency tree... +Reading state information... +The following packages will be REMOVED: + linux-image-1.0.0-2-generic (1.0.0-2) + linux-image-100.0.0-1-generic (100.0.0-1) + $CURRENTKERNEL (1) +0 upgraded, 0 newly installed, 3 to remove and 0 not upgraded. +Remv linux-image-1.0.0-2-generic [1.0.0-2] +Remv linux-image-100.0.0-1-generic [100.0.0-1] +Remv $CURRENTKERNEL [1]" aptget autoremove -sV + testprotected msgtest 'Check kernel autoremoval protection list does not include' 'old kernel' grep -q '^\^linux-image-1\.0\.0-2-generic\$$' protected.list && catfail || msgpass +testequal 'Reading package lists... +Building dependency tree... +Reading state information... +The following packages will be REMOVED: + linux-image-1.0.0-2-generic +0 upgraded, 0 newly installed, 1 to remove and 0 not upgraded. +Remv linux-image-1.0.0-2-generic [1.0.0-2]' aptget autoremove -s + testprotected 1.0.0-2-generic msgtest 'Check kernel autoremoval protection list includes' 'installed kernel' grep -q '^\^linux-image-1\.0\.0-2-generic\$$' protected.list && msgpass || catfail +testequal 'Reading package lists... +Building dependency tree... +Reading state information... +0 upgraded, 0 newly installed, 0 to remove and 0 not upgraded.' aptget autoremove -s -- cgit v1.2.3-70-g09d2 From 7ce1ac857d914f98069078b1ea70995e7b6cf764 Mon Sep 17 00:00:00 2001 From: David Kalnischkies Date: Mon, 10 Mar 2014 21:31:35 +0100 Subject: ensure that a dot is a dot in the hook As we deal with regex matchers here the dots are treated as wildcards if we don't take care of escaping them. Not very likely that this could be a real-world problem, but just to be sure. --- debian/apt.auto-removal.sh | 7 ++----- test/integration/test-kernel-helper-autoremove | 26 +++++++++++++++++--------- 2 files changed, 19 insertions(+), 14 deletions(-) (limited to 'test/integration') diff --git a/debian/apt.auto-removal.sh b/debian/apt.auto-removal.sh index ab8201898..0c5158658 100644 --- a/debian/apt.auto-removal.sh +++ b/debian/apt.auto-removal.sh @@ -63,13 +63,10 @@ then previous_version= fi -kernels=$(sort -u < ./fake-dpkg < Date: Mon, 10 Mar 2014 22:31:00 +0100 Subject: correct LD_LIBRARY_PATH and config loading for apt-helper Mostly ensures that we use the build methods and not the system provided methods in the tests (if we don't want it that way). Git-Dch: Ignore --- debian/tests/run-tests | 1 + test/integration/framework | 40 +++++++++++++++------------------------- 2 files changed, 16 insertions(+), 25 deletions(-) (limited to 'test/integration') diff --git a/debian/tests/run-tests b/debian/tests/run-tests index 41bafda99..e6bc5e0d1 100644 --- a/debian/tests/run-tests +++ b/debian/tests/run-tests @@ -13,4 +13,5 @@ APT_INTEGRATION_TESTS_WEBSERVER_BIN_DIR=$(pwd)/build/bin \ APT_INTEGRATION_TESTS_METHODS_DIR=/usr/lib/apt/methods \ APT_INTEGRATION_TESTS_LIBEXEC_DIR=/usr/lib/apt/ \ APT_INTEGRATION_TESTS_BUILD_DIR=/usr/bin \ +APT_INTEGRATION_TESTS_LIBRARY_PATH=/dev/null/does/not/exist \ ./test/integration/run-tests diff --git a/test/integration/framework b/test/integration/framework index 6502dbad1..1ab421c4c 100644 --- a/test/integration/framework +++ b/test/integration/framework @@ -93,15 +93,18 @@ msgdone() { runapt() { msgdebug "Executing: ${CCMD}$*${CDEBUG} " - local CMD="${BUILDDIRECTORY}/$1" - if [ "$1" = 'sh' ]; then CMD='sh'; fi + local CMD="$1" shift + case $CMD in + sh|aptitude|*/*) ;; + *) CMD="${BUILDDIRECTORY}/$CMD";; + esac if [ -f ./aptconfig.conf ]; then - MALLOC_PERTURB_=21 MALLOC_CHECK_=2 APT_CONFIG=aptconfig.conf LD_LIBRARY_PATH=${BUILDDIRECTORY} $CMD "$@" + MALLOC_PERTURB_=21 MALLOC_CHECK_=2 APT_CONFIG=aptconfig.conf LD_LIBRARY_PATH=${LIBRARYPATH} $CMD "$@" elif [ -f ../aptconfig.conf ]; then - MALLOC_PERTURB_=21 MALLOC_CHECK_=2 APT_CONFIG=../aptconfig.conf LD_LIBRARY_PATH=${BUILDDIRECTORY} $CMD "$@" + MALLOC_PERTURB_=21 MALLOC_CHECK_=2 APT_CONFIG=../aptconfig.conf LD_LIBRARY_PATH=${LIBRARYPATH} $CMD "$@" else - MALLOC_PERTURB_=21 MALLOC_CHECK_=2 LD_LIBRARY_PATH=${BUILDDIRECTORY} $CMD "$@" + MALLOC_PERTURB_=21 MALLOC_CHECK_=2 LD_LIBRARY_PATH=${LIBRARYPATH} $CMD "$@" fi } aptconfig() { runapt apt-config "$@"; } @@ -112,33 +115,19 @@ aptftparchive() { runapt apt-ftparchive "$@"; } aptkey() { runapt apt-key "$@"; } aptmark() { runapt apt-mark "$@"; } apt() { runapt apt "$@"; } -apthelper() { - LD_LIBRARY_PATH=${APTHELPERBINDIR} ${APTHELPERBINDIR}/apt-helper "$@"; -} -aptwebserver() { - LD_LIBRARY_PATH=${APTWEBSERVERBINDIR} ${APTWEBSERVERBINDIR}/aptwebserver "$@"; -} +apthelper() { runapt "${APTHELPERBINDIR}/apt-helper" "$@"; } +aptwebserver() { runapt "${APTWEBSERVERBINDIR}/aptwebserver" "$@"; } +aptitude() { runapt aptitude "$@"; } + dpkg() { command dpkg --root=${TMPWORKINGDIRECTORY}/rootdir --force-not-root --force-bad-path --log=${TMPWORKINGDIRECTORY}/rootdir/var/log/dpkg.log "$@" } dpkgcheckbuilddeps() { command dpkg-checkbuilddeps --admindir=${TMPWORKINGDIRECTORY}/rootdir/var/lib/dpkg "$@" } -aptitude() { - if [ -f ./aptconfig.conf ]; then - APT_CONFIG=aptconfig.conf LD_LIBRARY_PATH=${BUILDDIRECTORY} command aptitude "$@" - elif [ -f ../aptconfig.conf ]; then - APT_CONFIG=../aptconfig.conf LD_LIBRARY_PATH=${BUILDDIRECTORY} command aptitude "$@" - else - LD_LIBRARY_PATH=${BUILDDIRECTORY} command aptitude "$@" - fi -} gdb() { echo "gdb: run »$*«" - APT_CONFIG=aptconfig.conf LD_LIBRARY_PATH=${BUILDDIRECTORY} command gdb ${BUILDDIRECTORY}/$1 --args "$@" -} -http() { - LD_LIBRARY_PATH=${BUILDDIRECTORY} ${BUILDDIRECTORY}/methods/http + APT_CONFIG=aptconfig.conf LD_LIBRARY_PATH=${LIBRARYPATH} command gdb ${BUILDDIRECTORY}/$1 --args "$@" } gpg() { # see apt-key for the whole trickery. Setup is done in setupenvironment @@ -183,6 +172,7 @@ setupenvironment() { # allow overriding the default BUILDDIR location BUILDDIRECTORY=${APT_INTEGRATION_TESTS_BUILD_DIR:-"${TESTDIRECTORY}/../../build/bin"} + LIBRARYPATH=${APT_INTEGRATION_TESTS_LIBRARY_PATH:-"${BUILDDIRECTORY}"} METHODSDIR=${APT_INTEGRATION_TESTS_METHODS_DIR:-"${BUILDDIRECTORY}/methods"} APTHELPERBINDIR=${APT_INTEGRATION_TESTS_LIBEXEC_DIR:-"${BUILDDIRECTORY}"} APTWEBSERVERBINDIR=${APT_INTEGRATION_TESTS_WEBSERVER_BIN_DIR:-"${BUILDDIRECTORY}"} @@ -246,7 +236,7 @@ setupenvironment() { # cleanup the environment a bit export PATH="${PATH}:/usr/local/sbin:/usr/sbin:/sbin" export LC_ALL=C.UTF-8 - unset LANGUAGE + unset LANGUAGE APT_CONFIG unset GREP_OPTIONS DEB_BUILD_PROFILES msgdone "info" -- cgit v1.2.3-70-g09d2 From 3dcdc1f91a5646f882940ff055b972d6b31a0ba5 Mon Sep 17 00:00:00 2001 From: David Kalnischkies Date: Wed, 12 Mar 2014 13:31:41 +0100 Subject: factor out getting list of architectures from comma list Beside fixing this minor code duplication it also resolves the problem of messing up vim syntax-highlighting. Git-Dch: Ignore --- test/integration/framework | 13 ++++++++----- 1 file changed, 8 insertions(+), 5 deletions(-) (limited to 'test/integration') diff --git a/test/integration/framework b/test/integration/framework index 1ab421c4c..00c8f3abc 100644 --- a/test/integration/framework +++ b/test/integration/framework @@ -259,6 +259,10 @@ getarchitectures() { echo "$(aptconfig dump | grep APT::Architecture | cut -d'"' -f 2 | sed '/^$/ d' | sort | uniq | tr '\n' ' ')" } +getarchitecturesfromcommalist() { + echo "$1" | sed -e 's#,#\n#g' | sed -e "s/^native\$/$(getarchitecture 'native')/" +} + configarchitecture() { { echo "APT::Architecture \"$(getarchitecture $1)\";" @@ -432,7 +436,7 @@ Package: $NAME" >> ${BUILDDIR}/debian/control # fi done - for arch in $(echo "$ARCH" | sed -e 's#,#\n#g' | sed -e "s#^native\$#$(getarchitecture 'native')#"); do + for arch in $(getarchitecturesfromcommalist "$ARCH"); do rm -rf ${BUILDDIR}/debian/tmp mkdir -p ${BUILDDIR}/debian/tmp/DEBIAN ${BUILDDIR}/debian/tmp/usr/share/doc/${NAME} ${BUILDDIR}/debian/tmp/usr/bin cp ${BUILDDIR}/debian/copyright ${BUILDDIR}/debian/changelog ${BUILDDIR}/FEATURES ${BUILDDIR}/debian/tmp/usr/share/doc/${NAME} @@ -587,7 +591,7 @@ insertpackage() { something went horribly wrong! They are autogenerated und used only by testcases and surf no other propose…"}" local ARCHS="" - for arch in $(echo "$ARCH" | sed -e 's#,#\n#g' | sed -e "s#^native\$#$(getarchitecture 'native')#"); do + for arch in $(getarchitecturesfromcommalist "$ARCH"); do if [ "$arch" = 'all' -o "$arch" = 'none' ]; then ARCHS="$(getarchitectures)" else @@ -649,7 +653,7 @@ insertinstalledpackage() { local FILE='rootdir/var/lib/dpkg/status' local INFO='rootdir/var/lib/dpkg/info' - for arch in $(echo "$ARCH" | sed -e 's#,#\n#g' | sed -e "s#^native\$#$(getarchitecture 'native')#"); do + for arch in $(getarchitecturesfromcommalist "$ARCH"); do echo "Package: $NAME Status: $STATUS Priority: $PRIORITY @@ -943,8 +947,7 @@ acquire::cdrom::autodetect 0;" > rootdir/etc/apt/apt.conf.d/00cdrom downloadfile() { local PROTO="$(echo "$1" | cut -d':' -f 1 )" - apthelper -o Acquire::https::CaInfo=${TESTDIR}/apt.pem \ - -o Debug::Acquire::${PROTO}=1 \ + apthelper -o Debug::Acquire::${PROTO}=1 \ download-file "$1" "$2" 2>&1 || true # only if the file exists the download was successful if [ -e "$2" ]; then -- cgit v1.2.3-70-g09d2 From 36e7727f70cde14b95f72029a9e2663672ef4da8 Mon Sep 17 00:00:00 2001 From: David Kalnischkies Date: Wed, 12 Mar 2014 13:36:08 +0100 Subject: ensure that gz compression test is run with gz The framework can be configured to use different compression algorithms to test different ones, but a testcase testing for gz support should always be run with gz, regardless of what compressions are configured otherwise. Git-Dch: Ignore --- test/integration/test-compressed-indexes | 1 + 1 file changed, 1 insertion(+) (limited to 'test/integration') diff --git a/test/integration/test-compressed-indexes b/test/integration/test-compressed-indexes index c6f5ab49e..67ca0ba27 100755 --- a/test/integration/test-compressed-indexes +++ b/test/integration/test-compressed-indexes @@ -5,6 +5,7 @@ TESTDIR=$(readlink -f $(dirname $0)) . $TESTDIR/framework setupenvironment +configcompression '.' 'gz' # only gz is supported for this, so ensure it is used configarchitecture "i386" buildsimplenativepackage "testpkg" "i386" "1.0" -- cgit v1.2.3-70-g09d2 From a17482f89b636a52aacc57776bfc8041cf4da508 Mon Sep 17 00:00:00 2001 From: David Kalnischkies Date: Fri, 21 Mar 2014 11:47:56 +0100 Subject: only consider versioned kernel packages in autoremove Metapackages like "linux-image-amd64" are otherwise matched by our extraction as well, which later on can't be successfully compared via dpkg --compare-versions as the 'amd64' bit isn't a version number. (Luckily none of our architectures starts with a digit.) This was broken by me in 0.9.16 as I moved a shell-glob matcher to a regex-based one which has slightly different semantics regarding '*'. Closes: 741962 --- debian/apt.auto-removal.sh | 2 +- test/integration/test-kernel-helper-autoremove | 1 + 2 files changed, 2 insertions(+), 1 deletion(-) (limited to 'test/integration') diff --git a/debian/apt.auto-removal.sh b/debian/apt.auto-removal.sh index 0c5158658..c00416127 100644 --- a/debian/apt.auto-removal.sh +++ b/debian/apt.auto-removal.sh @@ -41,7 +41,7 @@ version_test_gt () return "$?" } -list="$(${DPKG} -l | awk '/^ii[ ]+(linux|kfreebsd|gnumach)-image-[0-9]*/ && $2 !~ /-dbg$/ { print $2 }' | sed -e 's#\(linux\|kfreebsd\|gnumach\)-image-##')" +list="$(${DPKG} -l | awk '/^ii[ ]+(linux|kfreebsd|gnumach)-image-[0-9]/ && $2 !~ /-dbg$/ { print $2 }' | sed -e 's#\(linux\|kfreebsd\|gnumach\)-image-##')" latest_version="" previous_version="" diff --git a/test/integration/test-kernel-helper-autoremove b/test/integration/test-kernel-helper-autoremove index 7713c0875..c51caa758 100755 --- a/test/integration/test-kernel-helper-autoremove +++ b/test/integration/test-kernel-helper-autoremove @@ -20,6 +20,7 @@ CURRENTKERNEL="linux-image-$(uname -r)" insertinstalledpackage "$CURRENTKERNEL" 'amd64' '1' insertinstalledpackage 'linux-image-1.0.0-2-generic' 'amd64' '1.0.0-2' insertinstalledpackage 'linux-image-100.0.0-1-generic' 'amd64' '100.0.0-1' +insertinstalledpackage 'linux-image-amd64' 'amd64' '100.0.0-1' # ensure that the '.' is really a dot and not a wildcard insertinstalledpackage 'linux-headers-1000000-1-generic' 'amd64' '100.0.0-1' -- cgit v1.2.3-70-g09d2 From a1b6a4e7c5f5a859d27e00c2753b7f7b7e9ae14d Mon Sep 17 00:00:00 2001 From: David Kalnischkies Date: Fri, 21 Mar 2014 13:31:34 +0100 Subject: add testcase for APT::Architectures "arch1,arch2" Git-Dch: Ignore --- test/integration/test-bug-612958-use-dpkg-multiarch-config | 9 +++++++++ 1 file changed, 9 insertions(+) (limited to 'test/integration') diff --git a/test/integration/test-bug-612958-use-dpkg-multiarch-config b/test/integration/test-bug-612958-use-dpkg-multiarch-config index 4d1f00ca0..7bf5781e8 100755 --- a/test/integration/test-bug-612958-use-dpkg-multiarch-config +++ b/test/integration/test-bug-612958-use-dpkg-multiarch-config @@ -42,6 +42,15 @@ testpass 'apt config' 'armel' rm $CONFFILE +echo '#clear APT::Architectures;' >> $CONFFILE +echo 'APT::Architectures "i386,amd64";' >> $CONFFILE + +testpass 'apt config' 'i386' +testpass 'apt config' 'amd64' +testfail 'apt config' 'armel' + +rm $CONFFILE + echo '#clear APT::Architectures;' >> $CONFFILE echo 'Dir::Bin::dpkg "./dpkg-printer";' >> $CONFFILE -- cgit v1.2.3-70-g09d2 From d151adbf2cc4d23c240c6c4fcfbfda439a98c36f Mon Sep 17 00:00:00 2001 From: David Kalnischkies Date: Sat, 22 Mar 2014 21:35:57 +0100 Subject: ensure proper teardown in dpkg error cases We have to properly close our pseudo terminals even in error cases before we call post-invoke scripts. This is done now by breaking from the dpkg calling loop instead of copying the handling, which did it in the wrong order before. This also ensures that our state file is written in error cases to record autobit and co as this was forgotten before. Closes: 738969 --- apt-pkg/deb/dpkgpm.cc | 24 ++-- .../test-apt-progress-fd-error-postinst | 22 ---- test/integration/test-failing-maintainer-scripts | 132 +++++++++++++++++++++ 3 files changed, 139 insertions(+), 39 deletions(-) delete mode 100755 test/integration/test-apt-progress-fd-error-postinst create mode 100755 test/integration/test-failing-maintainer-scripts (limited to 'test/integration') diff --git a/apt-pkg/deb/dpkgpm.cc b/apt-pkg/deb/dpkgpm.cc index 9fee7c923..5a5fff13b 100644 --- a/apt-pkg/deb/dpkgpm.cc +++ b/apt-pkg/deb/dpkgpm.cc @@ -1530,28 +1530,18 @@ bool pkgDPkgPM::GoNoABIBreak(APT::Progress::PackageManager *progress) // here but keep the loop going and just report it as a error // for later bool const stopOnError = _config->FindB("Dpkg::StopOnError",true); - - if(stopOnError) - RunScripts("DPkg::Post-Invoke"); - if (WIFSIGNALED(Status) != 0 && WTERMSIG(Status) == SIGSEGV) + if (WIFSIGNALED(Status) != 0 && WTERMSIG(Status) == SIGSEGV) strprintf(d->dpkg_error, "Sub-process %s received a segmentation fault.",Args[0]); else if (WIFEXITED(Status) != 0) strprintf(d->dpkg_error, "Sub-process %s returned an error code (%u)",Args[0],WEXITSTATUS(Status)); - else + else strprintf(d->dpkg_error, "Sub-process %s exited unexpectedly",Args[0]); + _error->Error("%s", d->dpkg_error.c_str()); - if(d->dpkg_error.size() > 0) - _error->Error("%s", d->dpkg_error.c_str()); - - if(stopOnError) - { - CloseLog(); - StopPtyMagic(); - d->progress->Stop(); - return false; - } - } + if(stopOnError) + break; + } } // dpkg is done at this point d->progress->Stop(); @@ -1582,7 +1572,7 @@ bool pkgDPkgPM::GoNoABIBreak(APT::Progress::PackageManager *progress) } Cache.writeStateFile(NULL); - return true; + return d->dpkg_error.empty(); } void SigINT(int /*sig*/) { diff --git a/test/integration/test-apt-progress-fd-error-postinst b/test/integration/test-apt-progress-fd-error-postinst deleted file mode 100755 index 0b6e70212..000000000 --- a/test/integration/test-apt-progress-fd-error-postinst +++ /dev/null @@ -1,22 +0,0 @@ -#!/bin/sh -set -e - -TESTDIR=$(readlink -f $(dirname $0)) -. $TESTDIR/framework - -setupenvironment -configarchitecture 'amd64' 'i386' - -mkdir -p DEBIAN/ -echo "#!/bin/sh\nexit 1" > DEBIAN/postinst -chmod 755 DEBIAN/postinst - -buildsimplenativepackage 'postinst-error' 'amd64,i386' '0.8.15' 'stable' '' 'pkg with posinst error' '' '' './DEBIAN' - -setupaptarchive - -exec 3> apt-progress.log -testfailure aptget install postinst-error -y -o APT::Status-Fd=3 -msgtest "Ensure correct error message for postinst error" -grep -q "pmerror:postinst-error :80:subprocess installed post-installation script returned error exit status 2" apt-progress.log && msgpass || msgfail - diff --git a/test/integration/test-failing-maintainer-scripts b/test/integration/test-failing-maintainer-scripts new file mode 100755 index 000000000..cb82ebc7a --- /dev/null +++ b/test/integration/test-failing-maintainer-scripts @@ -0,0 +1,132 @@ +#!/bin/sh +set -e + +TESTDIR=$(readlink -f $(dirname $0)) +. $TESTDIR/framework + +setupenvironment +configarchitecture 'native' + +# create a bunch of failures +createfailure() { + setupsimplenativepackage "failure-$1" 'native' '1.0' 'unstable' 'Depends: dependee' + BUILDDIR="incoming/failure-$1-1.0" + echo '#!/bin/sh +exit 29' > ${BUILDDIR}/debian/$1 + buildpackage "$BUILDDIR" 'unstable' 'main' 'native' + rm -rf "$BUILDDIR" +} + +buildsimplenativepackage 'dependee' 'native' '1.0' 'unstable' +createfailure 'preinst' +createfailure 'postinst' +createfailure 'prerm' +createfailure 'postrm' + +setupaptarchive + +# create a library to noop chroot() and rewrite maintainer script executions +# via execvp() as used by dpkg as we don't want our rootdir to be a fullblown +# chroot directory dpkg could chroot into to execute the maintainer scripts +cat << EOF > noopchroot.c +#define _GNU_SOURCE +#include +#include +#include +#include + +static char * chrootdir = NULL; + +int chroot(const char *path) { + printf("WARNING: CHROOTing to %s was ignored!\n", path); + free(chrootdir); + chrootdir = strdup(path); + return 0; +} +int execvp(const char *file, char *const argv[]) { + static int (*func_execvp) (const char *, char * const []) = NULL; + if (func_execvp == NULL) + func_execvp = (int (*) (const char *, char * const [])) dlsym(RTLD_NEXT, "execvp"); + if (chrootdir == NULL || strncmp(file, "/var/lib/dpkg/", strlen("/var/lib/dpkg/")) != 0) + return func_execvp(file, argv); + printf("REWRITE execvp call %s into %s\n", file, chrootdir); + char newfile[strlen(chrootdir) + strlen(file)]; + strcpy(newfile, chrootdir); + strcat(newfile, file); + return func_execvp(newfile, argv); +} +EOF +testsuccess gcc -fPIC -shared -o noopchroot.so noopchroot.c -ldl + +mkdir -p "${TMPWORKINGDIRECTORY}/rootdir/usr/bin/" +DPKG="${TMPWORKINGDIRECTORY}/rootdir/usr/bin/dpkg" +echo "#!/bin/sh +if [ -n \"\$LD_PRELOAD\" ]; then + export LD_PRELOAD=\"${TMPWORKINGDIRECTORY}/noopchroot.so \${LD_PRELOAD}\" +else + export LD_PRELOAD=\"${TMPWORKINGDIRECTORY}/noopchroot.so\" +fi +dpkg \"\$@\"" > $DPKG +chmod +x $DPKG +sed -ie "s|^DPKG::options:: \"dpkg\";\$|DPKG::options:: \"$DPKG\";|" aptconfig.conf + +# setup some pre- and post- invokes to check the output isn't garbled later +APTHOOK="${TMPWORKINGDIRECTORY}/rootdir/usr/bin/apthook" +echo '#!/bin/sh +echo "$1: START" +echo "$1: MaiN" +echo "$1: ENd"' > $APTHOOK +chmod +x $APTHOOK +echo "DPKG::Pre-Invoke:: \"${APTHOOK} PRE\"; +DPKG::Post-Invoke:: \"${APTHOOK} POST\";" > rootdir/etc/apt/apt.conf.d/99apthooks + +testmyfailure() { + local PROGRESS='rootdir/tmp/progress.log' + exec 3> $PROGRESS + testfailure "$@" -o APT::Status-Fd=3 + msgtest 'Test for failure message of maintainerscript in' 'console log' + local TEST='rootdir/tmp/testfailure.output' + if grep -q 'exit status 29$' "$TEST"; then + msgpass + else + cat $TEST + msgfail + fi + msgtest 'Test for proper execution of invoke scripts in' 'console log' + if grep -q '^PRE: START$' $TEST && + grep -q '^PRE: MaiN$' $TEST && + grep -q '^PRE: ENd$' $TEST && + grep -q '^POST: START$' $TEST && + grep -q '^POST: MaiN$' $TEST && + grep -q '^POST: ENd$' $TEST; then + msgpass + else + cat $TEST + msgfail + fi + msgtest 'Test for failure message of maintainerscript in' 'progress log' + if grep -q '^pmerror:.\+exit status 29$' "$PROGRESS"; then + msgpass + else + cat $PROGRESS + msgfail + fi + testmarkedauto 'dependee' +} + +cp -a rootdir/var/lib/dpkg/status rootdir/var/lib/dpkg/status.backup +testmyfailure aptget install failure-preinst -y +cp -a rootdir/var/lib/dpkg/status.backup rootdir/var/lib/dpkg/status +testmyfailure aptget install failure-postinst -y +cp -a rootdir/var/lib/dpkg/status.backup rootdir/var/lib/dpkg/status +testsuccess aptget install failure-prerm -y +testdpkginstalled failure-prerm +testmyfailure aptget purge failure-prerm -y +cp -a rootdir/var/lib/dpkg/status.backup rootdir/var/lib/dpkg/status +testsuccess aptget install failure-postrm -y +testdpkginstalled failure-postrm +testmyfailure aptget purge failure-postrm -y + +# FIXME: test with output going to a PTY as it usually does +#cp -a rootdir/var/lib/dpkg/status.backup rootdir/var/lib/dpkg/status +#aptget install failure-preinst -y -- cgit v1.2.3-70-g09d2 From 21b3eac8f9ab8e12b43fa8998a5aa5465f29adc5 Mon Sep 17 00:00:00 2001 From: David Kalnischkies Date: Tue, 11 Mar 2014 10:31:44 +0100 Subject: discard candidates via IsInstallOk to allow override In commit 446551c8 I changed MarkInstall to discard the candidate if the candidate can't satisfy the dependency. This breaks interactive solvers like aptitude which can change the candidate on-the-fly later. In commit df77d8a5 I introduced this 'early' loop-breaking to begin with which can't be that helpful for interactive solvers as well, but makes perfect sense for non-interactives to stop them from exploring trees which can't be satisfied, but it isn't perfect as ideally we would check this before auto-installing the first dependency. This commit therefore moves the loop into its own IsInstallOk hook so that frontends can override this check if they want to and in exchange removes the loop-breaking from MarkInstall itself and does it before any dependency is installed. Closes: 740750 --- apt-pkg/depcache.cc | 78 ++++++++++++++++------ apt-pkg/depcache.h | 2 + .../test-bug-735967-lib32-to-i386-unavailable | 3 + 3 files changed, 63 insertions(+), 20 deletions(-) (limited to 'test/integration') diff --git a/apt-pkg/depcache.cc b/apt-pkg/depcache.cc index 5fa88a5d2..19a6e0d7e 100644 --- a/apt-pkg/depcache.cc +++ b/apt-pkg/depcache.cc @@ -1122,32 +1122,22 @@ bool pkgDepCache::MarkInstall(PkgIterator const &Pkg,bool AutoInst, continue; /* Check if this dep should be consider for install. If it is a user - defined important dep and we are installed a new package then + defined important dep and we are installed a new package then it will be installed. Otherwise we only check for important - deps that have changed from the installed version - */ + deps that have changed from the installed version */ if (IsImportantDep(Start) == false) continue; - /* If we are in an or group locate the first or that can - succeed. We have already cached this.. */ + /* If we are in an or group locate the first or that can + succeed. We have already cached this… */ for (; Ors > 1 && (DepState[Start->ID] & DepCVer) != DepCVer; --Ors) ++Start; + + /* unsatisfiable dependency: IsInstallOkDependenciesSatisfiableByCandidates + would have prevented us to get here if not overridden, so just skip + over the problem here as the frontend will know what it is doing */ if (Ors == 1 && (DepState[Start->ID] &DepCVer) != DepCVer && Start.IsNegative() == false) - { - if(DebugAutoInstall == true) - std::clog << OutputInDepth(Depth) << Start << " can't be satisfied!" << std::endl; - if (Start.IsCritical() == false) - continue; - // if the dependency was critical, we have absolutely no chance to install it, - // so if it wasn't installed remove it again. If it was, discard the candidate - // as the problemresolver will trip over it otherwise trying to install it (#735967) - if (Pkg->CurrentVer == 0) - MarkDelete(Pkg,false,Depth + 1, false); - else - SetCandidateVersion(Pkg.CurrentVer()); - return false; - } + continue; /* Check if any ImportantDep() (but not Critical) were added * since we installed the package. Also check for deps that @@ -1299,7 +1289,8 @@ bool pkgDepCache::MarkInstall(PkgIterator const &Pkg,bool AutoInst, bool pkgDepCache::IsInstallOk(PkgIterator const &Pkg,bool AutoInst, unsigned long Depth, bool FromUser) { - return IsInstallOkMultiArchSameVersionSynced(Pkg,AutoInst, Depth, FromUser); + return IsInstallOkMultiArchSameVersionSynced(Pkg,AutoInst, Depth, FromUser) && + IsInstallOkDependenciesSatisfiableByCandidates(Pkg,AutoInst, Depth, FromUser); } bool pkgDepCache::IsInstallOkMultiArchSameVersionSynced(PkgIterator const &Pkg, bool const /*AutoInst*/, unsigned long const Depth, bool const FromUser) @@ -1342,6 +1333,53 @@ bool pkgDepCache::IsInstallOkMultiArchSameVersionSynced(PkgIterator const &Pkg, return false; } + return true; +} +bool pkgDepCache::IsInstallOkDependenciesSatisfiableByCandidates(PkgIterator const &Pkg, + bool const AutoInst, unsigned long const Depth, bool const /*FromUser*/) +{ + if (AutoInst == false) + return true; + + VerIterator const CandVer = PkgState[Pkg->ID].CandidateVerIter(*this); + if (unlikely(CandVer.end() == true) || CandVer == Pkg.CurrentVer()) + return true; + + for (DepIterator Dep = CandVer.DependsList(); Dep.end() != true;) + { + // Grok or groups + DepIterator Start = Dep; + bool Result = true; + unsigned Ors = 0; + for (bool LastOR = true; Dep.end() == false && LastOR == true; ++Dep, ++Ors) + { + LastOR = (Dep->CompareOp & Dep::Or) == Dep::Or; + + if ((DepState[Dep->ID] & DepInstall) == DepInstall) + Result = false; + } + + if (Start.IsCritical() == false || Start.IsNegative() == true || Result == false) + continue; + + /* If we are in an or group locate the first or that can succeed. + We have already cached this… */ + for (; Ors > 1 && (DepState[Start->ID] & DepCVer) != DepCVer; --Ors) + ++Start; + + if (Ors == 1 && (DepState[Start->ID] &DepCVer) != DepCVer) + { + if (DebugAutoInstall == true) + std::clog << OutputInDepth(Depth) << Start << " can't be satisfied!" << std::endl; + + // the dependency is critical, but can't be installed, so discard the candidate + // as the problemresolver will trip over it otherwise trying to install it (#735967) + if (Pkg->CurrentVer != 0) + SetCandidateVersion(Pkg.CurrentVer()); + return false; + } + } + return true; } /*}}}*/ diff --git a/apt-pkg/depcache.h b/apt-pkg/depcache.h index bde648c65..bec651279 100644 --- a/apt-pkg/depcache.h +++ b/apt-pkg/depcache.h @@ -506,6 +506,8 @@ class pkgDepCache : protected pkgCache::Namespace // methods call by IsInstallOk bool IsInstallOkMultiArchSameVersionSynced(PkgIterator const &Pkg, bool const AutoInst, unsigned long const Depth, bool const FromUser); + bool IsInstallOkDependenciesSatisfiableByCandidates(PkgIterator const &Pkg, + bool const AutoInst, unsigned long const Depth, bool const FromUser); // methods call by IsDeleteOk bool IsDeleteOkProtectInstallRequests(PkgIterator const &Pkg, diff --git a/test/integration/test-bug-735967-lib32-to-i386-unavailable b/test/integration/test-bug-735967-lib32-to-i386-unavailable index 4dbe1d25d..e9f3bf96d 100755 --- a/test/integration/test-bug-735967-lib32-to-i386-unavailable +++ b/test/integration/test-bug-735967-lib32-to-i386-unavailable @@ -12,6 +12,9 @@ insertpackage 'unstable' 'libnss-mdns' 'amd64,i386' '0.10-6' 'Multi-Arch: same Breaks: lib32nss-mdns (<< 0.10-6)' insertpackage 'unstable' 'libnss-mdns-i386' 'i386' '0.10-6' 'Multi-Arch: foreign Depends: libnss-mdns' +# introduce some dummies so that there are versions, but none works +insertpackage 'unstable' 'libnss-mdns-i386' 'amd64' '0.1-6' +insertpackage 'experimental' 'libnss-mdns-amd64' 'i386,amd64' '0.10-6' 'Provides: libnss-mdns-i386' insertpackage 'unstable' 'foo' 'amd64' '1' 'Depends: libfoo' insertpackage 'unstable' 'libfoo' 'amd64' '1' 'Depends: libfoo-bin' -- cgit v1.2.3-70-g09d2