diff options
| author | Julian Andres Klode <julian.klode@canonical.com> | 2025-02-17 21:33:30 +0100 |
|---|---|---|
| committer | Julian Andres Klode <julian.klode@canonical.com> | 2025-02-18 10:56:45 +0100 |
| commit | e8b240eb3aab7e2584e245f03700ede30a3fc23a (patch) | |
| tree | 4f191f0a9b367adfdbd5bb011c3048486dee1a7a /apt-pkg/depcache.cc | |
| parent | f82dcd7e4ebb3f70d28e9feb3621676f8c0cc024 (diff) | |
refactor: Deduplicate and Move SectionInSubTree to Configuration
Deduplicate the copies in a central one, mark it unavailable to
external users.
Diffstat (limited to 'apt-pkg/depcache.cc')
| -rw-r--r-- | apt-pkg/depcache.cc | 42 |
1 files changed, 4 insertions, 38 deletions
diff --git a/apt-pkg/depcache.cc b/apt-pkg/depcache.cc index b66f2bc66..970b4c01d 100644 --- a/apt-pkg/depcache.cc +++ b/apt-pkg/depcache.cc @@ -68,40 +68,6 @@ class DefaultRootSetFunc2 : public pkgDepCache::DefaultRootSetFunc }; /*}}}*/ -// helper for Install-Recommends-Sections and Never-MarkAuto-Sections /*{{{*/ -// FIXME: Has verbatim copy in cmdline/apt-mark.cc -static bool ConfigValueInSubTree(const char* SubTree, std::string_view const needle) -{ - if (needle.empty()) - return false; - Configuration::Item const *Opts = _config->Tree(SubTree); - if (Opts != nullptr && Opts->Child != nullptr) - { - Opts = Opts->Child; - for (; Opts != nullptr; Opts = Opts->Next) - { - if (Opts->Value.empty()) - continue; - if (needle == Opts->Value) - return true; - } - } - return false; -} -static bool SectionInSubTree(char const * const SubTree, std::string_view Needle) -{ - if (ConfigValueInSubTree(SubTree, Needle)) - return true; - auto const sub = Needle.rfind('/'); - if (sub == std::string_view::npos) - { - std::string special{"/"}; - special.append(Needle); - return ConfigValueInSubTree(SubTree, special); - } - return ConfigValueInSubTree(SubTree, Needle.substr(sub + 1)); -} - /*}}}*/ pkgDepCache::ActionGroup::ActionGroup(pkgDepCache &cache) : /*{{{*/ d(NULL), cache(cache), released(false) { @@ -1068,7 +1034,7 @@ bool pkgDepCache::MarkDelete(PkgIterator const &Pkg, bool rPurge, // We do not check for or-groups here as we don't know which package takes care of // providing the feature the user likes e.g.: browser1 | browser2 | browser3 // Temporary removals are effected by this as well, which is bad, but unlikely in practice - bool const PinNeverMarkAutoSection = (PV->Section != 0 && SectionInSubTree("APT::Never-MarkAuto-Sections", PV.Section())); + bool const PinNeverMarkAutoSection = (PV->Section != 0 && _config->SectionInSubTree("APT::Never-MarkAuto-Sections", PV.Section())); if (PinNeverMarkAutoSection) { for (DepIterator D = PV.DependsList(); D.end() != true; ++D) @@ -1782,8 +1748,8 @@ bool pkgDepCache::MarkInstall(PkgIterator const &Pkg, bool AutoInst, VerIterator const CurVer = Pkg.CurrentVer(); if (not CurVer.end() && CurVer->Section != 0 && strcmp(CurVer.Section(), PV.Section()) != 0) { - bool const CurVerInMoveSection = SectionInSubTree("APT::Move-Autobit-Sections", CurVer.Section()); - bool const InstVerInMoveSection = SectionInSubTree("APT::Move-Autobit-Sections", PV.Section()); + bool const CurVerInMoveSection = _config->SectionInSubTree("APT::Move-Autobit-Sections", CurVer.Section()); + bool const InstVerInMoveSection = _config->SectionInSubTree("APT::Move-Autobit-Sections", PV.Section()); return (not CurVerInMoveSection && InstVerInMoveSection); } return false; @@ -2275,7 +2241,7 @@ bool pkgDepCache::Policy::IsImportantDep(DepIterator const &Dep) const // FIXME: this is a meant as a temporary solution until the // recommends are cleaned up const char *sec = Dep.ParentVer().Section(); - if (sec && SectionInSubTree("APT::Install-Recommends-Sections", sec)) + if (sec && _config->SectionInSubTree("APT::Install-Recommends-Sections", sec)) return true; } else if(Dep->Type == pkgCache::Dep::Suggests) |
