From cb1933dfcfb867e4fedf5ec88e5a16deaf912299 Mon Sep 17 00:00:00 2001 From: Michael Vogt Date: Thu, 26 Jul 2007 10:25:10 +0200 Subject: * apt-pkg/depcache.cc: - support a list of sections for: APT::Install-Recommends-Sections APT::Never-MarkAuto-Sections --- apt-pkg/depcache.cc | 37 +++++++++++++++++++++++++++---------- debian/changelog | 9 +++++++++ doc/examples/configure-index | 2 +- 3 files changed, 37 insertions(+), 11 deletions(-) diff --git a/apt-pkg/depcache.cc b/apt-pkg/depcache.cc index 7f5719454..c21872449 100644 --- a/apt-pkg/depcache.cc +++ b/apt-pkg/depcache.cc @@ -27,6 +27,27 @@ #include +// helper for Install-Recommends-Sections and Never-MarkAuto-Sections +static bool +ConfigValueInSubTree(const char* SubTree, const char *needle) +{ + Configuration::Item const *Opts; + Opts = _config->Tree(SubTree); + if (Opts != 0 && Opts->Child != 0) + { + Opts = Opts->Child; + for (; Opts != 0; Opts = Opts->Next) + { + if (Opts->Value.empty() == true) + continue; + if (strcmp(needle, Opts->Value.c_str()) == 0) + return true; + } + } + return false; +} + + pkgDepCache::ActionGroup::ActionGroup(pkgDepCache &cache) : cache(cache), released(false) { @@ -954,11 +975,10 @@ void pkgDepCache::MarkInstall(PkgIterator const &Pkg,bool AutoInst, << " as dep of " << Pkg.Name() << std::endl; // now check if we should consider it a automatic dependency or not - string sec = _config->Find("APT::Never-MarkAuto-Section",""); - if(Pkg.Section() && (string(Pkg.Section()) == sec)) + if(Pkg.Section() && ConfigValueInSubTree("APT::Never-MarkAuto-Sections", Pkg.Section())) { if(_config->FindB("Debug::pkgDepCache::AutoInstall",false) == true) - std::clog << "Setting NOT as auto-installed because its a direct dep of a package in section " << sec << std::endl; + std::clog << "Setting NOT as auto-installed (direct dep of pkg in APT::Never-MarkAuto-Section)" << std::endl; MarkInstall(InstPkg,true,Depth + 1, true); } else @@ -1131,6 +1151,7 @@ pkgCache::VerIterator pkgDepCache::Policy::GetCandidateVer(PkgIterator Pkg) return Last; } /*}}}*/ + // Policy::IsImportantDep - True if the dependency is important /*{{{*/ // --------------------------------------------------------------------- /* */ @@ -1146,13 +1167,9 @@ bool pkgDepCache::Policy::IsImportantDep(DepIterator Dep) // sections // FIXME: this is a meant as a temporarly solution until the // recommends are cleaned up - string s = _config->Find("APT::Install-Recommends-Section",""); - if(s.size() > 0) - { - const char *sec = Dep.ParentVer().Section(); - if (sec && strcmp(sec, s.c_str()) == 0) - return true; - } + const char *sec = Dep.ParentVer().Section(); + if (sec && ConfigValueInSubTree("APT::Install-Recommends-Sections", sec)) + return true; } else if(Dep->Type == pkgCache::Dep::Suggests) return _config->FindB("APT::Install-Suggests", false); diff --git a/debian/changelog b/debian/changelog index 11cdd22cd..c83dc3a8b 100644 --- a/debian/changelog +++ b/debian/changelog @@ -1,3 +1,12 @@ +apt (0.7.5) UNRELEASED; urgency=low + + * apt-pkg/depcache.cc: + - support a list of sections for: + APT::Install-Recommends-Sections + APT::Never-MarkAuto-Sections + + -- + apt (0.7.4) UNRELEASED; urgency=low [ Michael Vogt ] diff --git a/doc/examples/configure-index b/doc/examples/configure-index index bf086e9c1..ab3657a58 100644 --- a/doc/examples/configure-index +++ b/doc/examples/configure-index @@ -101,7 +101,7 @@ APT Install-Suggests "false"; // consider dependencies of packages in this section manual - Never-MarkAuto-Section "metapackages"; + Never-MarkAuto-Sections {"metapackages"; "universe/metapackages"; }; // Write progress messages on this fd (for stuff like base-config) Status-Fd "-1"; -- cgit v1.2.3