From 566046f403acb3f50df78be93ea3b68b9f2c3e7b Mon Sep 17 00:00:00 2001 From: David Kalnischkies Date: Fri, 25 Mar 2011 20:17:32 +0100 Subject: * apt-pkg/pkgcachegen.cc: - make "all"->"native" an implementation detail of NewPackage rather than rewrite it in higher methods --- apt-pkg/pkgcache.cc | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) (limited to 'apt-pkg/pkgcache.cc') diff --git a/apt-pkg/pkgcache.cc b/apt-pkg/pkgcache.cc index 7014aee22..dbcbd9c26 100644 --- a/apt-pkg/pkgcache.cc +++ b/apt-pkg/pkgcache.cc @@ -321,7 +321,7 @@ pkgCache::PkgIterator pkgCache::GrpIterator::FindPkg(string Arch) const { /* Most of the time the package for our native architecture is the one we add at first to the cache, but this would be the last one we check, so we do it now. */ - if (Arch == "native" || Arch == myArch) { + if (Arch == "native" || Arch == myArch || Arch == "all") { Arch = myArch; pkgCache::Package *Pkg = Owner->PkgP + S->LastPackage; if (stringcasecmp(Arch, Owner->StrP + Pkg->Arch) == 0) -- cgit v1.2.3-70-g09d2 From 60dcec6d513859698177c10dabfc9db184363064 Mon Sep 17 00:00:00 2001 From: David Kalnischkies Date: Mon, 28 Mar 2011 12:29:38 +0200 Subject: * apt-pkg/deb/deblistparser.cc: - create foo:any provides for all architectures for an allowed package --- apt-pkg/deb/deblistparser.cc | 25 +++++++++++++------------ apt-pkg/deb/deblistparser.h | 1 + apt-pkg/pkgcache.cc | 10 +++++----- debian/changelog | 4 +++- 4 files changed, 22 insertions(+), 18 deletions(-) (limited to 'apt-pkg/pkgcache.cc') diff --git a/apt-pkg/deb/deblistparser.cc b/apt-pkg/deb/deblistparser.cc index b79cef41c..4be626741 100644 --- a/apt-pkg/deb/deblistparser.cc +++ b/apt-pkg/deb/deblistparser.cc @@ -632,7 +632,7 @@ bool debListParser::ParseDepends(pkgCache::VerIterator &Ver, while (1) { - Start = ParseDepends(Start,Stop,Package,Version,Op); + Start = ParseDepends(Start,Stop,Package,Version,Op,false,!MultiArchEnabled); if (Start == 0) return _error->Error("Problem parsing dependency %s",Tag); @@ -685,27 +685,28 @@ bool debListParser::ParseProvides(pkgCache::VerIterator &Ver) } } - if (Ver->MultiArch == pkgCache::Version::Allowed || Ver->MultiArch == pkgCache::Version::AllAllowed) + if (MultiArchEnabled == false) + return true; + else if (Ver->MultiArch == pkgCache::Version::Allowed || Ver->MultiArch == pkgCache::Version::AllAllowed) { string const Package = string(Ver.ParentPkg().Name()).append(":").append("any"); - NewProvides(Ver, Package, "any", Ver.VerStr()); + return NewProvidesAllArch(Ver, Package, Ver.VerStr()); } + else if (Ver->MultiArch == pkgCache::Version::Foreign || Ver->MultiArch == pkgCache::Version::AllForeign) + return NewProvidesAllArch(Ver, Ver.ParentPkg().Name(), Ver.VerStr()); - if (Ver->MultiArch != pkgCache::Version::Foreign && Ver->MultiArch != pkgCache::Version::AllForeign) - return true; - - if (MultiArchEnabled == false) - return true; - - string const Package = Ver.ParentPkg().Name(); - string const Version = Ver.VerStr(); + return true; +} + /*}}}*/ +// ListParser::NewProvides - add provides for all architectures /*{{{*/ +bool debListParser::NewProvidesAllArch(pkgCache::VerIterator &Ver, string const &Package, + string const &Version) { for (std::vector::const_iterator a = Architectures.begin(); a != Architectures.end(); ++a) { if (NewProvides(Ver, Package, *a, Version) == false) return false; } - return true; } /*}}}*/ diff --git a/apt-pkg/deb/deblistparser.h b/apt-pkg/deb/deblistparser.h index 06ea73291..d62ce641c 100644 --- a/apt-pkg/deb/deblistparser.h +++ b/apt-pkg/deb/deblistparser.h @@ -40,6 +40,7 @@ class debListParser : public pkgCacheGenerator::ListParser bool ParseDepends(pkgCache::VerIterator &Ver,const char *Tag, unsigned int Type); bool ParseProvides(pkgCache::VerIterator &Ver); + bool NewProvidesAllArch(pkgCache::VerIterator &Ver, string const &Package, string const &Version); static bool GrabWord(string Word,WordList *List,unsigned char &Out); public: diff --git a/apt-pkg/pkgcache.cc b/apt-pkg/pkgcache.cc index dbcbd9c26..c6326abf1 100644 --- a/apt-pkg/pkgcache.cc +++ b/apt-pkg/pkgcache.cc @@ -317,6 +317,11 @@ pkgCache::PkgIterator pkgCache::GrpIterator::FindPkg(string Arch) const { if (unlikely(IsGood() == false || S->FirstPackage == 0)) return PkgIterator(*Owner, 0); + /* If we accept any package we simply return the "first" + package in this group (the last one added). */ + if (Arch == "any") + return PkgIterator(*Owner, Owner->PkgP + S->FirstPackage); + static string const myArch = _config->Find("APT::Architecture"); /* Most of the time the package for our native architecture is the one we add at first to the cache, but this would be the @@ -328,11 +333,6 @@ pkgCache::PkgIterator pkgCache::GrpIterator::FindPkg(string Arch) const { return PkgIterator(*Owner, Pkg); } - /* If we accept any package we simply return the "first" - package in this group (the last one added). */ - if (Arch == "any") - return PkgIterator(*Owner, Owner->PkgP + S->FirstPackage); - /* Iterate over the list to find the matching arch unfortunately this list includes "package noise" (= different packages with same calculated hash), diff --git a/debian/changelog b/debian/changelog index 8e15a8060..774975050 100644 --- a/debian/changelog +++ b/debian/changelog @@ -27,8 +27,10 @@ apt (0.8.13.1) UNRELEASED; urgency=low if non is specified with APT::Architectures (Closes: #612958) * cmdline/apt-get.cc: - do not show simulation notice for non-root commands (Closes: #619072) + * apt-pkg/deb/deblistparser.cc: + - create foo:any provides for all architectures for an allowed package - -- David Kalnischkies Sat, 26 Mar 2011 12:53:00 +0100 + -- David Kalnischkies Mon, 28 Mar 2011 12:28:21 +0200 apt (0.8.13) unstable; urgency=low -- cgit v1.2.3-70-g09d2