Просмотр исходного кода

* cmdline/apt-get.cc:
- if apt-get source foo=version or foo/distro can not be found,
error out (LP: #502641)
* apt-pkg/indexfile.cc:
- deal correctly with three letter langcodes (LP: #391409)

Michael Vogt лет назад: 16
Родитель
Сommit
d92dd27135
3 измененных файлов с 25 добавлено и 10 удалено
  1. 13 5
      apt-pkg/indexfile.cc
  2. 7 5
      cmdline/apt-get.cc
  3. 5 0
      debian/changelog

+ 13 - 5
apt-pkg/indexfile.cc

@@ -89,8 +89,11 @@ bool pkgIndexFile::TranslationsAvailable()
 
 bool pkgIndexFile::CheckLanguageCode(const char *Lang)
 {
-  if (strlen(Lang) == 2 || (strlen(Lang) == 5 && Lang[2] == '_'))
-    return true;
+  if (strlen(Lang) == 2 || 
+      strlen(Lang) == 3 ||
+      (strlen(Lang) > 3 && Lang[3] == '_') ||
+      (strlen(Lang) == 5 && Lang[2] == '_'))
+  return true;
 
   if (strcmp(Lang,"C") != 0)
     _error->Warning("Wrong language code %s", Lang);
@@ -112,13 +115,18 @@ string pkgIndexFile::LanguageCode()
      // we have a mapping of the language codes that contains all the language
      // codes that need the country code as well 
      // (like pt_BR, pt_PT, sv_SE, zh_*, en_*)
-     const char *need_full_langcode[] = { "pt","sv","zh","en", NULL };
+     const char *need_full_langcode[] = { "cs_", 
+					  "en_", 
+					  "pt_",
+					  "sv_",
+					  "zh_", 
+					  NULL };
      for(const char **s = need_full_langcode;*s != NULL; s++)
 	if(lang.find(*s) == 0)
 	   return lang.substr(0,5);
      
-     if(lang.size() > 2)
-	return lang.substr(0,2);
+     if(lang.find("_") != lang.npos)
+	return lang.substr(0, lang.find("_"));
      else
 	return lang;
   }

+ 7 - 5
cmdline/apt-get.cc

@@ -1317,9 +1317,11 @@ pkgSrcRecords::Parser *FindSrc(const char *Name,pkgRecords &Recs,
 	 if (Src.empty() == true) 
 	 {
 	    // Sources files have no codename information
-	    if (VerTag.empty() == true && DefRel.empty() == false)
-	       _error->Warning(_("Ignore unavailable target release '%s' of package '%s'"), DefRel.c_str(), TmpSrc.c_str());
-	    DefRel.clear();
+	    if (VerTag.empty() == true && DefRel.empty() == false) 
+	    {
+	       _error->Error(_("Ignore unavailable target release '%s' of package '%s'"), DefRel.c_str(), TmpSrc.c_str());
+	       return 0;
+	    }
 	 }
       }
       if (Src.empty() == true)
@@ -1386,8 +1388,8 @@ pkgSrcRecords::Parser *FindSrc(const char *Name,pkgRecords &Recs,
       if (Last != 0 || VerTag.empty() == true)
 	 break;
       //if (VerTag.empty() == false && Last == 0)
-      _error->Warning(_("Ignore unavailable version '%s' of package '%s'"), VerTag.c_str(), TmpSrc.c_str());
-      VerTag.clear();
+      _error->Error(_("Ignore unavailable version '%s' of package '%s'"), VerTag.c_str(), TmpSrc.c_str());
+      return 0;
    }
 
    if (Last == 0 || Last->Jump(Offset) == false)

+ 5 - 0
debian/changelog

@@ -12,6 +12,11 @@ apt (0.7.25.3ubuntu2) UNRELEASED; urgency=low
   * cmdline/apt-mark:
     - show error on incorrect aguments (LP: #517917), thanks to
       Torsten Spindler
+  * cmdline/apt-get.cc:
+    - if apt-get source foo=version or foo/distro can not be found,
+      error out (LP: #502641)
+  * apt-pkg/indexfile.cc:
+    - deal correctly with three letter langcodes (LP: #391409)
 
   [ Robert Collins ]
   * Change the package index Info methods to allow apt-cache policy to be