summaryrefslogtreecommitdiff
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
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…
-rw-r--r--apt-pkg/deb/deblistparser.cc16
-rw-r--r--doc/examples/configure-index2
2 files changed, 15 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++);
diff --git a/doc/examples/configure-index b/doc/examples/configure-index
index f07302efd..f08a42ec7 100644
--- a/doc/examples/configure-index
+++ b/doc/examples/configure-index
@@ -432,6 +432,8 @@ Debug
}
+pkgCacheGen::Essential "native"; // other modes: all, none, installed
+
/* Whatever you do, do not use this configuration file!! Take out ONLY
the portions you need! */
This Is Not A Valid Config File