From b855a40058f99a0f10184c410b3bbf3c2ee4ae83 Mon Sep 17 00:00:00 2001 From: David Kalnischkies Date: Wed, 4 Jul 2012 23:54:48 +0200 Subject: * cmdline/apt-mark.cc: - arch:all packages are treated as arch:native packages, but dpkg expects pkg:all for selections, so use the arch of the installed version instead of the package structure if possible. Thanks to Stepan Golosunov for the report! (Closes: #680041) --- cmdline/apt-mark.cc | 16 ++++++++++++++-- 1 file changed, 14 insertions(+), 2 deletions(-) (limited to 'cmdline') diff --git a/cmdline/apt-mark.cc b/cmdline/apt-mark.cc index 2a093c55a..c5b7ca496 100644 --- a/cmdline/apt-mark.cc +++ b/cmdline/apt-mark.cc @@ -291,14 +291,26 @@ bool DoHold(CommandLine &CmdL) FILE* dpkg = fdopen(external[1], "w"); for (APT::PackageList::iterator Pkg = pkgset.begin(); Pkg != pkgset.end(); ++Pkg) { + if (dpkgMultiArch == false) + fprintf(dpkg, "%s", Pkg.FullName(true).c_str()); + else + { + if (Pkg->CurrentVer != 0) + fprintf(dpkg, "%s:%s", Pkg.Name(), Pkg.CurrentVer().Arch()); + else if (Pkg.VersionList().end() == false) + fprintf(dpkg, "%s:%s", Pkg.Name(), Pkg.VersionList().Arch()); + else + fprintf(dpkg, "%s", Pkg.FullName(false).c_str()); + } + if (MarkHold == true) { - fprintf(dpkg, "%s hold\n", Pkg.FullName(!dpkgMultiArch).c_str()); + fprintf(dpkg, " hold\n"); ioprintf(c1out,_("%s set on hold.\n"), Pkg.FullName(true).c_str()); } else { - fprintf(dpkg, "%s install\n", Pkg.FullName(!dpkgMultiArch).c_str()); + fprintf(dpkg, " install\n"); ioprintf(c1out,_("Canceled hold on %s.\n"), Pkg.FullName(true).c_str()); } } -- cgit v1.2.3-70-g09d2 From f1f874bdb8433da780e5635422e6aad4762d8d25 Mon Sep 17 00:00:00 2001 From: David Kalnischkies Date: Sat, 4 Aug 2012 11:04:52 +0200 Subject: * cmdline/apt-get.cc: - error out on (unsatisfiable) build-deps on purly virtual packages instead of ignoring these dependencies; thanks to Johannes Schauer for the detailed report! (Closes: #683786) --- cmdline/apt-get.cc | 4 +- debian/changelog | 4 ++ .../test-bug-683786-build-dep-on-virtual-packages | 44 ++++++++++++++++++++++ 3 files changed, 50 insertions(+), 2 deletions(-) create mode 100755 test/integration/test-bug-683786-build-dep-on-virtual-packages (limited to 'cmdline') diff --git a/cmdline/apt-get.cc b/cmdline/apt-get.cc index d4c7f4200..b433a7915 100644 --- a/cmdline/apt-get.cc +++ b/cmdline/apt-get.cc @@ -3004,7 +3004,7 @@ bool DoBuildDep(CommandLine &CmdL) else Pkg = Cache->FindPkg(D->Package); - if (Pkg.end() == true) + if (Pkg.end() == true || Pkg->VersionList == 0) { if (_config->FindB("Debug::BuildDeps",false) == true) cout << " (not found)" << (*D).Package << endl; @@ -3087,7 +3087,7 @@ bool DoBuildDep(CommandLine &CmdL) } } - if (TryToInstallBuildDep(Pkg,Cache,Fix,false,false) == true) + if (TryToInstallBuildDep(Pkg,Cache,Fix,false,false,false) == true) { // We successfully installed something; skip remaining alternatives skipAlternatives = hasAlternatives; diff --git a/debian/changelog b/debian/changelog index 5218ff0cb..18b7c6a23 100644 --- a/debian/changelog +++ b/debian/changelog @@ -16,6 +16,10 @@ apt (0.9.7.4) UNRELEASED; urgency=low * apt-pkg/contrib/fileutl.cc: - remove _POSIX_SYNCHRONIZED_IO guard in FileFd::Sync() around fsync as this guard is only needed for fdatasync and not defined on hurd + * cmdline/apt-get.cc: + - error out on (unsatisfiable) build-deps on purly virtual packages + instead of ignoring these dependencies; thanks to Johannes Schauer + for the detailed report! (Closes: #683786) -- David Kalnischkies Wed, 18 Jul 2012 11:45:57 +0200 diff --git a/test/integration/test-bug-683786-build-dep-on-virtual-packages b/test/integration/test-bug-683786-build-dep-on-virtual-packages new file mode 100755 index 000000000..83d184a43 --- /dev/null +++ b/test/integration/test-bug-683786-build-dep-on-virtual-packages @@ -0,0 +1,44 @@ +#!/bin/sh +set -e + +TESTDIR=$(readlink -f $(dirname $0)) +. $TESTDIR/framework +setupenvironment +configarchitecture 'amd64' 'armel' + +insertinstalledpackage 'build-essential' 'all' '11.5' 'Multi-Arch: foreign' + +insertpackage 'unstable' 'po-debconf' 'all' '1' +insertsource 'unstable' 'dash' 'any' '1' 'Build-Depends: po-debconf' +insertpackage 'unstable' 'make-po-debconf-pure-virtual' 'armel' '1' 'Depends: po-debconf' + +insertpackage 'unstable' 'po-debconf' 'amd64' '1' +insertsource 'unstable' 'diffutils' 'any' '1' 'Build-Depends: texi2html' + +setupaptarchive + +testequal 'Package: po-debconf:armel +Versions: + +Reverse Depends: + make-po-debconf-pure-virtual:armel,po-debconf:armel +Dependencies: +Provides: +Reverse Provides: ' aptcache showpkg po-debconf:armel +testequal 'N: Unable to locate package texi2html' aptcache showpkg texi2html:armel -q=0 + +testequal 'Reading package lists... +Building dependency tree... +The following NEW packages will be installed: + po-debconf +0 upgraded, 1 newly installed, 0 to remove and 0 not upgraded. +Inst po-debconf (1 unstable, unstable [all]) +Conf po-debconf (1 unstable, unstable [all])' aptget build-dep dash -s + +testequal 'Reading package lists... +Building dependency tree... +E: Build-Depends dependency for dash cannot be satisfied because the package po-debconf cannot be found' aptget build-dep -aarmel dash -s + +testequal 'Reading package lists... +Building dependency tree... +E: Build-Depends dependency for diffutils cannot be satisfied because the package texi2html cannot be found' aptget build-dep -aarmel diffutils -s -- cgit v1.2.3-70-g09d2 From 727d8712bc8d681ac95e0d8c61d3d0b46d11494c Mon Sep 17 00:00:00 2001 From: David Kalnischkies Date: Sat, 4 Aug 2012 21:37:41 +0200 Subject: improve the check for purely virtuals as provided packages aren't purely virtual and shouldn't error out cause of that --- cmdline/apt-get.cc | 2 +- .../test-bug-683786-build-dep-on-virtual-packages | 12 ++++++++++++ 2 files changed, 13 insertions(+), 1 deletion(-) (limited to 'cmdline') diff --git a/cmdline/apt-get.cc b/cmdline/apt-get.cc index b433a7915..b14206f92 100644 --- a/cmdline/apt-get.cc +++ b/cmdline/apt-get.cc @@ -3004,7 +3004,7 @@ bool DoBuildDep(CommandLine &CmdL) else Pkg = Cache->FindPkg(D->Package); - if (Pkg.end() == true || Pkg->VersionList == 0) + if (Pkg.end() == true || (Pkg->VersionList == 0 && Pkg->ProvidesList == 0)) { if (_config->FindB("Debug::BuildDeps",false) == true) cout << " (not found)" << (*D).Package << endl; diff --git a/test/integration/test-bug-683786-build-dep-on-virtual-packages b/test/integration/test-bug-683786-build-dep-on-virtual-packages index 83d184a43..246bd2ef7 100755 --- a/test/integration/test-bug-683786-build-dep-on-virtual-packages +++ b/test/integration/test-bug-683786-build-dep-on-virtual-packages @@ -15,6 +15,9 @@ insertpackage 'unstable' 'make-po-debconf-pure-virtual' 'armel' '1' 'Depends: po insertpackage 'unstable' 'po-debconf' 'amd64' '1' insertsource 'unstable' 'diffutils' 'any' '1' 'Build-Depends: texi2html' +insertpackage 'unstable' 'libselinux1-dev' 'amd64' '1' 'Provides: libselinux-dev' +insertsource 'unstable' 'sed' 'any' '1' 'Build-Depends: libselinux-dev' + setupaptarchive testequal 'Package: po-debconf:armel @@ -42,3 +45,12 @@ E: Build-Depends dependency for dash cannot be satisfied because the package po- testequal 'Reading package lists... Building dependency tree... E: Build-Depends dependency for diffutils cannot be satisfied because the package texi2html cannot be found' aptget build-dep -aarmel diffutils -s + +testequal "Reading package lists... +Building dependency tree... +Note, selecting 'libselinux1-dev' instead of 'libselinux-dev' +The following NEW packages will be installed: + libselinux1-dev +0 upgraded, 1 newly installed, 0 to remove and 0 not upgraded. +Inst libselinux1-dev (1 unstable [amd64]) +Conf libselinux1-dev (1 unstable [amd64])" aptget build-dep sed -s -- cgit v1.2.3-70-g09d2 From 666faa35f8a42d2a8691daf46a203be6d29166dc Mon Sep 17 00:00:00 2001 From: David Kalnischkies Date: Sun, 5 Aug 2012 12:23:59 +0200 Subject: ensure that the right architecture is used for cross-dependencies in cases we have to choose a provider by defaulting on host-arch instead of build-arch --- cmdline/apt-get.cc | 33 ++++++++++++++-------- debian/changelog | 3 ++ .../test-bug-632221-cross-dependency-satisfaction | 1 + .../test-bug-683786-build-dep-on-virtual-packages | 25 ++++++++++++++++ 4 files changed, 51 insertions(+), 11 deletions(-) (limited to 'cmdline') diff --git a/cmdline/apt-get.cc b/cmdline/apt-get.cc index b14206f92..6b6c8a23f 100644 --- a/cmdline/apt-get.cc +++ b/cmdline/apt-get.cc @@ -2895,11 +2895,15 @@ bool DoBuildDep(CommandLine &CmdL) if (StripMultiArch == false && D->Type != pkgSrcRecords::Parser::BuildDependIndep) { size_t const colon = D->Package.find(":"); - if (colon != string::npos && - (strcmp(D->Package.c_str() + colon, ":any") == 0 || strcmp(D->Package.c_str() + colon, ":native") == 0)) - Pkg = Cache->FindPkg(D->Package.substr(0,colon)); + if (colon != string::npos) + { + if (strcmp(D->Package.c_str() + colon, ":any") == 0 || strcmp(D->Package.c_str() + colon, ":native") == 0) + Pkg = Cache->FindPkg(D->Package.substr(0,colon)); + else + Pkg = Cache->FindPkg(D->Package); + } else - Pkg = Cache->FindPkg(D->Package); + Pkg = Cache->FindPkg(D->Package, hostArch); // a bad version either is invalid or doesn't satify dependency #define BADVER(Ver) (Ver.end() == true || \ @@ -2918,13 +2922,13 @@ bool DoBuildDep(CommandLine &CmdL) } if (verlist.empty() == true) { - pkgCache::PkgIterator HostPkg = Cache->FindPkg(D->Package, hostArch); - if (HostPkg.end() == false) + pkgCache::PkgIterator BuildPkg = Cache->FindPkg(D->Package, "native"); + if (BuildPkg.end() == false && Pkg != BuildPkg) { - pkgCache::VerIterator Ver = (*Cache)[HostPkg].InstVerIter(*Cache); + pkgCache::VerIterator Ver = (*Cache)[BuildPkg].InstVerIter(*Cache); if (BADVER(Ver) == false) verlist.insert(Ver); - Ver = (*Cache)[HostPkg].CandidateVerIter(*Cache); + Ver = (*Cache)[BuildPkg].CandidateVerIter(*Cache); if (BADVER(Ver) == false) verlist.insert(Ver); } @@ -2943,6 +2947,8 @@ bool DoBuildDep(CommandLine &CmdL) Pkg = Ver.ParentPkg().Group().FindPkg(hostArch); else if (strcmp(D->Package.c_str() + colon, ":any") == 0) forbidden = "Multi-Arch: none"; + else if (strcmp(D->Package.c_str() + colon, ":native") == 0) + Pkg = Ver.ParentPkg().Group().FindPkg("native"); } else if (Ver->MultiArch == pkgCache::Version::Same) { @@ -2950,11 +2956,15 @@ bool DoBuildDep(CommandLine &CmdL) Pkg = Ver.ParentPkg().Group().FindPkg(hostArch); else if (strcmp(D->Package.c_str() + colon, ":any") == 0) forbidden = "Multi-Arch: same"; - // :native gets the buildArch + else if (strcmp(D->Package.c_str() + colon, ":native") == 0) + Pkg = Ver.ParentPkg().Group().FindPkg("native"); } else if ((Ver->MultiArch & pkgCache::Version::Foreign) == pkgCache::Version::Foreign) { - if (colon != string::npos) + if (colon == string::npos) + Pkg = Ver.ParentPkg().Group().FindPkg("native"); + else if (strcmp(D->Package.c_str() + colon, ":any") == 0 || + strcmp(D->Package.c_str() + colon, ":native") == 0) forbidden = "Multi-Arch: foreign"; } else if ((Ver->MultiArch & pkgCache::Version::Allowed) == pkgCache::Version::Allowed) @@ -2972,7 +2982,8 @@ bool DoBuildDep(CommandLine &CmdL) if (Pkg.end() == true) Pkg = Grp.FindPreferredPkg(true); } - // native gets buildArch + else if (strcmp(D->Package.c_str() + colon, ":native") == 0) + Pkg = Ver.ParentPkg().Group().FindPkg("native"); } if (forbidden.empty() == false) diff --git a/debian/changelog b/debian/changelog index ef68aea7b..4646762f6 100644 --- a/debian/changelog +++ b/debian/changelog @@ -20,6 +20,9 @@ apt (0.9.7.4) UNRELEASED; urgency=low - error out on (unsatisfiable) build-deps on purly virtual packages instead of ignoring these dependencies; thanks to Johannes Schauer for the detailed report! (Closes: #683786) + - ensure that the right architecture is used for cross-dependencies in + cases we have to choose a provider by defaulting on host-arch + instead of build-arch * doc/apt-verbatim.ent: - denote 'wheezy' as stable codename and 'jessie' as testing codename in the documentation in preparation for release diff --git a/test/integration/test-bug-632221-cross-dependency-satisfaction b/test/integration/test-bug-632221-cross-dependency-satisfaction index 7e8a43a86..d90a103c9 100755 --- a/test/integration/test-bug-632221-cross-dependency-satisfaction +++ b/test/integration/test-bug-632221-cross-dependency-satisfaction @@ -63,6 +63,7 @@ Inst libc6 (1.0 unstable [amd64]) Inst specific (1.0 unstable [amd64]) Conf libc6 (1.0 unstable [amd64]) Conf specific (1.0 unstable [amd64])' aptget build-dep source-specific-amd64 -s -a armel + testequal 'Reading package lists... Building dependency tree... The following NEW packages will be installed: diff --git a/test/integration/test-bug-683786-build-dep-on-virtual-packages b/test/integration/test-bug-683786-build-dep-on-virtual-packages index 246bd2ef7..879d6a3bc 100755 --- a/test/integration/test-bug-683786-build-dep-on-virtual-packages +++ b/test/integration/test-bug-683786-build-dep-on-virtual-packages @@ -18,6 +18,9 @@ insertsource 'unstable' 'diffutils' 'any' '1' 'Build-Depends: texi2html' insertpackage 'unstable' 'libselinux1-dev' 'amd64' '1' 'Provides: libselinux-dev' insertsource 'unstable' 'sed' 'any' '1' 'Build-Depends: libselinux-dev' +insertpackage 'unstable' 'libsehurd1-dev' 'amd64,armel' '1' 'Provides: libsehurd-dev' +insertsource 'unstable' 'sed2' 'any' '1' 'Build-Depends: libsehurd-dev' + setupaptarchive testequal 'Package: po-debconf:armel @@ -54,3 +57,25 @@ The following NEW packages will be installed: 0 upgraded, 1 newly installed, 0 to remove and 0 not upgraded. Inst libselinux1-dev (1 unstable [amd64]) Conf libselinux1-dev (1 unstable [amd64])" aptget build-dep sed -s + +testequal 'Reading package lists... +Building dependency tree... +E: Build-Depends dependency for sed cannot be satisfied because the package libselinux-dev cannot be found' aptget build-dep -aarmel sed -s + +testequal "Reading package lists... +Building dependency tree... +Note, selecting 'libsehurd1-dev' instead of 'libsehurd-dev' +The following NEW packages will be installed: + libsehurd1-dev +0 upgraded, 1 newly installed, 0 to remove and 0 not upgraded. +Inst libsehurd1-dev (1 unstable [amd64]) +Conf libsehurd1-dev (1 unstable [amd64])" aptget build-dep sed2 -s + +testequal "Reading package lists... +Building dependency tree... +Note, selecting 'libsehurd1-dev:armel' instead of 'libsehurd-dev:armel' +The following NEW packages will be installed: + libsehurd1-dev:armel +0 upgraded, 1 newly installed, 0 to remove and 0 not upgraded. +Inst libsehurd1-dev:armel (1 unstable [armel]) +Conf libsehurd1-dev:armel (1 unstable [armel])" aptget build-dep -aarmel sed2 -s -- cgit v1.2.3-70-g09d2 From 4caf8231804dfce5a1a58a56dfe4df21a31be363 Mon Sep 17 00:00:00 2001 From: David Kalnischkies Date: Mon, 6 Aug 2012 01:09:07 +0200 Subject: disable the display of the error messages for DoInstall if DoBuildDep is calling the helper (enabled by enforcing failure reporting) --- cmdline/apt-get.cc | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) (limited to 'cmdline') diff --git a/cmdline/apt-get.cc b/cmdline/apt-get.cc index 6b6c8a23f..4e307b657 100644 --- a/cmdline/apt-get.cc +++ b/cmdline/apt-get.cc @@ -1434,7 +1434,7 @@ bool TryToInstallBuildDep(pkgCache::PkgIterator Pkg,pkgCacheFile &Cache, if (Cache[Pkg].CandidateVer == 0 && Pkg->ProvidesList != 0) { CacheSetHelperAPTGet helper(c1out); - helper.showErrors(AllowFail == false); + helper.showErrors(false); pkgCache::VerIterator Ver = helper.canNotFindNewestVer(Cache, Pkg); if (Ver.end() == false) Pkg = Ver.ParentPkg(); -- cgit v1.2.3-70-g09d2 From 173c98da4cfa28ccde70c4d503fcdf6230b9085f Mon Sep 17 00:00:00 2001 From: David Kalnischkies Date: Wed, 26 Sep 2012 21:34:49 +0200 Subject: * cmdline/apt-cache.cc: - print versioned dependency relations in (r)depends if the option APT::Cache::ShowVersion is true (default: false) as discussed in #218995 to help debian-cd fixing #687949. Thanks to Sam Lidder for initial patch and Steve McIntyre for nagging and testing! --- cmdline/apt-cache.cc | 10 +++++++--- debian/changelog | 5 +++++ 2 files changed, 12 insertions(+), 3 deletions(-) (limited to 'cmdline') diff --git a/cmdline/apt-cache.cc b/cmdline/apt-cache.cc index ce869581b..0a2c28d23 100644 --- a/cmdline/apt-cache.cc +++ b/cmdline/apt-cache.cc @@ -597,6 +597,7 @@ bool ShowDepends(CommandLine &CmdL, bool const RevDepends) bool const Installed = _config->FindB("APT::Cache::Installed", false); bool const Important = _config->FindB("APT::Cache::Important", false); bool const ShowDepType = _config->FindB("APT::Cache::ShowDependencyType", RevDepends == false); + bool const ShowVersion = _config->FindB("APT::Cache::ShowVersion", false); bool const ShowPreDepends = _config->FindB("APT::Cache::ShowPre-Depends", true); bool const ShowDepends = _config->FindB("APT::Cache::ShowDepends", true); bool const ShowRecommends = _config->FindB("APT::Cache::ShowRecommends", Important == false); @@ -646,10 +647,13 @@ bool ShowDepends(CommandLine &CmdL, bool const RevDepends) if (ShowDepType == true) cout << D.DepType() << ": "; if (Trg->VersionList == 0) - cout << "<" << Trg.FullName(true) << ">" << endl; + cout << "<" << Trg.FullName(true) << ">"; else - cout << Trg.FullName(true) << endl; - + cout << Trg.FullName(true); + if (ShowVersion == true && D->Version != 0) + cout << " (" << pkgCache::CompTypeDeb(D->CompareOp) << ' ' << D.TargetVer() << ')'; + cout << std::endl; + if (Recurse == true && Shown[Trg->ID] == false) { Shown[Trg->ID] = true; diff --git a/debian/changelog b/debian/changelog index 4389f4090..607dddcfa 100644 --- a/debian/changelog +++ b/debian/changelog @@ -8,6 +8,11 @@ apt (0.9.7.6) UNRELEASED; urgency=low * apt-pkg/pkgcache.cc: - ignore negative dependencies applying in the same group for M-A:same packages on the real package name as self-conflicts + * cmdline/apt-cache.cc: + - print versioned dependency relations in (r)depends if the option + APT::Cache::ShowVersion is true (default: false) as discussed in + #218995 to help debian-cd fixing #687949. Thanks to Sam Lidder + for initial patch and Steve McIntyre for nagging and testing! -- David Kalnischkies Wed, 19 Sep 2012 11:29:56 +0200 -- cgit v1.2.3-70-g09d2