Split getmaskingstatus and getmaskingreason info portage.package.ebuild
authorZac Medico <zmedico@gentoo.org>
Tue, 2 Mar 2010 21:01:19 +0000 (21:01 -0000)
committerZac Medico <zmedico@gentoo.org>
Tue, 2 Mar 2010 21:01:19 +0000 (21:01 -0000)
submodules. (trunk r15463)

svn path=/main/branches/2.1.7/; revision=15672

pym/portage/__init__.py
pym/portage/package/ebuild/getmaskingreason.py [new file with mode: 0644]
pym/portage/package/ebuild/getmaskingstatus.py [new file with mode: 0644]

index 5c3270f500f2be0fd89eef50a83957a9ab8ddd49..9fa84ebd24ec3049ac6e0bb7bd467aa2a5ae55d8 100644 (file)
@@ -110,6 +110,8 @@ try:
                'portage.package.ebuild.digestcheck:digestcheck',
                'portage.package.ebuild.digestgen:digestgen',
                'portage.package.ebuild.fetch:fetch',
+               'portage.package.ebuild.getmaskingreason:getmaskingreason',
+               'portage.package.ebuild.getmaskingstatus:getmaskingstatus',
                'portage.package.ebuild.prepare_build_dirs:prepare_build_dirs',
                'portage.process',
                'portage.process:atexit_register,run_exitfuncs',
@@ -910,217 +912,6 @@ def dep_virtual(mysplit, mysettings):
                                newsplit.append(x)
        return newsplit
 
-def getmaskingreason(mycpv, metadata=None, settings=None, portdb=None, return_location=False):
-       from portage.util import grablines
-       if settings is None:
-               settings = globals()["settings"]
-       if portdb is None:
-               portdb = globals()["portdb"]
-       mysplit = catpkgsplit(mycpv)
-       if not mysplit:
-               raise ValueError(_("invalid CPV: %s") % mycpv)
-       if metadata is None:
-               db_keys = list(portdb._aux_cache_keys)
-               try:
-                       metadata = dict(zip(db_keys, portdb.aux_get(mycpv, db_keys)))
-               except KeyError:
-                       if not portdb.cpv_exists(mycpv):
-                               raise
-       if metadata is None:
-               # Can't access SLOT due to corruption.
-               cpv_slot_list = [mycpv]
-       else:
-               cpv_slot_list = ["%s:%s" % (mycpv, metadata["SLOT"])]
-       mycp=mysplit[0]+"/"+mysplit[1]
-
-       # XXX- This is a temporary duplicate of code from the config constructor.
-       locations = [os.path.join(settings["PORTDIR"], "profiles")]
-       locations.extend(settings.profiles)
-       for ov in settings["PORTDIR_OVERLAY"].split():
-               profdir = os.path.join(normalize_path(ov), "profiles")
-               if os.path.isdir(profdir):
-                       locations.append(profdir)
-       locations.append(os.path.join(settings["PORTAGE_CONFIGROOT"],
-               USER_CONFIG_PATH))
-       locations.reverse()
-       pmasklists = [(x, grablines(os.path.join(x, "package.mask"), recursive=1)) for x in locations]
-
-       if mycp in settings.pmaskdict:
-               for x in settings.pmaskdict[mycp]:
-                       if match_from_list(x, cpv_slot_list):
-                               for pmask in pmasklists:
-                                       comment = ""
-                                       comment_valid = -1
-                                       pmask_filename = os.path.join(pmask[0], "package.mask")
-                                       for i in range(len(pmask[1])):
-                                               l = pmask[1][i].strip()
-                                               if l == "":
-                                                       comment = ""
-                                                       comment_valid = -1
-                                               elif l[0] == "#":
-                                                       comment += (l+"\n")
-                                                       comment_valid = i + 1
-                                               elif l == x:
-                                                       if comment_valid != i:
-                                                               comment = ""
-                                                       if return_location:
-                                                               return (comment, pmask_filename)
-                                                       else:
-                                                               return comment
-                                               elif comment_valid != -1:
-                                                       # Apparently this comment applies to muliple masks, so
-                                                       # it remains valid until a blank line is encountered.
-                                                       comment_valid += 1
-       if return_location:
-               return (None, None)
-       else:
-               return None
-
-def getmaskingstatus(mycpv, settings=None, portdb=None):
-       if settings is None:
-               settings = config(clone=globals()["settings"])
-       if portdb is None:
-               portdb = globals()["portdb"]
-
-       metadata = None
-       installed = False
-       if not isinstance(mycpv, basestring):
-               # emerge passed in a Package instance
-               pkg = mycpv
-               mycpv = pkg.cpv
-               metadata = pkg.metadata
-               installed = pkg.installed
-
-       mysplit = catpkgsplit(mycpv)
-       if not mysplit:
-               raise ValueError(_("invalid CPV: %s") % mycpv)
-       if metadata is None:
-               db_keys = list(portdb._aux_cache_keys)
-               try:
-                       metadata = dict(zip(db_keys, portdb.aux_get(mycpv, db_keys)))
-               except KeyError:
-                       if not portdb.cpv_exists(mycpv):
-                               raise
-                       return ["corruption"]
-               if "?" in metadata["LICENSE"]:
-                       settings.setcpv(mycpv, mydb=metadata)
-                       metadata["USE"] = settings["PORTAGE_USE"]
-               else:
-                       metadata["USE"] = ""
-       mycp=mysplit[0]+"/"+mysplit[1]
-
-       rValue = []
-
-       # profile checking
-       if settings._getProfileMaskAtom(mycpv, metadata):
-               rValue.append("profile")
-
-       # package.mask checking
-       if settings._getMaskAtom(mycpv, metadata):
-               rValue.append("package.mask")
-
-       # keywords checking
-       eapi = metadata["EAPI"]
-       mygroups = settings._getKeywords(mycpv, metadata)
-       licenses = metadata["LICENSE"]
-       properties = metadata["PROPERTIES"]
-       slot = metadata["SLOT"]
-       if eapi.startswith("-"):
-               eapi = eapi[1:]
-       if not eapi_is_supported(eapi):
-               return ["EAPI %s" % eapi]
-       elif _eapi_is_deprecated(eapi) and not installed:
-               return ["EAPI %s" % eapi]
-       egroups = settings.configdict["backupenv"].get(
-               "ACCEPT_KEYWORDS", "").split()
-       pgroups = settings["ACCEPT_KEYWORDS"].split()
-       myarch = settings["ARCH"]
-       if pgroups and myarch not in pgroups:
-               """For operating systems other than Linux, ARCH is not necessarily a
-               valid keyword."""
-               myarch = pgroups[0].lstrip("~")
-
-       cp = cpv_getkey(mycpv)
-       pkgdict = settings.pkeywordsdict.get(cp)
-       matches = False
-       if pkgdict:
-               cpv_slot_list = ["%s:%s" % (mycpv, metadata["SLOT"])]
-               for atom, pkgkeywords in pkgdict.items():
-                       if match_from_list(atom, cpv_slot_list):
-                               matches = True
-                               pgroups.extend(pkgkeywords)
-       if matches or egroups:
-               pgroups.extend(egroups)
-               inc_pgroups = set()
-               for x in pgroups:
-                       if x.startswith("-"):
-                               if x == "-*":
-                                       inc_pgroups.clear()
-                               else:
-                                       inc_pgroups.discard(x[1:])
-                       else:
-                               inc_pgroups.add(x)
-               pgroups = inc_pgroups
-               del inc_pgroups
-
-       kmask = "missing"
-
-       if '**' in pgroups:
-               kmask = None
-       else:
-               for keyword in pgroups:
-                       if keyword in mygroups:
-                               kmask = None
-                               break
-
-       if kmask:
-               fallback = None
-               for gp in mygroups:
-                       if gp=="*":
-                               kmask=None
-                               break
-                       elif gp=="-"+myarch and myarch in pgroups:
-                               kmask="-"+myarch
-                               break
-                       elif gp=="~"+myarch and myarch in pgroups:
-                               kmask="~"+myarch
-                               break
-
-       try:
-               missing_licenses = settings._getMissingLicenses(mycpv, metadata)
-               if missing_licenses:
-                       allowed_tokens = set(["||", "(", ")"])
-                       allowed_tokens.update(missing_licenses)
-                       license_split = licenses.split()
-                       license_split = [x for x in license_split \
-                               if x in allowed_tokens]
-                       msg = license_split[:]
-                       msg.append("license(s)")
-                       rValue.append(" ".join(msg))
-       except portage.exception.InvalidDependString as e:
-               rValue.append("LICENSE: "+str(e))
-
-       try:
-               missing_properties = settings._getMissingProperties(mycpv, metadata)
-               if missing_properties:
-                       allowed_tokens = set(["||", "(", ")"])
-                       allowed_tokens.update(missing_properties)
-                       properties_split = properties.split()
-                       properties_split = [x for x in properties_split \
-                                       if x in allowed_tokens]
-                       msg = properties_split[:]
-                       msg.append("properties")
-                       rValue.append(" ".join(msg))
-       except portage.exception.InvalidDependString as e:
-               rValue.append("PROPERTIES: "+str(e))
-
-       # Only show KEYWORDS masks for installed packages
-       # if they're not masked for any other reason.
-       if kmask and (not installed or not rValue):
-               rValue.append(kmask+" keyword")
-
-       return rValue
-
 auxdbkeys = (
   'DEPEND',    'RDEPEND',   'SLOT',      'SRC_URI',
        'RESTRICT',  'HOMEPAGE',  'LICENSE',   'DESCRIPTION',
diff --git a/pym/portage/package/ebuild/getmaskingreason.py b/pym/portage/package/ebuild/getmaskingreason.py
new file mode 100644 (file)
index 0000000..d0c8164
--- /dev/null
@@ -0,0 +1,78 @@
+# Copyright 2010 Gentoo Foundation
+# Distributed under the terms of the GNU General Public License v2
+# $Id$
+
+__all__ = ['getmaskingreason']
+
+import portage
+from portage import os
+from portage.const import USER_CONFIG_PATH
+from portage.dep import match_from_list
+from portage.localization import _
+from portage.util import grablines, normalize_path
+from portage.versions import catpkgsplit
+
+def getmaskingreason(mycpv, metadata=None, settings=None, portdb=None, return_location=False):
+       if settings is None:
+               settings = portage.settings
+       if portdb is None:
+               portdb = portage.portdb
+       mysplit = catpkgsplit(mycpv)
+       if not mysplit:
+               raise ValueError(_("invalid CPV: %s") % mycpv)
+       if metadata is None:
+               db_keys = list(portdb._aux_cache_keys)
+               try:
+                       metadata = dict(zip(db_keys, portdb.aux_get(mycpv, db_keys)))
+               except KeyError:
+                       if not portdb.cpv_exists(mycpv):
+                               raise
+       if metadata is None:
+               # Can't access SLOT due to corruption.
+               cpv_slot_list = [mycpv]
+       else:
+               cpv_slot_list = ["%s:%s" % (mycpv, metadata["SLOT"])]
+       mycp=mysplit[0]+"/"+mysplit[1]
+
+       # XXX- This is a temporary duplicate of code from the config constructor.
+       locations = [os.path.join(settings["PORTDIR"], "profiles")]
+       locations.extend(settings.profiles)
+       for ov in settings["PORTDIR_OVERLAY"].split():
+               profdir = os.path.join(normalize_path(ov), "profiles")
+               if os.path.isdir(profdir):
+                       locations.append(profdir)
+       locations.append(os.path.join(settings["PORTAGE_CONFIGROOT"],
+               USER_CONFIG_PATH))
+       locations.reverse()
+       pmasklists = [(x, grablines(os.path.join(x, "package.mask"), recursive=1)) for x in locations]
+
+       if mycp in settings.pmaskdict:
+               for x in settings.pmaskdict[mycp]:
+                       if match_from_list(x, cpv_slot_list):
+                               for pmask in pmasklists:
+                                       comment = ""
+                                       comment_valid = -1
+                                       pmask_filename = os.path.join(pmask[0], "package.mask")
+                                       for i in range(len(pmask[1])):
+                                               l = pmask[1][i].strip()
+                                               if l == "":
+                                                       comment = ""
+                                                       comment_valid = -1
+                                               elif l[0] == "#":
+                                                       comment += (l+"\n")
+                                                       comment_valid = i + 1
+                                               elif l == x:
+                                                       if comment_valid != i:
+                                                               comment = ""
+                                                       if return_location:
+                                                               return (comment, pmask_filename)
+                                                       else:
+                                                               return comment
+                                               elif comment_valid != -1:
+                                                       # Apparently this comment applies to muliple masks, so
+                                                       # it remains valid until a blank line is encountered.
+                                                       comment_valid += 1
+       if return_location:
+               return (None, None)
+       else:
+               return None
diff --git a/pym/portage/package/ebuild/getmaskingstatus.py b/pym/portage/package/ebuild/getmaskingstatus.py
new file mode 100644 (file)
index 0000000..bfe92d8
--- /dev/null
@@ -0,0 +1,154 @@
+# Copyright 2010 Gentoo Foundation
+# Distributed under the terms of the GNU General Public License v2
+# $Id$
+
+__all__ = ['getmaskingstatus']
+
+import portage
+from portage import eapi_is_supported, _eapi_is_deprecated
+from portage.dep import match_from_list
+from portage.localization import _
+from portage.package.ebuild.config import config
+from portage.versions import catpkgsplit, cpv_getkey
+
+def getmaskingstatus(mycpv, settings=None, portdb=None):
+       if settings is None:
+               settings = config(clone=portage.settings)
+       if portdb is None:
+               portdb = portage.portdb
+
+       metadata = None
+       installed = False
+       if not isinstance(mycpv, basestring):
+               # emerge passed in a Package instance
+               pkg = mycpv
+               mycpv = pkg.cpv
+               metadata = pkg.metadata
+               installed = pkg.installed
+
+       mysplit = catpkgsplit(mycpv)
+       if not mysplit:
+               raise ValueError(_("invalid CPV: %s") % mycpv)
+       if metadata is None:
+               db_keys = list(portdb._aux_cache_keys)
+               try:
+                       metadata = dict(zip(db_keys, portdb.aux_get(mycpv, db_keys)))
+               except KeyError:
+                       if not portdb.cpv_exists(mycpv):
+                               raise
+                       return ["corruption"]
+               if "?" in metadata["LICENSE"]:
+                       settings.setcpv(mycpv, mydb=metadata)
+                       metadata["USE"] = settings["PORTAGE_USE"]
+               else:
+                       metadata["USE"] = ""
+
+       rValue = []
+
+       # profile checking
+       if settings._getProfileMaskAtom(mycpv, metadata):
+               rValue.append("profile")
+
+       # package.mask checking
+       if settings._getMaskAtom(mycpv, metadata):
+               rValue.append("package.mask")
+
+       # keywords checking
+       eapi = metadata["EAPI"]
+       mygroups = settings._getKeywords(mycpv, metadata)
+       licenses = metadata["LICENSE"]
+       properties = metadata["PROPERTIES"]
+       if eapi.startswith("-"):
+               eapi = eapi[1:]
+       if not eapi_is_supported(eapi):
+               return ["EAPI %s" % eapi]
+       elif _eapi_is_deprecated(eapi) and not installed:
+               return ["EAPI %s" % eapi]
+       egroups = settings.configdict["backupenv"].get(
+               "ACCEPT_KEYWORDS", "").split()
+       pgroups = settings["ACCEPT_KEYWORDS"].split()
+       myarch = settings["ARCH"]
+       if pgroups and myarch not in pgroups:
+               """For operating systems other than Linux, ARCH is not necessarily a
+               valid keyword."""
+               myarch = pgroups[0].lstrip("~")
+
+       cp = cpv_getkey(mycpv)
+       pkgdict = settings.pkeywordsdict.get(cp)
+       matches = False
+       if pkgdict:
+               cpv_slot_list = ["%s:%s" % (mycpv, metadata["SLOT"])]
+               for atom, pkgkeywords in pkgdict.items():
+                       if match_from_list(atom, cpv_slot_list):
+                               matches = True
+                               pgroups.extend(pkgkeywords)
+       if matches or egroups:
+               pgroups.extend(egroups)
+               inc_pgroups = set()
+               for x in pgroups:
+                       if x.startswith("-"):
+                               if x == "-*":
+                                       inc_pgroups.clear()
+                               else:
+                                       inc_pgroups.discard(x[1:])
+                       else:
+                               inc_pgroups.add(x)
+               pgroups = inc_pgroups
+               del inc_pgroups
+
+       kmask = "missing"
+
+       if '**' in pgroups:
+               kmask = None
+       else:
+               for keyword in pgroups:
+                       if keyword in mygroups:
+                               kmask = None
+                               break
+
+       if kmask:
+               for gp in mygroups:
+                       if gp=="*":
+                               kmask=None
+                               break
+                       elif gp=="-"+myarch and myarch in pgroups:
+                               kmask="-"+myarch
+                               break
+                       elif gp=="~"+myarch and myarch in pgroups:
+                               kmask="~"+myarch
+                               break
+
+       try:
+               missing_licenses = settings._getMissingLicenses(mycpv, metadata)
+               if missing_licenses:
+                       allowed_tokens = set(["||", "(", ")"])
+                       allowed_tokens.update(missing_licenses)
+                       license_split = licenses.split()
+                       license_split = [x for x in license_split \
+                               if x in allowed_tokens]
+                       msg = license_split[:]
+                       msg.append("license(s)")
+                       rValue.append(" ".join(msg))
+       except portage.exception.InvalidDependString as e:
+               rValue.append("LICENSE: "+str(e))
+
+       try:
+               missing_properties = settings._getMissingProperties(mycpv, metadata)
+               if missing_properties:
+                       allowed_tokens = set(["||", "(", ")"])
+                       allowed_tokens.update(missing_properties)
+                       properties_split = properties.split()
+                       properties_split = [x for x in properties_split \
+                                       if x in allowed_tokens]
+                       msg = properties_split[:]
+                       msg.append("properties")
+                       rValue.append(" ".join(msg))
+       except portage.exception.InvalidDependString as e:
+               rValue.append("PROPERTIES: "+str(e))
+
+       # Only show KEYWORDS masks for installed packages
+       # if they're not masked for any other reason.
+       if kmask and (not installed or not rValue):
+               rValue.append(kmask+" keyword")
+
+       return rValue