Bug #339402 - Ensure valid repo name.
authorZac Medico <zmedico@gentoo.org>
Sat, 2 Oct 2010 17:00:18 +0000 (10:00 -0700)
committerZac Medico <zmedico@gentoo.org>
Sat, 2 Oct 2010 17:00:18 +0000 (10:00 -0700)
pym/portage/repository/config.py

index acaec70bb3f7d495722ceb581af7adef7191739a..0e2507a8225de3ae77e6616e33ea125201b68f53 100644 (file)
@@ -3,6 +3,7 @@
 
 import codecs
 import logging
+import re
 
 try:
        from configparser import SafeConfigParser, ParsingError
@@ -16,6 +17,8 @@ from portage.localization import _
 from portage import _unicode_encode
 from portage import _encodings
 
+_repo_name_sub_re = re.compile(r'[^\w-]')
+
 class RepoConfig(object):
        """Stores config of one repository"""
 
@@ -72,7 +75,21 @@ class RepoConfig(object):
                missing = True
                if self.location is not None:
                        name, missing = self._read_repo_name(self.location)
+                       # We must ensure that the name conforms to PMS 3.1.5
+                       # in order to avoid InvalidAtom exceptions when we
+                       # use it to generate atoms.
+                       name = _repo_name_sub_re.sub(' ', name.strip())
                        name = '-'.join(name.split())
+                       name = name.lstrip('-')
+                       if not name:
+                               # name only contains invalid characters
+                               name = "x-" + os.path.basename(self.location)
+                               name = _repo_name_sub_re.sub(' ', name.strip())
+                               name = '-'.join(name.split())
+                               name = name.lstrip('-')
+                               # If basename only contains whitespace then the
+                               # end result is name = 'x'.
+
                elif name == "DEFAULT": 
                        missing = False
                self.name = name