]>
git.saurik.com Git - apt.git/blob - apt-pkg/indexfile.cc
   1 // -*- mode: cpp; mode: fold -*- 
   3 // $Id: indexfile.cc,v 1.2.2.1 2003/12/24 23:09:17 mdz Exp $ 
   4 /* ###################################################################### 
   6    Index File - Abstraction for an index of archive/souce file. 
   8    ##################################################################### */ 
  10 // Include Files                                                        /*{{{*/ 
  13 #include <apt-pkg/configuration.h> 
  14 #include <apt-pkg/indexfile.h> 
  15 #include <apt-pkg/error.h> 
  16 #include <apt-pkg/fileutl.h> 
  17 #include <apt-pkg/aptconfiguration.h> 
  18 #include <apt-pkg/pkgcache.h> 
  19 #include <apt-pkg/cacheiterators.h> 
  20 #include <apt-pkg/srcrecords.h> 
  21 #include <apt-pkg/macros.h> 
  29 // Global list of Item supported 
  30 static  pkgIndexFile::Type 
*ItmList
[10]; 
  31 pkgIndexFile::Type 
**pkgIndexFile::Type::GlobalList 
= ItmList
; 
  32 unsigned long pkgIndexFile::Type::GlobalListLen 
= 0; 
  34 // Type::Type - Constructor                                             /*{{{*/ 
  35 // --------------------------------------------------------------------- 
  37 pkgIndexFile::Type::Type() 
  39    ItmList
[GlobalListLen
] = this; 
  44 // Type::GetType - Locate the type by name                              /*{{{*/ 
  45 // --------------------------------------------------------------------- 
  47 pkgIndexFile::Type 
*pkgIndexFile::Type::GetType(const char *Type
) 
  49    for (unsigned I 
= 0; I 
!= GlobalListLen
; I
++) 
  50       if (strcmp(GlobalList
[I
]->Label
,Type
) == 0) 
  55 pkgIndexFile::pkgIndexFile(bool Trusted
) :                              /*{{{*/ 
  60 // IndexFile::ArchiveInfo - Stub                                        /*{{{*/ 
  61 std::string 
pkgIndexFile::ArchiveInfo(pkgCache::VerIterator 
/*Ver*/) const 
  66 // IndexFile::FindInCache - Stub                                        /*{{{*/ 
  67 pkgCache::PkgFileIterator 
pkgIndexFile::FindInCache(pkgCache 
&Cache
) const 
  69    return pkgCache::PkgFileIterator(Cache
); 
  72 // IndexFile::SourceIndex - Stub                                        /*{{{*/ 
  73 std::string 
pkgIndexFile::SourceInfo(pkgSrcRecords::Parser 
const &/*Record*/, 
  74                                 pkgSrcRecords::File 
const &/*File*/) const 
  79 // IndexFile::TranslationsAvailable - Check if will use Translation     /*{{{*/ 
  80 // --------------------------------------------------------------------- 
  82 bool pkgIndexFile::TranslationsAvailable() { 
  83         return (APT::Configuration::getLanguages().empty() != true); 
  86 // IndexFile::CheckLanguageCode - Check the Language Code               /*{{{*/ 
  87 // --------------------------------------------------------------------- 
  88 /* No intern need for this method anymore as the check for correctness 
  89    is already done in getLanguages(). Note also that this check is 
  90    rather bad (doesn't take three character like ast into account). 
  91    TODO: Remove method with next API break */ 
  92 APT_DEPRECATED 
bool pkgIndexFile::CheckLanguageCode(const char *Lang
) 
  94   if (strlen(Lang
) == 2 || (strlen(Lang
) == 5 && Lang
[2] == '_')) 
  97   if (strcmp(Lang
,"C") != 0) 
  98     _error
->Warning("Wrong language code %s", Lang
); 
 103 // IndexFile::LanguageCode - Return the Language Code                   /*{{{*/ 
 104 // --------------------------------------------------------------------- 
 105 /* As we have now possibly more than one LanguageCode this method is 
 106    supersided by a) private classmembers or b) getLanguages(). 
 107    TODO: Remove method with next API break */ 
 108 APT_DEPRECATED 
std::string 
pkgIndexFile::LanguageCode() { 
 109         if (TranslationsAvailable() == false) 
 111         return APT::Configuration::getLanguages()[0]; 
 115 // IndexTarget - Constructor                                            /*{{{*/ 
 116 IndexTarget::IndexTarget(std::string 
const &MetaKey
, std::string 
const &ShortDesc
, 
 117       std::string 
const &LongDesc
, std::string 
const &URI
, bool const IsOptional
, 
 118       std::map
<std::string
, std::string
> const &Options
) : 
 119    URI(URI
), Description(LongDesc
), ShortDesc(ShortDesc
), MetaKey(MetaKey
), IsOptional(IsOptional
), Options(Options
) 
 123 std::string 
IndexTarget::Option(std::string 
const &Key
) const           /*{{{*/ 
 125    std::map
<std::string
,std::string
>::const_iterator 
const M 
= Options
.find(Key
); 
 126    if (M 
== Options
.end()) 
 132 pkgIndexTargetFile::pkgIndexTargetFile(IndexTarget 
const &Target
, bool const Trusted
) :/*{{{*/ 
 133    pkgIndexFile(Trusted
), Target(Target
) 
 137 std::string 
pkgIndexTargetFile::ArchiveURI(std::string File
) const/*{{{*/ 
 139    return Target
.Option("REPO_URI") + File
; 
 142 std::string 
pkgIndexTargetFile::Describe(bool Short
) const              /*{{{*/ 
 145       return Target
.Description
; 
 146    return Target
.Description 
+ " (" + IndexFileName() + ")"; 
 149 std::string 
pkgIndexTargetFile::IndexFileName() const                   /*{{{*/ 
 151    std::string 
const s 
=_config
->FindDir("Dir::State::lists") + URItoFileName(Target
.URI
); 
 155    std::vector
<std::string
> types 
= APT::Configuration::getCompressionTypes(); 
 156    for (std::vector
<std::string
>::const_iterator t 
= types
.begin(); t 
!= types
.end(); ++t
) 
 158       std::string p 
= s 
+ '.' + *t
; 
 165 unsigned long pkgIndexTargetFile::Size() const                          /*{{{*/ 
 167    unsigned long size 
= 0; 
 169    /* we need to ignore errors here; if the lists are absent, just return 0 */ 
 170    _error
->PushToStack(); 
 172    FileFd 
f(IndexFileName(), FileFd::ReadOnly
, FileFd::Extension
); 
 176    if (_error
->PendingError() == true) 
 178    _error
->RevertToStack(); 
 183 bool pkgIndexTargetFile::Exists() const                                 /*{{{*/ 
 185    return FileExists(IndexFileName());