summaryrefslogtreecommitdiff
path: root/apt-pkg/deb
diff options
context:
space:
mode:
authorDavid Kalnischkies <kalnischkies@gmail.com>2010-03-21 21:48:09 +0100
committerDavid Kalnischkies <kalnischkies@gmail.com>2010-03-21 21:48:09 +0100
commit6bc703c22970055d9e1a1b4e3e0efe74f4cefda5 (patch)
treea9aaede77078c2cf948d2618c5fba117a713af15 /apt-pkg/deb
parentaa85a4e2a7ef7c057d979f4e115f92993e04bbe8 (diff)
Add with pkgCacheGen::Essential a way to control which packages get the
essential flag: * native is the default and will only mark packages of the main arch * all will mark all packages which have these flag in Packages * none will obviously do the opposite * installed will only mark packages which are installed as essential, so it will behave in the same way as dpkg does it. It is mostly needed sometimes for debugging but some users with special needs might like to switch the mode as well under the expense to be on their own…
Diffstat (limited to 'apt-pkg/deb')
-rw-r--r--apt-pkg/deb/deblistparser.cc16
1 files changed, 13 insertions, 3 deletions
diff --git a/apt-pkg/deb/deblistparser.cc b/apt-pkg/deb/deblistparser.cc
index 5c9cf6d4b..947e060e3 100644
--- a/apt-pkg/deb/deblistparser.cc
+++ b/apt-pkg/deb/deblistparser.cc
@@ -255,9 +255,13 @@ bool debListParser::UsePackage(pkgCache::PkgIterator Pkg,
if (Pkg->Section == 0)
Pkg->Section = UniqFindTagWrite("Section");
- // Packages which are not from "our" arch doesn't get the essential flag
+ // Packages which are not from the "native" arch doesn't get the essential flag
+ // in the default "native" mode - it is also possible to mark "all" or "none".
+ // The "installed" mode is handled by ParseStatus(), See #544481 and friends.
string const static myArch = _config->Find("APT::Architecture");
- if (Pkg->Arch != 0 && myArch == Pkg.Arch())
+ string const static essential = _config->Find("pkgCacheGen::Essential", "native");
+ if ((essential == "native" && Pkg->Arch != 0 && myArch == Pkg.Arch()) ||
+ essential == "all")
if (Section.FindFlag("Essential",Pkg->Flags,pkgCache::Flag::Essential) == false)
return false;
if (Section.FindFlag("Important",Pkg->Flags,pkgCache::Flag::Important) == false)
@@ -333,7 +337,13 @@ bool debListParser::ParseStatus(pkgCache::PkgIterator Pkg,
const char *Stop;
if (Section.Find("Status",Start,Stop) == false)
return true;
-
+
+ // UsePackage() is responsible for setting the flag in the default case
+ bool const static essential = _config->Find("pkgCacheGen::Essential", "") == "installed";
+ if (essential == true &&
+ Section.FindFlag("Essential",Pkg->Flags,pkgCache::Flag::Essential) == false)
+ return false;
+
// Isolate the first word
const char *I = Start;
for(; I < Stop && *I != ' '; I++);