From: Zac Medico Date: Sun, 25 Jul 2010 19:11:19 +0000 (-0700) Subject: Make extended_cp_match() cache regular expressions for re-use. X-Git-Tag: v2.2_rc68~459 X-Git-Url: http://git.tremily.us/?a=commitdiff_plain;h=636951ccdc6eeddf7776ef2ebcffbeb212fc9b46;p=portage.git Make extended_cp_match() cache regular expressions for re-use. --- diff --git a/pym/portage/dep/__init__.py b/pym/portage/dep/__init__.py index 80e2b4c78..9720a510e 100644 --- a/pym/portage/dep/__init__.py +++ b/pym/portage/dep/__init__.py @@ -754,14 +754,20 @@ class Atom(_atom_base): memo[id(self)] = self return self +_extended_cp_re_cache = {} + def extended_cp_match(extended_cp, other_cp): """ Checks if an extended syntax cp matches a non extended cp """ # Escape special '+' and '.' characters which are allowed in atoms, # and convert '*' to regex equivalent. - extended_cp_re = re.compile("^" + extended_cp.replace("+", r"\+").replace( - ".", r"\.").replace('*', '[^/]*') + "$") + global _extended_cp_re_cache + extended_cp_re = _extended_cp_re_cache.get(extended_cp) + if extended_cp_re is None: + extended_cp_re = re.compile("^" + extended_cp.replace( + "+", r"\+").replace(".", r"\.").replace('*', '[^/]*') + "$") + _extended_cp_re_cache[extended_cp] = extended_cp_re return extended_cp_re.match(other_cp) is not None class ExtendedAtomDict(object):