#include <apt-pkg/pkgcachegen.h>
#include <apt-pkg/cacheiterators.h>
#include <apt-pkg/srcrecords.h>
+#include <apt-pkg/strutl.h>
#include <apt-pkg/progress.h>
+#include <apt-pkg/deblistparser.h>
#include <apt-pkg/macros.h>
-#include <apt-pkg/deblistparser.h>
+#include <apt-pkg/debindexfile.h>
-#include <sys/types.h>
#include <sys/stat.h>
-#include <unistd.h>
#include <string>
#include <vector>
}
/*}}}*/
// IndexFile::ArchiveInfo - Stub /*{{{*/
-std::string pkgIndexFile::ArchiveInfo(pkgCache::VerIterator const &/*Ver*/) const
+std::string pkgIndexFile::ArchiveInfo(pkgCache::VerIterator const &Ver) const
{
+ debDebPkgFileIndex const * const debfile = dynamic_cast<debDebPkgFileIndex const*>(this);
+ if (debfile != nullptr)
+ return debfile->ArchiveInfo_impl(Ver);
return std::string();
}
/*}}}*/
}
/*}}}*/
// IndexFile::TranslationsAvailable - Check if will use Translation /*{{{*/
-// ---------------------------------------------------------------------
-/* */
bool pkgIndexFile::TranslationsAvailable() {
return (APT::Configuration::getLanguages().empty() != true);
}
/*}}}*/
// IndexFile::CheckLanguageCode - Check the Language Code /*{{{*/
-// ---------------------------------------------------------------------
-/* No intern need for this method anymore as the check for correctness
- is already done in getLanguages(). Note also that this check is
- rather bad (doesn't take three character like ast into account).
- TODO: Remove method with next API break */
-APT_DEPRECATED bool pkgIndexFile::CheckLanguageCode(const char * const Lang)
+bool pkgIndexFile::CheckLanguageCode(const char * const Lang)
{
if (strlen(Lang) == 2 || (strlen(Lang) == 5 && Lang[2] == '_'))
return true;
}
/*}}}*/
// IndexFile::LanguageCode - Return the Language Code /*{{{*/
-// ---------------------------------------------------------------------
-/* As we have now possibly more than one LanguageCode this method is
- supersided by a) private classmembers or b) getLanguages().
- TODO: Remove method with next API break */
-APT_DEPRECATED std::string pkgIndexFile::LanguageCode() {
+std::string pkgIndexFile::LanguageCode() {
+APT_IGNORE_DEPRECATED_PUSH
if (TranslationsAvailable() == false)
return "";
return APT::Configuration::getLanguages()[0];
+APT_IGNORE_DEPRECATED_POP
}
/*}}}*/
APT_CASE(ARCHITECTURE);
APT_CASE(BASE_URI);
APT_CASE(REPO_URI);
+ APT_CASE(IDENTIFIER);
APT_CASE(TARGET_OF);
APT_CASE(CREATED_BY);
+ APT_CASE(FALLBACK_OF);
+ APT_CASE(PDIFFS);
+ APT_CASE(DEFAULTENABLED);
+ APT_CASE(COMPRESSIONTYPES);
+ APT_CASE(SOURCESENTRY);
+ APT_CASE(BY_HASH);
+ APT_CASE(KEEPCOMPRESSEDAS);
+ APT_CASE(ALLOW_INSECURE);
+ APT_CASE(ALLOW_WEAK);
+ APT_CASE(ALLOW_DOWNGRADE_TO_INSECURE);
#undef APT_CASE
- case FILENAME: return _config->FindDir("Dir::State::lists") + URItoFileName(URI);
+ case FILENAME:
+ {
+ auto const M = Options.find("FILENAME");
+ if (M == Options.end())
+ return _config->FindDir("Dir::State::lists") + URItoFileName(URI);
+ return M->second;
+ }
case EXISTING_FILENAME:
std::string const filename = Option(FILENAME);
- std::vector<std::string> const types = APT::Configuration::getCompressionTypes();
+ std::vector<std::string> const types = VectorizeString(Option(COMPRESSIONTYPES), ' ');
for (std::vector<std::string>::const_iterator t = types.begin(); t != types.end(); ++t)
{
if (t->empty())
return M->second;
}
/*}}}*/
+bool IndexTarget::OptionBool(OptionKeys const EnumKey) const /*{{{*/
+{
+ return StringToBool(Option(EnumKey), false);
+}
+ /*}}}*/
std::string IndexTarget::Format(std::string format) const /*{{{*/
{
for (std::map<std::string, std::string>::const_iterator O = Options.begin(); O != Options.end(); ++O)
if (FileExists(s))
return s;
- std::vector<std::string> types = APT::Configuration::getCompressionTypes();
+ std::vector<std::string> const types = VectorizeString(Target.Option(IndexTarget::COMPRESSIONTYPES), ' ');
for (std::vector<std::string>::const_iterator t = types.begin(); t != types.end(); ++t)
{
std::string p = s + '.' + *t;
return Target.Description;
}
-pkgDebianIndexRealFile::pkgDebianIndexRealFile(std::string const &File, bool const Trusted) :/*{{{*/
- pkgDebianIndexFile(Trusted), d(NULL), File(flAbsPath(File))
+pkgDebianIndexRealFile::pkgDebianIndexRealFile(std::string const &pFile, bool const Trusted) :/*{{{*/
+ pkgDebianIndexFile(Trusted), d(NULL)
{
+ if (pFile.empty())
+ ;
+ else if (pFile == "/nonexistent/stdin")
+ File = pFile;
+ else
+ File = flAbsPath(pFile);
}
/*}}}*/
// IndexRealFile::Size - Return the size of the index /*{{{*/
}
bool pkgDebianIndexRealFile::OpenListFile(FileFd &Pkg, std::string const &FileName)/*{{{*/
{
- if (Pkg.Open(FileName, FileFd::ReadOnly, FileFd::None) == false)
+ if (Pkg.Open(FileName, FileFd::ReadOnly, FileFd::Extension) == false)
return _error->Error("Problem opening %s",FileName.c_str());
return true;
}
pkgCacheListParser * pkgDebianIndexFile::CreateListParser(FileFd &Pkg)
{
if (Pkg.IsOpen() == false)
- return NULL;
+ return nullptr;
_error->PushToStack();
pkgCacheListParser * const Parser = new debListParser(&Pkg);
bool const newError = _error->PendingError();
_error->MergeWithStack();
- return newError ? NULL : Parser;
+ if (newError)
+ {
+ delete Parser;
+ return nullptr;
+ }
+ else
+ return Parser;
}
bool pkgDebianIndexFile::Merge(pkgCacheGenerator &Gen,OpProgress * const Prog)
{
_error->PushToStack();
std::unique_ptr<pkgCacheListParser> Parser(CreateListParser(Pkg));
bool const newError = _error->PendingError();
+ _error->MergeWithStack();
if (newError == false && Parser == nullptr)
return true;
if (Parser == NULL)