]> git.saurik.com Git - apt.git/blobdiff - apt-pkg/indexfile.cc
rred: If there were I/O errors, fail
[apt.git] / apt-pkg / indexfile.cc
index db57faf07db852b3e6e2ef2d67162d337305be68..657cdfb365dc64fecbcd2105f77ab5d6169fafc8 100644 (file)
 #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/stat.h>
 
@@ -66,8 +67,11 @@ pkgIndexFile::pkgIndexFile(bool const Trusted) :                     /*{{{*/
 }
                                                                        /*}}}*/
 // 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();
 }
                                                                        /*}}}*/
@@ -85,19 +89,12 @@ std::string pkgIndexFile::SourceInfo(pkgSrcRecords::Parser const &/*Record*/,
 }
                                                                        /*}}}*/
 // 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;
@@ -109,14 +106,12 @@ APT_DEPRECATED bool pkgIndexFile::CheckLanguageCode(const char * const Lang)
 }
                                                                        /*}}}*/
 // 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
 }
                                                                        /*}}}*/
 
@@ -148,6 +143,8 @@ std::string IndexTarget::Option(OptionKeys const EnumKey) const             /*{{{*/
       APT_CASE(DEFAULTENABLED);
       APT_CASE(COMPRESSIONTYPES);
       APT_CASE(SOURCESENTRY);
+      APT_CASE(BY_HASH);
+      APT_CASE(KEEPCOMPRESSEDAS);
 #undef APT_CASE
       case FILENAME: return _config->FindDir("Dir::State::lists") + URItoFileName(URI);
       case EXISTING_FILENAME:
@@ -267,9 +264,15 @@ 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.empty())
+      ;
+   else if (pFile == "/nonexistent/stdin")
+      File = pFile;
+   else
+      File = flAbsPath(pFile);
 }
                                                                        /*}}}*/
 // IndexRealFile::Size - Return the size of the index                  /*{{{*/
@@ -338,6 +341,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)