From mboxrd@z Thu Jan 1 00:00:00 1970 Received: from pigeon.gentoo.org ([208.92.234.80] helo=lists.gentoo.org) by finch.gentoo.org with esmtp (Exim 4.60) (envelope-from ) id 1Sdq31-0007C0-Ea for garchives@archives.gentoo.org; Sun, 10 Jun 2012 21:51:47 +0000 Received: from pigeon.gentoo.org (localhost [127.0.0.1]) by pigeon.gentoo.org (Postfix) with SMTP id 289A8E02CB; Sun, 10 Jun 2012 21:51:40 +0000 (UTC) Received: from smtp.gentoo.org (smtp.gentoo.org [140.211.166.183]) by pigeon.gentoo.org (Postfix) with ESMTP id D700CE02CB for ; Sun, 10 Jun 2012 21:51:39 +0000 (UTC) Received: from hornbill.gentoo.org (hornbill.gentoo.org [94.100.119.163]) (using TLSv1 with cipher AECDH-AES256-SHA (256/256 bits)) (No client certificate requested) by smtp.gentoo.org (Postfix) with ESMTPS id 22AAE1B4031 for ; Sun, 10 Jun 2012 21:51:39 +0000 (UTC) Received: from localhost.localdomain (localhost [127.0.0.1]) by hornbill.gentoo.org (Postfix) with ESMTP id D01AFE542E for ; Sun, 10 Jun 2012 21:51:37 +0000 (UTC) From: "Zac Medico" To: gentoo-commits@lists.gentoo.org Content-type: text/plain; charset=UTF-8 Reply-To: gentoo-dev@lists.gentoo.org, "Zac Medico" Message-ID: <1339365085.9255afd8c6398ce4a58beaff9285fcc3b96a2713.zmedico@gentoo> Subject: [gentoo-commits] proj/portage:master commit in: pym/portage/dep/ X-VCS-Repository: proj/portage X-VCS-Files: pym/portage/dep/__init__.py X-VCS-Directories: pym/portage/dep/ X-VCS-Committer: zmedico X-VCS-Committer-Name: Zac Medico X-VCS-Revision: 9255afd8c6398ce4a58beaff9285fcc3b96a2713 X-VCS-Branch: master Date: Sun, 10 Jun 2012 21:51:37 +0000 (UTC) Precedence: bulk List-Post: List-Help: List-Unsubscribe: List-Subscribe: List-Id: Gentoo Linux mail X-BeenThere: gentoo-commits@lists.gentoo.org Content-Transfer-Encoding: quoted-printable X-Archives-Salt: 6e5ab4b7-5dc6-4c6f-a38c-2e8885d9c3b4 X-Archives-Hash: 8aec38ebae19ca4fd311be2172e85fdb commit: 9255afd8c6398ce4a58beaff9285fcc3b96a2713 Author: Zac Medico gentoo org> AuthorDate: Sun Jun 10 21:51:25 2012 +0000 Commit: Zac Medico gentoo org> CommitDate: Sun Jun 10 21:51:25 2012 +0000 URL: http://git.overlays.gentoo.org/gitweb/?p=3Dproj/portage.git;a= =3Dcommit;h=3D9255afd8 _get_usedep_re: use _eapi_attrs --- pym/portage/dep/__init__.py | 76 ++++++++++++++++++++++++-------------= ----- 1 files changed, 43 insertions(+), 33 deletions(-) diff --git a/pym/portage/dep/__init__.py b/pym/portage/dep/__init__.py index eba0a6c..53761e7 100644 --- a/pym/portage/dep/__init__.py +++ b/pym/portage/dep/__init__.py @@ -56,17 +56,23 @@ if sys.hexversion >=3D 0x3000000: _internal_warnings =3D False =20 _eapi_attrs =3D collections.namedtuple('_eapi_attrs', - 'dots_in_PN repo_deps slot_deps strong_blocks use_deps use_dep_defaults= ') + 'dots_in_PN dots_in_use_flags repo_deps slot_deps ' + 'strong_blocks use_deps use_dep_defaults') =20 _eapi_attrs_cache =3D {} =20 def _get_eapi_attrs(eapi): + """ + When eapi is None then validation is not as strict, since we want the + same to work for multiple EAPIs that may have slightly different rules. + """ eapi_attrs =3D _eapi_attrs_cache.get(eapi) if eapi_attrs is not None: return eapi_attrs =20 eapi_attrs =3D _eapi_attrs( dots_in_PN =3D (eapi is None or eapi_allows_dots_in_PN(eapi)), + dots_in_use_flags =3D (eapi is None or eapi_allows_dots_in_use_flags(e= api)), repo_deps =3D (eapi is None or eapi_has_repo_deps(eapi)), slot_deps =3D (eapi is None or eapi_has_slot_deps(eapi)), strong_blocks =3D (eapi is None or eapi_has_strong_blocks(eapi)), @@ -101,6 +107,31 @@ def _get_atom_re(eapi_attrs): _atom_re_cache[eapi_attrs] =3D atom_re return atom_re =20 +_usedep_re_cache =3D {} + +def _get_usedep_re(eapi_attrs): + """ + @param eapi_attrs: The EAPI attributes from _get_eapi_attrs + @type eapi_attrs: _eapi_attrs + @rtype: regular expression object + @return: A regular expression object that matches valid USE deps for th= e + given eapi. + """ + usedep_re =3D _usedep_re_cache.get(eapi_attrs) + if usedep_re is not None: + return usedep_re + + if eapi_attrs.dots_in_use_flags: + _flag_re =3D r'[A-Za-z0-9][A-Za-z0-9+_@.-]*' + else: + _flag_re =3D r'[A-Za-z0-9][A-Za-z0-9+_@-]*' + + usedep_re =3D re.compile(r'^(?P[!-]?)(?P' + + _flag_re + r')(?P(\(\+\)|\(\-\))?)(?P[?=3D]?)$') + + _usedep_re_cache[eapi_attrs] =3D usedep_re + return usedep_re + def cpvequal(cpv1, cpv2): """ =09 @@ -701,30 +732,9 @@ def flatten(mylist): newlist.append(x) return newlist =20 - -_usedep_re =3D { - "dots_disallowed_in_use_flags": re.compile("^(?P[!-]?)(?P= [A-Za-z0-9][A-Za-z0-9+_@-]*)(?P(\(\+\)|\(\-\))?)(?P[?=3D= ]?)$"), - "dots_allowed_in_use_flags": re.compile("^(?P[!-]?)(?P= [A-Za-z0-9][A-Za-z0-9+_@.-]*)(?P(\(\+\)|\(\-\))?)(?P[?=3D= ]?)$"), -} - -def _get_usedep_re(eapi): - """ - When eapi is None then validation is not as strict, since we want the - same to work for multiple EAPIs that may have slightly different rules. - @param eapi: The EAPI - @type eapi: String or None - @rtype: regular expression object - @return: A regular expression object that matches valid USE deps for th= e - given eapi. - """ - if eapi is None or eapi_allows_dots_in_use_flags(eapi): - return _usedep_re["dots_allowed_in_use_flags"] - else: - return _usedep_re["dots_disallowed_in_use_flags"] - class _use_dep(object): =20 - __slots__ =3D ("__weakref__", "eapi", "conditional", "missing_enabled",= "missing_disabled", + __slots__ =3D ("_eapi_attrs", "conditional", "missing_enabled", "missin= g_disabled", "disabled", "enabled", "tokens", "required") =20 class _conditionals_class(object): @@ -750,10 +760,10 @@ class _use_dep(object): 'not_equal': '!%s=3D', } =20 - def __init__(self, use, eapi, enabled_flags=3DNone, disabled_flags=3DNo= ne, missing_enabled=3DNone, \ + def __init__(self, use, eapi_attrs, enabled_flags=3DNone, disabled_flag= s=3DNone, missing_enabled=3DNone, missing_disabled=3DNone, conditional=3DNone, required=3DNone): =20 - self.eapi =3D eapi + self._eapi_attrs =3D eapi_attrs =20 if enabled_flags is not None: #A shortcut for the classe's own methods. @@ -782,7 +792,7 @@ class _use_dep(object): no_default =3D set() =20 conditional =3D {} - usedep_re =3D _get_usedep_re(self.eapi) + usedep_re =3D _get_usedep_re(self._eapi_attrs) =20 for x in use: m =3D usedep_re.match(x) @@ -885,7 +895,7 @@ class _use_dep(object): disabled_flags =3D set(self.disabled) =20 tokens =3D [] - usedep_re =3D _get_usedep_re(self.eapi) + usedep_re =3D _get_usedep_re(self._eapi_attrs) =20 for x in self.tokens: m =3D usedep_re.match(x) @@ -921,7 +931,7 @@ class _use_dep(object): else: tokens.append(x) =20 - return _use_dep(tokens, self.eapi, enabled_flags=3Denabled_flags, disa= bled_flags=3Ddisabled_flags, \ + return _use_dep(tokens, self._eapi_attrs, enabled_flags=3Denabled_flag= s, disabled_flags=3Ddisabled_flags, missing_enabled=3Dself.missing_enabled, missing_disabled=3Dself.missi= ng_disabled, required=3Dself.required) =20 def violated_conditionals(self, other_use, is_valid_flag, parent_use=3D= None): @@ -943,7 +953,7 @@ class _use_dep(object): def validate_flag(flag): return is_valid_flag(flag) or flag in all_defaults =20 - usedep_re =3D _get_usedep_re(self.eapi) + usedep_re =3D _get_usedep_re(self._eapi_attrs) =20 for x in self.tokens: m =3D usedep_re.match(x) @@ -1035,7 +1045,7 @@ class _use_dep(object): tokens.append(x) conditional.setdefault("disabled", set()).add(flag) =20 - return _use_dep(tokens, self.eapi, enabled_flags=3Denabled_flags, disa= bled_flags=3Ddisabled_flags, \ + return _use_dep(tokens, self._eapi_attrs, enabled_flags=3Denabled_flag= s, disabled_flags=3Ddisabled_flags, missing_enabled=3Dself.missing_enabled, missing_disabled=3Dself.missi= ng_disabled, \ conditional=3Dconditional, required=3Dself.required) =20 @@ -1055,7 +1065,7 @@ class _use_dep(object): missing_disabled =3D self.missing_disabled =20 tokens =3D [] - usedep_re =3D _get_usedep_re(self.eapi) + usedep_re =3D _get_usedep_re(self._eapi_attrs) =20 for x in self.tokens: m =3D usedep_re.match(x) @@ -1091,7 +1101,7 @@ class _use_dep(object): else: tokens.append(x) =20 - return _use_dep(tokens, self.eapi, enabled_flags=3Denabled_flags, disa= bled_flags=3Ddisabled_flags, \ + return _use_dep(tokens, self._eapi_attrs, enabled_flags=3Denabled_flag= s, disabled_flags=3Ddisabled_flags, missing_enabled=3Dmissing_enabled, missing_disabled=3Dmissing_disable= d, required=3Dself.required) =20 if sys.hexversion < 0x3000000: @@ -1224,7 +1234,7 @@ class Atom(_atom_base): if _use is not None: use =3D _use else: - use =3D _use_dep(use_str[1:-1].split(","), eapi) + use =3D _use_dep(use_str[1:-1].split(","), eapi_attrs) without_use =3D Atom(m.group('without_use'), allow_repo=3Dallow_repo) else: use =3D None