diff options
author | Julian Andres Klode <julian.klode@canonical.com> | 2019-08-15 13:12:43 +0200 |
---|---|---|
committer | Julian Andres Klode <julian.klode@canonical.com> | 2019-08-15 20:21:34 +0200 |
commit | 083e72a5939d33dc1fd7596aa441a9982332f776 (patch) | |
tree | b50d465b812d8155af0a79e994f0bd7ad8d73534 /apt-pkg | |
parent | c64a85dd7524546864603b955f601bf64c9a4bcf (diff) |
Add ?automatic and ?garbage patterns
These patterns allow you to identify automatically installed
packages, as well as automatically installed packages that are
no longer reachable from the manually installed ones.
Diffstat (limited to 'apt-pkg')
-rw-r--r-- | apt-pkg/cachefilter-patterns.cc | 4 | ||||
-rw-r--r-- | apt-pkg/cachefilter-patterns.h | 26 |
2 files changed, 30 insertions, 0 deletions
diff --git a/apt-pkg/cachefilter-patterns.cc b/apt-pkg/cachefilter-patterns.cc index dd5d741d3..6b506b740 100644 --- a/apt-pkg/cachefilter-patterns.cc +++ b/apt-pkg/cachefilter-patterns.cc @@ -210,8 +210,12 @@ std::unique_ptr<APT::CacheFilter::Matcher> PatternParser::aPattern(std::unique_p if (node->matches("?architecture", 1, 1)) return std::make_unique<APT::CacheFilter::PackageArchitectureMatchesSpecification>(aWord(node->arguments[0])); + if (node->matches("?automatic", 0, 0)) + return std::make_unique<Patterns::PackageIsAutomatic>(file); if (node->matches("?false", 0, 0)) return std::make_unique<APT::CacheFilter::FalseMatcher>(); + if (node->matches("?garbage", 0, 0)) + return std::make_unique<Patterns::PackageIsGarbage>(file); if (node->matches("?name", 1, 1)) return std::make_unique<APT::CacheFilter::PackageNameMatchesRegEx>(aWord(node->arguments[0])); if (node->matches("?not", 1, 1)) diff --git a/apt-pkg/cachefilter-patterns.h b/apt-pkg/cachefilter-patterns.h index 3097ba94b..4c2ef48df 100644 --- a/apt-pkg/cachefilter-patterns.h +++ b/apt-pkg/cachefilter-patterns.h @@ -113,6 +113,32 @@ struct PatternParser std::string aWord(std::unique_ptr<PatternTreeParser::Node> &nodeP); }; +namespace Patterns +{ +using namespace APT::CacheFilter; + +struct PackageIsAutomatic : public PackageMatcher +{ + pkgCacheFile *Cache; + explicit PackageIsAutomatic(pkgCacheFile *Cache) : Cache(Cache) {} + bool operator()(pkgCache::PkgIterator const &Pkg) override + { + assert(Cache != nullptr); + return ((*Cache)[Pkg].Flags & pkgCache::Flag::Auto) != 0; + } +}; + +struct PackageIsGarbage : public PackageMatcher +{ + pkgCacheFile *Cache; + explicit PackageIsGarbage(pkgCacheFile *Cache) : Cache(Cache) {} + bool operator()(pkgCache::PkgIterator const &Pkg) override + { + assert(Cache != nullptr); + return (*Cache)[Pkg].Garbage; + } +}; +} // namespace Patterns } // namespace Internal } // namespace APT #endif |