From 08fa1cab614ec50d2b1de807439195c71d1530cf Mon Sep 17 00:00:00 2001 From: David Kalnischkies Date: Tue, 30 Nov 2010 18:54:27 +0100 Subject: apply a very simple speed-up in case we try to set the candidate version of a package to the version which is already the candidate (apt-get does that for all packages it installs for simplicity) --- apt-pkg/depcache.cc | 11 +++++++++-- 1 file changed, 9 insertions(+), 2 deletions(-) diff --git a/apt-pkg/depcache.cc b/apt-pkg/depcache.cc index 23abc76c1..58e7ebf07 100644 --- a/apt-pkg/depcache.cc +++ b/apt-pkg/depcache.cc @@ -1510,11 +1510,15 @@ void pkgDepCache::SetReInstall(PkgIterator const &Pkg,bool To) /* */ void pkgDepCache::SetCandidateVersion(VerIterator TargetVer, bool const &Pseudo) { - ActionGroup group(*this); pkgCache::PkgIterator Pkg = TargetVer.ParentPkg(); StateCache &P = PkgState[Pkg->ID]; + if (P.CandidateVer == TargetVer) + return; + + ActionGroup group(*this); + RemoveSizes(Pkg); RemoveStates(Pkg); @@ -1549,7 +1553,10 @@ void pkgDepCache::SetCandidateVersion(VerIterator TargetVer, bool const &Pseudo) } } } - + /*}}}*/ +// DepCache::MarkAuto - set the Auto flag for a package /*{{{*/ +// --------------------------------------------------------------------- +/* */ void pkgDepCache::MarkAuto(const PkgIterator &Pkg, bool Auto) { StateCache &state = PkgState[Pkg->ID]; -- cgit v1.2.3 From 9b78cda6873104b80ffdbc8b5d3965575ce0a31d Mon Sep 17 00:00:00 2001 From: David Kalnischkies Date: Tue, 30 Nov 2010 18:55:46 +0100 Subject: add a way to add packages to generate a dists style environment without actually building all these packages --- test/integration/framework | 70 ++++++++++++++++++++++++++++++++-------------- 1 file changed, 49 insertions(+), 21 deletions(-) diff --git a/test/integration/framework b/test/integration/framework index 2422f0886..5d849bda2 100644 --- a/test/integration/framework +++ b/test/integration/framework @@ -307,6 +307,37 @@ buildaptftparchivedirectorystructure() { done } +insertpackage() { + local RELEASE="$1" + local NAME="$2" + local ARCH="$3" + local VERSION="$4" + local DEPENDENCIES="$5" + local ARCHS="$ARCH" + if [ "$ARCHS" = "all" ]; then + ARCHS="$(aptconfig dump | grep APT::Architecture | cut -d'"' -f 2 | sed '/^$/ d' | sort | uniq | tr '\n' ' ')" + fi + for BUILDARCH in $ARCHS; do + local PPATH="aptarchive/dists/${RELEASE}/main/binary-${BUILDARCH}" + mkdir -p $PPATH aptarchive/dists/${RELEASE}/main/source + touch aptarchive/dists/${RELEASE}/main/source/Sources + local FILE="${PPATH}/Packages" + echo "Package: $NAME +Priority: optional +Section: other +Installed-Size: 23356 +Maintainer: Joe Sixpack +Architecture: $ARCH +Version: $VERSION" >> $FILE + test -z "$DEPENDENCIES" || echo "$DEPENDENCIES" >> $FILE + echo "Description: an autogenerated dummy ${NAME}=${VERSION}/${RELEASE} + If you find such a package installed on your system, + YOU did something horribly wrong! They are autogenerated + und used only by testcases for APT and surf no other propose… +" >> $FILE + done +} + buildaptarchivefromincoming() { msginfo "Build APT archive for ${CCMD}$(basename $0)${CINFO} based on incoming packages…" cd aptarchive @@ -315,36 +346,33 @@ buildaptarchivefromincoming() { [ -e dists ] || buildaptftparchivedirectorystructure msgninfo "\tGenerate Packages, Sources and Contents files… " aptftparchive -qq generate ftparchive.conf - msgdone "info" - msgninfo "\tGenerate Release files… " - for dir in $(find ./dists -mindepth 1 -maxdepth 1 -type d); do - aptftparchive -qq release $dir -o APT::FTPArchive::Release::Codename="$(echo "$dir" | cut -d'/' -f 3)" | sed -e '/0 Release$/ d' > $dir/Release # remove the self reference - done cd - > /dev/null msgdone "info" + generatereleasefiles } buildaptarchivefromfiles() { msginfo "Build APT archive for ${CCMD}$(basename $0)${CINFO} based on prebuild files…" - cd aptarchive - if [ -f Packages ]; then - msgninfo "\tPackages file… " - cat Packages | gzip > Packages.gz - cat Packages | bzip2 > Packages.bz2 - cat Packages | lzma > Packages.lzma - msgdone "info" - fi - if [ -f Sources ]; then - msgninfo "\tSources file… " - cat Sources | gzip > Sources.gz - cat Sources | bzip2 > Sources.bz2 - cat Sources | lzma > Sources.lzma + find aptarchive -name 'Packages' -o -name 'Sources' | while read line; do + msgninfo "\t${line} file… " + cat ${line} | gzip > ${line}.gz + cat ${line} | bzip2 > ${line}.bz2 + cat ${line} | lzma > ${line}.lzma msgdone "info" + done + generatereleasefiles +} + +generatereleasefiles() { + msgninfo "\tGenerate Release files… " + if [ -e aptarchive/dists ]; then + for dir in $(find ./aptarchive/dists -mindepth 1 -maxdepth 1 -type d); do + aptftparchive -qq release $dir -o APT::FTPArchive::Release::Codename="$(echo "$dir" | cut -d'/' -f 4)" | sed -e '/0 Release$/ d' > $dir/Release # remove the self reference + done + else + aptftparchive -qq release ./aptarchive | sed -e '/0 Release$/ d' > aptarchive/Release # remove the self reference fi - msgninfo "\tRelease file… " - aptftparchive -qq release . | sed -e '/0 Release$/ d' > Release # remove the self reference msgdone "info" - cd .. } setupdistsaptarchive() { -- cgit v1.2.3 From 35faae110d5b0265fa2f8ea7f4e092b736161397 Mon Sep 17 00:00:00 2001 From: David Kalnischkies Date: Tue, 30 Nov 2010 18:56:36 +0100 Subject: if the codename is "experimental" add NotAutomatic:yes by default --- test/integration/framework | 7 ++++++- 1 file changed, 6 insertions(+), 1 deletion(-) diff --git a/test/integration/framework b/test/integration/framework index 5d849bda2..63962858a 100644 --- a/test/integration/framework +++ b/test/integration/framework @@ -367,7 +367,12 @@ generatereleasefiles() { msgninfo "\tGenerate Release files… " if [ -e aptarchive/dists ]; then for dir in $(find ./aptarchive/dists -mindepth 1 -maxdepth 1 -type d); do - aptftparchive -qq release $dir -o APT::FTPArchive::Release::Codename="$(echo "$dir" | cut -d'/' -f 4)" | sed -e '/0 Release$/ d' > $dir/Release # remove the self reference + local CODENAME="$(echo "$dir" | cut -d'/' -f 4)" + aptftparchive -qq release $dir -o APT::FTPArchive::Release::Codename="${CODENAME}" | sed -e '/0 Release$/ d' > $dir/Release # remove the self reference + if [ "$CODENAME" = "experimental" ]; then + sed -i '/^Date: / a\ +NotAutomatic: yes' $dir/Release + fi done else aptftparchive -qq release ./aptarchive | sed -e '/0 Release$/ d' > aptarchive/Release # remove the self reference -- cgit v1.2.3 From 2f6557b96c08c1adebf3b1e292ae636a27f624d0 Mon Sep 17 00:00:00 2001 From: David Kalnischkies Date: Tue, 30 Nov 2010 18:57:42 +0100 Subject: add the possibility to disable only the progress reporting stuff as the quiet level 1 does this, but also disables other stuff we might want to test against in a testcase --- apt-pkg/contrib/progress.cc | 2 +- doc/examples/configure-index | 1 + 2 files changed, 2 insertions(+), 1 deletion(-) diff --git a/apt-pkg/contrib/progress.cc b/apt-pkg/contrib/progress.cc index cffdddc4f..45e81edcb 100644 --- a/apt-pkg/contrib/progress.cc +++ b/apt-pkg/contrib/progress.cc @@ -135,7 +135,7 @@ bool OpProgress::CheckChange(float Interval) OpTextProgress::OpTextProgress(Configuration &Config) : NoUpdate(false), NoDisplay(false), LastLen(0) { - if (Config.FindI("quiet",0) >= 1) + if (Config.FindI("quiet",0) >= 1 || Config.FindB("quiet::NoUpdate", false) == true) NoUpdate = true; if (Config.FindI("quiet",0) >= 2) NoDisplay = true; diff --git a/doc/examples/configure-index b/doc/examples/configure-index index c4c2acb64..6c078d75f 100644 --- a/doc/examples/configure-index +++ b/doc/examples/configure-index @@ -17,6 +17,7 @@ */ quiet "0"; +quiet::NoUpdate "true"; // never update progress information - included in -q=1 // Options for APT in general APT -- cgit v1.2.3 From 16b9e1e3b03ea352a4d9eb5b13db4724fcedbbe7 Mon Sep 17 00:00:00 2001 From: David Kalnischkies Date: Tue, 30 Nov 2010 19:08:19 +0100 Subject: * cmdline/apt-get.cc: - if --print-uris is used don't setup downloader as we don't need progress, lock nor the directories it would create otherwise --- cmdline/apt-get.cc | 2 -- debian/changelog | 8 ++++++++ 2 files changed, 8 insertions(+), 2 deletions(-) diff --git a/cmdline/apt-get.cc b/cmdline/apt-get.cc index 8efcd0e2e..ca037c5c7 100644 --- a/cmdline/apt-get.cc +++ b/cmdline/apt-get.cc @@ -1077,8 +1077,6 @@ bool InstallPackages(CacheFile &Cache,bool ShwKept,bool Ask = true, { // force a hashsum for compatibility reasons _config->CndSet("Acquire::ForceHash", "md5sum"); - if (Fetcher.Setup(&Stat, "") == false) - return false; } else if (Fetcher.Setup(&Stat, _config->FindDir("Dir::Cache::Archives")) == false) return false; diff --git a/debian/changelog b/debian/changelog index 96a2bd15b..b4a7c0177 100644 --- a/debian/changelog +++ b/debian/changelog @@ -1,3 +1,11 @@ +apt (0.8.11+wheezy) unstable; urgency=low + + * cmdline/apt-get.cc: + - if --print-uris is used don't setup downloader as we don't need + progress, lock nor the directories it would create otherwise + + -- David Kalnischkies Tue, 30 Nov 2010 19:07:07 +0100 + apt (0.8.10) unstable; urgency=low [ Programs translations ] -- cgit v1.2.3 From f6cc9c19a1fd47bc27b4c4a82044138c491166bb Mon Sep 17 00:00:00 2001 From: David Kalnischkies Date: Tue, 30 Nov 2010 19:08:44 +0100 Subject: * debian/control: - add Vcs-Browser now that loggerhead works again (Closes: #511168) --- debian/changelog | 2 ++ debian/control | 1 + 2 files changed, 3 insertions(+) diff --git a/debian/changelog b/debian/changelog index b4a7c0177..a19df76cf 100644 --- a/debian/changelog +++ b/debian/changelog @@ -3,6 +3,8 @@ apt (0.8.11+wheezy) unstable; urgency=low * cmdline/apt-get.cc: - if --print-uris is used don't setup downloader as we don't need progress, lock nor the directories it would create otherwise + * debian/control: + - add Vcs-Browser now that loggerhead works again (Closes: #511168) -- David Kalnischkies Tue, 30 Nov 2010 19:07:07 +0100 diff --git a/debian/control b/debian/control index 87e885f6a..c4dedd496 100644 --- a/debian/control +++ b/debian/control @@ -9,6 +9,7 @@ Standards-Version: 3.9.0 Build-Depends: debhelper (>= 5.0), libdb-dev, gettext (>= 0.12), libcurl4-gnutls-dev (>= 7.19.0), zlib1g-dev | libz-dev, debiandoc-sgml, xsltproc, docbook-xsl, docbook-xml, po4a (>= 0.34-2), autotools-dev, autoconf, automake, doxygen Build-Conflicts: autoconf2.13, automake1.4 Vcs-Bzr: http://bzr.debian.org/apt/debian-sid/ +Vcs-Browser: http://bzr.debian.org/loggerhead/apt/debian-sid/ Package: apt Architecture: any -- cgit v1.2.3 From 898d27df204e3aadaba9692bcdcfbc50599801f9 Mon Sep 17 00:00:00 2001 From: David Kalnischkies Date: Tue, 30 Nov 2010 19:12:12 +0100 Subject: add a very simple testcase to ensure that the action modifiers are only interpreted if a package with this name doesn't exist: e.g. g++ --- .../Packages-bug-593360-modifiers-in-names | 42 ++++++++++++++ .../integration/test-bug-593360-modifiers-in-names | 64 ++++++++++++++++++++++ 2 files changed, 106 insertions(+) create mode 100644 test/integration/Packages-bug-593360-modifiers-in-names create mode 100755 test/integration/test-bug-593360-modifiers-in-names diff --git a/test/integration/Packages-bug-593360-modifiers-in-names b/test/integration/Packages-bug-593360-modifiers-in-names new file mode 100644 index 000000000..d2ac8d4e1 --- /dev/null +++ b/test/integration/Packages-bug-593360-modifiers-in-names @@ -0,0 +1,42 @@ +Package: g++ +Priority: optional +Section: devel +Installed-Size: 40 +Maintainer: Debian GCC Maintainers +Architecture: i386 +Source: gcc-defaults (1.96) +Version: 4:4.4.5-1 +Filename: pool/main/g/gcc-defaults/g++_4.4.5-1_i386.deb +Size: 1372 +MD5sum: 37e129a4b130e8b96a9b9d5b26a3fffa +SHA1: d98768d1547389a563e60433268143f42578c3e6 +SHA256: 18d933972392d233127bdd766cfcaaaa2e35f57de47c7af678d599be9613d562 +Description: The GNU C++ compiler + +Package: apt +Priority: important +Section: admin +Installed-Size: 5984 +Maintainer: APT Development Team +Architecture: all +Version: 0.8.8 +Filename: pool/main/a/apt/apt_0.8.8_i386.deb +Size: 2140632 +MD5sum: 4283aa3bb751253faf1b2204e0229e4f +SHA1: 59d432f56901faa86e814a436b8da010ee1c7b8a +SHA256: 072dcf4359dce9698aeaa54366eb20513f860c2bb6d44a95973c0b2ad413bfab +Description: Advanced front-end for dpkg + +Package: apt+ +Priority: important +Section: admin +Installed-Size: 5984 +Maintainer: APT Development Team +Architecture: all +Version: 0.8.8 +Filename: pool/main/a/apt/apt_0.8.8_i386.deb +Size: 2140632 +MD5sum: 4283aa3bb751253faf1b2204e0229e4f +SHA1: 59d432f56901faa86e814a436b8da010ee1c7b8a +SHA256: 072dcf4359dce9698aeaa54366eb20513f860c2bb6d44a95973c0b2ad413bfab +Description: Advanced front-end for dpkg diff --git a/test/integration/test-bug-593360-modifiers-in-names b/test/integration/test-bug-593360-modifiers-in-names new file mode 100755 index 000000000..c12503b0d --- /dev/null +++ b/test/integration/test-bug-593360-modifiers-in-names @@ -0,0 +1,64 @@ +#!/bin/sh +set -e + +local TESTDIR=$(readlink -f $(dirname $0)) +. $TESTDIR/framework +setupenvironment +configarchitecture "i386" +setupaptarchive + +testequal 'Reading package lists... +Building dependency tree... +The following NEW packages will be installed: + g++ +0 upgraded, 1 newly installed, 0 to remove and 0 not upgraded. +Inst g++ (4:4.4.5-1 localhost [i386]) +Conf g++ (4:4.4.5-1 localhost [i386])' aptget install g++ -s + +testequal 'Reading package lists... +Building dependency tree... +The following NEW packages will be installed: + g++ +0 upgraded, 1 newly installed, 0 to remove and 0 not upgraded. +Inst g++ (4:4.4.5-1 localhost [i386]) +Conf g++ (4:4.4.5-1 localhost [i386])' aptget install g+++ -s + +testequal 'Reading package lists... +Building dependency tree... +The following NEW packages will be installed: + g++ +0 upgraded, 1 newly installed, 0 to remove and 0 not upgraded. +Inst g++ (4:4.4.5-1 localhost [i386]) +Conf g++ (4:4.4.5-1 localhost [i386])' aptget purge g+++ -s + +testequal 'Reading package lists... +Building dependency tree... +The following NEW packages will be installed: + apt +0 upgraded, 1 newly installed, 0 to remove and 0 not upgraded. +Inst apt (0.8.8 localhost [all]) +Conf apt (0.8.8 localhost [all])' aptget install apt -s + +testequal 'Reading package lists... +Building dependency tree... +The following NEW packages will be installed: + apt+ +0 upgraded, 1 newly installed, 0 to remove and 0 not upgraded. +Inst apt+ (0.8.8 localhost [all]) +Conf apt+ (0.8.8 localhost [all])' aptget install apt+ -s + +testequal 'Reading package lists... +Building dependency tree... +The following NEW packages will be installed: + apt+ +0 upgraded, 1 newly installed, 0 to remove and 0 not upgraded. +Inst apt+ (0.8.8 localhost [all]) +Conf apt+ (0.8.8 localhost [all])' aptget install apt++ -s + +testequal 'Reading package lists... +Building dependency tree... +The following NEW packages will be installed: + apt+ +0 upgraded, 1 newly installed, 0 to remove and 0 not upgraded. +Inst apt+ (0.8.8 localhost [all]) +Conf apt+ (0.8.8 localhost [all])' aptget purge apt++ -s -- cgit v1.2.3 From af7a92c35accda98b667ff41f62ea500fca95a7c Mon Sep 17 00:00:00 2001 From: David Kalnischkies Date: Tue, 30 Nov 2010 19:13:44 +0100 Subject: cleanup the debian/rules file a bit --- debian/rules | 23 ++++++----------------- 1 file changed, 6 insertions(+), 17 deletions(-) diff --git a/debian/rules b/debian/rules index 8bfcaf385..ea8f0daa0 100755 --- a/debian/rules +++ b/debian/rules @@ -2,17 +2,6 @@ # Made with the aid of dh_make, by Craig Small # Sample debian/rules that uses debhelper. GNU copyright 1997 by Joey Hess. # Some lines taken from debmake, by Christoph Lameter. -# $Id: rules,v 1.68 2004/05/30 18:21:43 mdz Exp $ - -# LD_LIBRARY_PATH=pwd/debian/apt/usr/lib dh_shlibdeps -papt -# dpkg: /home/jgg/work/apt2/debian/apt/usr/lib/libapt-pkg.so.2.9 not found. - -# For the deb builder, you can run 'debian/rules cvs-build', which does all -# steps nescessary to produce a proper source tarball with the CVS/ removed. -# It builds in debian/cvs-build/apt-/, and places files in -# debian/cvs-build/. Optionally, you can run 'debian/rules cvs-mkul' to -# create ../upload-, with all the files needed to be uploaded placed -# in it. export DEB_HOST_GNU_TYPE ?= $(shell dpkg-architecture -qDEB_HOST_GNU_TYPE) export DEB_BUILD_GNU_TYPE ?= $(shell dpkg-architecture -qDEB_BUILD_GNU_TYPE) @@ -139,7 +128,7 @@ binary-indep: apt-doc libapt-pkg-doc libapt-pkg-doc: build-doc debian/shlibs.local dh_testdir -p$@ dh_testroot -p$@ - dh_clean -p$@ -k + dh_prep -p$@ dh_installdirs -p$@ # # libapt-pkg-doc install @@ -165,7 +154,7 @@ libapt-pkg-doc: build-doc debian/shlibs.local apt-doc: build-doc dh_testdir -p$@ dh_testroot -p$@ - dh_clean -p$@ -k + dh_prep -p$@ # # apt-doc install # @@ -191,7 +180,7 @@ apt_MANPAGES = apt-cache apt-cdrom apt-config apt-get apt-key apt-mark apt-secur apt: build build-doc debian/shlibs.local dh_testdir -p$@ dh_testroot -p$@ - dh_clean -p$@ -k + dh_prep -p$@ dh_installdirs -p$@ # # apt install @@ -247,7 +236,7 @@ apt: build build-doc debian/shlibs.local libapt-pkg-dev: build debian/shlibs.local dh_testdir -p$@ dh_testroot -p$@ - dh_clean -p$@ -k + dh_prep -p$@ dh_installdirs -p$@ # # libapt-pkg-dev install @@ -272,7 +261,7 @@ apt-utils_MANPAGES = apt-sortpkgs apt-ftparchive apt-extracttemplates apt-utils: build debian/shlibs.local dh_testdir -p$@ dh_testroot -p$@ - dh_clean -p$@ -k + dh_prep -p$@ dh_installdirs -p$@ # install the shared libs @@ -300,7 +289,7 @@ apt-utils: build debian/shlibs.local apt-transport-https: build debian/shlibs.local libapt-pkg-dev dh_testdir -p$@ dh_testroot -p$@ - dh_clean -p$@ -k + dh_prep -p$@ dh_installdirs -p$@ # install the method -- cgit v1.2.3 From f425d4d5d65b317b84fd56ea40f469ca008b7773 Mon Sep 17 00:00:00 2001 From: David Kalnischkies Date: Tue, 30 Nov 2010 19:14:26 +0100 Subject: ensure that the build methods are used and not these on the system --- test/integration/framework | 1 + 1 file changed, 1 insertion(+) diff --git a/test/integration/framework b/test/integration/framework index 63962858a..bc427c544 100644 --- a/test/integration/framework +++ b/test/integration/framework @@ -116,6 +116,7 @@ setupenvironment() { echo "Dir::state::status \"${TMPWORKINGDIRECTORY}/rootdir/var/lib/dpkg/status\";" >> aptconfig.conf echo "Debug::NoLocking \"true\";" >> aptconfig.conf echo "APT::Get::Show-User-Simulation-Note \"false\";" >> aptconfig.conf + echo "Dir::Bin::Methods \"${BUILDDIRECTORY}/methods\";" >> aptconfig.conf echo "Dir::Bin::dpkg \"fakeroot\";" >> aptconfig.conf echo "DPKG::options:: \"dpkg\";" >> aptconfig.conf echo "DPKG::options:: \"--root=${TMPWORKINGDIRECTORY}/rootdir\";" >> aptconfig.conf -- cgit v1.2.3 From 0dc05bf095ebe2908f7d9096b3914b8c988c023e Mon Sep 17 00:00:00 2001 From: David Kalnischkies Date: Tue, 30 Nov 2010 19:15:19 +0100 Subject: =?UTF-8?q?$!=20doesn't=20worked=20on=20the=20first=20try=20someho?= =?UTF-8?q?w,=20now=20it=20does=20and=20its=20(a=20lot)=20cleaner=20than?= =?UTF-8?q?=20using=20this=20ps=20"magic"=20as=20this=20fails=20now=20and?= =?UTF-8?q?=20then=E2=80=A6?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- test/integration/framework | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/test/integration/framework b/test/integration/framework index bc427c544..a0bad4170 100644 --- a/test/integration/framework +++ b/test/integration/framework @@ -445,7 +445,7 @@ signreleasefiles() { changetowebserver() { if which weborf > /dev/null; then weborf -xb aptarchive/ 2>&1 > /dev/null & - CURRENTTRAP="kill $(ps | grep weborf | sed -e 's#^[ ]*##' | cut -d' ' -f 1); $CURRENTTRAP" + CURRENTTRAP="kill $!; $CURRENTTRAP" trap "$CURRENTTRAP" 0 HUP INT QUIT ILL ABRT FPE SEGV PIPE TERM local APTARCHIVE="file://$(readlink -f ./aptarchive)" for LIST in $(find rootdir/etc/apt/sources.list.d/ -name 'apt-test-*.list'); do -- cgit v1.2.3 From a02f24e046d58b723a9283211cb558605a024bdf Mon Sep 17 00:00:00 2001 From: David Kalnischkies Date: Tue, 30 Nov 2010 19:22:29 +0100 Subject: show dependencies of essential packages which are going to remove only if they cause the remove of this essential (Closes: #601961) --- cmdline/apt-get.cc | 4 ++- debian/changelog | 4 ++- test/integration/status-bug-601961-install-info | 42 +++++++++++++++++++++++++ test/integration/test-bug-601961-install-info | 38 ++++++++++++++++++++++ 4 files changed, 86 insertions(+), 2 deletions(-) create mode 100644 test/integration/status-bug-601961-install-info create mode 100755 test/integration/test-bug-601961-install-info diff --git a/cmdline/apt-get.cc b/cmdline/apt-get.cc index ca037c5c7..ca510178a 100644 --- a/cmdline/apt-get.cc +++ b/cmdline/apt-get.cc @@ -538,7 +538,9 @@ bool ShowEssential(ostream &out,CacheFile &Cache) //VersionsList += string(Cache[I].CurVersion) + "\n"; ??? } } - + else + continue; + if (I->CurrentVer == 0) continue; diff --git a/debian/changelog b/debian/changelog index a19df76cf..56865f713 100644 --- a/debian/changelog +++ b/debian/changelog @@ -3,10 +3,12 @@ apt (0.8.11+wheezy) unstable; urgency=low * cmdline/apt-get.cc: - if --print-uris is used don't setup downloader as we don't need progress, lock nor the directories it would create otherwise + - show dependencies of essential packages which are going to remove + only if they cause the remove of this essential (Closes: #601961) * debian/control: - add Vcs-Browser now that loggerhead works again (Closes: #511168) - -- David Kalnischkies Tue, 30 Nov 2010 19:07:07 +0100 + -- David Kalnischkies Tue, 30 Nov 2010 19:16:31 +0100 apt (0.8.10) unstable; urgency=low diff --git a/test/integration/status-bug-601961-install-info b/test/integration/status-bug-601961-install-info new file mode 100644 index 000000000..c43cffab7 --- /dev/null +++ b/test/integration/status-bug-601961-install-info @@ -0,0 +1,42 @@ +Package: dpkg +Status: install ok installed +Essential: yes +Priority: required +Section: admin +Installed-Size: 6432 +Maintainer: Dpkg Developers +Architecture: i386 +Version: 1.15.8.5 +Description: Debian package management system + +Package: findutils +Status: install ok installed +Essential: yes +Priority: required +Section: utils +Installed-Size: 1704 +Maintainer: Andreas Metzler +Architecture: i386 +Version: 4.4.2-1+b1 +Depends: dpkg (>= 1.15.4) | install-info, essentialpkg +Description: utilities for finding files--find, xargs + +Package: install-info +Status: install ok installed +Priority: important +Section: doc +Installed-Size: 256 +Maintainer: Debian TeX maintainers +Architecture: i386 +Version: 4.13a.dfsg.1-6 +Description: Manage installed documentation in info format + +Package: essentialpkg +Status: install ok installed +Priority: important +Section: other +Installed-Size: 256 +Maintainer: Joe Sixpack +Architecture: i386 +Version: 4.13a.dfsg.1-6 +Description: ultra hypercool important package diff --git a/test/integration/test-bug-601961-install-info b/test/integration/test-bug-601961-install-info new file mode 100755 index 000000000..b91bf3615 --- /dev/null +++ b/test/integration/test-bug-601961-install-info @@ -0,0 +1,38 @@ +#!/bin/sh +set -e + +local TESTDIR=$(readlink -f $(dirname $0)) +. $TESTDIR/framework +setupenvironment +configarchitecture "i386" +setupaptarchive + +testequal 'Reading package lists... +Building dependency tree... +The following packages will be REMOVED: + findutils +WARNING: The following essential packages will be removed. +This should NOT be done unless you know exactly what you are doing! + findutils +0 upgraded, 0 newly installed, 1 to remove and 0 not upgraded. +After this operation, 1745 kB disk space will be freed. +E: Trivial Only specified but this is not a trivial operation.' aptget remove findutils --trivial-only + +testequal 'Reading package lists... +Building dependency tree... +The following packages will be REMOVED: + install-info +0 upgraded, 0 newly installed, 1 to remove and 0 not upgraded. +After this operation, 262 kB disk space will be freed. +E: Trivial Only specified but this is not a trivial operation.' aptget remove install-info --trivial-only + +testequal 'Reading package lists... +Building dependency tree... +The following packages will be REMOVED: + essentialpkg findutils +WARNING: The following essential packages will be removed. +This should NOT be done unless you know exactly what you are doing! + findutils essentialpkg (due to findutils) +0 upgraded, 0 newly installed, 2 to remove and 0 not upgraded. +After this operation, 2007 kB disk space will be freed. +E: Trivial Only specified but this is not a trivial operation.' aptget remove essentialpkg --trivial-only -- cgit v1.2.3 From ceabaaa1f96eeb433a0530dc8f9d590bc57aa161 Mon Sep 17 00:00:00 2001 From: David Kalnischkies Date: Tue, 30 Nov 2010 19:22:54 +0100 Subject: add usage info for create-test-data script --- test/integration/create-test-data | 10 ++++++++++ 1 file changed, 10 insertions(+) diff --git a/test/integration/create-test-data b/test/integration/create-test-data index ff9405502..b93218b7c 100755 --- a/test/integration/create-test-data +++ b/test/integration/create-test-data @@ -1,6 +1,11 @@ #!/bin/sh set +e # its okay to fail in these script, most of the time the apt* stuff will generate errors +if [ -z "$1" -o -z "$2" ]; then + echo "Usage: $0 file codename pkg…" + exit 1 +fi + local TESTDIR=$(readlink -f $(dirname $0)) . $TESTDIR/framework BUILDDIRECTORY="${TESTDIR}/../../build/bin" @@ -16,6 +21,11 @@ TMPGEN=$WORKDIR/Packages export LANG=C LISTOFPKGS=$(aptget install $* -t $CODENAME -so Dir::state::status=$WORKDIR/status -o Dir::Cache::archives=$WORKDIR -o pkgCacheGen::Essential=none -o APT::Immediate-Configure=0 2> /dev/null | awk '/^Inst/ {print $2}' | sed -e "s#\$#/$CODENAME#") +if [ -z "$LISTOFPKGS" ]; then + echo "List of packages is empty: run apt-get install command again for you now" + aptget install $* -t $CODENAME -so Dir::state::status=$WORKDIR/status -o Dir::Cache::archives=$WORKDIR -o pkgCacheGen::Essential=none -o APT::Immediate-Configure=0 + exit 1 +fi aptcache show $LISTOFPKGS --no-all-versions 2> /dev/null > $TMPGEN sed -i $TMPGEN \ -e '/^ / d' \ -- cgit v1.2.3 From b6b5a542bd5a2580fff3d3ec2ce91a41e9622d6d Mon Sep 17 00:00:00 2001 From: David Kalnischkies Date: Tue, 30 Nov 2010 19:23:54 +0100 Subject: add framework code to run the installed aptitude with the current build library in the test environment --- test/integration/framework | 9 +++++++++ 1 file changed, 9 insertions(+) diff --git a/test/integration/framework b/test/integration/framework index a0bad4170..8abefc814 100644 --- a/test/integration/framework +++ b/test/integration/framework @@ -78,6 +78,15 @@ aptkey() { runapt apt-key $*; } dpkg() { $(which 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) $* + elif [ -f ../aptconfig.conf ]; then + APT_CONFIG=../aptconfig.conf LD_LIBRARY_PATH=${BUILDDIRECTORY} $(which aptitude) $* + else + LD_LIBRARY_PATH=${BUILDDIRECTORY} $(which aptitude) $* + fi +} setupenvironment() { TMPWORKINGDIRECTORY=$(mktemp -d) -- cgit v1.2.3 From 4a4ea26c2d0f89c13e0ccf6fb2d96ad1caa6427d Mon Sep 17 00:00:00 2001 From: Andres Mejia Date: Tue, 30 Nov 2010 19:25:39 +0100 Subject: Add support for providing and autocopying Sources files along the way of status and Packages files with a testcase --- test/integration/framework | 6 ++++++ 1 file changed, 6 insertions(+) diff --git a/test/integration/framework b/test/integration/framework index 8abefc814..7af59deb0 100644 --- a/test/integration/framework +++ b/test/integration/framework @@ -119,6 +119,12 @@ setupenvironment() { else touch aptarchive/Packages fi + local SOURCESSFILE=$(echo "$(basename $0)" | sed -e 's/^test-/Sources-/' -e 's/^skip-/Sources-/') + if [ -f "${TESTDIR}/${SOURCESSFILE}" ]; then + cp "${TESTDIR}/${SOURCESSFILE}" aptarchive/Sources + else + touch aptarchive/Sources + fi cp $(find $TESTDIR -name '*.pub' -o -name '*.sec') keys/ ln -s ${TMPWORKINGDIRECTORY}/keys/joesixpack.pub rootdir/etc/apt/trusted.gpg.d/joesixpack.gpg echo "Dir \"${TMPWORKINGDIRECTORY}/rootdir\";" > aptconfig.conf -- cgit v1.2.3 From db4b5f77e1f9f64a54baeff74c0400f0134c1d0d Mon Sep 17 00:00:00 2001 From: David Kalnischkies Date: Tue, 30 Nov 2010 19:29:22 +0100 Subject: do not touch Packages and Sources in the framework if the files do not exist to not generate sources.list entries later for them --- test/integration/framework | 4 ---- test/integration/test-bug-595691-empty-and-broken-archive-files | 1 + 2 files changed, 1 insertion(+), 4 deletions(-) diff --git a/test/integration/framework b/test/integration/framework index 7af59deb0..aa8cdacc6 100644 --- a/test/integration/framework +++ b/test/integration/framework @@ -116,14 +116,10 @@ setupenvironment() { local PACKAGESFILE=$(echo "$(basename $0)" | sed -e 's/^test-/Packages-/' -e 's/^skip-/Packages-/') if [ -f "${TESTDIR}/${PACKAGESFILE}" ]; then cp "${TESTDIR}/${PACKAGESFILE}" aptarchive/Packages - else - touch aptarchive/Packages fi local SOURCESSFILE=$(echo "$(basename $0)" | sed -e 's/^test-/Sources-/' -e 's/^skip-/Sources-/') if [ -f "${TESTDIR}/${SOURCESSFILE}" ]; then cp "${TESTDIR}/${SOURCESSFILE}" aptarchive/Sources - else - touch aptarchive/Sources fi cp $(find $TESTDIR -name '*.pub' -o -name '*.sec') keys/ ln -s ${TMPWORKINGDIRECTORY}/keys/joesixpack.pub rootdir/etc/apt/trusted.gpg.d/joesixpack.gpg diff --git a/test/integration/test-bug-595691-empty-and-broken-archive-files b/test/integration/test-bug-595691-empty-and-broken-archive-files index 11a5025d2..66792899a 100755 --- a/test/integration/test-bug-595691-empty-and-broken-archive-files +++ b/test/integration/test-bug-595691-empty-and-broken-archive-files @@ -7,6 +7,7 @@ setupenvironment configarchitecture "i386" buildaptarchive +touch aptarchive/Packages setupflataptarchive testaptgetupdate() { -- cgit v1.2.3 From 54f2f0a3e46e4369285be8c25912fd45413114c0 Mon Sep 17 00:00:00 2001 From: Nobuhiro Hayashi Date: Fri, 3 Dec 2010 12:09:09 +0900 Subject: Permit base256 encoded value in the numeric field of tar header. --- apt-inst/contrib/extracttar.cc | 12 ++++++++---- apt-pkg/contrib/strutl.cc | 18 ++++++++++++++++++ apt-pkg/contrib/strutl.h | 1 + 3 files changed, 27 insertions(+), 4 deletions(-) diff --git a/apt-inst/contrib/extracttar.cc b/apt-inst/contrib/extracttar.cc index 3d2788aaf..1a358d57e 100644 --- a/apt-inst/contrib/extracttar.cc +++ b/apt-inst/contrib/extracttar.cc @@ -195,10 +195,14 @@ bool ExtractTar::Go(pkgDirStream &Stream) // Decode all of the fields pkgDirStream::Item Itm; if (StrToNum(Tar->Mode,Itm.Mode,sizeof(Tar->Mode),8) == false || - StrToNum(Tar->UserID,Itm.UID,sizeof(Tar->UserID),8) == false || - StrToNum(Tar->GroupID,Itm.GID,sizeof(Tar->GroupID),8) == false || - StrToNum(Tar->Size,Itm.Size,sizeof(Tar->Size),8) == false || - StrToNum(Tar->MTime,Itm.MTime,sizeof(Tar->MTime),8) == false || + (Base256ToNum(Tar->UserID,Itm.UID,8) == false && + StrToNum(Tar->UserID,Itm.UID,sizeof(Tar->UserID),8) == false) || + (Base256ToNum(Tar->GroupID,Itm.GID,8) == false && + StrToNum(Tar->GroupID,Itm.GID,sizeof(Tar->GroupID),8) == false) || + (Base256ToNum(Tar->Size,Itm.Size,12) == false && + StrToNum(Tar->Size,Itm.Size,sizeof(Tar->Size),8) == false) || + (Base256ToNum(Tar->MTime,Itm.MTime,12) == false && + StrToNum(Tar->MTime,Itm.MTime,sizeof(Tar->MTime),8) == false) || StrToNum(Tar->Major,Itm.Major,sizeof(Tar->Major),8) == false || StrToNum(Tar->Minor,Itm.Minor,sizeof(Tar->Minor),8) == false) return _error->Error(_("Corrupted archive")); diff --git a/apt-pkg/contrib/strutl.cc b/apt-pkg/contrib/strutl.cc index 987f4c3a4..daf87c87f 100644 --- a/apt-pkg/contrib/strutl.cc +++ b/apt-pkg/contrib/strutl.cc @@ -968,6 +968,24 @@ bool StrToNum(const char *Str,unsigned long &Res,unsigned Len,unsigned Base) return true; } /*}}}*/ +// Base256ToNum - Convert a fixed length binary to a number /*{{{*/ +// --------------------------------------------------------------------- +/* This is used in decoding the 256bit encoded fixed length fields in + tar files */ +bool Base256ToNum(const char *Str,unsigned long &Res,unsigned Len) +{ + int i; + if ((Str[0] & 0x80) == 0) + return false; + else + { + Res = Str[0] & 0x7F; + for(i=1; i &List); bool StrToNum(const char *Str,unsigned long &Res,unsigned Len,unsigned Base = 0); +bool Base256ToNum(const char *Str,unsigned long &Res,unsigned Len); bool Hex2Num(const string &Str,unsigned char *Num,unsigned int Length); bool TokSplitString(char Tok,char *Input,char **List, unsigned long ListMax); -- cgit v1.2.3 From a8dfff90aa740889eb99d00fde5d70908d9fd88a Mon Sep 17 00:00:00 2001 From: David Kalnischkies Date: Fri, 3 Dec 2010 14:02:29 +0100 Subject: keep not installed garbage packages uninstalled instead of showing in the autoremove section and installing those (Closes: #604222) --- cmdline/apt-get.cc | 40 +++++++------ debian/changelog | 4 +- .../Packages-bug-604222-new-and-autoremove | 68 ++++++++++++++++++++++ .../status-bug-604222-new-and-autoremove | 10 ++++ .../integration/test-bug-604222-new-and-autoremove | 66 +++++++++++++++++++++ 5 files changed, 169 insertions(+), 19 deletions(-) create mode 100644 test/integration/Packages-bug-604222-new-and-autoremove create mode 100644 test/integration/status-bug-604222-new-and-autoremove create mode 100755 test/integration/test-bug-604222-new-and-autoremove diff --git a/cmdline/apt-get.cc b/cmdline/apt-get.cc index ca510178a..57065c528 100644 --- a/cmdline/apt-get.cc +++ b/cmdline/apt-get.cc @@ -1608,10 +1608,6 @@ bool DoAutomaticRemove(CacheFile &Cache) if(Debug) std::cout << "DoAutomaticRemove()" << std::endl; - // we don't want to autoremove and we don't want to see it, so why calculating? - if (doAutoRemove == false && hideAutoRemove == true) - return true; - if (doAutoRemove == true && _config->FindB("APT::Get::Remove",true) == false) { @@ -1622,7 +1618,9 @@ bool DoAutomaticRemove(CacheFile &Cache) bool purgePkgs = _config->FindB("APT::Get::Purge", false); bool smallList = (hideAutoRemove == false && - strcasecmp(_config->Find("APT::Get::HideAutoRemove","").c_str(),"small") == 0); + strcasecmp(_config->Find("APT::Get::HideAutoRemove","").c_str(),"small") == 0) || + // we don't want to autoremove and we don't want to see it, so don't generate lists + (doAutoRemove == false && hideAutoRemove == true); string autoremovelist, autoremoveversions; unsigned long autoRemoveCount = 0; @@ -1645,8 +1643,12 @@ bool DoAutomaticRemove(CacheFile &Cache) } else { + // if the package is a new install and already garbage we don't need to + // install it in the first place, so nuke it instead of show it + if (Cache[Pkg].Install() == true && Pkg.CurrentVer() == 0) + Cache->MarkDelete(Pkg, false); // only show stuff in the list that is not yet marked for removal - if(Cache[Pkg].Delete() == false) + else if(Cache[Pkg].Delete() == false) { ++autoRemoveCount; // we don't need to fill the strings if we don't need them @@ -1659,6 +1661,20 @@ bool DoAutomaticRemove(CacheFile &Cache) } } } + + // Now see if we had destroyed anything (if we had done anything) + if (Cache->BrokenCount() != 0) + { + c1out << _("Hmm, seems like the AutoRemover destroyed something which really\n" + "shouldn't happen. Please file a bug report against apt.") << endl; + c1out << endl; + c1out << _("The following information may help to resolve the situation:") << endl; + c1out << endl; + ShowBroken(c1out,Cache,false); + + return _error->Error(_("Internal Error, AutoRemover broke stuff")); + } + // if we don't remove them, we should show them! if (doAutoRemove == false && (autoremovelist.empty() == false || autoRemoveCount != 0)) { @@ -1671,18 +1687,6 @@ bool DoAutomaticRemove(CacheFile &Cache) "%lu packages were automatically installed and are no longer required.\n", autoRemoveCount), autoRemoveCount); c1out << _("Use 'apt-get autoremove' to remove them.") << std::endl; } - // Now see if we had destroyed anything (if we had done anything) - else if (Cache->BrokenCount() != 0) - { - c1out << _("Hmm, seems like the AutoRemover destroyed something which really\n" - "shouldn't happen. Please file a bug report against apt.") << endl; - c1out << endl; - c1out << _("The following information may help to resolve the situation:") << endl; - c1out << endl; - ShowBroken(c1out,Cache,false); - - return _error->Error(_("Internal Error, AutoRemover broke stuff")); - } return true; } /*}}}*/ diff --git a/debian/changelog b/debian/changelog index 56865f713..65603587d 100644 --- a/debian/changelog +++ b/debian/changelog @@ -5,10 +5,12 @@ apt (0.8.11+wheezy) unstable; urgency=low progress, lock nor the directories it would create otherwise - show dependencies of essential packages which are going to remove only if they cause the remove of this essential (Closes: #601961) + - keep not installed garbage packages uninstalled instead of showing + in the autoremove section and installing those (Closes: #604222) * debian/control: - add Vcs-Browser now that loggerhead works again (Closes: #511168) - -- David Kalnischkies Tue, 30 Nov 2010 19:16:31 +0100 + -- David Kalnischkies Fri, 03 Dec 2010 14:00:18 +0100 apt (0.8.10) unstable; urgency=low diff --git a/test/integration/Packages-bug-604222-new-and-autoremove b/test/integration/Packages-bug-604222-new-and-autoremove new file mode 100644 index 000000000..fdff9d702 --- /dev/null +++ b/test/integration/Packages-bug-604222-new-and-autoremove @@ -0,0 +1,68 @@ +Package: dummy-archive +Priority: extra +Section: admin +Installed-Size: 5984 +Maintainer: APT Development Team +Architecture: i386 +Version: 0.invalid.0 +Source: dummy-archive +Depends: libavcodec52, libvtk5-dev | libopenal-dev +Filename: pool/main/d/dummy/dummy_5.4.2-8_i386.deb +Size: 2280898 +MD5sum: 569719746f7ec4b96209a6152af20c00 +Description: some dummy package + +Package: libvtk5-dev +Priority: optional +Section: libdevel +Installed-Size: 13812 +Maintainer: A. Maitland Bottoms +Architecture: i386 +Source: vtk +Version: 5.4.2-8 +Depends: libvtk5.4 (= 5.4.2-8) +Filename: pool/main/v/vtk/libvtk5-dev_5.4.2-8_i386.deb +Size: 2280898 +MD5sum: 569719746f7ec4b96209a6152af20c00 +Description: VTK header files for building C++ code + +Package: libvtk5.4 +Priority: optional +Section: libs +Installed-Size: 39372 +Maintainer: A. Maitland Bottoms +Architecture: i386 +Source: vtk +Version: 5.4.2-8 +Depends: libavcodec52 (>= 4:0.5.1-1) +Filename: pool/main/v/vtk/libvtk5.4_5.4.2-8_i386.deb +Size: 13070848 +MD5sum: 3ba7abc3d58ec44e35ae71879406563d +Description: Visualization Toolkit - A high level 3D visualization library + +Package: libopenal-dev +Priority: optional +Section: libdevel +Installed-Size: 140 +Maintainer: Debian Games Team +Architecture: i386 +Source: openal-soft +Version: 1:1.12.854-2 +Filename: pool/main/o/openal-soft/libopenal-dev_1.12.854-2_i386.deb +Size: 21014 +MD5sum: e0bda4fbf5a3d38ef510a23a1642587f +Description-de: Software-Implementierung der OpenAL-API (Entwicklungsdateien) + +Package: libavcodec52 +Priority: optional +Section: libs +Installed-Size: 10772 +Maintainer: Debian multimedia packages maintainers +Architecture: i386 +Source: ffmpeg +Version: 4:0.5.2-6 +Conflicts: libvtk5-dev +Filename: pool/main/f/ffmpeg/libavcodec52_0.5.2-6_i386.deb +Size: 4001600 +MD5sum: a50aae4c8e8b9dd29612407e61bedc22 +Description-de: Ffmpeg-Codec-Bibliothek diff --git a/test/integration/status-bug-604222-new-and-autoremove b/test/integration/status-bug-604222-new-and-autoremove new file mode 100644 index 000000000..03cf4d307 --- /dev/null +++ b/test/integration/status-bug-604222-new-and-autoremove @@ -0,0 +1,10 @@ +Package: libvtk5.4 +Status: install ok installed +Priority: optional +Section: libs +Installed-Size: 39372 +Maintainer: A. Maitland Bottoms +Architecture: i386 +Source: vtk +Version: 5.4.2-7 +Description: Visualization Toolkit - A high level 3D visualization library diff --git a/test/integration/test-bug-604222-new-and-autoremove b/test/integration/test-bug-604222-new-and-autoremove new file mode 100755 index 000000000..fa6dcdc70 --- /dev/null +++ b/test/integration/test-bug-604222-new-and-autoremove @@ -0,0 +1,66 @@ +#!/bin/sh +set -e + +local TESTDIR=$(readlink -f $(dirname $0)) +. $TESTDIR/framework +setupenvironment +configarchitecture "i386" +setupaptarchive + +echo 'Package: libvtk5.4 +Auto-Installed: 1 +Architecture: i386' > rootdir/var/lib/apt/extended_states + +testequal "Reading package lists... +Building dependency tree... +Reading state information... +The following package was automatically installed and is no longer required: + libvtk5.4 +Use 'apt-get autoremove' to remove them. +The following NEW packages will be installed: + libavcodec52 +0 upgraded, 1 newly installed, 0 to remove and 1 not upgraded. +Inst libavcodec52 (4:0.5.2-6 localhost [i386]) +Conf libavcodec52 (4:0.5.2-6 localhost [i386])" aptget install libavcodec52 -s + +testequal "Reading package lists... +Building dependency tree... +Reading state information... +The following package was automatically installed and is no longer required: + libvtk5.4 +Use 'apt-get autoremove' to remove them. +The following extra packages will be installed: + libavcodec52 libopenal-dev libvtk5.4 +The following NEW packages will be installed: + dummy-archive libavcodec52 libopenal-dev +The following packages will be upgraded: + libvtk5.4 +1 upgraded, 3 newly installed, 0 to remove and 0 not upgraded. +Need to get 0 B/19.4 MB of archives. +After this operation, 17.3 MB of additional disk space will be used. +E: Trivial Only specified but this is not a trivial operation." aptget install dummy-archive --trivial-only + +echo -n > rootdir/var/lib/dpkg/status +rm rootdir/var/lib/apt/extended_states + +CONFLICTING='Reading package lists... +Building dependency tree... + MarkInstall dummy-archive [ i386 ] < none -> 0.invalid.0 > ( admin ) FU=1 + MarkInstall libavcodec52 [ i386 ] < none -> 4:0.5.2-6 > ( libs ) FU=0 + MarkInstall libvtk5-dev [ i386 ] < none -> 5.4.2-8 > ( libdevel ) FU=0 + MarkInstall libvtk5.4 [ i386 ] < none -> 5.4.2-8 > ( libs ) FU=0 + MarkKeep libvtk5-dev [ i386 ] < none -> 5.4.2-8 > ( libdevel ) FU=0 + MarkKeep libvtk5-dev [ i386 ] < none -> 5.4.2-8 > ( libdevel ) FU=0 + MarkDelete libvtk5.4 [ i386 ] < none -> 5.4.2-8 > ( libs ) FU=1 +The following extra packages will be installed: + libavcodec52 libopenal-dev +The following NEW packages will be installed: + dummy-archive libavcodec52 libopenal-dev +0 upgraded, 3 newly installed, 0 to remove and 0 not upgraded. +Need to get 0 B/6304 kB of archives. +After this operation, 17.3 MB of additional disk space will be used. +E: Trivial Only specified but this is not a trivial operation.' + +testequal "$CONFLICTING" aptget install dummy-archive --trivial-only -o Debug::pkgDepCache::Marker=1 -o APT::Get::HideAutoRemove=0 +testequal "$CONFLICTING" aptget install dummy-archive --trivial-only -o Debug::pkgDepCache::Marker=1 -o APT::Get::HideAutoRemove=1 +testequal "$CONFLICTING" aptget install dummy-archive --trivial-only -o Debug::pkgDepCache::Marker=1 -o APT::Get::HideAutoRemove=small -- cgit v1.2.3 From 2c085486d34c45e123c24b0e36294245fd5bf734 Mon Sep 17 00:00:00 2001 From: David Kalnischkies Date: Fri, 3 Dec 2010 17:06:34 +0100 Subject: * apt-pkg/depcache.cc: - add SetCandidateRelease() to set a candidate version and the candidates of dependencies if needed to a specified release (Closes: #572709) - change pkg/release behavior to use the new SetCandidateRelease so installing packages from experimental or backports is easier --- apt-pkg/depcache.cc | 161 ++++++++ apt-pkg/depcache.h | 19 + cmdline/apt-get.cc | 36 +- debian/NEWS | 9 + debian/changelog | 8 +- test/integration/framework | 10 +- test/integration/test-release-candidate-switching | 435 ++++++++++++++++++++++ 7 files changed, 670 insertions(+), 8 deletions(-) create mode 100755 test/integration/test-release-candidate-switching diff --git a/apt-pkg/depcache.cc b/apt-pkg/depcache.cc index 58e7ebf07..4a8e53eb3 100644 --- a/apt-pkg/depcache.cc +++ b/apt-pkg/depcache.cc @@ -10,6 +10,7 @@ // Include Files /*{{{*/ #include #include +#include #include #include #include @@ -1554,6 +1555,166 @@ void pkgDepCache::SetCandidateVersion(VerIterator TargetVer, bool const &Pseudo) } } /*}}}*/ +// DepCache::SetCandidateRelease - Change the candidate version /*{{{*/ +// --------------------------------------------------------------------- +/* changes the candidate of a package and walks over all its dependencies + to check if it needs to change the candidate of the dependency, too, + to reach a installable versionstate */ +bool pkgDepCache::SetCandidateRelease(pkgCache::VerIterator TargetVer, + std::string const &TargetRel) +{ + std::list > Changed; + return SetCandidateRelease(TargetVer, TargetRel, Changed); +} +bool pkgDepCache::SetCandidateRelease(pkgCache::VerIterator TargetVer, + std::string const &TargetRel, + std::list > &Changed) +{ + SetCandidateVersion(TargetVer); + + if (TargetRel == "installed" || TargetRel == "candidate") // both doesn't make sense in this context + return true; + + pkgVersionMatch Match(TargetRel, pkgVersionMatch::Release); + // save the position of the last element we will not undo - if we have to + std::list >::iterator newChanged = --(Changed.end()); + + for (pkgCache::DepIterator D = TargetVer.DependsList(); D.end() == false; ++D) + { + if (D->Type != pkgCache::Dep::PreDepends && D->Type != pkgCache::Dep::Depends && + ((D->Type != pkgCache::Dep::Recommends && D->Type != pkgCache::Dep::Suggests) || + IsImportantDep(D) == false)) + continue; + + // walk over an or-group and check if we need to do anything + // for simpilicity no or-group is handled as a or-group including one dependency + pkgCache::DepIterator Start = D; + bool itsFine = false; + for (bool stillOr = true; stillOr == true; ++Start) + { + stillOr = (Start->CompareOp & Dep::Or) == Dep::Or; + pkgCache::PkgIterator const P = Start.TargetPkg(); + // virtual packages can't be a solution + if (P.end() == true || (P->ProvidesList == 0 && P->VersionList == 0)) + continue; + pkgCache::VerIterator const Cand = PkgState[P->ID].CandidateVerIter(*this); + // no versioned dependency - but is it installable? + if (Start.TargetVer() == 0 || Start.TargetVer()[0] == '\0') + { + // Check if one of the providers is installable + if (P->ProvidesList != 0) + { + pkgCache::PrvIterator Prv = P.ProvidesList(); + for (; Prv.end() == false; ++Prv) + { + pkgCache::VerIterator const C = PkgState[Prv.OwnerPkg()->ID].CandidateVerIter(*this); + if (C.end() == true || C != Prv.OwnerVer() || + (VersionState(C.DependsList(), DepInstall, DepCandMin, DepCandPolicy) & DepCandMin) != DepCandMin) + continue; + break; + } + if (Prv.end() == true) + continue; + } + // no providers, so check if we have an installable candidate version + else if (Cand.end() == true || + (VersionState(Cand.DependsList(), DepInstall, DepCandMin, DepCandPolicy) & DepCandMin) != DepCandMin) + continue; + itsFine = true; + break; + } + if (Cand.end() == true) + continue; + // check if the current candidate is enough for the versioned dependency - and installable? + if (VS().CheckDep(P.CandVersion(), Start->CompareOp, Start.TargetVer()) == true && + (VersionState(Cand.DependsList(), DepInstall, DepCandMin, DepCandPolicy) & DepCandMin) == DepCandMin) + { + itsFine = true; + break; + } + } + + if (itsFine == true) { + // something in the or-group was fine, skip all other members + for (; (D->CompareOp & Dep::Or) == Dep::Or; ++D); + continue; + } + + // walk again over the or-group and check each if a candidate switch would help + itsFine = false; + for (bool stillOr = true; stillOr == true; ++D) + { + stillOr = (D->CompareOp & Dep::Or) == Dep::Or; + // changing candidate will not help if the dependency is not versioned + if (D.TargetVer() == 0 || D.TargetVer()[0] == '\0') + { + if (stillOr == true) + continue; + break; + } + + pkgCache::VerIterator V; + if (TargetRel == "newest") + V = D.TargetPkg().VersionList(); + else + V = Match.Find(D.TargetPkg()); + + // check if the version from this release could satisfy the dependency + if (V.end() == true || VS().CheckDep(V.VerStr(), D->CompareOp, D.TargetVer()) == false) + { + if (stillOr == true) + continue; + break; + } + + pkgCache::VerIterator oldCand = PkgState[D.TargetPkg()->ID].CandidateVerIter(*this); + if (V == oldCand) + { + // Do we already touched this Version? If so, their versioned dependencies are okay, no need to check again + for (std::list >::const_iterator c = Changed.begin(); + c != Changed.end(); ++c) + { + if (c->first->ParentPkg != V->ParentPkg) + continue; + itsFine = true; + break; + } + } + + if (itsFine == false) + { + // change the candidate + Changed.push_back(make_pair(oldCand, TargetVer)); + if (SetCandidateRelease(V, TargetRel, Changed) == false) + { + if (stillOr == false) + break; + // undo the candidate changing + SetCandidateVersion(oldCand); + Changed.pop_back(); + continue; + } + itsFine = true; + } + + // something in the or-group was fine, skip all other members + for (; (D->CompareOp & Dep::Or) == Dep::Or; ++D); + break; + } + + if (itsFine == false && (D->Type == pkgCache::Dep::PreDepends || D->Type == pkgCache::Dep::Depends)) + { + // undo all changes which aren't lead to a solution + for (std::list >::const_iterator c = ++newChanged; + c != Changed.end(); ++c) + SetCandidateVersion(c->first); + Changed.erase(newChanged, Changed.end()); + return false; + } + } + return true; +} + /*}}}*/ // DepCache::MarkAuto - set the Auto flag for a package /*{{{*/ // --------------------------------------------------------------------- /* */ diff --git a/apt-pkg/depcache.h b/apt-pkg/depcache.h index 2d3dbdf77..dba3e22dc 100644 --- a/apt-pkg/depcache.h +++ b/apt-pkg/depcache.h @@ -396,6 +396,25 @@ class pkgDepCache : protected pkgCache::Namespace void SetReInstall(PkgIterator const &Pkg,bool To); void SetCandidateVersion(VerIterator TargetVer, bool const &Pseudo = true); + bool SetCandidateRelease(pkgCache::VerIterator TargetVer, + std::string const &TargetRel); + /** Set the candidate version for dependencies too if needed. + * + * Sets not only the candidate version as SetCandidateVersion does, + * but walks also down the dependency tree and checks if it is required + * to set the candidate of the dependency to a version from the given + * release, too. + * + * \param TargetVer new candidate version of the package + * \param TargetRel try to switch to this release if needed + * \param[out] Changed a list of pairs consisting of the \b old + * version of the changed package and the version which + * required the switch of this dependency + * \return \b true if the switch was successful, \b false otherwise + */ + bool SetCandidateRelease(pkgCache::VerIterator TargetVer, + std::string const &TargetRel, + std::list > &Changed); /** Set the "is automatically installed" flag of Pkg. */ void MarkAuto(const PkgIterator &Pkg, bool Auto); diff --git a/cmdline/apt-get.cc b/cmdline/apt-get.cc index 57065c528..476896322 100644 --- a/cmdline/apt-get.cc +++ b/cmdline/apt-get.cc @@ -628,6 +628,8 @@ class CacheSetHelperAPTGet : public APT::CacheSetHelper { APT::PackageSet virtualPkgs; public: + std::list > selectedByRelease; + CacheSetHelperAPTGet(std::ostream &out) : APT::CacheSetHelper(true), out(out) { explicitlyNamed = true; } @@ -646,9 +648,9 @@ public: } virtual void showSelectedVersion(pkgCache::PkgIterator const &Pkg, pkgCache::VerIterator const Ver, string const &ver, bool const &verIsRel) { - if (ver != Ver.VerStr()) - ioprintf(out, _("Selected version '%s' (%s) for '%s'\n"), - Ver.VerStr(), Ver.RelStr().c_str(), Pkg.FullName(true).c_str()); + if (ver == Ver.VerStr()) + return; + selectedByRelease.push_back(make_pair(Ver, ver)); } bool showVirtualPackageErrors(pkgCacheFile &Cache) { @@ -829,6 +831,33 @@ struct TryToInstall { } } + bool propergateReleaseCandiateSwitching(std::list > start, std::ostream &out) + { + bool Success = true; + std::list > Changed; + for (std::list >::const_iterator s = start.begin(); + s != start.end(); ++s) + { + Changed.push_back(std::make_pair(s->first, pkgCache::VerIterator(*Cache))); + // We continue here even if it failed to enhance the ShowBroken output + Success &= Cache->GetDepCache()->SetCandidateRelease(s->first, s->second, Changed); + } + for (std::list >::const_iterator c = Changed.begin(); + c != Changed.end(); ++c) + { + if (c->second.end() == true) + ioprintf(out, _("Selected version '%s' (%s) for '%s'\n"), + c->first.VerStr(), c->first.RelStr().c_str(), c->first.ParentPkg().FullName(true).c_str()); + else if (c->first.ParentPkg()->Group != c->second.ParentPkg()->Group) + { + pkgCache::VerIterator V = (*Cache)[c->first.ParentPkg()].CandidateVerIter(*Cache); + ioprintf(out, _("Selected version '%s' (%s) for '%s' because of '%s'\n"), V.VerStr(), + V.RelStr().c_str(), V.ParentPkg().FullName(true).c_str(), c->second.ParentPkg().FullName(true).c_str()); + } + } + return Success; + } + void doAutoInstall() { for (APT::PackageSet::const_iterator P = doAutoInstallLater.begin(); P != doAutoInstallLater.end(); ++P) { @@ -1779,6 +1808,7 @@ bool DoInstall(CommandLine &CmdL) { if (order[i] == MOD_INSTALL) { InstallAction = std::for_each(verset[MOD_INSTALL].begin(), verset[MOD_INSTALL].end(), InstallAction); + InstallAction.propergateReleaseCandiateSwitching(helper.selectedByRelease, c0out); InstallAction.doAutoInstall(); } else if (order[i] == MOD_REMOVE) diff --git a/debian/NEWS b/debian/NEWS index 775dc9458..c90cff6b2 100644 --- a/debian/NEWS +++ b/debian/NEWS @@ -1,3 +1,12 @@ +apt (0.8.11+wheezy) UNRELEASED; urgency=low + + * apt-get install pkg/experimental will now not only switch the + candidate of package pkg to the version from the release experimental + but also of all dependencies of pkg if the current candidate can't + satisfy a versioned dependency. + + -- David Kalnischkies Fri, 03 Dez 2010 14:09:12 +0100 + apt (0.7.26~exp3) experimental; urgency=low * apt-ftparchive now reads the standard configuration files in diff --git a/debian/changelog b/debian/changelog index 65603587d..9d7564462 100644 --- a/debian/changelog +++ b/debian/changelog @@ -1,5 +1,9 @@ apt (0.8.11+wheezy) unstable; urgency=low + * apt-pkg/depcache.cc: + - add SetCandidateRelease() to set a candidate version and + the candidates of dependencies if needed to a specified + release (Closes: #572709) * cmdline/apt-get.cc: - if --print-uris is used don't setup downloader as we don't need progress, lock nor the directories it would create otherwise @@ -7,10 +11,12 @@ apt (0.8.11+wheezy) unstable; urgency=low only if they cause the remove of this essential (Closes: #601961) - keep not installed garbage packages uninstalled instead of showing in the autoremove section and installing those (Closes: #604222) + - change pkg/release behavior to use the new SetCandidateRelease + so installing packages from experimental or backports is easier * debian/control: - add Vcs-Browser now that loggerhead works again (Closes: #511168) - -- David Kalnischkies Fri, 03 Dec 2010 14:00:18 +0100 + -- David Kalnischkies Fri, 03 Dec 2010 17:06:28 +0100 apt (0.8.10) unstable; urgency=low diff --git a/test/integration/framework b/test/integration/framework index aa8cdacc6..4bbe1b408 100644 --- a/test/integration/framework +++ b/test/integration/framework @@ -134,6 +134,7 @@ setupenvironment() { echo "DPKG::options:: \"--force-not-root\";" >> aptconfig.conf echo "DPKG::options:: \"--force-bad-path\";" >> aptconfig.conf echo "DPKG::options:: \"--log=${TMPWORKINGDIRECTORY}/rootdir/var/log/dpkg.log\";" >> aptconfig.conf + echo 'quiet::NoUpdate "true";' >> aptconfig.conf export LC_ALL=C msgdone "info" } @@ -337,10 +338,11 @@ insertpackage() { echo "Package: $NAME Priority: optional Section: other -Installed-Size: 23356 +Installed-Size: 42 Maintainer: Joe Sixpack Architecture: $ARCH -Version: $VERSION" >> $FILE +Version: $VERSION +Filename: pool/main/${NAME}/${NAME}_${VERSION}_${ARCH}.deb" >> $FILE test -z "$DEPENDENCIES" || echo "$DEPENDENCIES" >> $FILE echo "Description: an autogenerated dummy ${NAME}=${VERSION}/${RELEASE} If you find such a package installed on your system, @@ -380,8 +382,8 @@ generatereleasefiles() { if [ -e aptarchive/dists ]; then for dir in $(find ./aptarchive/dists -mindepth 1 -maxdepth 1 -type d); do local CODENAME="$(echo "$dir" | cut -d'/' -f 4)" - aptftparchive -qq release $dir -o APT::FTPArchive::Release::Codename="${CODENAME}" | sed -e '/0 Release$/ d' > $dir/Release # remove the self reference - if [ "$CODENAME" = "experimental" ]; then + aptftparchive -qq release $dir -o APT::FTPArchive::Release::Suite="${CODENAME}" -o APT::FTPArchive::Release::Codename="${CODENAME}" | sed -e '/0 Release$/ d' > $dir/Release # remove the self reference + if [ "$CODENAME" = "experimental" -o "$CODENAME" = "experimental2" ]; then sed -i '/^Date: / a\ NotAutomatic: yes' $dir/Release fi diff --git a/test/integration/test-release-candidate-switching b/test/integration/test-release-candidate-switching new file mode 100755 index 000000000..ea601ae8b --- /dev/null +++ b/test/integration/test-release-candidate-switching @@ -0,0 +1,435 @@ +#!/bin/sh +set -e + +local TESTDIR=$(readlink -f $(dirname $0)) +. $TESTDIR/framework +setupenvironment +configarchitecture "i386" + +insertpackage 'unstable' 'libc6' 'i386' '2.11.2-7+sid' +insertpackage 'unstable' 'phonon-backend-xine' 'i386' '4:4.6.0really4.4.2-1+sid' 'Provides: phonon-backend' +insertpackage 'unstable' 'phonon-backend-xine2' 'i386' '4:4.6.0really4.4.2-1+sid' +insertpackage 'unstable' 'phonon-backend-xine3' 'i386' '4:4.6.0really4.4.2-1+sid' +insertpackage 'unstable' 'phonon-backend-xine4' 'i386' '4:4.6.0really4.4.2-1+sid' +insertpackage 'unstable' 'phonon-backend-null' 'i386' '4:4.20.0+sid' 'Provides: phonon-backend' +insertpackage 'unstable' 'intermediatepkg' 'all' '1.0' + +insertpackage 'unstable' 'amarok-common' 'all' '2.3.1-1+sid' +insertpackage 'unstable' 'amarok-utils' 'i386' '2.3.1-1+sid' +insertpackage 'unstable' 'libmtp8' 'i386' '0.3.1+sid' +insertpackage 'unstable' 'amarok' 'i386' '2.3.1-1+sid' 'Depends: amarok-common (= 2.3.1-1+sid), amarok-utils (= 2.3.1-1+sid), phonon-backend-xine | phonon-backend, libmtp8 (>= 0.3.1), libc6' + +insertpackage 'experimental' 'amarok-common' 'all' '2.3.2-2+exp' +insertpackage 'experimental' 'amarok-utils' 'i386' '2.3.2-2+exp' +insertpackage 'experimental' 'libmtp8' 'i386' '0.3.3+exp' +insertpackage 'experimental' 'phonon-backend-xine' 'i386' '5:4.6.0+exp' 'Provides: phonon-backend' +insertpackage 'experimental' 'phonon-backend-xine2' 'i386' '5:4.6.0+exp' 'Depends: uninstallablepkg +Provides: phonon-backend-broken' +insertpackage 'experimental' 'phonon-backend-xine3' 'i386' '5:4.6.0+exp' 'Depends: intermediatepkg (>= 1.5)' +insertpackage 'experimental' 'phonon-backend-xine4' 'i386' '5:4.6.0+exp' 'Depends: intermediateuninstallablepkg (= 2.0) +Provides: phonon-backend-broken' +insertpackage 'experimental' 'intermediatepkg' 'all' '2.0' 'Depends: libc6' +insertpackage 'experimental' 'intermediateuninstallablepkg' 'all' '2.0' 'Depends: uninstallablepkg' +insertpackage 'experimental' 'phonon-backend-null' 'i386' '5:4.20.0+exp' 'Provides: phonon-backend' +insertpackage 'experimental' 'amarok' 'i386' '2.3.2-2+exp' 'Depends: amarok-common (= 2.3.2-2+exp), amarok-utils (= 2.3.2-2+exp), phonon-backend-xine | phonon-backend, libmtp8 (>= 0.3.1), libc6' + +insertpackage 'experimental2' 'phonon-backend-xine' 'i386' '5:4.00.0+exp' 'Provides: phonon-backend' +insertpackage 'experimental2' 'amarok-less' 'i386' '2.3.2-2+exp' 'Depends: amarok-common, phonon-backend-xine (>= 5:4.00.0+exp), libmtp8, libc6, amarok-utils' +insertpackage 'experimental' 'amarok-higher' 'i386' '2.3.2-2+exp' 'Depends: amarok-common (= 2.3.2-2+exp), phonon-backend-xine (>= 5:4.6.0+exp), libmtp8 (>= 0.3.1), libc6, amarok-utils (= 2.3.2-2+exp)' + +insertpackage 'experimental' 'amarok-null' 'i386' '2.3.2-2+exp' 'Depends: amarok-common (= 2.3.2-2+exp), phonon-backend-xine (= 1:1.0-1) | phonon-backend, libmtp8 (>= 0.3.1), libc6, amarok-utils (= 2.3.2-2+exp)' +insertpackage 'experimental' 'amarok-null2' 'i386' '2.3.2-2+exp' 'Depends: amarok-common (= 2.3.2-2+exp), phonon-backend-null (= 1:1.0-1) | phonon-backend, libmtp8 (>= 0.3.1), libc6, amarok-utils (= 2.3.2-2+exp)' +insertpackage 'experimental' 'amarok-null2' 'i386' '2.3.2-2+exp' 'Depends: amarok-common (= 2.3.2-2+exp), phonon-backend-null (= 1:1.0-1) | phonon-backend, libmtp8 (>= 0.3.1), libc6, amarok-utils (= 2.3.2-2+exp)' +insertpackage 'experimental' 'amarok-xine' 'i386' '2.3.2-2+exp' 'Depends: amarok-common (= 2.3.2-2+exp), phonon-backend-xine (= 5:4.6.0+exp) | phonon-backend-null (= 5:4.20.0+exp), libmtp8 (>= 0.3.1), libc6, amarok-utils (= 2.3.2-2+exp)' +insertpackage 'experimental' 'amarok-xine2' 'i386' '2.3.2-2+exp' 'Depends: amarok-common (= 2.3.2-2+exp), phonon-backend-xine2 (= 5:4.6.0+exp) | phonon-backend-null (= 5:4.20.0+exp), libmtp8 (>= 0.3.1), libc6, amarok-utils (= 2.3.2-2+exp)' +insertpackage 'experimental' 'amarok-xine3' 'i386' '2.3.2-2+exp' 'Depends: amarok-common (= 2.3.2-2+exp), phonon-backend-xine3 (= 5:4.6.0+exp) | phonon-backend-null (= 5:4.20.0+exp), libmtp8 (>= 0.3.1), libc6, amarok-utils (= 2.3.2-2+exp)' +insertpackage 'experimental' 'amarok-xine4' 'i386' '2.3.2-2+exp' 'Depends: amarok-common (= 2.3.2-2+exp), phonon-backend-xine4 (= 5:4.6.0+exp) | phonon-backend-null (= 5:4.20.0+exp), libmtp8 (>= 0.3.1), libc6, amarok-utils (= 2.3.2-2+exp)' +insertpackage 'experimental' 'amarok-broken' 'i386' '2.3.2-2+exp' 'Depends: amarok-common (= 2.3.2-2+exp), phonon-backend-broken | phonon-backend-null (= 5:4.20.0+exp), libmtp8 (>= 0.3.1), libc6, amarok-utils (= 2.3.2-2+exp)' + +insertpackage 'experimental' 'amarok-recommends' 'i386' '2.3.2-2+exp' 'Depends: amarok-common (= 2.3.2-2+exp) +Recommends: amarok-utils (= 2.3.2-2+exp), phonon-backend-xine | phonon-backend, libmtp8 (>= 0.3.1), libc6' +insertpackage 'experimental' 'amarok-recommends2' 'i386' '2.3.2-2+exp' 'Depends: amarok-common (= 2.3.2-2+exp) +Recommends: amarok-utils (= 2.30.2-2+exp), phonon-backend-xine | phonon-backend, libmtp8 (>= 0.3.1), libc6' + +insertpackage 'experimental' 'uninstallablepkg' 'all' '1.0' 'Depends: libmtp8 (>= 10:0.20.1), amarok-utils (= 2.3.2-2+exp)' + +setupaptarchive + +testequal "Reading package lists... +Building dependency tree... +The following extra packages will be installed: + amarok-common (2.3.1-1+sid) + amarok-utils (2.3.1-1+sid) + libc6 (2.11.2-7+sid) + libmtp8 (0.3.1+sid) + phonon-backend-xine (4.6.0really4.4.2-1+sid) +The following NEW packages will be installed: + amarok (2.3.1-1+sid) + amarok-common (2.3.1-1+sid) + amarok-utils (2.3.1-1+sid) + libc6 (2.11.2-7+sid) + libmtp8 (0.3.1+sid) + phonon-backend-xine (4.6.0really4.4.2-1+sid) +0 upgraded, 6 newly installed, 0 to remove and 0 not upgraded. +After this operation, 258 kB of additional disk space will be used. +E: Trivial Only specified but this is not a trivial operation." aptget install amarok --trivial-only -V -q=0 + +testequal "Reading package lists... +Building dependency tree... +The following extra packages will be installed: + amarok-common (2.3.2-2+exp) + amarok-utils (2.3.2-2+exp) + libc6 (2.11.2-7+sid) + libmtp8 (0.3.3+exp) + phonon-backend-xine (4.6.0+exp) +The following NEW packages will be installed: + amarok (2.3.2-2+exp) + amarok-common (2.3.2-2+exp) + amarok-utils (2.3.2-2+exp) + libc6 (2.11.2-7+sid) + libmtp8 (0.3.3+exp) + phonon-backend-xine (4.6.0+exp) +0 upgraded, 6 newly installed, 0 to remove and 0 not upgraded. +After this operation, 258 kB of additional disk space will be used. +E: Trivial Only specified but this is not a trivial operation." aptget install amarok -t experimental --trivial-only -V -q=0 + +testequal "Reading package lists... +Building dependency tree... +Selected version '2.3.2-2+exp' (experimental [i386]) for 'amarok' +Selected version '2.3.2-2+exp' (experimental [all]) for 'amarok-common' because of 'amarok' +Selected version '2.3.2-2+exp' (experimental [i386]) for 'amarok-utils' because of 'amarok' +The following extra packages will be installed: + amarok (2.3.2-2+exp) + amarok-common (2.3.2-2+exp) + amarok-utils (2.3.2-2+exp) + libc6 (2.11.2-7+sid) + libmtp8 (0.3.1+sid) + phonon-backend-xine (4.6.0really4.4.2-1+sid) +The following NEW packages will be installed: + amarok (2.3.2-2+exp) + amarok-common (2.3.2-2+exp) + amarok-utils (2.3.2-2+exp) + libc6 (2.11.2-7+sid) + libmtp8 (0.3.1+sid) + phonon-backend-xine (4.6.0really4.4.2-1+sid) +0 upgraded, 6 newly installed, 0 to remove and 0 not upgraded. +After this operation, 258 kB of additional disk space will be used. +E: Trivial Only specified but this is not a trivial operation." aptget install amarok/experimental --trivial-only -V -q=0 + +testequal "Reading package lists... +Building dependency tree... +Selected version '2.3.2-2+exp' (experimental [i386]) for 'amarok-null' +Selected version '2.3.2-2+exp' (experimental [all]) for 'amarok-common' because of 'amarok-null' +Selected version '2.3.2-2+exp' (experimental [i386]) for 'amarok-utils' because of 'amarok-null' +The following extra packages will be installed: + amarok-common (2.3.2-2+exp) + amarok-null (2.3.2-2+exp) + amarok-utils (2.3.2-2+exp) + libc6 (2.11.2-7+sid) + libmtp8 (0.3.1+sid) + phonon-backend-null (4.20.0+sid) +The following NEW packages will be installed: + amarok-common (2.3.2-2+exp) + amarok-null (2.3.2-2+exp) + amarok-utils (2.3.2-2+exp) + libc6 (2.11.2-7+sid) + libmtp8 (0.3.1+sid) + phonon-backend-null (4.20.0+sid) +0 upgraded, 6 newly installed, 0 to remove and 0 not upgraded. +After this operation, 258 kB of additional disk space will be used. +E: Trivial Only specified but this is not a trivial operation." aptget install amarok-null/experimental --trivial-only -V -q=0 + +# do not select the same version multiple times +testequal "Reading package lists... +Building dependency tree... +Selected version '2.3.2-2+exp' (experimental [i386]) for 'amarok' +Selected version '2.3.2-2+exp' (experimental [all]) for 'amarok-common' because of 'amarok' +Selected version '2.3.2-2+exp' (experimental [i386]) for 'amarok-utils' because of 'amarok' +Selected version '2.3.2-2+exp' (experimental [i386]) for 'amarok-null' +The following extra packages will be installed: + amarok (2.3.2-2+exp) + amarok-common (2.3.2-2+exp) + amarok-null (2.3.2-2+exp) + amarok-utils (2.3.2-2+exp) + libc6 (2.11.2-7+sid) + libmtp8 (0.3.1+sid) + phonon-backend-xine (4.6.0really4.4.2-1+sid) +The following NEW packages will be installed: + amarok (2.3.2-2+exp) + amarok-common (2.3.2-2+exp) + amarok-null (2.3.2-2+exp) + amarok-utils (2.3.2-2+exp) + libc6 (2.11.2-7+sid) + libmtp8 (0.3.1+sid) + phonon-backend-xine (4.6.0really4.4.2-1+sid) +0 upgraded, 7 newly installed, 0 to remove and 0 not upgraded. +After this operation, 301 kB of additional disk space will be used. +E: Trivial Only specified but this is not a trivial operation." aptget install amarok/experimental amarok-null/experimental --trivial-only -V -q=0 + +# … but thighten the version if needed +# in theory, the second line is wrong, but printing the right version is too much of a hassle +# (we have to check if later in the Changed list is another change and if so use this version +# instead of the current candidate) - and it wouldn't be (really) useful anyway… +testequal "Reading package lists... +Building dependency tree... +Selected version '2.3.2-2+exp' (experimental2 [i386]) for 'amarok-less' +Selected version '5:4.6.0+exp' (experimental [i386]) for 'phonon-backend-xine' because of 'amarok-less' +Selected version '2.3.2-2+exp' (experimental [i386]) for 'amarok-higher' +Selected version '2.3.2-2+exp' (experimental [all]) for 'amarok-common' because of 'amarok-higher' +Selected version '5:4.6.0+exp' (experimental [i386]) for 'phonon-backend-xine' because of 'amarok-higher' +Selected version '2.3.2-2+exp' (experimental [i386]) for 'amarok-utils' because of 'amarok-higher' +The following extra packages will be installed: + amarok-common (2.3.2-2+exp) + amarok-higher (2.3.2-2+exp) + amarok-less (2.3.2-2+exp) + amarok-utils (2.3.2-2+exp) + libc6 (2.11.2-7+sid) + libmtp8 (0.3.1+sid) + phonon-backend-xine (4.6.0+exp) +The following NEW packages will be installed: + amarok-common (2.3.2-2+exp) + amarok-higher (2.3.2-2+exp) + amarok-less (2.3.2-2+exp) + amarok-utils (2.3.2-2+exp) + libc6 (2.11.2-7+sid) + libmtp8 (0.3.1+sid) + phonon-backend-xine (4.6.0+exp) +0 upgraded, 7 newly installed, 0 to remove and 0 not upgraded. +After this operation, 301 kB of additional disk space will be used. +E: Trivial Only specified but this is not a trivial operation." aptget install amarok-less/experimental2 amarok-higher/experimental --trivial-only -V -q=0 + +# phonon-backend-null can't be used directly, but as it provides it is still fine… +testequal "Reading package lists... +Building dependency tree... +Selected version '2.3.2-2+exp' (experimental [i386]) for 'amarok-null2' +Selected version '2.3.2-2+exp' (experimental [all]) for 'amarok-common' because of 'amarok-null2' +Selected version '2.3.2-2+exp' (experimental [i386]) for 'amarok-utils' because of 'amarok-null2' +The following extra packages will be installed: + amarok-common (2.3.2-2+exp) + amarok-null2 (2.3.2-2+exp) + amarok-utils (2.3.2-2+exp) + libc6 (2.11.2-7+sid) + libmtp8 (0.3.1+sid) + phonon-backend-null (4.20.0+sid) +The following NEW packages will be installed: + amarok-common (2.3.2-2+exp) + amarok-null2 (2.3.2-2+exp) + amarok-utils (2.3.2-2+exp) + libc6 (2.11.2-7+sid) + libmtp8 (0.3.1+sid) + phonon-backend-null (4.20.0+sid) +0 upgraded, 6 newly installed, 0 to remove and 0 not upgraded. +After this operation, 258 kB of additional disk space will be used. +E: Trivial Only specified but this is not a trivial operation." aptget install amarok-null2/experimental --trivial-only -V -q=0 + +# if an or-group satisfier is already found, do not set others +testequal "Reading package lists... +Building dependency tree... +Selected version '2.3.2-2+exp' (experimental [i386]) for 'amarok-xine' +Selected version '2.3.2-2+exp' (experimental [all]) for 'amarok-common' because of 'amarok-xine' +Selected version '5:4.6.0+exp' (experimental [i386]) for 'phonon-backend-xine' because of 'amarok-xine' +Selected version '2.3.2-2+exp' (experimental [i386]) for 'amarok-utils' because of 'amarok-xine' +The following extra packages will be installed: + amarok-common (2.3.2-2+exp) + amarok-utils (2.3.2-2+exp) + amarok-xine (2.3.2-2+exp) + libc6 (2.11.2-7+sid) + libmtp8 (0.3.1+sid) + phonon-backend-xine (4.6.0+exp) +The following NEW packages will be installed: + amarok-common (2.3.2-2+exp) + amarok-utils (2.3.2-2+exp) + amarok-xine (2.3.2-2+exp) + libc6 (2.11.2-7+sid) + libmtp8 (0.3.1+sid) + phonon-backend-xine (4.6.0+exp) +0 upgraded, 6 newly installed, 0 to remove and 0 not upgraded. +After this operation, 258 kB of additional disk space will be used. +E: Trivial Only specified but this is not a trivial operation." aptget install amarok-xine/experimental --trivial-only -V -q=0 + +# … but proceed testing if the first doesn't work out +testequal "Reading package lists... +Building dependency tree... +Selected version '2.3.2-2+exp' (experimental [i386]) for 'amarok-xine2' +Selected version '2.3.2-2+exp' (experimental [all]) for 'amarok-common' because of 'amarok-xine2' +Selected version '5:4.20.0+exp' (experimental [i386]) for 'phonon-backend-null' because of 'amarok-xine2' +Selected version '2.3.2-2+exp' (experimental [i386]) for 'amarok-utils' because of 'amarok-xine2' +The following extra packages will be installed: + amarok-common (2.3.2-2+exp) + amarok-utils (2.3.2-2+exp) + amarok-xine2 (2.3.2-2+exp) + libc6 (2.11.2-7+sid) + libmtp8 (0.3.1+sid) + phonon-backend-null (4.20.0+exp) +The following NEW packages will be installed: + amarok-common (2.3.2-2+exp) + amarok-utils (2.3.2-2+exp) + amarok-xine2 (2.3.2-2+exp) + libc6 (2.11.2-7+sid) + libmtp8 (0.3.1+sid) + phonon-backend-null (4.20.0+exp) +0 upgraded, 6 newly installed, 0 to remove and 0 not upgraded. +After this operation, 258 kB of additional disk space will be used. +E: Trivial Only specified but this is not a trivial operation." aptget install amarok-xine2/experimental --trivial-only -V -q=0 + +# sometimes, the second level need to be corrected, too +testequal "Reading package lists... +Building dependency tree... +Selected version '2.3.2-2+exp' (experimental [i386]) for 'amarok-xine3' +Selected version '2.3.2-2+exp' (experimental [all]) for 'amarok-common' because of 'amarok-xine3' +Selected version '5:4.6.0+exp' (experimental [i386]) for 'phonon-backend-xine3' because of 'amarok-xine3' +Selected version '2.0' (experimental [all]) for 'intermediatepkg' because of 'phonon-backend-xine3' +Selected version '2.3.2-2+exp' (experimental [i386]) for 'amarok-utils' because of 'amarok-xine3' +The following extra packages will be installed: + amarok-common (2.3.2-2+exp) + amarok-utils (2.3.2-2+exp) + amarok-xine3 (2.3.2-2+exp) + intermediatepkg (2.0) + libc6 (2.11.2-7+sid) + libmtp8 (0.3.1+sid) + phonon-backend-xine3 (4.6.0+exp) +The following NEW packages will be installed: + amarok-common (2.3.2-2+exp) + amarok-utils (2.3.2-2+exp) + amarok-xine3 (2.3.2-2+exp) + intermediatepkg (2.0) + libc6 (2.11.2-7+sid) + libmtp8 (0.3.1+sid) + phonon-backend-xine3 (4.6.0+exp) +0 upgraded, 7 newly installed, 0 to remove and 0 not upgraded. +After this operation, 301 kB of additional disk space will be used. +E: Trivial Only specified but this is not a trivial operation." aptget install amarok-xine3/experimental --trivial-only -V -q=0 + +# … but proceed testing if the first doesn't work out even in second deep +testequal "Reading package lists... +Building dependency tree... +Selected version '2.3.2-2+exp' (experimental [i386]) for 'amarok-xine4' +Selected version '2.3.2-2+exp' (experimental [all]) for 'amarok-common' because of 'amarok-xine4' +Selected version '5:4.20.0+exp' (experimental [i386]) for 'phonon-backend-null' because of 'amarok-xine4' +Selected version '2.3.2-2+exp' (experimental [i386]) for 'amarok-utils' because of 'amarok-xine4' +The following extra packages will be installed: + amarok-common (2.3.2-2+exp) + amarok-utils (2.3.2-2+exp) + amarok-xine4 (2.3.2-2+exp) + libc6 (2.11.2-7+sid) + libmtp8 (0.3.1+sid) + phonon-backend-null (4.20.0+exp) +The following NEW packages will be installed: + amarok-common (2.3.2-2+exp) + amarok-utils (2.3.2-2+exp) + amarok-xine4 (2.3.2-2+exp) + libc6 (2.11.2-7+sid) + libmtp8 (0.3.1+sid) + phonon-backend-null (4.20.0+exp) +0 upgraded, 6 newly installed, 0 to remove and 0 not upgraded. +After this operation, 258 kB of additional disk space will be used. +E: Trivial Only specified but this is not a trivial operation." aptget install amarok-xine4/experimental --trivial-only -V -q=0 + +# providers can be broken, too +testequal "Reading package lists... +Building dependency tree... +Selected version '2.3.2-2+exp' (experimental [i386]) for 'amarok-broken' +Selected version '2.3.2-2+exp' (experimental [all]) for 'amarok-common' because of 'amarok-broken' +Selected version '5:4.20.0+exp' (experimental [i386]) for 'phonon-backend-null' because of 'amarok-broken' +Selected version '2.3.2-2+exp' (experimental [i386]) for 'amarok-utils' because of 'amarok-broken' +The following extra packages will be installed: + amarok-broken (2.3.2-2+exp) + amarok-common (2.3.2-2+exp) + amarok-utils (2.3.2-2+exp) + libc6 (2.11.2-7+sid) + libmtp8 (0.3.1+sid) + phonon-backend-null (4.20.0+exp) +The following NEW packages will be installed: + amarok-broken (2.3.2-2+exp) + amarok-common (2.3.2-2+exp) + amarok-utils (2.3.2-2+exp) + libc6 (2.11.2-7+sid) + libmtp8 (0.3.1+sid) + phonon-backend-null (4.20.0+exp) +0 upgraded, 6 newly installed, 0 to remove and 0 not upgraded. +After this operation, 258 kB of additional disk space will be used. +E: Trivial Only specified but this is not a trivial operation." aptget install amarok-broken/experimental --trivial-only -V -q=0 + +# switch the candidate for recommends too if they should be installed +testequal "Reading package lists... +Building dependency tree... +Selected version '2.3.2-2+exp' (experimental [i386]) for 'amarok-recommends' +Selected version '2.3.2-2+exp' (experimental [all]) for 'amarok-common' because of 'amarok-recommends' +Selected version '2.3.2-2+exp' (experimental [i386]) for 'amarok-utils' because of 'amarok-recommends' +The following extra packages will be installed: + amarok-common (2.3.2-2+exp) + amarok-recommends (2.3.2-2+exp) + amarok-utils (2.3.2-2+exp) + libc6 (2.11.2-7+sid) + libmtp8 (0.3.1+sid) + phonon-backend-xine (4.6.0really4.4.2-1+sid) +The following NEW packages will be installed: + amarok-common (2.3.2-2+exp) + amarok-recommends (2.3.2-2+exp) + amarok-utils (2.3.2-2+exp) + libc6 (2.11.2-7+sid) + libmtp8 (0.3.1+sid) + phonon-backend-xine (4.6.0really4.4.2-1+sid) +0 upgraded, 6 newly installed, 0 to remove and 0 not upgraded. +After this operation, 258 kB of additional disk space will be used. +E: Trivial Only specified but this is not a trivial operation." aptget install amarok-recommends/experimental --trivial-only -V -q=0 -o APT::Install-Recommends=1 + +# … or not if not +testequal "Reading package lists... +Building dependency tree... +Selected version '2.3.2-2+exp' (experimental [i386]) for 'amarok-recommends' +Selected version '2.3.2-2+exp' (experimental [all]) for 'amarok-common' because of 'amarok-recommends' +The following extra packages will be installed: + amarok-common (2.3.2-2+exp) + amarok-recommends (2.3.2-2+exp) +Recommended packages: + amarok-utils (2.3.1-1+sid) + phonon-backend-xine (4.6.0really4.4.2-1+sid) + phonon-backend () + libmtp8 (0.3.1+sid) + libc6 (2.11.2-7+sid) +The following NEW packages will be installed: + amarok-common (2.3.2-2+exp) + amarok-recommends (2.3.2-2+exp) +0 upgraded, 2 newly installed, 0 to remove and 0 not upgraded. +After this operation, 86.0 kB of additional disk space will be used. +E: Trivial Only specified but this is not a trivial operation." aptget install amarok-recommends/experimental --trivial-only -V -q=0 -o APT::Install-Recommends=0 + +# but broken recommends are not the end of the world +# FIXME: the version output for recommend packages is a bit strange… but what would be better? +testequal "Reading package lists... +Building dependency tree... +Selected version '2.3.2-2+exp' (experimental [i386]) for 'amarok-recommends2' +Selected version '2.3.2-2+exp' (experimental [all]) for 'amarok-common' because of 'amarok-recommends2' +The following extra packages will be installed: + amarok-common (2.3.2-2+exp) + amarok-recommends2 (2.3.2-2+exp) + libc6 (2.11.2-7+sid) + libmtp8 (0.3.1+sid) + phonon-backend-xine (4.6.0really4.4.2-1+sid) +Recommended packages: + amarok-utils (2.3.1-1+sid) +The following NEW packages will be installed: + amarok-common (2.3.2-2+exp) + amarok-recommends2 (2.3.2-2+exp) + libc6 (2.11.2-7+sid) + libmtp8 (0.3.1+sid) + phonon-backend-xine (4.6.0really4.4.2-1+sid) +0 upgraded, 5 newly installed, 0 to remove and 0 not upgraded. +After this operation, 215 kB of additional disk space will be used. +E: Trivial Only specified but this is not a trivial operation." aptget install amarok-recommends2/experimental --trivial-only -V -q=0 -o APT::Install-Recommends=1 + +# if one depends doesn't work, we don't need to look deeper… +testequal "Reading package lists... +Building dependency tree... +Selected version '1.0' (experimental [all]) for 'uninstallablepkg' +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: + uninstallablepkg : Depends: libmtp8 (>= 10:0.20.1) but it is not going to be installed + Depends: amarok-utils (= 2.3.2-2+exp) but 2.3.1-1+sid is to be installed +E: Broken packages" aptget install uninstallablepkg/experimental --trivial-only -V -q=0 -- cgit v1.2.3 From 6a2512be4addf9a874cc72c40d1ec56206fdd2fb Mon Sep 17 00:00:00 2001 From: David Kalnischkies Date: Fri, 3 Dec 2010 18:05:52 +0100 Subject: really do not show packages in the extra section if they were requested on the commandline, e.g. with a modifier --- cmdline/apt-get.cc | 17 ++++++++--------- debian/changelog | 4 +++- test/integration/test-release-candidate-switching | 16 ---------------- 3 files changed, 11 insertions(+), 26 deletions(-) diff --git a/cmdline/apt-get.cc b/cmdline/apt-get.cc index 476896322..67fc4dc25 100644 --- a/cmdline/apt-get.cc +++ b/cmdline/apt-get.cc @@ -1873,16 +1873,15 @@ bool DoInstall(CommandLine &CmdL) pkgCache::PkgIterator I(Cache,Cache.List[J]); if ((*Cache)[I].Install() == false) continue; + pkgCache::VerIterator Cand = Cache[I].CandidateVerIter(Cache); + if (Cand.Pseudo() == true) + continue; - const char **J; - for (J = CmdL.FileList + 1; *J != 0; J++) - if (strcmp(*J,I.Name()) == 0) - break; - - if (*J == 0) { - List += I.FullName(true) + " "; - VersionsList += string(Cache[I].CandVersion) + "\n"; - } + if (verset[MOD_INSTALL].find(Cand) != verset[MOD_INSTALL].end()) + continue; + + List += I.FullName(true) + " "; + VersionsList += string(Cache[I].CandVersion) + "\n"; } ShowList(c1out,_("The following extra packages will be installed:"),List,VersionsList); diff --git a/debian/changelog b/debian/changelog index 9d7564462..2a0b5a8cf 100644 --- a/debian/changelog +++ b/debian/changelog @@ -13,10 +13,12 @@ apt (0.8.11+wheezy) unstable; urgency=low in the autoremove section and installing those (Closes: #604222) - change pkg/release behavior to use the new SetCandidateRelease so installing packages from experimental or backports is easier + - really do not show packages in the extra section if they were + requested on the commandline, e.g. with a modifier * debian/control: - add Vcs-Browser now that loggerhead works again (Closes: #511168) - -- David Kalnischkies Fri, 03 Dec 2010 17:06:28 +0100 + -- David Kalnischkies Fri, 03 Dec 2010 17:30:52 +0100 apt (0.8.10) unstable; urgency=low diff --git a/test/integration/test-release-candidate-switching b/test/integration/test-release-candidate-switching index ea601ae8b..5736945ab 100755 --- a/test/integration/test-release-candidate-switching +++ b/test/integration/test-release-candidate-switching @@ -39,7 +39,6 @@ insertpackage 'experimental' 'amarok-higher' 'i386' '2.3.2-2+exp' 'Depends: amar insertpackage 'experimental' 'amarok-null' 'i386' '2.3.2-2+exp' 'Depends: amarok-common (= 2.3.2-2+exp), phonon-backend-xine (= 1:1.0-1) | phonon-backend, libmtp8 (>= 0.3.1), libc6, amarok-utils (= 2.3.2-2+exp)' insertpackage 'experimental' 'amarok-null2' 'i386' '2.3.2-2+exp' 'Depends: amarok-common (= 2.3.2-2+exp), phonon-backend-null (= 1:1.0-1) | phonon-backend, libmtp8 (>= 0.3.1), libc6, amarok-utils (= 2.3.2-2+exp)' -insertpackage 'experimental' 'amarok-null2' 'i386' '2.3.2-2+exp' 'Depends: amarok-common (= 2.3.2-2+exp), phonon-backend-null (= 1:1.0-1) | phonon-backend, libmtp8 (>= 0.3.1), libc6, amarok-utils (= 2.3.2-2+exp)' insertpackage 'experimental' 'amarok-xine' 'i386' '2.3.2-2+exp' 'Depends: amarok-common (= 2.3.2-2+exp), phonon-backend-xine (= 5:4.6.0+exp) | phonon-backend-null (= 5:4.20.0+exp), libmtp8 (>= 0.3.1), libc6, amarok-utils (= 2.3.2-2+exp)' insertpackage 'experimental' 'amarok-xine2' 'i386' '2.3.2-2+exp' 'Depends: amarok-common (= 2.3.2-2+exp), phonon-backend-xine2 (= 5:4.6.0+exp) | phonon-backend-null (= 5:4.20.0+exp), libmtp8 (>= 0.3.1), libc6, amarok-utils (= 2.3.2-2+exp)' insertpackage 'experimental' 'amarok-xine3' 'i386' '2.3.2-2+exp' 'Depends: amarok-common (= 2.3.2-2+exp), phonon-backend-xine3 (= 5:4.6.0+exp) | phonon-backend-null (= 5:4.20.0+exp), libmtp8 (>= 0.3.1), libc6, amarok-utils (= 2.3.2-2+exp)' @@ -99,7 +98,6 @@ Selected version '2.3.2-2+exp' (experimental [i386]) for 'amarok' Selected version '2.3.2-2+exp' (experimental [all]) for 'amarok-common' because of 'amarok' Selected version '2.3.2-2+exp' (experimental [i386]) for 'amarok-utils' because of 'amarok' The following extra packages will be installed: - amarok (2.3.2-2+exp) amarok-common (2.3.2-2+exp) amarok-utils (2.3.2-2+exp) libc6 (2.11.2-7+sid) @@ -123,7 +121,6 @@ Selected version '2.3.2-2+exp' (experimental [all]) for 'amarok-common' because Selected version '2.3.2-2+exp' (experimental [i386]) for 'amarok-utils' because of 'amarok-null' The following extra packages will be installed: amarok-common (2.3.2-2+exp) - amarok-null (2.3.2-2+exp) amarok-utils (2.3.2-2+exp) libc6 (2.11.2-7+sid) libmtp8 (0.3.1+sid) @@ -147,9 +144,7 @@ Selected version '2.3.2-2+exp' (experimental [all]) for 'amarok-common' because Selected version '2.3.2-2+exp' (experimental [i386]) for 'amarok-utils' because of 'amarok' Selected version '2.3.2-2+exp' (experimental [i386]) for 'amarok-null' The following extra packages will be installed: - amarok (2.3.2-2+exp) amarok-common (2.3.2-2+exp) - amarok-null (2.3.2-2+exp) amarok-utils (2.3.2-2+exp) libc6 (2.11.2-7+sid) libmtp8 (0.3.1+sid) @@ -180,8 +175,6 @@ Selected version '5:4.6.0+exp' (experimental [i386]) for 'phonon-backend-xine' b Selected version '2.3.2-2+exp' (experimental [i386]) for 'amarok-utils' because of 'amarok-higher' The following extra packages will be installed: amarok-common (2.3.2-2+exp) - amarok-higher (2.3.2-2+exp) - amarok-less (2.3.2-2+exp) amarok-utils (2.3.2-2+exp) libc6 (2.11.2-7+sid) libmtp8 (0.3.1+sid) @@ -206,7 +199,6 @@ Selected version '2.3.2-2+exp' (experimental [all]) for 'amarok-common' because Selected version '2.3.2-2+exp' (experimental [i386]) for 'amarok-utils' because of 'amarok-null2' The following extra packages will be installed: amarok-common (2.3.2-2+exp) - amarok-null2 (2.3.2-2+exp) amarok-utils (2.3.2-2+exp) libc6 (2.11.2-7+sid) libmtp8 (0.3.1+sid) @@ -232,7 +224,6 @@ Selected version '2.3.2-2+exp' (experimental [i386]) for 'amarok-utils' because The following extra packages will be installed: amarok-common (2.3.2-2+exp) amarok-utils (2.3.2-2+exp) - amarok-xine (2.3.2-2+exp) libc6 (2.11.2-7+sid) libmtp8 (0.3.1+sid) phonon-backend-xine (4.6.0+exp) @@ -257,7 +248,6 @@ Selected version '2.3.2-2+exp' (experimental [i386]) for 'amarok-utils' because The following extra packages will be installed: amarok-common (2.3.2-2+exp) amarok-utils (2.3.2-2+exp) - amarok-xine2 (2.3.2-2+exp) libc6 (2.11.2-7+sid) libmtp8 (0.3.1+sid) phonon-backend-null (4.20.0+exp) @@ -283,7 +273,6 @@ Selected version '2.3.2-2+exp' (experimental [i386]) for 'amarok-utils' because The following extra packages will be installed: amarok-common (2.3.2-2+exp) amarok-utils (2.3.2-2+exp) - amarok-xine3 (2.3.2-2+exp) intermediatepkg (2.0) libc6 (2.11.2-7+sid) libmtp8 (0.3.1+sid) @@ -310,7 +299,6 @@ Selected version '2.3.2-2+exp' (experimental [i386]) for 'amarok-utils' because The following extra packages will be installed: amarok-common (2.3.2-2+exp) amarok-utils (2.3.2-2+exp) - amarok-xine4 (2.3.2-2+exp) libc6 (2.11.2-7+sid) libmtp8 (0.3.1+sid) phonon-backend-null (4.20.0+exp) @@ -333,7 +321,6 @@ Selected version '2.3.2-2+exp' (experimental [all]) for 'amarok-common' because Selected version '5:4.20.0+exp' (experimental [i386]) for 'phonon-backend-null' because of 'amarok-broken' Selected version '2.3.2-2+exp' (experimental [i386]) for 'amarok-utils' because of 'amarok-broken' The following extra packages will be installed: - amarok-broken (2.3.2-2+exp) amarok-common (2.3.2-2+exp) amarok-utils (2.3.2-2+exp) libc6 (2.11.2-7+sid) @@ -358,7 +345,6 @@ Selected version '2.3.2-2+exp' (experimental [all]) for 'amarok-common' because Selected version '2.3.2-2+exp' (experimental [i386]) for 'amarok-utils' because of 'amarok-recommends' The following extra packages will be installed: amarok-common (2.3.2-2+exp) - amarok-recommends (2.3.2-2+exp) amarok-utils (2.3.2-2+exp) libc6 (2.11.2-7+sid) libmtp8 (0.3.1+sid) @@ -381,7 +367,6 @@ Selected version '2.3.2-2+exp' (experimental [i386]) for 'amarok-recommends' Selected version '2.3.2-2+exp' (experimental [all]) for 'amarok-common' because of 'amarok-recommends' The following extra packages will be installed: amarok-common (2.3.2-2+exp) - amarok-recommends (2.3.2-2+exp) Recommended packages: amarok-utils (2.3.1-1+sid) phonon-backend-xine (4.6.0really4.4.2-1+sid) @@ -403,7 +388,6 @@ Selected version '2.3.2-2+exp' (experimental [i386]) for 'amarok-recommends2' Selected version '2.3.2-2+exp' (experimental [all]) for 'amarok-common' because of 'amarok-recommends2' The following extra packages will be installed: amarok-common (2.3.2-2+exp) - amarok-recommends2 (2.3.2-2+exp) libc6 (2.11.2-7+sid) libmtp8 (0.3.1+sid) phonon-backend-xine (4.6.0really4.4.2-1+sid) -- cgit v1.2.3 From df6c9723de23f0c2c3ccf76b7b4310019fd33366 Mon Sep 17 00:00:00 2001 From: David Kalnischkies Date: Fri, 3 Dec 2010 19:11:22 +0100 Subject: simplify the new-and-autoremove fix a bit --- cmdline/apt-get.cc | 6 ++---- 1 file changed, 2 insertions(+), 4 deletions(-) diff --git a/cmdline/apt-get.cc b/cmdline/apt-get.cc index 67fc4dc25..d586d9ab0 100644 --- a/cmdline/apt-get.cc +++ b/cmdline/apt-get.cc @@ -1647,9 +1647,7 @@ bool DoAutomaticRemove(CacheFile &Cache) bool purgePkgs = _config->FindB("APT::Get::Purge", false); bool smallList = (hideAutoRemove == false && - strcasecmp(_config->Find("APT::Get::HideAutoRemove","").c_str(),"small") == 0) || - // we don't want to autoremove and we don't want to see it, so don't generate lists - (doAutoRemove == false && hideAutoRemove == true); + strcasecmp(_config->Find("APT::Get::HideAutoRemove","").c_str(),"small") == 0); string autoremovelist, autoremoveversions; unsigned long autoRemoveCount = 0; @@ -1677,7 +1675,7 @@ bool DoAutomaticRemove(CacheFile &Cache) if (Cache[Pkg].Install() == true && Pkg.CurrentVer() == 0) Cache->MarkDelete(Pkg, false); // only show stuff in the list that is not yet marked for removal - else if(Cache[Pkg].Delete() == false) + else if(hideAutoRemove == false && Cache[Pkg].Delete() == false) { ++autoRemoveCount; // we don't need to fill the strings if we don't need them -- cgit v1.2.3 From 067cc3695f46704b890211788a85ad05e7004c6d Mon Sep 17 00:00:00 2001 From: David Kalnischkies Date: Fri, 3 Dec 2010 19:12:17 +0100 Subject: set the Candidate for all before doing the propargation --- cmdline/apt-get.cc | 4 ++++ 1 file changed, 4 insertions(+) diff --git a/cmdline/apt-get.cc b/cmdline/apt-get.cc index d586d9ab0..0a22fd42b 100644 --- a/cmdline/apt-get.cc +++ b/cmdline/apt-get.cc @@ -833,6 +833,10 @@ struct TryToInstall { bool propergateReleaseCandiateSwitching(std::list > start, std::ostream &out) { + for (std::list >::const_iterator s = start.begin(); + s != start.end(); ++s) + Cache->GetDepCache()->SetCandidateVersion(s->first); + bool Success = true; std::list > Changed; for (std::list >::const_iterator s = start.begin(); -- cgit v1.2.3 From b99d5aeff24b0b8477e5699ce391bfd63478d742 Mon Sep 17 00:00:00 2001 From: David Kalnischkies Date: Sun, 5 Dec 2010 12:46:56 +0100 Subject: experimental is an incomplete archive, so try to get the packages which could not be installed from experimental from unstable instead --- test/integration/create-test-data | 6 +++++- 1 file changed, 5 insertions(+), 1 deletion(-) diff --git a/test/integration/create-test-data b/test/integration/create-test-data index b93218b7c..581b62910 100755 --- a/test/integration/create-test-data +++ b/test/integration/create-test-data @@ -26,7 +26,7 @@ if [ -z "$LISTOFPKGS" ]; then aptget install $* -t $CODENAME -so Dir::state::status=$WORKDIR/status -o Dir::Cache::archives=$WORKDIR -o pkgCacheGen::Essential=none -o APT::Immediate-Configure=0 exit 1 fi -aptcache show $LISTOFPKGS --no-all-versions 2> /dev/null > $TMPGEN +aptcache show $LISTOFPKGS --no-all-versions 2> $WORKDIR/error.lst > $TMPGEN sed -i $TMPGEN \ -e '/^ / d' \ -e '/^SHA1: / d' -e '/^SHA256: / d' \ @@ -34,6 +34,10 @@ sed -i $TMPGEN \ -e '/^Xul-Appid: / d' \ -e '/^Status: / d' +if [ "$CODENAME" = "experimental" ]; then + aptcache show $(cat $WORKDIR/error.lst | cut -d"'" -f 4 | sed -e 's#$#/sid#') --no-all-versions 2> /dev/null >> $TMPGEN +fi + if echo "$GENERATE" | grep '^status-' > /dev/null; then sed -i $TMPGEN -e '/^Package: / a\ Status: install ok installed' \ -- cgit v1.2.3 From 758729c8084a19859d3c9ccf948bb2ec507b0d0c Mon Sep 17 00:00:00 2001 From: David Kalnischkies Date: Sun, 5 Dec 2010 12:59:07 +0100 Subject: check in the DepCache::SetCandidateVersion that the package is marked to be installed before setting the InstallVer as otherwise the Sizes states will be confused in some cases - this can happen now as SetCandidateRelease works also on packages which are not installed now (or will never in the final solution) --- apt-pkg/depcache.cc | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/apt-pkg/depcache.cc b/apt-pkg/depcache.cc index 4a8e53eb3..594c085a5 100644 --- a/apt-pkg/depcache.cc +++ b/apt-pkg/depcache.cc @@ -1523,7 +1523,7 @@ void pkgDepCache::SetCandidateVersion(VerIterator TargetVer, bool const &Pseudo) RemoveSizes(Pkg); RemoveStates(Pkg); - if (P.CandidateVer == P.InstallVer) + if (P.CandidateVer == P.InstallVer && P.Install() == true) P.InstallVer = (Version *)TargetVer; P.CandidateVer = (Version *)TargetVer; P.Update(Pkg,*this); @@ -1570,6 +1570,7 @@ bool pkgDepCache::SetCandidateRelease(pkgCache::VerIterator TargetVer, std::string const &TargetRel, std::list > &Changed) { + ActionGroup group(*this); SetCandidateVersion(TargetVer); if (TargetRel == "installed" || TargetRel == "candidate") // both doesn't make sense in this context -- cgit v1.2.3 From 36f1098aed548651a32a2c15cc9ad80c4330b4d9 Mon Sep 17 00:00:00 2001 From: David Kalnischkies Date: Wed, 12 Jan 2011 17:09:04 +0100 Subject: * apt-pkg/contrib/fileutl.cc: - add a RealFileExists method and check that your configuration files are real files to avoid endless loops if not (Closes: #604401) --- apt-pkg/contrib/fileutl.cc | 20 ++++++- apt-pkg/contrib/fileutl.h | 1 + apt-pkg/depcache.cc | 4 +- apt-pkg/init.cc | 6 +- apt-pkg/policy.cc | 2 +- apt-pkg/sourcelist.cc | 6 +- apt-pkg/vendorlist.cc | 4 +- debian/changelog | 5 +- .../test-bug-604401-files-are-directories | 66 ++++++++++++++++++++++ 9 files changed, 101 insertions(+), 13 deletions(-) create mode 100755 test/integration/test-bug-604401-files-are-directories diff --git a/apt-pkg/contrib/fileutl.cc b/apt-pkg/contrib/fileutl.cc index f4ab066d7..db6057ea3 100644 --- a/apt-pkg/contrib/fileutl.cc +++ b/apt-pkg/contrib/fileutl.cc @@ -191,7 +191,7 @@ int GetLock(string File,bool Errors) /*}}}*/ // FileExists - Check if a file exists /*{{{*/ // --------------------------------------------------------------------- -/* */ +/* Beware: Directories are also files! */ bool FileExists(string File) { struct stat Buf; @@ -200,6 +200,17 @@ bool FileExists(string File) return true; } /*}}}*/ +// RealFileExists - Check if a file exists and if it is really a file /*{{{*/ +// --------------------------------------------------------------------- +/* */ +bool RealFileExists(string File) +{ + struct stat Buf; + if (stat(File.c_str(),&Buf) != 0) + return false; + return ((Buf.st_mode & S_IFREG) != 0); +} + /*}}}*/ // DirectoryExists - Check if a directory exists and is really one /*{{{*/ // --------------------------------------------------------------------- /* */ @@ -304,6 +315,13 @@ std::vector GetListOfFilesInDir(string const &Dir, std::vector c } std::vector List; + + if (DirectoryExists(Dir.c_str()) == false) + { + _error->Error(_("List of files can't be created as '%s' is not a directory"), Dir.c_str()); + return List; + } + Configuration::MatchAgainstConfig SilentIgnore("Dir::Ignore-Files-Silently"); DIR *D = opendir(Dir.c_str()); if (D == 0) diff --git a/apt-pkg/contrib/fileutl.h b/apt-pkg/contrib/fileutl.h index 1380f06b4..146d917d8 100644 --- a/apt-pkg/contrib/fileutl.h +++ b/apt-pkg/contrib/fileutl.h @@ -93,6 +93,7 @@ bool RunScripts(const char *Cnf); bool CopyFile(FileFd &From,FileFd &To); int GetLock(string File,bool Errors = true); bool FileExists(string File); +bool RealFileExists(string File); bool DirectoryExists(string const &Path) __attrib_const; bool CreateDirectory(string const &Parent, string const &Path); diff --git a/apt-pkg/depcache.cc b/apt-pkg/depcache.cc index 594c085a5..d2557386d 100644 --- a/apt-pkg/depcache.cc +++ b/apt-pkg/depcache.cc @@ -167,7 +167,7 @@ bool pkgDepCache::readStateFile(OpProgress *Prog) /*{{{*/ { FileFd state_file; string const state = _config->FindFile("Dir::State::extended_states"); - if(FileExists(state)) { + if(RealFileExists(state)) { state_file.Open(state, FileFd::ReadOnly); int const file_size = state_file.Size(); if(Prog != NULL) @@ -226,7 +226,7 @@ bool pkgDepCache::writeStateFile(OpProgress *prog, bool InstalledOnly) /*{{{*/ string const state = _config->FindFile("Dir::State::extended_states"); // if it does not exist, create a empty one - if(!FileExists(state)) + if(!RealFileExists(state)) { StateFile.Open(state, FileFd::WriteAtomic); StateFile.Close(); diff --git a/apt-pkg/init.cc b/apt-pkg/init.cc index f0bad78df..734f5b2c4 100644 --- a/apt-pkg/init.cc +++ b/apt-pkg/init.cc @@ -94,10 +94,10 @@ bool pkgInitConfig(Configuration &Cnf) const char *Cfg = getenv("APT_CONFIG"); if (Cfg != 0) { - if (FileExists(Cfg) == true) + if (RealFileExists(Cfg) == true) Res &= ReadConfigFile(Cnf,Cfg); else - _error->WarningE("FileExists",_("Unable to read %s"),Cfg); + _error->WarningE("RealFileExists",_("Unable to read %s"),Cfg); } // Read the configuration parts dir @@ -109,7 +109,7 @@ bool pkgInitConfig(Configuration &Cnf) // Read the main config file string FName = Cnf.FindFile("Dir::Etc::main"); - if (FileExists(FName) == true) + if (RealFileExists(FName) == true) Res &= ReadConfigFile(Cnf,FName); if (Res == false) diff --git a/apt-pkg/policy.cc b/apt-pkg/policy.cc index 4f9d56775..f05b6ca49 100644 --- a/apt-pkg/policy.cc +++ b/apt-pkg/policy.cc @@ -328,7 +328,7 @@ bool ReadPinFile(pkgPolicy &Plcy,string File) if (File.empty() == true) File = _config->FindFile("Dir::Etc::Preferences"); - if (FileExists(File) == false) + if (RealFileExists(File) == false) return true; FileFd Fd(File,FileFd::ReadOnly); diff --git a/apt-pkg/sourcelist.cc b/apt-pkg/sourcelist.cc index c3ec9865a..851eefdfe 100644 --- a/apt-pkg/sourcelist.cc +++ b/apt-pkg/sourcelist.cc @@ -197,7 +197,7 @@ bool pkgSourceList::ReadMainList() string Main = _config->FindFile("Dir::Etc::sourcelist"); string Parts = _config->FindDir("Dir::Etc::sourceparts"); - if (FileExists(Main) == true) + if (RealFileExists(Main) == true) Res &= ReadAppend(Main); else if (DirectoryExists(Parts) == false) // Only warn if there are no sources.list.d. @@ -205,9 +205,9 @@ bool pkgSourceList::ReadMainList() if (DirectoryExists(Parts) == true) Res &= ReadSourceDir(Parts); - else if (FileExists(Main) == false) + else if (RealFileExists(Main) == false) // Only warn if there is no sources.list file. - _error->WarningE("FileExists", _("Unable to read %s"), Main.c_str()); + _error->WarningE("RealFileExists", _("Unable to read %s"), Main.c_str()); return Res; } diff --git a/apt-pkg/vendorlist.cc b/apt-pkg/vendorlist.cc index 589997081..92ff38894 100644 --- a/apt-pkg/vendorlist.cc +++ b/apt-pkg/vendorlist.cc @@ -21,11 +21,11 @@ bool pkgVendorList::ReadMainList() Configuration Cnf; string CnfFile = _config->FindDir("Dir::Etc::vendorparts"); - if (FileExists(CnfFile) == true) + if (DirectoryExists(CnfFile) == true) if (ReadConfigDir(Cnf,CnfFile,true) == false) return false; CnfFile = _config->FindFile("Dir::Etc::vendorlist"); - if (FileExists(CnfFile) == true) + if (RealFileExists(CnfFile) == true) if (ReadConfigFile(Cnf,CnfFile,true) == false) return false; diff --git a/debian/changelog b/debian/changelog index 2a0b5a8cf..123b88430 100644 --- a/debian/changelog +++ b/debian/changelog @@ -17,8 +17,11 @@ apt (0.8.11+wheezy) unstable; urgency=low requested on the commandline, e.g. with a modifier * debian/control: - add Vcs-Browser now that loggerhead works again (Closes: #511168) + * apt-pkg/contrib/fileutl.cc: + - add a RealFileExists method and check that your configuration files + are real files to avoid endless loops if not (Closes: #604401) - -- David Kalnischkies Fri, 03 Dec 2010 17:30:52 +0100 + -- David Kalnischkies Wed, 12 Jan 2011 16:53:41 +0100 apt (0.8.10) unstable; urgency=low diff --git a/test/integration/test-bug-604401-files-are-directories b/test/integration/test-bug-604401-files-are-directories new file mode 100755 index 000000000..917fb106f --- /dev/null +++ b/test/integration/test-bug-604401-files-are-directories @@ -0,0 +1,66 @@ +#!/bin/sh +set -e + +local TESTDIR=$(readlink -f $(dirname $0)) +. $TESTDIR/framework +setupenvironment +configarchitecture "i386" +setupaptarchive + +test ! -e rootdir/etc/apt/apt.conf || mv rootdir/etc/apt/apt.conf rootdir/etc/apt/apt.conf.d/000move-away-apt.conf + +msgtest "Directory instead of a file as apt.conf ignored" +mkdir -p rootdir/etc/apt/apt.conf +aptconfig dump > /dev/null && msgpass || msgfail +rmdir rootdir/etc/apt/apt.conf + +msgtest "Good link instead of a file as apt.conf ignored" +echo 'Test::APT::Link "good";' > rootdir/etc/apt/good-link.conf +ln -s rootdir/etc/apt/good-link.conf rootdir/etc/apt/apt.conf +test -n "$(aptconfig shell TestLink 'Test::APT::Link')" && msgfail || msgpass +rm rootdir/etc/apt/apt.conf + +msgtest "Broken link instead of a file as apt.conf ignored" +ln -s /tmp/doesnt-exist rootdir/etc/apt/apt.conf +aptconfig dump > /dev/null && msgpass || msgfail +rm rootdir/etc/apt/apt.conf + + +test ! -e rootdir/etc/apt/sources.list || mv rootdir/etc/apt/sources.list rootdir/etc/apt/sources.list.d/000move-away-sources.list + +msgtest "Directory instead of a file as sources.list ignored" +mkdir -p rootdir/etc/apt/sources.list +aptget update --print-uris 2> /dev/null && msgpass || msgfail +rmdir rootdir/etc/apt/sources.list + +msgtest "Good link instead of a file as sources.list ignored" +echo 'deb file:///tmp/debian sid main' > rootdir/etc/apt/good-link.list +ln -s rootdir/etc/apt/good-link.list rootdir/etc/apt/sources.list +test -n "$(aptget update --print-uris)" && msgfail || msgpass +rm rootdir/etc/apt/sources.list + +msgtest "Broken link instead of a file as sources.list ignored" +ln -s /tmp/doesnt-exist rootdir/etc/apt/sources.list +test -n "$(aptget update --print-uris)" && msgfail || msgpass +rm rootdir/etc/apt/sources.list + + +test ! -e rootdir/etc/apt/preferences || mv rootdir/etc/apt/preferences rootdir/etc/apt/preferences.d/000move-away-preferences + +msgtest "Directory instead of a file as preferences ignored" +mkdir -p rootdir/etc/apt/preferences +aptcache policy > /dev/null 2> /dev/null && msgpass || msgfail +rmdir rootdir/etc/apt/preferences + +msgtest "Good link instead of a file as preferences ignored" +echo 'Package: apt +Pin: release a=now +Pin-Value: 1000' > rootdir/etc/apt/good-link.pref +ln -s rootdir/etc/apt/good-link.pref rootdir/etc/apt/preferences +test -n "$(aptcache policy | grep 1000)" && msgfail || msgpass +rm rootdir/etc/apt/preferences + +msgtest "Broken link instead of a file as preferences ignored" +ln -s /tmp/doesnt-exist rootdir/etc/apt/preferences +aptcache policy > /dev/null 2> /dev/null && msgpass || msgfail +rm rootdir/etc/apt/preferences -- cgit v1.2.3 From c65607c5ecc2c3a16d3432583dd859d6fb2dc3aa Mon Sep 17 00:00:00 2001 From: David Kalnischkies Date: Wed, 12 Jan 2011 17:15:26 +0100 Subject: * apt-pkg/contrib/weakptr.h: - include stddefs.h to fix compile error (undefined NULL) with gcc-4.6 --- apt-pkg/contrib/weakptr.h | 2 ++ debian/changelog | 4 +++- 2 files changed, 5 insertions(+), 1 deletion(-) diff --git a/apt-pkg/contrib/weakptr.h b/apt-pkg/contrib/weakptr.h index 5158e393c..8de727d89 100644 --- a/apt-pkg/contrib/weakptr.h +++ b/apt-pkg/contrib/weakptr.h @@ -22,6 +22,8 @@ #define WEAK_POINTER_H #include +#include + /** * Class for objects providing support for weak pointers. * diff --git a/debian/changelog b/debian/changelog index 123b88430..61b551cc9 100644 --- a/debian/changelog +++ b/debian/changelog @@ -20,8 +20,10 @@ apt (0.8.11+wheezy) unstable; urgency=low * apt-pkg/contrib/fileutl.cc: - add a RealFileExists method and check that your configuration files are real files to avoid endless loops if not (Closes: #604401) + * apt-pkg/contrib/weakptr.h: + - include stddefs.h to fix compile error (undefined NULL) with gcc-4.6 - -- David Kalnischkies Wed, 12 Jan 2011 16:53:41 +0100 + -- David Kalnischkies Wed, 12 Jan 2011 17:14:14 +0100 apt (0.8.10) unstable; urgency=low -- cgit v1.2.3 From cda456d793c0f1e16a9572645caaa11ca636aec3 Mon Sep 17 00:00:00 2001 From: David Kalnischkies Date: Wed, 12 Jan 2011 23:23:36 +0100 Subject: remove two unused variables gcc-4.6 reports from depcache.cc --- apt-pkg/depcache.cc | 5 ++--- 1 file changed, 2 insertions(+), 3 deletions(-) diff --git a/apt-pkg/depcache.cc b/apt-pkg/depcache.cc index d2557386d..5f59b6d49 100644 --- a/apt-pkg/depcache.cc +++ b/apt-pkg/depcache.cc @@ -1330,8 +1330,6 @@ void pkgDepCache::MarkInstall(PkgIterator const &Pkg,bool AutoInst, for (DepIterator D = instVer.DependsList(); D.end() != true; D++) { //FIXME: deal better with or-groups(?) - DepIterator LocalStart = D; - if(IsImportantDep(D) && !D.IsCritical() && Start.TargetPkg() == D.TargetPkg()) { @@ -1921,10 +1919,11 @@ void pkgDepCache::MarkPackage(const pkgCache::PkgIterator &pkg, return; VerIterator const currver = pkg.CurrentVer(); - VerIterator const candver = state.CandidateVerIter(*this); VerIterator const instver = state.InstVerIter(*this); #if 0 + VerIterator const candver = state.CandidateVerIter(*this); + // If a package was garbage-collected but is now being marked, we // should re-select it // For cases when a pkg is set to upgrade and this trigger the -- cgit v1.2.3 From ed0fe654305469c1f9869f308e2f595ac8bc4c13 Mon Sep 17 00:00:00 2001 From: David Kalnischkies Date: Wed, 12 Jan 2011 23:31:37 +0100 Subject: remove the unused Die boolean - error reporting is done by ExecWait --- apt-pkg/deb/dpkgpm.cc | 6 +----- 1 file changed, 1 insertion(+), 5 deletions(-) diff --git a/apt-pkg/deb/dpkgpm.cc b/apt-pkg/deb/dpkgpm.cc index 9f0da3be6..95a3f173b 100644 --- a/apt-pkg/deb/dpkgpm.cc +++ b/apt-pkg/deb/dpkgpm.cc @@ -322,7 +322,6 @@ bool pkgDPkgPM::RunScriptsWithPkgs(const char *Cnf) return _error->Errno("fdopen","Faild to open new FD"); // Feed it the filenames. - bool Die = false; if (Version <= 1) { for (vector::iterator I = List.begin(); I != List.end(); I++) @@ -339,14 +338,11 @@ bool pkgDPkgPM::RunScriptsWithPkgs(const char *Cnf) into the pipe. */ fprintf(F,"%s\n",I->File.c_str()); if (ferror(F) != 0) - { - Die = true; break; - } } } else - Die = !SendV2Pkgs(F); + SendV2Pkgs(F); fclose(F); -- cgit v1.2.3 From e3d26885659348e897774ea6f08f296f4b900781 Mon Sep 17 00:00:00 2001 From: David Kalnischkies Date: Wed, 12 Jan 2011 23:34:56 +0100 Subject: FristOwner is never used in the blamed history and gcc-4.6 complains now --- apt-inst/extract.cc | 4 +--- 1 file changed, 1 insertion(+), 3 deletions(-) diff --git a/apt-inst/extract.cc b/apt-inst/extract.cc index 85363b9a1..cd8edb27a 100644 --- a/apt-inst/extract.cc +++ b/apt-inst/extract.cc @@ -372,7 +372,6 @@ bool pkgExtract::HandleOverwrites(pkgFLCache::NodeIterator Nde, pkgFLCache::NodeIterator TmpNde = Nde; unsigned long DiverOwner = 0; unsigned long FileGroup = Nde->File; - const char *FirstOwner = 0; for (; Nde.end() == false && FileGroup == Nde->File; Nde++) { if ((Nde->Flags & pkgFLCache::Node::Diversion) != 0) @@ -392,8 +391,7 @@ bool pkgExtract::HandleOverwrites(pkgFLCache::NodeIterator Nde, if something has already been diverted by this diversion */ if (FPkg.Offset() == DiverOwner) continue; - FirstOwner = FPkg.Name(); - + // Now see if this package matches one in a replace depends pkgCache::DepIterator Dep = Ver.DependsList(); bool Ok = false; -- cgit v1.2.3 From 52b22cea95a1ba506ee633c1610bf241817ab529 Mon Sep 17 00:00:00 2001 From: David Kalnischkies Date: Wed, 12 Jan 2011 23:46:18 +0100 Subject: * methods/https.cc: - fix CURLOPT_SSL_VERIFYHOST by really passing 2 to it if enabled --- debian/changelog | 4 +- methods/https.cc | 6 +- po/apt-all.pot | 394 ++++++++++++++++++++++++++++--------------------------- 3 files changed, 207 insertions(+), 197 deletions(-) diff --git a/debian/changelog b/debian/changelog index 61b551cc9..81f741d03 100644 --- a/debian/changelog +++ b/debian/changelog @@ -22,8 +22,10 @@ apt (0.8.11+wheezy) unstable; urgency=low are real files to avoid endless loops if not (Closes: #604401) * apt-pkg/contrib/weakptr.h: - include stddefs.h to fix compile error (undefined NULL) with gcc-4.6 + * methods/https.cc: + - fix CURLOPT_SSL_VERIFYHOST by really passing 2 to it if enabled - -- David Kalnischkies Wed, 12 Jan 2011 17:14:14 +0100 + -- David Kalnischkies Wed, 12 Jan 2011 23:46:08 +0100 apt (0.8.10) unstable; urgency=low diff --git a/methods/https.cc b/methods/https.cc index aa6786aa8..fc649d6c2 100644 --- a/methods/https.cc +++ b/methods/https.cc @@ -143,13 +143,11 @@ bool HttpsMethod::Fetch(FetchItem *Itm) curl_easy_setopt(curl, CURLOPT_SSL_VERIFYPEER, peer_verify); // ... and hostname against cert CN or subjectAltName - int default_verify = 2; bool verify = _config->FindB("Acquire::https::Verify-Host",true); knob = "Acquire::https::"+remotehost+"::Verify-Host"; verify = _config->FindB(knob.c_str(),verify); - if (!verify) - default_verify = 0; - curl_easy_setopt(curl, CURLOPT_SSL_VERIFYHOST, verify); + int const default_verify = (verify == true) ? 2 : 0; + curl_easy_setopt(curl, CURLOPT_SSL_VERIFYHOST, default_verify); // Also enforce issuer of server certificate using its cert string issuercert = _config->Find("Acquire::https::IssuerCert",""); diff --git a/po/apt-all.pot b/po/apt-all.pot index 757f685da..71e212509 100644 --- a/po/apt-all.pot +++ b/po/apt-all.pot @@ -7,7 +7,7 @@ msgid "" msgstr "" "Project-Id-Version: PACKAGE VERSION\n" "Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2010-09-28 17:23+0200\n" +"POT-Creation-Date: 2011-01-12 17:42+0100\n" "PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n" "Last-Translator: FULL NAME \n" "Language-Team: LANGUAGE \n" @@ -149,7 +149,7 @@ msgstr "" #: cmdline/apt-cache.cc:1738 cmdline/apt-cdrom.cc:197 cmdline/apt-config.cc:70 #: cmdline/apt-extracttemplates.cc:225 ftparchive/apt-ftparchive.cc:589 -#: cmdline/apt-get.cc:2758 cmdline/apt-sortpkgs.cc:144 +#: cmdline/apt-get.cc:2793 cmdline/apt-sortpkgs.cc:144 #, c-format msgid "%s %s for %s compiled on %s %s\n" msgstr "" @@ -616,75 +616,70 @@ msgstr "" msgid "The following held packages will be changed:" msgstr "" -#: cmdline/apt-get.cc:561 +#: cmdline/apt-get.cc:563 #, c-format msgid "%s (due to %s) " msgstr "" -#: cmdline/apt-get.cc:569 +#: cmdline/apt-get.cc:571 msgid "" "WARNING: The following essential packages will be removed.\n" "This should NOT be done unless you know exactly what you are doing!" msgstr "" -#: cmdline/apt-get.cc:603 +#: cmdline/apt-get.cc:605 #, c-format msgid "%lu upgraded, %lu newly installed, " msgstr "" -#: cmdline/apt-get.cc:607 +#: cmdline/apt-get.cc:609 #, c-format msgid "%lu reinstalled, " msgstr "" -#: cmdline/apt-get.cc:609 +#: cmdline/apt-get.cc:611 #, c-format msgid "%lu downgraded, " msgstr "" -#: cmdline/apt-get.cc:611 +#: cmdline/apt-get.cc:613 #, c-format msgid "%lu to remove and %lu not upgraded.\n" msgstr "" -#: cmdline/apt-get.cc:615 +#: cmdline/apt-get.cc:617 #, c-format msgid "%lu not fully installed or removed.\n" msgstr "" -#: cmdline/apt-get.cc:635 +#: cmdline/apt-get.cc:639 #, c-format msgid "Note, selecting '%s' for task '%s'\n" msgstr "" -#: cmdline/apt-get.cc:641 +#: cmdline/apt-get.cc:645 #, c-format msgid "Note, selecting '%s' for regex '%s'\n" msgstr "" -#: cmdline/apt-get.cc:648 -#, c-format -msgid "Selected version '%s' (%s) for '%s'\n" -msgstr "" - -#: cmdline/apt-get.cc:658 +#: cmdline/apt-get.cc:662 #, c-format msgid "Package %s is a virtual package provided by:\n" msgstr "" -#: cmdline/apt-get.cc:669 +#: cmdline/apt-get.cc:673 msgid " [Installed]" msgstr "" -#: cmdline/apt-get.cc:678 +#: cmdline/apt-get.cc:682 msgid " [Not candidate version]" msgstr "" -#: cmdline/apt-get.cc:680 +#: cmdline/apt-get.cc:684 msgid "You should explicitly select one to install." msgstr "" -#: cmdline/apt-get.cc:683 +#: cmdline/apt-get.cc:687 #, c-format msgid "" "Package %s is not available, but is referred to by another package.\n" @@ -692,167 +687,177 @@ msgid "" "is only available from another source\n" msgstr "" -#: cmdline/apt-get.cc:701 +#: cmdline/apt-get.cc:705 msgid "However the following packages replace it:" msgstr "" -#: cmdline/apt-get.cc:713 +#: cmdline/apt-get.cc:717 #, c-format msgid "Package '%s' has no installation candidate" msgstr "" -#: cmdline/apt-get.cc:724 +#: cmdline/apt-get.cc:728 #, c-format msgid "Virtual packages like '%s' can't be removed\n" msgstr "" -#: cmdline/apt-get.cc:755 +#: cmdline/apt-get.cc:759 #, c-format msgid "Note, selecting '%s' instead of '%s'\n" msgstr "" -#: cmdline/apt-get.cc:785 +#: cmdline/apt-get.cc:789 #, c-format msgid "Skipping %s, it is already installed and upgrade is not set.\n" msgstr "" -#: cmdline/apt-get.cc:789 +#: cmdline/apt-get.cc:793 #, c-format msgid "Skipping %s, it is not installed and only upgrades are requested.\n" msgstr "" -#: cmdline/apt-get.cc:799 +#: cmdline/apt-get.cc:803 #, c-format msgid "Reinstallation of %s is not possible, it cannot be downloaded.\n" msgstr "" -#: cmdline/apt-get.cc:804 +#: cmdline/apt-get.cc:808 #, c-format msgid "%s is already the newest version.\n" msgstr "" -#: cmdline/apt-get.cc:823 cmdline/apt-get.cc:1992 +#: cmdline/apt-get.cc:827 cmdline/apt-get.cc:2027 #, c-format msgid "%s set to manually installed.\n" msgstr "" -#: cmdline/apt-get.cc:863 +#: cmdline/apt-get.cc:853 +#, c-format +msgid "Selected version '%s' (%s) for '%s'\n" +msgstr "" + +#: cmdline/apt-get.cc:858 +#, c-format +msgid "Selected version '%s' (%s) for '%s' because of '%s'\n" +msgstr "" + +#: cmdline/apt-get.cc:898 #, c-format msgid "Package %s is not installed, so not removed\n" msgstr "" -#: cmdline/apt-get.cc:938 +#: cmdline/apt-get.cc:973 msgid "Correcting dependencies..." msgstr "" -#: cmdline/apt-get.cc:941 +#: cmdline/apt-get.cc:976 msgid " failed." msgstr "" -#: cmdline/apt-get.cc:944 +#: cmdline/apt-get.cc:979 msgid "Unable to correct dependencies" msgstr "" -#: cmdline/apt-get.cc:947 +#: cmdline/apt-get.cc:982 msgid "Unable to minimize the upgrade set" msgstr "" -#: cmdline/apt-get.cc:949 +#: cmdline/apt-get.cc:984 msgid " Done" msgstr "" -#: cmdline/apt-get.cc:953 +#: cmdline/apt-get.cc:988 msgid "You might want to run 'apt-get -f install' to correct these." msgstr "" -#: cmdline/apt-get.cc:956 +#: cmdline/apt-get.cc:991 msgid "Unmet dependencies. Try using -f." msgstr "" -#: cmdline/apt-get.cc:981 +#: cmdline/apt-get.cc:1016 msgid "WARNING: The following packages cannot be authenticated!" msgstr "" -#: cmdline/apt-get.cc:985 +#: cmdline/apt-get.cc:1020 msgid "Authentication warning overridden.\n" msgstr "" -#: cmdline/apt-get.cc:992 +#: cmdline/apt-get.cc:1027 msgid "Install these packages without verification [y/N]? " msgstr "" -#: cmdline/apt-get.cc:994 +#: cmdline/apt-get.cc:1029 msgid "Some packages could not be authenticated" msgstr "" -#: cmdline/apt-get.cc:1003 cmdline/apt-get.cc:1166 +#: cmdline/apt-get.cc:1038 cmdline/apt-get.cc:1199 msgid "There are problems and -y was used without --force-yes" msgstr "" -#: cmdline/apt-get.cc:1044 +#: cmdline/apt-get.cc:1079 msgid "Internal error, InstallPackages was called with broken packages!" msgstr "" -#: cmdline/apt-get.cc:1053 +#: cmdline/apt-get.cc:1088 msgid "Packages need to be removed but remove is disabled." msgstr "" -#: cmdline/apt-get.cc:1064 +#: cmdline/apt-get.cc:1099 msgid "Internal error, Ordering didn't finish" msgstr "" -#: cmdline/apt-get.cc:1104 +#: cmdline/apt-get.cc:1137 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 #. in the replacement strings, so %sB will be correctly translate in e.g. 1,5 MB -#: cmdline/apt-get.cc:1111 +#: cmdline/apt-get.cc:1144 #, c-format msgid "Need to get %sB/%sB of archives.\n" msgstr "" #. TRANSLATOR: The required space between number and unit is already included #. in the replacement string, so %sB will be correctly translate in e.g. 1,5 MB -#: cmdline/apt-get.cc:1116 +#: cmdline/apt-get.cc:1149 #, c-format msgid "Need to get %sB of archives.\n" msgstr "" #. TRANSLATOR: The required space between number and unit is already included #. in the replacement string, so %sB will be correctly translate in e.g. 1,5 MB -#: cmdline/apt-get.cc:1123 +#: cmdline/apt-get.cc:1156 #, c-format msgid "After this operation, %sB of additional disk space will be used.\n" msgstr "" #. TRANSLATOR: The required space between number and unit is already included #. in the replacement string, so %sB will be correctly translate in e.g. 1,5 MB -#: cmdline/apt-get.cc:1128 +#: cmdline/apt-get.cc:1161 #, c-format msgid "After this operation, %sB disk space will be freed.\n" msgstr "" -#: cmdline/apt-get.cc:1143 cmdline/apt-get.cc:1146 cmdline/apt-get.cc:2332 -#: cmdline/apt-get.cc:2335 +#: cmdline/apt-get.cc:1176 cmdline/apt-get.cc:1179 cmdline/apt-get.cc:2367 +#: cmdline/apt-get.cc:2370 #, c-format msgid "Couldn't determine free space in %s" msgstr "" -#: cmdline/apt-get.cc:1156 +#: cmdline/apt-get.cc:1189 #, c-format msgid "You don't have enough free space in %s." msgstr "" -#: cmdline/apt-get.cc:1172 cmdline/apt-get.cc:1192 +#: cmdline/apt-get.cc:1205 cmdline/apt-get.cc:1225 msgid "Trivial Only specified but this is not a trivial operation." msgstr "" -#: cmdline/apt-get.cc:1174 +#: cmdline/apt-get.cc:1207 msgid "Yes, do as I say!" msgstr "" -#: cmdline/apt-get.cc:1176 +#: cmdline/apt-get.cc:1209 #, c-format msgid "" "You are about to do something potentially harmful.\n" @@ -860,46 +865,46 @@ msgid "" " ?] " msgstr "" -#: cmdline/apt-get.cc:1182 cmdline/apt-get.cc:1201 +#: cmdline/apt-get.cc:1215 cmdline/apt-get.cc:1234 msgid "Abort." msgstr "" -#: cmdline/apt-get.cc:1197 +#: cmdline/apt-get.cc:1230 msgid "Do you want to continue [Y/n]? " msgstr "" -#: cmdline/apt-get.cc:1269 cmdline/apt-get.cc:2392 apt-pkg/algorithms.cc:1462 +#: cmdline/apt-get.cc:1302 cmdline/apt-get.cc:2427 apt-pkg/algorithms.cc:1470 #, c-format msgid "Failed to fetch %s %s\n" msgstr "" -#: cmdline/apt-get.cc:1287 +#: cmdline/apt-get.cc:1320 msgid "Some files failed to download" msgstr "" -#: cmdline/apt-get.cc:1288 cmdline/apt-get.cc:2401 +#: cmdline/apt-get.cc:1321 cmdline/apt-get.cc:2436 msgid "Download complete and in download only mode" msgstr "" -#: cmdline/apt-get.cc:1294 +#: cmdline/apt-get.cc:1327 msgid "" "Unable to fetch some archives, maybe run apt-get update or try with --fix-" "missing?" msgstr "" -#: cmdline/apt-get.cc:1298 +#: cmdline/apt-get.cc:1331 msgid "--fix-missing and media swapping is not currently supported" msgstr "" -#: cmdline/apt-get.cc:1303 +#: cmdline/apt-get.cc:1336 msgid "Unable to correct missing packages." msgstr "" -#: cmdline/apt-get.cc:1304 +#: cmdline/apt-get.cc:1337 msgid "Aborting install." msgstr "" -#: cmdline/apt-get.cc:1332 +#: cmdline/apt-get.cc:1365 msgid "" "The following package disappeared from your system as\n" "all files have been overwritten by other packages:" @@ -909,56 +914,35 @@ msgid_plural "" msgstr[0] "" msgstr[1] "" -#: cmdline/apt-get.cc:1336 +#: cmdline/apt-get.cc:1369 msgid "Note: This is done automatic and on purpose by dpkg." msgstr "" -#: cmdline/apt-get.cc:1466 +#: cmdline/apt-get.cc:1499 #, c-format msgid "Ignore unavailable target release '%s' of package '%s'" msgstr "" -#: cmdline/apt-get.cc:1498 +#: cmdline/apt-get.cc:1531 #, c-format msgid "Picking '%s' as source package instead of '%s'\n" msgstr "" #. if (VerTag.empty() == false && Last == 0) -#: cmdline/apt-get.cc:1536 +#: cmdline/apt-get.cc:1569 #, c-format msgid "Ignore unavailable version '%s' of package '%s'" msgstr "" -#: cmdline/apt-get.cc:1552 +#: cmdline/apt-get.cc:1585 msgid "The update command takes no arguments" msgstr "" -#: cmdline/apt-get.cc:1618 +#: cmdline/apt-get.cc:1647 msgid "We are not supposed to delete stuff, can't start AutoRemover" msgstr "" -#: cmdline/apt-get.cc:1666 -msgid "" -"The following package was automatically installed and is no longer required:" -msgid_plural "" -"The following packages were automatically installed and are no longer " -"required:" -msgstr[0] "" -msgstr[1] "" - -#: cmdline/apt-get.cc:1670 -#, c-format -msgid "%lu package was automatically installed and is no longer required.\n" -msgid_plural "" -"%lu packages were automatically installed and are no longer required.\n" -msgstr[0] "" -msgstr[1] "" - -#: cmdline/apt-get.cc:1672 -msgid "Use 'apt-get autoremove' to remove them." -msgstr "" - -#: cmdline/apt-get.cc:1677 +#: cmdline/apt-get.cc:1699 msgid "" "Hmm, seems like the AutoRemover destroyed something which really\n" "shouldn't happen. Please file a bug report against apt." @@ -974,29 +958,50 @@ msgstr "" #. "that package should be filed.") << endl; #. } #. -#: cmdline/apt-get.cc:1680 cmdline/apt-get.cc:1822 +#: cmdline/apt-get.cc:1702 cmdline/apt-get.cc:1858 msgid "The following information may help to resolve the situation:" msgstr "" -#: cmdline/apt-get.cc:1684 +#: cmdline/apt-get.cc:1706 msgid "Internal Error, AutoRemover broke stuff" msgstr "" -#: cmdline/apt-get.cc:1703 +#: cmdline/apt-get.cc:1713 +msgid "" +"The following package was automatically installed and is no longer required:" +msgid_plural "" +"The following packages were automatically installed and are no longer " +"required:" +msgstr[0] "" +msgstr[1] "" + +#: cmdline/apt-get.cc:1717 +#, c-format +msgid "%lu package was automatically installed and is no longer required.\n" +msgid_plural "" +"%lu packages were automatically installed and are no longer required.\n" +msgstr[0] "" +msgstr[1] "" + +#: cmdline/apt-get.cc:1719 +msgid "Use 'apt-get autoremove' to remove them." +msgstr "" + +#: cmdline/apt-get.cc:1738 msgid "Internal error, AllUpgrade broke stuff" msgstr "" -#: cmdline/apt-get.cc:1792 +#: cmdline/apt-get.cc:1828 msgid "You might want to run 'apt-get -f install' to correct these:" msgstr "" -#: cmdline/apt-get.cc:1795 +#: cmdline/apt-get.cc:1831 msgid "" "Unmet dependencies. Try 'apt-get -f install' with no packages (or specify a " "solution)." msgstr "" -#: cmdline/apt-get.cc:1807 +#: cmdline/apt-get.cc:1843 msgid "" "Some packages could not be installed. This may mean that you have\n" "requested an impossible situation or if you are using the unstable\n" @@ -1004,69 +1009,69 @@ msgid "" "or been moved out of Incoming." msgstr "" -#: cmdline/apt-get.cc:1825 +#: cmdline/apt-get.cc:1861 msgid "Broken packages" msgstr "" -#: cmdline/apt-get.cc:1854 +#: cmdline/apt-get.cc:1889 msgid "The following extra packages will be installed:" msgstr "" -#: cmdline/apt-get.cc:1944 +#: cmdline/apt-get.cc:1979 msgid "Suggested packages:" msgstr "" -#: cmdline/apt-get.cc:1945 +#: cmdline/apt-get.cc:1980 msgid "Recommended packages:" msgstr "" -#: cmdline/apt-get.cc:1987 +#: cmdline/apt-get.cc:2022 #, c-format msgid "Couldn't find package %s" msgstr "" -#: cmdline/apt-get.cc:1994 +#: cmdline/apt-get.cc:2029 #, c-format msgid "%s set to automatically installed.\n" msgstr "" -#: cmdline/apt-get.cc:2015 +#: cmdline/apt-get.cc:2050 msgid "Calculating upgrade... " msgstr "" -#: cmdline/apt-get.cc:2018 methods/ftp.cc:707 methods/connect.cc:111 +#: cmdline/apt-get.cc:2053 methods/ftp.cc:707 methods/connect.cc:111 msgid "Failed" msgstr "" -#: cmdline/apt-get.cc:2023 +#: cmdline/apt-get.cc:2058 msgid "Done" msgstr "" -#: cmdline/apt-get.cc:2090 cmdline/apt-get.cc:2098 +#: cmdline/apt-get.cc:2125 cmdline/apt-get.cc:2133 msgid "Internal error, problem resolver broke stuff" msgstr "" -#: cmdline/apt-get.cc:2122 cmdline/apt-get.cc:2155 +#: cmdline/apt-get.cc:2157 cmdline/apt-get.cc:2190 msgid "Unable to lock the download directory" msgstr "" -#: cmdline/apt-get.cc:2198 +#: cmdline/apt-get.cc:2233 msgid "Must specify at least one package to fetch source for" msgstr "" -#: cmdline/apt-get.cc:2238 cmdline/apt-get.cc:2519 +#: cmdline/apt-get.cc:2273 cmdline/apt-get.cc:2554 #, c-format msgid "Unable to find a source package for %s" msgstr "" -#: cmdline/apt-get.cc:2254 +#: cmdline/apt-get.cc:2289 #, c-format msgid "" "NOTICE: '%s' packaging is maintained in the '%s' version control system at:\n" "%s\n" msgstr "" -#: cmdline/apt-get.cc:2259 +#: cmdline/apt-get.cc:2294 #, c-format msgid "" "Please use:\n" @@ -1074,115 +1079,115 @@ msgid "" "to retrieve the latest (possibly unreleased) updates to the package.\n" msgstr "" -#: cmdline/apt-get.cc:2310 +#: cmdline/apt-get.cc:2345 #, c-format msgid "Skipping already downloaded file '%s'\n" msgstr "" -#: cmdline/apt-get.cc:2345 +#: cmdline/apt-get.cc:2380 #, c-format msgid "You don't have enough free space in %s" msgstr "" #. 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 -#: cmdline/apt-get.cc:2353 +#: cmdline/apt-get.cc:2388 #, c-format msgid "Need to get %sB/%sB of source archives.\n" msgstr "" #. TRANSLATOR: The required space between number and unit is already included #. in the replacement string, so %sB will be correctly translate in e.g. 1,5 MB -#: cmdline/apt-get.cc:2358 +#: cmdline/apt-get.cc:2393 #, c-format msgid "Need to get %sB of source archives.\n" msgstr "" -#: cmdline/apt-get.cc:2364 +#: cmdline/apt-get.cc:2399 #, c-format msgid "Fetch source %s\n" msgstr "" -#: cmdline/apt-get.cc:2397 +#: cmdline/apt-get.cc:2432 msgid "Failed to fetch some archives." msgstr "" -#: cmdline/apt-get.cc:2427 +#: cmdline/apt-get.cc:2462 #, c-format msgid "Skipping unpack of already unpacked source in %s\n" msgstr "" -#: cmdline/apt-get.cc:2439 +#: cmdline/apt-get.cc:2474 #, c-format msgid "Unpack command '%s' failed.\n" msgstr "" -#: cmdline/apt-get.cc:2440 +#: cmdline/apt-get.cc:2475 #, c-format msgid "Check if the 'dpkg-dev' package is installed.\n" msgstr "" -#: cmdline/apt-get.cc:2457 +#: cmdline/apt-get.cc:2492 #, c-format msgid "Build command '%s' failed.\n" msgstr "" -#: cmdline/apt-get.cc:2477 +#: cmdline/apt-get.cc:2512 msgid "Child process failed" msgstr "" -#: cmdline/apt-get.cc:2493 +#: cmdline/apt-get.cc:2528 msgid "Must specify at least one package to check builddeps for" msgstr "" -#: cmdline/apt-get.cc:2524 +#: cmdline/apt-get.cc:2559 #, c-format msgid "Unable to get build-dependency information for %s" msgstr "" -#: cmdline/apt-get.cc:2544 +#: cmdline/apt-get.cc:2579 #, c-format msgid "%s has no build depends.\n" msgstr "" -#: cmdline/apt-get.cc:2595 +#: cmdline/apt-get.cc:2630 #, c-format msgid "" "%s dependency for %s cannot be satisfied because the package %s cannot be " "found" msgstr "" -#: cmdline/apt-get.cc:2648 +#: cmdline/apt-get.cc:2683 #, c-format msgid "" "%s dependency for %s cannot be satisfied because no available versions of " "package %s can satisfy version requirements" msgstr "" -#: cmdline/apt-get.cc:2684 +#: cmdline/apt-get.cc:2719 #, c-format msgid "Failed to satisfy %s dependency for %s: Installed package %s is too new" msgstr "" -#: cmdline/apt-get.cc:2711 +#: cmdline/apt-get.cc:2746 #, c-format msgid "Failed to satisfy %s dependency for %s: %s" msgstr "" -#: cmdline/apt-get.cc:2727 +#: cmdline/apt-get.cc:2762 #, c-format msgid "Build-dependencies for %s could not be satisfied." msgstr "" -#: cmdline/apt-get.cc:2732 +#: cmdline/apt-get.cc:2767 msgid "Failed to process build dependencies" msgstr "" -#: cmdline/apt-get.cc:2763 +#: cmdline/apt-get.cc:2798 msgid "Supported modules:" msgstr "" -#: cmdline/apt-get.cc:2804 +#: cmdline/apt-get.cc:2839 msgid "" "Usage: apt-get [options] command\n" " apt-get [options] install|remove pkg1 [pkg2 ...]\n" @@ -1228,7 +1233,7 @@ msgid "" " This APT has Super Cow Powers.\n" msgstr "" -#: cmdline/apt-get.cc:2960 +#: cmdline/apt-get.cc:2995 msgid "" "NOTE: This is only a simulation!\n" " apt-get needs root privileges for real execution.\n" @@ -1236,33 +1241,33 @@ msgid "" " so don't depend on the relevance to the real current situation!" msgstr "" -#: cmdline/acqprogress.cc:55 +#: cmdline/acqprogress.cc:57 msgid "Hit " msgstr "" -#: cmdline/acqprogress.cc:79 +#: cmdline/acqprogress.cc:81 msgid "Get:" msgstr "" -#: cmdline/acqprogress.cc:110 +#: cmdline/acqprogress.cc:112 msgid "Ign " msgstr "" -#: cmdline/acqprogress.cc:114 +#: cmdline/acqprogress.cc:116 msgid "Err " msgstr "" -#: cmdline/acqprogress.cc:135 +#: cmdline/acqprogress.cc:137 #, c-format msgid "Fetched %sB in %s (%sB/s)\n" msgstr "" -#: cmdline/acqprogress.cc:225 +#: cmdline/acqprogress.cc:227 #, c-format msgid " [Working]" msgstr "" -#: cmdline/acqprogress.cc:271 +#: cmdline/acqprogress.cc:283 #, c-format msgid "" "Media change: please insert the disc labeled\n" @@ -1459,7 +1464,7 @@ msgstr "" #. Only warn if there are no sources.list.d. #. Only warn if there is no sources.list file. #: apt-inst/extract.cc:464 apt-pkg/contrib/cdromutl.cc:179 -#: apt-pkg/contrib/fileutl.cc:311 apt-pkg/sourcelist.cc:204 +#: apt-pkg/contrib/fileutl.cc:329 apt-pkg/sourcelist.cc:204 #: apt-pkg/sourcelist.cc:210 apt-pkg/acquire.cc:450 apt-pkg/init.cc:100 #: apt-pkg/init.cc:108 apt-pkg/clean.cc:33 apt-pkg/policy.cc:307 #: methods/mirror.cc:87 @@ -1698,7 +1703,7 @@ msgstr "" msgid "Server closed the connection" msgstr "" -#: methods/ftp.cc:344 apt-pkg/contrib/fileutl.cc:784 methods/rsh.cc:190 +#: methods/ftp.cc:344 apt-pkg/contrib/fileutl.cc:802 methods/rsh.cc:190 msgid "Read error" msgstr "" @@ -1710,7 +1715,7 @@ msgstr "" msgid "Protocol corruption" msgstr "" -#: methods/ftp.cc:452 apt-pkg/contrib/fileutl.cc:826 methods/rsh.cc:232 +#: methods/ftp.cc:452 apt-pkg/contrib/fileutl.cc:844 methods/rsh.cc:232 msgid "Write error" msgstr "" @@ -2175,72 +2180,77 @@ msgstr "" msgid "Could not get lock %s" msgstr "" -#: apt-pkg/contrib/fileutl.cc:643 +#: apt-pkg/contrib/fileutl.cc:321 +#, c-format +msgid "List of files can't be created as '%s' is not a directory" +msgstr "" + +#: apt-pkg/contrib/fileutl.cc:661 #, c-format msgid "Waited for %s but it wasn't there" msgstr "" -#: apt-pkg/contrib/fileutl.cc:655 +#: apt-pkg/contrib/fileutl.cc:673 #, c-format msgid "Sub-process %s received a segmentation fault." msgstr "" -#: apt-pkg/contrib/fileutl.cc:657 +#: apt-pkg/contrib/fileutl.cc:675 #, c-format msgid "Sub-process %s received signal %u." msgstr "" -#: apt-pkg/contrib/fileutl.cc:661 +#: apt-pkg/contrib/fileutl.cc:679 #, c-format msgid "Sub-process %s returned an error code (%u)" msgstr "" -#: apt-pkg/contrib/fileutl.cc:663 +#: apt-pkg/contrib/fileutl.cc:681 #, c-format msgid "Sub-process %s exited unexpectedly" msgstr "" -#: apt-pkg/contrib/fileutl.cc:728 +#: apt-pkg/contrib/fileutl.cc:746 #, c-format msgid "Could not open file %s" msgstr "" -#: apt-pkg/contrib/fileutl.cc:745 +#: apt-pkg/contrib/fileutl.cc:763 #, c-format msgid "Could not open file descriptor %d" msgstr "" -#: apt-pkg/contrib/fileutl.cc:805 +#: apt-pkg/contrib/fileutl.cc:823 #, c-format msgid "read, still have %lu to read but none left" msgstr "" -#: apt-pkg/contrib/fileutl.cc:838 +#: apt-pkg/contrib/fileutl.cc:856 #, c-format msgid "write, still have %lu to write but couldn't" msgstr "" -#: apt-pkg/contrib/fileutl.cc:937 +#: apt-pkg/contrib/fileutl.cc:985 #, c-format msgid "Problem closing the gzip file %s" msgstr "" -#: apt-pkg/contrib/fileutl.cc:940 +#: apt-pkg/contrib/fileutl.cc:988 #, c-format msgid "Problem closing the file %s" msgstr "" -#: apt-pkg/contrib/fileutl.cc:945 +#: apt-pkg/contrib/fileutl.cc:993 #, c-format msgid "Problem renaming the file %s to %s" msgstr "" -#: apt-pkg/contrib/fileutl.cc:956 +#: apt-pkg/contrib/fileutl.cc:1004 #, c-format msgid "Problem unlinking the file %s" msgstr "" -#: apt-pkg/contrib/fileutl.cc:969 +#: apt-pkg/contrib/fileutl.cc:1017 msgid "Problem syncing the file" msgstr "" @@ -2321,33 +2331,33 @@ msgstr "" msgid "extra" msgstr "" -#: apt-pkg/depcache.cc:124 apt-pkg/depcache.cc:153 +#: apt-pkg/depcache.cc:125 apt-pkg/depcache.cc:154 msgid "Building dependency tree" msgstr "" -#: apt-pkg/depcache.cc:125 +#: apt-pkg/depcache.cc:126 msgid "Candidate versions" msgstr "" -#: apt-pkg/depcache.cc:154 +#: apt-pkg/depcache.cc:155 msgid "Dependency generation" msgstr "" -#: apt-pkg/depcache.cc:174 apt-pkg/depcache.cc:207 apt-pkg/depcache.cc:211 +#: apt-pkg/depcache.cc:175 apt-pkg/depcache.cc:208 apt-pkg/depcache.cc:212 msgid "Reading state information" msgstr "" -#: apt-pkg/depcache.cc:236 +#: apt-pkg/depcache.cc:237 #, c-format msgid "Failed to open StateFile %s" msgstr "" -#: apt-pkg/depcache.cc:242 +#: apt-pkg/depcache.cc:243 #, c-format msgid "Failed to write temporary StateFile %s" msgstr "" -#: apt-pkg/depcache.cc:921 +#: apt-pkg/depcache.cc:922 #, c-format msgid "Internal error, group '%s' has no installable pseudo package" msgstr "" @@ -2465,17 +2475,17 @@ msgid "" "The package %s needs to be reinstalled, but I can't find an archive for it." msgstr "" -#: apt-pkg/algorithms.cc:1210 +#: apt-pkg/algorithms.cc:1218 msgid "" "Error, pkgProblemResolver::Resolve generated breaks, this may be caused by " "held packages." msgstr "" -#: apt-pkg/algorithms.cc:1212 +#: apt-pkg/algorithms.cc:1220 msgid "Unable to correct problems, you have held broken packages." msgstr "" -#: apt-pkg/algorithms.cc:1488 apt-pkg/algorithms.cc:1490 +#: apt-pkg/algorithms.cc:1496 apt-pkg/algorithms.cc:1498 msgid "" "Some index files failed to download, they have been ignored, or old ones " "used instead." @@ -2923,12 +2933,12 @@ msgstr "" msgid "Installing %s" msgstr "" -#: apt-pkg/deb/dpkgpm.cc:53 apt-pkg/deb/dpkgpm.cc:822 +#: apt-pkg/deb/dpkgpm.cc:53 apt-pkg/deb/dpkgpm.cc:823 #, c-format msgid "Configuring %s" msgstr "" -#: apt-pkg/deb/dpkgpm.cc:54 apt-pkg/deb/dpkgpm.cc:829 +#: apt-pkg/deb/dpkgpm.cc:54 apt-pkg/deb/dpkgpm.cc:830 #, c-format msgid "Removing %s" msgstr "" @@ -2954,87 +2964,87 @@ msgstr "" msgid "Directory '%s' missing" msgstr "" -#: apt-pkg/deb/dpkgpm.cc:661 apt-pkg/deb/dpkgpm.cc:674 +#: apt-pkg/deb/dpkgpm.cc:661 apt-pkg/deb/dpkgpm.cc:675 #, c-format msgid "Could not open file '%s'" msgstr "" -#: apt-pkg/deb/dpkgpm.cc:815 +#: apt-pkg/deb/dpkgpm.cc:816 #, c-format msgid "Preparing %s" msgstr "" -#: apt-pkg/deb/dpkgpm.cc:816 +#: apt-pkg/deb/dpkgpm.cc:817 #, c-format msgid "Unpacking %s" msgstr "" -#: apt-pkg/deb/dpkgpm.cc:821 +#: apt-pkg/deb/dpkgpm.cc:822 #, c-format msgid "Preparing to configure %s" msgstr "" -#: apt-pkg/deb/dpkgpm.cc:823 +#: apt-pkg/deb/dpkgpm.cc:824 #, c-format msgid "Installed %s" msgstr "" -#: apt-pkg/deb/dpkgpm.cc:828 +#: apt-pkg/deb/dpkgpm.cc:829 #, c-format msgid "Preparing for removal of %s" msgstr "" -#: apt-pkg/deb/dpkgpm.cc:830 +#: apt-pkg/deb/dpkgpm.cc:831 #, c-format msgid "Removed %s" msgstr "" -#: apt-pkg/deb/dpkgpm.cc:835 +#: apt-pkg/deb/dpkgpm.cc:836 #, c-format msgid "Preparing to completely remove %s" msgstr "" -#: apt-pkg/deb/dpkgpm.cc:836 +#: apt-pkg/deb/dpkgpm.cc:837 #, c-format msgid "Completely removed %s" msgstr "" -#: apt-pkg/deb/dpkgpm.cc:1042 +#: apt-pkg/deb/dpkgpm.cc:1043 msgid "Can not write log, openpty() failed (/dev/pts not mounted?)\n" msgstr "" -#: apt-pkg/deb/dpkgpm.cc:1073 +#: apt-pkg/deb/dpkgpm.cc:1074 msgid "Running dpkg" msgstr "" -#: apt-pkg/deb/dpkgpm.cc:1276 +#: apt-pkg/deb/dpkgpm.cc:1277 msgid "No apport report written because MaxReports is reached already" msgstr "" #. check if its not a follow up error -#: apt-pkg/deb/dpkgpm.cc:1281 +#: apt-pkg/deb/dpkgpm.cc:1282 msgid "dependency problems - leaving unconfigured" msgstr "" -#: apt-pkg/deb/dpkgpm.cc:1283 +#: apt-pkg/deb/dpkgpm.cc:1284 msgid "" "No apport report written because the error message indicates its a followup " "error from a previous failure." msgstr "" -#: apt-pkg/deb/dpkgpm.cc:1289 +#: apt-pkg/deb/dpkgpm.cc:1290 msgid "" "No apport report written because the error message indicates a disk full " "error" msgstr "" -#: apt-pkg/deb/dpkgpm.cc:1295 +#: apt-pkg/deb/dpkgpm.cc:1296 msgid "" "No apport report written because the error message indicates a out of memory " "error" msgstr "" -#: apt-pkg/deb/dpkgpm.cc:1302 +#: apt-pkg/deb/dpkgpm.cc:1303 msgid "" "No apport report written because the error message indicates a dpkg I/O error" msgstr "" -- cgit v1.2.3 From 23f3cfd036630c1c8f84159c60986f67167066e8 Mon Sep 17 00:00:00 2001 From: Petter Reinholdtsen Date: Wed, 12 Jan 2011 23:57:03 +0100 Subject: * deb/dpkgpm.cc: - fix popen/fclose mismatch reported by cppcheck. Thanks to Petter Reinholdtsen for report and patch! (Closes: #607803) --- apt-pkg/deb/dpkgpm.cc | 4 ++-- debian/changelog | 5 ++++- 2 files changed, 6 insertions(+), 3 deletions(-) diff --git a/apt-pkg/deb/dpkgpm.cc b/apt-pkg/deb/dpkgpm.cc index 95a3f173b..3b10e1a23 100644 --- a/apt-pkg/deb/dpkgpm.cc +++ b/apt-pkg/deb/dpkgpm.cc @@ -1411,7 +1411,7 @@ void pkgDPkgPM::WriteApportReport(const char *pkgpath, const char *errormsg) { while( fgets(buf, sizeof(buf), log) != NULL) fprintf(report, " %s", buf); - fclose(log); + pclose(log); } } @@ -1427,7 +1427,7 @@ void pkgDPkgPM::WriteApportReport(const char *pkgpath, const char *errormsg) { while( fgets(buf, sizeof(buf), log) != NULL) fprintf(report, " %s", buf); - fclose(log); + pclose(log); } } diff --git a/debian/changelog b/debian/changelog index 81f741d03..dde28c635 100644 --- a/debian/changelog +++ b/debian/changelog @@ -24,8 +24,11 @@ apt (0.8.11+wheezy) unstable; urgency=low - include stddefs.h to fix compile error (undefined NULL) with gcc-4.6 * methods/https.cc: - fix CURLOPT_SSL_VERIFYHOST by really passing 2 to it if enabled + * deb/dpkgpm.cc: + - fix popen/fclose mismatch reported by cppcheck. Thanks to Petter + Reinholdtsen for report and patch! (Closes: #607803) - -- David Kalnischkies Wed, 12 Jan 2011 23:46:08 +0100 + -- David Kalnischkies Wed, 12 Jan 2011 23:53:32 +0100 apt (0.8.10) unstable; urgency=low -- cgit v1.2.3 From 1fc0d435891dc9496a71a680032918dab2372e6d Mon Sep 17 00:00:00 2001 From: Jakub Wilk Date: Thu, 13 Jan 2011 00:01:27 +0100 Subject: * doc/apt.conf.5.xml: - fix multipl{y,e} spelling error reported by Jakub Wilk (Closes: #607636) --- debian/changelog | 4 +++- doc/apt.conf.5.xml | 2 +- 2 files changed, 4 insertions(+), 2 deletions(-) diff --git a/debian/changelog b/debian/changelog index dde28c635..6028cc8f4 100644 --- a/debian/changelog +++ b/debian/changelog @@ -27,8 +27,10 @@ apt (0.8.11+wheezy) unstable; urgency=low * deb/dpkgpm.cc: - fix popen/fclose mismatch reported by cppcheck. Thanks to Petter Reinholdtsen for report and patch! (Closes: #607803) + * doc/apt.conf.5.xml: + - fix multipl{y,e} spelling error reported by Jakub Wilk (Closes: #607636) - -- David Kalnischkies Wed, 12 Jan 2011 23:53:32 +0100 + -- David Kalnischkies Wed, 12 Jan 2011 23:59:38 +0100 apt (0.8.10) unstable; urgency=low diff --git a/doc/apt.conf.5.xml b/doc/apt.conf.5.xml index f00baacea..a19d85dbc 100644 --- a/doc/apt.conf.5.xml +++ b/doc/apt.conf.5.xml @@ -618,7 +618,7 @@ DPkg::Pre-Install-Pkgs {"/usr/sbin/dpkg-preconfigure --apt";}; dpkg trigger usage (and related options) APT can call dpkg in a way so it can make aggressive use of triggers over - multiply calls of dpkg. Without further options dpkg will use triggers only in between his + multiple calls of dpkg. Without further options dpkg will use triggers only in between his own run. Activating these options can therefore decrease the time needed to perform the install / upgrade. Note that it is intended to activate these options per default in the future, but as it changes the way APT calling dpkg drastically it needs a lot more testing. -- cgit v1.2.3 From c55b8a54780c4db6a5fa270ddd2d05ab837f6ffb Mon Sep 17 00:00:00 2001 From: David Kalnischkies Date: Thu, 13 Jan 2011 17:16:11 +0100 Subject: * apt-pkg/cacheiterator.h: - do not segfault if cache is not build (Closes: #254770) --- apt-pkg/cacheiterators.h | 18 +++---- apt-pkg/policy.cc | 2 + debian/changelog | 4 +- ...test-bug-254770-segfault-if-cache-not-buildable | 57 ++++++++++++++++++++++ 4 files changed, 71 insertions(+), 10 deletions(-) create mode 100755 test/integration/test-bug-254770-segfault-if-cache-not-buildable diff --git a/apt-pkg/cacheiterators.h b/apt-pkg/cacheiterators.h index 26070636e..449d4b441 100644 --- a/apt-pkg/cacheiterators.h +++ b/apt-pkg/cacheiterators.h @@ -96,7 +96,7 @@ class pkgCache::GrpIterator: public Iterator { protected: inline Group* OwnerPointer() const { - return Owner->GrpP; + return (Owner != 0) ? Owner->GrpP : 0; }; public: @@ -137,7 +137,7 @@ class pkgCache::PkgIterator: public Iterator { protected: inline Package* OwnerPointer() const { - return Owner->PkgP; + return (Owner != 0) ? Owner->PkgP : 0; }; public: @@ -184,7 +184,7 @@ class pkgCache::PkgIterator: public Iterator { class pkgCache::VerIterator : public Iterator { protected: inline Version* OwnerPointer() const { - return Owner->VerP; + return (Owner != 0) ? Owner->VerP : 0; }; public: @@ -241,7 +241,7 @@ class pkgCache::VerIterator : public Iterator { class pkgCache::DescIterator : public Iterator { protected: inline Description* OwnerPointer() const { - return Owner->DescP; + return (Owner != 0) ? Owner->DescP : 0; }; public: @@ -270,7 +270,7 @@ class pkgCache::DepIterator : public Iterator { protected: inline Dependency* OwnerPointer() const { - return Owner->DepP; + return (Owner != 0) ? Owner->DepP : 0; }; public: @@ -315,7 +315,7 @@ class pkgCache::PrvIterator : public Iterator { protected: inline Provides* OwnerPointer() const { - return Owner->ProvideP; + return (Owner != 0) ? Owner->ProvideP : 0; }; public: @@ -349,7 +349,7 @@ class pkgCache::PrvIterator : public Iterator { class pkgCache::PkgFileIterator : public Iterator { protected: inline PackageFile* OwnerPointer() const { - return Owner->PkgFileP; + return (Owner != 0) ? Owner->PkgFileP : 0; }; public: @@ -382,7 +382,7 @@ class pkgCache::PkgFileIterator : public Iterator class pkgCache::VerFileIterator : public pkgCache::Iterator { protected: inline VerFile* OwnerPointer() const { - return Owner->VerFileP; + return (Owner != 0) ? Owner->VerFileP : 0; }; public: @@ -401,7 +401,7 @@ class pkgCache::VerFileIterator : public pkgCache::Iterator { protected: inline DescFile* OwnerPointer() const { - return Owner->DescFileP; + return (Owner != 0) ? Owner->DescFileP : 0; }; public: diff --git a/apt-pkg/policy.cc b/apt-pkg/policy.cc index f05b6ca49..5427271b6 100644 --- a/apt-pkg/policy.cc +++ b/apt-pkg/policy.cc @@ -45,6 +45,8 @@ using namespace std; file matches the V0 policy engine. */ pkgPolicy::pkgPolicy(pkgCache *Owner) : Pins(0), PFPriority(0), Cache(Owner) { + if (Owner == 0 || &(Owner->Head()) == 0) + return; PFPriority = new signed short[Owner->Head().PackageFileCount]; Pins = new Pin[Owner->Head().PackageCount]; diff --git a/debian/changelog b/debian/changelog index 3a59ac171..febd259c0 100644 --- a/debian/changelog +++ b/debian/changelog @@ -32,8 +32,10 @@ apt (0.8.11+wheezy) unstable; urgency=low * apt-inst/contrib/extracttar.cc: - let apt-utils work with encoded tar headers if uid/gid are large. Thanks to Nobuhiro Hayashi for the patch! (Closes: #330162) + * apt-pkg/cacheiterator.h: + - do not segfault if cache is not build (Closes: #254770) - -- David Kalnischkies Thu, 13 Jan 2011 00:25:32 +0100 + -- David Kalnischkies Thu, 13 Jan 2011 17:10:36 +0100 apt (0.8.10) unstable; urgency=low diff --git a/test/integration/test-bug-254770-segfault-if-cache-not-buildable b/test/integration/test-bug-254770-segfault-if-cache-not-buildable new file mode 100755 index 000000000..25c564daa --- /dev/null +++ b/test/integration/test-bug-254770-segfault-if-cache-not-buildable @@ -0,0 +1,57 @@ +#!/bin/sh +set -e + +local TESTDIR=$(readlink -f $(dirname $0)) +. $TESTDIR/framework +setupenvironment +configarchitecture "i386" +setupaptarchive + +CURRENTTRAP="chmod a+x rootdir/var/lib/dpkg; $CURRENTTRAP" +trap "$CURRENTTRAP" 0 HUP INT QUIT ILL ABRT FPE SEGV PIPE TERM +chmod a-x rootdir/var/lib/dpkg + +testsegfault() { + rm -f rootdir/var/cache/apt/*.bin + msgtest "No segfault in" "$*" + local TEST="$($* 2>&1 | grep -v 'E:')" + if [ -z "$TEST" ]; then + msgpass + else + echo + echo $TEST + msgfail + fi +} + +echo 'quiet 2;' > rootdir/etc/apt/apt.conf.d/00be-quiet + +testsegfault aptcache gencaches +testsegfault aptcache showpkg +testsegfault aptcache showsrc +testsegfault aptcache stats +testsegfault aptcache dump +testsegfault aptcache dumpavail +testsegfault aptcache unmet +testsegfault aptcache search +testsegfault aptcache show apt +testsegfault aptcache depends apt +testsegfault aptcache rdepends apt +testsegfault aptcache pkgnames apt +testsegfault aptcache dotty apt +testsegfault aptcache xvcg apt +testsegfault aptcache policy apt + +testsegfault aptget update +testsegfault aptget upgrade +testsegfault aptget dselect-upgrade +testsegfault aptget dist-upgrade +testsegfault aptget install apt +testsegfault aptget remove apt +testsegfault aptget purge apt +testsegfault aptget source apt +testsegfault aptget build-dep apt +testsegfault aptget check +testsegfault aptget clean +testsegfault aptget autoclean +testsegfault aptget autoremove -- cgit v1.2.3 From 491058e3570ec66769c4e7e9797f549c6d724848 Mon Sep 17 00:00:00 2001 From: David Kalnischkies Date: Thu, 13 Jan 2011 23:22:17 +0100 Subject: ignore non-regular files in GetListOfFilesInDir (Closes: #594694) --- apt-pkg/contrib/fileutl.cc | 28 ++++++++++++++++------------ debian/changelog | 3 ++- test/libapt/run-tests | 5 +++++ 3 files changed, 23 insertions(+), 13 deletions(-) diff --git a/apt-pkg/contrib/fileutl.cc b/apt-pkg/contrib/fileutl.cc index db6057ea3..52f517ee0 100644 --- a/apt-pkg/contrib/fileutl.cc +++ b/apt-pkg/contrib/fileutl.cc @@ -336,6 +336,20 @@ std::vector GetListOfFilesInDir(string const &Dir, std::vector c if (Ent->d_name[0] == '.') continue; + // Make sure it is a file and not something else + string const File = flCombine(Dir,Ent->d_name); +#ifdef _DIRENT_HAVE_D_TYPE + if (Ent->d_type != DT_REG) +#endif + { + if (RealFileExists(File.c_str()) == false) + { + if (SilentIgnore.Match(Ent->d_name) == false) + _error->Notice(_("Ignoring '%s' in directory '%s' as it is not a regular file"), Ent->d_name, Dir.c_str()); + continue; + } + } + // check for accepted extension: // no extension given -> periods are bad as hell! // extensions given -> "" extension allows no extension @@ -349,7 +363,7 @@ std::vector GetListOfFilesInDir(string const &Dir, std::vector c if (Debug == true) std::clog << "Bad file: " << Ent->d_name << " → no extension" << std::endl; if (SilentIgnore.Match(Ent->d_name) == false) - _error->Notice("Ignoring file '%s' in directory '%s' as it has no filename extension", Ent->d_name, Dir.c_str()); + _error->Notice(_("Ignoring file '%s' in directory '%s' as it has no filename extension"), Ent->d_name, Dir.c_str()); continue; } } @@ -358,7 +372,7 @@ std::vector GetListOfFilesInDir(string const &Dir, std::vector c if (Debug == true) std::clog << "Bad file: " << Ent->d_name << " → bad extension »" << flExtension(Ent->d_name) << "«" << std::endl; if (SilentIgnore.Match(Ent->d_name) == false) - _error->Notice("Ignoring file '%s' in directory '%s' as it has an invalid filename extension", Ent->d_name, Dir.c_str()); + _error->Notice(_("Ignoring file '%s' in directory '%s' as it has an invalid filename extension"), Ent->d_name, Dir.c_str()); continue; } } @@ -391,16 +405,6 @@ std::vector GetListOfFilesInDir(string const &Dir, std::vector c continue; } - // Make sure it is a file and not something else - string const File = flCombine(Dir,Ent->d_name); - struct stat St; - if (stat(File.c_str(),&St) != 0 || S_ISREG(St.st_mode) == 0) - { - if (Debug == true) - std::clog << "Bad file: " << Ent->d_name << " → stat says not a good file" << std::endl; - continue; - } - if (Debug == true) std::clog << "Accept file: " << Ent->d_name << " in " << Dir << std::endl; List.push_back(File); diff --git a/debian/changelog b/debian/changelog index febd259c0..ca5d4f235 100644 --- a/debian/changelog +++ b/debian/changelog @@ -20,6 +20,7 @@ apt (0.8.11+wheezy) unstable; urgency=low * apt-pkg/contrib/fileutl.cc: - add a RealFileExists method and check that your configuration files are real files to avoid endless loops if not (Closes: #604401) + - ignore non-regular files in GetListOfFilesInDir (Closes: #594694) * apt-pkg/contrib/weakptr.h: - include stddefs.h to fix compile error (undefined NULL) with gcc-4.6 * methods/https.cc: @@ -35,7 +36,7 @@ apt (0.8.11+wheezy) unstable; urgency=low * apt-pkg/cacheiterator.h: - do not segfault if cache is not build (Closes: #254770) - -- David Kalnischkies Thu, 13 Jan 2011 17:10:36 +0100 + -- David Kalnischkies Thu, 13 Jan 2011 23:19:03 +0100 apt (0.8.10) unstable; urgency=low diff --git a/test/libapt/run-tests b/test/libapt/run-tests index f5fc03446..a66de386d 100755 --- a/test/libapt/run-tests +++ b/test/libapt/run-tests @@ -39,6 +39,11 @@ do "${tmppath}/invälid.conf" \ "${tmppath}/invalíd" \ "${tmppath}/01invalíd" + mkdir "${tmppath}/invaliddir" \ + "${tmppath}/directory.conf" \ + "${tmppath}/directory.list" \ + "${tmppath}/directory.wron" \ + "${tmppath}/directory.list.disabled" ln -s "${tmppath}/anormalfile" "${tmppath}/linkedfile.list" ln -s "${tmppath}/non-existing-file" "${tmppath}/brokenlink.list" elif [ $name = "getLanguages${EXT}" ]; then -- cgit v1.2.3 From 39ad9b28cf43f121b410bd5874eebe9934c81482 Mon Sep 17 00:00:00 2001 From: David Kalnischkies Date: Thu, 13 Jan 2011 23:47:01 +0100 Subject: * doc/apt-get.8.xml: - remove duplicated mentioning of --install-recommends --- debian/changelog | 4 +++- doc/apt-get.8.xml | 8 -------- 2 files changed, 3 insertions(+), 9 deletions(-) diff --git a/debian/changelog b/debian/changelog index ca5d4f235..4e50172c6 100644 --- a/debian/changelog +++ b/debian/changelog @@ -35,8 +35,10 @@ apt (0.8.11+wheezy) unstable; urgency=low Thanks to Nobuhiro Hayashi for the patch! (Closes: #330162) * apt-pkg/cacheiterator.h: - do not segfault if cache is not build (Closes: #254770) + * doc/apt-get.8.xml: + - remove duplicated mentioning of --install-recommends - -- David Kalnischkies Thu, 13 Jan 2011 23:19:03 +0100 + -- David Kalnischkies Thu, 13 Jan 2011 23:46:23 +0100 apt (0.8.10) unstable; urgency=low diff --git a/doc/apt-get.8.xml b/doc/apt-get.8.xml index 57306c03f..1f14c6bd5 100644 --- a/doc/apt-get.8.xml +++ b/doc/apt-get.8.xml @@ -411,14 +411,6 @@ Configuration Item: APT::Get::Compile. - - Also install recommended packages. - - - - Do not install recommended packages. - - Ignore package Holds; This causes apt-get to ignore a hold placed on a package. This may be useful in conjunction with -- cgit v1.2.3 From cbd5fc0a6c666768ab8a127b9caabc6ee7a95b64 Mon Sep 17 00:00:00 2001 From: David Kalnischkies Date: Fri, 14 Jan 2011 00:48:33 +0100 Subject: Add a testcase to verify that packages which are held back by dpkg are not causing installation/removal of other packages (#64141) --- ...ages-bug-64141-install-dependencies-for-on-hold | 42 ++++++++++++++++++++++ ...atus-bug-64141-install-dependencies-for-on-hold | 33 +++++++++++++++++ ...test-bug-64141-install-dependencies-for-on-hold | 34 ++++++++++++++++++ 3 files changed, 109 insertions(+) create mode 100644 test/integration/Packages-bug-64141-install-dependencies-for-on-hold create mode 100644 test/integration/status-bug-64141-install-dependencies-for-on-hold create mode 100755 test/integration/test-bug-64141-install-dependencies-for-on-hold diff --git a/test/integration/Packages-bug-64141-install-dependencies-for-on-hold b/test/integration/Packages-bug-64141-install-dependencies-for-on-hold new file mode 100644 index 000000000..7005fa4f4 --- /dev/null +++ b/test/integration/Packages-bug-64141-install-dependencies-for-on-hold @@ -0,0 +1,42 @@ +Package: apt +Priority: important +Section: admin +Installed-Size: 6048 +Maintainer: APT Development Team +Architecture: i386 +Version: 0.8.10 +Provides: libapt-pkg4.10 +Depends: libc6 (>= 2.10), libdb4.8 +Breaks: oldcrap +Filename: pool/main/a/apt/apt_0.8.10_i386.deb +Size: 2160758 +MD5sum: 5aa2234f7b91056d430669cddf6e6e50 +Description: Advanced front-end for dpkg + +Package: libc6 +Priority: required +Section: libs +Installed-Size: 9356 +Maintainer: GNU Libc Maintainers +Architecture: i386 +Source: eglibc +Version: 2.11.2-7 +Provides: glibc-2.11-1 +Filename: pool/main/e/eglibc/libc6_2.11.2-7_i386.deb +Size: 3880868 +MD5sum: c48fd2854fc62125824267d086600793 +Description: Embedded GNU C Library: Shared libraries + +Package: libdb4.8 +Priority: standard +Section: libs +Installed-Size: 1488 +Maintainer: Clint Adams +Architecture: i386 +Source: db4.8 +Version: 4.8.30-3 +Depends: libc6 (>= 2.3.6-6~) +Filename: pool/main/d/db4.8/libdb4.8_4.8.30-3_i386.deb +Size: 681988 +MD5sum: 0d58c15898a95436d2ec480aa22693ff +Description: Berkeley v4.8 Database Libraries [runtime] diff --git a/test/integration/status-bug-64141-install-dependencies-for-on-hold b/test/integration/status-bug-64141-install-dependencies-for-on-hold new file mode 100644 index 000000000..c82ebd19c --- /dev/null +++ b/test/integration/status-bug-64141-install-dependencies-for-on-hold @@ -0,0 +1,33 @@ +Package: apt +Status: install ok installed +Priority: important +Section: admin +Installed-Size: 6048 +Maintainer: APT Development Team +Architecture: i386 +Version: 0.8.9 +Provides: libapt-pkg4.10 +Depends: libc6 (>= 2.3.4) +Description: Advanced front-end for dpkg + +Package: libc6 +Status: install ok installed +Priority: required +Section: libs +Installed-Size: 9356 +Maintainer: GNU Libc Maintainers +Architecture: i386 +Source: eglibc +Version: 2.3.5-7 +Provides: glibc-2.11-1 +Description: Embedded GNU C Library: Shared libraries + +Package: oldcrap +Status: install ok installed +Priority: extra +Section: oldlibs +Installed-Size: 1 +Maintainer: Joe Sixpack +Architecture: all +Version: 1-1 +Description: Old crappy nothing package diff --git a/test/integration/test-bug-64141-install-dependencies-for-on-hold b/test/integration/test-bug-64141-install-dependencies-for-on-hold new file mode 100755 index 000000000..4633ffcc3 --- /dev/null +++ b/test/integration/test-bug-64141-install-dependencies-for-on-hold @@ -0,0 +1,34 @@ +#!/bin/sh +set -e + +TESTDIR=$(readlink -f $(dirname $0)) +. $TESTDIR/framework +setupenvironment +configarchitecture "i386" +setupaptarchive + +testequal 'Reading package lists... +Building dependency tree... +The following packages will be REMOVED: + oldcrap +The following NEW packages will be installed: + libdb4.8 +The following packages will be upgraded: + apt libc6 +2 upgraded, 1 newly installed, 1 to remove and 0 not upgraded. +Need to get 0 B/6724 kB of archives. +After this operation, 1523 kB of additional disk space will be used. +E: Trivial Only specified but this is not a trivial operation.' aptget dist-upgrade --trivial-only + +echo 'apt hold' | dpkg --set-selections + +testequal 'Reading package lists... +Building dependency tree... +The following packages have been kept back: + apt +The following packages will be upgraded: + libc6 +1 upgraded, 0 newly installed, 0 to remove and 1 not upgraded. +Need to get 0 B/3881 kB of archives. +After this operation, 0 B of additional disk space will be used. +E: Trivial Only specified but this is not a trivial operation.' aptget dist-upgrade --trivial-only -o Test='hold-back-apt' -- cgit v1.2.3 From 8b39570568ce96d3afd84c397b6722bc12104e9e Mon Sep 17 00:00:00 2001 From: David Kalnischkies Date: Fri, 14 Jan 2011 01:50:55 +0100 Subject: remove duplicated text and refer to the sources.list manpage instead --- doc/files.sgml | 80 +++------------------------------------------------------- 1 file changed, 4 insertions(+), 76 deletions(-) diff --git a/doc/files.sgml b/doc/files.sgml index 108e73670..2d0ae4a44 100644 --- a/doc/files.sgml +++ b/doc/files.sgml @@ -118,82 +118,10 @@ fastest source listed first. The format of each line is:

The first item, type, indicates the format for the remainder of the line. It is designed to indicate the structure of the distribution -the line is talking about. Currently the only defined value is deb -which indicates a standard debian archive with a dists dir. - -The deb Type -

- The deb type is to be a typical two level debian distributions, - dist/distribution/component. Typically distribution - is one of stable, unstable or testing while component is one of main, - contrib, non-free or non-us. The format for the deb line is as follows: - -

- deb uri distribution component - [component ...] - -

- uri for the deb type must specify the base of the - debian distribution. APT will automatically generate the proper longer - URIs to get the information it needs. distribution can specify - an exact path, in this case the components must be omitted and - distribution must end in a slash. - -

- Since only one distribution can be specified per deb line it may be - necessary to list a number of deb lines for the same URI. APT will - sort the URI list after it has generated a complete set to allow - connection reuse. It is important to order things in the sourcelist - from most preferred to least preferred (fastest to slowest). - - -URI specification -

-URIs in the source list support a large number of access schemes which -are listed in the sources.list manpage and can be further extended by -transport binaries placed in /usr/lib/apt/methods. The most important -builtin schemes are: - - -cdrom - The cdrom scheme is special in that If Modified Since queries are never - performed and that APT knows how to match a cdrom to the name it - was given when first inserted. APT also knows all of the possible - mount points the cdrom drives and that the user should be prompted - to insert a CD if it cannot be found. The path is relative to an - arbitrary mount point (of APT's choosing) and must not start with a - slash. The first pathname component is the given name and is purely - descriptive and of the users choice. However, if a file in the root of - the cdrom is called '.disk/info' its contents will be used instead of - prompting. The name serves as a tag for the cdrom and should be unique. - - cdrom:Debian 1.3/debian - - -http - This scheme specifies a HTTP server for the debian archive. HTTP is preferred - over FTP because If Modified Since queries against the Package file are - possible as well as deep pipelining and resume capabilities. - - http://www.debian.org/archive - - -ftp - This scheme specifies a FTP connection to the server. FTP is limited because - there is no support for IMS and is hard to proxy over firewalls. - - ftp://ftp.debian.org/debian - - -file - The file scheme allows an arbitrary directory in the file system to be - considered as a debian archive. This is useful for NFS mounts and - local mirrors/archives. - - file:/var/debian - - - +the line is talking about. Currently the only defined values are deb +and deb-src which indicate a standard debian (source) archive with a +dists directory. More about these types and the URI specification can be found +in the sources.list manpage. Hashing the URI

-- cgit v1.2.3 From 3805b0a7ff4fa4b18367f0328a744402d0d21d3b Mon Sep 17 00:00:00 2001 From: David Kalnischkies Date: Fri, 14 Jan 2011 01:54:24 +0100 Subject: * doc/sources.list.5.xml: - remove obsolete references to non-us (Closes: #594495) --- debian/changelog | 4 +++- doc/sources.list.5.xml | 30 +++++++++++++----------------- 2 files changed, 16 insertions(+), 18 deletions(-) diff --git a/debian/changelog b/debian/changelog index 4e50172c6..326ac7c98 100644 --- a/debian/changelog +++ b/debian/changelog @@ -37,8 +37,10 @@ apt (0.8.11+wheezy) unstable; urgency=low - do not segfault if cache is not build (Closes: #254770) * doc/apt-get.8.xml: - remove duplicated mentioning of --install-recommends + * doc/sources.list.5.xml: + - remove obsolete references to non-us (Closes: #594495) - -- David Kalnischkies Thu, 13 Jan 2011 23:46:23 +0100 + -- David Kalnischkies Fri, 14 Jan 2011 01:51:50 +0100 apt (0.8.10) unstable; urgency=low diff --git a/doc/sources.list.5.xml b/doc/sources.list.5.xml index 6029a7457..212ed6d98 100644 --- a/doc/sources.list.5.xml +++ b/doc/sources.list.5.xml @@ -63,11 +63,11 @@ The deb and deb-src types The deb type describes a typical two-level Debian archive, distribution/component. Typically, - distribution is generally one of - stable unstable or - testing while component is one of main - contrib non-free or - non-us. The + distribution is generally an archivename like + stable or testing or a codename like + &stable-codename; or &testing-codename; + while component is one of main contrib or + non-free. The deb-src type describes a debian distribution's source code in the same form as the deb type. A deb-src line is required to fetch source indexes. @@ -218,18 +218,14 @@ deb http://security.debian.org/ &stable-codename;/updates main contrib non-free a single FTP session will be used for both resource lines. deb ftp://ftp.debian.org/debian unstable contrib - Uses HTTP to access the archive at nonus.debian.org, under the - debian-non-US directory. - deb http://nonus.debian.org/debian-non-US stable/non-US main contrib non-free - - Uses HTTP to access the archive at nonus.debian.org, under the - debian-non-US directory, and uses only files found under - unstable/binary-i386 on i386 machines, - unstable/binary-m68k on m68k, and so - forth for other supported architectures. [Note this example only - illustrates how to use the substitution variable; non-us is no longer - structured like this] - deb http://ftp.de.debian.org/debian-non-US unstable/binary-$(ARCH)/ + Uses HTTP to access the archive at ftp.tlh.debian.org, under the + universe directory, and uses only files found under + unstable/binary-i386 on i386 machines, + unstable/binary-amd64 on amd64, and so + forth for other supported architectures. [Note this example only + illustrates how to use the substitution variable; official debian + archives are not structured like this] + deb http://ftp.tlh.debian.org/universe unstable/binary-$(ARCH)/ -- cgit v1.2.3 From d064809654a66129bd75d52cfb1764d7592798b9 Mon Sep 17 00:00:00 2001 From: David Kalnischkies Date: Fri, 14 Jan 2011 12:40:08 +0100 Subject: * debian/rules: - use -- instead of deprecated -u for dh_gencontrol --- debian/changelog | 4 +++- debian/rules | 8 ++++---- 2 files changed, 7 insertions(+), 5 deletions(-) diff --git a/debian/changelog b/debian/changelog index 326ac7c98..8ae1c459a 100644 --- a/debian/changelog +++ b/debian/changelog @@ -39,8 +39,10 @@ apt (0.8.11+wheezy) unstable; urgency=low - remove duplicated mentioning of --install-recommends * doc/sources.list.5.xml: - remove obsolete references to non-us (Closes: #594495) + * debian/rules: + - use -- instead of deprecated -u for dh_gencontrol - -- David Kalnischkies Fri, 14 Jan 2011 01:51:50 +0100 + -- David Kalnischkies Fri, 14 Jan 2011 12:39:24 +0100 apt (0.8.10) unstable; urgency=low diff --git a/debian/rules b/debian/rules index ea8f0daa0..fbd309e97 100755 --- a/debian/rules +++ b/debian/rules @@ -147,7 +147,7 @@ libapt-pkg-doc: build-doc debian/shlibs.local dh_compress -p$@ dh_fixperms -p$@ dh_installdeb -p$@ - dh_gencontrol -p$@ -u -Vlibapt-pkg:provides=$(LIBAPTPKG_PROVIDE) + dh_gencontrol -p$@ -- -Vlibapt-pkg:provides=$(LIBAPTPKG_PROVIDE) dh_md5sums -p$@ dh_builddeb -p$@ @@ -229,7 +229,7 @@ apt: build build-doc debian/shlibs.local dh_makeshlibs -p$@ --major=$(LIBAPTPKG_MAJOR) --version-info='$(LIBAPTPKG_PROVIDE)' dh_installdeb -p$@ dh_shlibdeps -p$@ -l$(CURDIR)/debian/apt/usr/lib:$(CURDIR)/debian/$@/usr/lib -- -Ldebian/shlibs.local.apt - dh_gencontrol -p$@ -u -Vlibapt-pkg:provides=$(LIBAPTPKG_PROVIDE) + dh_gencontrol -p$@ -- -Vlibapt-pkg:provides=$(LIBAPTPKG_PROVIDE) dh_md5sums -p$@ dh_builddeb -p$@ @@ -253,7 +253,7 @@ libapt-pkg-dev: build debian/shlibs.local dh_compress -p$@ dh_fixperms -p$@ dh_installdeb -p$@ - dh_gencontrol -p$@ -u -Vlibapt-pkg:provides=$(LIBAPTPKG_PROVIDE) -Vlibapt-inst:provides=$(LIBAPTINST_PROVIDE) + dh_gencontrol -p$@ -- -Vlibapt-pkg:provides=$(LIBAPTPKG_PROVIDE) -Vlibapt-inst:provides=$(LIBAPTINST_PROVIDE) dh_md5sums -p$@ dh_builddeb -p$@ @@ -282,7 +282,7 @@ apt-utils: build debian/shlibs.local dh_makeshlibs -p$@ --major=$(LIBAPTINST_MAJOR) --version-info='$(LIBAPTINST_PROVIDE)' dh_installdeb -p$@ dh_shlibdeps -p$@ -l$(CURDIR)/debian/apt/usr/lib:$(CURDIR)/debian/$@/usr/lib -- -Ldebian/shlibs.local.apt-utils - dh_gencontrol -p$@ -u -Vlibapt-inst:provides=$(LIBAPTINST_PROVIDE) + dh_gencontrol -p$@ -- -Vlibapt-inst:provides=$(LIBAPTINST_PROVIDE) dh_md5sums -p$@ dh_builddeb -p$@ -- cgit v1.2.3 From c8eb7d6e3a1d2dad1b6ac2f65c1a0a1d4bfabdf9 Mon Sep 17 00:00:00 2001 From: David Kalnischkies Date: Fri, 14 Jan 2011 13:23:56 +0100 Subject: depend on debhelper 7 to raise compat level --- debian/changelog | 3 ++- debian/compat | 2 +- debian/control | 2 +- 3 files changed, 4 insertions(+), 3 deletions(-) diff --git a/debian/changelog b/debian/changelog index 8ae1c459a..5c016d6bd 100644 --- a/debian/changelog +++ b/debian/changelog @@ -17,6 +17,7 @@ apt (0.8.11+wheezy) unstable; urgency=low requested on the commandline, e.g. with a modifier * debian/control: - add Vcs-Browser now that loggerhead works again (Closes: #511168) + - depend on debhelper 7 to raise compat level * apt-pkg/contrib/fileutl.cc: - add a RealFileExists method and check that your configuration files are real files to avoid endless loops if not (Closes: #604401) @@ -42,7 +43,7 @@ apt (0.8.11+wheezy) unstable; urgency=low * debian/rules: - use -- instead of deprecated -u for dh_gencontrol - -- David Kalnischkies Fri, 14 Jan 2011 12:39:24 +0100 + -- David Kalnischkies Fri, 14 Jan 2011 13:23:08 +0100 apt (0.8.10) unstable; urgency=low diff --git a/debian/compat b/debian/compat index 7ed6ff82d..7f8f011eb 100644 --- a/debian/compat +++ b/debian/compat @@ -1 +1 @@ -5 +7 diff --git a/debian/control b/debian/control index c4dedd496..a079ad19c 100644 --- a/debian/control +++ b/debian/control @@ -6,7 +6,7 @@ Uploaders: Michael Vogt , Otavio Salvador , Christian Perrier , Daniel Burrows , Luca Bruno , Julian Andres Klode Standards-Version: 3.9.0 -Build-Depends: debhelper (>= 5.0), libdb-dev, gettext (>= 0.12), libcurl4-gnutls-dev (>= 7.19.0), zlib1g-dev | libz-dev, debiandoc-sgml, xsltproc, docbook-xsl, docbook-xml, po4a (>= 0.34-2), autotools-dev, autoconf, automake, doxygen +Build-Depends: debhelper (>= 7), libdb-dev, gettext (>= 0.12), libcurl4-gnutls-dev (>= 7.19.0), zlib1g-dev | libz-dev, debiandoc-sgml, xsltproc, docbook-xsl, docbook-xml, po4a (>= 0.34-2), autotools-dev, autoconf, automake, doxygen Build-Conflicts: autoconf2.13, automake1.4 Vcs-Bzr: http://bzr.debian.org/apt/debian-sid/ Vcs-Browser: http://bzr.debian.org/loggerhead/apt/debian-sid/ -- cgit v1.2.3 From 767bcf7826768ed8de7226d2b172a6436c727400 Mon Sep 17 00:00:00 2001 From: David Kalnischkies Date: Fri, 14 Jan 2011 14:36:57 +0100 Subject: fix the invalid wrong locale month name in NEWS file --- debian/NEWS | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/debian/NEWS b/debian/NEWS index c90cff6b2..59b319b86 100644 --- a/debian/NEWS +++ b/debian/NEWS @@ -5,7 +5,7 @@ apt (0.8.11+wheezy) UNRELEASED; urgency=low but also of all dependencies of pkg if the current candidate can't satisfy a versioned dependency. - -- David Kalnischkies Fri, 03 Dez 2010 14:09:12 +0100 + -- David Kalnischkies Fri, 03 Dec 2010 14:09:12 +0100 apt (0.7.26~exp3) experimental; urgency=low -- cgit v1.2.3 From 8d13be63fb62d683bf41d32295652c0780421cd4 Mon Sep 17 00:00:00 2001 From: David Kalnischkies Date: Fri, 14 Jan 2011 14:41:09 +0100 Subject: * pre-build.sh: - remove as it is not needed for a working 'bzr bd' --- .bzr-builddeb/default.conf | 3 --- debian/changelog | 4 +++- pre-build.sh | 3 --- 3 files changed, 3 insertions(+), 7 deletions(-) delete mode 100755 pre-build.sh diff --git a/.bzr-builddeb/default.conf b/.bzr-builddeb/default.conf index f2c082569..9c55498ce 100644 --- a/.bzr-builddeb/default.conf +++ b/.bzr-builddeb/default.conf @@ -1,5 +1,2 @@ [BUILDDEB] native = true - -[HOOKS] -pre-build=./pre-build.sh diff --git a/debian/changelog b/debian/changelog index 5c016d6bd..8dcdc93ff 100644 --- a/debian/changelog +++ b/debian/changelog @@ -42,8 +42,10 @@ apt (0.8.11+wheezy) unstable; urgency=low - remove obsolete references to non-us (Closes: #594495) * debian/rules: - use -- instead of deprecated -u for dh_gencontrol + * pre-build.sh: + - remove as it is not needed for a working 'bzr bd' - -- David Kalnischkies Fri, 14 Jan 2011 13:23:08 +0100 + -- David Kalnischkies Fri, 14 Jan 2011 14:40:35 +0100 apt (0.8.10) unstable; urgency=low diff --git a/pre-build.sh b/pre-build.sh deleted file mode 100755 index 2c7d28c2c..000000000 --- a/pre-build.sh +++ /dev/null @@ -1,3 +0,0 @@ -#!/bin/sh - -make -f Makefile startup doc -- cgit v1.2.3 From 149daa16569b1763ab0ed76cc1fd80455980eddc Mon Sep 17 00:00:00 2001 From: David Kalnischkies Date: Sat, 15 Jan 2011 02:43:13 +0100 Subject: * debian/control: - depend on dpkg-dev (>= 1.15.8) to have c++ symbol mangling * debian/rules: - remove shlibs.local creation and usage - show differences in the symbol files, but never fail * debian/{apt,apt-utils}.symbols: - ship experimental unmangled c++ symbol files --- debian/apt-utils.symbols | 119 +++++ debian/apt.symbols | 1263 ++++++++++++++++++++++++++++++++++++++++++++++ debian/changelog | 7 +- debian/control | 2 +- debian/rules | 37 +- 5 files changed, 1401 insertions(+), 27 deletions(-) create mode 100644 debian/apt-utils.symbols create mode 100644 debian/apt.symbols diff --git a/debian/apt-utils.symbols b/debian/apt-utils.symbols new file mode 100644 index 000000000..8313f6ffd --- /dev/null +++ b/debian/apt-utils.symbols @@ -0,0 +1,119 @@ +libapt-inst.so.1.2 libapt-inst1.2 +| apt-utils #MINVER# +* Build-Depends-Package: libapt-pkg-dev + (c++)"ExtractTar::Done(bool)@Base" 0.8.0 + (c++)"ExtractTar::Go(pkgDirStream&)@Base" 0.8.0 + (c++)"ExtractTar::StartGzip()@Base" 0.8.0 + (c++)"ExtractTar::ExtractTar(FileFd&, unsigned long, std::basic_string, std::allocator >)@Base" 0.8.0 + (c++)"ExtractTar::~ExtractTar()@Base" 0.8.0 + (c++)"debDebFile::GotoMember(char const*)@Base" 0.8.0 + (c++)"debDebFile::CheckMember(char const*)@Base" 0.8.0 + (c++)"debDebFile::MergeControl(pkgDataBase&)@Base" 0.8.0 + (c++)"debDebFile::ControlExtract::DoItem(pkgDirStream::Item&, int&)@Base" 0.8.0 + (c++)"debDebFile::ControlExtract::~ControlExtract()@Base" 0.8.0 + (c++)"debDebFile::ExtractArchive(pkgDirStream&)@Base" 0.8.0 + (c++)"debDebFile::ExtractControl(pkgDataBase&)@Base" 0.8.0 + (c++)"debDebFile::MemControlExtract::TakeControl(void const*, unsigned long)@Base" 0.8.0 + (c++)"debDebFile::MemControlExtract::Read(debDebFile&)@Base" 0.8.0 + (c++)"debDebFile::MemControlExtract::DoItem(pkgDirStream::Item&, int&)@Base" 0.8.0 + (c++)"debDebFile::MemControlExtract::Process(pkgDirStream::Item&, unsigned char const*, unsigned long, unsigned long)@Base" 0.8.0 + (c++)"debDebFile::MemControlExtract::~MemControlExtract()@Base" 0.8.0 + (c++)"debDebFile::debDebFile(FileFd&)@Base" 0.8.0 + (c++)"pkgExtract::FinishedFile(pkgDirStream::Item&, int)@Base" 0.8.0 + (c++)"pkgExtract::CheckDirReplace(std::basic_string, std::allocator >, unsigned int)@Base" 0.8.0 + (c++)"pkgExtract::HandleOverwrites(pkgFLCache::NodeIterator, bool)@Base" 0.8.0 + (c++)"pkgExtract::Fail(pkgDirStream::Item&, int)@Base" 0.8.0 + (c++)"pkgExtract::DoItem(pkgDirStream::Item&, int&)@Base" 0.8.0 + (c++)"pkgExtract::Aborted()@Base" 0.8.0 + (c++)"pkgExtract::Finished()@Base" 0.8.0 + (c++)"pkgExtract::pkgExtract(pkgFLCache&, pkgCache::VerIterator)@Base" 0.8.0 + (c++)"pkgExtract::~pkgExtract()@Base" 0.8.0 + (c++)"pkgFLCache::TreeLookup(unsigned int*, char const*, char const*, unsigned long, unsigned int*, bool)@Base" 0.8.0 + (c++)"pkgFLCache::AddConfFile(char const*, char const*, pkgFLCache::PkgIterator const&, unsigned char const*)@Base" 0.8.0 + (c++)"pkgFLCache::AddDiversion(pkgFLCache::PkgIterator const&, char const*, char const*)@Base" 0.8.0 + (c++)"pkgFLCache::BeginDiverLoad()@Base" 0.8.0 + (c++)"pkgFLCache::FinishDiverLoad()@Base" 0.8.0 + (c++)"pkgFLCache::GetPkg(char const*, char const*, bool)@Base" 0.8.0 + (c++)"pkgFLCache::Header::Header()@Base" 0.8.0 + (c++)"pkgFLCache::GetNode(char const*, char const*, unsigned int, bool, bool)@Base" 0.8.0 + (c++)"pkgFLCache::DropNode(unsigned int)@Base" 0.8.0 + (c++)"pkgFLCache::HashNode(pkgFLCache::NodeIterator const&)@Base" 0.8.0 + (c++)"pkgFLCache::PrintTree(unsigned int, unsigned long)@Base" 0.8.0 + (c++)"pkgFLCache::pkgFLCache(DynamicMMap&)@Base" 0.8.0 + (c++)"pkgDataBase::GetMetaTmp(std::basic_string, std::allocator >&)@Base" 0.8.0 + (c++)"pkgDataBase::~pkgDataBase()@Base" 0.8.0 + (c++)"pkgDirStream::FinishedFile(pkgDirStream::Item&, int)@Base" 0.8.0 + (c++)"pkgDirStream::Fail(pkgDirStream::Item&, int)@Base" 0.8.0 + (c++)"pkgDirStream::DoItem(pkgDirStream::Item&, int&)@Base" 0.8.0 + (c++)"pkgDirStream::Process(pkgDirStream::Item&, unsigned char const*, unsigned long, unsigned long)@Base" 0.8.0 + (c++)"pkgDirStream::~pkgDirStream()@Base" 0.8.0 + (c++|optional)"debListParser::~debListParser()@Base" 0.8.0 + (c++|optional)"pkgCacheGenerator::ListParser::CollectFileProvides(pkgCache&, pkgCache::VerIterator&)@Base" 0.8.0 + (c++|optional)"pkgCacheGenerator::ListParser::~ListParser()@Base" 0.8.0 + (c++|optional)"pkgCache::DepIterator::operator++(int)@Base" 0.8.0 + (c++|optional)"pkgCache::DepIterator::operator++()@Base" 0.8.0 + (c++|optional)"pkgCache::VerIterator::operator++(int)@Base" 0.8.0 + (c++|optional)"pkgCache::VerIterator::operator++()@Base" 0.8.0 + (c++)"ARArchive::LoadHeaders()@Base" 0.8.0 + (c++)"ARArchive::ARArchive(FileFd&)@Base" 0.8.0 + (c++)"ARArchive::~ARArchive()@Base" 0.8.0 + (c++)"debDpkgDB::InitMetaTmp(std::basic_string, std::allocator >&)@Base" 0.8.0 + (c++)"debDpkgDB::LoadChanges()@Base" 0.8.0 + (c++)"debDpkgDB::ReadConfFiles()@Base" 0.8.0 + (c++)"debDpkgDB::ReadyFileList(OpProgress&)@Base" 0.8.0 + (c++)"debDpkgDB::ReadyPkgCache(OpProgress&)@Base" 0.8.0 + (c++)"debDpkgDB::ReadDiversions()@Base" 0.8.0 + (c++)"debDpkgDB::ReadFList(OpProgress&)@Base" 0.8.0 + (c++)"debDpkgDB::debDpkgDB()@Base" 0.8.0 + (c++)"debDpkgDB::~debDpkgDB()@Base" 0.8.0 + (c++)"pkgFLCache::NodeIterator::RealPackage() const@Base" 0.8.0 + (c++)"pkgFLCache::Header::CheckSizes(pkgFLCache::Header&) const@Base" 0.8.0 + (c++|optional)"pkgCache::DepIterator::OwnerPointer() const@Base" 0.8.0 + (c++|optional)"pkgCache::VerIterator::OwnerPointer() const@Base" 0.8.0 + (c++)"ARArchive::FindMember(char const*) const@Base" 0.8.0 + (c++)"typeinfo for ExtractTar@Base" 0.8.0 + (c++)"typeinfo for pkgExtract@Base" 0.8.0 + (c++)"typeinfo for pkgDataBase@Base" 0.8.0 + (c++)"typeinfo for pkgDirStream@Base" 0.8.0 + (c++)"typeinfo for debDpkgDB@Base" 0.8.0 + (c++)"typeinfo for debDebFile::ControlExtract@Base" 0.8.0 + (c++)"typeinfo for debDebFile::MemControlExtract@Base" 0.8.0 + (c++|optional)"typeinfo for pkgCacheGenerator::ListParser@Base" 0.8.0 + (c++|optional)"typeinfo for pkgCache::DepIterator@Base" 0.8.0 + (c++|optional)"typeinfo for pkgCache::VerIterator@Base" 0.8.0 + (c++|optional)"typeinfo for pkgCache::Iterator@Base" 0.8.0 + (c++|optional)"typeinfo for pkgCache::Iterator@Base" 0.8.0 + (c++|optional)"typeinfo for pkgCache::Iterator@Base" 0.8.0 + (c++)"typeinfo name for ExtractTar@Base" 0.8.0 + (c++)"typeinfo name for pkgExtract@Base" 0.8.0 + (c++)"typeinfo name for pkgDataBase@Base" 0.8.0 + (c++)"typeinfo name for pkgDirStream@Base" 0.8.0 + (c++)"typeinfo name for debDpkgDB@Base" 0.8.0 + (c++)"typeinfo name for debDebFile::ControlExtract@Base" 0.8.0 + (c++)"typeinfo name for debDebFile::MemControlExtract@Base" 0.8.0 + (c++|optional)"typeinfo name for pkgCacheGenerator::ListParser@Base" 0.8.0 + (c++|optional)"typeinfo name for pkgCache::DepIterator@Base" 0.8.0 + (c++|optional)"typeinfo name for pkgCache::VerIterator@Base" 0.8.0 + (c++|optional)"typeinfo name for pkgCache::Iterator@Base" 0.8.0 + (c++|optional)"typeinfo name for pkgCache::Iterator@Base" 0.8.0 + (c++|optional)"typeinfo name for pkgCache::Iterator@Base" 0.8.0 + (c++)"vtable for ExtractTar@Base" 0.8.0 + (c++)"vtable for pkgExtract@Base" 0.8.0 + (c++)"vtable for pkgDataBase@Base" 0.8.0 + (c++)"vtable for pkgDirStream@Base" 0.8.0 + (c++)"vtable for debDpkgDB@Base" 0.8.0 + (c++)"vtable for debDebFile::ControlExtract@Base" 0.8.0 + (c++)"vtable for debDebFile::MemControlExtract@Base" 0.8.0 + (c++|optional)"vtable for pkgCacheGenerator::ListParser@Base" 0.8.0 + (c++|optional)"vtable for pkgCache::DepIterator@Base" 0.8.0 + (c++|optional)"vtable for pkgCache::VerIterator@Base" 0.8.0 + (c++|optional)"vtable for pkgCache::Iterator@Base" 0.8.0 + (c++|optional)"vtable for pkgCache::Iterator@Base" 0.8.0 + (c++|optional)"vtable for pkgCache::Iterator@Base" 0.8.0 +### try to ignore std:: template instances + (c++|optional)"std::basic_string, std::allocator >& std::basic_string, std::allocator >::append(unsigned char*, unsigned char*)@Base" 0.8.0 + (c++|regex|optional)"^std::basic_string<.+ >\(.+\)@Base$" 0.8.0 + (c++|regex|optional)"^char\* std::[^ ]+<.+ >::_.+@Base$" 0.8.0 + (c++|regex|optional)"^typeinfo name for std::iterator<.*>@Base$" 0.8.0 + (c++|regex|optional)"^typeinfo for std::iterator<.*>@Base$" 0.8.0 +### diff --git a/debian/apt.symbols b/debian/apt.symbols new file mode 100644 index 000000000..10e17cc80 --- /dev/null +++ b/debian/apt.symbols @@ -0,0 +1,1263 @@ +libapt-pkg.so.4.10 libapt-pkg4.10 +| apt #MINVER# +* Build-Depends-Package: libapt-pkg-dev + TFRewritePackageOrder@Base 0.8.0 + TFRewriteSourceOrder@Base 0.8.0 + (c++)"FileExists(std::basic_string, std::allocator >)@Base" 0.8.0 + (c++)"IdentCdrom(std::basic_string, std::allocator >, std::basic_string, std::allocator >&, unsigned int)@Base" 0.8.0 + (c++)"ListUpdate(pkgAcquireStatus&, pkgSourceList&, int)@Base" 0.8.0 + (c++)"MountCdrom(std::basic_string, std::allocator >, std::basic_string, std::allocator >)@Base" 0.8.0 + (c++)"ParseCWord(char const*&, std::basic_string, std::allocator >&)@Base" 0.8.0 + (c++)"ReadPinDir(pkgPolicy&, std::basic_string, std::allocator >)@Base" 0.8.0 + (c++)"RunScripts(char const*)@Base" 0.8.0 + (c++)"SafeGetCWD()@Base" 0.8.0 + (c++)"parsenetrc(char*, char*, char*, char*)@Base" 0.8.0 + (c++)"QuoteString(std::basic_string, std::allocator > const&, char const*)@Base" 0.8.0 + (c++)"ReadPinFile(pkgPolicy&, std::basic_string, std::allocator >)@Base" 0.8.0 + (c++)"RegexChoice(RxChoiceList*, char const**, char const**)@Base" 0.8.0 + (c++)"SetNonBlock(int, bool)@Base" 0.8.0 + (c++)"TimeRFC1123(long)@Base" 0.8.0 + (c++)"flExtension(std::basic_string, std::allocator >)@Base" 0.8.0 + (c++)"Base64Encode(std::basic_string, std::allocator > const&)@Base" 0.8.0 + (c++)"ReadMessages(int, std::vector, std::allocator >, std::allocator, std::allocator > > >&)@Base" 0.8.0 + (c++)"SetCloseExec(int, bool)@Base" 0.8.0 + (c++)"StringToBool(std::basic_string, std::allocator > const&, int)@Base" 0.8.0 + (c++)"UnmountCdrom(std::basic_string, std::allocator >)@Base" 0.8.0 + (c++)"_GetErrorObj()@Base" 0.8.0 + (c++)"pkgFixBroken(pkgDepCache&)@Base" 0.8.0 + (c++)"DeQuoteString(__gnu_cxx::__normal_iterator, std::allocator > > const&, __gnu_cxx::__normal_iterator, std::allocator > > const&)@Base" 0.8.0 + (c++)"DeQuoteString(std::basic_string, std::allocator > const&)@Base" 0.8.0 + (c++)"OutputInDepth(unsigned long, char const*)@Base" 0.8.0 + (c++)"ReadConfigDir(Configuration&, std::basic_string, std::allocator > const&, bool const&, unsigned int const&)@Base" 0.8.0 + (c++)"URItoFileName(std::basic_string, std::allocator > const&)@Base" 0.8.0 + (c++)"UTF8ToCodeset(char const*, std::basic_string, std::allocator > const&, std::basic_string, std::allocator >*)@Base" 0.8.0 + (c++)"_strtabexpand(char*, unsigned int)@Base" 0.8.0 + (c++)"pkgAllUpgrade(pkgDepCache&)@Base" 0.8.0 + (c++)"pkgInitConfig(Configuration&)@Base" 0.8.0 + (c++)"pkgInitSystem(Configuration&, pkgSystem*&)@Base" 0.8.0 + (c++)"safe_snprintf(char*, char*, char const*, ...)@Base" 0.8.0 + (c++)"stringcasecmp(__gnu_cxx::__normal_iterator, std::allocator > >, __gnu_cxx::__normal_iterator, std::allocator > >, char const*, char const*)@Base" 0.8.0 + (c++)"stringcasecmp(__gnu_cxx::__normal_iterator, std::allocator > >, __gnu_cxx::__normal_iterator, std::allocator > >, __gnu_cxx::__normal_iterator, std::allocator > >, __gnu_cxx::__normal_iterator, std::allocator > >)@Base" 0.8.0 + (c++)"stringcasecmp(char const*, char const*, char const*, char const*)@Base" 0.8.0 + (c++|optional=inline)"stringcasecmp(char const*, char const*, char const*)@Base" 0.8.0 + (c++|optional=inline)"stringcasecmp(std::basic_string, std::allocator > const&, char const*)@Base" 0.8.0 + (c++)"tolower_ascii(int)@Base" 0.8.0 + (c++)"ParseQuoteWord(char const*&, std::basic_string, std::allocator >&)@Base" 0.8.0 + (c++)"ReadConfigFile(Configuration&, std::basic_string, std::allocator > const&, bool const&, unsigned int const&)@Base" 0.8.0 + (c++)"TokSplitString(char, char*, char**, unsigned long)@Base" 0.8.0 + (c++)"maybe_add_auth(URI&, std::basic_string, std::allocator >)@Base" 0.8.0 + (c++)"pkgApplyStatus(pkgDepCache&)@Base" 0.8.0 + (c++)"pkgDistUpgrade(pkgDepCache&)@Base" 0.8.0 + (c++)"CheckDomainList(std::basic_string, std::allocator > const&, std::basic_string, std::allocator > const&)@Base" 0.8.0 + (c++)"CreateDirectory(std::basic_string, std::allocator > const&, std::basic_string, std::allocator > const&)@Base" 0.8.0 + (c++)"DirectoryExists(std::basic_string, std::allocator > const&)@Base" 0.8.0 + (c++)"VectorizeString(std::basic_string, std::allocator > const&, char const&)@Base" 0.8.0 + (c++)"pkgPrioSortList(pkgCache&, pkgCache::Version**)@Base" 0.8.0 + (c++)"FTPMDTMStrToTime(char const*, long&)@Base" 0.8.0 + (c++)"RFC1123StrToTime(char const*, long&)@Base" 0.8.0 + (c++)"pkgMakeStatusCache(pkgSourceList&, OpProgress&, MMap**, bool)@Base" 0.8.0 + (c++)"pkgMinimizeUpgrade(pkgDepCache&)@Base" 0.8.0 + (c++)"GetListOfFilesInDir(std::basic_string, std::allocator > const&, std::vector, std::allocator >, std::allocator, std::allocator > > > const&, bool const&)@Base" 0.8.0 + (c++)"GetListOfFilesInDir(std::basic_string, std::allocator > const&, std::basic_string, std::allocator > const&, bool const&, bool const&)@Base" 0.8.0 + (c++)"pkgMakeStatusCacheMem(pkgSourceList&, OpProgress&)@Base" 0.8.0 + (c++)"pkgMakeOnlyStatusCache(OpProgress&, DynamicMMap**)@Base" 0.8.0 + (c++)"WaitFd(int, bool, unsigned long)@Base" 0.8.0 + (c++)"GetLock(std::basic_string, std::allocator >, bool)@Base" 0.8.0 + (c++)"Hex2Num(std::basic_string, std::allocator > const&, unsigned char*, unsigned int)@Base" 0.8.0 + (c++)"AddCRC16(unsigned short, void const*, unsigned long)@Base" 0.8.0 + (c++)"CopyFile(FileFd&, FileFd&)@Base" 0.8.0 + (c++)"ExecFork()@Base" 0.8.0 + (c++)"ExecWait(int, char const*, bool)@Base" 0.8.0 + (c++)"StrToNum(char const*, unsigned long&, unsigned int, unsigned int)@Base" 0.8.0 + (c++)"SubstVar(std::basic_string, std::allocator > const&, std::basic_string, std::allocator > const&, std::basic_string, std::allocator > const&)@Base" 0.8.0 + (c++)"SubstVar(std::basic_string, std::allocator >, SubstVar const*)@Base" 0.8.0 + (c++)"flNoLink(std::basic_string, std::allocator >)@Base" 0.8.0 + (c++)"flNotDir(std::basic_string, std::allocator >)@Base" 0.8.0 + (c++)"ioprintf(std::basic_ostream >&, char const*, ...)@Base" 0.8.0 + (c++)"IsMounted(std::basic_string, std::allocator >&)@Base" 0.8.0 + (c++)"LookupTag(std::basic_string, std::allocator > const&, char const*, char const*)@Base" 0.8.0 + (c++)"SizeToStr(double)@Base" 0.8.0 + (c++)"StrToTime(std::basic_string, std::allocator > const&, long&)@Base" 0.8.0 + (c++)"TFRewrite(_IO_FILE*, pkgTagSection const&, char const**, TFRewriteData*)@Base" 0.8.0 + (c++)"TimeToStr(unsigned long)@Base" 0.8.0 + (c++)"_strstrip(char*)@Base" 0.8.0 + (c++)"flCombine(std::basic_string, std::allocator >, std::basic_string, std::allocator >)@Base" 0.8.0 + (c++)"flNotFile(std::basic_string, std::allocator >)@Base" 0.8.0 + (c++)"stringcmp(__gnu_cxx::__normal_iterator, std::allocator > >, __gnu_cxx::__normal_iterator, std::allocator > >, char const*, char const*)@Base" 0.8.0 + (c++)"stringcmp(__gnu_cxx::__normal_iterator, std::allocator > >, __gnu_cxx::__normal_iterator, std::allocator > >, __gnu_cxx::__normal_iterator, std::allocator > >, __gnu_cxx::__normal_iterator, std::allocator > >)@Base" 0.8.0 + (c++)"stringcmp(char const*, char const*, char const*, char const*)@Base" 0.8.0 + (c++)"strprintf(std::basic_string, std::allocator >&, char const*, ...)@Base" 0.8.0 + (c++)"guard variable for pkgCacheGenerator::Dynamic::toReMap@Base" 0.8.0 + (c++)"guard variable for pkgCacheGenerator::Dynamic::toReMap@Base" 0.8.0 + (c++)"guard variable for pkgCacheGenerator::Dynamic::toReMap@Base" 0.8.0 + (c++)"guard variable for pkgCacheGenerator::Dynamic::toReMap@Base" 0.8.0 + (c++)"guard variable for pkgCacheGenerator::Dynamic::toReMap@Base" 0.8.0 + (c++)"guard variable for pkgCacheGenerator::Dynamic::toReMap@Base" 0.8.0 + (c++)"guard variable for pkgCacheGenerator::Dynamic::toReMap@Base" 0.8.0 + (c++)"HashString::SupportedHashes()@Base" 0.8.0 + (c++)"HashString::_SupportedHashes@Base" 0.8.0 + (c++)"HashString::HashString(std::basic_string, std::allocator >)@Base" 0.8.0 + (c++)"HashString::HashString(std::basic_string, std::allocator >, std::basic_string, std::allocator >)@Base" 0.8.0 + (c++)"HashString::HashString()@Base" 0.8.0 + (c++)"HashString::~HashString()@Base" 0.8.0 + (c++)"OpProgress::CheckChange(float)@Base" 0.8.0 + (c++)"OpProgress::SubProgress(unsigned long)@Base" 0.8.0 + (c++)"OpProgress::SubProgress(unsigned long, std::basic_string, std::allocator > const&)@Base" 0.8.0 + (c++)"OpProgress::OverallProgress(unsigned long, unsigned long, unsigned long, std::basic_string, std::allocator > const&)@Base" 0.8.0 + (c++)"OpProgress::Done()@Base" 0.8.0 + (c++)"OpProgress::Update()@Base" 0.8.0 + (c++)"OpProgress::Progress(unsigned long)@Base" 0.8.0 + (c++)"OpProgress::OpProgress()@Base" 0.8.0 + (c++)"OpProgress::~OpProgress()@Base" 0.8.0 + (c++)"SourceCopy::GetFileName()@Base" 0.8.0 + (c++)"SourceCopy::RewriteEntry(_IO_FILE*, std::basic_string, std::allocator >)@Base" 0.8.0 + (c++)"SourceCopy::Type()@Base" 0.8.0 + (c++)"SourceCopy::GetFile(std::basic_string, std::allocator >&, unsigned long&)@Base" 0.8.0 + (c++)"SourceCopy::~SourceCopy()@Base" 0.8.0 + (c++)"pkgAcqFile::Custom600Headers()@Base" 0.8.0 + (c++)"pkgAcqFile::Done(std::basic_string, std::allocator >, unsigned long, std::basic_string, std::allocator >, pkgAcquire::MethodConfig*)@Base" 0.8.0 + (c++)"pkgAcqFile::Failed(std::basic_string, std::allocator >, pkgAcquire::MethodConfig*)@Base" 0.8.0 + (c++)"pkgAcqFile::DescURI()@Base" 0.8.0 + (c++)"pkgAcqFile::HashSum()@Base" 0.8.0 + (c++)"pkgAcqFile::pkgAcqFile(pkgAcquire*, std::basic_string, std::allocator >, std::basic_string, std::allocator >, unsigned long, std::basic_string, std::allocator >, std::basic_string, std::allocator >, std::basic_string, std::allocator > const&, std::basic_string, std::allocator > const&, bool)@Base" 0.8.0 + (c++)"pkgAcqFile::~pkgAcqFile()@Base" 0.8.0 + (c++)"pkgAcquire::WorkerStep(pkgAcquire::Worker*)@Base" 0.8.0 + (c++)"pkgAcquire::FetchNeeded()@Base" 0.8.0 + (c++)"pkgAcquire::TotalNeeded()@Base" 0.8.0 + (c++)"pkgAcquire::MethodConfig::MethodConfig()@Base" 0.8.0 + (c++)"pkgAcquire::PartialPresent()@Base" 0.8.0 + (c++)"pkgAcquire::Add(pkgAcquire::Item*)@Base" 0.8.0 + (c++)"pkgAcquire::Add(pkgAcquire::Worker*)@Base" 0.8.0 + (c++)"pkgAcquire::Run(int)@Base" 0.8.0 + (c++)"pkgAcquire::Bump()@Base" 0.8.0 + (c++)"pkgAcquire::Item::Custom600Headers()@Base" 0.8.0 + (c++)"pkgAcquire::Item::ReportMirrorFailure(std::basic_string, std::allocator >)@Base" 0.8.0 + (c++)"pkgAcquire::Item::Done(std::basic_string, std::allocator >, unsigned long, std::basic_string, std::allocator >, pkgAcquire::MethodConfig*)@Base" 0.8.0 + (c++)"pkgAcquire::Item::Start(std::basic_string, std::allocator >, unsigned long)@Base" 0.8.0 + (c++)"pkgAcquire::Item::Failed(std::basic_string, std::allocator >, pkgAcquire::MethodConfig*)@Base" 0.8.0 + (c++)"pkgAcquire::Item::Rename(std::basic_string, std::allocator >, std::basic_string, std::allocator >)@Base" 0.8.0 + (c++)"pkgAcquire::Item::HashSum()@Base" 0.8.0 + (c++)"pkgAcquire::Item::Finished()@Base" 0.8.0 + (c++)"pkgAcquire::Item::IsTrusted()@Base" 0.8.0 + (c++)"pkgAcquire::Item::ShortDesc()@Base" 0.8.0 + (c++)"pkgAcquire::Item::Item(pkgAcquire*)@Base" 0.8.0 + (c++)"pkgAcquire::Item::~Item()@Base" 0.8.0 + (c++)"pkgAcquire::Clean(std::basic_string, std::allocator >)@Base" 0.8.0 + (c++)"pkgAcquire::Queue::Bump()@Base" 0.8.0 + (c++)"pkgAcquire::Queue::Cycle()@Base" 0.8.0 + (c++)"pkgAcquire::Queue::Dequeue(pkgAcquire::Item*)@Base" 0.8.0 + (c++)"pkgAcquire::Queue::Enqueue(pkgAcquire::ItemDesc&)@Base" 0.8.0 + (c++)"pkgAcquire::Queue::Startup()@Base" 0.8.0 + (c++)"pkgAcquire::Queue::FindItem(std::basic_string, std::allocator >, pkgAcquire::Worker*)@Base" 0.8.0 + (c++)"pkgAcquire::Queue::ItemDone(pkgAcquire::Queue::QItem*)@Base" 0.8.0 + (c++)"pkgAcquire::Queue::Shutdown(bool)@Base" 0.8.0 + (c++)"pkgAcquire::Queue::Queue(std::basic_string, std::allocator >, pkgAcquire*)@Base" 0.8.0 + (c++)"pkgAcquire::Queue::~Queue()@Base" 0.8.0 + (c++)"pkgAcquire::Setup(pkgAcquireStatus*, std::basic_string, std::allocator > const&)@Base" 0.8.0 + (c++)"pkgAcquire::Remove(pkgAcquire::Item*)@Base" 0.8.0 + (c++)"pkgAcquire::Remove(pkgAcquire::Worker*)@Base" 0.8.0 + (c++)"pkgAcquire::RunFds(fd_set*, fd_set*)@Base" 0.8.0 + (c++)"pkgAcquire::SetFds(int&, fd_set*, fd_set*)@Base" 0.8.0 + (c++)"pkgAcquire::UriEnd()@Base" 0.8.0 + (c++)"pkgAcquire::Worker::OutFdReady()@Base" 0.8.0 + (c++)"pkgAcquire::Worker::MediaChange(std::basic_string, std::allocator >)@Base" 0.8.0 + (c++)"pkgAcquire::Worker::RunMessages()@Base" 0.8.0 + (c++)"pkgAcquire::Worker::Capabilities(std::basic_string, std::allocator >)@Base" 0.8.0 + (c++)"pkgAcquire::Worker::ReadMessages()@Base" 0.8.0 + (c++)"pkgAcquire::Worker::MethodFailure()@Base" 0.8.0 + (c++)"pkgAcquire::Worker::SendConfiguration()@Base" 0.8.0 + (c++)"pkgAcquire::Worker::Pulse()@Base" 0.8.0 + (c++)"pkgAcquire::Worker::Start()@Base" 0.8.0 + (c++)"pkgAcquire::Worker::ItemDone()@Base" 0.8.0 + (c++)"pkgAcquire::Worker::Construct()@Base" 0.8.0 + (c++)"pkgAcquire::Worker::InFdReady()@Base" 0.8.0 + (c++)"pkgAcquire::Worker::QueueItem(pkgAcquire::Queue::QItem*)@Base" 0.8.0 + (c++)"pkgAcquire::Worker::Worker(pkgAcquire::MethodConfig*)@Base" 0.8.0 + (c++)"pkgAcquire::Worker::Worker(pkgAcquire::Queue*, pkgAcquire::MethodConfig*, pkgAcquireStatus*)@Base" 0.8.0 + (c++)"pkgAcquire::Worker::~Worker()@Base" 0.8.0 + (c++)"pkgAcquire::Dequeue(pkgAcquire::Item*)@Base" 0.8.0 + (c++)"pkgAcquire::Enqueue(pkgAcquire::ItemDesc&)@Base" 0.8.0 + (c++)"pkgAcquire::ItemDesc::~ItemDesc()@Base" 0.8.0 + (c++)"pkgAcquire::Shutdown()@Base" 0.8.0 + (c++)"pkgAcquire::UriBegin()@Base" 0.8.0 + (c++)"pkgAcquire::GetConfig(std::basic_string, std::allocator >)@Base" 0.8.0 + (c++)"pkgAcquire::QueueName(std::basic_string, std::allocator >, pkgAcquire::MethodConfig const*&)@Base" 0.8.0 + (c++)"pkgAcquire::pkgAcquire(pkgAcquireStatus*)@Base" 0.8.0 + (c++)"pkgAcquire::pkgAcquire()@Base" 0.8.0 + (c++)"pkgAcquire::~pkgAcquire()@Base" 0.8.0 + (c++)"pkgRecords::Lookup(pkgCache::VerFileIterator const&)@Base" 0.8.0 + (c++)"pkgRecords::Lookup(pkgCache::DescFileIterator const&)@Base" 0.8.0 + (c++)"pkgRecords::Parser::Maintainer()@Base" 0.8.0 + (c++)"pkgRecords::Parser::SHA256Hash()@Base" 0.8.0 + (c++)"pkgRecords::Parser::Name()@Base" 0.8.0 + (c++)"pkgRecords::Parser::GetRec(char const*&, char const*&)@Base" 0.8.0 + (c++)"pkgRecords::Parser::MD5Hash()@Base" 0.8.0 + (c++)"pkgRecords::Parser::FileName()@Base" 0.8.0 + (c++)"pkgRecords::Parser::Homepage()@Base" 0.8.0 + (c++)"pkgRecords::Parser::LongDesc()@Base" 0.8.0 + (c++)"pkgRecords::Parser::SHA1Hash()@Base" 0.8.0 + (c++)"pkgRecords::Parser::ShortDesc()@Base" 0.8.0 + (c++)"pkgRecords::Parser::SourcePkg()@Base" 0.8.0 + (c++)"pkgRecords::Parser::SourceVer()@Base" 0.8.0 + (c++)"pkgRecords::Parser::~Parser()@Base" 0.8.0 + (c++)"pkgRecords::pkgRecords(pkgCache&)@Base" 0.8.0 + (c++)"pkgRecords::~pkgRecords()@Base" 0.8.0 + (c++)"pkgTagFile::Fill()@Base" 0.8.0 + (c++)"pkgTagFile::Jump(pkgTagSection&, unsigned long)@Base" 0.8.0 + (c++)"pkgTagFile::Step(pkgTagSection&)@Base" 0.8.0 + (c++)"pkgTagFile::Resize()@Base" 0.8.0 + (c++)"pkgTagFile::pkgTagFile(FileFd*, unsigned long)@Base" 0.8.0 + (c++)"pkgTagFile::~pkgTagFile()@Base" 0.8.0 + (c++)"CdromDevice::~CdromDevice()@Base" 0.8.0 + (c++)"CommandLine::DispatchArg(CommandLine::Dispatch*, bool)@Base" 0.8.0 + (c++)"CommandLine::SaveInConfig(unsigned int const&, char const* const*)@Base" 0.8.0 + (c++)"CommandLine::Parse(int, char const**)@Base" 0.8.0 + (c++)"CommandLine::HandleOpt(int&, int, char const**, char const*&, CommandLine::Args*, bool)@Base" 0.8.0 + (c++)"CommandLine::CommandLine(CommandLine::Args*, Configuration*)@Base" 0.8.0 + (c++)"CommandLine::~CommandLine()@Base" 0.8.0 + (c++)"DynamicMMap::RawAllocate(unsigned long, unsigned long)@Base" 0.8.0 + (c++)"DynamicMMap::WriteString(char const*, unsigned long)@Base" 0.8.0 + (c++)"DynamicMMap::Grow()@Base" 0.8.0 + (c++)"DynamicMMap::Allocate(unsigned long)@Base" 0.8.0 + (c++)"DynamicMMap::DynamicMMap(FileFd&, unsigned long, unsigned long const&, unsigned long const&, unsigned long const&)@Base" 0.8.0 + (c++)"DynamicMMap::DynamicMMap(unsigned long, unsigned long const&, unsigned long const&, unsigned long const&)@Base" 0.8.0 + (c++)"DynamicMMap::~DynamicMMap()@Base" 0.8.0 + (c++)"GlobalError::DumpErrors(std::basic_ostream >&, GlobalError::MsgType const&, bool const&)@Base" 0.8.0 + (c++)"GlobalError::PopMessage(std::basic_string, std::allocator >&)@Base" 0.8.0 + (arch=!armel|c++)"GlobalError::InsertErrno(GlobalError::MsgType, char const*, char const*, char*&)@Base" 0.8.0 + (arch=armel|c++)"GlobalError::InsertErrno(GlobalError::MsgType, char const*, char const*, std::__va_list&)@Base" 0.8.0 + (c++)"GlobalError::InsertErrno(GlobalError::MsgType const&, char const*, char const*, ...)@Base" 0.8.0 + (c++)"GlobalError::PushToStack()@Base" 0.8.0 + (c++)"GlobalError::RevertToStack()@Base" 0.8.0 + (c++)"GlobalError::MergeWithStack()@Base" 0.8.0 + (c++)"GlobalError::Debug(char const*, ...)@Base" 0.8.0 + (c++)"GlobalError::Errno(char const*, char const*, ...)@Base" 0.8.0 + (c++)"GlobalError::Error(char const*, ...)@Base" 0.8.0 + (c++)"GlobalError::Fatal(char const*, ...)@Base" 0.8.0 + (c++)"GlobalError::DebugE(char const*, char const*, ...)@Base" 0.8.0 + (c++)"GlobalError::FatalE(char const*, char const*, ...)@Base" 0.8.0 + (arch=!armel|c++)"GlobalError::Insert(GlobalError::MsgType, char const*, char*&)@Base" 0.8.0 + (arch=armel|c++)"GlobalError::Insert(GlobalError::MsgType, char const*, std::__va_list&)@Base" 0.8.0 + (c++)"GlobalError::Insert(GlobalError::MsgType const&, char const*, ...)@Base" 0.8.0 + (c++)"GlobalError::Notice(char const*, ...)@Base" 0.8.0 + (c++)"GlobalError::Discard()@Base" 0.8.0 + (c++)"GlobalError::NoticeE(char const*, char const*, ...)@Base" 0.8.0 + (c++)"GlobalError::Warning(char const*, ...)@Base" 0.8.0 + (c++)"GlobalError::WarningE(char const*, char const*, ...)@Base" 0.8.0 + (c++)"GlobalError::GlobalError()@Base" 0.8.0 + (c++)"MD5SumValue::Set(std::basic_string, std::allocator >)@Base" 0.8.0 + (c++)"MD5SumValue::MD5SumValue(std::basic_string, std::allocator >)@Base" 0.8.0 + (c++)"MD5SumValue::MD5SumValue()@Base" 0.8.0 + (c++)"PackageCopy::GetFileName()@Base" 0.8.0 + (c++)"PackageCopy::RewriteEntry(_IO_FILE*, std::basic_string, std::allocator >)@Base" 0.8.0 + (c++)"PackageCopy::Type()@Base" 0.8.0 + (c++)"PackageCopy::GetFile(std::basic_string, std::allocator >&, unsigned long&)@Base" 0.8.0 + (c++)"PackageCopy::~PackageCopy()@Base" 0.8.0 + (c++)"pkgAcqIndex::Custom600Headers()@Base" 0.8.0 + (c++)"pkgAcqIndex::Done(std::basic_string, std::allocator >, unsigned long, std::basic_string, std::allocator >, pkgAcquire::MethodConfig*)@Base" 0.8.0 + (c++)"pkgAcqIndex::Failed(std::basic_string, std::allocator >, pkgAcquire::MethodConfig*)@Base" 0.8.0 + (c++)"pkgAcqIndex::DescURI()@Base" 0.8.0 + (c++)"pkgAcqIndex::HashSum()@Base" 0.8.0 + (c++)"pkgAcqIndex::pkgAcqIndex(pkgAcquire*, std::basic_string, std::allocator >, std::basic_string, std::allocator >, std::basic_string, std::allocator >, HashString, std::basic_string, std::allocator >)@Base" 0.8.0 + (c++)"pkgAcqIndex::~pkgAcqIndex()@Base" 0.8.0 + (c++)"pkgDepCache::IsDeleteOk(pkgCache::PkgIterator const&, bool, unsigned long, bool)@Base" 0.8.0 + (c++)"pkgDepCache::MarkDelete(pkgCache::PkgIterator const&, bool, unsigned long, bool)@Base" 0.8.0 + (c++)"pkgDepCache::StateCache::StripEpoch(char const*)@Base" 0.8.0 + (c++)"pkgDepCache::StateCache::Update(pkgCache::PkgIterator, pkgCache&)@Base" 0.8.0 + (c++)"pkgDepCache::ActionGroup::release()@Base" 0.8.0 + (c++)"pkgDepCache::ActionGroup::ActionGroup(pkgDepCache&)@Base" 0.8.0 + (c++)"pkgDepCache::ActionGroup::~ActionGroup()@Base" 0.8.0 + (c++)"pkgDepCache::IsInstallOk(pkgCache::PkgIterator const&, bool, unsigned long, bool)@Base" 0.8.0 + (c++)"pkgDepCache::MarkInstall(pkgCache::PkgIterator const&, bool, unsigned long, bool, bool)@Base" 0.8.0 + (c++)"pkgDepCache::MarkPackage(pkgCache::PkgIterator const&, pkgCache::VerIterator const&, bool const&, bool const&)@Base" 0.8.0 + (c++)"pkgDepCache::MarkRequired(pkgDepCache::InRootSetFunc&)@Base" 0.8.0 + (c++)"pkgDepCache::SetReInstall(pkgCache::PkgIterator const&, bool)@Base" 0.8.0 + (c++)"pkgDepCache::VersionState(pkgCache::DepIterator, unsigned char, unsigned char, unsigned char)@Base" 0.8.0 + (c++)"pkgDepCache::BuildGroupOrs(pkgCache::VerIterator const&)@Base" 0.8.0 + (c++)"pkgDepCache::InRootSetFunc::InRootSet(pkgCache::PkgIterator const&)@Base" 0.8.0 + (c++)"pkgDepCache::InRootSetFunc::~InRootSetFunc()@Base" 0.8.0 + (c++)"pkgDepCache::readStateFile(OpProgress*)@Base" 0.8.0 + (c++)"pkgDepCache::GetRootSetFunc()@Base" 0.8.0 + (c++)"pkgDepCache::UpdateVerState(pkgCache::PkgIterator)@Base" 0.8.0 + (c++)"pkgDepCache::writeStateFile(OpProgress*, bool)@Base" 0.8.0 + (c++)"pkgDepCache::DependencyState(pkgCache::DepIterator&)@Base" 0.8.0 + (c++)"pkgDepCache::DefaultRootSetFunc::InRootSet(pkgCache::PkgIterator const&)@Base" 0.8.0 + (c++)"pkgDepCache::DefaultRootSetFunc::~DefaultRootSetFunc()@Base" 0.8.0 + (c++)"pkgDepCache::MarkFollowsSuggests()@Base" 0.8.0 + (c++)"pkgDepCache::SetCandidateVersion(pkgCache::VerIterator, bool const&)@Base" 0.8.0 + (c++)"pkgDepCache::MarkFollowsRecommends()@Base" 0.8.0 + (c++)"pkgDepCache::ReInstallPseudoForGroup(pkgCache::PkgIterator const&, std::set, std::allocator >&)@Base" 0.8.0 + (c++)"pkgDepCache::ReInstallPseudoForGroup(unsigned long const&, std::set, std::allocator >&)@Base" 0.8.0 + (c++)"pkgDepCache::RemovePseudoInstalledPkg(pkgCache::PkgIterator&, std::set, std::allocator >&)@Base" 0.8.0 + (c++)"pkgDepCache::Init(OpProgress*)@Base" 0.8.0 + (c++)"pkgDepCache::Sweep()@Base" 0.8.0 + (c++)"pkgDepCache::Policy::IsImportantDep(pkgCache::DepIterator const&)@Base" 0.8.0 + (c++)"pkgDepCache::Policy::GetCandidateVer(pkgCache::PkgIterator const&)@Base" 0.8.0 + (c++)"pkgDepCache::Policy::~Policy()@Base" 0.8.0 + (c++)"pkgDepCache::Update(pkgCache::DepIterator)@Base" 0.8.0 + (c++)"pkgDepCache::Update(OpProgress*)@Base" 0.8.0 + (c++)"pkgDepCache::Update(pkgCache::PkgIterator const&)@Base" 0.8.0 + (c++)"pkgDepCache::AddSizes(pkgCache::PkgIterator const&, bool const&)@Base" 0.8.0 + (c++)"pkgDepCache::AddSizes(pkgCache::PkgIterator const&, long)@Base" 0.8.0 + (c++)"pkgDepCache::CheckDep(pkgCache::DepIterator, int, pkgCache::PkgIterator&)@Base" 0.8.0 + (c++)"pkgDepCache::MarkAuto(pkgCache::PkgIterator const&, bool)@Base" 0.8.0 + (c++)"pkgDepCache::MarkKeep(pkgCache::PkgIterator const&, bool, bool, unsigned long)@Base" 0.8.0 + (c++)"pkgDepCache::AddStates(pkgCache::PkgIterator const&, int)@Base" 0.8.0 + (c++)"pkgDepCache::pkgDepCache(pkgCache*, pkgDepCache::Policy*)@Base" 0.8.0 + (c++)"pkgDepCache::~pkgDepCache()@Base" 0.8.0 + (c++)"pkgSimulate::ShortBreaks()@Base" 0.8.0 + (c++)"pkgSimulate::Policy::GetCandidateVer(pkgCache::PkgIterator const&)@Base" 0.8.0 + (c++)"pkgSimulate::Policy::~Policy()@Base" 0.8.0 + (c++)"pkgSimulate::Remove(pkgCache::PkgIterator, bool)@Base" 0.8.0 + (c++)"pkgSimulate::Install(pkgCache::PkgIterator, std::basic_string, std::allocator >)@Base" 0.8.0 + (c++)"pkgSimulate::Describe(pkgCache::PkgIterator, std::basic_ostream >&, bool, bool)@Base" 0.8.0 + (c++)"pkgSimulate::Configure(pkgCache::PkgIterator)@Base" 0.8.0 + (c++)"pkgSimulate::pkgSimulate(pkgDepCache*)@Base" 0.8.0 + (c++)"pkgSimulate::~pkgSimulate()@Base" 0.8.0 + (c++)"MD5Summation::Add(unsigned char const*, unsigned long)@Base" 0.8.0 + (c++)"MD5Summation::AddFD(int, unsigned long)@Base" 0.8.0 + (c++)"MD5Summation::Result()@Base" 0.8.0 + (c++)"MD5Summation::MD5Summation()@Base" 0.8.0 + (c++)"SHA1SumValue::Set(std::basic_string, std::allocator >)@Base" 0.8.0 + (c++)"SHA1SumValue::SHA1SumValue(std::basic_string, std::allocator >)@Base" 0.8.0 + (c++)"SHA1SumValue::SHA1SumValue()@Base" 0.8.0 + (c++)"debIFTypePkg::~debIFTypePkg()@Base" 0.8.0 + (c++)"debIFTypeSrc::~debIFTypeSrc()@Base" 0.8.0 + (c++)"debSLTypeDeb::~debSLTypeDeb()@Base" 0.8.0 + (c++)"indexRecords::parseSumData(char const*&, char const*, std::basic_string, std::allocator >&, std::basic_string, std::allocator >&, unsigned int&)@Base" 0.8.0 + (c++)"indexRecords::Load(std::basic_string, std::allocator >)@Base" 0.8.0 + (c++)"indexRecords::Lookup(std::basic_string, std::allocator >)@Base" 0.8.0 + (c++)"indexRecords::MetaKeys()@Base" 0.8.0 + (c++)"indexRecords::indexRecords(std::basic_string, std::allocator >)@Base" 0.8.0 + (c++)"indexRecords::indexRecords()@Base" 0.8.0 + (c++)"indexRecords::~indexRecords()@Base" 0.8.0 + (c++)"pkgAcqMethod::FetchResult::TakeHashes(Hashes&)@Base" 0.8.0 + (c++)"pkgAcqMethod::FetchResult::FetchResult()@Base" 0.8.0 + (c++)"pkgAcqMethod::Configuration(std::basic_string, std::allocator >)@Base" 0.8.0 + (c++)"pkgAcqMethod::Log(char const*, ...)@Base" 0.8.0 + (c++)"pkgAcqMethod::Run(bool)@Base" 0.8.0 + (c++)"pkgAcqMethod::Exit()@Base" 0.8.0 + (c++)"pkgAcqMethod::Fail(std::basic_string, std::allocator >, bool)@Base" 0.8.0 + (c++)"pkgAcqMethod::Fail(bool)@Base" 0.8.0 + (c++)"pkgAcqMethod::Fetch(pkgAcqMethod::FetchItem*)@Base" 0.8.0 + (c++)"pkgAcqMethod::Status(char const*, ...)@Base" 0.8.0 + (c++)"pkgAcqMethod::URIDone(pkgAcqMethod::FetchResult&, pkgAcqMethod::FetchResult*)@Base" 0.8.0 + (c++)"pkgAcqMethod::Redirect(std::basic_string, std::allocator > const&)@Base" 0.8.0 + (c++)"pkgAcqMethod::URIStart(pkgAcqMethod::FetchResult&)@Base" 0.8.0 + (c++)"pkgAcqMethod::MediaFail(std::basic_string, std::allocator >, std::basic_string, std::allocator >)@Base" 0.8.0 + (c++)"pkgAcqMethod::pkgAcqMethod(char const*, unsigned long)@Base" 0.8.0 + (c++)"pkgAcqMethod::~pkgAcqMethod()@Base" 0.8.0 + (c++)"pkgCacheFile::BuildCaches(OpProgress*, bool)@Base" 0.8.0 + (c++)"pkgCacheFile::BuildPolicy(OpProgress*)@Base" 0.8.0 + (c++)"pkgCacheFile::BuildDepCache(OpProgress*)@Base" 0.8.0 + (c++)"pkgCacheFile::BuildSourceList(OpProgress*)@Base" 0.8.0 + (c++)"pkgCacheFile::Open(OpProgress*, bool)@Base" 0.8.0 + (c++)"pkgCacheFile::Close()@Base" 0.8.0 + (c++)"pkgCacheFile::pkgCacheFile()@Base" 0.8.0 + (c++)"pkgCacheFile::~pkgCacheFile()@Base" 0.8.0 + (c++)"pkgIndexFile::LanguageCode()@Base" 0.8.0 + (c++)"pkgIndexFile::CheckLanguageCode(char const*)@Base" 0.8.0 + (c++)"pkgIndexFile::TranslationsAvailable()@Base" 0.8.0 + (c++)"pkgIndexFile::Type::GlobalList@Base" 0.8.0 + (c++)"pkgIndexFile::Type::GlobalListLen@Base" 0.8.0 + (c++)"pkgIndexFile::Type::GetType(char const*)@Base" 0.8.0 + (c++)"pkgIndexFile::Type::Type()@Base" 0.8.0 + (c++)"pkgIndexFile::Type::~Type()@Base" 0.8.0 + (c++)"pkgIndexFile::~pkgIndexFile()@Base" 0.8.0 + (c++)"pkgOrderList::VisitRDeps(bool (pkgOrderList::*)(pkgCache::DepIterator), pkgCache::PkgIterator)@Base" 0.8.0 + (c++)"pkgOrderList::OrderUnpack(std::basic_string, std::allocator >*)@Base" 0.8.0 + (c++)"pkgOrderList::DepConfigure(pkgCache::DepIterator)@Base" 0.8.0 + (c++)"pkgOrderList::DepUnPackDep(pkgCache::DepIterator)@Base" 0.8.0 + (c++)"pkgOrderList::DepUnPackPre(pkgCache::DepIterator)@Base" 0.8.0 + (c++)"pkgOrderList::DepUnPackCrit(pkgCache::DepIterator)@Base" 0.8.0 + (c++)"pkgOrderList::DepUnPackPreD(pkgCache::DepIterator)@Base" 0.8.0 + (c++)"pkgOrderList::OrderCompareA(void const*, void const*)@Base" 0.8.0 + (c++)"pkgOrderList::OrderCompareB(void const*, void const*)@Base" 0.8.0 + (c++)"pkgOrderList::OrderCritical()@Base" 0.8.0 + (c++)"pkgOrderList::VisitProvides(pkgCache::DepIterator, bool)@Base" 0.8.0 + (c++)"pkgOrderList::OrderConfigure()@Base" 0.8.0 + (c++)"pkgOrderList::VisitRProvides(bool (pkgOrderList::*)(pkgCache::DepIterator), pkgCache::VerIterator)@Base" 0.8.0 + (c++)"pkgOrderList::Me@Base" 0.8.0 + (c++)"pkgOrderList::DoRun()@Base" 0.8.0 + (c++)"pkgOrderList::Score(pkgCache::PkgIterator)@Base" 0.8.0 + (c++)"pkgOrderList::AddLoop(pkgCache::DepIterator)@Base" 0.8.0 + (c++)"pkgOrderList::FileCmp(pkgCache::PkgIterator, pkgCache::PkgIterator)@Base" 0.8.0 + (c++)"pkgOrderList::CheckDep(pkgCache::DepIterator)@Base" 0.8.0 + (c++)"pkgOrderList::DepRemove(pkgCache::DepIterator)@Base" 0.8.0 + (c++)"pkgOrderList::IsMissing(pkgCache::PkgIterator)@Base" 0.8.0 + (c++)"pkgOrderList::VisitDeps(bool (pkgOrderList::*)(pkgCache::DepIterator), pkgCache::PkgIterator)@Base" 0.8.0 + (c++)"pkgOrderList::VisitNode(pkgCache::PkgIterator)@Base" 0.8.0 + (c++)"pkgOrderList::WipeFlags(unsigned long)@Base" 0.8.0 + (c++)"pkgOrderList::pkgOrderList(pkgDepCache*)@Base" 0.8.0 + (c++)"pkgOrderList::~pkgOrderList()@Base" 0.8.0 + (c++)"Configuration::MatchAgainstConfig::MatchAgainstConfig(char const*)@Base" 0.8.0 + (c++)"Configuration::MatchAgainstConfig::~MatchAgainstConfig()@Base" 0.8.0 + (c++)"Configuration::Set(char const*, std::basic_string, std::allocator > const&)@Base" 0.8.0 + (c++)"Configuration::Set(char const*, int const&)@Base" 0.8.0 + (c++)"Configuration::Dump(std::basic_ostream >&)@Base" 0.8.0 + (c++)"Configuration::Clear(std::basic_string, std::allocator > const&)@Base" 0.8.0 + (c++)"Configuration::Clear(std::basic_string, std::allocator > const&, int const&)@Base" 0.8.0 + (c++)"Configuration::Clear(std::basic_string, std::allocator > const&, std::basic_string, std::allocator > const&)@Base" 0.8.0 + (c++)"Configuration::CndSet(char const*, std::basic_string, std::allocator > const&)@Base" 0.8.0 + (c++)"Configuration::Lookup(char const*, bool const&)@Base" 0.8.0 + (c++)"Configuration::Lookup(Configuration::Item*, char const*, unsigned long const&, bool const&)@Base" 0.8.0 + (c++)"Configuration::Configuration(Configuration::Item const*)@Base" 0.8.0 + (c++)"Configuration::Configuration()@Base" 0.8.0 + (c++)"Configuration::~Configuration()@Base" 0.8.0 + (c++)"SHA1Summation::Add(unsigned char const*, unsigned long)@Base" 0.8.0 + (c++)"SHA1Summation::AddFD(int, unsigned long)@Base" 0.8.0 + (c++)"SHA1Summation::Result()@Base" 0.8.0 + (c++)"SHA1Summation::SHA1Summation()@Base" 0.8.0 + (c++)"WeakPointable::~WeakPointable()@Base" 0.8.0 + (c++)"debListParser::NewVersion(pkgCache::VerIterator&)@Base" 0.8.0 + (c++)"debListParser::UsePackage(pkgCache::PkgIterator&, pkgCache::VerIterator&)@Base" 0.8.0 + (c++)"debListParser::Description()@Base" 0.8.0 + (c++)"debListParser::ParseStatus(pkgCache::PkgIterator&, pkgCache::VerIterator&)@Base" 0.8.0 + (c++)"debListParser::VersionHash()@Base" 0.8.0 + (c++)"debListParser::Architecture()@Base" 0.8.0 + (c++)"debListParser::ParseDepends(char const*, char const*, std::basic_string, std::allocator >&, std::basic_string, std::allocator >&, unsigned int&, bool const&, bool const&)@Base" 0.8.0 + (c++)"debListParser::ParseDepends(pkgCache::VerIterator&, char const*, unsigned int)@Base" 0.8.0 + (c++)"debListParser::ParseProvides(pkgCache::VerIterator&)@Base" 0.8.0 + (c++)"debListParser::ArchitectureAll()@Base" 0.8.0 + (c++)"debListParser::ConvertRelation(char const*, unsigned int&)@Base" 0.8.0 + (c++)"debListParser::Description_md5()@Base" 0.8.0 + (c++)"debListParser::LoadReleaseInfo(pkgCache::PkgFileIterator&, FileFd&, std::basic_string, std::allocator >)@Base" 0.8.0 + (c++)"debListParser::UniqFindTagWrite(char const*)@Base" 0.8.0 + (c++)"debListParser::DescriptionLanguage()@Base" 0.8.0 + (c++)"debListParser::Size()@Base" 0.8.0 + (c++)"debListParser::Step()@Base" 0.8.0 + (c++)"debListParser::Offset()@Base" 0.8.0 + (c++)"debListParser::GetPrio(std::basic_string, std::allocator >)@Base" 0.8.0 + (c++)"debListParser::Package()@Base" 0.8.0 + (c++)"debListParser::Version()@Base" 0.8.0 + (c++)"debListParser::GrabWord(std::basic_string, std::allocator >, debListParser::WordList*, unsigned char&)@Base" 0.8.0 + (c++)"debListParser::debListParser(FileFd*, std::basic_string, std::allocator > const&)@Base" 0.8.0 + (c++)"debListParser::~debListParser()@Base" 0.8.0 + (c++)"pkgAcqArchive::Done(std::basic_string, std::allocator >, unsigned long, std::basic_string, std::allocator >, pkgAcquire::MethodConfig*)@Base" 0.8.0 + (c++)"pkgAcqArchive::Failed(std::basic_string, std::allocator >, pkgAcquire::MethodConfig*)@Base" 0.8.0 + (c++)"pkgAcqArchive::DescURI()@Base" 0.8.0 + (c++)"pkgAcqArchive::HashSum()@Base" 0.8.0 + (c++)"pkgAcqArchive::Finished()@Base" 0.8.0 + (c++)"pkgAcqArchive::IsTrusted()@Base" 0.8.0 + (c++)"pkgAcqArchive::QueueNext()@Base" 0.8.0 + (c++)"pkgAcqArchive::ShortDesc()@Base" 0.8.0 + (c++)"pkgAcqArchive::pkgAcqArchive(pkgAcquire*, pkgSourceList*, pkgRecords*, pkgCache::VerIterator const&, std::basic_string, std::allocator >&)@Base" 0.8.0 + (c++)"pkgAcqArchive::~pkgAcqArchive()@Base" 0.8.0 + (c++)"pkgAcqMetaSig::Custom600Headers()@Base" 0.8.0 + (c++)"pkgAcqMetaSig::Done(std::basic_string, std::allocator >, unsigned long, std::basic_string, std::allocator >, pkgAcquire::MethodConfig*)@Base" 0.8.0 + (c++)"pkgAcqMetaSig::Failed(std::basic_string, std::allocator >, pkgAcquire::MethodConfig*)@Base" 0.8.0 + (c++)"pkgAcqMetaSig::DescURI()@Base" 0.8.0 + (c++)"pkgAcqMetaSig::pkgAcqMetaSig(pkgAcquire*, std::basic_string, std::allocator >, std::basic_string, std::allocator >, std::basic_string, std::allocator >, std::basic_string, std::allocator >, std::basic_string, std::allocator >, std::basic_string, std::allocator >, std::vector > const*, indexRecords*)@Base" 0.8.0 + (c++)"pkgAcqMetaSig::~pkgAcqMetaSig()@Base" 0.8.0 + (c++)"pkgSourceList::ReadAppend(std::basic_string, std::allocator >)@Base" 0.8.0 + (c++)"pkgSourceList::ReadMainList()@Base" 0.8.0 + (c++)"pkgSourceList::ReadSourceDir(std::basic_string, std::allocator >)@Base" 0.8.0 + (c++)"pkgSourceList::Read(std::basic_string, std::allocator >)@Base" 0.8.0 + (c++)"pkgSourceList::Type::GlobalList@Base" 0.8.0 + (c++)"pkgSourceList::Type::GlobalListLen@Base" 0.8.0 + (c++)"pkgSourceList::Type::GetType(char const*)@Base" 0.8.0 + (c++)"pkgSourceList::Type::Type()@Base" 0.8.0 + (c++)"pkgSourceList::Type::~Type()@Base" 0.8.0 + (c++)"pkgSourceList::Reset()@Base" 0.8.0 + (c++)"pkgSourceList::pkgSourceList(std::basic_string, std::allocator >)@Base" 0.8.0 + (c++)"pkgSourceList::pkgSourceList()@Base" 0.8.0 + (c++)"pkgSourceList::~pkgSourceList()@Base" 0.8.0 + (c++)"pkgSrcRecords::File::~File()@Base" 0.8.0 + (c++)"pkgSrcRecords::Find(char const*, bool const&)@Base" 0.8.0 + (c++)"pkgSrcRecords::Parser::BuildDepRec::~BuildDepRec()@Base" 0.8.0 + (c++)"pkgSrcRecords::Parser::BuildDepType(unsigned char const&)@Base" 0.8.0 + (c++)"pkgSrcRecords::Parser::~Parser()@Base" 0.8.0 + (c++)"pkgSrcRecords::Restart()@Base" 0.8.0 + (c++)"pkgSrcRecords::pkgSrcRecords(pkgSourceList&)@Base" 0.8.0 + (c++)"pkgSrcRecords::~pkgSrcRecords()@Base" 0.8.0 + (c++)"pkgTagSection::TrimRecord(bool, char const*&)@Base" 0.8.0 + (c++)"pkgTagSection::Scan(char const*, unsigned long)@Base" 0.8.0 + (c++)"pkgTagSection::Trim()@Base" 0.8.0 + (c++)"pkgVendorList::CreateList(Configuration&)@Base" 0.8.0 + (c++)"pkgVendorList::FindVendor(std::vector, std::allocator >, std::allocator, std::allocator > > >)@Base" 0.8.0 + (c++)"pkgVendorList::ReadMainList()@Base" 0.8.0 + (c++)"pkgVendorList::LookupFingerprint(std::basic_string, std::allocator >)@Base" 0.8.0 + (c++)"pkgVendorList::Read(std::basic_string, std::allocator >)@Base" 0.8.0 + (c++)"pkgVendorList::~pkgVendorList()@Base" 0.8.0 + (c++)"OpTextProgress::Done()@Base" 0.8.0 + (c++)"OpTextProgress::Write(char const*)@Base" 0.8.0 + (c++)"OpTextProgress::Update()@Base" 0.8.0 + (c++)"OpTextProgress::OpTextProgress(Configuration&)@Base" 0.8.0 + (c++)"OpTextProgress::~OpTextProgress()@Base" 0.8.0 + (c++)"SHA256SumValue::Set(std::basic_string, std::allocator >)@Base" 0.8.0 + (c++)"SHA256SumValue::SHA256SumValue(std::basic_string, std::allocator >)@Base" 0.8.0 + (c++)"SHA256SumValue::SHA256SumValue()@Base" 0.8.0 + (c++)"debIFTypeTrans::~debIFTypeTrans()@Base" 0.8.0 + (c++)"debStatusIndex::debStatusIndex(std::basic_string, std::allocator >)@Base" 0.8.0 + (c++)"debStatusIndex::~debStatusIndex()@Base" 0.8.0 + (c++)"SHA256Summation::Add(unsigned char const*, unsigned long)@Base" 0.8.0 + (c++)"SHA256Summation::AddFD(int, unsigned long)@Base" 0.8.0 + (c++)"SHA256Summation::Result()@Base" 0.8.0 + (c++)"SHA256Summation::SHA256Summation()@Base" 0.8.0 + (c++)"debIFTypeStatus::~debIFTypeStatus()@Base" 0.8.0 + (c++)"debRecordParser::Maintainer()@Base" 0.8.0 + (c++)"debRecordParser::SHA256Hash()@Base" 0.8.0 + (c++)"debRecordParser::Jump(pkgCache::VerFileIterator const&)@Base" 0.8.0 + (c++)"debRecordParser::Jump(pkgCache::DescFileIterator const&)@Base" 0.8.0 + (c++)"debRecordParser::Name()@Base" 0.8.0 + (c++)"debRecordParser::GetRec(char const*&, char const*&)@Base" 0.8.0 + (c++)"debRecordParser::MD5Hash()@Base" 0.8.0 + (c++)"debRecordParser::FileName()@Base" 0.8.0 + (c++)"debRecordParser::Homepage()@Base" 0.8.0 + (c++)"debRecordParser::LongDesc()@Base" 0.8.0 + (c++)"debRecordParser::SHA1Hash()@Base" 0.8.0 + (c++)"debRecordParser::ShortDesc()@Base" 0.8.0 + (c++)"debRecordParser::SourcePkg()@Base" 0.8.0 + (c++)"debRecordParser::SourceVer()@Base" 0.8.0 + (c++)"debRecordParser::debRecordParser(std::basic_string, std::allocator >, pkgCache&)@Base" 0.8.0 + (c++)"debRecordParser::~debRecordParser()@Base" 0.8.0 + (c++)"debReleaseIndex::GetIndexFiles()@Base" 0.8.0 + (c++)"debReleaseIndex::debSectionEntry::debSectionEntry(std::basic_string, std::allocator > const&, bool const&)@Base" 0.8.0 + (c++)"debReleaseIndex::PushSectionEntry(debReleaseIndex::debSectionEntry const*)@Base" 0.8.0 + (c++)"debReleaseIndex::PushSectionEntry(std::basic_string, std::allocator > const&, debReleaseIndex::debSectionEntry const*)@Base" 0.8.0 + (c++)"debReleaseIndex::PushSectionEntry(std::vector, std::allocator >, std::allocator, std::allocator > > > const&, debReleaseIndex::debSectionEntry const*)@Base" 0.8.0 + (c++)"debReleaseIndex::debReleaseIndex(std::basic_string, std::allocator > const&, std::basic_string, std::allocator > const&)@Base" 0.8.0 + (c++)"debReleaseIndex::~debReleaseIndex()@Base" 0.8.0 + (c++)"debSLTypeDebSrc::~debSLTypeDebSrc()@Base" 0.8.0 + (c++)"debSLTypeDebian::~debSLTypeDebian()@Base" 0.8.0 + (c++)"debSourcesIndex::debSourcesIndex(std::basic_string, std::allocator >, std::basic_string, std::allocator >, std::basic_string, std::allocator >, bool)@Base" 0.8.0 + (c++)"debSourcesIndex::~debSourcesIndex()@Base" 0.8.0 + (c++)"pkgAcqDiffIndex::ParseDiffIndex(std::basic_string, std::allocator >)@Base" 0.8.0 + (c++)"pkgAcqDiffIndex::Custom600Headers()@Base" 0.8.0 + (c++)"pkgAcqDiffIndex::Done(std::basic_string, std::allocator >, unsigned long, std::basic_string, std::allocator >, pkgAcquire::MethodConfig*)@Base" 0.8.0 + (c++)"pkgAcqDiffIndex::Failed(std::basic_string, std::allocator >, pkgAcquire::MethodConfig*)@Base" 0.8.0 + (c++)"pkgAcqDiffIndex::DescURI()@Base" 0.8.0 + (c++)"pkgAcqDiffIndex::pkgAcqDiffIndex(pkgAcquire*, std::basic_string, std::allocator >, std::basic_string, std::allocator >, std::basic_string, std::allocator >, HashString)@Base" 0.8.0 + (c++)"pkgAcqDiffIndex::~pkgAcqDiffIndex()@Base" 0.8.0 + (c++)"pkgAcqMetaIndex::QueueIndexes(bool)@Base" 0.8.0 + (c++)"pkgAcqMetaIndex::VerifyVendor(std::basic_string, std::allocator >)@Base" 0.8.0 + (c++)"pkgAcqMetaIndex::RetrievalDone(std::basic_string, std::allocator >)@Base" 0.8.0 + (c++)"pkgAcqMetaIndex::Custom600Headers()@Base" 0.8.0 + (c++)"pkgAcqMetaIndex::Done(std::basic_string, std::allocator >, unsigned long, std::basic_string, std::allocator >, pkgAcquire::MethodConfig*)@Base" 0.8.0 + (c++)"pkgAcqMetaIndex::Failed(std::basic_string, std::allocator >, pkgAcquire::MethodConfig*)@Base" 0.8.0 + (c++)"pkgAcqMetaIndex::DescURI()@Base" 0.8.0 + (c++)"pkgAcqMetaIndex::AuthDone(std::basic_string, std::allocator >)@Base" 0.8.0 + (c++)"pkgAcqMetaIndex::pkgAcqMetaIndex(pkgAcquire*, std::basic_string, std::allocator >, std::basic_string, std::allocator >, std::basic_string, std::allocator >, std::basic_string, std::allocator >, std::vector > const*, indexRecords*)@Base" 0.8.0 + (c++)"pkgAcqMetaIndex::~pkgAcqMetaIndex()@Base" 0.8.0 + (c++)"pkgVersionMatch::ExpressionMatches(char const*, char const*)@Base" 0.8.0 + (c++)"pkgVersionMatch::ExpressionMatches(std::basic_string, std::allocator > const&, char const*)@Base" 0.8.0 + (c++)"pkgVersionMatch::Find(pkgCache::PkgIterator)@Base" 0.8.0 + (c++)"pkgVersionMatch::MatchVer(char const*, std::basic_string, std::allocator >, bool)@Base" 0.8.0 + (c++)"pkgVersionMatch::FileMatch(pkgCache::PkgFileIterator)@Base" 0.8.0 + (c++)"pkgVersionMatch::pkgVersionMatch(std::basic_string, std::allocator >, pkgVersionMatch::MatchType)@Base" 0.8.0 + (c++)"pkgVersionMatch::~pkgVersionMatch()@Base" 0.8.0 + (c++)"TranslationsCopy::CopyTranslations(std::basic_string, std::allocator >, std::basic_string, std::allocator >, std::vector, std::allocator >, std::allocator, std::allocator > > >&, pkgCdromStatus*)@Base" 0.8.0 + (c++)"debPackagesIndex::debPackagesIndex(std::basic_string, std::allocator > const&, std::basic_string, std::allocator > const&, std::basic_string, std::allocator > const&, bool const&, std::basic_string, std::allocator > const&)@Base" 0.8.0 + (c++)"debPackagesIndex::~debPackagesIndex()@Base" 0.8.0 + (c++)"pkgAcqIndexDiffs::QueueNextDiff()@Base" 0.8.0 + (c++)"pkgAcqIndexDiffs::Done(std::basic_string, std::allocator >, unsigned long, std::basic_string, std::allocator >, pkgAcquire::MethodConfig*)@Base" 0.8.0 + (c++)"pkgAcqIndexDiffs::Failed(std::basic_string, std::allocator >, pkgAcquire::MethodConfig*)@Base" 0.8.0 + (c++)"pkgAcqIndexDiffs::Finish(bool)@Base" 0.8.0 + (c++)"pkgAcqIndexDiffs::DescURI()@Base" 0.8.0 + (c++)"pkgAcqIndexDiffs::pkgAcqIndexDiffs(pkgAcquire*, std::basic_string, std::allocator >, std::basic_string, std::allocator >, std::basic_string, std::allocator >, HashString, std::basic_string, std::allocator >, std::vector >)@Base" 0.8.0 + (c++)"pkgAcqIndexDiffs::~pkgAcqIndexDiffs()@Base" 0.8.0 + (c++)"pkgAcqIndexTrans::Custom600Headers()@Base" 0.8.0 + (c++)"pkgAcqIndexTrans::Failed(std::basic_string, std::allocator >, pkgAcquire::MethodConfig*)@Base" 0.8.0 + (c++)"pkgAcqIndexTrans::pkgAcqIndexTrans(pkgAcquire*, std::basic_string, std::allocator >, std::basic_string, std::allocator >, std::basic_string, std::allocator >)@Base" 0.8.0 + (c++)"pkgAcqIndexTrans::~pkgAcqIndexTrans()@Base" 0.8.0 + (c++)"pkgAcquireStatus::Done(pkgAcquire::ItemDesc&)@Base" 0.8.0 + (c++)"pkgAcquireStatus::Fail(pkgAcquire::ItemDesc&)@Base" 0.8.0 + (c++)"pkgAcquireStatus::Stop()@Base" 0.8.0 + (c++)"pkgAcquireStatus::Fetch(pkgAcquire::ItemDesc&)@Base" 0.8.0 + (c++)"pkgAcquireStatus::Pulse(pkgAcquire*)@Base" 0.8.0 + (c++)"pkgAcquireStatus::Start()@Base" 0.8.0 + (c++)"pkgAcquireStatus::IMSHit(pkgAcquire::ItemDesc&)@Base" 0.8.0 + (c++)"pkgAcquireStatus::Fetched(unsigned long, unsigned long)@Base" 0.8.0 + (c++)"pkgAcquireStatus::pkgAcquireStatus()@Base" 0.8.0 + (c++)"pkgAcquireStatus::~pkgAcquireStatus()@Base" 0.8.0 + (c++)"PreferenceSection::TrimRecord(bool, char const*&)@Base" 0.8.0 + (c++)"pkgArchiveCleaner::Go(std::basic_string, std::allocator >, pkgCache&)@Base" 0.8.0 + (c++)"pkgCacheGenerator::ListParser::NewDepends(pkgCache::VerIterator&, std::basic_string, std::allocator > const&, std::basic_string, std::allocator > const&, std::basic_string, std::allocator > const&, unsigned int, unsigned int)@Base" 0.8.0 + (c++)"pkgCacheGenerator::ListParser::NewProvides(pkgCache::VerIterator&, std::basic_string, std::allocator > const&, std::basic_string, std::allocator > const&, std::basic_string, std::allocator > const&)@Base" 0.8.0 + (c++)"pkgCacheGenerator::ListParser::CollectFileProvides(pkgCache&, pkgCache::VerIterator&)@Base" 0.8.0 + (c++)"pkgCacheGenerator::ListParser::~ListParser()@Base" 0.8.0 + (c++)"pkgCacheGenerator::NewDepends(pkgCache::PkgIterator&, pkgCache::VerIterator&, std::basic_string, std::allocator > const&, unsigned int const&, unsigned int const&, unsigned int*)@Base" 0.8.0 + (c++)"pkgCacheGenerator::NewFileVer(pkgCache::VerIterator&, pkgCacheGenerator::ListParser&)@Base" 0.8.0 + (c++)"pkgCacheGenerator::NewPackage(pkgCache::PkgIterator&, std::basic_string, std::allocator > const&, std::basic_string, std::allocator > const&)@Base" 0.8.0 + (c++)"pkgCacheGenerator::NewVersion(pkgCache::VerIterator&, std::basic_string, std::allocator > const&, unsigned long)@Base" 0.8.0 + (c++)"pkgCacheGenerator::SelectFile(std::basic_string, std::allocator > const&, std::basic_string, std::allocator > const&, pkgIndexFile const&, unsigned long)@Base" 0.8.0 + (c++)"pkgCacheGenerator::FinishCache(OpProgress*)@Base" 0.8.0 + (c++)"pkgCacheGenerator::NewFileDesc(pkgCache::DescIterator&, pkgCacheGenerator::ListParser&)@Base" 0.8.0 + (c++)"pkgCacheGenerator::AllocateInMap(unsigned long const&)@Base" 0.8.0 + (c++)"pkgCacheGenerator::NewDescription(pkgCache::DescIterator&, std::basic_string, std::allocator > const&, MD5SumValue const&, unsigned int)@Base" 0.8.0 + (c++)"pkgCacheGenerator::MakeStatusCache(pkgSourceList&, OpProgress*, MMap**, bool)@Base" 0.8.0 + (c++)"pkgCacheGenerator::WriteUniqString(char const*, unsigned int)@Base" 0.8.0 + (c++)"pkgCacheGenerator::WriteStringInMap(char const*)@Base" 0.8.0 + (c++)"pkgCacheGenerator::WriteStringInMap(char const*, unsigned long const&)@Base" 0.8.0 + (c++)"pkgCacheGenerator::CreateDynamicMMap(FileFd*, unsigned long)@Base" 0.8.0 + (c++)"pkgCacheGenerator::MergeFileProvides(pkgCacheGenerator::ListParser&)@Base" 0.8.0 + (c++)"pkgCacheGenerator::MakeOnlyStatusCache(OpProgress*, DynamicMMap**)@Base" 0.8.0 + (c++)"pkgCacheGenerator::ReMap(void const*, void const*)@Base" 0.8.0 + (c++)"pkgCacheGenerator::Dynamic::toReMap@Base" 0.8.0 + (c++)"pkgCacheGenerator::Dynamic::toReMap@Base" 0.8.0 + (c++)"pkgCacheGenerator::Dynamic::toReMap@Base" 0.8.0 + (c++)"pkgCacheGenerator::Dynamic::toReMap@Base" 0.8.0 + (c++)"pkgCacheGenerator::Dynamic::toReMap@Base" 0.8.0 + (c++)"pkgCacheGenerator::Dynamic::toReMap@Base" 0.8.0 + (c++)"pkgCacheGenerator::Dynamic::toReMap@Base" 0.8.0 + (c++)"pkgCacheGenerator::NewGroup(pkgCache::GrpIterator&, std::basic_string, std::allocator > const&)@Base" 0.8.0 + (c++)"pkgCacheGenerator::MergeList(pkgCacheGenerator::ListParser&, pkgCache::VerIterator*)@Base" 0.8.0 + (c++)"pkgCacheGenerator::pkgCacheGenerator(DynamicMMap*, OpProgress*)@Base" 0.8.0 + (c++)"pkgCacheGenerator::~pkgCacheGenerator()@Base" 0.8.0 + (c++)"pkgPackageManager::FixMissing()@Base" 0.8.0 + (c++)"pkgPackageManager::EarlyRemove(pkgCache::PkgIterator)@Base" 0.8.0 + (c++)"pkgPackageManager::GetArchives(pkgAcquire*, pkgSourceList*, pkgRecords*)@Base" 0.8.0 + (c++)"pkgPackageManager::SmartRemove(pkgCache::PkgIterator)@Base" 0.8.0 + (c++)"pkgPackageManager::SmartUnPack(pkgCache::PkgIterator)@Base" 0.8.0 + (c++)"pkgPackageManager::ConfigureAll()@Base" 0.8.0 + (c++)"pkgPackageManager::ImmediateAdd(pkgCache::PkgIterator, bool, unsigned int const&)@Base" 0.8.0 + (c++)"pkgPackageManager::OrderInstall()@Base" 0.8.0 + (c++)"pkgPackageManager::DepAlwaysTrue(pkgCache::DepIterator)@Base" 0.8.0 + (c++)"pkgPackageManager::SmartConfigure(pkgCache::PkgIterator)@Base" 0.8.0 + (c++)"pkgPackageManager::CheckRConflicts(pkgCache::PkgIterator, pkgCache::DepIterator, char const*)@Base" 0.8.0 + (c++)"pkgPackageManager::CreateOrderList()@Base" 0.8.0 + (c++)"pkgPackageManager::DoInstallPostFork(int)@Base" 0.8.0 + (c++)"pkgPackageManager::Go(int)@Base" 0.8.0 + (c++)"pkgPackageManager::Reset()@Base" 0.8.0 + (c++)"pkgPackageManager::DepAdd(pkgOrderList&, pkgCache::PkgIterator, int)@Base" 0.8.0 + (c++)"pkgPackageManager::Remove(pkgCache::PkgIterator, bool)@Base" 0.8.0 + (c++)"pkgPackageManager::Install(pkgCache::PkgIterator, std::basic_string, std::allocator >)@Base" 0.8.0 + (c++)"pkgPackageManager::Configure(pkgCache::PkgIterator)@Base" 0.8.0 + (c++)"pkgPackageManager::DoInstall(int)@Base" 0.8.0 + (c++)"pkgPackageManager::pkgPackageManager(pkgDepCache*)@Base" 0.8.0 + (c++)"pkgPackageManager::~pkgPackageManager()@Base" 0.8.0 + (c++)"debSrcRecordParser::BuildDepends(std::vector >&, bool const&, bool const&)@Base" 0.8.0 + (c++)"debSrcRecordParser::Jump(unsigned long const&)@Base" 0.8.0 + (c++)"debSrcRecordParser::Step()@Base" 0.8.0 + (c++)"debSrcRecordParser::AsStr()@Base" 0.8.0 + (c++)"debSrcRecordParser::Files(std::vector >&)@Base" 0.8.0 + (c++)"debSrcRecordParser::Offset()@Base" 0.8.0 + (c++)"debSrcRecordParser::Restart()@Base" 0.8.0 + (c++)"debSrcRecordParser::Binaries()@Base" 0.8.0 + (c++)"debSrcRecordParser::~debSrcRecordParser()@Base" 0.8.0 + (c++)"pkgProblemResolver::MakeScores()@Base" 0.8.0 + (c++)"pkgProblemResolver::ResolveByKeep()@Base" 0.8.0 + (c++)"pkgProblemResolver::InstallProtect()@Base" 0.8.0 + (c++)"pkgProblemResolver::This@Base" 0.8.0 + (c++)"pkgProblemResolver::Resolve(bool)@Base" 0.8.0 + (c++)"pkgProblemResolver::DoUpgrade(pkgCache::PkgIterator)@Base" 0.8.0 + (c++)"pkgProblemResolver::ScoreSort(void const*, void const*)@Base" 0.8.0 + (c++)"pkgProblemResolver::pkgProblemResolver(pkgDepCache*)@Base" 0.8.0 + (c++)"pkgProblemResolver::~pkgProblemResolver()@Base" 0.8.0 + (c++)"debVersioningSystem::CmpFragment(char const*, char const*, char const*, char const*)@Base" 0.8.0 + (c++)"debVersioningSystem::DoCmpVersion(char const*, char const*, char const*, char const*)@Base" 0.8.0 + (c++)"debVersioningSystem::DoCmpReleaseVer(char const*, char const*, char const*, char const*)@Base" 0.8.0 + (c++)"debVersioningSystem::UpstreamVersion(char const*)@Base" 0.8.0 + (c++)"debVersioningSystem::CheckDep(char const*, int, char const*)@Base" 0.8.0 + (c++)"debVersioningSystem::debVersioningSystem()@Base" 0.8.0 + (c++)"debVersioningSystem::~debVersioningSystem()@Base" 0.8.0 + (c++)"pkgUdevCdromDevices::Scan()@Base" 0.8.0 + (c++)"pkgUdevCdromDevices::Dlopen()@Base" 0.8.0 + (c++)"pkgUdevCdromDevices::pkgUdevCdromDevices()@Base" 0.8.0 + (c++)"pkgUdevCdromDevices::~pkgUdevCdromDevices()@Base" 0.8.0 + (c++)"pkgVersioningSystem::GlobalList@Base" 0.8.0 + (c++)"pkgVersioningSystem::GlobalListLen@Base" 0.8.0 + (c++)"pkgVersioningSystem::TestCompatibility(pkgVersioningSystem const&)@Base" 0.8.0 + (c++)"pkgVersioningSystem::GetVS(char const*)@Base" 0.8.0 + (c++)"pkgVersioningSystem::pkgVersioningSystem()@Base" 0.8.0 + (c++)"pkgVersioningSystem::~pkgVersioningSystem()@Base" 0.8.0 + (c++)"debTranslationsIndex::debTranslationsIndex(std::basic_string, std::allocator >, std::basic_string, std::allocator >, std::basic_string, std::allocator >, char const*)@Base" 0.8.0 + (c++)"debTranslationsIndex::~debTranslationsIndex()@Base" 0.8.0 + (c++)"APT::PackageSet::FromString(pkgCacheFile&, std::basic_string, std::allocator > const&, APT::CacheSetHelper&)@Base" 0.8.0 + (c++)"APT::PackageSet::FromCommandLine(pkgCacheFile&, char const**, APT::CacheSetHelper&)@Base" 0.8.0 + (c++)"APT::PackageSet::GroupedFromCommandLine(pkgCacheFile&, char const**, std::list > const&, unsigned short const&, APT::CacheSetHelper&)@Base" 0.8.0 + (c++)"APT::PackageSet::FromName(pkgCacheFile&, std::basic_string, std::allocator > const&, APT::CacheSetHelper&)@Base" 0.8.0 + (c++)"APT::PackageSet::FromTask(pkgCacheFile&, std::basic_string, std::allocator >, APT::CacheSetHelper&)@Base" 0.8.0 + (c++)"APT::PackageSet::FromRegEx(pkgCacheFile&, std::basic_string, std::allocator >, APT::CacheSetHelper&)@Base" 0.8.0 + (c++)"APT::PackageSet::~PackageSet()@Base" 0.8.0 + (c++|optional=inherent)"APT::PackageSet::PackageSet(APT::PackageSet const&)@Base" 0.8.0 + (c++)"APT::VersionSet::FromString(pkgCacheFile&, std::basic_string, std::allocator >, APT::VersionSet::Version const&, APT::CacheSetHelper&, bool const&)@Base" 0.8.0 + (c++)"APT::VersionSet::FromPackage(pkgCacheFile&, pkgCache::PkgIterator const&, APT::VersionSet::Version const&, APT::CacheSetHelper&)@Base" 0.8.0 + (c++)"APT::VersionSet::FromCommandLine(pkgCacheFile&, char const**, APT::VersionSet::Version const&, APT::CacheSetHelper&)@Base" 0.8.0 + (c++)"APT::VersionSet::getCandidateVer(pkgCacheFile&, pkgCache::PkgIterator const&, APT::CacheSetHelper&)@Base" 0.8.0 + (c++)"APT::VersionSet::getInstalledVer(pkgCacheFile&, pkgCache::PkgIterator const&, APT::CacheSetHelper&)@Base" 0.8.0 + (c++)"APT::VersionSet::GroupedFromCommandLine(pkgCacheFile&, char const**, std::list > const&, unsigned short const&, APT::CacheSetHelper&)@Base" 0.8.0 + (c++)"APT::VersionSet::~VersionSet()@Base" 0.8.0 + (c++|optional=inline)"APT::VersionSet::insert(APT::VersionSet const&)@Base" 0.8.0 + (c++|optional=inline)"APT::VersionSet::insert(pkgCache::VerIterator const&)@Base" 0.8.0 + (c++)"APT::CacheFilter::PackageNameMatchesRegEx::PackageNameMatchesRegEx(std::basic_string, std::allocator > const&)@Base" 0.8.0 + (c++)"APT::CacheFilter::PackageNameMatchesRegEx::~PackageNameMatchesRegEx()@Base" 0.8.0 + (c++)"APT::CacheFilter::PackageNameMatchesRegEx::operator()(pkgCache::GrpIterator const&)@Base" 0.8.0 + (c++)"APT::CacheFilter::PackageNameMatchesRegEx::operator()(pkgCache::PkgIterator const&)@Base" 0.8.0 + (c++)"APT::Configuration::getLanguages(bool const&, bool const&, char const**)@Base" 0.8.0 + (c++)"APT::Configuration::getArchitectures(bool const&)@Base" 0.8.0 + (c++)"APT::Configuration::checkArchitecture(std::basic_string, std::allocator > const&)@Base" 0.8.0 + (c++)"APT::Configuration::getCompressionTypes(bool const&)@Base" 0.8.0 + (c++)"APT::CacheSetHelper::canNotFindTask(pkgCacheFile&, std::basic_string, std::allocator >)@Base" 0.8.0 + (c++)"APT::CacheSetHelper::canNotFindRegEx(pkgCacheFile&, std::basic_string, std::allocator >)@Base" 0.8.0 + (c++)"APT::CacheSetHelper::canNotFindAllVer(pkgCacheFile&, pkgCache::PkgIterator const&)@Base" 0.8.0 + (c++)"APT::CacheSetHelper::canNotFindPackage(pkgCacheFile&, std::basic_string, std::allocator > const&)@Base" 0.8.0 + (c++)"APT::CacheSetHelper::canNotFindPkgName(pkgCacheFile&, std::basic_string, std::allocator > const&)@Base" 0.8.0 + (c++)"APT::CacheSetHelper::showTaskSelection(APT::PackageSet const&, std::basic_string, std::allocator > const&)@Base" 0.8.0 + (c++)"APT::CacheSetHelper::showRegExSelection(APT::PackageSet const&, std::basic_string, std::allocator > const&)@Base" 0.8.0 + (c++)"APT::CacheSetHelper::canNotFindNewestVer(pkgCacheFile&, pkgCache::PkgIterator const&)@Base" 0.8.0 + (c++)"APT::CacheSetHelper::showSelectedVersion(pkgCache::PkgIterator const&, pkgCache::VerIterator, std::basic_string, std::allocator > const&, bool const&)@Base" 0.8.0 + (c++)"APT::CacheSetHelper::canNotFindCandInstVer(pkgCacheFile&, pkgCache::PkgIterator const&)@Base" 0.8.0 + (c++)"APT::CacheSetHelper::canNotFindInstCandVer(pkgCacheFile&, pkgCache::PkgIterator const&)@Base" 0.8.0 + (c++)"APT::CacheSetHelper::canNotFindCandidateVer(pkgCacheFile&, pkgCache::PkgIterator const&)@Base" 0.8.0 + (c++)"APT::CacheSetHelper::canNotFindInstalledVer(pkgCacheFile&, pkgCache::PkgIterator const&)@Base" 0.8.0 + (c++)"APT::CacheSetHelper::~CacheSetHelper()@Base" 0.8.0 + (c++)"URI::NoUserPassword(std::basic_string, std::allocator > const&)@Base" 0.8.0 + (c++)"URI::CopyFrom(std::basic_string, std::allocator > const&)@Base" 0.8.0 + (c++)"URI::SiteOnly(std::basic_string, std::allocator > const&)@Base" 0.8.0 + (c++)"URI::~URI()@Base" 0.8.0 + (c++)"URI::operator std::basic_string, std::allocator >()@Base" 0.8.0 + (c++)"MMap::Map(FileFd&)@Base" 0.8.0 + (c++)"MMap::Sync(unsigned long, unsigned long)@Base" 0.8.0 + (c++)"MMap::Sync()@Base" 0.8.0 + (c++)"MMap::Close(bool)@Base" 0.8.0 + (c++)"MMap::MMap(FileFd&, unsigned long)@Base" 0.8.0 + (c++)"MMap::MMap(unsigned long)@Base" 0.8.0 + (c++)"MMap::~MMap()@Base" 0.8.0 + (c++)"FileFd::OpenDescriptor(int, FileFd::OpenMode, bool)@Base" 0.8.0 + (c++)"FileFd::Open(std::basic_string, std::allocator >, FileFd::OpenMode, unsigned long)@Base" 0.8.0 + (c++)"FileFd::Read(void*, unsigned long, unsigned long*)@Base" 0.8.0 + (c++)"FileFd::Seek(unsigned long)@Base" 0.8.0 + (c++)"FileFd::Size()@Base" 0.8.0 + (c++)"FileFd::Skip(unsigned long)@Base" 0.8.0 + (c++)"FileFd::Sync()@Base" 0.8.0 + (c++)"FileFd::Tell()@Base" 0.8.0 + (c++)"FileFd::Close()@Base" 0.8.0 + (c++)"FileFd::Write(void const*, unsigned long)@Base" 0.8.0 + (c++)"FileFd::Truncate(unsigned long)@Base" 0.8.0 + (c++|optional=inline)"FileFd::FileFd(std::basic_string, std::allocator >, FileFd::OpenMode, unsigned long)@Base" 0.8.0 + (c++)"FileFd::~FileFd()@Base" 0.8.0 + (c++)"Hashes::AddFD(int, unsigned long)@Base" 0.8.0 + (c++)"Vendor::CheckDist(std::basic_string, std::allocator >)@Base" 0.8.0 + (c++)"Vendor::Vendor(std::basic_string, std::allocator >, std::basic_string, std::allocator >, std::vector >*)@Base" 0.8.0 + (c++)"Vendor::~Vendor()@Base" 0.8.0 + (c++)"DiffInfo::~DiffInfo()@Base" 0.8.0 + (c++)"pkgCache::CompTypeDeb(unsigned char)@Base" 0.8.0 + (c++)"pkgCache::DepIterator::GlobOr(pkgCache::DepIterator&, pkgCache::DepIterator&)@Base" 0.8.0 + (c++)"pkgCache::DepIterator::operator++(int)@Base" 0.8.0 + (c++)"pkgCache::DepIterator::operator++()@Base" 0.8.0 + (c++)"pkgCache::GrpIterator::operator++(int)@Base" 0.8.0 + (c++)"pkgCache::GrpIterator::operator++()@Base" 0.8.0 + (c++)"pkgCache::PkgIterator::operator++(int)@Base" 0.8.0 + (c++)"pkgCache::PkgIterator::operator++()@Base" 0.8.0 + (c++)"pkgCache::PrvIterator::operator++(int)@Base" 0.8.0 + (c++)"pkgCache::PrvIterator::operator++()@Base" 0.8.0 + (c++)"pkgCache::VerIterator::operator++(int)@Base" 0.8.0 + (c++)"pkgCache::VerIterator::operator++()@Base" 0.8.0 + (c++)"pkgCache::DescIterator::operator++(int)@Base" 0.8.0 + (c++)"pkgCache::DescIterator::operator++()@Base" 0.8.0 + (c++)"pkgCache::PkgFileIterator::IsOk()@Base" 0.8.0 + (c++)"pkgCache::PkgFileIterator::RelStr()@Base" 0.8.0 + (c++)"pkgCache::PkgFileIterator::operator++(int)@Base" 0.8.0 + (c++)"pkgCache::PkgFileIterator::operator++()@Base" 0.8.0 + (c++)"pkgCache::VerFileIterator::operator++(int)@Base" 0.8.0 + (c++)"pkgCache::VerFileIterator::operator++()@Base" 0.8.0 + (c++)"pkgCache::DescFileIterator::operator++(int)@Base" 0.8.0 + (c++)"pkgCache::DescFileIterator::operator++()@Base" 0.8.0 + (c++)"pkgCache::SingleArchFindPkg(std::basic_string, std::allocator > const&)@Base" 0.8.0 + (c++)"pkgCache::ReMap(bool const&)@Base" 0.8.0 + (c++)"pkgCache::Header::Header()@Base" 0.8.0 + (c++)"pkgCache::DepType(unsigned char)@Base" 0.8.0 + (c++)"pkgCache::FindGrp(std::basic_string, std::allocator > const&)@Base" 0.8.0 + (c++)"pkgCache::FindPkg(std::basic_string, std::allocator > const&)@Base" 0.8.0 + (c++)"pkgCache::FindPkg(std::basic_string, std::allocator > const&, std::basic_string, std::allocator > const&)@Base" 0.8.0 + (c++)"pkgCache::CompType(unsigned char)@Base" 0.8.0 + (c++)"pkgCache::Priority(unsigned char)@Base" 0.8.0 + (c++)"pkgCache::pkgCache(MMap*, bool)@Base" 0.8.0 + (c++)"pkgCache::~pkgCache()@Base" 0.8.0 + (c++)"pkgCdrom::DropRepeats(std::vector, std::allocator >, std::allocator, std::allocator > > >&, char const*)@Base" 0.8.0 + (c++)"pkgCdrom::FindPackages(std::basic_string, std::allocator >, std::vector, std::allocator >, std::allocator, std::allocator > > >&, std::vector, std::allocator >, std::allocator, std::allocator > > >&, std::vector, std::allocator >, std::allocator, std::allocator > > >&, std::vector, std::allocator >, std::allocator, std::allocator > > >&, std::basic_string, std::allocator >&, pkgCdromStatus*, unsigned int)@Base" 0.8.0 + (c++)"pkgCdrom::WriteDatabase(Configuration&)@Base" 0.8.0 + (c++)"pkgCdrom::DropBinaryArch(std::vector, std::allocator >, std::allocator, std::allocator > > >&)@Base" 0.8.0 + (c++)"pkgCdrom::WriteSourceList(std::basic_string, std::allocator >, std::vector, std::allocator >, std::allocator, std::allocator > > >&, bool)@Base" 0.8.0 + (c++)"pkgCdrom::ReduceSourcelist(std::basic_string, std::allocator >, std::vector, std::allocator >, std::allocator, std::allocator > > >&)@Base" 0.8.0 + (c++)"pkgCdrom::Add(pkgCdromStatus*)@Base" 0.8.0 + (c++)"pkgCdrom::Ident(std::basic_string, std::allocator >&, pkgCdromStatus*)@Base" 0.8.0 + (c++)"pkgCdrom::Score(std::basic_string, std::allocator >)@Base" 0.8.0 + (c++)"IndexCopy::CopyPackages(std::basic_string, std::allocator >, std::basic_string, std::allocator >, std::vector, std::allocator >, std::allocator, std::allocator > > >&, pkgCdromStatus*)@Base" 0.8.0 + (c++)"IndexCopy::ReconstructChop(unsigned long&, std::basic_string, std::allocator >, std::basic_string, std::allocator >)@Base" 0.8.0 + (c++)"IndexCopy::ReconstructPrefix(std::basic_string, std::allocator >&, std::basic_string, std::allocator >, std::basic_string, std::allocator >, std::basic_string, std::allocator >)@Base" 0.8.0 + (c++)"IndexCopy::ConvertToSourceList(std::basic_string, std::allocator >, std::basic_string, std::allocator >&)@Base" 0.8.0 + (c++)"IndexCopy::ChopDirs(std::basic_string, std::allocator >, unsigned int)@Base" 0.8.0 + (c++)"IndexCopy::GrabFirst(std::basic_string, std::allocator >, std::basic_string, std::allocator >&, unsigned int)@Base" 0.8.0 + (c++)"IndexCopy::~IndexCopy()@Base" 0.8.0 + (c++|regex|optional=template)"^SPtrArray<[^ ]+>::~SPtrArray\(\)@Base$" 0.8.0 + (c++|optional=template)"SPtrArray::~SPtrArray()@Base" 0.8.0 + (c++)"SigVerify::CopyAndVerify(std::basic_string, std::allocator >, std::basic_string, std::allocator >, std::vector, std::allocator >, std::allocator, std::allocator > > >&, std::vector, std::allocator >, std::allocator, std::allocator > > >, std::vector, std::allocator >, std::allocator, std::allocator > > >)@Base" 0.8.0 + (c++)"SigVerify::CopyMetaIndex(std::basic_string, std::allocator >, std::basic_string, std::allocator >, std::basic_string, std::allocator >, std::basic_string, std::allocator >)@Base" 0.8.0 + (c++)"SigVerify::Verify(std::basic_string, std::allocator >, std::basic_string, std::allocator >, indexRecords*)@Base" 0.8.0 + (c++)"SigVerify::RunGPGV(std::basic_string, std::allocator > const&, std::basic_string, std::allocator > const&, int const&, int*)@Base" 0.8.0 + (c++)"debSystem::Initialize(Configuration&)@Base" 0.8.0 + (c++)"debSystem::CheckUpdates()@Base" 0.8.0 + (c++)"debSystem::AddStatusFiles(std::vector >&)@Base" 0.8.0 + (c++)"debSystem::ArchiveSupported(char const*)@Base" 0.8.0 + (c++)"debSystem::Lock()@Base" 0.8.0 + (c++)"debSystem::Score(Configuration const&)@Base" 0.8.0 + (c++)"debSystem::UnLock(bool)@Base" 0.8.0 + (c++)"debSystem::debSystem()@Base" 0.8.0 + (c++)"debSystem::~debSystem()@Base" 0.8.0 + (c++)"metaIndex::~metaIndex()@Base" 0.8.0 + (c++)"pkgDPkgPM::SendV2Pkgs(_IO_FILE*)@Base" 0.8.0 + (c++)"pkgDPkgPM::DoTerminalPty(int)@Base" 0.8.0 + (c++)"pkgDPkgPM::DoDpkgStatusFd(int, int)@Base" 0.8.0 + (c++)"pkgDPkgPM::WriteHistoryTag(std::basic_string, std::allocator > const&, std::basic_string, std::allocator >)@Base" 0.8.0 + (c++)"pkgDPkgPM::WriteApportReport(char const*, char const*)@Base" 0.8.0 + (c++)"pkgDPkgPM::RunScriptsWithPkgs(char const*)@Base" 0.8.0 + (c++)"pkgDPkgPM::ProcessDpkgStatusLine(int, char*)@Base" 0.8.0 + (c++)"pkgDPkgPM::handleDisappearAction(std::basic_string, std::allocator > const&)@Base" 0.8.0 + (c++)"pkgDPkgPM::Go(int)@Base" 0.8.0 + (c++)"pkgDPkgPM::Reset()@Base" 0.8.0 + (c++)"pkgDPkgPM::Remove(pkgCache::PkgIterator, bool)@Base" 0.8.0 + (c++)"pkgDPkgPM::DoStdin(int)@Base" 0.8.0 + (c++)"pkgDPkgPM::Install(pkgCache::PkgIterator, std::basic_string, std::allocator >)@Base" 0.8.0 + (c++)"pkgDPkgPM::OpenLog()@Base" 0.8.0 + (c++)"pkgDPkgPM::CloseLog()@Base" 0.8.0 + (c++)"pkgDPkgPM::Configure(pkgCache::PkgIterator)@Base" 0.8.0 + (c++)"pkgDPkgPM::pkgDPkgPM(pkgDepCache*)@Base" 0.8.0 + (c++)"pkgDPkgPM::~pkgDPkgPM()@Base" 0.8.0 + (c++)"pkgPolicy::GetPriority(pkgCache::PkgIterator const&)@Base" 0.8.0 + (c++)"pkgPolicy::InitDefaults()@Base" 0.8.0 + (c++)"pkgPolicy::IsImportantDep(pkgCache::DepIterator const&)@Base" 0.8.0 + (c++)"pkgPolicy::GetCandidateVer(pkgCache::PkgIterator const&)@Base" 0.8.0 + (c++)"pkgPolicy::PkgPin::~PkgPin()@Base" 0.8.0 + (c++)"pkgPolicy::GetMatch(pkgCache::PkgIterator const&)@Base" 0.8.0 + (c++)"pkgPolicy::CreatePin(pkgVersionMatch::MatchType, std::basic_string, std::allocator >, std::basic_string, std::allocator >, short)@Base" 0.8.0 + (c++)"pkgPolicy::pkgPolicy(pkgCache*)@Base" 0.8.0 + (c++)"pkgPolicy::~pkgPolicy()@Base" 0.8.0 + (c++)"pkgSystem::GlobalList@Base" 0.8.0 + (c++)"pkgSystem::Initialize(Configuration&)@Base" 0.8.0 + (c++)"pkgSystem::GlobalListLen@Base" 0.8.0 + (c++)"pkgSystem::Score(Configuration const&)@Base" 0.8.0 + (c++)"pkgSystem::GetSystem(char const*)@Base" 0.8.0 + (c++)"pkgSystem::pkgSystem()@Base" 0.8.0 + (c++)"pkgSystem::~pkgSystem()@Base" 0.8.0 + (c++)"HashString::VerifyFile(std::basic_string, std::allocator >) const@Base" 0.8.0 + (c++)"HashString::empty() const@Base" 0.8.0 + (c++)"HashString::toStr() const@Base" 0.8.0 + (c++|optional=inherent)"HashString::operator=(HashString const&)@Base" 0.8.0 + (c++)"CommandLine::FileSize() const@Base" 0.8.0 + (c++)"GlobalError::empty(GlobalError::MsgType const&) const@Base" 0.8.0 + (c++)"MD5SumValue::Value() const@Base" 0.8.0 + (c++)"MD5SumValue::operator==(MD5SumValue const&) const@Base" 0.8.0 + (c++)"SHA1SumValue::Value() const@Base" 0.8.0 + (c++)"SHA1SumValue::operator==(SHA1SumValue const&) const@Base" 0.8.0 + (c++)"debIFTypePkg::CreatePkgParser(pkgCache::PkgFileIterator) const@Base" 0.8.0 + (c++)"debSLTypeDeb::CreateItem(std::vector >&, std::basic_string, std::allocator > const&, std::basic_string, std::allocator > const&, std::basic_string, std::allocator > const&, std::map, std::allocator >, std::basic_string, std::allocator >, std::less, std::allocator > >, std::allocator, std::allocator > const, std::basic_string, std::allocator > > > > const&) const@Base" 0.8.0 + (c++)"indexRecords::GetValidUntil() const@Base" 0.8.0 + (c++)"indexRecords::GetExpectedDist() const@Base" 0.8.0 + (c++)"indexRecords::Exists(std::basic_string, std::allocator > const&) const@Base" 0.8.0 + (c++)"indexRecords::GetDist() const@Base" 0.8.0 + (c++)"indexRecords::CheckDist(std::basic_string, std::allocator >) const@Base" 0.8.0 + (c++)"pkgIndexFile::ArchiveURI(std::basic_string, std::allocator >) const@Base" 0.8.0 + (c++)"pkgIndexFile::SourceInfo(pkgSrcRecords::Parser const&, pkgSrcRecords::File const&) const@Base" 0.8.0 + (c++)"pkgIndexFile::ArchiveInfo(pkgCache::VerIterator) const@Base" 0.8.0 + (c++)"pkgIndexFile::FindInCache(pkgCache&) const@Base" 0.8.0 + (c++)"pkgIndexFile::CreateSrcParser() const@Base" 0.8.0 + (c++)"pkgIndexFile::MergeFileProvides(pkgCacheGenerator&, OpProgress*) const@Base" 0.8.0 + (c++)"pkgIndexFile::MergeFileProvides(pkgCacheGenerator&, OpProgress&) const@Base" 0.8.0 + (c++)"pkgIndexFile::Type::CreatePkgParser(pkgCache::PkgFileIterator) const@Base" 0.8.0 + (c++)"pkgIndexFile::Merge(pkgCacheGenerator&, OpProgress*) const@Base" 0.8.0 + (c++)"pkgIndexFile::Merge(pkgCacheGenerator&, OpProgress&) const@Base" 0.8.0 + (c++)"Configuration::FindVector(char const*) const@Base" 0.8.0 + (c++)"Configuration::MatchAgainstConfig::Match(char const*) const@Base" 0.8.0 + (c++)"Configuration::Find(char const*, char const*) const@Base" 0.8.0 + (c++)"Configuration::Item::FullTag(Configuration::Item const*) const@Base" 0.8.0 + (c++)"Configuration::FindB(char const*, bool const&) const@Base" 0.8.0 + (c++)"Configuration::FindI(char const*, int const&) const@Base" 0.8.0 + (c++)"Configuration::Exists(char const*) const@Base" 0.8.0 + (c++)"Configuration::FindAny(char const*, char const*) const@Base" 0.8.0 + (c++)"Configuration::FindDir(char const*, char const*) const@Base" 0.8.0 + (c++)"Configuration::FindFile(char const*, char const*) const@Base" 0.8.0 + (c++)"Configuration::ExistsAny(char const*) const@Base" 0.8.0 + (c++)"pkgSourceList::GetIndexes(pkgAcquire*, bool) const@Base" 0.8.0 + (c++)"pkgSourceList::Type::FixupURI(std::basic_string, std::allocator >&) const@Base" 0.8.0 + (c++)"pkgSourceList::Type::ParseLine(std::vector >&, char const*, unsigned long const&, std::basic_string, std::allocator > const&) const@Base" 0.8.0 + (c++)"pkgSourceList::FindIndex(pkgCache::PkgFileIterator, pkgIndexFile*&) const@Base" 0.8.0 + (c++)"pkgTagSection::Find(char const*, char const*&, char const*&) const@Base" 0.8.0 + (c++)"pkgTagSection::Find(char const*, unsigned int&) const@Base" 0.8.0 + (c++)"pkgTagSection::FindI(char const*, long) const@Base" 0.8.0 + (c++)"pkgTagSection::FindS(char const*) const@Base" 0.8.0 + (c++)"pkgTagSection::FindULL(char const*, unsigned long long const&) const@Base" 0.8.0 + (c++)"pkgTagSection::FindFlag(char const*, unsigned long&, unsigned long) const@Base" 0.8.0 + (c++)"SHA256SumValue::Value() const@Base" 0.8.0 + (c++)"SHA256SumValue::operator==(SHA256SumValue const&) const@Base" 0.8.0 + (c++)"debStatusIndex::FindInCache(pkgCache&) const@Base" 0.8.0 + (c++)"debStatusIndex::HasPackages() const@Base" 0.8.0 + (c++)"debStatusIndex::Size() const@Base" 0.8.0 + (c++)"debStatusIndex::Merge(pkgCacheGenerator&, OpProgress*) const@Base" 0.8.0 + (c++)"debStatusIndex::Exists() const@Base" 0.8.0 + (c++)"debStatusIndex::GetType() const@Base" 0.8.0 + (c++)"debStatusIndex::Describe(bool) const@Base" 0.8.0 + (c++)"debIFTypeStatus::CreatePkgParser(pkgCache::PkgFileIterator) const@Base" 0.8.0 + (c++)"debReleaseIndex::ArchiveURI(std::basic_string, std::allocator > const&) const@Base" 0.8.0 + (c++)"debReleaseIndex::GetIndexes(pkgAcquire*, bool const&) const@Base" 0.8.0 + (c++)"debReleaseIndex::MetaIndexURI(char const*) const@Base" 0.8.0 + (c++)"debReleaseIndex::MetaIndexFile(char const*) const@Base" 0.8.0 + (c++)"debReleaseIndex::MetaIndexInfo(char const*) const@Base" 0.8.0 + (c++)"debReleaseIndex::IndexURISuffix(char const*, std::basic_string, std::allocator > const&, std::basic_string, std::allocator > const&) const@Base" 0.8.0 + (c++)"debReleaseIndex::SourceIndexURI(char const*, std::basic_string, std::allocator > const&) const@Base" 0.8.0 + (c++)"debReleaseIndex::ComputeIndexTargets() const@Base" 0.8.0 + (c++)"debReleaseIndex::SourceIndexURISuffix(char const*, std::basic_string, std::allocator > const&) const@Base" 0.8.0 + (c++)"debReleaseIndex::Info(char const*, std::basic_string, std::allocator > const&, std::basic_string, std::allocator > const&) const@Base" 0.8.0 + (c++)"debReleaseIndex::IndexURI(char const*, std::basic_string, std::allocator > const&, std::basic_string, std::allocator > const&) const@Base" 0.8.0 + (c++)"debReleaseIndex::IsTrusted() const@Base" 0.8.0 + (c++)"debSLTypeDebSrc::CreateItem(std::vector >&, std::basic_string, std::allocator > const&, std::basic_string, std::allocator > const&, std::basic_string, std::allocator > const&, std::map, std::allocator >, std::basic_string, std::allocator >, std::less, std::allocator > >, std::allocator, std::allocator > const, std::basic_string, std::allocator > > > > const&) const@Base" 0.8.0 + (c++)"debSLTypeDebian::CreateItemInternal(std::vector >&, std::basic_string, std::allocator > const&, std::basic_string, std::allocator > const&, std::basic_string, std::allocator > const&, bool const&, std::map, std::allocator >, std::basic_string, std::allocator >, std::less, std::allocator > >, std::allocator, std::allocator > const, std::basic_string, std::allocator > > > > const&) const@Base" 0.8.0 + (c++)"debSourcesIndex::ArchiveURI(std::basic_string, std::allocator >) const@Base" 0.8.0 + (c++)"debSourcesIndex::SourceInfo(pkgSrcRecords::Parser const&, pkgSrcRecords::File const&) const@Base" 0.8.0 + (c++)"debSourcesIndex::HasPackages() const@Base" 0.8.0 + (c++)"debSourcesIndex::CreateSrcParser() const@Base" 0.8.0 + (c++)"debSourcesIndex::Info(char const*) const@Base" 0.8.0 + (c++)"debSourcesIndex::Size() const@Base" 0.8.0 + (c++)"debSourcesIndex::Exists() const@Base" 0.8.0 + (c++)"debSourcesIndex::GetType() const@Base" 0.8.0 + (c++)"debSourcesIndex::Describe(bool) const@Base" 0.8.0 + (c++)"debSourcesIndex::IndexURI(char const*) const@Base" 0.8.0 + (c++)"debPackagesIndex::ArchiveURI(std::basic_string, std::allocator >) const@Base" 0.8.0 + (c++)"debPackagesIndex::ArchiveInfo(pkgCache::VerIterator) const@Base" 0.8.0 + (c++)"debPackagesIndex::FindInCache(pkgCache&) const@Base" 0.8.0 + (c++)"debPackagesIndex::HasPackages() const@Base" 0.8.0 + (c++)"debPackagesIndex::Info(char const*) const@Base" 0.8.0 + (c++)"debPackagesIndex::Size() const@Base" 0.8.0 + (c++)"debPackagesIndex::Merge(pkgCacheGenerator&, OpProgress*) const@Base" 0.8.0 + (c++)"debPackagesIndex::Exists() const@Base" 0.8.0 + (c++)"debPackagesIndex::GetType() const@Base" 0.8.0 + (c++)"debPackagesIndex::Describe(bool) const@Base" 0.8.0 + (c++)"debPackagesIndex::IndexURI(char const*) const@Base" 0.8.0 + (c++)"debSrcRecordParser::Maintainer() const@Base" 0.8.0 + (c++)"debSrcRecordParser::Package() const@Base" 0.8.0 + (c++)"debSrcRecordParser::Section() const@Base" 0.8.0 + (c++)"debSrcRecordParser::Version() const@Base" 0.8.0 + (c++)"debTranslationsIndex::GetIndexes(pkgAcquire*) const@Base" 0.8.0 + (c++)"debTranslationsIndex::FindInCache(pkgCache&) const@Base" 0.8.0 + (c++)"debTranslationsIndex::HasPackages() const@Base" 0.8.0 + (c++)"debTranslationsIndex::Info(char const*) const@Base" 0.8.0 + (c++)"debTranslationsIndex::Size() const@Base" 0.8.0 + (c++)"debTranslationsIndex::Merge(pkgCacheGenerator&, OpProgress*) const@Base" 0.8.0 + (c++)"debTranslationsIndex::Exists() const@Base" 0.8.0 + (c++)"debTranslationsIndex::GetType() const@Base" 0.8.0 + (c++)"debTranslationsIndex::Describe(bool) const@Base" 0.8.0 + (c++)"debTranslationsIndex::IndexURI(char const*) const@Base" 0.8.0 + (c++|optional=private)"debTranslationsIndex::IndexFile(char const*) const@Base" 0.8.0 + (c++)"Vendor::GetVendorID() const@Base" 0.8.0 + (c++)"Vendor::LookupFingerprint(std::basic_string, std::allocator >) const@Base" 0.8.0 + (c++|optional=inline)"pkgCache::Iterator::end() const@Base" 0.8.0 + (c++)"pkgCache::DepIterator::AllTargets() const@Base" 0.8.0 + (c++)"pkgCache::DepIterator::IsCritical() const@Base" 0.8.0 + (c++)"pkgCache::DepIterator::OwnerPointer() const@Base" 0.8.0 + (c++)"pkgCache::DepIterator::SmartTargetPkg(pkgCache::PkgIterator&) const@Base" 0.8.0 + (c++)"pkgCache::GrpIterator::OwnerPointer() const@Base" 0.8.0 + (c++)"pkgCache::GrpIterator::FindPreferredPkg(bool const&) const@Base" 0.8.0 + (c++)"pkgCache::GrpIterator::FindPkg(std::basic_string, std::allocator >) const@Base" 0.8.0 + (c++)"pkgCache::GrpIterator::NextPkg(pkgCache::PkgIterator const&) const@Base" 0.8.0 + (c++)"pkgCache::PkgIterator::CurVersion() const@Base" 0.8.0 + (c++)"pkgCache::PkgIterator::CandVersion() const@Base" 0.8.0 + (c++)"pkgCache::PkgIterator::OwnerPointer() const@Base" 0.8.0 + (c++)"pkgCache::PkgIterator::State() const@Base" 0.8.0 + (c++)"pkgCache::PkgIterator::FullName(bool const&) const@Base" 0.8.0 + (c++)"pkgCache::PrvIterator::OwnerPointer() const@Base" 0.8.0 + (c++)"pkgCache::VerIterator::CompareVer(pkgCache::VerIterator const&) const@Base" 0.8.0 + (c++)"pkgCache::VerIterator::NewestFile() const@Base" 0.8.0 + (c++)"pkgCache::VerIterator::Downloadable() const@Base" 0.8.0 + (c++)"pkgCache::VerIterator::OwnerPointer() const@Base" 0.8.0 + (c++)"pkgCache::VerIterator::TranslatedDescription() const@Base" 0.8.0 + (c++)"pkgCache::VerIterator::Pseudo() const@Base" 0.8.0 + (c++)"pkgCache::VerIterator::RelStr() const@Base" 0.8.0 + (c++)"pkgCache::VerIterator::Automatic() const@Base" 0.8.0 + (c++)"pkgCache::DescIterator::OwnerPointer() const@Base" 0.8.0 + (c++)"pkgCache::PkgFileIterator::OwnerPointer() const@Base" 0.8.0 + (c++)"pkgCache::VerFileIterator::OwnerPointer() const@Base" 0.8.0 + (c++)"pkgCache::DescFileIterator::OwnerPointer() const@Base" 0.8.0 + (c++)"pkgCache::sHash(char const*) const@Base" 0.8.0 + (c++)"pkgCache::sHash(std::basic_string, std::allocator > const&) const@Base" 0.8.0 + (c++)"pkgCache::Header::CheckSizes(pkgCache::Header&) const@Base" 0.8.0 + (c++)"debSystem::CreatePM(pkgDepCache*) const@Base" 0.8.0 + (c++)"debSystem::FindIndex(pkgCache::PkgFileIterator, pkgIndexFile*&) const@Base" 0.8.0 + (c++)"metaIndex::GetURI() const@Base" 0.8.0 + (c++)"metaIndex::GetDist() const@Base" 0.8.0 + (c++)"metaIndex::GetType() const@Base" 0.8.0 + (c++)"typeinfo for OpProgress@Base" 0.8.0 + (c++)"typeinfo for SourceCopy@Base" 0.8.0 + (c++)"typeinfo for pkgAcqFile@Base" 0.8.0 + (c++)"typeinfo for pkgAcquire@Base" 0.8.0 + (c++)"typeinfo for DynamicMMap@Base" 0.8.0 + (c++)"typeinfo for PackageCopy@Base" 0.8.0 + (c++)"typeinfo for pkgAcqIndex@Base" 0.8.0 + (c++)"typeinfo for pkgDepCache@Base" 0.8.0 + (c++)"typeinfo for pkgSimulate@Base" 0.8.0 + (c++)"typeinfo for debIFTypePkg@Base" 0.8.0 + (c++)"typeinfo for debIFTypeSrc@Base" 0.8.0 + (c++)"typeinfo for debSLTypeDeb@Base" 0.8.0 + (c++)"typeinfo for indexRecords@Base" 0.8.0 + (c++)"typeinfo for pkgAcqMethod@Base" 0.8.0 + (c++)"typeinfo for pkgCacheFile@Base" 0.8.0 + (c++)"typeinfo for pkgIndexFile@Base" 0.8.0 + (c++)"typeinfo for WeakPointable@Base" 0.8.0 + (c++)"typeinfo for debListParser@Base" 0.8.0 + (c++)"typeinfo for pkgAcqArchive@Base" 0.8.0 + (c++)"typeinfo for pkgAcqMetaSig@Base" 0.8.0 + (c++)"typeinfo for pkgTagSection@Base" 0.8.0 + (c++)"typeinfo for OpTextProgress@Base" 0.8.0 + (c++)"typeinfo for debIFTypeTrans@Base" 0.8.0 + (c++)"typeinfo for debStatusIndex@Base" 0.8.0 + (c++)"typeinfo for debIFTypeStatus@Base" 0.8.0 + (c++)"typeinfo for debRecordParser@Base" 0.8.0 + (c++)"typeinfo for debReleaseIndex@Base" 0.8.0 + (c++)"typeinfo for debSLTypeDebSrc@Base" 0.8.0 + (c++)"typeinfo for debSLTypeDebian@Base" 0.8.0 + (c++)"typeinfo for debSourcesIndex@Base" 0.8.0 + (c++)"typeinfo for pkgAcqDiffIndex@Base" 0.8.0 + (c++)"typeinfo for pkgAcqMetaIndex@Base" 0.8.0 + (c++)"typeinfo for debPackagesIndex@Base" 0.8.0 + (c++)"typeinfo for pkgAcqIndexDiffs@Base" 0.8.0 + (c++)"typeinfo for pkgAcqIndexTrans@Base" 0.8.0 + (c++)"typeinfo for pkgAcquireStatus@Base" 0.8.0 + (c++)"typeinfo for PreferenceSection@Base" 0.8.0 + (c++)"typeinfo for pkgPackageManager@Base" 0.8.0 + (c++)"typeinfo for debSrcRecordParser@Base" 0.8.0 + (c++)"typeinfo for debVersioningSystem@Base" 0.8.0 + (c++)"typeinfo for pkgUdevCdromDevices@Base" 0.8.0 + (c++)"typeinfo for pkgVersioningSystem@Base" 0.8.0 + (c++)"typeinfo for debTranslationsIndex@Base" 0.8.0 + (c++)"typeinfo for MMap@Base" 0.8.0 + (c++)"typeinfo for FileFd@Base" 0.8.0 + (c++)"typeinfo for Vendor@Base" 0.8.0 + (c++)"typeinfo for pkgCache@Base" 0.8.0 + (c++)"typeinfo for IndexCopy@Base" 0.8.0 + (c++)"typeinfo for debSystem@Base" 0.8.0 + (c++)"typeinfo for metaIndex@Base" 0.8.0 + (c++)"typeinfo for pkgDPkgPM@Base" 0.8.0 + (c++)"typeinfo for pkgPolicy@Base" 0.8.0 + (c++)"typeinfo for pkgSystem@Base" 0.8.0 + (c++)"typeinfo for pkgAcquire::Item@Base" 0.8.0 + (c++)"typeinfo for pkgRecords::Parser@Base" 0.8.0 + (c++)"typeinfo for pkgDepCache::InRootSetFunc@Base" 0.8.0 + (c++)"typeinfo for pkgDepCache::DefaultRootSetFunc@Base" 0.8.0 + (c++)"typeinfo for pkgDepCache::Policy@Base" 0.8.0 + (c++)"typeinfo for pkgSimulate::Policy@Base" 0.8.0 + (c++)"typeinfo for pkgIndexFile::Type@Base" 0.8.0 + (c++)"typeinfo for Configuration::MatchAgainstConfig@Base" 0.8.0 + (c++)"typeinfo for pkgSourceList::Type@Base" 0.8.0 + (c++)"typeinfo for pkgSrcRecords::Parser@Base" 0.8.0 + (c++)"typeinfo for pkgCacheGenerator::ListParser@Base" 0.8.0 + (c++)"typeinfo for APT::CacheSetHelper@Base" 0.8.0 + (c++)"typeinfo for pkgCache::DepIterator@Base" 0.8.0 + (c++)"typeinfo for pkgCache::GrpIterator@Base" 0.8.0 + (c++)"typeinfo for pkgCache::PkgIterator@Base" 0.8.0 + (c++)"typeinfo for pkgCache::PrvIterator@Base" 0.8.0 + (c++)"typeinfo for pkgCache::VerIterator@Base" 0.8.0 + (c++)"typeinfo for pkgCache::DescIterator@Base" 0.8.0 + (c++)"typeinfo for pkgCache::PkgFileIterator@Base" 0.8.0 + (c++)"typeinfo for pkgCache::VerFileIterator@Base" 0.8.0 + (c++)"typeinfo for pkgCache::DescFileIterator@Base" 0.8.0 + (c++)"typeinfo for pkgCache::Iterator@Base" 0.8.0 + (c++)"typeinfo for pkgCache::Iterator@Base" 0.8.0 + (c++)"typeinfo for pkgCache::Iterator@Base" 0.8.0 + (c++)"typeinfo for pkgCache::Iterator@Base" 0.8.0 + (c++)"typeinfo for pkgCache::Iterator@Base" 0.8.0 + (c++)"typeinfo for pkgCache::Iterator@Base" 0.8.0 + (c++)"typeinfo for pkgCache::Iterator@Base" 0.8.0 + (c++)"typeinfo for pkgCache::Iterator@Base" 0.8.0 + (c++)"typeinfo for pkgCache::Iterator@Base" 0.8.0 + (c++)"typeinfo for pkgCache::Namespace@Base" 0.8.0 + (c++)"typeinfo name for OpProgress@Base" 0.8.0 + (c++)"typeinfo name for SourceCopy@Base" 0.8.0 + (c++)"typeinfo name for pkgAcqFile@Base" 0.8.0 + (c++)"typeinfo name for pkgAcquire@Base" 0.8.0 + (c++)"typeinfo name for DynamicMMap@Base" 0.8.0 + (c++)"typeinfo name for PackageCopy@Base" 0.8.0 + (c++)"typeinfo name for pkgAcqIndex@Base" 0.8.0 + (c++)"typeinfo name for pkgDepCache@Base" 0.8.0 + (c++)"typeinfo name for pkgSimulate@Base" 0.8.0 + (c++)"typeinfo name for debIFTypePkg@Base" 0.8.0 + (c++)"typeinfo name for debIFTypeSrc@Base" 0.8.0 + (c++)"typeinfo name for debSLTypeDeb@Base" 0.8.0 + (c++)"typeinfo name for indexRecords@Base" 0.8.0 + (c++)"typeinfo name for pkgAcqMethod@Base" 0.8.0 + (c++)"typeinfo name for pkgCacheFile@Base" 0.8.0 + (c++)"typeinfo name for pkgIndexFile@Base" 0.8.0 + (c++)"typeinfo name for WeakPointable@Base" 0.8.0 + (c++)"typeinfo name for debListParser@Base" 0.8.0 + (c++)"typeinfo name for pkgAcqArchive@Base" 0.8.0 + (c++)"typeinfo name for pkgAcqMetaSig@Base" 0.8.0 + (c++)"typeinfo name for pkgTagSection@Base" 0.8.0 + (c++)"typeinfo name for OpTextProgress@Base" 0.8.0 + (c++)"typeinfo name for debIFTypeTrans@Base" 0.8.0 + (c++)"typeinfo name for debStatusIndex@Base" 0.8.0 + (c++)"typeinfo name for debIFTypeStatus@Base" 0.8.0 + (c++)"typeinfo name for debRecordParser@Base" 0.8.0 + (c++)"typeinfo name for debReleaseIndex@Base" 0.8.0 + (c++)"typeinfo name for debSLTypeDebSrc@Base" 0.8.0 + (c++)"typeinfo name for debSLTypeDebian@Base" 0.8.0 + (c++)"typeinfo name for debSourcesIndex@Base" 0.8.0 + (c++)"typeinfo name for pkgAcqDiffIndex@Base" 0.8.0 + (c++)"typeinfo name for pkgAcqMetaIndex@Base" 0.8.0 + (c++)"typeinfo name for debPackagesIndex@Base" 0.8.0 + (c++)"typeinfo name for pkgAcqIndexDiffs@Base" 0.8.0 + (c++)"typeinfo name for pkgAcqIndexTrans@Base" 0.8.0 + (c++)"typeinfo name for pkgAcquireStatus@Base" 0.8.0 + (c++)"typeinfo name for PreferenceSection@Base" 0.8.0 + (c++)"typeinfo name for pkgPackageManager@Base" 0.8.0 + (c++)"typeinfo name for debSrcRecordParser@Base" 0.8.0 + (c++)"typeinfo name for debVersioningSystem@Base" 0.8.0 + (c++)"typeinfo name for pkgUdevCdromDevices@Base" 0.8.0 + (c++)"typeinfo name for pkgVersioningSystem@Base" 0.8.0 + (c++)"typeinfo name for debTranslationsIndex@Base" 0.8.0 + (c++)"typeinfo name for MMap@Base" 0.8.0 + (c++)"typeinfo name for FileFd@Base" 0.8.0 + (c++)"typeinfo name for Vendor@Base" 0.8.0 + (c++)"typeinfo name for pkgCache@Base" 0.8.0 + (c++)"typeinfo name for IndexCopy@Base" 0.8.0 + (c++)"typeinfo name for debSystem@Base" 0.8.0 + (c++)"typeinfo name for metaIndex@Base" 0.8.0 + (c++)"typeinfo name for pkgDPkgPM@Base" 0.8.0 + (c++)"typeinfo name for pkgPolicy@Base" 0.8.0 + (c++)"typeinfo name for pkgSystem@Base" 0.8.0 + (c++)"typeinfo name for pkgAcquire::Item@Base" 0.8.0 + (c++)"typeinfo name for pkgRecords::Parser@Base" 0.8.0 + (c++)"typeinfo name for pkgDepCache::InRootSetFunc@Base" 0.8.0 + (c++)"typeinfo name for pkgDepCache::DefaultRootSetFunc@Base" 0.8.0 + (c++)"typeinfo name for pkgDepCache::Policy@Base" 0.8.0 + (c++)"typeinfo name for pkgSimulate::Policy@Base" 0.8.0 + (c++)"typeinfo name for pkgIndexFile::Type@Base" 0.8.0 + (c++)"typeinfo name for Configuration::MatchAgainstConfig@Base" 0.8.0 + (c++)"typeinfo name for pkgSourceList::Type@Base" 0.8.0 + (c++)"typeinfo name for pkgSrcRecords::Parser@Base" 0.8.0 + (c++)"typeinfo name for pkgCacheGenerator::ListParser@Base" 0.8.0 + (c++)"typeinfo name for APT::CacheSetHelper@Base" 0.8.0 + (c++)"typeinfo name for pkgCache::DepIterator@Base" 0.8.0 + (c++)"typeinfo name for pkgCache::GrpIterator@Base" 0.8.0 + (c++)"typeinfo name for pkgCache::PkgIterator@Base" 0.8.0 + (c++)"typeinfo name for pkgCache::PrvIterator@Base" 0.8.0 + (c++)"typeinfo name for pkgCache::VerIterator@Base" 0.8.0 + (c++)"typeinfo name for pkgCache::DescIterator@Base" 0.8.0 + (c++)"typeinfo name for pkgCache::PkgFileIterator@Base" 0.8.0 + (c++)"typeinfo name for pkgCache::VerFileIterator@Base" 0.8.0 + (c++)"typeinfo name for pkgCache::DescFileIterator@Base" 0.8.0 + (c++)"typeinfo name for pkgCache::Iterator@Base" 0.8.0 + (c++)"typeinfo name for pkgCache::Iterator@Base" 0.8.0 + (c++)"typeinfo name for pkgCache::Iterator@Base" 0.8.0 + (c++)"typeinfo name for pkgCache::Iterator@Base" 0.8.0 + (c++)"typeinfo name for pkgCache::Iterator@Base" 0.8.0 + (c++)"typeinfo name for pkgCache::Iterator@Base" 0.8.0 + (c++)"typeinfo name for pkgCache::Iterator@Base" 0.8.0 + (c++)"typeinfo name for pkgCache::Iterator@Base" 0.8.0 + (c++)"typeinfo name for pkgCache::Iterator@Base" 0.8.0 + (c++)"typeinfo name for pkgCache::Namespace@Base" 0.8.0 + (c++)"vtable for OpProgress@Base" 0.8.0 + (c++)"vtable for SourceCopy@Base" 0.8.0 + (c++)"vtable for pkgAcqFile@Base" 0.8.0 + (c++)"vtable for pkgAcquire@Base" 0.8.0 + (c++)"vtable for DynamicMMap@Base" 0.8.0 + (c++)"vtable for PackageCopy@Base" 0.8.0 + (c++)"vtable for pkgAcqIndex@Base" 0.8.0 + (c++)"vtable for pkgDepCache@Base" 0.8.0 + (c++)"vtable for pkgSimulate@Base" 0.8.0 + (c++)"vtable for debIFTypePkg@Base" 0.8.0 + (c++)"vtable for debIFTypeSrc@Base" 0.8.0 + (c++)"vtable for debSLTypeDeb@Base" 0.8.0 + (c++)"vtable for indexRecords@Base" 0.8.0 + (c++)"vtable for pkgAcqMethod@Base" 0.8.0 + (c++)"vtable for pkgCacheFile@Base" 0.8.0 + (c++)"vtable for pkgIndexFile@Base" 0.8.0 + (c++)"vtable for debListParser@Base" 0.8.0 + (c++)"vtable for pkgAcqArchive@Base" 0.8.0 + (c++)"vtable for pkgAcqMetaSig@Base" 0.8.0 + (c++)"vtable for pkgTagSection@Base" 0.8.0 + (c++)"vtable for OpTextProgress@Base" 0.8.0 + (c++)"vtable for debIFTypeTrans@Base" 0.8.0 + (c++)"vtable for debStatusIndex@Base" 0.8.0 + (c++)"vtable for debIFTypeStatus@Base" 0.8.0 + (c++)"vtable for debRecordParser@Base" 0.8.0 + (c++)"vtable for debReleaseIndex@Base" 0.8.0 + (c++)"vtable for debSLTypeDebSrc@Base" 0.8.0 + (c++)"vtable for debSLTypeDebian@Base" 0.8.0 + (c++)"vtable for debSourcesIndex@Base" 0.8.0 + (c++)"vtable for pkgAcqDiffIndex@Base" 0.8.0 + (c++)"vtable for pkgAcqMetaIndex@Base" 0.8.0 + (c++)"vtable for debPackagesIndex@Base" 0.8.0 + (c++)"vtable for pkgAcqIndexDiffs@Base" 0.8.0 + (c++)"vtable for pkgAcqIndexTrans@Base" 0.8.0 + (c++)"vtable for pkgAcquireStatus@Base" 0.8.0 + (c++)"vtable for PreferenceSection@Base" 0.8.0 + (c++)"vtable for pkgPackageManager@Base" 0.8.0 + (c++)"vtable for debSrcRecordParser@Base" 0.8.0 + (c++)"vtable for debVersioningSystem@Base" 0.8.0 + (c++)"vtable for pkgUdevCdromDevices@Base" 0.8.0 + (c++)"vtable for pkgVersioningSystem@Base" 0.8.0 + (c++)"vtable for debTranslationsIndex@Base" 0.8.0 + (c++)"vtable for MMap@Base" 0.8.0 + (c++)"vtable for FileFd@Base" 0.8.0 + (c++)"vtable for Vendor@Base" 0.8.0 + (c++)"vtable for pkgCache@Base" 0.8.0 + (c++)"vtable for IndexCopy@Base" 0.8.0 + (c++)"vtable for debSystem@Base" 0.8.0 + (c++)"vtable for metaIndex@Base" 0.8.0 + (c++)"vtable for pkgDPkgPM@Base" 0.8.0 + (c++)"vtable for pkgPolicy@Base" 0.8.0 + (c++)"vtable for pkgSystem@Base" 0.8.0 + (c++)"vtable for pkgAcquire::Item@Base" 0.8.0 + (c++)"vtable for pkgRecords::Parser@Base" 0.8.0 + (c++)"vtable for pkgDepCache::InRootSetFunc@Base" 0.8.0 + (c++)"vtable for pkgDepCache::DefaultRootSetFunc@Base" 0.8.0 + (c++)"vtable for pkgDepCache::Policy@Base" 0.8.0 + (c++)"vtable for pkgSimulate::Policy@Base" 0.8.0 + (c++)"vtable for pkgIndexFile::Type@Base" 0.8.0 + (c++)"vtable for Configuration::MatchAgainstConfig@Base" 0.8.0 + (c++)"vtable for pkgSourceList::Type@Base" 0.8.0 + (c++)"vtable for pkgSrcRecords::Parser@Base" 0.8.0 + (c++)"vtable for pkgCacheGenerator::ListParser@Base" 0.8.0 + (c++)"vtable for APT::CacheSetHelper@Base" 0.8.0 + (c++)"vtable for pkgCache::DepIterator@Base" 0.8.0 + (c++)"vtable for pkgCache::GrpIterator@Base" 0.8.0 + (c++)"vtable for pkgCache::PkgIterator@Base" 0.8.0 + (c++)"vtable for pkgCache::PrvIterator@Base" 0.8.0 + (c++)"vtable for pkgCache::VerIterator@Base" 0.8.0 + (c++)"vtable for pkgCache::DescIterator@Base" 0.8.0 + (c++)"vtable for pkgCache::PkgFileIterator@Base" 0.8.0 + (c++)"vtable for pkgCache::VerFileIterator@Base" 0.8.0 + (c++)"vtable for pkgCache::DescFileIterator@Base" 0.8.0 + (c++)"vtable for pkgCache::Iterator@Base" 0.8.0 + (c++)"vtable for pkgCache::Iterator@Base" 0.8.0 + (c++)"vtable for pkgCache::Iterator@Base" 0.8.0 + (c++)"vtable for pkgCache::Iterator@Base" 0.8.0 + (c++)"vtable for pkgCache::Iterator@Base" 0.8.0 + (c++)"vtable for pkgCache::Iterator@Base" 0.8.0 + (c++)"vtable for pkgCache::Iterator@Base" 0.8.0 + (c++)"vtable for pkgCache::Iterator@Base" 0.8.0 + (c++)"vtable for pkgCache::Iterator@Base" 0.8.0 + (c++)"non-virtual thunk to pkgDepCache::DefaultRootSetFunc::~DefaultRootSetFunc()@Base" 0.8.0 + (c++)"operator<<(std::basic_ostream >&, pkgCache::DepIterator)@Base" 0.8.0 + (c++)"operator<<(std::basic_ostream >&, pkgCache::PkgIterator)@Base" 0.8.0 + _apt_DebSrcType@Base 0.8.0 + _apt_DebType@Base 0.8.0 + _config@Base 0.8.0 + _system@Base 0.8.0 + debSys@Base 0.8.0 + debVS@Base 0.8.0 + pkgLibVersion@Base 0.8.0 + pkgVersion@Base 0.8.0 +### try to ignore std:: template instances + (c++|regex|optional=std)"^(void |)std::[^ ]+<.+ >::(_|~).+\(.*\)@Base$" 0.8.0 + (c++|regex|optional=std)"^pkgCache::(Dep|Pkg|Ver|Grp|Prv|Desc|PkgFile)Iterator\*\* std::_.+@Base$" 0.8.0 + (c++|regex|optional=std)"^std::[^ ]+<.+ >::(append|insert|reserve|operator[^ ]+)\(.*\)@Base$" 0.8.0 + (c++|regex|optional=std)"^(void |DiffInfo\* |)std::_.*@Base$" 0.8.0 + (c++|regex|optional=std)"^(bool|void) std::(operator|sort_heap|make_heap)[^ ]+<.+ >\(.+\)@Base$" 0.8.0 + (c++|regex|optional=std)"^std::reverse_iterator<.+ > std::__.+@Base$" 0.8.0 + (c++|regex|optional=std)"^std::basic_string<.+ >\(.+\)@Base$" 0.8.0 + (c++|regex|optional=std)"^char\* std::[^ ]+<.+ >::_.+@Base$" 0.8.0 + (c++|regex|optional=std)"^__gnu_cxx::__[^ ]+<.*@Base$" 0.8.0 + (c++|regex|optional=std)"^typeinfo name for std::iterator<.*>@Base$" 0.8.0 + (c++|regex|optional=std)"^typeinfo for std::iterator<.*>@Base$" 0.8.0 + (c++|regex|optional=std)"^std::vector<.+ >::(vector|push_back|erase|_[^ ]+)\(.+\)( const|)@Base$" 0.8.0 + (c++|regex|optional=std)"^std::basic_string, std::allocator >::basic_string\(.+\)@Base$" 0.8.0 + (c++|regex|optional=std)"^std::less<[^ ]+>::operator\(\)\(.+\) const@Base$" 0.8.0 +### + (c++)"Configuration::MatchAgainstConfig::clearPatterns()@Base" 0.8.1 1 + (c++)"CreateAPTDirectoryIfNeeded(std::basic_string, std::allocator > const&, std::basic_string, std::allocator > const&)@Base" 0.8.2 1 + (c++)"FileFd::FileSize()@Base" 0.8.8 1 +### upcoming symbols + (c++)"Base256ToNum(char const*, unsigned long&, unsigned int)@Base" 0.8.11 1 + (c++)"pkgDepCache::SetCandidateRelease(pkgCache::VerIterator, std::basic_string, std::allocator > const&, std::list, std::allocator > >&)@Base" 0.8.11 1 + (c++)"pkgDepCache::SetCandidateRelease(pkgCache::VerIterator, std::basic_string, std::allocator > const&)@Base" 0.8.11 1 + (c++)"RealFileExists(std::basic_string, std::allocator >)@Base" 0.8.11 1 diff --git a/debian/changelog b/debian/changelog index 8dcdc93ff..11768794d 100644 --- a/debian/changelog +++ b/debian/changelog @@ -18,6 +18,7 @@ apt (0.8.11+wheezy) unstable; urgency=low * debian/control: - add Vcs-Browser now that loggerhead works again (Closes: #511168) - depend on debhelper 7 to raise compat level + - depend on dpkg-dev (>= 1.15.8) to have c++ symbol mangling * apt-pkg/contrib/fileutl.cc: - add a RealFileExists method and check that your configuration files are real files to avoid endless loops if not (Closes: #604401) @@ -42,10 +43,14 @@ apt (0.8.11+wheezy) unstable; urgency=low - remove obsolete references to non-us (Closes: #594495) * debian/rules: - use -- instead of deprecated -u for dh_gencontrol + - remove shlibs.local creation and usage + - show differences in the symbol files, but never fail * pre-build.sh: - remove as it is not needed for a working 'bzr bd' + * debian/{apt,apt-utils}.symbols: + - ship experimental unmangled c++ symbol files - -- David Kalnischkies Fri, 14 Jan 2011 14:40:35 +0100 + -- David Kalnischkies Sat, 15 Jan 2011 02:42:18 +0100 apt (0.8.10) unstable; urgency=low diff --git a/debian/control b/debian/control index a079ad19c..46d19b246 100644 --- a/debian/control +++ b/debian/control @@ -6,7 +6,7 @@ Uploaders: Michael Vogt , Otavio Salvador , Christian Perrier , Daniel Burrows , Luca Bruno , Julian Andres Klode Standards-Version: 3.9.0 -Build-Depends: debhelper (>= 7), libdb-dev, gettext (>= 0.12), libcurl4-gnutls-dev (>= 7.19.0), zlib1g-dev | libz-dev, debiandoc-sgml, xsltproc, docbook-xsl, docbook-xml, po4a (>= 0.34-2), autotools-dev, autoconf, automake, doxygen +Build-Depends: dpkg-dev (>= 1.15.8), debhelper (>= 7), libdb-dev, gettext (>= 0.12), libcurl4-gnutls-dev (>= 7.19.0), zlib1g-dev | libz-dev, debiandoc-sgml, xsltproc, docbook-xsl, docbook-xml, po4a (>= 0.34-2), autotools-dev, autoconf, automake, doxygen Build-Conflicts: autoconf2.13, automake1.4 Vcs-Bzr: http://bzr.debian.org/apt/debian-sid/ Vcs-Browser: http://bzr.debian.org/loggerhead/apt/debian-sid/ diff --git a/debian/rules b/debian/rules index fbd309e97..fd872b4ce 100755 --- a/debian/rules +++ b/debian/rules @@ -74,18 +74,8 @@ include buildlib/libversion.mak LIBAPTPKG_PROVIDE=libapt-pkg$(LIBAPTPKG_MAJOR) LIBAPTINST_PROVIDE=libapt-inst$(LIBAPTINST_MAJOR) -debian/shlibs.local: apt-pkg/makefile - # We have 3 shlibs.local files: One for 'apt', one for 'apt-utils' and - # one for the rest of the packages. This ensures that each package gets - # the right overrides… - rm -rf $@ $@.apt $@.apt-utils - echo "libapt-pkg $(LIBAPTPKG_MAJOR)" > $@.apt - - echo "libapt-pkg $(LIBAPTPKG_MAJOR) $(LIBAPTPKG_PROVIDE)" > $@.apt-utils - echo "libapt-inst $(LIBAPTINST_MAJOR)" >> $@.apt-utils - - echo "libapt-pkg $(LIBAPTPKG_MAJOR) $(LIBAPTPKG_PROVIDE)" > $@ - echo "libapt-inst $(LIBAPTINST_MAJOR) $(LIBAPTINST_PROVIDE)" >> $@ +# do not fail as we are just experimenting with symbol files for now +export DPKG_GENSYMBOLS_CHECK_LEVEL=0 build: build/build-stamp build-doc: build/build-doc-stamp @@ -120,12 +110,9 @@ clean: [ ! -f Makefile ] || $(MAKE) clean distclean rm -rf build - # Add here commands to clean up after the build process. - dh_clean debian/copyright debian/shlibs.local debian/shlibs.local.apt debian/shlibs.local.apt-utils - binary-indep: apt-doc libapt-pkg-doc # Build architecture-independent files here. -libapt-pkg-doc: build-doc debian/shlibs.local +libapt-pkg-doc: build-doc dh_testdir -p$@ dh_testroot -p$@ dh_prep -p$@ @@ -177,7 +164,7 @@ apt-doc: build-doc binary-arch: apt libapt-pkg-dev apt-utils apt-transport-https apt_MANPAGES = apt-cache apt-cdrom apt-config apt-get apt-key apt-mark apt-secure apt apt.conf apt_preferences sources.list -apt: build build-doc debian/shlibs.local +apt: build build-doc dh_testdir -p$@ dh_testroot -p$@ dh_prep -p$@ @@ -226,14 +213,14 @@ apt: build build-doc debian/shlibs.local dh_strip -p$@ dh_compress -p$@ dh_fixperms -p$@ - dh_makeshlibs -p$@ --major=$(LIBAPTPKG_MAJOR) --version-info='$(LIBAPTPKG_PROVIDE)' + dh_makeshlibs -p$@ dh_installdeb -p$@ - dh_shlibdeps -p$@ -l$(CURDIR)/debian/apt/usr/lib:$(CURDIR)/debian/$@/usr/lib -- -Ldebian/shlibs.local.apt + dh_shlibdeps -p$@ -l$(CURDIR)/debian/apt/usr/lib:$(CURDIR)/debian/$@/usr/lib dh_gencontrol -p$@ -- -Vlibapt-pkg:provides=$(LIBAPTPKG_PROVIDE) dh_md5sums -p$@ dh_builddeb -p$@ -libapt-pkg-dev: build debian/shlibs.local +libapt-pkg-dev: build dh_testdir -p$@ dh_testroot -p$@ dh_prep -p$@ @@ -258,7 +245,7 @@ libapt-pkg-dev: build debian/shlibs.local dh_builddeb -p$@ apt-utils_MANPAGES = apt-sortpkgs apt-ftparchive apt-extracttemplates -apt-utils: build debian/shlibs.local +apt-utils: build dh_testdir -p$@ dh_testroot -p$@ dh_prep -p$@ @@ -279,14 +266,14 @@ apt-utils: build debian/shlibs.local dh_strip -p$@ dh_compress -p$@ dh_fixperms -p$@ - dh_makeshlibs -p$@ --major=$(LIBAPTINST_MAJOR) --version-info='$(LIBAPTINST_PROVIDE)' + dh_makeshlibs -p$@ dh_installdeb -p$@ - dh_shlibdeps -p$@ -l$(CURDIR)/debian/apt/usr/lib:$(CURDIR)/debian/$@/usr/lib -- -Ldebian/shlibs.local.apt-utils + dh_shlibdeps -p$@ -l$(CURDIR)/debian/apt/usr/lib:$(CURDIR)/debian/$@/usr/lib dh_gencontrol -p$@ -- -Vlibapt-inst:provides=$(LIBAPTINST_PROVIDE) dh_md5sums -p$@ dh_builddeb -p$@ -apt-transport-https: build debian/shlibs.local libapt-pkg-dev +apt-transport-https: build libapt-pkg-dev dh_testdir -p$@ dh_testroot -p$@ dh_prep -p$@ @@ -321,4 +308,4 @@ really-clean: clean rm -f l33ch-stamp binary: binary-indep binary-arch -.PHONY: build clean binary-indep binary-arch binary debian/shlibs.local +.PHONY: build clean binary-indep binary-arch binary -- cgit v1.2.3 From caffd4807f612e931ecca8f7d9b0c0c10de27ce6 Mon Sep 17 00:00:00 2001 From: David Kalnischkies Date: Sat, 15 Jan 2011 20:28:03 +0100 Subject: * methods/rred.cc: - operate optional on gzip compressed pdiffs * apt-pkg/acquire-item.cc: - don't uncompress downloaded pdiff files before feeding it to rred --- apt-pkg/acquire-item.cc | 19 +-------------- apt-pkg/acquire-item.h | 2 +- apt-pkg/contrib/fileutl.h | 1 + debian/changelog | 6 ++++- methods/rred.cc | 49 ++++++++++++++++++++++++++++++++------- test/integration/test-pdiff-usage | 1 + 6 files changed, 49 insertions(+), 29 deletions(-) diff --git a/apt-pkg/acquire-item.cc b/apt-pkg/acquire-item.cc index 2c4ce91a0..d4e90b552 100644 --- a/apt-pkg/acquire-item.cc +++ b/apt-pkg/acquire-item.cc @@ -570,24 +570,7 @@ void pkgAcqIndexDiffs::Done(string Message,unsigned long Size,string Md5Hash, /* FinalFile = _config->FindDir("Dir::State::lists")+URItoFileName(RealURI); // sucess in downloading a diff, enter ApplyDiff state - if(State == StateFetchDiff) - { - - if(Debug) - std::clog << "Sending to gzip method: " << FinalFile << std::endl; - - string FileName = LookupTag(Message,"Filename"); - State = StateUnzipDiff; - Local = true; - Desc.URI = "gzip:" + FileName; - DestFile += ".decomp"; - QueueURI(Desc); - Mode = "gzip"; - return; - } - - // sucess in downloading a diff, enter ApplyDiff state - if(State == StateUnzipDiff) + if(State == StateFetchDiff) { // rred excepts the patch as $FinalFile.ed diff --git a/apt-pkg/acquire-item.h b/apt-pkg/acquire-item.h index 943c61876..d97a96a0f 100644 --- a/apt-pkg/acquire-item.h +++ b/apt-pkg/acquire-item.h @@ -449,7 +449,7 @@ class pkgAcqIndexDiffs : public pkgAcquire::Item StateFetchDiff, /** \brief The diff is currently being uncompressed. */ - StateUnzipDiff, + StateUnzipDiff, // FIXME: No longer used /** \brief The diff is currently being applied. */ StateApplyDiff diff --git a/apt-pkg/contrib/fileutl.h b/apt-pkg/contrib/fileutl.h index 146d917d8..cde288ad2 100644 --- a/apt-pkg/contrib/fileutl.h +++ b/apt-pkg/contrib/fileutl.h @@ -72,6 +72,7 @@ class FileFd // Simple manipulators inline int Fd() {return iFd;}; inline void Fd(int fd) {iFd = fd;}; + inline gzFile gzFd() {return gz;}; inline bool IsOpen() {return iFd >= 0;}; inline bool Failed() {return (Flags & Fail) == Fail;}; inline void EraseOnFailure() {Flags |= DelOnFail;}; diff --git a/debian/changelog b/debian/changelog index 11768794d..5c8adb434 100644 --- a/debian/changelog +++ b/debian/changelog @@ -49,8 +49,12 @@ apt (0.8.11+wheezy) unstable; urgency=low - remove as it is not needed for a working 'bzr bd' * debian/{apt,apt-utils}.symbols: - ship experimental unmangled c++ symbol files + * methods/rred.cc: + - operate optional on gzip compressed pdiffs + * apt-pkg/acquire-item.cc: + - don't uncompress downloaded pdiff files before feeding it to rred - -- David Kalnischkies Sat, 15 Jan 2011 02:42:18 +0100 + -- David Kalnischkies Sat, 15 Jan 2011 20:24:03 +0100 apt (0.8.10) unstable; urgency=low diff --git a/methods/rred.cc b/methods/rred.cc index d51c45c85..1a18a381c 100644 --- a/methods/rred.cc +++ b/methods/rred.cc @@ -12,6 +12,7 @@ #include #include #include +#include #include /*}}}*/ /** \brief RredMethod - ed-style incremential patch method {{{ @@ -33,11 +34,14 @@ class RredMethod : public pkgAcqMethod { // return values enum State {ED_OK, ED_ORDERING, ED_PARSER, ED_FAILURE, MMAP_FAILED}; - State applyFile(FILE *ed_cmds, FILE *in_file, FILE *out_file, + State applyFile(gzFile &ed_cmds, FILE *in_file, FILE *out_file, unsigned long &line, char *buffer, Hashes *hash) const; void ignoreLineInFile(FILE *fin, char *buffer) const; + void ignoreLineInFile(gzFile &fin, char *buffer) const; void copyLinesFromFileToFile(FILE *fin, FILE *fout, unsigned int lines, Hashes *hash, char *buffer) const; + void copyLinesFromFileToFile(gzFile &fin, FILE *fout, unsigned int lines, + Hashes *hash, char *buffer) const; State patchFile(FileFd &Patch, FileFd &From, FileFd &out_file, Hashes *hash) const; State patchMMap(FileFd &Patch, FileFd &From, FileFd &out_file, Hashes *hash) const; @@ -65,10 +69,10 @@ public: * \param hash the created file for correctness * \return the success State of the ed command executor */ -RredMethod::State RredMethod::applyFile(FILE *ed_cmds, FILE *in_file, FILE *out_file, +RredMethod::State RredMethod::applyFile(gzFile &ed_cmds, FILE *in_file, FILE *out_file, unsigned long &line, char *buffer, Hashes *hash) const { // get the current command and parse it - if (fgets(buffer, BUF_SIZE, ed_cmds) == NULL) { + if (gzgets(ed_cmds, buffer, BUF_SIZE) == NULL) { if (Debug == true) std::clog << "rred: encounter end of file - we can start patching now." << std::endl; line = 0; @@ -123,7 +127,7 @@ RredMethod::State RredMethod::applyFile(FILE *ed_cmds, FILE *in_file, FILE *out_ unsigned char mode = *idx; // save the current position - unsigned const long pos = ftell(ed_cmds); + unsigned const long pos = gztell(ed_cmds); // if this is add or change then go to the next full stop unsigned int data_length = 0; @@ -157,7 +161,7 @@ RredMethod::State RredMethod::applyFile(FILE *ed_cmds, FILE *in_file, FILE *out_ // include data from ed script if (mode == MODE_CHANGED || mode == MODE_ADDED) { - fseek(ed_cmds, pos, SEEK_SET); + gzseek(ed_cmds, pos, SEEK_SET); copyLinesFromFileToFile(ed_cmds, out_file, data_length, hash, buffer); } @@ -183,6 +187,18 @@ void RredMethod::copyLinesFromFileToFile(FILE *fin, FILE *fout, unsigned int lin } } /*}}}*/ +void RredMethod::copyLinesFromFileToFile(gzFile &fin, FILE *fout, unsigned int lines,/*{{{*/ + Hashes *hash, char *buffer) const { + while (0 < lines--) { + do { + gzgets(fin, buffer, BUF_SIZE); + size_t const written = fwrite(buffer, 1, strlen(buffer), fout); + hash->Add((unsigned char*)buffer, written); + } while (strlen(buffer) == (BUF_SIZE - 1) && + buffer[BUF_SIZE - 2] != '\n'); + } +} + /*}}}*/ void RredMethod::ignoreLineInFile(FILE *fin, char *buffer) const { /*{{{*/ fgets(buffer, BUF_SIZE, fin); while (strlen(buffer) == (BUF_SIZE - 1) && @@ -192,11 +208,20 @@ void RredMethod::ignoreLineInFile(FILE *fin, char *buffer) const { /*{{{*/ } } /*}}}*/ +void RredMethod::ignoreLineInFile(gzFile &fin, char *buffer) const { /*{{{*/ + gzgets(fin, buffer, BUF_SIZE); + while (strlen(buffer) == (BUF_SIZE - 1) && + buffer[BUF_SIZE - 2] != '\n') { + gzgets(fin, buffer, BUF_SIZE); + buffer[0] = ' '; + } +} + /*}}}*/ RredMethod::State RredMethod::patchFile(FileFd &Patch, FileFd &From, /*{{{*/ FileFd &out_file, Hashes *hash) const { char buffer[BUF_SIZE]; FILE* fFrom = fdopen(From.Fd(), "r"); - FILE* fPatch = fdopen(Patch.Fd(), "r"); + gzFile fPatch = Patch.gzFd(); FILE* fTo = fdopen(out_file.Fd(), "w"); /* we do a tail recursion to read the commands in the right order */ @@ -228,6 +253,12 @@ RredMethod::State RredMethod::patchMMap(FileFd &Patch, FileFd &From, /*{{{*/ FileFd &out_file, Hashes *hash) const { #ifdef _POSIX_MAPPED_FILES MMap ed_cmds(Patch, MMap::ReadOnly); + if (Patch.gzFd() != NULL) { + unsigned long mapSize = Patch.Size(); + DynamicMMap dyn(0, mapSize, 0); + gzread(Patch.gzFd(), dyn.Data(), mapSize); + ed_cmds = dyn; + } MMap in_file(From, MMap::ReadOnly); if (ed_cmds.Size() == 0 || in_file.Size() == 0) @@ -445,7 +476,7 @@ bool RredMethod::Fetch(FetchItem *Itm) /*{{{*/ // 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 Patch(Path+".ed",FileFd::ReadOnlyGzip); FileFd To(Itm->DestFile,FileFd::WriteAtomic); To.EraseOnFailure(); if (_error->PendingError() == true) @@ -456,8 +487,8 @@ bool RredMethod::Fetch(FetchItem *Itm) /*{{{*/ State const result = patchMMap(Patch, From, To, &Hash); if (result == MMAP_FAILED) { // retry with patchFile - lseek(Patch.Fd(), 0, SEEK_SET); - lseek(From.Fd(), 0, SEEK_SET); + Patch.Seek(0); + From.Seek(0); To.Open(Itm->DestFile,FileFd::WriteAtomic); if (_error->PendingError() == true) return false; diff --git a/test/integration/test-pdiff-usage b/test/integration/test-pdiff-usage index a70b6122c..eb1818bcd 100755 --- a/test/integration/test-pdiff-usage +++ b/test/integration/test-pdiff-usage @@ -44,6 +44,7 @@ sed -i aptarchive/Release \ -e "/^SHA256:/ a\ \ $(sha256sum $PATCHINDEX | cut -d' ' -f 1) $(stat -c%s $PATCHINDEX) Packages.diff/Index" signreleasefiles +rm -f aptarchive/Packages aptarchive/Packages.gz aptarchive/Packages.bz2 aptarchive/Packages.lzma aptget update -qq testnopackage oldstuff -- cgit v1.2.3 From 063a17d7a9f9f6195067df46220be02c4f5f5d32 Mon Sep 17 00:00:00 2001 From: David Kalnischkies Date: Sat, 15 Jan 2011 23:08:22 +0100 Subject: move the lintian-overrides into the debian directory --- debian/apt.dirs | 1 - debian/apt.lintian-overrides | 3 +++ debian/rules | 4 +--- share/lintian-overrides | 3 --- 4 files changed, 4 insertions(+), 7 deletions(-) create mode 100644 debian/apt.lintian-overrides delete mode 100644 share/lintian-overrides diff --git a/debian/apt.dirs b/debian/apt.dirs index f25e4600b..2770d79bb 100644 --- a/debian/apt.dirs +++ b/debian/apt.dirs @@ -13,4 +13,3 @@ var/lib/apt/mirrors/partial var/lib/apt/periodic var/log/apt usr/share/bug/apt -usr/share/lintian/overrides diff --git a/debian/apt.lintian-overrides b/debian/apt.lintian-overrides new file mode 100644 index 000000000..49c5ce53c --- /dev/null +++ b/debian/apt.lintian-overrides @@ -0,0 +1,3 @@ +# apt-mark is rarely used auxiliary script, we don't want to depend on +# python-apt only for it. +apt binary: python-script-but-no-python-dep ./usr/bin/apt-mark diff --git a/debian/rules b/debian/rules index fd872b4ce..1c5b6d515 100755 --- a/debian/rules +++ b/debian/rules @@ -193,9 +193,6 @@ apt: build build-doc cp debian/apt.conf.autoremove debian/$@/etc/apt/apt.conf.d/01autoremove - # copy lintian override - cp share/lintian-overrides debian/$@/usr/share/lintian/overrides/apt - # make rosetta happy and remove pot files in po/ (but leave stuff # in po/domains/* untouched) and cp *.po into each domain dir rm -f build/po/*.pot @@ -205,6 +202,7 @@ apt: build build-doc #mv debian/$@/usr/bin/apt-report-mirror-failure \ # debian/$@/usr/lib/apt/apt-report-mirror-failure \ + dh_lintian -p$@ dh_installexamples -p$@ $(BLD)/docs/examples/* dh_installman -p$@ $(wildcard $(patsubst %,doc/%.[158],$(apt_MANPAGES)) $(patsubst %,doc/*/%.*.[158],$(apt_MANPAGES))) dh_installcron -p$@ diff --git a/share/lintian-overrides b/share/lintian-overrides deleted file mode 100644 index 49c5ce53c..000000000 --- a/share/lintian-overrides +++ /dev/null @@ -1,3 +0,0 @@ -# apt-mark is rarely used auxiliary script, we don't want to depend on -# python-apt only for it. -apt binary: python-script-but-no-python-dep ./usr/bin/apt-mark -- cgit v1.2.3 From 304c041b175722a6c8f520fd52a0b65863ed9c55 Mon Sep 17 00:00:00 2001 From: David Kalnischkies Date: Sat, 15 Jan 2011 23:17:33 +0100 Subject: let dh_bugfiles take care of the bugscript instead of handcopying --- debian/apt.bug-script | 33 +++++++++++++++++++++++++++++++++ debian/bugscript | 33 --------------------------------- debian/rules | 2 +- 3 files changed, 34 insertions(+), 34 deletions(-) create mode 100755 debian/apt.bug-script delete mode 100755 debian/bugscript diff --git a/debian/apt.bug-script b/debian/apt.bug-script new file mode 100755 index 000000000..f5ec9e05d --- /dev/null +++ b/debian/apt.bug-script @@ -0,0 +1,33 @@ +#!/bin/bash -e + +# reportbug #169495 +if [ -z "$YESNO" ]; then + YESNO=$"yYnN" +fi + +cat <&3 + apt-config dump >&3 2>&1 +fi + +for config in /etc/apt/preferences /etc/apt/sources.list; do + if [ -f $config ]; then + yesno "May I include your $config configuration file? [Y/n] " yep + if [ "$REPLY" = "yep" ]; then + echo -e "\n-- $config --\n" >&3 + cat $config >&3 + else + echo -e "\n-- ($config present, but not submitted) --\n" >&3 + fi + else + echo -e "\n-- (no $config present) --\n" >&3 + fi +done diff --git a/debian/bugscript b/debian/bugscript deleted file mode 100755 index f5ec9e05d..000000000 --- a/debian/bugscript +++ /dev/null @@ -1,33 +0,0 @@ -#!/bin/bash -e - -# reportbug #169495 -if [ -z "$YESNO" ]; then - YESNO=$"yYnN" -fi - -cat <&3 - apt-config dump >&3 2>&1 -fi - -for config in /etc/apt/preferences /etc/apt/sources.list; do - if [ -f $config ]; then - yesno "May I include your $config configuration file? [Y/n] " yep - if [ "$REPLY" = "yep" ]; then - echo -e "\n-- $config --\n" >&3 - cat $config >&3 - else - echo -e "\n-- ($config present, but not submitted) --\n" >&3 - fi - else - echo -e "\n-- (no $config present) --\n" >&3 - fi -done diff --git a/debian/rules b/debian/rules index 1c5b6d515..5331bea80 100755 --- a/debian/rules +++ b/debian/rules @@ -188,7 +188,6 @@ apt: build build-doc cp $(BLD)/scripts/dselect/* debian/$@/usr/lib/dpkg/methods/apt/ cp -r $(BLD)/locale debian/$@/usr/share/ - cp debian/bugscript debian/$@/usr/share/bug/apt/script cp debian/apt.logrotate debian/$@/etc/logrotate.d/apt cp debian/apt.conf.autoremove debian/$@/etc/apt/apt.conf.d/01autoremove @@ -202,6 +201,7 @@ apt: build build-doc #mv debian/$@/usr/bin/apt-report-mirror-failure \ # debian/$@/usr/lib/apt/apt-report-mirror-failure \ + dh_bugfiles -p$@ dh_lintian -p$@ dh_installexamples -p$@ $(BLD)/docs/examples/* dh_installman -p$@ $(wildcard $(patsubst %,doc/%.[158],$(apt_MANPAGES)) $(patsubst %,doc/*/%.*.[158],$(apt_MANPAGES))) -- cgit v1.2.3 From 2cf8c58b3f5e850d44645c23e33ce1be96bcad0b Mon Sep 17 00:00:00 2001 From: David Kalnischkies Date: Sun, 16 Jan 2011 00:54:48 +0100 Subject: move file installation from rules to dh_install files --- debian/apt-transport-https.dirs | 1 + debian/apt-transport-https.install | 1 + debian/apt-utils.install | 1 + debian/apt.install | 5 +++++ debian/control | 2 +- debian/libapt-pkg-dev.install | 3 +++ debian/rules | 45 +++++++++++--------------------------- methods/makefile | 2 +- 8 files changed, 26 insertions(+), 34 deletions(-) create mode 100644 debian/apt-transport-https.dirs create mode 100644 debian/apt-transport-https.install create mode 100644 debian/apt-utils.install create mode 100644 debian/apt.install create mode 100644 debian/libapt-pkg-dev.install diff --git a/debian/apt-transport-https.dirs b/debian/apt-transport-https.dirs new file mode 100644 index 000000000..3abb3fee8 --- /dev/null +++ b/debian/apt-transport-https.dirs @@ -0,0 +1 @@ +usr/lib/apt/methods diff --git a/debian/apt-transport-https.install b/debian/apt-transport-https.install new file mode 100644 index 000000000..848f10c78 --- /dev/null +++ b/debian/apt-transport-https.install @@ -0,0 +1 @@ +bin/methods/https usr/lib/apt/methods diff --git a/debian/apt-utils.install b/debian/apt-utils.install new file mode 100644 index 000000000..d947f26d4 --- /dev/null +++ b/debian/apt-utils.install @@ -0,0 +1 @@ +bin/libapt-inst*.so.* usr/lib/ diff --git a/debian/apt.install b/debian/apt.install new file mode 100644 index 000000000..979e04ce2 --- /dev/null +++ b/debian/apt.install @@ -0,0 +1,5 @@ +bin/apt-* usr/bin/ +bin/libapt-pkg*.so.* usr/lib/ +bin/methods/* usr/lib/apt/methods/ +scripts/dselect/* usr/lib/dpkg/methods/apt/ +locale usr/share/ diff --git a/debian/control b/debian/control index 46d19b246..7e4b798d9 100644 --- a/debian/control +++ b/debian/control @@ -6,7 +6,7 @@ Uploaders: Michael Vogt , Otavio Salvador , Christian Perrier , Daniel Burrows , Luca Bruno , Julian Andres Klode Standards-Version: 3.9.0 -Build-Depends: dpkg-dev (>= 1.15.8), debhelper (>= 7), libdb-dev, gettext (>= 0.12), libcurl4-gnutls-dev (>= 7.19.0), zlib1g-dev | libz-dev, debiandoc-sgml, xsltproc, docbook-xsl, docbook-xml, po4a (>= 0.34-2), autotools-dev, autoconf, automake, doxygen +Build-Depends: dpkg-dev (>= 1.15.8), debhelper (>= 7.2.3~), libdb-dev, gettext (>= 0.12), libcurl4-gnutls-dev (>= 7.19.0), zlib1g-dev | libz-dev, debiandoc-sgml, xsltproc, docbook-xsl, docbook-xml, po4a (>= 0.34-2), autotools-dev, autoconf, automake, doxygen Build-Conflicts: autoconf2.13, automake1.4 Vcs-Bzr: http://bzr.debian.org/apt/debian-sid/ Vcs-Browser: http://bzr.debian.org/loggerhead/apt/debian-sid/ diff --git a/debian/libapt-pkg-dev.install b/debian/libapt-pkg-dev.install new file mode 100644 index 000000000..bd1a6c174 --- /dev/null +++ b/debian/libapt-pkg-dev.install @@ -0,0 +1,3 @@ +bin/libapt-pkg*.so usr/lib/ +bin/libapt-inst*.so usr/lib/ +include/apt-pkg/*.h usr/include/apt-pkg/ diff --git a/debian/rules b/debian/rules index 5331bea80..640900678 100755 --- a/debian/rules +++ b/debian/rules @@ -172,24 +172,6 @@ apt: build build-doc # # apt install # - cp $(BLD)/bin/apt-* debian/$@/usr/bin/ - - # Remove the bits that are in apt-utils - rm $(addprefix debian/$@/usr/bin/apt-,$(APT_UTILS)) - - # install the shared libs - find $(BLD)/bin/ -type f -name "libapt-pkg*.so.*" -exec cp -a "{}" debian/$@/usr/lib/ \; - find $(BLD)/bin/ -type l -name "libapt-pkg*.so.*" -exec cp -a "{}" debian/$@/usr/lib/ \; - - cp $(BLD)/bin/methods/* debian/$@/usr/lib/apt/methods/ - # https has its own package - rm debian/$@/usr/lib/apt/methods/https - - cp $(BLD)/scripts/dselect/* debian/$@/usr/lib/dpkg/methods/apt/ - cp -r $(BLD)/locale debian/$@/usr/share/ - - cp debian/apt.logrotate debian/$@/etc/logrotate.d/apt - cp debian/apt.conf.autoremove debian/$@/etc/apt/apt.conf.d/01autoremove # make rosetta happy and remove pot files in po/ (but leave stuff @@ -197,6 +179,14 @@ apt: build build-doc rm -f build/po/*.pot rm -f po/*.pot + dh_install -p$@ --sourcedir=$(BLD) + + # Remove the bits that are in apt-utils + rm $(addprefix debian/$@/usr/bin/apt-,$(APT_UTILS)) + + # https has its own package + rm debian/$@/usr/lib/apt/methods/https + # move the mirror failure script in place #mv debian/$@/usr/bin/apt-report-mirror-failure \ # debian/$@/usr/lib/apt/apt-report-mirror-failure \ @@ -208,6 +198,7 @@ apt: build build-doc dh_installcron -p$@ dh_installdocs -p$@ dh_installchangelogs -p$@ + dh_installlogrotate -p$@ dh_strip -p$@ dh_compress -p$@ dh_fixperms -p$@ @@ -226,13 +217,8 @@ libapt-pkg-dev: build # # libapt-pkg-dev install # - cp -a $(BLD)/bin/libapt-pkg*.so debian/libapt-pkg-dev/usr/lib/ - cp -a $(BLD)/bin/libapt-inst*.so debian/libapt-pkg-dev/usr/lib/ -# ln -s libapt-pkg.so.$(LIBAPTPKG_MAJOR) debian/libapt-pkg-dev/usr/lib/libapt-pkg.so - cp $(BLD)/include/apt-pkg/*.h debian/libapt-pkg-dev/usr/include/apt-pkg/ - + dh_install -p$@ --sourcedir=$(BLD) dh_installdocs -p$@ - dh_installchangelogs -p$@ dh_strip -p$@ dh_compress -p$@ @@ -249,11 +235,9 @@ apt-utils: build dh_prep -p$@ dh_installdirs -p$@ - # install the shared libs - find $(BLD)/bin/ -type f -name "libapt-inst*.so.*" -exec cp -a "{}" debian/$@/usr/lib/ \; - find $(BLD)/bin/ -type l -name "libapt-inst*.so.*" -exec cp -a "{}" debian/$@/usr/lib/ \; - cp $(addprefix $(BLD)/bin/apt-,$(APT_UTILS)) debian/$@/usr/bin/ + + dh_install -p$@ --sourcedir=$(BLD) dh_installdocs -p$@ dh_installexamples -p$@ @@ -277,10 +261,7 @@ apt-transport-https: build libapt-pkg-dev dh_prep -p$@ dh_installdirs -p$@ - # install the method - mkdir --parents debian/$@/usr/lib/apt/methods - cp $(BLD)/bin/methods/https debian/$@/usr/lib/apt/methods - + dh_install -p$@ --sourcedir=$(BLD) dh_installdocs -p$@ debian/apt-transport-https.README dh_installexamples -p$@ diff --git a/methods/makefile b/methods/makefile index d94a85340..4ee356cec 100644 --- a/methods/makefile +++ b/methods/makefile @@ -67,7 +67,7 @@ include $(PROGRAM_H) # The rred method PROGRAM=rred -SLIBS = -lapt-pkg $(SOCKETLIBS) $(INTLLIBS) +SLIBS = -lapt-pkg -lz $(SOCKETLIBS) $(INTLLIBS) LIB_MAKES = apt-pkg/makefile SOURCE = rred.cc include $(PROGRAM_H) -- cgit v1.2.3 From 39cc82288036a005226564fadd05ef19ef0037bb Mon Sep 17 00:00:00 2001 From: David Kalnischkies Date: Sun, 16 Jan 2011 13:33:24 +0100 Subject: implement i quiet run-tests mode which prints only one line per testcase --- test/integration/framework | 4 ++++ test/integration/run-tests | 14 +++++++++++++- 2 files changed, 17 insertions(+), 1 deletion(-) diff --git a/test/integration/framework b/test/integration/framework index 4bbe1b408..5d54e49b6 100644 --- a/test/integration/framework +++ b/test/integration/framework @@ -39,6 +39,10 @@ fi if [ $MSGLEVEL -le 2 ]; then msgmsg() { true; } msgnmsg() { true; } + msgtest() { true; } + msgpass() { echo -n " ${CPASS}P${CNORMAL}" >&2; } + msgskip() { echo -n " ${CWARNING}S${CNORMAL}" >&2; } + msgfail() { echo -n " ${CFAIL}FAIL${CNORMAL}" >&2; } fi if [ $MSGLEVEL -le 3 ]; then msginfo() { true; } diff --git a/test/integration/run-tests b/test/integration/run-tests index c7ea0a61a..5644f0a05 100755 --- a/test/integration/run-tests +++ b/test/integration/run-tests @@ -2,7 +2,19 @@ set -e DIR=$(readlink -f $(dirname $0)) +if [ "$1" = "-q" ]; then + export MSGLEVEL=2 +elif [ "$1" = "-v" ]; then + export MSGLEVEL=5 +fi for testcase in $(run-parts --list $DIR | grep '/test-'); do - echo "\033[1;32mRun Testcase \033[1;35m$(basename ${testcase})\033[0m" + if [ "$1" = "-q" ]; then + echo -n "\033[1;32mRun Testcase \033[1;35m$(basename ${testcase})\033[0m" + else + echo "\033[1;32mRun Testcase \033[1;35m$(basename ${testcase})\033[0m" + fi ${testcase} + if [ "$1" = "-q" ]; then + echo + fi done -- cgit v1.2.3 From 248ec5ab008a1dfa5bf441b0d40b6c1859954746 Mon Sep 17 00:00:00 2001 From: David Kalnischkies Date: Sun, 16 Jan 2011 17:32:33 +0100 Subject: * cmdline/apt-key: - don't set trustdb-name as non-root so 'list' and 'finger' can be used without being root (Closes: #393005, #592107) --- cmdline/apt-key | 7 ++++++- debian/changelog | 5 ++++- 2 files changed, 10 insertions(+), 2 deletions(-) diff --git a/cmdline/apt-key b/cmdline/apt-key index b39ab12e4..c1e01a776 100755 --- a/cmdline/apt-key +++ b/cmdline/apt-key @@ -5,7 +5,12 @@ unset GREP_OPTIONS # We don't use a secret keyring, of course, but gpg panics and # implodes if there isn't one available -GPG_CMD="gpg --ignore-time-conflict --no-options --no-default-keyring --secret-keyring /etc/apt/secring.gpg --trustdb-name /etc/apt/trustdb.gpg" +GPG_CMD='gpg --ignore-time-conflict --no-options --no-default-keyring --secret-keyring /etc/apt/secring.gpg' + +if ! id -u > /dev/null; then + GPG_CMD="$GPG_CMD --trustdb-name /etc/apt/trustdb.gpg" +fi + GPG="$GPG_CMD" MASTER_KEYRING="" diff --git a/debian/changelog b/debian/changelog index 5c8adb434..b74508804 100644 --- a/debian/changelog +++ b/debian/changelog @@ -53,8 +53,11 @@ apt (0.8.11+wheezy) unstable; urgency=low - operate optional on gzip compressed pdiffs * apt-pkg/acquire-item.cc: - don't uncompress downloaded pdiff files before feeding it to rred + * cmdline/apt-key: + - don't set trustdb-name as non-root so 'list' and 'finger' + can be used without being root (Closes: #393005, #592107) - -- David Kalnischkies Sat, 15 Jan 2011 20:24:03 +0100 + -- David Kalnischkies Sun, 16 Jan 2011 17:23:28 +0100 apt (0.8.10) unstable; urgency=low -- cgit v1.2.3 From fe0f7911b650918e1d511b3453664a07f6d966d0 Mon Sep 17 00:00:00 2001 From: David Kalnischkies Date: Thu, 20 Jan 2011 14:53:52 +0100 Subject: - try downloading clearsigned InRelease before trying Release.gpg * apt-pkg/deb/deblistparser.cc: - rewrite LoadReleaseInfo to cope with clearsigned Releasefiles --- apt-pkg/acquire-item.cc | 54 ++++++- apt-pkg/acquire-item.h | 33 +++++ apt-pkg/deb/debindexfile.cc | 8 +- apt-pkg/deb/deblistparser.cc | 114 ++++++++++----- apt-pkg/deb/debmetaindex.cc | 34 +++-- apt-pkg/indexcopy.cc | 3 +- apt-pkg/indexrecords.cc | 17 ++- apt-pkg/tagfile.cc | 10 +- apt-pkg/tagfile.h | 2 + debian/changelog | 5 +- doc/apt-secure.8.xml | 5 +- test/integration/Packages-releasefile-verification | 18 +++ .../Packages-releasefile-verification-new | 21 +++ test/integration/framework | 7 + test/integration/marvinparanoid.pub | Bin 0 -> 629 bytes test/integration/marvinparanoid.sec | Bin 0 -> 1280 bytes .../test-bug-595691-empty-and-broken-archive-files | 32 ++--- test/integration/test-releasefile-verification | 160 +++++++++++++++++++++ 18 files changed, 430 insertions(+), 93 deletions(-) create mode 100644 test/integration/Packages-releasefile-verification create mode 100644 test/integration/Packages-releasefile-verification-new create mode 100644 test/integration/marvinparanoid.pub create mode 100644 test/integration/marvinparanoid.sec create mode 100755 test/integration/test-releasefile-verification diff --git a/apt-pkg/acquire-item.cc b/apt-pkg/acquire-item.cc index d4e90b552..2cd6ab359 100644 --- a/apt-pkg/acquire-item.cc +++ b/apt-pkg/acquire-item.cc @@ -1077,6 +1077,8 @@ void pkgAcqMetaIndex::Done(string Message,unsigned long Size,string Hash, /*{{{* { string FinalFile = _config->FindDir("Dir::State::lists"); FinalFile += URItoFileName(RealURI); + if (SigFile == DestFile) + SigFile = FinalFile; Rename(DestFile,FinalFile); chmod(FinalFile.c_str(),0644); DestFile = FinalFile; @@ -1110,6 +1112,8 @@ void pkgAcqMetaIndex::RetrievalDone(string Message) /*{{{*/ { string FinalFile = _config->FindDir("Dir::State::lists"); FinalFile += URItoFileName(RealURI); + if (SigFile == DestFile) + SigFile = FinalFile; DestFile = FinalFile; } Complete = true; @@ -1141,6 +1145,10 @@ void pkgAcqMetaIndex::AuthDone(string Message) /*{{{*/ // Download further indexes with verification QueueIndexes(true); + // is it a clearsigned MetaIndex file? + if (DestFile == SigFile) + return; + // Done, move signature file into position string VerifiedSigFile = _config->FindDir("Dir::State::lists") + URItoFileName(RealURI) + ".gpg"; @@ -1300,13 +1308,20 @@ void pkgAcqMetaIndex::Failed(string Message,pkgAcquire::MethodConfig *Cnf) if (AuthPass == true) { // gpgv method failed, if we have a good signature - string LastGoodSigFile = _config->FindDir("Dir::State::lists") + - "partial/" + URItoFileName(RealURI) + ".gpg.reverify"; + string LastGoodSigFile = _config->FindDir("Dir::State::lists"); + if (DestFile == SigFile) + LastGoodSigFile.append(URItoFileName(RealURI)); + else + LastGoodSigFile.append("partial/").append(URItoFileName(RealURI)).append(".gpg.reverify"); + if(FileExists(LastGoodSigFile)) { - string VerifiedSigFile = _config->FindDir("Dir::State::lists") + - URItoFileName(RealURI) + ".gpg"; - Rename(LastGoodSigFile,VerifiedSigFile); + if (DestFile != SigFile) + { + string VerifiedSigFile = _config->FindDir("Dir::State::lists") + + URItoFileName(RealURI) + ".gpg"; + Rename(LastGoodSigFile,VerifiedSigFile); + } Status = StatTransientNetworkError; _error->Warning(_("A error occurred during the signature " "verification. The repository is not updated " @@ -1330,6 +1345,35 @@ void pkgAcqMetaIndex::Failed(string Message,pkgAcquire::MethodConfig *Cnf) QueueIndexes(false); } /*}}}*/ +pkgAcqMetaClearSig::pkgAcqMetaClearSig(pkgAcquire *Owner, /*{{{*/ + string const &URI, string const &URIDesc, string const &ShortDesc, + string const &MetaIndexURI, string const &MetaIndexURIDesc, string const &MetaIndexShortDesc, + string const &MetaSigURI, string const &MetaSigURIDesc, string const &MetaSigShortDesc, + const vector* IndexTargets, + indexRecords* MetaIndexParser) : + pkgAcqMetaIndex(Owner, URI, URIDesc, ShortDesc, "", IndexTargets, MetaIndexParser), + MetaIndexURI(MetaIndexURI), MetaIndexURIDesc(MetaIndexURIDesc), MetaIndexShortDesc(MetaIndexShortDesc), + MetaSigURI(MetaSigURI), MetaSigURIDesc(MetaSigURIDesc), MetaSigShortDesc(MetaSigShortDesc) +{ + SigFile = DestFile; +} + /*}}}*/ +void pkgAcqMetaClearSig::Failed(string Message,pkgAcquire::MethodConfig *Cnf) /*{{{*/ +{ + if (AuthPass == false) + { + new pkgAcqMetaSig(Owner, + MetaSigURI, MetaSigURIDesc, MetaSigShortDesc, + MetaIndexURI, MetaIndexURIDesc, MetaIndexShortDesc, + IndexTargets, MetaIndexParser); + if (Cnf->LocalOnly == true || + StringToBool(LookupTag(Message, "Transient-Failure"), false) == false) + Dequeue(); + } + else + pkgAcqMetaIndex::Failed(Message, Cnf); +} + /*}}}*/ // AcqArchive::AcqArchive - Constructor /*{{{*/ // --------------------------------------------------------------------- /* This just sets up the initial fetch environment and queues the first diff --git a/apt-pkg/acquire-item.h b/apt-pkg/acquire-item.h index d97a96a0f..581761e32 100644 --- a/apt-pkg/acquire-item.h +++ b/apt-pkg/acquire-item.h @@ -772,6 +772,39 @@ class pkgAcqMetaIndex : public pkgAcquire::Item indexRecords* MetaIndexParser); }; /*}}}*/ +/** \brief An item repsonsible for downloading clearsigned metaindexes {{{*/ +class pkgAcqMetaClearSig : public pkgAcqMetaIndex +{ + /** \brief The URI of the meta-index file for the detached signature */ + string MetaIndexURI; + + /** \brief A "URI-style" description of the meta-index file */ + string MetaIndexURIDesc; + + /** \brief A brief description of the meta-index file */ + string MetaIndexShortDesc; + + /** \brief The URI of the detached meta-signature file if the clearsigned one failed. */ + string MetaSigURI; + + /** \brief A "URI-style" description of the meta-signature file */ + string MetaSigURIDesc; + + /** \brief A brief description of the meta-signature file */ + string MetaSigShortDesc; + +public: + void Failed(string Message,pkgAcquire::MethodConfig *Cnf); + + /** \brief Create a new pkgAcqMetaClearSig. */ + pkgAcqMetaClearSig(pkgAcquire *Owner, + string const &URI, string const &URIDesc, string const &ShortDesc, + string const &MetaIndexURI, string const &MetaIndexURIDesc, string const &MetaIndexShortDesc, + string const &MetaSigURI, string const &MetaSigURIDesc, string const &MetaSigShortDesc, + const vector* IndexTargets, + indexRecords* MetaIndexParser); +}; + /*}}}*/ /** \brief An item that is responsible for fetching a package file. {{{ * * If the package file already exists in the cache, nothing will be diff --git a/apt-pkg/deb/debindexfile.cc b/apt-pkg/deb/debindexfile.cc index af1209ccb..9961b5ae4 100644 --- a/apt-pkg/deb/debindexfile.cc +++ b/apt-pkg/deb/debindexfile.cc @@ -324,8 +324,14 @@ bool debPackagesIndex::Merge(pkgCacheGenerator &Gen,OpProgress *Prog) const return _error->Error("Problem with MergeList %s",PackageFile.c_str()); // Check the release file - string ReleaseFile = debReleaseIndex(URI,Dist).MetaIndexFile("Release"); + string ReleaseFile = debReleaseIndex(URI,Dist).MetaIndexFile("InRelease"); + bool releaseExists = false; if (FileExists(ReleaseFile) == true) + releaseExists = true; + else + ReleaseFile = debReleaseIndex(URI,Dist).MetaIndexFile("Release"); + + if (releaseExists == true || FileExists(ReleaseFile) == true) { FileFd Rel(ReleaseFile,FileFd::ReadOnly); if (_error->PendingError() == true) diff --git a/apt-pkg/deb/deblistparser.cc b/apt-pkg/deb/deblistparser.cc index 1b3bfd6ae..9201e6a54 100644 --- a/apt-pkg/deb/deblistparser.cc +++ b/apt-pkg/deb/deblistparser.cc @@ -783,45 +783,89 @@ bool debListParser::Step() bool debListParser::LoadReleaseInfo(pkgCache::PkgFileIterator &FileI, FileFd &File, string component) { - pkgTagFile Tags(&File, File.Size() + 256); // XXX - pkgTagSection Section; - if (Tags.Step(Section) == false) - return false; - - // FIXME: Do we need it now for multi-arch? - // mvo: I don't think we need to fill that in (it's unused since apt-0.6) -// FileI->Architecture = WriteUniqString(Arch); - // apt-secure does no longer download individual (per-section) Release // file. to provide Component pinning we use the section name now FileI->Component = WriteUniqString(component); - const char *Start; - const char *Stop; - if (Section.Find("Suite",Start,Stop) == true) - FileI->Archive = WriteUniqString(Start,Stop - Start); - if (Section.Find("Component",Start,Stop) == true) - FileI->Component = WriteUniqString(Start,Stop - Start); - if (Section.Find("Version",Start,Stop) == true) - FileI->Version = WriteUniqString(Start,Stop - Start); - if (Section.Find("Origin",Start,Stop) == true) - FileI->Origin = WriteUniqString(Start,Stop - Start); - if (Section.Find("Codename",Start,Stop) == true) - FileI->Codename = WriteUniqString(Start,Stop - Start); - if (Section.Find("Label",Start,Stop) == true) - FileI->Label = WriteUniqString(Start,Stop - Start); - if (Section.Find("Architecture",Start,Stop) == true) - FileI->Architecture = WriteUniqString(Start,Stop - Start); - - if (Section.FindFlag("NotAutomatic",FileI->Flags, - pkgCache::Flag::NotAutomatic) == false) - _error->Warning("Bad NotAutomatic flag"); - if (Section.FindFlag("ButAutomaticUpgrades",FileI->Flags, - pkgCache::Flag::ButAutomaticUpgrades) == false) - _error->Warning("Bad ButAutomaticUpgrades flag"); - // overrule the NotAutomatic setting if needed as they are both present for compatibility - else if ((FileI->Flags & pkgCache::Flag::ButAutomaticUpgrades) == pkgCache::Flag::ButAutomaticUpgrades) - FileI->Flags &= ~pkgCache::Flag::NotAutomatic; + FILE* release = fdopen(dup(File.Fd()), "r"); + if (release == NULL) + return false; + + char buffer[101]; + bool gpgClose = false; + while (fgets(buffer, sizeof(buffer), release) != NULL) + { + size_t len = 0; + + // Skip empty lines + for (; buffer[len] == '\r' && buffer[len] == '\n'; ++len); + if (buffer[len] == '\0') + continue; + + // only evalute the first GPG section + if (strncmp("-----", buffer, 5) == 0) + { + if (gpgClose == true) + break; + gpgClose = true; + continue; + } + + // seperate the tag from the data + for (; buffer[len] != ':' && buffer[len] != '\0'; ++len); + if (buffer[len] == '\0') + continue; + char* dataStart = buffer + len; + for (++dataStart; *dataStart == ' '; ++dataStart); + char* dataEnd = dataStart; + for (++dataEnd; *dataEnd != '\0'; ++dataEnd); + + // which datastorage need to be updated + map_ptrloc* writeTo = NULL; + if (buffer[0] == ' ') + ; + #define APT_PARSER_WRITETO(X, Y) else if (strncmp(Y, buffer, len) == 0) writeTo = &X; + APT_PARSER_WRITETO(FileI->Archive, "Suite") + APT_PARSER_WRITETO(FileI->Component, "Component") + APT_PARSER_WRITETO(FileI->Version, "Version") + APT_PARSER_WRITETO(FileI->Origin, "Origin") + APT_PARSER_WRITETO(FileI->Codename, "Codename") + APT_PARSER_WRITETO(FileI->Label, "Label") + #undef APT_PARSER_WRITETO + #define APT_PARSER_FLAGIT(X) else if (strncmp(#X, buffer, len) == 0) \ + pkgTagSection::FindFlag(FileI->Flags, pkgCache::Flag:: X, dataStart, dataEnd-1); + APT_PARSER_FLAGIT(NotAutomatic) + APT_PARSER_FLAGIT(ButAutomaticUpgrades) + #undef APT_PARSER_FLAGIT + + // load all data from the line and save it + string data; + if (writeTo != NULL) + data.append(dataStart, dataEnd); + if (sizeof(buffer) - 1 == (dataEnd - buffer)) + { + while (fgets(buffer, sizeof(buffer), release) != NULL) + { + if (writeTo != NULL) + data.append(buffer); + if (strlen(buffer) != sizeof(buffer) - 1) + break; + } + } + if (writeTo != NULL) + { + // remove spaces and stuff from the end of the data line + for (std::string::reverse_iterator s = data.rbegin(); + s != data.rend(); ++s) + { + if (*s != '\r' && *s != '\n' && *s != ' ') + break; + *s = '\0'; + } + *writeTo = WriteUniqString(data); + } + } + fclose(release); return !_error->PendingError(); } diff --git a/apt-pkg/deb/debmetaindex.cc b/apt-pkg/deb/debmetaindex.cc index 717d0bcde..e2c680b14 100644 --- a/apt-pkg/deb/debmetaindex.cc +++ b/apt-pkg/deb/debmetaindex.cc @@ -182,21 +182,15 @@ bool debReleaseIndex::GetIndexes(pkgAcquire *Owner, bool const &GetAll) const new pkgAcqIndex(Owner, (*Target)->URI, (*Target)->Description, (*Target)->ShortDesc, HashString()); } - // this is normally created in pkgAcqMetaSig, but if we run - // in --print-uris mode, we add it here - new pkgAcqMetaIndex(Owner, MetaIndexURI("Release"), - MetaIndexInfo("Release"), "Release", - MetaIndexURI("Release.gpg"), - ComputeIndexTargets(), - new indexRecords (Dist)); - } - new pkgAcqMetaSig(Owner, MetaIndexURI("Release.gpg"), - MetaIndexInfo("Release.gpg"), "Release.gpg", - MetaIndexURI("Release"), MetaIndexInfo("Release"), "Release", - ComputeIndexTargets(), - new indexRecords (Dist)); + new pkgAcqMetaClearSig(Owner, MetaIndexURI("InRelease"), + MetaIndexInfo("InRelease"), "InRelease", + MetaIndexURI("Release"), MetaIndexInfo("Release"), "Release", + MetaIndexURI("Release.gpg"), MetaIndexInfo("Release.gpg"), "Release.gpg", + ComputeIndexTargets(), + new indexRecords (Dist)); + // Queue the translations std::vector const lang = APT::Configuration::getLanguages(true); @@ -224,16 +218,20 @@ bool debReleaseIndex::GetIndexes(pkgAcquire *Owner, bool const &GetAll) const bool debReleaseIndex::IsTrusted() const { - string VerifiedSigFile = _config->FindDir("Dir::State::lists") + - URItoFileName(MetaIndexURI("Release")) + ".gpg"; - if(_config->FindB("APT::Authentication::TrustCDROM", false)) if(URI.substr(0,strlen("cdrom:")) == "cdrom:") return true; - + + string VerifiedSigFile = _config->FindDir("Dir::State::lists") + + URItoFileName(MetaIndexURI("Release")) + ".gpg"; + if (FileExists(VerifiedSigFile)) return true; - return false; + + VerifiedSigFile = _config->FindDir("Dir::State::lists") + + URItoFileName(MetaIndexURI("InRelease")); + + return FileExists(VerifiedSigFile); } vector *debReleaseIndex::GetIndexFiles() { diff --git a/apt-pkg/indexcopy.cc b/apt-pkg/indexcopy.cc index f88d51fc5..c2ee1c347 100644 --- a/apt-pkg/indexcopy.cc +++ b/apt-pkg/indexcopy.cc @@ -722,7 +722,8 @@ bool SigVerify::RunGPGV(std::string const &File, std::string const &FileGPG, } Args.push_back(FileGPG.c_str()); - Args.push_back(File.c_str()); + if (FileGPG != File) + Args.push_back(File.c_str()); Args.push_back(NULL); if (Debug == true) diff --git a/apt-pkg/indexrecords.cc b/apt-pkg/indexrecords.cc index eb9a36866..10e154ad2 100644 --- a/apt-pkg/indexrecords.cc +++ b/apt-pkg/indexrecords.cc @@ -55,14 +55,17 @@ bool indexRecords::Load(const string Filename) /*{{{*/ } pkgTagSection Section; - if (TagFile.Step(Section) == false) - { - strprintf(ErrorText, _("No sections in Release file %s"), Filename.c_str()); - return false; - } - const char *Start, *End; - Section.Get (Start, End, 0); + // Skip over sections beginning with ----- as this is an idicator for clearsigns + do { + if (TagFile.Step(Section) == false) + { + strprintf(ErrorText, _("No sections in Release file %s"), Filename.c_str()); + return false; + } + + Section.Get (Start, End, 0); + } while (End - Start > 5 && strncmp(Start, "-----", 5) == 0); Suite = Section.FindS("Suite"); Dist = Section.FindS("Codename"); diff --git a/apt-pkg/tagfile.cc b/apt-pkg/tagfile.cc index 96a681bec..4a2f3f7e6 100644 --- a/apt-pkg/tagfile.cc +++ b/apt-pkg/tagfile.cc @@ -399,9 +399,13 @@ bool pkgTagSection::FindFlag(const char *Tag,unsigned long &Flags, const char *Stop; if (Find(Tag,Start,Stop) == false) return true; - - switch (StringToBool(string(Start,Stop))) - { + return FindFlag(Flags, Flag, Start, Stop); +} +bool const pkgTagSection::FindFlag(unsigned long &Flags, unsigned long Flag, + char const* Start, char const* Stop) +{ + switch (StringToBool(string(Start, Stop))) + { case 0: Flags &= ~Flag; return true; diff --git a/apt-pkg/tagfile.h b/apt-pkg/tagfile.h index 6891c1d81..61491aa04 100644 --- a/apt-pkg/tagfile.h +++ b/apt-pkg/tagfile.h @@ -60,6 +60,8 @@ class pkgTagSection unsigned long long FindULL(const char *Tag, unsigned long long const &Default = 0) const; bool FindFlag(const char *Tag,unsigned long &Flags, unsigned long Flag) const; + bool static const FindFlag(unsigned long &Flags, unsigned long Flag, + const char* Start, const char* Stop); bool Scan(const char *Start,unsigned long MaxLength); inline unsigned long size() const {return Stop - Section;}; void Trim(); diff --git a/debian/changelog b/debian/changelog index b74508804..59f516751 100644 --- a/debian/changelog +++ b/debian/changelog @@ -53,11 +53,14 @@ apt (0.8.11+wheezy) unstable; urgency=low - operate optional on gzip compressed pdiffs * apt-pkg/acquire-item.cc: - don't uncompress downloaded pdiff files before feeding it to rred + - try downloading clearsigned InRelease before trying Release.gpg * cmdline/apt-key: - don't set trustdb-name as non-root so 'list' and 'finger' can be used without being root (Closes: #393005, #592107) + * apt-pkg/deb/deblistparser.cc: + - rewrite LoadReleaseInfo to cope with clearsigned Releasefiles - -- David Kalnischkies Sun, 16 Jan 2011 17:23:28 +0100 + -- David Kalnischkies Thu, 20 Jan 2011 14:52:32 +0100 apt (0.8.10) unstable; urgency=low diff --git a/doc/apt-secure.8.xml b/doc/apt-secure.8.xml index f345c3f89..f8ff678b9 100644 --- a/doc/apt-secure.8.xml +++ b/doc/apt-secure.8.xml @@ -148,8 +148,8 @@ (you should make sure you are using a trusted communication channel when retrieving it), add it with apt-key and then run apt-get update so that apt can download - and verify the Release.gpg files from the archives you - have configured. + and verify the InRelease or Release.gpg + files from the archives you have configured. @@ -166,6 +166,7 @@ (provided in apt-utils). Sign it. You can do this by running + gpg --clearsign -o InRelease Release and gpg -abs -o Release.gpg Release. Publish the key fingerprint, diff --git a/test/integration/Packages-releasefile-verification b/test/integration/Packages-releasefile-verification new file mode 100644 index 000000000..29a385f4f --- /dev/null +++ b/test/integration/Packages-releasefile-verification @@ -0,0 +1,18 @@ +Package: apt +Version: 0.7.25.3 +Architecture: i386 +Maintainer: APT Development Team +Installed-Size: 5244 +Replaces: libapt-pkg-dev (<< 0.3.7), libapt-pkg-doc (<< 0.3.7) +Provides: libapt-pkg-libc6.9-6-4.8 +Suggests: aptitude | synaptic | wajig, dpkg-dev, apt-doc, bzip2, lzma, python-apt +Filename: apt.deb +Size: 0 +MD5sum: d41d8cd98f00b204e9800998ecf8427e +Description: Advanced front-end for dpkg + This is Debian's next generation front-end for the dpkg package manager. + It provides the apt-get utility and APT dselect method that provides a + simpler, safer way to install and upgrade packages. + . + APT features complete installation ordering, multiple source capability + and several other unique features, see the Users Guide in apt-doc. diff --git a/test/integration/Packages-releasefile-verification-new b/test/integration/Packages-releasefile-verification-new new file mode 100644 index 000000000..e3b2edf1f --- /dev/null +++ b/test/integration/Packages-releasefile-verification-new @@ -0,0 +1,21 @@ +Package: apt +Priority: important +Section: admin +Installed-Size: 5672 +Maintainer: APT Development Team +Architecture: i386 +Version: 0.8.0~pre1 +Replaces: manpages-pl (<< 20060617-3~) +Provides: libapt-pkg4.10 +Suggests: aptitude | synaptic | wajig, dpkg-dev, apt-doc, bzip2, lzma, python-apt +Conflicts: python-apt (<< 0.7.93.2~) +Filename: apt.deb +Size: 0 +MD5sum: d41d8cd98f00b204e9800998ecf8427e +Description: Advanced front-end for dpkg + This is Debian's next generation front-end for the dpkg package manager. + It provides the apt-get utility and APT dselect method that provides a + simpler, safer way to install and upgrade packages. + . + APT features complete installation ordering, multiple source capability + and several other unique features, see the Users Guide in apt-doc. diff --git a/test/integration/framework b/test/integration/framework index 5d54e49b6..cb3fca35d 100644 --- a/test/integration/framework +++ b/test/integration/framework @@ -383,6 +383,7 @@ buildaptarchivefromfiles() { generatereleasefiles() { msgninfo "\tGenerate Release files… " + local DATE="${1:-now}" if [ -e aptarchive/dists ]; then for dir in $(find ./aptarchive/dists -mindepth 1 -maxdepth 1 -type d); do local CODENAME="$(echo "$dir" | cut -d'/' -f 4)" @@ -395,6 +396,11 @@ NotAutomatic: yes' $dir/Release else aptftparchive -qq release ./aptarchive | sed -e '/0 Release$/ d' > aptarchive/Release # remove the self reference fi + if [ "$DATE" != "now" ]; then + for release in $(find ./aptarchive -name 'Release'); do + touch -d "$1" $release + done + fi msgdone "info" } @@ -455,6 +461,7 @@ signreleasefiles() { done for RELEASE in $(find aptarchive/ -name Release); do gpg --yes --no-default-keyring $SECKEYS $PUBKEYS --default-key "$SIGNER" -abs -o ${RELEASE}.gpg ${RELEASE} + gpg --yes --no-default-keyring $SECKEYS $PUBKEYS --default-key "$SIGNER" --clearsign -o "$(echo "${RELEASE}" | sed 's#/Release$#/InRelease#')" $RELEASE done msgdone "info" } diff --git a/test/integration/marvinparanoid.pub b/test/integration/marvinparanoid.pub new file mode 100644 index 000000000..9a59c2e40 Binary files /dev/null and b/test/integration/marvinparanoid.pub differ diff --git a/test/integration/marvinparanoid.sec b/test/integration/marvinparanoid.sec new file mode 100644 index 000000000..ff54e8680 Binary files /dev/null and b/test/integration/marvinparanoid.sec differ diff --git a/test/integration/test-bug-595691-empty-and-broken-archive-files b/test/integration/test-bug-595691-empty-and-broken-archive-files index 66792899a..c5379dca0 100755 --- a/test/integration/test-bug-595691-empty-and-broken-archive-files +++ b/test/integration/test-bug-595691-empty-and-broken-archive-files @@ -74,28 +74,24 @@ testoverfile() { setupcompressor "$1" createemptyfile 'en' - testaptgetupdate "Get:1 file: Release.gpg [] -Get:2 file: Release [] + testaptgetupdate "Get:1 file: InRelease [] Ign file:$(readlink -f aptarchive)/ Translation-en Reading package lists..." "empty file en.$COMPRESS over file" createemptyarchive 'en' - testaptgetupdate "Get:1 file: Release.gpg [] -Get:2 file: Release [] + testaptgetupdate "Get:1 file: InRelease [] Reading package lists..." "empty archive en.$COMPRESS over file" createemptyarchive 'Packages' # FIXME: Why omits the file transport the Packages Get line? #Get:3 file: Packages [] testaptgetupdate "Ign file:$(readlink -f aptarchive)/ Translation-en -Get:1 file: Release.gpg [] -Get:2 file: Release [] +Get:1 file: InRelease [] Reading package lists..." "empty archive Packages.$COMPRESS over file" createemptyfile 'Packages' testaptgetupdate "Ign file:$(readlink -f aptarchive)/ Translation-en -Get:1 file: Release.gpg [] -Get:2 file: Release [] +Get:1 file: InRelease [] Err file: Packages Undetermined Error W: Failed to fetch file:$(readlink -f aptarchive/Packages.$COMPRESS) Undetermined Error @@ -107,33 +103,29 @@ testoverhttp() { setupcompressor "$1" createemptyfile 'en' - testaptgetupdate "Get:1 http://localhost Release.gpg [] + testaptgetupdate "Get:1 http://localhost InRelease [] Get:2 http://localhost/ Translation-en -Get:3 http://localhost Release [] +Get:3 http://localhost Packages [] Ign http://localhost/ Translation-en -Get:4 http://localhost Packages [] Reading package lists..." "empty file en.$COMPRESS over http" createemptyarchive 'en' - testaptgetupdate "Get:1 http://localhost Release.gpg [] + testaptgetupdate "Get:1 http://localhost InRelease [] Get:2 http://localhost/ Translation-en [] -Get:3 http://localhost Release [] -Get:4 http://localhost Packages [] +Get:3 http://localhost Packages [] Reading package lists..." "empty archive en.$COMPRESS over http" createemptyarchive 'Packages' - testaptgetupdate "Get:1 http://localhost Release.gpg [] + testaptgetupdate "Get:1 http://localhost InRelease [] Ign http://localhost/ Translation-en -Get:2 http://localhost Release [] -Get:3 http://localhost Packages [] +Get:2 http://localhost Packages [] Reading package lists..." "empty archive Packages.$COMPRESS over http" createemptyfile 'Packages' #FIXME: we should response with a good error message instead - testaptgetupdate "Get:1 http://localhost Release.gpg [] + testaptgetupdate "Get:1 http://localhost InRelease [] Ign http://localhost/ Translation-en -Get:2 http://localhost Release [] -Get:3 http://localhost Packages +Get:2 http://localhost Packages Err http://localhost Packages Undetermined Error W: Failed to fetch http://localhost:8080/Packages.$COMPRESS Undetermined Error diff --git a/test/integration/test-releasefile-verification b/test/integration/test-releasefile-verification new file mode 100755 index 000000000..961c49895 --- /dev/null +++ b/test/integration/test-releasefile-verification @@ -0,0 +1,160 @@ +#!/bin/sh +set -e + +TESTDIR=$(readlink -f $(dirname $0)) +. $TESTDIR/framework + +setupenvironment +configarchitecture "i386" + +buildaptarchive +setupflataptarchive +changetowebserver + +prepare() { + local DATE="${2:-now}" + if [ "$DATE" = 'now' -a "$1" = "${PKGFILE}-new" ]; then + DATE='now + 6 days' + fi + for release in $(find rootdir/var/lib/apt/lists 2> /dev/null); do + touch -d 'now - 6 hours' $release + done + rm -rf rootdir/var/cache/apt/archives + rm -f rootdir/var/cache/apt/*.bin + cp $1 aptarchive/Packages + find aptarchive -name 'Release' -delete + cat aptarchive/Packages | gzip > aptarchive/Packages.gz + cat aptarchive/Packages | bzip2 > aptarchive/Packages.bz2 + cat aptarchive/Packages | lzma > aptarchive/Packages.lzma + generatereleasefiles "$DATE" +} + +installaptold() { + testequal 'Reading package lists... +Building dependency tree... +Suggested packages: + aptitude synaptic wajig dpkg-dev apt-doc bzip2 lzma python-apt +The following NEW packages will be installed: + apt +0 upgraded, 1 newly installed, 0 to remove and 0 not upgraded. +After this operation, 5370 kB of additional disk space will be used. +Get:1 http://localhost/ apt 0.7.25.3 +Download complete and in download only mode' aptget install apt -dy +} + +installaptnew() { + testequal 'Reading package lists... +Building dependency tree... +Suggested packages: + aptitude synaptic wajig dpkg-dev apt-doc bzip2 lzma python-apt +The following NEW packages will be installed: + apt +0 upgraded, 1 newly installed, 0 to remove and 0 not upgraded. +After this operation, 5808 kB of additional disk space will be used. +Get:1 http://localhost/ apt 0.8.0~pre1 +Download complete and in download only mode' aptget install apt -dy +} + +failaptold() { + testequal 'Reading package lists... +Building dependency tree... +Suggested packages: + aptitude synaptic wajig dpkg-dev apt-doc bzip2 lzma python-apt +The following NEW packages will be installed: + apt +0 upgraded, 1 newly installed, 0 to remove and 0 not upgraded. +After this operation, 5370 kB of additional disk space will be used. +WARNING: The following packages cannot be authenticated! + apt +E: There are problems and -y was used without --force-yes' aptget install apt -dy +} + +failaptnew() { + testequal 'Reading package lists... +Building dependency tree... +Suggested packages: + aptitude synaptic wajig dpkg-dev apt-doc bzip2 lzma python-apt +The following NEW packages will be installed: + apt +0 upgraded, 1 newly installed, 0 to remove and 0 not upgraded. +After this operation, 5808 kB of additional disk space will be used. +WARNING: The following packages cannot be authenticated! + apt +E: There are problems and -y was used without --force-yes' aptget install apt -dy +} + +# fake our downloadable file +touch aptarchive/apt.deb + +PKGFILE="${TESTDIR}/$(echo "$(basename $0)" | sed 's#^test-#Packages-#')" + +runtest() { + prepare ${PKGFILE} + rm -rf rootdir/var/lib/apt/lists + signreleasefiles 'Joe Sixpack' + find aptarchive/ -name "$DELETEFILE" -delete + msgtest 'Cold archive signed by' 'Joe Sixpack' + aptget update 2>&1 | grep -E '^(W|E): ' > /dev/null && msgfail || msgpass + testequal "$(cat ${PKGFILE}) +" aptcache show apt + installaptold + + prepare ${PKGFILE}-new + signreleasefiles 'Joe Sixpack' + find aptarchive/ -name "$DELETEFILE" -delete + msgtest 'Good warm archive signed by' 'Joe Sixpack' + aptget update 2>&1 | grep -E '^(W|E): ' > /dev/null && msgfail || msgpass + testequal "$(cat ${PKGFILE}-new) +" aptcache show apt + installaptnew + + + prepare ${PKGFILE} + rm -rf rootdir/var/lib/apt/lists + signreleasefiles 'Marvin Paranoid' + find aptarchive/ -name "$DELETEFILE" -delete + msgtest 'Cold archive signed by' 'Marvin Paranoid' + aptget update 2>&1 | grep -E '^(W|E): ' > /dev/null && msgpass || msgfail + testequal "$(cat ${PKGFILE}) +" aptcache show apt + failaptold + + prepare ${PKGFILE}-new + # weborf doesn't support If-Range + for release in $(find rootdir/var/lib/apt/lists/partial/ -name '*Release'); do + rm $release + touch $release + done + signreleasefiles 'Joe Sixpack' + find aptarchive/ -name "$DELETEFILE" -delete + msgtest 'Bad warm archive signed by' 'Joe Sixpack' + aptget update 2>&1 | grep -E '^(W|E): ' > /dev/null && msgfail || msgpass + testequal "$(cat ${PKGFILE}-new) +" aptcache show apt + installaptnew + + + prepare ${PKGFILE} + rm -rf rootdir/var/lib/apt/lists + signreleasefiles 'Joe Sixpack' + find aptarchive/ -name "$DELETEFILE" -delete + msgtest 'Cold archive signed by' 'Joe Sixpack' + aptget update 2>&1 | grep -E '^(W|E): ' > /dev/null && msgfail || msgpass + testequal "$(cat ${PKGFILE}) +" aptcache show apt + installaptold + + prepare ${PKGFILE}-new + signreleasefiles 'Marvin Paranoid' + find aptarchive/ -name "$DELETEFILE" -delete + msgtest 'Good warm archive signed by' 'Marvin Paranoid' + aptget update 2>&1 | grep -E '^(W|E): ' > /dev/null && msgpass || msgfail + testequal "$(cat ${PKGFILE}) +" aptcache show apt + installaptold +} + +DELETEFILE="InRelease" +runtest +DELETEFILE="Release.gpg" +runtest -- cgit v1.2.3 From 3cb3fe76e90283a5b3fe7105e4854d4bac13bfeb Mon Sep 17 00:00:00 2001 From: David Kalnischkies Date: Thu, 20 Jan 2011 16:01:40 +0100 Subject: * ftparchive/writer.cc: - add config option to search for more patterns in release command --- debian/changelog | 4 +++- doc/apt-ftparchive.1.xml | 11 +++++++---- ftparchive/writer.cc | 26 +++++++++++++++----------- ftparchive/writer.h | 2 ++ 4 files changed, 27 insertions(+), 16 deletions(-) diff --git a/debian/changelog b/debian/changelog index 59f516751..ca88901a1 100644 --- a/debian/changelog +++ b/debian/changelog @@ -59,8 +59,10 @@ apt (0.8.11+wheezy) unstable; urgency=low can be used without being root (Closes: #393005, #592107) * apt-pkg/deb/deblistparser.cc: - rewrite LoadReleaseInfo to cope with clearsigned Releasefiles + * ftparchive/writer.cc: + - add config option to search for more patterns in release command - -- David Kalnischkies Thu, 20 Jan 2011 14:52:32 +0100 + -- David Kalnischkies Thu, 20 Jan 2011 16:00:54 +0100 apt (0.8.10) unstable; urgency=low diff --git a/doc/apt-ftparchive.1.xml b/doc/apt-ftparchive.1.xml index 852da8ad1..0090d21d9 100644 --- a/doc/apt-ftparchive.1.xml +++ b/doc/apt-ftparchive.1.xml @@ -113,10 +113,13 @@ release The release command generates a Release file from a - directory tree. It recursively searches the given directory for - Packages, Packages.gz, Packages.bz2, Sources, Sources.gz, - Sources.bz2, Release and md5sum.txt files. It then writes to - stdout a Release file containing an MD5 digest and SHA1 digest + directory tree. It recursively searches the given directory for uncompressed + Packages and Sources files and the ones + compressed with gzip, bzip2 or lzma + as well as Release and md5sum.txt files by default + (APT::FTPArchive::Release::Default-Patterns). Additional filename patterns + can be added by listing them in APT::FTPArchive::Release::Patterns. + It then writes to stdout a Release file containing a MD5, SHA1 and SHA256 digest for each file. Values for the additional metadata fields in the Release file are diff --git a/ftparchive/writer.cc b/ftparchive/writer.cc index d7d699ddc..55fac89bd 100644 --- a/ftparchive/writer.cc +++ b/ftparchive/writer.cc @@ -306,7 +306,7 @@ PackagesWriter::PackagesWriter(string const &DB,string const &Overrides,string c Output = stdout; SetExts(".deb .udeb"); DeLinkLimit = 0; - + // Process the command line options DoMD5 = _config->FindB("APT::FTPArchive::MD5",true); DoSHA1 = _config->FindB("APT::FTPArchive::SHA1",true); @@ -907,16 +907,20 @@ bool ContentsWriter::ReadFromPkgs(string const &PkgFile,string const &PkgCompres /* */ ReleaseWriter::ReleaseWriter(string const &DB) { - AddPattern("Packages"); - AddPattern("Packages.gz"); - AddPattern("Packages.bz2"); - AddPattern("Packages.lzma"); - AddPattern("Sources"); - AddPattern("Sources.gz"); - AddPattern("Sources.bz2"); - AddPattern("Sources.lzma"); - AddPattern("Release"); - AddPattern("md5sum.txt"); + if (_config->FindB("APT::FTPArchive::Release::Default-Patterns", true) == true) + { + AddPattern("Packages"); + AddPattern("Packages.gz"); + AddPattern("Packages.bz2"); + AddPattern("Packages.lzma"); + AddPattern("Sources"); + AddPattern("Sources.gz"); + AddPattern("Sources.bz2"); + AddPattern("Sources.lzma"); + AddPattern("Release"); + AddPattern("md5sum.txt"); + } + AddPatterns(_config->FindVector("APT::FTPArchive::Release::Patterns")); Output = stdout; time_t const now = time(NULL); diff --git a/ftparchive/writer.h b/ftparchive/writer.h index 49d430c47..3796f79f6 100644 --- a/ftparchive/writer.h +++ b/ftparchive/writer.h @@ -69,6 +69,8 @@ class FTWScanner bool LoadFileList(string const &BaseDir,string const &File); void ClearPatterns() { Patterns.clear(); }; void AddPattern(string const &Pattern) { Patterns.push_back(Pattern); }; + void AddPattern(char const *Pattern) { Patterns.push_back(Pattern); }; + void AddPatterns(std::vector const &patterns) { Patterns.insert(Patterns.end(), patterns.begin(), patterns.end()); }; bool SetExts(string const &Vals); FTWScanner(string const &Arch = string()); -- cgit v1.2.3 From b720d0bd5308b65dc08b930005c2d9b6dfc31bb9 Mon Sep 17 00:00:00 2001 From: David Kalnischkies Date: Thu, 20 Jan 2011 16:02:15 +0100 Subject: ensure that tempfiles used for comparision are removed --- test/integration/framework | 17 ++++++++++------- 1 file changed, 10 insertions(+), 7 deletions(-) diff --git a/test/integration/framework b/test/integration/framework index cb3fca35d..f55cfddfa 100644 --- a/test/integration/framework +++ b/test/integration/framework @@ -92,6 +92,11 @@ aptitude() { fi } +addtrap() { + CURRENTTRAP="$CURRENTTRAP $1" + trap "$CURRENTTRAP" 0 HUP INT QUIT ILL ABRT FPE SEGV PIPE TERM +} + setupenvironment() { TMPWORKINGDIRECTORY=$(mktemp -d) local TESTDIR=$(readlink -f $(dirname $0)) @@ -99,8 +104,7 @@ setupenvironment() { BUILDDIRECTORY="${TESTDIR}/../../build/bin" test -x "${BUILDDIRECTORY}/apt-get" || msgdie "You need to build tree first" local OLDWORKINGDIRECTORY=$(pwd) - CURRENTTRAP="cd /; rm -rf $TMPWORKINGDIRECTORY; cd $OLDWORKINGDIRECTORY" - trap "$CURRENTTRAP" 0 HUP INT QUIT ILL ABRT FPE SEGV PIPE TERM + addtrap "cd /; rm -rf $TMPWORKINGDIRECTORY; cd $OLDWORKINGDIRECTORY;" cd $TMPWORKINGDIRECTORY mkdir rootdir aptarchive keys cd rootdir @@ -469,8 +473,7 @@ signreleasefiles() { changetowebserver() { if which weborf > /dev/null; then weborf -xb aptarchive/ 2>&1 > /dev/null & - CURRENTTRAP="kill $!; $CURRENTTRAP" - trap "$CURRENTTRAP" 0 HUP INT QUIT ILL ABRT FPE SEGV PIPE TERM + addtrap "kill $!;" local APTARCHIVE="file://$(readlink -f ./aptarchive)" for LIST in $(find rootdir/etc/apt/sources.list.d/ -name 'apt-test-*.list'); do sed -i $LIST -e "s#$APTARCHIVE#http://localhost:8080/#" @@ -504,17 +507,18 @@ testfileequal() { testequal() { local COMPAREFILE=$(mktemp) + addtrap "rm $COMPAREFILE;" echo "$1" > $COMPAREFILE shift msgtest "Test for equality of" "$*" $* 2>&1 | checkdiff $COMPAREFILE - && msgpass || msgfail - rm $COMPAREFILE } testequalor2() { local COMPAREFILE1=$(mktemp) local COMPAREFILE2=$(mktemp) local COMPAREAGAINST=$(mktemp) + addtrap "rm $COMPAREFILE1 $COMPAREFILE2 $COMPAREAGAINST;" echo "$1" > $COMPAREFILE1 echo "$2" > $COMPAREFILE2 shift 2 @@ -525,7 +529,6 @@ testequalor2() { ( echo "\n${CINFO}Diff against OR 1${CNORMAL}" "$(checkdiff $COMPAREFILE1 $COMPAREAGAINST)" \ "\n${CINFO}Diff against OR 2${CNORMAL}" "$(checkdiff $COMPAREFILE2 $COMPAREAGAINST)" && msgfail ) - rm $COMPAREFILE1 $COMPAREFILE2 $COMPAREAGAINST } testshowvirtual() { @@ -542,11 +545,11 @@ N: Can't select versions from package '$1' as it purely virtual" VIRTUAL="${VIRTUAL} N: No packages found" local COMPAREFILE=$(mktemp) + addtrap "rm $COMPAREFILE;" local ARCH=$(dpkg-architecture -qDEB_HOST_ARCH_CPU) eval `apt-config shell ARCH APT::Architecture` echo "$VIRTUAL" | sed -e "s/:$ARCH//" -e 's/:all//' > $COMPAREFILE aptcache show -q=0 $PACKAGE 2>&1 | checkdiff $COMPAREFILE - && msgpass || msgfail - rm $COMPAREFILE } testnopackage() { -- cgit v1.2.3 From b761356f9a73e34325a0d85427300b58737c4d98 Mon Sep 17 00:00:00 2001 From: David Kalnischkies Date: Fri, 21 Jan 2011 22:03:42 +0100 Subject: avoid building simple packages with debhelper to speed it up a bit --- test/integration/framework | 48 ++++++++++++++++++++++++++++++-- test/integration/test-compressed-indexes | 6 ++-- 2 files changed, 49 insertions(+), 5 deletions(-) diff --git a/test/integration/framework b/test/integration/framework index f55cfddfa..5b83e7519 100644 --- a/test/integration/framework +++ b/test/integration/framework @@ -219,9 +219,53 @@ buildsimplenativepackage() { else DISTSECTION="$(echo "$SECTION" | cut -d'/' -f 1)" fi - setupsimplenativepackage "$NAME" "$ARCH" "$VERSION" "$RELEASE" "$DEPENDENCIES" "$DESCRIPTION" "$SECTION" - buildpackage "incoming/${NAME}-${VERSION}" "$RELEASE" "$DISTSECTION" + local BUILDDIR=incoming/${NAME}-${VERSION} + + msgninfo "Build package ${NAME} in ${VERSIOM} for ${RELEASE} in ${DISTSECTION}… " + mkdir -p $BUILDDIR/debian/source + echo "* most suckless software product ever" > ${BUILDDIR}/FEATURES + echo "#!/bin/sh +echo '$NAME says \"Hello!\"'" > ${BUILDDIR}/${NAME} + + echo "Copyleft by Joe Sixpack $(date +%Y)" > ${BUILDDIR}/debian/copyright + echo "$NAME ($VERSION) $RELEASE; urgency=low + + * Initial release + + -- Joe Sixpack $(date -R)" > ${BUILDDIR}/debian/changelog + echo "Source: $NAME +Section: $SECTION +Priority: optional +Maintainer: Joe Sixpack +Standards-Version: 3.9.1 + +Package: $NAME +Architecture: $ARCH" > ${BUILDDIR}/debian/control + test -z "$DEPENDENCIES" || echo "$DEPENDENCIES" >> ${BUILDDIR}/debian/control + if [ -z "$DESCRIPTION" ]; then + echo "Description: an autogenerated dummy ${NAME}=${VERSION}/${RELEASE} + If you find such a package installed on your system, + YOU did something horribly wrong! They are autogenerated + und used only by testcases for APT and surf no other propose…" >> ${BUILDDIR}/debian/control + else + echo "Description: $DESCRIPTION" >> ${BUILDIR}/debian/control + fi + echo '3.0 (native)' > ${BUILDDIR}/debian/source/format + local SRCS="$( (cd ${BUILDDIR}/..; dpkg-source -b ${NAME}-${VERSION} 2>&1) | grep '^dpkg-source: info: building' | grep -o '[a-z0-9._+~-]*$')" + + 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} + cp ${BUILDDIR}/${NAME} ${BUILDDIR}/debian/tmp/usr/bin + (cd ${BUILDDIR}; dpkg-gencontrol) + (cd ${BUILDDIR}/debian/tmp; md5sum $(find usr/ -type f) > DEBIAN/md5sums) + + dpkg-deb --build ${BUILDDIR}/debian/tmp incoming > /dev/null + echo "pool/${NAME}_${VERSION}_${ARCH}.deb" >> incoming/${RELEASE}.${DISTSECTION}.pkglist + for SRC in $SRCS; do + echo "pool/${SRC}" >> incoming/${RELEASE}.${DISTSECTION}.srclist + done rm -rf "incoming/${NAME}-${VERSION}" + msgdone "info" } buildpackage() { diff --git a/test/integration/test-compressed-indexes b/test/integration/test-compressed-indexes index be33edbb7..99943574e 100755 --- a/test/integration/test-compressed-indexes +++ b/test/integration/test-compressed-indexes @@ -16,11 +16,11 @@ local GOODPOLICY="$(aptcache policy testpkg)" local GOODSHOWSRC="$(aptcache showsrc testpkg) " -test $(echo "$GOODSHOW" | grep -e '^Package: testpkg' -e '^Version: 1.0' -e '^Architecture: i386' | wc -l) -eq 3 +test $(echo "$GOODSHOW" | grep -e '^Package: testpkg' -e '^Version: 1.0' -e '^Architecture: i386' | wc -l) -eq 3 || msgdie 'show is broken' testequal "$GOODSHOW" aptcache show testpkg -test $(echo "$GOODPOLICY" | grep -e '^testpkg:' -e '^ Candidate:' -e '^ Installed: (none)' -e '500 file:/' | wc -l) -eq 4 +test $(echo "$GOODPOLICY" | grep -e '^testpkg:' -e '^ Candidate:' -e '^ Installed: (none)' -e '500 file:/' | wc -l) -eq 4 || msgdie 'policy is broken' testequal "$GOODPOLICY" aptcache policy testpkg -test $(echo "$GOODSHOWSRC" | grep -e '^Package: testpkg' -e '^Format: 3.0 (native)' -e '^Files:' -e '^Checksums-Sha256:' | wc -l) -eq 4 +test $(echo "$GOODSHOWSRC" | grep -e '^Package: testpkg' -e '^Format: 3.0 (native)' -e '^Files:' -e '^Checksums-Sha256:' | wc -l) -eq 4 || msgdie 'showsrc is broken' testequal "$GOODSHOWSRC" aptcache showsrc testpkg -- cgit v1.2.3 From b79eb4f7c93df4a4590d0f9ca2764a7a482bd579 Mon Sep 17 00:00:00 2001 From: David Kalnischkies Date: Sat, 22 Jan 2011 12:08:06 +0100 Subject: Close #184730: [apt-get] requested package abusively listed in "extra packages to be installed" --- debian/changelog | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/debian/changelog b/debian/changelog index ca88901a1..3d5b26e52 100644 --- a/debian/changelog +++ b/debian/changelog @@ -14,7 +14,7 @@ apt (0.8.11+wheezy) unstable; urgency=low - change pkg/release behavior to use the new SetCandidateRelease so installing packages from experimental or backports is easier - really do not show packages in the extra section if they were - requested on the commandline, e.g. with a modifier + requested on the commandline, e.g. with a modifier (Closes: #184730) * debian/control: - add Vcs-Browser now that loggerhead works again (Closes: #511168) - depend on debhelper 7 to raise compat level -- cgit v1.2.3 From 8d16c61781068762a83edb6a75b3343eb6000585 Mon Sep 17 00:00:00 2001 From: David Kalnischkies Date: Mon, 24 Jan 2011 15:37:59 +0100 Subject: include Index files by default in the Release file --- debian/changelog | 3 ++- ftparchive/writer.cc | 1 + 2 files changed, 3 insertions(+), 1 deletion(-) diff --git a/debian/changelog b/debian/changelog index 3d5b26e52..399da2c8d 100644 --- a/debian/changelog +++ b/debian/changelog @@ -61,8 +61,9 @@ apt (0.8.11+wheezy) unstable; urgency=low - rewrite LoadReleaseInfo to cope with clearsigned Releasefiles * ftparchive/writer.cc: - add config option to search for more patterns in release command + - include Index files by default in the Release file - -- David Kalnischkies Thu, 20 Jan 2011 16:00:54 +0100 + -- David Kalnischkies Mon, 24 Jan 2011 15:36:50 +0100 apt (0.8.10) unstable; urgency=low diff --git a/ftparchive/writer.cc b/ftparchive/writer.cc index 55fac89bd..9cdca8d3e 100644 --- a/ftparchive/writer.cc +++ b/ftparchive/writer.cc @@ -918,6 +918,7 @@ ReleaseWriter::ReleaseWriter(string const &DB) AddPattern("Sources.bz2"); AddPattern("Sources.lzma"); AddPattern("Release"); + AddPattern("Index"); AddPattern("md5sum.txt"); } AddPatterns(_config->FindVector("APT::FTPArchive::Release::Patterns")); -- cgit v1.2.3 From 321dfa5e570389c489b0f7f0f34ab983cebe7463 Mon Sep 17 00:00:00 2001 From: David Kalnischkies Date: Mon, 24 Jan 2011 15:41:57 +0100 Subject: do not add Index file by hand now that ftparchive does it by itself --- test/integration/test-pdiff-usage | 11 ++--------- 1 file changed, 2 insertions(+), 9 deletions(-) diff --git a/test/integration/test-pdiff-usage b/test/integration/test-pdiff-usage index eb1818bcd..0a8293018 100755 --- a/test/integration/test-pdiff-usage +++ b/test/integration/test-pdiff-usage @@ -23,7 +23,6 @@ cat aptarchive/Packages | gzip > aptarchive/Packages.gz cat aptarchive/Packages | bzip2 > aptarchive/Packages.bz2 cat aptarchive/Packages | lzma > aptarchive/Packages.lzma rm -rf aptarchive/Packages.diff -aptftparchive release aptarchive/ > aptarchive/Release mkdir -p aptarchive/Packages.diff PATCHFILE="aptarchive/Packages.diff/$(date +%Y-%m-%d-%H%M.%S)" diff -e ${PKGFILE} ${PKGFILE}-new > ${PATCHFILE} || true @@ -36,15 +35,9 @@ SHA1-History: SHA1-Patches: 7651fc0ac57cd83d41c63195a9342e2db5650257 19722 2010-08-18-0814.28 $(sha1sum $PATCHFILE | cut -d' ' -f 1) $(stat -c%s $PATCHFILE) $(basename $PATCHFILE)" > $PATCHINDEX -sed -i aptarchive/Release \ - -e "/^MD5Sum:/ a\ - \ $(md5sum $PATCHINDEX | cut -d' ' -f 1) $(stat -c%s $PATCHINDEX) Packages.diff/Index" \ - -e "/^SHA1:/ a\ - \ $(sha1sum $PATCHINDEX | cut -d' ' -f 1) $(stat -c%s $PATCHINDEX) Packages.diff/Index" \ - -e "/^SHA256:/ a\ - \ $(sha256sum $PATCHINDEX | cut -d' ' -f 1) $(stat -c%s $PATCHINDEX) Packages.diff/Index" +generatereleasefiles signreleasefiles -rm -f aptarchive/Packages aptarchive/Packages.gz aptarchive/Packages.bz2 aptarchive/Packages.lzma +find aptarchive -name 'Packages*' -type f -delete aptget update -qq testnopackage oldstuff -- cgit v1.2.3 From 18331adf730dca4a587f99605edff71436379ea6 Mon Sep 17 00:00:00 2001 From: David Kalnischkies Date: Tue, 25 Jan 2011 12:39:42 +0100 Subject: enable the split out of LongDescriptions per default in the testcases --- test/integration/framework | 7 ++++++- test/integration/run-tests | 2 +- 2 files changed, 7 insertions(+), 2 deletions(-) diff --git a/test/integration/framework b/test/integration/framework index 5b83e7519..b95667670 100644 --- a/test/integration/framework +++ b/test/integration/framework @@ -221,7 +221,7 @@ buildsimplenativepackage() { fi local BUILDDIR=incoming/${NAME}-${VERSION} - msgninfo "Build package ${NAME} in ${VERSIOM} for ${RELEASE} in ${DISTSECTION}… " + msgninfo "Build package ${NAME} in ${VERSION} for ${RELEASE} in ${DISTSECTION}… " mkdir -p $BUILDDIR/debian/source echo "* most suckless software product ever" > ${BUILDDIR}/FEATURES echo "#!/bin/sh @@ -319,6 +319,8 @@ Default { Packages::Compress ". gzip bzip2 lzma"; Sources::Compress ". gzip bzip2 lzma"; Contents::Compress ". gzip bzip2 lzma"; + Translation::Compress ". gzip bzip2 lzma"; + LongDescription "false"; }; TreeDefault { Directory "pool/"; @@ -433,6 +435,9 @@ generatereleasefiles() { msgninfo "\tGenerate Release files… " local DATE="${1:-now}" if [ -e aptarchive/dists ]; then + for dir in $(find ./aptarchive/dists -mindepth 3 -maxdepth 3 -type d -name 'i18n'); do + aptftparchive -qq release $dir -o APT::FTPArchive::Release::Patterns::='Translation-*' > $dir/Index + done for dir in $(find ./aptarchive/dists -mindepth 1 -maxdepth 1 -type d); do local CODENAME="$(echo "$dir" | cut -d'/' -f 4)" aptftparchive -qq release $dir -o APT::FTPArchive::Release::Suite="${CODENAME}" -o APT::FTPArchive::Release::Codename="${CODENAME}" | sed -e '/0 Release$/ d' > $dir/Release # remove the self reference diff --git a/test/integration/run-tests b/test/integration/run-tests index 5644f0a05..7314e6b61 100755 --- a/test/integration/run-tests +++ b/test/integration/run-tests @@ -5,7 +5,7 @@ DIR=$(readlink -f $(dirname $0)) if [ "$1" = "-q" ]; then export MSGLEVEL=2 elif [ "$1" = "-v" ]; then - export MSGLEVEL=5 + export MSGLEVEL=4 fi for testcase in $(run-parts --list $DIR | grep '/test-'); do if [ "$1" = "-q" ]; then -- cgit v1.2.3 From 5d88572318ed7e271101b1ae8f2cc139a1a3f705 Mon Sep 17 00:00:00 2001 From: David Kalnischkies Date: Wed, 26 Jan 2011 16:19:30 +0100 Subject: - change the internal handling of Extensions in pkgAcqIndex - add a special uncompressed compression type to prefer those files * methods/{gzip,bzip}.cc: - print a good error message if FileSize() is zero --- apt-pkg/acquire-item.cc | 114 ++++++++++++--------- apt-pkg/acquire-item.h | 9 +- apt-pkg/aptconfiguration.cc | 8 ++ debian/changelog | 6 +- doc/apt.conf.5.xml | 9 +- doc/examples/configure-index | 2 +- methods/bzip2.cc | 3 +- methods/gzip.cc | 3 +- .../test-bug-595691-empty-and-broken-archive-files | 9 +- 9 files changed, 96 insertions(+), 67 deletions(-) diff --git a/apt-pkg/acquire-item.cc b/apt-pkg/acquire-item.cc index 2cd6ab359..a603a3d70 100644 --- a/apt-pkg/acquire-item.cc +++ b/apt-pkg/acquire-item.cc @@ -622,29 +622,61 @@ pkgAcqIndex::pkgAcqIndex(pkgAcquire *Owner, HashString ExpectedHash, string comprExt) : Item(Owner), RealURI(URI), ExpectedHash(ExpectedHash) { + if(comprExt.empty() == true) + { + // autoselect the compression method + std::vector types = APT::Configuration::getCompressionTypes(); + for (std::vector::const_iterator t = types.begin(); t != types.end(); ++t) + comprExt.append(*t).append(" "); + if (comprExt.empty() == false) + comprExt.erase(comprExt.end()-1); + } + CompressionExtension = comprExt; + + Init(URI, URIDesc, ShortDesc); +} +pkgAcqIndex::pkgAcqIndex(pkgAcquire *Owner, IndexTarget const *Target, + HashString const &ExpectedHash, indexRecords const *MetaIndexParser) + : Item(Owner), RealURI(Target->URI), ExpectedHash(ExpectedHash) +{ + // autoselect the compression method + std::vector types = APT::Configuration::getCompressionTypes(); + CompressionExtension = ""; + if (ExpectedHash.empty() == false) + { + for (std::vector::const_iterator t = types.begin(); t != types.end(); ++t) + if (*t == "uncompressed" || MetaIndexParser->Exists(string(Target->MetaKey).append(".").append(*t)) == true) + CompressionExtension.append(*t).append(" "); + } + else + { + for (std::vector::const_iterator t = types.begin(); t != types.end(); ++t) + CompressionExtension.append(*t).append(" "); + } + if (CompressionExtension.empty() == false) + CompressionExtension.erase(CompressionExtension.end()-1); + + Init(Target->URI, Target->Description, Target->ShortDesc); +} + /*}}}*/ +// AcqIndex::Init - defered Constructor /*{{{*/ +void pkgAcqIndex::Init(string const &URI, string const &URIDesc, string const &ShortDesc) { Decompression = false; Erase = false; DestFile = _config->FindDir("Dir::State::lists") + "partial/"; DestFile += URItoFileName(URI); - if(comprExt.empty()) - { - // autoselect the compression method - std::vector types = APT::Configuration::getCompressionTypes(); - if (types.empty() == true) - comprExt = "plain"; - else - comprExt = "." + types[0]; - } - CompressionExtension = ((comprExt == "plain" || comprExt == ".") ? "" : comprExt); - - Desc.URI = URI + CompressionExtension; + std::string const comprExt = CompressionExtension.substr(0, CompressionExtension.find(' ')); + if (comprExt == "uncompressed") + Desc.URI = URI; + else + Desc.URI = URI + '.' + comprExt; Desc.Description = URIDesc; Desc.Owner = this; Desc.ShortDesc = ShortDesc; - + QueueURI(Desc); } /*}}}*/ @@ -666,37 +698,18 @@ string pkgAcqIndex::Custom600Headers() /*}}}*/ void pkgAcqIndex::Failed(string Message,pkgAcquire::MethodConfig *Cnf) /*{{{*/ { - std::vector types = APT::Configuration::getCompressionTypes(); - - for (std::vector::const_iterator t = types.begin(); - t != types.end(); t++) + size_t const nextExt = CompressionExtension.find(' '); + if (nextExt != std::string::npos) { - // jump over all already tried compression types - const unsigned int nameLen = Desc.URI.size() - (*t).size(); - if(Desc.URI.substr(nameLen) != *t) - continue; - - // we want to try it with the next extension (and make sure to - // not skip over the end) - t++; - if (t == types.end()) - break; - - // queue new download - Desc.URI = Desc.URI.substr(0, nameLen) + *t; - new pkgAcqIndex(Owner, RealURI, Desc.Description, Desc.ShortDesc, - ExpectedHash, string(".").append(*t)); - - Status = StatDone; - Complete = false; - Dequeue(); + CompressionExtension = CompressionExtension.substr(nextExt+1); + Init(RealURI, Desc.Description, Desc.ShortDesc); return; } // on decompression failure, remove bad versions in partial/ - if(Decompression && Erase) { + if (Decompression && Erase) { string s = _config->FindDir("Dir::State::lists") + "partial/"; - s += URItoFileName(RealURI); + s.append(URItoFileName(RealURI)); unlink(s.c_str()); } @@ -773,8 +786,8 @@ void pkgAcqIndex::Done(string Message,unsigned long Size,string Hash, Status = StatError; ErrorText = "Method gave a blank filename"; } - - string compExt = flExtension(flNotDir(URI(Desc.URI).Path)); + + std::string const compExt = CompressionExtension.substr(0, CompressionExtension.find(' ')); // The files timestamp matches if (StringToBool(LookupTag(Message,"IMS-Hit"),false) == true) { @@ -807,12 +820,7 @@ void pkgAcqIndex::Done(string Message,unsigned long Size,string Hash, // get the binary name for your used compression type decompProg = _config->Find(string("Acquire::CompressionTypes::").append(compExt),""); if(decompProg.empty() == false); - // flExtensions returns the full name if no extension is found - // this is why we have this complicated compare operation here - // FIMXE: add a new flJustExtension() that return "" if no - // extension is found and use that above so that it can - // be tested against "" - else if(compExt == flNotDir(URI(Desc.URI).Path)) + else if(compExt == "uncompressed") decompProg = "copy"; else { _error->Error("Unsupported extension: %s", compExt.c_str()); @@ -853,6 +861,15 @@ string pkgAcqIndexTrans::Custom600Headers() /* */ void pkgAcqIndexTrans::Failed(string Message,pkgAcquire::MethodConfig *Cnf) { + size_t const nextExt = CompressionExtension.find(' '); + if (nextExt != std::string::npos) + { + CompressionExtension = CompressionExtension.substr(nextExt+1); + Init(RealURI, Desc.Description, Desc.ShortDesc); + Status = StatIdle; + return; + } + if (Cnf->LocalOnly == true || StringToBool(LookupTag(Message,"Transient-Failure"),false) == false) { @@ -862,7 +879,7 @@ void pkgAcqIndexTrans::Failed(string Message,pkgAcquire::MethodConfig *Cnf) Dequeue(); return; } - + Item::Failed(Message,Cnf); } /*}}}*/ @@ -1197,8 +1214,7 @@ void pkgAcqMetaIndex::QueueIndexes(bool verify) /*{{{*/ new pkgAcqDiffIndex(Owner, (*Target)->URI, (*Target)->Description, (*Target)->ShortDesc, ExpectedIndexHash); else - new pkgAcqIndex(Owner, (*Target)->URI, (*Target)->Description, - (*Target)->ShortDesc, ExpectedIndexHash); + new pkgAcqIndex(Owner, *Target, ExpectedIndexHash, MetaIndexParser); } } /*}}}*/ diff --git a/apt-pkg/acquire-item.h b/apt-pkg/acquire-item.h index 581761e32..92098e3d4 100644 --- a/apt-pkg/acquire-item.h +++ b/apt-pkg/acquire-item.h @@ -528,8 +528,8 @@ class pkgAcqIndex : public pkgAcquire::Item /** \brief The expected hashsum of the decompressed index file. */ HashString ExpectedHash; - /** \brief The compression-related file extension that is being - * added to the downloaded file (e.g., ".gz" or ".bz2"). + /** \brief The compression-related file extensions that are being + * added to the downloaded file one by one if first fails (e.g., "gz bz2"). */ string CompressionExtension; @@ -540,7 +540,7 @@ class pkgAcqIndex : public pkgAcquire::Item virtual void Done(string Message,unsigned long Size,string Md5Hash, pkgAcquire::MethodConfig *Cnf); virtual string Custom600Headers(); - virtual string DescURI() {return RealURI + CompressionExtension;}; + virtual string DescURI() {return Desc.URI;}; virtual string HashSum() {return ExpectedHash.toStr(); }; /** \brief Create a pkgAcqIndex. @@ -565,6 +565,9 @@ class pkgAcqIndex : public pkgAcquire::Item pkgAcqIndex(pkgAcquire *Owner,string URI,string URIDesc, string ShortDesc, HashString ExpectedHash, string compressExt=""); + pkgAcqIndex(pkgAcquire *Owner, struct IndexTarget const * const Target, + HashString const &ExpectedHash, indexRecords const *MetaIndexParser); + void Init(string const &URI, string const &URIDesc, string const &ShortDesc); }; /*}}}*/ /** \brief An acquire item that is responsible for fetching a {{{ diff --git a/apt-pkg/aptconfiguration.cc b/apt-pkg/aptconfiguration.cc index 52f54073c..e97ebfed7 100644 --- a/apt-pkg/aptconfiguration.cc +++ b/apt-pkg/aptconfiguration.cc @@ -90,6 +90,14 @@ const Configuration::getCompressionTypes(bool const &Cached) { types.push_back(Types->Tag); } + // add the special "uncompressed" type + if (std::find(types.begin(), types.end(), "uncompressed") == types.end()) + { + string const uncompr = _config->FindFile("Dir::Bin::uncompressed", ""); + if (uncompr.empty() == true || FileExists(uncompr) == true) + types.push_back("uncompressed"); + } + return types; } /*}}}*/ diff --git a/debian/changelog b/debian/changelog index 2413b9c5b..7b125fc43 100644 --- a/debian/changelog +++ b/debian/changelog @@ -54,6 +54,8 @@ apt (0.8.11+wheezy) unstable; urgency=low * apt-pkg/acquire-item.cc: - don't uncompress downloaded pdiff files before feeding it to rred - try downloading clearsigned InRelease before trying Release.gpg + - change the internal handling of Extensions in pkgAcqIndex + - add a special uncompressed compression type to prefer those files * cmdline/apt-key: - don't set trustdb-name as non-root so 'list' and 'finger' can be used without being root (Closes: #393005, #592107) @@ -62,8 +64,10 @@ apt (0.8.11+wheezy) unstable; urgency=low * ftparchive/writer.cc: - add config option to search for more patterns in release command - include Index files by default in the Release file + * methods/{gzip,bzip}.cc: + - print a good error message if FileSize() is zero - -- David Kalnischkies Mon, 24 Jan 2011 15:36:50 +0100 + -- David Kalnischkies Wed, 26 Jan 2011 16:06:10 +0100 apt (0.8.10.3) unstable; urgency=low diff --git a/doc/apt.conf.5.xml b/doc/apt.conf.5.xml index a19d85dbc..a423dac24 100644 --- a/doc/apt.conf.5.xml +++ b/doc/apt.conf.5.xml @@ -442,12 +442,11 @@ DPkg::Pre-Install-Pkgs {"/usr/sbin/dpkg-preconfigure --apt";}; the bzip2 method (the inbuilt) setting is Dir::Bin::bzip2 "/bin/bzip2"; Note also that list entries specified on the command line will be added at the end of the list specified in the configuration files, but before the default entries. To prefer a type in this case - over the ones specified in in the configuration files you can set the option direct - not in list style. + over the ones specified in the configuration files you can set the option direct - not in list style. This will not override the defined list, it will only prefix the list with this type. - While it is possible to add an empty compression type to the order list, but APT in its current - version doesn't understand it correctly and will display many warnings about not downloaded files - - these warnings are most of the time false negatives. Future versions will maybe include a way to - really prefer uncompressed files to support the usage of local mirrors. + The special type uncompressed can be used to give uncompressed files a + preference, but note that most archives doesn't provide uncompressed files so this is mostly only + useable for local mirrors. GzipIndexes diff --git a/doc/examples/configure-index b/doc/examples/configure-index index 6c078d75f..fd14d4dd7 100644 --- a/doc/examples/configure-index +++ b/doc/examples/configure-index @@ -281,7 +281,7 @@ Acquire lzma "lzma"; gz "gzip"; - Order { "gz"; "lzma"; "bz2"; }; + Order { "uncompressed"; "gz"; "lzma"; "bz2"; }; }; Languages diff --git a/methods/bzip2.cc b/methods/bzip2.cc index ccc3669a2..42932dded 100644 --- a/methods/bzip2.cc +++ b/methods/bzip2.cc @@ -56,9 +56,8 @@ bool Bzip2Method::Fetch(FetchItem *Itm) // Open the source and destination files FileFd From(Path,FileFd::ReadOnly); - // FIXME add an error message saying that empty files can't be valid archives if(From.FileSize() == 0) - return false; + return _error->Error(_("Empty files can't be valid archives")); int GzOut[2]; if (pipe(GzOut) < 0) diff --git a/methods/gzip.cc b/methods/gzip.cc index f1c76066e..fc4e1ecfd 100644 --- a/methods/gzip.cc +++ b/methods/gzip.cc @@ -48,9 +48,8 @@ bool GzipMethod::Fetch(FetchItem *Itm) // Open the source and destination files FileFd From(Path,FileFd::ReadOnlyGzip); - // FIXME add an error message saying that empty files can't be valid archives if(From.FileSize() == 0) - return false; + return _error->Error(_("Empty files can't be valid archives")); FileFd To(Itm->DestFile,FileFd::WriteAtomic); To.EraseOnFailure(); diff --git a/test/integration/test-bug-595691-empty-and-broken-archive-files b/test/integration/test-bug-595691-empty-and-broken-archive-files index c5379dca0..398d0cd1b 100755 --- a/test/integration/test-bug-595691-empty-and-broken-archive-files +++ b/test/integration/test-bug-595691-empty-and-broken-archive-files @@ -56,6 +56,7 @@ setupcompressor() { lzma) COMPRESS="lzma";; esac echo "Acquire::CompressionTypes::Order { \"${COMPRESS}\"; }; +Dir::Bin::uncompressed \"/does/not/exist\"; Dir::Bin::gzip \"/does/not/exist\"; Dir::Bin::bzip2 \"/does/not/exist\"; Dir::Bin::lzma \"/does/not/exist\";" > rootdir/etc/apt/apt.conf.d/00compressor @@ -93,8 +94,8 @@ Reading package lists..." "empty archive Packages.$COMPRESS over file" testaptgetupdate "Ign file:$(readlink -f aptarchive)/ Translation-en Get:1 file: InRelease [] Err file: Packages - Undetermined Error -W: Failed to fetch file:$(readlink -f aptarchive/Packages.$COMPRESS) Undetermined Error + Empty files can't be valid archives +W: Failed to fetch ${COMPRESSOR}:$(readlink -f aptarchive/Packages.$COMPRESS) Empty files can't be valid archives E: Some index files failed to download, they have been ignored, or old ones used instead." "empty file Packages.$COMPRESS over file" } @@ -127,8 +128,8 @@ Reading package lists..." "empty archive Packages.$COMPRESS over http" Ign http://localhost/ Translation-en Get:2 http://localhost Packages Err http://localhost Packages - Undetermined Error -W: Failed to fetch http://localhost:8080/Packages.$COMPRESS Undetermined Error + Empty files can't be valid archives +W: Failed to fetch ${COMPRESSOR}:$(readlink -f rootdir/var/lib/apt/lists/partial/localhost:8080_Packages) Empty files can't be valid archives E: Some index files failed to download, they have been ignored, or old ones used instead." "empty file Packages.$COMPRESS over http" } -- cgit v1.2.3 From ab53c018fbc7aa01c0d89586c0aa98bc944dd9e4 Mon Sep 17 00:00:00 2001 From: David Kalnischkies Date: Fri, 28 Jan 2011 12:22:37 +0100 Subject: - download and use i18n/Index to choose which Translations to download * apt-pkg/aptconfiguration.cc: - remove the inbuilt Translation files whitelist --- apt-pkg/acquire-item.cc | 218 +++++++++++++++++++-- apt-pkg/acquire-item.h | 56 ++++++ apt-pkg/aptconfiguration.cc | 51 ++--- apt-pkg/deb/debmetaindex.cc | 77 +++++--- apt-pkg/deb/debmetaindex.h | 2 + debian/changelog | 5 +- .../test-bug-595691-empty-and-broken-archive-files | 28 +-- .../test-bug-601016-description-translation | 1 + test/libapt/getlanguages_test.cc | 71 ++++--- 9 files changed, 381 insertions(+), 128 deletions(-) diff --git a/apt-pkg/acquire-item.cc b/apt-pkg/acquire-item.cc index a603a3d70..776009493 100644 --- a/apt-pkg/acquire-item.cc +++ b/apt-pkg/acquire-item.cc @@ -184,6 +184,153 @@ void pkgAcquire::Item::ReportMirrorFailure(string FailCode) } } /*}}}*/ +// AcqSubIndex::AcqSubIndex - Constructor /*{{{*/ +// --------------------------------------------------------------------- +/* Get the DiffIndex file first and see if there are patches availabe + * If so, create a pkgAcqIndexDiffs fetcher that will get and apply the + * patches. If anything goes wrong in that process, it will fall back to + * the original packages file + */ +pkgAcqSubIndex::pkgAcqSubIndex(pkgAcquire *Owner, string const &URI, + string const &URIDesc, string const &ShortDesc, + HashString const &ExpectedHash) + : Item(Owner), ExpectedHash(ExpectedHash) +{ + Debug = _config->FindB("Debug::pkgAcquire::SubIndex",false); + + DestFile = _config->FindDir("Dir::State::lists") + "partial/"; + DestFile += URItoFileName(URI); + + Desc.URI = URI; + Desc.Description = URIDesc; + Desc.Owner = this; + Desc.ShortDesc = ShortDesc; + + QueueURI(Desc); + + if(Debug) + std::clog << "pkgAcqSubIndex: " << Desc.URI << std::endl; +} + /*}}}*/ +// AcqSubIndex::Custom600Headers - Insert custom request headers /*{{{*/ +// --------------------------------------------------------------------- +/* The only header we use is the last-modified header. */ +string pkgAcqSubIndex::Custom600Headers() +{ + string Final = _config->FindDir("Dir::State::lists"); + Final += URItoFileName(Desc.URI); + + struct stat Buf; + if (stat(Final.c_str(),&Buf) != 0) + return "\nIndex-File: true"; + return "\nIndex-File: true\nLast-Modified: " + TimeRFC1123(Buf.st_mtime); +} + /*}}}*/ +void pkgAcqSubIndex::Failed(string Message,pkgAcquire::MethodConfig *Cnf) /*{{{*/ +{ + if(Debug) + std::clog << "pkgAcqSubIndex failed: " << Desc.URI << std::endl; + + Complete = false; + Status = StatDone; + Dequeue(); + + // No good Index is provided, so try guessing + std::vector langs = APT::Configuration::getLanguages(true); + for (std::vector::const_iterator l = langs.begin(); + l != langs.end(); ++l) + { + if (*l == "none") continue; + string const file = "Translation-" + *l; + new pkgAcqIndexTrans(Owner, Desc.URI.substr(0, Desc.URI.rfind('/')+1).append(file), + Desc.Description.erase(Desc.Description.rfind(' ')+1).append(file), + file); + } +} + /*}}}*/ +void pkgAcqSubIndex::Done(string Message,unsigned long Size,string Md5Hash, /*{{{*/ + pkgAcquire::MethodConfig *Cnf) +{ + if(Debug) + std::clog << "pkgAcqSubIndex::Done(): " << Desc.URI << std::endl; + + string FileName = LookupTag(Message,"Filename"); + if (FileName.empty() == true) + { + Status = StatError; + ErrorText = "Method gave a blank filename"; + return; + } + + if (FileName != DestFile) + { + Local = true; + Desc.URI = "copy:" + FileName; + QueueURI(Desc); + return; + } + + Item::Done(Message,Size,Md5Hash,Cnf); + + string FinalFile = _config->FindDir("Dir::State::lists")+URItoFileName(Desc.URI); + + // sucess in downloading the index + // rename the index + if(Debug) + std::clog << "Renaming: " << DestFile << " -> " << FinalFile << std::endl; + Rename(DestFile,FinalFile); + chmod(FinalFile.c_str(),0644); + DestFile = FinalFile; + + if(ParseIndex(DestFile) == false) + return Failed("", NULL); + + Complete = true; + Status = StatDone; + Dequeue(); + return; +} + /*}}}*/ +bool pkgAcqSubIndex::ParseIndex(string const &IndexFile) /*{{{*/ +{ + indexRecords SubIndexParser; + if (FileExists(IndexFile) == false || SubIndexParser.Load(IndexFile) == false) + return false; + + std::vector lang = APT::Configuration::getLanguages(true); + for (std::vector::const_iterator l = lang.begin(); + l != lang.end(); ++l) + { + if (*l == "none") + continue; + + string file = "Translation-" + *l; + indexRecords::checkSum const *Record = SubIndexParser.Lookup(file); + HashString expected; + if (Record == NULL) + { + // FIXME: the Index file provided by debian currently only includes bz2 records + Record = SubIndexParser.Lookup(file + ".bz2"); + if (Record == NULL) + continue; + } + else + { + expected = Record->Hash; + if (expected.empty() == true) + continue; + } + + IndexTarget target; + target.Description = Desc.Description.erase(Desc.Description.rfind(' ')+1).append(file); + target.MetaKey = file; + target.ShortDesc = file; + target.URI = Desc.URI.substr(0, Desc.URI.rfind('/')+1).append(file); + new pkgAcqIndexTrans(Owner, &target, expected, &SubIndexParser); + } + return true; +} + /*}}}*/ // AcqDiffIndex::AcqDiffIndex - Constructor /*{{{*/ // --------------------------------------------------------------------- /* Get the DiffIndex file first and see if there are patches availabe @@ -841,6 +988,11 @@ pkgAcqIndexTrans::pkgAcqIndexTrans(pkgAcquire *Owner, string URI,string URIDesc,string ShortDesc) : pkgAcqIndex(Owner, URI, URIDesc, ShortDesc, HashString(), "") { +} +pkgAcqIndexTrans::pkgAcqIndexTrans(pkgAcquire *Owner, IndexTarget const *Target, + HashString const &ExpectedHash, indexRecords const *MetaIndexParser) + : pkgAcqIndex(Owner, Target, ExpectedHash, MetaIndexParser) +{ } /*}}}*/ // AcqIndexTrans::Custom600Headers - Insert custom request headers /*{{{*/ @@ -1182,27 +1334,41 @@ void pkgAcqMetaIndex::QueueIndexes(bool verify) /*{{{*/ HashString ExpectedIndexHash; if (verify) { - const indexRecords::checkSum *Record = MetaIndexParser->Lookup((*Target)->MetaKey); - if (!Record) - { - Status = StatAuthError; - ErrorText = "Unable to find expected entry " - + (*Target)->MetaKey + " in Meta-index file (malformed Release file?)"; - return; - } - ExpectedIndexHash = Record->Hash; - if (_config->FindB("Debug::pkgAcquire::Auth", false)) - { - std::cerr << "Queueing: " << (*Target)->URI << std::endl; - std::cerr << "Expected Hash: " << ExpectedIndexHash.toStr() << std::endl; - } - if (ExpectedIndexHash.empty()) - { - Status = StatAuthError; - ErrorText = "Unable to find hash sum for " - + (*Target)->MetaKey + " in Meta-index file"; - return; - } + const indexRecords::checkSum *Record = MetaIndexParser->Lookup((*Target)->MetaKey); + if (Record == NULL) + { + if ((*Target)->IsOptional() == false) + { + Status = StatAuthError; + strprintf(ErrorText, _("Unable to find expected entry '%s' in Release file (Wrong sources.list entry or malformed file)"), (*Target)->MetaKey.c_str()); + return; + } + } + else + { + ExpectedIndexHash = Record->Hash; + if (_config->FindB("Debug::pkgAcquire::Auth", false)) + { + std::cerr << "Queueing: " << (*Target)->URI << std::endl; + std::cerr << "Expected Hash: " << ExpectedIndexHash.toStr() << std::endl; + } + if (ExpectedIndexHash.empty() == true && (*Target)->IsOptional() == false) + { + Status = StatAuthError; + strprintf(ErrorText, _("Unable to find hash sum for '%s' in Release file"), (*Target)->MetaKey.c_str()); + return; + } + } + } + + if ((*Target)->IsOptional() == true) + { + if ((*Target)->IsSubIndex() == true) + new pkgAcqSubIndex(Owner, (*Target)->URI, (*Target)->Description, + (*Target)->ShortDesc, ExpectedIndexHash); + else + new pkgAcqIndexTrans(Owner, *Target, ExpectedIndexHash, MetaIndexParser); + continue; } /* Queue Packages file (either diff or full packages files, depending @@ -1836,3 +2002,13 @@ string pkgAcqFile::Custom600Headers() return ""; } /*}}}*/ +bool IndexTarget::IsOptional() const { + if (strncmp(ShortDesc.c_str(), "Translation", 11) != 0) + return false; + return true; +} +bool IndexTarget::IsSubIndex() const { + if (ShortDesc != "TranslationIndex") + return false; + return true; +} diff --git a/apt-pkg/acquire-item.h b/apt-pkg/acquire-item.h index 92098e3d4..9bcc32f21 100644 --- a/apt-pkg/acquire-item.h +++ b/apt-pkg/acquire-item.h @@ -287,6 +287,50 @@ struct DiffInfo { unsigned long size; }; /*}}}*/ +/** \brief An item that is responsible for fetching a SubIndex {{{ + * + * The MetaIndex file includes only records for important indexes + * and records for these SubIndex files so these can carry records + * for addition files like PDiffs and Translations + */ +class pkgAcqSubIndex : public pkgAcquire::Item +{ + protected: + /** \brief If \b true, debugging information will be written to std::clog. */ + bool Debug; + + /** \brief The item that is currently being downloaded. */ + pkgAcquire::ItemDesc Desc; + + /** \brief The Hash that this file should have after download + */ + HashString ExpectedHash; + + public: + // Specialized action members + virtual void Failed(string Message,pkgAcquire::MethodConfig *Cnf); + virtual void Done(string Message,unsigned long Size,string Md5Hash, + pkgAcquire::MethodConfig *Cnf); + virtual string DescURI() {return Desc.URI;}; + virtual string Custom600Headers(); + virtual bool ParseIndex(string const &IndexFile); + + /** \brief Create a new pkgAcqDiffIndex. + * + * \param Owner The Acquire object that owns this item. + * + * \param URI The URI of the list file to download. + * + * \param URIDesc A long description of the list file to download. + * + * \param ShortDesc A short description of the list file to download. + * + * \param ExpectedHash The list file's MD5 signature. + */ + pkgAcqSubIndex(pkgAcquire *Owner, string const &URI,string const &URIDesc, + string const &ShortDesc, HashString const &ExpectedHash); +}; + /*}}}*/ /** \brief An item that is responsible for fetching an index file of {{{ * package list diffs and starting the package list's download. * @@ -597,6 +641,8 @@ class pkgAcqIndexTrans : public pkgAcqIndex */ pkgAcqIndexTrans(pkgAcquire *Owner,string URI,string URIDesc, string ShortDesc); + pkgAcqIndexTrans(pkgAcquire *Owner, struct IndexTarget const * const Target, + HashString const &ExpectedHash, indexRecords const *MetaIndexParser); }; /*}}}*/ /** \brief Information about an index file. */ /*{{{*/ @@ -615,8 +661,18 @@ struct IndexTarget * looked up within the meta signature file. */ string MetaKey; + + //FIXME: We should use virtual methods here instead… + bool IsOptional() const; + bool IsSubIndex() const; }; /*}}}*/ +/** \brief Information about an optional index file. */ /*{{{*/ +struct OptionalIndexTarget : public IndexTarget +{ +}; + /*}}}*/ + /** \brief An acquire item that downloads the detached signature {{{ * of a meta-index (Release) file, then queues up the release * file itself. diff --git a/apt-pkg/aptconfiguration.cc b/apt-pkg/aptconfiguration.cc index e97ebfed7..3cf4d2429 100644 --- a/apt-pkg/aptconfiguration.cc +++ b/apt-pkg/aptconfiguration.cc @@ -163,33 +163,6 @@ std::vector const Configuration::getLanguages(bool const &All, } closedir(D); - // get the environment language codes: LC_MESSAGES (and later LANGUAGE) - // we extract both, a long and a short code and then we will - // check if we actually need both (rare) or if the short is enough - string const envMsg = string(Locale == 0 ? std::setlocale(LC_MESSAGES, NULL) : *Locale); - size_t const lenShort = (envMsg.find('_') != string::npos) ? envMsg.find('_') : 2; - size_t const lenLong = (envMsg.find_first_of(".@") != string::npos) ? envMsg.find_first_of(".@") : (lenShort + 3); - - string envLong = envMsg.substr(0,lenLong); - string const envShort = envLong.substr(0,lenShort); - bool envLongIncluded = true; - - // to save the servers from unneeded queries, we only try also long codes - // for languages it is realistic to have a long code translation file… - // TODO: Improve translation acquire system to drop them dynamic - char const *needLong[] = { "cs", "en", "pt", "sv", "zh", NULL }; - if (envLong != envShort) { - for (char const **l = needLong; *l != NULL; l++) - if (envShort.compare(*l) == 0) { - envLongIncluded = false; - break; - } - } - - // we don't add the long code, but we allow the user to do so - if (envLongIncluded == true) - envLong.clear(); - // FIXME: Remove support for the old APT::Acquire::Translation // it was undocumented and so it should be not very widthly used string const oldAcquire = _config->Find("APT::Acquire::Translation",""); @@ -211,12 +184,22 @@ std::vector const Configuration::getLanguages(bool const &All, return codes; } - // It is very likely we will need to environment codes later, + // get the environment language codes: LC_MESSAGES (and later LANGUAGE) + // we extract both, a long and a short code and then we will + // check if we actually need both (rare) or if the short is enough + string const envMsg = string(Locale == 0 ? std::setlocale(LC_MESSAGES, NULL) : *Locale); + size_t const lenShort = (envMsg.find('_') != string::npos) ? envMsg.find('_') : 2; + size_t const lenLong = (envMsg.find_first_of(".@") != string::npos) ? envMsg.find_first_of(".@") : (lenShort + 3); + + string const envLong = envMsg.substr(0,lenLong); + string const envShort = envLong.substr(0,lenShort); + + // It is very likely we will need the environment codes later, // so let us generate them now from LC_MESSAGES and LANGUAGE std::vector environment; if (envShort != "C") { // take care of LC_MESSAGES - if (envLongIncluded == false) + if (envLong != envShort) environment.push_back(envLong); environment.push_back(envShort); // take care of LANGUAGE @@ -233,16 +216,6 @@ std::vector const Configuration::getLanguages(bool const &All, continue; if (std::find(environment.begin(), environment.end(), *e) != environment.end()) continue; - if (e->find('_') != string::npos) { - // Drop LongCodes here - ShortCodes are also included - string const shorty = e->substr(0, e->find('_')); - char const **n = needLong; - for (; *n != NULL; ++n) - if (shorty == *n) - break; - if (*n == NULL) - continue; - } ++addedLangs; environment.push_back(*e); } diff --git a/apt-pkg/deb/debmetaindex.cc b/apt-pkg/deb/debmetaindex.cc index e2c680b14..a6edab6b9 100644 --- a/apt-pkg/deb/debmetaindex.cc +++ b/apt-pkg/deb/debmetaindex.cc @@ -119,6 +119,29 @@ string debReleaseIndex::SourceIndexURI(const char *Type, const string &Section) return URI + "dists/" + Dist + "/" + SourceIndexURISuffix(Type, Section); } +string debReleaseIndex::TranslationIndexURISuffix(const char *Type, const string &Section) const +{ + string Res =""; + if (Dist[Dist.size() - 1] != '/') + Res += Section + "/i18n/"; + return Res + Type; +} + +string debReleaseIndex::TranslationIndexURI(const char *Type, const string &Section) const +{ + string Res; + if (Dist[Dist.size() - 1] == '/') + { + if (Dist != "/") + Res = URI + Dist; + else + Res = URI; + return Res + Type; + } + else + return URI + "dists/" + Dist + "/" + TranslationIndexURISuffix(Type, Section); +} + debReleaseIndex::debReleaseIndex(string const &URI, string const &Dist) { this->URI = URI; this->Dist = Dist; @@ -155,6 +178,7 @@ vector * debReleaseIndex::ComputeIndexTargets() const { if (IndexTargets->empty() == false && ArchEntries.size() == 1) return IndexTargets; + std::set sections; for (map >::const_iterator a = ArchEntries.begin(); a != ArchEntries.end(); ++a) { if (a->first == "source") @@ -167,6 +191,37 @@ vector * debReleaseIndex::ComputeIndexTargets() const { Target->URI = IndexURI(Target->ShortDesc.c_str(), (*I)->Section, a->first); Target->Description = Info (Target->ShortDesc.c_str(), (*I)->Section, a->first); IndexTargets->push_back (Target); + sections.insert((*I)->Section); + } + } + + // get the Translations: + // - if its a dists-style repository get the i18n/Index first + // - if its flat try to acquire files by guessing + if (Dist[Dist.size() - 1] == '/') { + std::vector const lang = APT::Configuration::getLanguages(true); + for (std::set::const_iterator s = sections.begin(); + s != sections.end(); ++s) { + for (std::vector::const_iterator l = lang.begin(); + l != lang.end(); l++) { + if (*l == "none") continue; + IndexTarget * Target = new OptionalIndexTarget(); + Target->ShortDesc = "Translation-" + *l; + Target->MetaKey = TranslationIndexURISuffix(l->c_str(), *s); + Target->URI = TranslationIndexURI(l->c_str(), *s); + Target->Description = Info (Target->ShortDesc.c_str(), *s); + IndexTargets->push_back(Target); + } + } + } else { + for (std::set::const_iterator s = sections.begin(); + s != sections.end(); ++s) { + IndexTarget * Target = new OptionalIndexTarget(); + Target->ShortDesc = "TranslationIndex"; + Target->MetaKey = TranslationIndexURISuffix("Index", *s); + Target->URI = TranslationIndexURI("Index", *s); + Target->Description = Info (Target->ShortDesc.c_str(), *s); + IndexTargets->push_back (Target); } } @@ -191,28 +246,6 @@ bool debReleaseIndex::GetIndexes(pkgAcquire *Owner, bool const &GetAll) const ComputeIndexTargets(), new indexRecords (Dist)); - - // Queue the translations - std::vector const lang = APT::Configuration::getLanguages(true); - map > sections; - for (map >::const_iterator a = ArchEntries.begin(); - a != ArchEntries.end(); ++a) { - if (a->first == "source") - continue; - for (vector::const_iterator I = a->second.begin(); - I != a->second.end(); I++) - sections[(*I)->Section].insert(lang.begin(), lang.end()); - } - - for (map >::const_iterator s = sections.begin(); - s != sections.end(); ++s) - for (set::const_iterator l = s->second.begin(); - l != s->second.end(); l++) { - if (*l == "none") continue; - debTranslationsIndex i = debTranslationsIndex(URI,Dist,s->first,(*l).c_str()); - i.GetIndexes(Owner); - } - return true; } diff --git a/apt-pkg/deb/debmetaindex.h b/apt-pkg/deb/debmetaindex.h index 360fa5419..1561c6e00 100644 --- a/apt-pkg/deb/debmetaindex.h +++ b/apt-pkg/deb/debmetaindex.h @@ -37,6 +37,8 @@ class debReleaseIndex : public metaIndex { string IndexURISuffix(const char *Type, string const &Section, string const &Arch="native") const; string SourceIndexURI(const char *Type, const string &Section) const; string SourceIndexURISuffix(const char *Type, const string &Section) const; + string TranslationIndexURI(const char *Type, const string &Section) const; + string TranslationIndexURISuffix(const char *Type, const string &Section) const; virtual vector *GetIndexFiles(); virtual bool IsTrusted() const; diff --git a/debian/changelog b/debian/changelog index 7b125fc43..b3da32247 100644 --- a/debian/changelog +++ b/debian/changelog @@ -56,6 +56,7 @@ apt (0.8.11+wheezy) unstable; urgency=low - try downloading clearsigned InRelease before trying Release.gpg - change the internal handling of Extensions in pkgAcqIndex - add a special uncompressed compression type to prefer those files + - download and use i18n/Index to choose which Translations to download * cmdline/apt-key: - don't set trustdb-name as non-root so 'list' and 'finger' can be used without being root (Closes: #393005, #592107) @@ -66,8 +67,10 @@ apt (0.8.11+wheezy) unstable; urgency=low - include Index files by default in the Release file * methods/{gzip,bzip}.cc: - print a good error message if FileSize() is zero + * apt-pkg/aptconfiguration.cc: + - remove the inbuilt Translation files whitelist - -- David Kalnischkies Wed, 26 Jan 2011 16:06:10 +0100 + -- David Kalnischkies Fri, 28 Jan 2011 12:22:25 +0100 apt (0.8.10.3) unstable; urgency=low diff --git a/test/integration/test-bug-595691-empty-and-broken-archive-files b/test/integration/test-bug-595691-empty-and-broken-archive-files index 398d0cd1b..684559aa7 100755 --- a/test/integration/test-bug-595691-empty-and-broken-archive-files +++ b/test/integration/test-bug-595691-empty-and-broken-archive-files @@ -32,7 +32,7 @@ createemptyarchive() { fi touch aptarchive/Packages echo -n "" | $COMPRESSOR > aptarchive/${1}.$COMPRESS - aptftparchive release aptarchive/ > aptarchive/Release + generatereleasefiles signreleasefiles rm -f aptarchive/Packages } @@ -43,7 +43,7 @@ createemptyfile() { echo -n "" | $COMPRESSOR > aptarchive/Packages.$COMPRESS fi touch aptarchive/Packages aptarchive/${1}.$COMPRESS - aptftparchive release aptarchive/ > aptarchive/Release + generatereleasefiles signreleasefiles rm -f aptarchive/Packages } @@ -76,7 +76,7 @@ testoverfile() { createemptyfile 'en' testaptgetupdate "Get:1 file: InRelease [] -Ign file:$(readlink -f aptarchive)/ Translation-en +Ign file: Translation-en Reading package lists..." "empty file en.$COMPRESS over file" createemptyarchive 'en' @@ -86,13 +86,13 @@ Reading package lists..." "empty archive en.$COMPRESS over file" createemptyarchive 'Packages' # FIXME: Why omits the file transport the Packages Get line? #Get:3 file: Packages [] - testaptgetupdate "Ign file:$(readlink -f aptarchive)/ Translation-en -Get:1 file: InRelease [] + testaptgetupdate "Get:1 file: InRelease [] +Ign file: Translation-en Reading package lists..." "empty archive Packages.$COMPRESS over file" createemptyfile 'Packages' - testaptgetupdate "Ign file:$(readlink -f aptarchive)/ Translation-en -Get:1 file: InRelease [] + testaptgetupdate "Get:1 file: InRelease [] +Ign file: Translation-en Err file: Packages Empty files can't be valid archives W: Failed to fetch ${COMPRESSOR}:$(readlink -f aptarchive/Packages.$COMPRESS) Empty files can't be valid archives @@ -105,28 +105,28 @@ testoverhttp() { createemptyfile 'en' testaptgetupdate "Get:1 http://localhost InRelease [] -Get:2 http://localhost/ Translation-en -Get:3 http://localhost Packages [] -Ign http://localhost/ Translation-en +Get:2 http://localhost Packages [] +Get:3 http://localhost Translation-en +Ign http://localhost Translation-en Reading package lists..." "empty file en.$COMPRESS over http" createemptyarchive 'en' testaptgetupdate "Get:1 http://localhost InRelease [] -Get:2 http://localhost/ Translation-en [] -Get:3 http://localhost Packages [] +Get:2 http://localhost Packages [] +Get:3 http://localhost Translation-en [] Reading package lists..." "empty archive en.$COMPRESS over http" createemptyarchive 'Packages' testaptgetupdate "Get:1 http://localhost InRelease [] -Ign http://localhost/ Translation-en Get:2 http://localhost Packages [] +Ign http://localhost Translation-en Reading package lists..." "empty archive Packages.$COMPRESS over http" createemptyfile 'Packages' #FIXME: we should response with a good error message instead testaptgetupdate "Get:1 http://localhost InRelease [] -Ign http://localhost/ Translation-en Get:2 http://localhost Packages +Ign http://localhost Translation-en Err http://localhost Packages Empty files can't be valid archives W: Failed to fetch ${COMPRESSOR}:$(readlink -f rootdir/var/lib/apt/lists/partial/localhost:8080_Packages) Empty files can't be valid archives diff --git a/test/integration/test-bug-601016-description-translation b/test/integration/test-bug-601016-description-translation index a31e42ee1..2a323a201 100755 --- a/test/integration/test-bug-601016-description-translation +++ b/test/integration/test-bug-601016-description-translation @@ -57,6 +57,7 @@ Description-${LOCALE}: Mächtige Oberfläche für dpkg testrun() { echo "Acquire::Languages { \"${LOCALE}\"; \"en\"; };" > rootdir/etc/apt/apt.conf.d/00languages export LC_ALL="" + rm -rf rootdir/var/lib/apt/lists rootdir/var/cache/apt/ setupaptarchive testequal "$LOCALESTANZA" aptcache show apt -o Test=File-${LOCALE} testequal "$NOLONGSTANZA" aptcache show apt -o Acquire::Languages="ww" -o Test=File-${LOCALE} diff --git a/test/libapt/getlanguages_test.cc b/test/libapt/getlanguages_test.cc index 3559aae0c..707142aef 100644 --- a/test/libapt/getlanguages_test.cc +++ b/test/libapt/getlanguages_test.cc @@ -26,16 +26,18 @@ int main(int argc,char *argv[]) env[1] = ""; std::vector vec = APT::Configuration::getLanguages(false, false, env); - equals(vec.size(), 2); - equals(vec[0], "de"); - equals(vec[1], "en"); + equals(vec.size(), 3); + equals(vec[0], "de_DE"); + equals(vec[1], "de"); + equals(vec[2], "en"); // Special: Check if the cache is actually in use env[0] = "en_GB.UTF-8"; vec = APT::Configuration::getLanguages(false, true, env); - equals(vec.size(), 2); - equals(vec[0], "de"); - equals(vec[1], "en"); + equals(vec.size(), 3); + equals(vec[0], "de_DE"); + equals(vec[1], "de"); + equals(vec[2], "en"); env[0] = "en_GB.UTF-8"; vec = APT::Configuration::getLanguages(false, false, env); @@ -52,19 +54,21 @@ int main(int argc,char *argv[]) env[0] = "tr_DE@euro"; vec = APT::Configuration::getLanguages(false, false, env); - equals(vec.size(), 2); - equals(vec[0], "tr"); - equals(vec[1], "en"); + equals(vec.size(), 3); + equals(vec[0], "tr_DE"); + equals(vec[1], "tr"); + equals(vec[2], "en"); env[0] = "de_NO"; - env[1] = "se_NO:en_GB:nb_NO:nb:no_NO:no:nn_NO:nn:da:sv:en"; + env[1] = "de_NO:en_GB:nb_NO:nb:no_NO:no:nn_NO:nn:da:sv:en"; vec = APT::Configuration::getLanguages(false, false, env); - equals(vec.size(), 5); - equals(vec[0], "de"); - equals(vec[1], "en_GB"); - equals(vec[2], "nb"); - equals(vec[3], "no"); - equals(vec[4], "en"); + equals(vec.size(), 6); + equals(vec[0], "de_NO"); + equals(vec[1], "de"); + equals(vec[2], "en_GB"); + equals(vec[3], "nb_NO"); + equals(vec[4], "nb"); + equals(vec[5], "en"); env[0] = "pt_PR.UTF-8"; env[1] = ""; @@ -76,9 +80,10 @@ int main(int argc,char *argv[]) env[0] = "ast_DE.UTF-8"; vec = APT::Configuration::getLanguages(false, false, env); // bogus, but syntactical correct - equals(vec.size(), 2); - equals(vec[0], "ast"); - equals(vec[1], "en"); + equals(vec.size(), 3); + equals(vec[0], "ast_DE"); + equals(vec[1], "ast"); + equals(vec[2], "en"); env[0] = "C"; vec = APT::Configuration::getLanguages(false, false, env); @@ -113,25 +118,28 @@ int main(int argc,char *argv[]) _config->Set("Acquire::Languages::2", "en"); env[0] = "de_DE.UTF-8"; vec = APT::Configuration::getLanguages(false, false, env); - equals(vec.size(), 2); - equals(vec[0], "de"); - equals(vec[1], "en"); + equals(vec.size(), 3); + equals(vec[0], "de_DE"); + equals(vec[1], "de"); + equals(vec[2], "en"); _config->Set("Acquire::Languages::3", "de"); env[0] = "de_DE.UTF-8"; vec = APT::Configuration::getLanguages(false, false, env); - equals(vec.size(), 2); - equals(vec[0], "de"); - equals(vec[1], "en"); + equals(vec.size(), 3); + equals(vec[0], "de_DE"); + equals(vec[1], "de"); + equals(vec[2], "en"); _config->Set("Dir::State::lists", argv[1]); vec = APT::Configuration::getLanguages(true, false, env); - equals(vec.size(), 5); - equals(vec[0], "de"); - equals(vec[1], "en"); - equals(vec[2], "none"); - equals(vec[3], "pt"); - equals(vec[4], "tr"); + equals(vec.size(), 6); + equals(vec[0], "de_DE"); + equals(vec[1], "de"); + equals(vec[2], "en"); + equals(vec[3], "none"); + equals(vec[4], "pt"); + equals(vec[5], "tr"); _config->Set("Dir::State::lists", "/non-existing-dir"); _config->Set("Acquire::Languages::1", "none"); @@ -140,6 +148,7 @@ int main(int argc,char *argv[]) equals(vec.size(), 0); env[0] = "de_DE.UTF-8"; vec = APT::Configuration::getLanguages(true, false, env); + equals(vec.size(), 2); equals(vec[0], "en"); equals(vec[1], "de"); -- cgit v1.2.3 From 5a635ee4bafd8ba4cde6e50ea256e36d2c55dc64 Mon Sep 17 00:00:00 2001 From: David Kalnischkies Date: Fri, 28 Jan 2011 13:26:11 +0100 Subject: ensure that we are building really inside of our tmp directory --- test/integration/framework | 10 +++++----- 1 file changed, 5 insertions(+), 5 deletions(-) diff --git a/test/integration/framework b/test/integration/framework index b95667670..c85914289 100644 --- a/test/integration/framework +++ b/test/integration/framework @@ -219,7 +219,7 @@ buildsimplenativepackage() { else DISTSECTION="$(echo "$SECTION" | cut -d'/' -f 1)" fi - local BUILDDIR=incoming/${NAME}-${VERSION} + local BUILDDIR=${TMPWORKINGDIRECTORY}/incoming/${NAME}-${VERSION} msgninfo "Build package ${NAME} in ${VERSION} for ${RELEASE} in ${DISTSECTION}… " mkdir -p $BUILDDIR/debian/source @@ -259,12 +259,12 @@ Architecture: $ARCH" > ${BUILDDIR}/debian/control (cd ${BUILDDIR}; dpkg-gencontrol) (cd ${BUILDDIR}/debian/tmp; md5sum $(find usr/ -type f) > DEBIAN/md5sums) - dpkg-deb --build ${BUILDDIR}/debian/tmp incoming > /dev/null - echo "pool/${NAME}_${VERSION}_${ARCH}.deb" >> incoming/${RELEASE}.${DISTSECTION}.pkglist + dpkg-deb --build ${BUILDDIR}/debian/tmp ${BUILDDIR}/.. > /dev/null + echo "pool/${NAME}_${VERSION}_${ARCH}.deb" >> ${BUILDDIR}/../${RELEASE}.${DISTSECTION}.pkglist for SRC in $SRCS; do - echo "pool/${SRC}" >> incoming/${RELEASE}.${DISTSECTION}.srclist + echo "pool/${SRC}" >> ${BUILDDIR}/../${RELEASE}.${DISTSECTION}.srclist done - rm -rf "incoming/${NAME}-${VERSION}" + rm -rf "${BUILDDIR}" msgdone "info" } -- cgit v1.2.3 From 875bcb3670c43bd4450e27934ba105611e534df0 Mon Sep 17 00:00:00 2001 From: David Kalnischkies Date: Tue, 1 Feb 2011 10:58:48 +0100 Subject: ensure that we are building the packages in the right architecture --- test/integration/framework | 18 +++++++++++++----- 1 file changed, 13 insertions(+), 5 deletions(-) diff --git a/test/integration/framework b/test/integration/framework index c85914289..ee4048a53 100644 --- a/test/integration/framework +++ b/test/integration/framework @@ -188,8 +188,12 @@ Maintainer: Joe Sixpack Build-Depends: debhelper (>= 7) Standards-Version: 3.9.1 -Package: $NAME -Architecture: $ARCH" > debian/control +Package: $NAME" > debian/control + if [ "$ARCH" = 'all' ]; then + echo "Architecture: all" >> debian/control + else + echo "Architecture: any" >> debian/control + fi test -z "$DEPENDENCIES" || echo "$DEPENDENCIES" >> debian/control if [ -z "$DESCRIPTION" ]; then echo "Description: an autogenerated dummy ${NAME}=${VERSION}/${RELEASE} @@ -239,8 +243,12 @@ Priority: optional Maintainer: Joe Sixpack Standards-Version: 3.9.1 -Package: $NAME -Architecture: $ARCH" > ${BUILDDIR}/debian/control +Package: $NAME" > ${BUILDDIR}/debian/control + if [ "$ARCH" = 'all' ]; then + echo "Architecture: all" >> ${BUILDDIR}/debian/control + else + echo "Architecture: any" >> ${BUILDDIR}/debian/control + fi test -z "$DEPENDENCIES" || echo "$DEPENDENCIES" >> ${BUILDDIR}/debian/control if [ -z "$DESCRIPTION" ]; then echo "Description: an autogenerated dummy ${NAME}=${VERSION}/${RELEASE} @@ -256,7 +264,7 @@ Architecture: $ARCH" > ${BUILDDIR}/debian/control 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} cp ${BUILDDIR}/${NAME} ${BUILDDIR}/debian/tmp/usr/bin - (cd ${BUILDDIR}; dpkg-gencontrol) + (cd ${BUILDDIR}; dpkg-gencontrol -DArchitecture=$ARCH) (cd ${BUILDDIR}/debian/tmp; md5sum $(find usr/ -type f) > DEBIAN/md5sums) dpkg-deb --build ${BUILDDIR}/debian/tmp ${BUILDDIR}/.. > /dev/null -- cgit v1.2.3