summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorDavid Kalnischkies <david@kalnischkies.de>2016-06-03 14:40:06 +0200
committerDavid Kalnischkies <david@kalnischkies.de>2016-06-27 11:57:12 +0200
commit14bed2c0108a99d68f453ff61273d5ae59a5c3f0 (patch)
treed364e61152f0ca9061ad51817f5749e7c4bfbb62
parent4cdc3bf0e24a74b0af45e1cbabfcaebd9d0c3318 (diff)
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.cc29
-rwxr-xr-xtest/integration/test-specific-architecture-dependencies26
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