diff options
author | David Kalnischkies <david@kalnischkies.de> | 2016-06-03 14:40:06 +0200 |
---|---|---|
committer | David Kalnischkies <david@kalnischkies.de> | 2016-06-27 11:57:12 +0200 |
commit | 14bed2c0108a99d68f453ff61273d5ae59a5c3f0 (patch) | |
tree | d364e61152f0ca9061ad51817f5749e7c4bfbb62 | |
parent | 4cdc3bf0e24a74b0af45e1cbabfcaebd9d0c3318 (diff) | |
download | apt-14bed2c0108a99d68f453ff61273d5ae59a5c3f0.tar.gz |
eipp: properly handle arch-specific provides
The generation of the EIPP request was a bit to strict not generation
what would actually be needed to be part of the scenario.
-rw-r--r-- | apt-pkg/edsp.cc | 29 | ||||
-rwxr-xr-x | test/integration/test-specific-architecture-dependencies | 26 |
2 files changed, 42 insertions, 13 deletions
diff --git a/apt-pkg/edsp.cc b/apt-pkg/edsp.cc index f2d728933..21f7f3607 100644 --- a/apt-pkg/edsp.cc +++ b/apt-pkg/edsp.cc @@ -1218,6 +1218,35 @@ bool EIPP::WriteScenario(pkgDepCache &Cache, FileFd &output, OpProgress * const pkgset[PV->ID] = true; } pkgset[P->ID] = true; + if (strcmp(P.Arch(), "any") == 0) + { + APT::StringView const pkgname(P.Name()); + auto const idxColon = pkgname.find(':'); + if (idxColon != APT::StringView::npos) + { + pkgCache::PkgIterator PA; + if (pkgname.substr(idxColon + 1) == "any") + { + auto const GA = Cache.FindGrp(pkgname.substr(0, idxColon).to_string()); + for (auto PA = GA.PackageList(); PA.end() == false; PA = GA.NextPkg(PA)) + { + pkgset[PA->ID] = true; + } + } + else + { + auto const PA = Cache.FindPkg(pkgname.to_string()); + if (PA.end() == false) + pkgset[PA->ID] = true; + } + } + } + else + { + auto const PA = Cache.FindPkg(P.FullName(false), "any"); + if (PA.end() == false) + pkgset[PA->ID] = true; + } } }; for (pkgCache::PkgIterator Pkg = Cache.PkgBegin(); Pkg.end() == false; ++Pkg) diff --git a/test/integration/test-specific-architecture-dependencies b/test/integration/test-specific-architecture-dependencies index 959555619..447e407e5 100755 --- a/test/integration/test-specific-architecture-dependencies +++ b/test/integration/test-specific-architecture-dependencies @@ -69,7 +69,7 @@ Inst depender-x32:i386 (1 unstable [i386]) Conf libc6:i386 (1 unstable [i386]) Conf depender-x32:i386 (1 unstable [i386])' aptget install depender-x32:i386 -s -testequal 'Reading package lists... +testsuccessequal 'Reading package lists... Building dependency tree... The following additional packages will be installed: libc6:i386 @@ -81,7 +81,7 @@ Inst depender-x32 (1 unstable [amd64]) Conf libc6:i386 (1 unstable [i386]) Conf depender-x32 (1 unstable [amd64])' aptget install depender-x32:amd64 -s -testequal 'Reading package lists... +testsuccessequal 'Reading package lists... Building dependency tree... The following additional packages will be installed: libc6 @@ -93,7 +93,7 @@ Inst depender-x64 (1 unstable [amd64]) Conf libc6 (1 unstable [amd64]) Conf depender-x64 (1 unstable [amd64])' aptget install depender-x64:amd64 -s -testequal 'Reading package lists... +testsuccessequal 'Reading package lists... Building dependency tree... The following additional packages will be installed: libc6 @@ -105,7 +105,7 @@ Inst depender-x64:i386 (1 unstable [i386]) Conf libc6 (1 unstable [amd64]) Conf depender-x64:i386 (1 unstable [i386])' aptget install depender-x64:i386 -s -testequal 'Reading package lists... +testsuccessequal 'Reading package lists... Building dependency tree... The following packages will be REMOVED: libold:i386 libold @@ -128,7 +128,7 @@ Remv libold:i386 [1] Inst breaker-x32 (1 unstable [amd64]) Conf breaker-x32 (1 unstable [amd64])' aptget install breaker-x32:amd64 -s -testequal 'Reading package lists... +testsuccessequal 'Reading package lists... Building dependency tree... The following packages will be REMOVED: libold:i386 @@ -139,7 +139,7 @@ Remv libold:i386 [1] Inst breaker-x32:i386 (1 unstable [i386]) Conf breaker-x32:i386 (1 unstable [i386])' aptget install breaker-x32:i386 -s -testequal 'Reading package lists... +testsuccessequal 'Reading package lists... Building dependency tree... The following packages will be REMOVED: libold @@ -213,7 +213,7 @@ The following NEW packages will be installed: Inst foo-native-depender (1 unstable [amd64]) Conf foo-native-depender (1 unstable [amd64])' aptget install foo-native-depender -s -testequal 'Reading package lists... +testsuccessequal 'Reading package lists... Building dependency tree... The following NEW packages will be installed: foo-foreign-depender:i386 @@ -265,7 +265,7 @@ Conf foo-no-conflictor:i386 (1 unstable [i386])' aptget install foo-no-conflicto msgmsg 'switch to single architecture' configarchitecture 'amd64' -testequal 'Reading package lists... +testsuccessequal 'Reading package lists... Building dependency tree... The following additional packages will be installed: libc6 @@ -277,11 +277,11 @@ Inst depender-x64 (1 unstable [amd64]) Conf libc6 (1 unstable [amd64]) Conf depender-x64 (1 unstable [amd64])' aptget install depender-x64 -s -testequal 'Reading package lists... +testfailureequal 'Reading package lists... Building dependency tree... E: Unable to locate package depender-x64:i386' aptget install depender-x64:i386 -s -testequal 'Reading package lists... +testsuccessequal 'Reading package lists... Building dependency tree... The following NEW packages will be installed: foo-native-depender @@ -289,7 +289,7 @@ The following NEW packages will be installed: Inst foo-native-depender (1 unstable [amd64]) Conf foo-native-depender (1 unstable [amd64])' aptget install foo-native-depender -s -testequal 'Reading package lists... +testsuccessequal 'Reading package lists... Building dependency tree... The following packages will be REMOVED: libold:i386 @@ -300,7 +300,7 @@ Remv libold:i386 [1] Inst breaker-x32 (1 unstable [amd64]) Conf breaker-x32 (1 unstable [amd64])' aptget install breaker-x32:amd64 -s -testequal 'Reading package lists... +testsuccessequal 'Reading package lists... Building dependency tree... The following packages will be REMOVED: libold @@ -311,7 +311,7 @@ Remv libold [1] Inst breaker-x64 (1 unstable [amd64]) Conf breaker-x64 (1 unstable [amd64])' aptget install breaker-x64:amd64 -s -testequal 'Reading package lists... +testfailureequal 'Reading package lists... Building dependency tree... Some packages could not be installed. This may mean that you have requested an impossible situation or if you are using the unstable |