When regenerating USE_EXPAND in config.setcpv(), improve performance by
authorZac Medico <zmedico@gentoo.org>
Mon, 14 Apr 2008 16:32:19 +0000 (16:32 -0000)
committerZac Medico <zmedico@gentoo.org>
Mon, 14 Apr 2008 16:32:19 +0000 (16:32 -0000)
using regular expression instead of str.startswith().

svn path=/main/trunk/; revision=9890

pym/portage/__init__.py

index 5c712a47268d36501e4fb32ac4100ac5a545071e..59270ac589c684471f4158a20fedf2a22f6b685d 100644 (file)
@@ -2035,8 +2035,12 @@ class config(object):
                for var in use_expand:
                        prefix = var.lower() + "_"
                        prefix_len = len(prefix)
-                       expand_flags = set([ x[prefix_len:] for x in use \
-                               if x.startswith(prefix) ])
+                       prefix_re = re.compile(r'^(%s)(.*)' % prefix)
+                       expand_flags = set()
+                       for x in use:
+                               m = prefix_re.match(x)
+                               if m is not None:
+                                       expand_flags.add(m.group(2))
                        var_split = self.get(var, "").split()
                        # Preserve the order of var_split because it can matter for things
                        # like LINGUAS.
@@ -2047,15 +2051,18 @@ class config(object):
                                var_split = [ x for x in var_split if x != "*" ]
                        has_iuse = set()
                        for x in iuse_implicit:
-                               if x.startswith(prefix):
-                                       has_iuse.add(x[prefix_len:])
+                               m = prefix_re.match(x)
+                               if m is not None:
+                                       has_iuse.add(m.group(2))
                        if has_wildcard:
                                # * means to enable everything in IUSE that's not masked
                                if has_iuse:
                                        for x in iuse_implicit:
-                                               if x.startswith(prefix) and x not in self.usemask:
-                                                       suffix = x[prefix_len:]
-                                                       var_split.append(suffix)
+                                               if x in self.usemask:
+                                                       continue
+                                               m = prefix_re.match(x)
+                                               if m is not None:
+                                                       var_split.append(m.group(2))
                                                        use.add(x)
                                else:
                                        # If there is a wildcard and no matching flags in IUSE then