]> git.saurik.com Git - apt.git/commitdiff
use an enum instead of strings as IndexTarget::Option interface
authorDavid Kalnischkies <david@kalnischkies.de>
Thu, 11 Jun 2015 09:59:16 +0000 (11:59 +0200)
committerDavid Kalnischkies <david@kalnischkies.de>
Thu, 11 Jun 2015 09:59:16 +0000 (11:59 +0200)
Strings are easy to typo and we can keep the extensibility we require
here with a simple enum we can append to without endangering ABI.

Git-Dch: Ignore

apt-pkg/deb/debindexfile.cc
apt-pkg/deb/debmetaindex.cc
apt-pkg/indexfile.cc
apt-pkg/indexfile.h

index 3e60423ff95295349eb766aafc26df0f91b2cc98..7aad65c0eefe5f429a486c695954c3b87c486777 100644 (file)
@@ -93,9 +93,9 @@ debPackagesIndex::debPackagesIndex(IndexTarget const &Target, bool const Trusted
 /* This is a shorter version that is designed to be < 60 chars or so */
 string debPackagesIndex::ArchiveInfo(pkgCache::VerIterator Ver) const
 {
 /* This is a shorter version that is designed to be < 60 chars or so */
 string debPackagesIndex::ArchiveInfo(pkgCache::VerIterator Ver) const
 {
-   std::string const Dist = Target.Option("RELEASE");
-   string Res = Target.Option("SITE") + " " + Dist;
-   std::string const Component = Target.Option("COMPONENT");
+   std::string const Dist = Target.Option(IndexTarget::RELEASE);
+   string Res = Target.Option(IndexTarget::SITE) + " " + Dist;
+   std::string const Component = Target.Option(IndexTarget::COMPONENT);
    if (Component.empty() == false)
       Res += "/" + Component;
 
    if (Component.empty() == false)
       Res += "/" + Component;
 
@@ -115,7 +115,7 @@ bool debPackagesIndex::Merge(pkgCacheGenerator &Gen,OpProgress *Prog) const
 {
    string const PackageFile = IndexFileName();
    FileFd Pkg(PackageFile,FileFd::ReadOnly, FileFd::Extension);
 {
    string const PackageFile = IndexFileName();
    FileFd Pkg(PackageFile,FileFd::ReadOnly, FileFd::Extension);
-   debListParser Parser(&Pkg, Target.Option("ARCHITECTURE"));
+   debListParser Parser(&Pkg, Target.Option(IndexTarget::ARCHITECTURE));
 
    if (_error->PendingError() == true)
       return _error->Error("Problem opening %s",PackageFile.c_str());
 
    if (_error->PendingError() == true)
       return _error->Error("Problem opening %s",PackageFile.c_str());
@@ -123,8 +123,8 @@ bool debPackagesIndex::Merge(pkgCacheGenerator &Gen,OpProgress *Prog) const
       Prog->SubProgress(0, Target.Description);
 
 
       Prog->SubProgress(0, Target.Description);
 
 
-   std::string const URI = Target.Option("REPO_URI");
-   std::string Dist = Target.Option("RELEASE");
+   std::string const URI = Target.Option(IndexTarget::REPO_URI);
+   std::string Dist = Target.Option(IndexTarget::RELEASE);
    if (Dist.empty())
       Dist = "/";
    ::URI Tmp(URI);
    if (Dist.empty())
       Dist = "/";
    ::URI Tmp(URI);
@@ -158,7 +158,7 @@ bool debPackagesIndex::Merge(pkgCacheGenerator &Gen,OpProgress *Prog) const
 
       if (_error->PendingError() == true)
         return false;
 
       if (_error->PendingError() == true)
         return false;
-      Parser.LoadReleaseInfo(File, Rel, Target.Option("COMPONENT"));
+      Parser.LoadReleaseInfo(File, Rel, Target.Option(IndexTarget::COMPONENT));
    }
    
    return true;
    }
    
    return true;
index 9108a5097ffbbe3411f7f820207b40ecc67674b9..c05e7cdaeb05ce5447ffcb3bce7caa2b7b3b7c3d 100644 (file)
@@ -306,7 +306,7 @@ std::vector <pkgIndexFile *> *debReleaseIndex::GetIndexFiles()
    bool const istrusted = IsTrusted();
    for (std::vector<IndexTarget>::const_iterator T = Targets.begin(); T != Targets.end(); ++T)
    {
    bool const istrusted = IsTrusted();
    for (std::vector<IndexTarget>::const_iterator T = Targets.begin(); T != Targets.end(); ++T)
    {
-      std::string const TargetName = T->Options.find("CREATED_BY")->second;
+      std::string const TargetName = T->Option(IndexTarget::CREATED_BY);
       if (TargetName == "Packages")
         Indexes->push_back(new debPackagesIndex(*T, istrusted));
       else if (TargetName == "Sources")
       if (TargetName == "Packages")
         Indexes->push_back(new debPackagesIndex(*T, istrusted));
       else if (TargetName == "Sources")
index bbcd9246c16607ac70d6c70db2d98cb2e7df2849..72d35ddcc85597dc1ca2728170eb23f2222e8409 100644 (file)
@@ -120,8 +120,22 @@ IndexTarget::IndexTarget(std::string const &MetaKey, std::string const &ShortDes
 {
 }
                                                                        /*}}}*/
 {
 }
                                                                        /*}}}*/
-std::string IndexTarget::Option(std::string const &Key) const          /*{{{*/
+std::string IndexTarget::Option(OptionKeys const EnumKey) const                /*{{{*/
 {
 {
+   std::string Key;
+   switch (EnumKey)
+   {
+#define APT_CASE(X) case X: Key = #X; break
+      APT_CASE(SITE);
+      APT_CASE(RELEASE);
+      APT_CASE(COMPONENT);
+      APT_CASE(LANGUAGE);
+      APT_CASE(ARCHITECTURE);
+      APT_CASE(BASE_URI);
+      APT_CASE(REPO_URI);
+      APT_CASE(CREATED_BY);
+#undef APT_CASE
+   }
    std::map<std::string,std::string>::const_iterator const M = Options.find(Key);
    if (M == Options.end())
       return "";
    std::map<std::string,std::string>::const_iterator const M = Options.find(Key);
    if (M == Options.end())
       return "";
@@ -136,7 +150,7 @@ pkgIndexTargetFile::pkgIndexTargetFile(IndexTarget const &Target, bool const Tru
                                                                        /*}}}*/
 std::string pkgIndexTargetFile::ArchiveURI(std::string File) const/*{{{*/
 {
                                                                        /*}}}*/
 std::string pkgIndexTargetFile::ArchiveURI(std::string File) const/*{{{*/
 {
-   return Target.Option("REPO_URI") + File;
+   return Target.Option(IndexTarget::REPO_URI) + File;
 }
                                                                        /*}}}*/
 std::string pkgIndexTargetFile::Describe(bool Short) const             /*{{{*/
 }
                                                                        /*}}}*/
 std::string pkgIndexTargetFile::Describe(bool Short) const             /*{{{*/
index e6e429c2c59e0d75c50afc09d20026b0982d1e00..c38cf0bf09149c055bfbccb9c8b81874c9eeeaa0 100644 (file)
@@ -61,14 +61,26 @@ class IndexTarget                                                   /*{{{*/
    /** \brief Is it okay if the file isn't found in the meta index */
    bool IsOptional;
 
    /** \brief Is it okay if the file isn't found in the meta index */
    bool IsOptional;
 
-   /** \brief Target specific options defined by the implementation */
+   /** \brief options with which this target was created
+       Prefer the usage of #Option if at all possible.
+       Beware: Not all of these options are intended for public use */
    std::map<std::string, std::string> Options;
 
    IndexTarget(std::string const &MetaKey, std::string const &ShortDesc,
         std::string const &LongDesc, std::string const &URI, bool const IsOptional,
         std::map<std::string, std::string> const &Options);
 
    std::map<std::string, std::string> Options;
 
    IndexTarget(std::string const &MetaKey, std::string const &ShortDesc,
         std::string const &LongDesc, std::string const &URI, bool const IsOptional,
         std::map<std::string, std::string> const &Options);
 
-   std::string Option(std::string const &Key) const;
+   enum OptionKeys {
+      SITE,
+      RELEASE,
+      COMPONENT,
+      LANGUAGE,
+      ARCHITECTURE,
+      BASE_URI,
+      REPO_URI,
+      CREATED_BY,
+   };
+   std::string Option(OptionKeys const Key) const;
 };
                                                                        /*}}}*/
 
 };
                                                                        /*}}}*/