merged from the debian-sid branch
[ntk/apt.git] / apt-pkg / aptconfiguration.cc
index 0fd470e..6537756 100644 (file)
@@ -144,7 +144,7 @@ std::vector<std::string> const Configuration::getLanguages(bool const &All,
        if (D != 0) {
                builtin.push_back("none");
                for (struct dirent *Ent = readdir(D); Ent != 0; Ent = readdir(D)) {
-                       string const name = Ent->d_name;
+                       string const name = SubstVar(Ent->d_name, "%5f", "_");
                        size_t const foundDash = name.rfind("-");
                        size_t const foundUnderscore = name.rfind("_", foundDash);
                        if (foundDash == string::npos || foundUnderscore == string::npos ||
@@ -234,17 +234,21 @@ std::vector<std::string> const Configuration::getLanguages(bool const &All,
        // override the configuration settings vector of languages.
        string const forceLang = _config->Find("Acquire::Languages","");
        if (forceLang.empty() == false) {
-               if (forceLang == "environment") {
-                       codes = environment;
-               } else if (forceLang != "none")
-                       codes.push_back(forceLang);
-               else //if (forceLang == "none")
-                       builtin.clear();
-               allCodes = codes;
-               for (std::vector<string>::const_iterator b = builtin.begin();
-                    b != builtin.end(); ++b)
-                       if (std::find(allCodes.begin(), allCodes.end(), *b) == allCodes.end())
-                               allCodes.push_back(*b);
+               if (forceLang == "none") {
+                       codes.clear();
+                       allCodes.clear();
+                       allCodes.push_back("none");
+               } else {
+                       if (forceLang == "environment")
+                               codes = environment;
+                       else
+                               codes.push_back(forceLang);
+                       allCodes = codes;
+                       for (std::vector<string>::const_iterator b = builtin.begin();
+                            b != builtin.end(); ++b)
+                               if (std::find(allCodes.begin(), allCodes.end(), *b) == allCodes.end())
+                                       allCodes.push_back(*b);
+               }
                if (All == true)
                        return allCodes;
                else
@@ -315,6 +319,17 @@ std::vector<std::string> const Configuration::getLanguages(bool const &All,
                return codes;
 }
                                                                        /*}}}*/
+// checkLanguage - are we interested in the given Language?            /*{{{*/
+bool const Configuration::checkLanguage(std::string Lang, bool const All) {
+       // the empty Language is always interesting as it is the original
+       if (Lang.empty() == true)
+               return true;
+       // filenames are encoded, so undo this
+       Lang = SubstVar(Lang, "%5f", "_");
+       std::vector<std::string> const langs = getLanguages(All, true);
+       return (std::find(langs.begin(), langs.end(), Lang) != langs.end());
+}
+                                                                       /*}}}*/
 // getArchitectures - Return Vector of prefered Architectures          /*{{{*/
 std::vector<std::string> const Configuration::getArchitectures(bool const &Cached) {
        using std::string;