summaryrefslogtreecommitdiff
path: root/apt-pkg/deb/deblistparser.cc
diff options
context:
space:
mode:
authorMichael Vogt <michael.vogt@ubuntu.com>2012-09-11 14:32:24 +0200
committerMichael Vogt <michael.vogt@ubuntu.com>2012-09-11 14:32:24 +0200
commitad6946e73ca11f79ffd306b511883131dc7babe6 (patch)
treed6d27694adae0663ab0ee0526e69d07242483415 /apt-pkg/deb/deblistparser.cc
parent4c81d32aada5b78fff4724efb1e039dd429c09f3 (diff)
parent8ec008808cd6083a633685a732dfe9b8a58a89da (diff)
merged from lp:~donkult/apt/sid
Diffstat (limited to 'apt-pkg/deb/deblistparser.cc')
-rw-r--r--apt-pkg/deb/deblistparser.cc22
1 files changed, 18 insertions, 4 deletions
diff --git a/apt-pkg/deb/deblistparser.cc b/apt-pkg/deb/deblistparser.cc
index 12c6ab4c9..b84bd6fdd 100644
--- a/apt-pkg/deb/deblistparser.cc
+++ b/apt-pkg/deb/deblistparser.cc
@@ -645,6 +645,8 @@ bool debListParser::ParseDepends(pkgCache::VerIterator &Ver,
a != Architectures.end(); ++a)
if (NewDepends(Ver,Package,*a,Version,Op,Type) == false)
return false;
+ if (NewDepends(Ver,Package,"none",Version,Op,Type) == false)
+ return false;
}
else if (MultiArchEnabled == true && found != string::npos &&
strcmp(Package.c_str() + found, ":any") != 0)
@@ -658,8 +660,18 @@ bool debListParser::ParseDepends(pkgCache::VerIterator &Ver,
if (NewDepends(Ver,Package,Arch,Version,Op,Type) == false)
return false;
}
- else if (NewDepends(Ver,Package,pkgArch,Version,Op,Type) == false)
- return false;
+ else
+ {
+ if (NewDepends(Ver,Package,pkgArch,Version,Op,Type) == false)
+ return false;
+ if ((Type == pkgCache::Dep::Conflicts ||
+ Type == pkgCache::Dep::DpkgBreaks ||
+ Type == pkgCache::Dep::Replaces) &&
+ NewDepends(Ver, Package,
+ (pkgArch != "none") ? "none" : _config->Find("APT::Architecture"),
+ Version,Op,Type) == false)
+ return false;
+ }
if (Start == Stop)
break;
}
@@ -753,13 +765,15 @@ bool debListParser::Step()
drop the whole section. A missing arch tag only happens (in theory)
inside the Status file, so that is a positive return */
string const Architecture = Section.FindS("Architecture");
- if (Architecture.empty() == true)
- return true;
if (Arch.empty() == true || Arch == "any" || MultiArchEnabled == false)
{
if (APT::Configuration::checkArchitecture(Architecture) == true)
return true;
+ /* parse version stanzas without an architecture only in the status file
+ (and as misfortune bycatch flat-archives) */
+ if ((Arch.empty() == true || Arch == "any") && Architecture.empty() == true)
+ return true;
}
else
{