summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorDavid Kalnischkies <david@kalnischkies.de>2015-09-05 12:58:04 +0200
committerDavid Kalnischkies <david@kalnischkies.de>2015-09-14 15:22:18 +0200
commitf6ce7ffce526432a855166074332f97b37ad98db (patch)
tree104eb431835c1cc1c7f6957fc27f3f8fada31976
parent1501a2c9d8672775bc3f706a17ee1a4a534ca1dd (diff)
store ':any' pseudo-packages with 'any' as architecture
Previously we had python:any:amd64, python:any:i386, … in the cache and the dependencies of an amd64 package would be on python:any:amd64, of an i386 on python:any:i386 and so on. That seems like a relatively pointless endeavor given that they will all be provided by the same packages and therefore also a waste of space. Git-Dch: Ignore
-rw-r--r--apt-pkg/deb/deblistparser.cc9
-rw-r--r--apt-pkg/pkgcache.cc2
-rwxr-xr-xtest/integration/test-multiarch-allowed3
3 files changed, 9 insertions, 5 deletions
diff --git a/apt-pkg/deb/deblistparser.cc b/apt-pkg/deb/deblistparser.cc
index 7da908d75..6a802b39f 100644
--- a/apt-pkg/deb/deblistparser.cc
+++ b/apt-pkg/deb/deblistparser.cc
@@ -791,11 +791,16 @@ bool debListParser::ParseDepends(pkgCache::VerIterator &Ver,
return _error->Error("Problem parsing dependency %s",Tag);
size_t const found = Package.rfind(':');
- if (found == string::npos || strcmp(Package.c_str() + found, ":any") == 0)
+ if (found == string::npos)
{
if (NewDepends(Ver,Package,pkgArch,Version,Op,Type) == false)
return false;
}
+ else if (strcmp(Package.c_str() + found, ":any") == 0)
+ {
+ if (NewDepends(Ver,Package,"any",Version,Op,Type) == false)
+ return false;
+ }
else
{
string Arch = Package.substr(found+1, string::npos);
@@ -857,7 +862,7 @@ bool debListParser::ParseProvides(pkgCache::VerIterator &Ver)
if ((Ver->MultiArch & pkgCache::Version::Allowed) == pkgCache::Version::Allowed)
{
string const Package = string(Ver.ParentPkg().Name()).append(":").append("any");
- return NewProvidesAllArch(Ver, Package, Ver.VerStr(), pkgCache::Flag::MultiArchImplicit);
+ return NewProvides(Ver, Package, "any", Ver.VerStr(), pkgCache::Flag::MultiArchImplicit);
}
else if ((Ver->MultiArch & pkgCache::Version::Foreign) == pkgCache::Version::Foreign)
return NewProvidesAllArch(Ver, Ver.ParentPkg().Name(), Ver.VerStr(), pkgCache::Flag::MultiArchImplicit);
diff --git a/apt-pkg/pkgcache.cc b/apt-pkg/pkgcache.cc
index 9d3929cd9..739074910 100644
--- a/apt-pkg/pkgcache.cc
+++ b/apt-pkg/pkgcache.cc
@@ -546,7 +546,7 @@ std::string pkgCache::PkgIterator::FullName(bool const &Pretty) const
{
string fullname = Name();
if (Pretty == false ||
- (strcmp(Arch(), "all") != 0 &&
+ (strcmp(Arch(), "all") != 0 && strcmp(Arch(), "any") != 0 &&
strcmp(Owner->NativeArch(), Arch()) != 0))
return fullname.append(":").append(Arch());
return fullname;
diff --git a/test/integration/test-multiarch-allowed b/test/integration/test-multiarch-allowed
index 2eb479c17..f050c1fd9 100755
--- a/test/integration/test-multiarch-allowed
+++ b/test/integration/test-multiarch-allowed
@@ -126,7 +126,7 @@ The following packages have unmet dependencies:
E: Unable to correct problems, you have held broken packages."
NEEDSFOO2FOREIGN="$BADPREFIX
The following packages have unmet dependencies:
- needsfoover2:i386 : Depends: foo:any:i386 (>= 2)
+ needsfoover2:i386 : Depends: foo:any (>= 2)
E: Unable to correct problems, you have held broken packages."
testfailureequal "$NEEDSFOO2NATIVE" aptget install needsfoover2 -s
testfailureequal "$NEEDSFOO2FOREIGN" aptget install needsfoover2:i386 -s
@@ -153,7 +153,6 @@ E: Unable to correct problems, you have held broken packages." aptget install fo
testfailureequal "$BADPREFIX
The following packages have unmet dependencies:
hatesfooany : Conflicts: foo:any
- Conflicts: foo:any:i386
E: Unable to correct problems, you have held broken packages." aptget install foo:i386 hatesfooany -s
testsuccessequal 'Reading package lists...
Building dependency tree...