summaryrefslogtreecommitdiff
path: root/apt-pkg/deb
diff options
context:
space:
mode:
Diffstat (limited to 'apt-pkg/deb')
-rw-r--r--apt-pkg/deb/debmetaindex.cc56
-rw-r--r--apt-pkg/deb/debmetaindex.h15
2 files changed, 48 insertions, 23 deletions
diff --git a/apt-pkg/deb/debmetaindex.cc b/apt-pkg/deb/debmetaindex.cc
index c53b00881..c040b76b9 100644
--- a/apt-pkg/deb/debmetaindex.cc
+++ b/apt-pkg/deb/debmetaindex.cc
@@ -111,6 +111,8 @@ class APT_HIDDEN debReleaseIndexPrivate /*{{{*/
std::vector<std::string> const Languages;
bool const UsePDiffs;
std::string const UseByHash;
+ std::optional<std::vector<std::string>> const include;
+ std::optional<std::vector<std::string>> const exclude;
};
std::vector<debSectionEntry> DebEntries;
@@ -375,6 +377,10 @@ static void GetIndexTargetsFor(char const * const Type, std::string const &URI,
Options.insert(std::make_pair("COMPRESSIONTYPES", CompressionTypes));
Options.insert(std::make_pair("KEEPCOMPRESSEDAS", KeepCompressedAs));
Options.insert(std::make_pair("SOURCESENTRY", E->sourcesEntry));
+ if (auto include = E->include)
+ Options.insert(std::make_pair("INCLUDE", APT::String::Join(*include, " ")));
+ if (auto exclude = E->exclude)
+ Options.insert(std::make_pair("EXCLUDE", APT::String::Join(*exclude, " ")));
bool IsOpt = IsOptional;
{
@@ -425,22 +431,36 @@ std::vector<IndexTarget> debReleaseIndex::GetIndexTargets() const
return IndexTargets;
}
/*}}}*/
-void debReleaseIndex::AddComponent(std::string const &sourcesEntry, /*{{{*/
- bool const isSrc, std::string const &Name,
- std::vector<std::string> const &Targets,
- std::vector<std::string> const &Architectures,
- std::vector<std::string> Languages,
- bool const usePDiffs, std::string const &useByHash)
+bool debReleaseIndex::AddComponent(std::string const &sourcesEntry, /*{{{*/
+ bool const isSrc, std::string const &Name,
+ std::vector<std::string> const &Targets,
+ std::vector<std::string> const &Architectures,
+ std::vector<std::string> Languages,
+ bool const usePDiffs, std::string const &useByHash,
+ std::optional<std::vector<std::string>> const &include,
+ std::optional<std::vector<std::string>> const &exclude)
{
+ if (include && exclude)
+ return _error->Error("Both 'Include' and 'Exclude' specified in %s", sourcesEntry.c_str());
if (Languages.empty() == true)
Languages.push_back("none");
debReleaseIndexPrivate::debSectionEntry const entry = {
- sourcesEntry, Name, Targets, Architectures, Languages, usePDiffs, useByHash
+ sourcesEntry,
+ Name,
+ Targets,
+ Architectures,
+ Languages,
+ usePDiffs,
+ useByHash,
+ include,
+ exclude,
};
if (isSrc)
d->DebSrcEntries.push_back(entry);
else
d->DebEntries.push_back(entry);
+
+ return true;
}
/*}}}*/
std::string debReleaseIndex::ArchiveURI(std::string const &File) const /*{{{*/
@@ -1403,16 +1423,18 @@ class APT_HIDDEN debSLTypeDebian : public pkgSourceList::Type /*{{{*/
}
auto const entry = Options.find("sourceslist-entry");
- Deb->AddComponent(
- entry->second,
- IsSrc,
- Section,
- parsePlusMinusTargetOptions(Name, Options),
- parsePlusMinusArchOptions("arch", Options),
- parsePlusMinusOptions("lang", Options, APT::Configuration::getLanguages(true)),
- UsePDiffs,
- UseByHash
- );
+ if (not Deb->AddComponent(
+ entry->second,
+ IsSrc,
+ Section,
+ parsePlusMinusTargetOptions(Name, Options),
+ parsePlusMinusArchOptions("arch", Options),
+ parsePlusMinusOptions("lang", Options, APT::Configuration::getLanguages(true)),
+ UsePDiffs,
+ UseByHash,
+ getDefaultSetOf("include", Options),
+ getDefaultSetOf("exclude", Options)))
+ return false;
if (Deb->SetTrusted(GetTriStateOption(Options, "trusted")) == false ||
Deb->SetCheckValidUntil(GetTriStateOption(Options, "check-valid-until")) == false ||
diff --git a/apt-pkg/deb/debmetaindex.h b/apt-pkg/deb/debmetaindex.h
index 7a6f1fbb4..712b4ec7f 100644
--- a/apt-pkg/deb/debmetaindex.h
+++ b/apt-pkg/deb/debmetaindex.h
@@ -5,6 +5,7 @@
#include <apt-pkg/metaindex.h>
#include <map>
+#include <optional>
#include <string>
#include <vector>
@@ -63,12 +64,14 @@ class APT_HIDDEN debReleaseIndex : public metaIndex
[[nodiscard]] time_t GetNotBefore() const override APT_PURE;
- void AddComponent(std::string const &sourcesEntry,
- bool const isSrc, std::string const &Name,
- std::vector<std::string> const &Targets,
- std::vector<std::string> const &Architectures,
- std::vector<std::string> Languages,
- bool const usePDiffs, std::string const &useByHash);
+ bool AddComponent(std::string const &sourcesEntry,
+ bool const isSrc, std::string const &Name,
+ std::vector<std::string> const &Targets,
+ std::vector<std::string> const &Architectures,
+ std::vector<std::string> Languages,
+ bool const usePDiffs, std::string const &useByHash,
+ std::optional<std::vector<std::string>> const &include,
+ std::optional<std::vector<std::string>> const &exclude);
};
#endif