]> git.saurik.com Git - apt.git/blobdiff - apt-pkg/indexfile.cc
add by-hash sources.list option and document all of by-hash
[apt.git] / apt-pkg / indexfile.cc
index b592ae5a020b80a92cad32c8071e3a3543b5f388..f57b442a3205f2a5fc017901225a6fa0f6f2983a 100644 (file)
 #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/macros.h>
 
 #include <apt-pkg/deblistparser.h>
 
-#include <sys/types.h>
 #include <sys/stat.h>
-#include <unistd.h>
 
 #include <string>
 #include <vector>
@@ -145,11 +144,16 @@ std::string IndexTarget::Option(OptionKeys const EnumKey) const           /*{{{*/
       APT_CASE(REPO_URI);
       APT_CASE(TARGET_OF);
       APT_CASE(CREATED_BY);
+      APT_CASE(PDIFFS);
+      APT_CASE(DEFAULTENABLED);
+      APT_CASE(COMPRESSIONTYPES);
+      APT_CASE(SOURCESENTRY);
+      APT_CASE(BY_HASH);
 #undef APT_CASE
       case FILENAME: return _config->FindDir("Dir::State::lists") + URItoFileName(URI);
       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())
@@ -166,6 +170,11 @@ std::string IndexTarget::Option(OptionKeys const EnumKey) const            /*{{{*/
    return M->second;
 }
                                                                        /*}}}*/
+bool IndexTarget::OptionBool(OptionKeys const EnumKey) const           /*{{{*/
+{
+   return StringToBool(Option(EnumKey));
+}
+                                                                       /*}}}*/
 std::string IndexTarget::Format(std::string format) const              /*{{{*/
 {
    for (std::map<std::string, std::string>::const_iterator O = Options.begin(); O != Options.end(); ++O)
@@ -204,7 +213,7 @@ std::string pkgDebianIndexTargetFile::IndexFileName() const                 /*{{{*/
    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;
@@ -259,9 +268,13 @@ std::string pkgDebianIndexTargetFile::GetProgressDescription() const
    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 == "/nonexistent/stdin")
+      File = pFile;
+   else
+      File = flAbsPath(pFile);
 }
                                                                        /*}}}*/
 // IndexRealFile::Size - Return the size of the index                  /*{{{*/
@@ -316,7 +329,7 @@ pkgCacheListParser * pkgDebianIndexFile::CreateListParser(FileFd &Pkg)
    if (Pkg.IsOpen() == false)
       return NULL;
    _error->PushToStack();
-   pkgCacheListParser * const Parser = new debListParser(&Pkg, GetArchitecture());
+   pkgCacheListParser * const Parser = new debListParser(&Pkg);
    bool const newError = _error->PendingError();
    _error->MergeWithStack();
    return newError ? NULL : Parser;
@@ -330,6 +343,7 @@ 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)