本文整理汇总了Python中portage.eapi_is_supported函数的典型用法代码示例。如果您正苦于以下问题:Python eapi_is_supported函数的具体用法?Python eapi_is_supported怎么用?Python eapi_is_supported使用的例子?那么恭喜您, 这里精选的函数代码示例或许可以为您提供帮助。
在下文中一共展示了eapi_is_supported函数的20个代码示例,这些例子默认根据受欢迎程度排序。您可以为喜欢或者感觉有用的代码点赞,您的评价将有助于我们的系统推荐出更棒的Python代码示例。
示例1: _aux_get_wrapper
def _aux_get_wrapper(self, pkg, wants, myrepo=None):
if pkg in self._aux_get_history:
return self._aux_get(pkg, wants)
self._aux_get_history.add(pkg)
# We need to check the EAPI, and this also raises
# a KeyError to the caller if appropriate.
installed_eapi, repo = self._aux_get(pkg, ["EAPI", "repository"])
try:
# Use the live ebuild metadata if possible.
repo = _gen_valid_repo(repo)
live_metadata = dict(zip(self._portdb_keys,
self._portdb.aux_get(pkg, self._portdb_keys, myrepo=repo)))
# Use the metadata from the installed instance if the EAPI
# of either instance is unsupported, since if the installed
# instance has an unsupported or corrupt EAPI then we don't
# want to attempt to do complex operations such as execute
# pkg_config, pkg_prerm or pkg_postrm phases. If both EAPIs
# are supported then go ahead and use the live_metadata, in
# order to respect dep updates without revision bump or EAPI
# bump, as in bug #368725.
if not (portage.eapi_is_supported(live_metadata["EAPI"]) and \
portage.eapi_is_supported(installed_eapi)):
raise KeyError(pkg)
self.dbapi.aux_update(pkg, live_metadata)
except (KeyError, portage.exception.PortageException):
if self._global_updates is None:
self._global_updates = \
grab_global_updates(self._portdb)
perform_global_updates(
pkg, self.dbapi, self._global_updates)
return self._aux_get(pkg, wants)
开发者ID:Acidburn0zzz,项目名称:portage-funtoo,代码行数:31,代码来源:FakeVartree.py
示例2: _aux_get_wrapper
def _aux_get_wrapper(self, pkg, wants, myrepo=None):
if pkg in self._aux_get_history:
return self._aux_get(pkg, wants)
self._aux_get_history.add(pkg)
# We need to check the EAPI, and this also raises
# a KeyError to the caller if appropriate.
pkg_obj = self.dbapi._cpv_map[pkg]
installed_eapi = pkg_obj.metadata['EAPI']
repo = pkg_obj.metadata['repository']
eapi_attrs = _get_eapi_attrs(installed_eapi)
built_slot_operator_atoms = None
if eapi_attrs.slot_operator and not self._ignore_built_slot_operator_deps:
try:
built_slot_operator_atoms = find_built_slot_operator_atoms(pkg_obj)
except InvalidDependString:
pass
try:
# Use the live ebuild metadata if possible.
repo = _gen_valid_repo(repo)
live_metadata = dict(zip(self._portdb_keys,
self._portdb.aux_get(pkg, self._portdb_keys, myrepo=repo)))
# Use the metadata from the installed instance if the EAPI
# of either instance is unsupported, since if the installed
# instance has an unsupported or corrupt EAPI then we don't
# want to attempt to do complex operations such as execute
# pkg_config, pkg_prerm or pkg_postrm phases. If both EAPIs
# are supported then go ahead and use the live_metadata, in
# order to respect dep updates without revision bump or EAPI
# bump, as in bug #368725.
if not (portage.eapi_is_supported(live_metadata["EAPI"]) and \
portage.eapi_is_supported(installed_eapi)):
raise KeyError(pkg)
# preserve built slot/sub-slot := operator deps
if built_slot_operator_atoms:
live_eapi_attrs = _get_eapi_attrs(live_metadata["EAPI"])
if not live_eapi_attrs.slot_operator:
raise KeyError(pkg)
for k, v in built_slot_operator_atoms.items():
live_metadata[k] += (" " +
" ".join(_unicode(atom) for atom in v))
self.dbapi.aux_update(pkg, live_metadata)
except (KeyError, portage.exception.PortageException):
if self._global_updates is None:
self._global_updates = \
grab_global_updates(self._portdb)
perform_global_updates(
pkg, self.dbapi, self._global_updates)
return self._aux_get(pkg, wants)
开发者ID:devurandom,项目名称:portage,代码行数:52,代码来源:FakeVartree.py
示例3: _addProfile
def _addProfile(self, currentPath):
parentsFile = os.path.join(currentPath, "parent")
eapi_file = os.path.join(currentPath, "eapi")
try:
eapi = codecs.open(_unicode_encode(eapi_file,
encoding=_encodings['fs'], errors='strict'),
mode='r', encoding=_encodings['content'], errors='replace'
).readline().strip()
except IOError:
pass
else:
if not eapi_is_supported(eapi):
raise ParseError(_(
"Profile contains unsupported "
"EAPI '%s': '%s'") % \
(eapi, os.path.realpath(eapi_file),))
if os.path.exists(parentsFile):
parents = grabfile(parentsFile)
if not parents:
raise ParseError(
_("Empty parent file: '%s'") % parentsFile)
for parentPath in parents:
parentPath = normalize_path(os.path.join(
currentPath, parentPath))
if os.path.exists(parentPath):
self._addProfile(parentPath)
else:
raise ParseError(
_("Parent '%s' not found: '%s'") % \
(parentPath, parentsFile))
self.profiles.append(currentPath)
开发者ID:Neuvoo,项目名称:legacy-portage,代码行数:31,代码来源:LocationsManager.py
示例4: aux_get_done
def aux_get_done(aux_get_future):
if result.cancelled():
return
if aux_get_future.exception() is not None:
if isinstance(aux_get_future.exception(), PortageKeyError):
# Convert this to an InvalidDependString exception since
# callers already handle it.
result.set_exception(portage.exception.InvalidDependString(
"getFetchMap(): aux_get() error reading "
+ mypkg + "; aborting."))
else:
result.set_exception(future.exception())
return
eapi, myuris = aux_get_future.result()
if not eapi_is_supported(eapi):
# Convert this to an InvalidDependString exception
# since callers already handle it.
result.set_exception(portage.exception.InvalidDependString(
"getFetchMap(): '%s' has unsupported EAPI: '%s'" % \
(mypkg, eapi)))
return
result.set_result(_parse_uri_map(mypkg,
{'EAPI':eapi,'SRC_URI':myuris}, use=useflags))
开发者ID:gentoo,项目名称:portage,代码行数:26,代码来源:porttree.py
示例5: _aux_get_return
def _aux_get_return(self, future, mycpv, mylist, myebuild, ebuild_hash,
mydata, mylocation, cache_me, proc):
if future.cancelled():
return
if proc is not None:
if proc.returncode != os.EX_OK:
self._broken_ebuilds.add(myebuild)
future.set_exception(PortageKeyError(mycpv))
return
mydata = proc.metadata
mydata["repository"] = self.repositories.get_name_for_location(mylocation)
mydata["_mtime_"] = ebuild_hash.mtime
eapi = mydata.get("EAPI")
if not eapi:
eapi = "0"
mydata["EAPI"] = eapi
if eapi_is_supported(eapi):
mydata["INHERITED"] = " ".join(mydata.get("_eclasses_", []))
#finally, we look at our internal cache entry and return the requested data.
returnme = [mydata.get(x, "") for x in mylist]
if cache_me and self.frozen:
aux_cache = {}
for x in self._aux_cache_keys:
aux_cache[x] = mydata.get(x, "")
self._aux_cache[mycpv] = aux_cache
future.set_result(returnme)
开发者ID:gentoo,项目名称:portage,代码行数:29,代码来源:porttree.py
示例6: _visible
def _visible(self, cpv, metadata):
eapi = metadata["EAPI"]
if not eapi_is_supported(eapi):
return False
if _eapi_is_deprecated(eapi):
return False
if not metadata["SLOT"]:
return False
settings = self.settings
if settings._getMaskAtom(cpv, metadata):
return False
if settings._getMissingKeywords(cpv, metadata):
return False
if settings.local_config:
metadata['CHOST'] = settings.get('CHOST', '')
if not settings._accept_chost(cpv, metadata):
return False
metadata["USE"] = ""
if "?" in metadata["LICENSE"] or \
"?" in metadata["PROPERTIES"]:
self.doebuild_settings.setcpv(cpv, mydb=metadata)
metadata['USE'] = self.doebuild_settings['PORTAGE_USE']
try:
if settings._getMissingLicenses(cpv, metadata):
return False
if settings._getMissingProperties(cpv, metadata):
return False
if settings._getMissingRestrict(cpv, metadata):
return False
except InvalidDependString:
return False
return True
开发者ID:entoo,项目名称:portage-src,代码行数:34,代码来源:porttree.py
示例7: _metadata_callback
def _metadata_callback(self, cpv, ebuild_path, repo_path, metadata, mtime):
i = metadata
if hasattr(metadata, "items"):
i = iter(metadata.items())
metadata = dict(i)
if metadata.get("INHERITED", False):
metadata["_eclasses_"] = self._repo_info[repo_path
].eclass_db.get_eclass_data(metadata["INHERITED"].split())
else:
metadata["_eclasses_"] = {}
metadata.pop("INHERITED", None)
metadata["_mtime_"] = mtime
eapi = metadata.get("EAPI")
if not eapi or not eapi.strip():
eapi = "0"
metadata["EAPI"] = eapi
if not eapi_is_supported(eapi):
for k in set(metadata).difference(("_mtime_", "_eclasses_")):
metadata[k] = ""
metadata["EAPI"] = "-" + eapi.lstrip("-")
self.auxdb[repo_path][cpv] = metadata
return metadata
开发者ID:fastinetserver,项目名称:portage-idfetch,代码行数:27,代码来源:porttree.py
示例8: _apply_dynamic_deps
def _apply_dynamic_deps(self, pkg, live_metadata):
try:
if live_metadata is None:
raise _DynamicDepsNotApplicable()
# Use the metadata from the installed instance if the EAPI
# of either instance is unsupported, since if the installed
# instance has an unsupported or corrupt EAPI then we don't
# want to attempt to do complex operations such as execute
# pkg_config, pkg_prerm or pkg_postrm phases. If both EAPIs
# are supported then go ahead and use the live_metadata, in
# order to respect dep updates without revision bump or EAPI
# bump, as in bug #368725.
if not (portage.eapi_is_supported(live_metadata["EAPI"]) and \
portage.eapi_is_supported(pkg.eapi)):
raise _DynamicDepsNotApplicable()
# preserve built slot/sub-slot := operator deps
built_slot_operator_atoms = None
if not self._ignore_built_slot_operator_deps and \
_get_eapi_attrs(pkg.eapi).slot_operator:
try:
built_slot_operator_atoms = \
find_built_slot_operator_atoms(pkg)
except InvalidDependString:
pass
if built_slot_operator_atoms:
live_eapi_attrs = _get_eapi_attrs(live_metadata["EAPI"])
if not live_eapi_attrs.slot_operator:
raise _DynamicDepsNotApplicable()
for k, v in built_slot_operator_atoms.items():
live_metadata[k] += (" " +
" ".join(_unicode(atom) for atom in v))
self.dbapi.aux_update(pkg.cpv, live_metadata)
except _DynamicDepsNotApplicable:
if self._global_updates is None:
self._global_updates = \
grab_global_updates(self._portdb)
# Bypass _aux_get_wrapper, since calling that
# here would trigger infinite recursion.
aux_keys = Package._dep_keys + self.dbapi._pkg_str_aux_keys
aux_dict = dict(zip(aux_keys, self._aux_get(pkg.cpv, aux_keys)))
perform_global_updates(
pkg.cpv, aux_dict, self.dbapi, self._global_updates)
开发者ID:jonasstein,项目名称:portage,代码行数:47,代码来源:FakeVartree.py
示例9: _set_returncode
def _set_returncode(self, wait_retval):
SubProcess._set_returncode(self, wait_retval)
# self._raw_metadata is None when _start returns
# early due to an unsupported EAPI
if self.returncode == os.EX_OK and \
self._raw_metadata is not None:
metadata_lines = _unicode_decode(b''.join(self._raw_metadata),
encoding=_encodings['repo.content'],
errors='replace').splitlines()
metadata_valid = True
if len(portage.auxdbkeys) != len(metadata_lines):
# Don't trust bash's returncode if the
# number of lines is incorrect.
metadata_valid = False
else:
metadata = dict(zip(portage.auxdbkeys, metadata_lines))
parsed_eapi = self._eapi
if parsed_eapi is None:
parsed_eapi = "0"
self.eapi_supported = \
portage.eapi_is_supported(metadata["EAPI"])
if (not metadata["EAPI"] or self.eapi_supported) and \
metadata["EAPI"] != parsed_eapi:
self._eapi_invalid(metadata)
metadata_valid = False
if metadata_valid:
# Since we're supposed to be able to efficiently obtain the
# EAPI from _parse_eapi_ebuild_head, we don't write cache
# entries for unsupported EAPIs.
if self.eapi_supported:
if metadata.get("INHERITED", False):
metadata["_eclasses_"] = \
self.portdb.repositories.get_repo_for_location(
self.repo_path).eclass_db.get_eclass_data(
metadata["INHERITED"].split())
else:
metadata["_eclasses_"] = {}
metadata.pop("INHERITED", None)
if eapi_has_automatic_unpack_dependencies(metadata["EAPI"]):
repo = self.portdb.repositories.get_name_for_location(self.repo_path)
unpackers = self.settings.unpack_dependencies.get(repo, {}).get(metadata["EAPI"], {})
unpack_dependencies = extract_unpack_dependencies(metadata["SRC_URI"], unpackers)
if unpack_dependencies:
metadata["DEPEND"] += (" " if metadata["DEPEND"] else "") + unpack_dependencies
# If called by egencache, this cache write is
# undesirable when metadata-transfer is disabled.
if self.write_auxdb is not False:
self.portdb._write_cache(self.cpv,
self.repo_path, metadata, self.ebuild_hash)
else:
metadata = {"EAPI": metadata["EAPI"]}
self.metadata = metadata
else:
self.returncode = 1
开发者ID:Spencerx,项目名称:portage,代码行数:58,代码来源:EbuildMetadataPhase.py
示例10: _eval_masks
def _eval_masks(self):
masks = {}
settings = self.root_config.settings
if self.invalid is not False:
masks['invalid'] = self.invalid
if not settings._accept_chost(self.cpv, self._metadata):
masks['CHOST'] = self._metadata['CHOST']
eapi = self.eapi
if not portage.eapi_is_supported(eapi):
masks['EAPI.unsupported'] = eapi
if portage._eapi_is_deprecated(eapi):
masks['EAPI.deprecated'] = eapi
missing_keywords = settings._getMissingKeywords(
self.cpv, self._metadata)
if missing_keywords:
masks['KEYWORDS'] = missing_keywords
try:
missing_properties = settings._getMissingProperties(
self.cpv, self._metadata)
if missing_properties:
masks['PROPERTIES'] = missing_properties
except InvalidDependString:
# already recorded as 'invalid'
pass
try:
missing_restricts = settings._getMissingRestrict(
self.cpv, self._metadata)
if missing_restricts:
masks['RESTRICT'] = missing_restricts
except InvalidDependString:
# already recorded as 'invalid'
pass
mask_atom = settings._getMaskAtom(self.cpv, self._metadata)
if mask_atom is not None:
masks['package.mask'] = mask_atom
try:
missing_licenses = settings._getMissingLicenses(
self.cpv, self._metadata)
if missing_licenses:
masks['LICENSE'] = missing_licenses
except InvalidDependString:
# already recorded as 'invalid'
pass
if not masks:
masks = False
return masks
开发者ID:monsieurp,项目名称:portage,代码行数:56,代码来源:Package.py
示例11: _pull_valid_cache
def _pull_valid_cache(self, cpv, ebuild_path, repo_path):
try:
# Don't use unicode-wrapped os module, for better performance.
st = _os.stat(_unicode_encode(ebuild_path,
encoding=_encodings['fs'], errors='strict'))
emtime = st[stat.ST_MTIME]
except OSError:
writemsg(_("!!! aux_get(): ebuild for " \
"'%s' does not exist at:\n") % (cpv,), noiselevel=-1)
writemsg("!!! %s\n" % ebuild_path, noiselevel=-1)
raise KeyError(cpv)
# Pull pre-generated metadata from the metadata/cache/
# directory if it exists and is valid, otherwise fall
# back to the normal writable cache.
auxdbs = []
pregen_auxdb = self._pregen_auxdb.get(repo_path)
if pregen_auxdb is not None:
auxdbs.append(pregen_auxdb)
auxdbs.append(self.auxdb[repo_path])
eclass_db = self._repo_info[repo_path].eclass_db
doregen = True
for auxdb in auxdbs:
try:
metadata = auxdb[cpv]
except KeyError:
pass
except CacheError:
if auxdb is not pregen_auxdb:
try:
del auxdb[cpv]
except KeyError:
pass
except CacheError:
pass
else:
eapi = metadata.get('EAPI', '').strip()
if not eapi:
eapi = '0'
if not (eapi[:1] == '-' and eapi_is_supported(eapi[1:])) and \
emtime == metadata['_mtime_'] and \
eclass_db.is_eclass_data_valid(metadata['_eclasses_']):
doregen = False
if not doregen:
break
if doregen:
metadata = None
return (metadata, st, emtime)
开发者ID:fastinetserver,项目名称:portage-idfetch,代码行数:52,代码来源:porttree.py
示例12: _pull_valid_cache
def _pull_valid_cache(self, cpv, ebuild_path, repo_path):
try:
ebuild_hash = eclass_cache.hashed_path(ebuild_path)
# snag mtime since we use it later, and to trigger stat failure
# if it doesn't exist
ebuild_hash.mtime
except FileNotFound:
writemsg(_("!!! aux_get(): ebuild for " \
"'%s' does not exist at:\n") % (cpv,), noiselevel=-1)
writemsg("!!! %s\n" % ebuild_path, noiselevel=-1)
raise KeyError(cpv)
# Pull pre-generated metadata from the metadata/cache/
# directory if it exists and is valid, otherwise fall
# back to the normal writable cache.
auxdbs = []
pregen_auxdb = self._pregen_auxdb.get(repo_path)
if pregen_auxdb is not None:
auxdbs.append(pregen_auxdb)
ro_auxdb = self._ro_auxdb.get(repo_path)
if ro_auxdb is not None:
auxdbs.append(ro_auxdb)
auxdbs.append(self.auxdb[repo_path])
eclass_db = self.repositories.get_repo_for_location(repo_path).eclass_db
for auxdb in auxdbs:
try:
metadata = auxdb[cpv]
except KeyError:
continue
except CacheError:
if not auxdb.readonly:
try:
del auxdb[cpv]
except (KeyError, CacheError):
pass
continue
eapi = metadata.get('EAPI', '').strip()
if not eapi:
eapi = '0'
metadata['EAPI'] = eapi
if not eapi_is_supported(eapi):
# Since we're supposed to be able to efficiently obtain the
# EAPI from _parse_eapi_ebuild_head, we disregard cache entries
# for unsupported EAPIs.
continue
if auxdb.validate_entry(metadata, ebuild_hash, eclass_db):
break
else:
metadata = None
return (metadata, ebuild_hash)
开发者ID:entoo,项目名称:portage-src,代码行数:52,代码来源:porttree.py
示例13: _masks
def _masks(self):
masks = {}
settings = self.root_config.settings
if self.invalid is not None:
masks['invalid'] = self.invalid
if not settings._accept_chost(self.cpv, self.metadata):
masks['CHOST'] = self.metadata['CHOST']
eapi = self.metadata["EAPI"]
if not portage.eapi_is_supported(eapi):
masks['EAPI.unsupported'] = eapi
if portage._eapi_is_deprecated(eapi):
masks['EAPI.deprecated'] = eapi
missing_keywords = settings._getMissingKeywords(
self.cpv, self.metadata)
if missing_keywords:
masks['KEYWORDS'] = missing_keywords
try:
missing_properties = settings._getMissingProperties(
self.cpv, self.metadata)
if missing_properties:
masks['PROPERTIES'] = missing_properties
except portage.exception.InvalidDependString:
# already recorded as 'invalid'
pass
mask_atom = settings._getMaskAtom(self.cpv, self.metadata)
if mask_atom is not None:
masks['package.mask'] = mask_atom
system_mask = settings._getProfileMaskAtom(
self.cpv, self.metadata)
if system_mask is not None:
masks['profile.system'] = system_mask
try:
missing_licenses = settings._getMissingLicenses(
self.cpv, self.metadata)
if missing_licenses:
masks['LICENSE'] = missing_licenses
except portage.exception.InvalidDependString:
# already recorded as 'invalid'
pass
if not masks:
masks = None
return masks
开发者ID:TommyD,项目名称:gentoo-portage-multilib,代码行数:52,代码来源:Package.py
示例14: _get_eapi_attrs
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.
An unsupported eapi is handled the same as when eapi is None, which may
be helpful for handling of corrupt EAPI metadata in essential functions
such as pkgsplit.
"""
eapi_attrs = _eapi_attrs_cache.get(eapi)
if eapi_attrs is not None:
return eapi_attrs
orig_eapi = eapi
if eapi is not None and not eapi_is_supported(eapi):
eapi = None
eapi_attrs = _eapi_attrs(
allows_package_provided=(eapi is None or eapi_allows_package_provided(eapi)),
bdepend = (eapi is not None and eapi_has_bdepend(eapi)),
broot = (eapi is None or eapi_has_broot(eapi)),
dots_in_PN = (eapi is None or eapi_allows_dots_in_PN(eapi)),
dots_in_use_flags = (eapi is None or eapi_allows_dots_in_use_flags(eapi)),
empty_groups_always_true = (eapi is not None and eapi_empty_groups_always_true(eapi)),
exports_EBUILD_PHASE_FUNC = (eapi is None or eapi_exports_EBUILD_PHASE_FUNC(eapi)),
exports_PORTDIR = (eapi is None or eapi_exports_PORTDIR(eapi)),
exports_ECLASSDIR = (eapi is not None and eapi_exports_ECLASSDIR(eapi)),
feature_flag_test = False,
feature_flag_targetroot = (eapi is not None and eapi_has_targetroot(eapi)),
hdepend = (eapi is not None and eapi_has_hdepend(eapi)),
iuse_defaults = (eapi is None or eapi_has_iuse_defaults(eapi)),
iuse_effective = (eapi is not None and eapi_has_iuse_effective(eapi)),
path_variables_end_with_trailing_slash = (eapi is not None and
eapi_path_variables_end_with_trailing_slash(eapi)),
posixish_locale = (eapi is not None and eapi_requires_posixish_locale(eapi)),
repo_deps = (eapi is None or eapi_has_repo_deps(eapi)),
required_use = (eapi is None or eapi_has_required_use(eapi)),
required_use_at_most_one_of = (eapi is None or eapi_has_required_use_at_most_one_of(eapi)),
slot_deps = (eapi is None or eapi_has_slot_deps(eapi)),
slot_operator = (eapi is None or eapi_has_slot_operator(eapi)),
src_uri_arrows = (eapi is None or eapi_has_src_uri_arrows(eapi)),
strong_blocks = (eapi is None or eapi_has_strong_blocks(eapi)),
sysroot = (eapi is None or eapi_has_sysroot(eapi)),
use_deps = (eapi is None or eapi_has_use_deps(eapi)),
use_dep_defaults = (eapi is None or eapi_has_use_dep_defaults(eapi))
)
_eapi_attrs_cache[orig_eapi] = eapi_attrs
return eapi_attrs
开发者ID:gentoo,项目名称:portage,代码行数:48,代码来源:eapi.py
示例15: gvisible
def gvisible(self,mylist):
"strip out group-masked (not in current group) entries"
if mylist is None:
return []
newlist=[]
aux_keys = list(self._aux_cache_keys)
metadata = {}
local_config = self.settings.local_config
chost = self.settings.get('CHOST', '')
accept_chost = self.settings._accept_chost
for mycpv in mylist:
metadata.clear()
try:
metadata.update(zip(aux_keys, self.aux_get(mycpv, aux_keys)))
except KeyError:
continue
except PortageException as e:
writemsg("!!! Error: aux_get('%s', %s)\n" % (mycpv, aux_keys),
noiselevel=-1)
writemsg("!!! %s\n" % (e,), noiselevel=-1)
del e
continue
eapi = metadata["EAPI"]
if not eapi_is_supported(eapi):
continue
if _eapi_is_deprecated(eapi):
continue
if self.settings._getMissingKeywords(mycpv, metadata):
continue
if local_config:
metadata['CHOST'] = chost
if not accept_chost(mycpv, metadata):
continue
metadata["USE"] = ""
if "?" in metadata["LICENSE"] or "?" in metadata["PROPERTIES"]:
self.doebuild_settings.setcpv(mycpv, mydb=metadata)
metadata['USE'] = self.doebuild_settings['PORTAGE_USE']
try:
if self.settings._getMissingLicenses(mycpv, metadata):
continue
if self.settings._getMissingProperties(mycpv, metadata):
continue
except InvalidDependString:
continue
newlist.append(mycpv)
return newlist
开发者ID:fastinetserver,项目名称:portage-idfetch,代码行数:47,代码来源:porttree.py
示例16: _metadata_callback
def _metadata_callback(self, cpv, repo_path, metadata, ebuild_hash):
i = metadata
if hasattr(metadata, "items"):
i = iter(metadata.items())
metadata = dict(i)
if metadata.get("INHERITED", False):
metadata["_eclasses_"] = self._repo_info[repo_path
].eclass_db.get_eclass_data(metadata["INHERITED"].split())
else:
metadata["_eclasses_"] = {}
try:
cache = self.auxdb[repo_path]
chf = cache.validation_chf
metadata['_%s_' % chf] = getattr(ebuild_hash, chf)
except CacheError:
# Normally this shouldn't happen, so we'll show
# a traceback for debugging purposes.
traceback.print_exc()
cache = None
metadata.pop("INHERITED", None)
eapi = metadata.get("EAPI")
if not eapi or not eapi.strip():
eapi = "0"
metadata["EAPI"] = eapi
if not eapi_is_supported(eapi):
keys = set(metadata)
keys.discard('_eclasses_')
keys.discard('_mtime_')
keys.discard('_%s_' % chf)
metadata.update((k, '') for k in keys)
metadata["EAPI"] = "-" + eapi.lstrip("-")
if cache is not None:
try:
cache[cpv] = metadata
except CacheError:
# Normally this shouldn't happen, so we'll show
# a traceback for debugging purposes.
traceback.print_exc()
return metadata
开发者ID:Acidburn0zzz,项目名称:portage-funtoo,代码行数:45,代码来源:porttree.py
示例17: _aux_get_wrapper
def _aux_get_wrapper(self, pkg, wants):
if pkg in self._aux_get_history:
return self._aux_get(pkg, wants)
self._aux_get_history.add(pkg)
try:
# Use the live ebuild metadata if possible.
live_metadata = dict(zip(self._portdb_keys,
self._portdb.aux_get(pkg, self._portdb_keys)))
if not portage.eapi_is_supported(live_metadata["EAPI"]):
raise KeyError(pkg)
self.dbapi.aux_update(pkg, live_metadata)
except (KeyError, portage.exception.PortageException):
if self._global_updates is None:
self._global_updates = \
grab_global_updates(self._portdb)
perform_global_updates(
pkg, self.dbapi, self._global_updates)
return self._aux_get(pkg, wants)
开发者ID:Neuvoo,项目名称:legacy-portage,代码行数:18,代码来源:FakeVartree.py
示例18: _get_eapi_attrs
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.
An unsupported eapi is handled the same as when eapi is None, which may
be helpful for handling of corrupt EAPI metadata in essential functions
such as pkgsplit.
"""
eapi_attrs = _eapi_attrs_cache.get(eapi)
if eapi_attrs is not None:
return eapi_attrs
orig_eapi = eapi
if eapi is not None and not eapi_is_supported(eapi):
eapi = None
eapi_attrs = _eapi_attrs(
dots_in_PN = (eapi is None or eapi_allows_dots_in_PN(eapi)),
dots_in_use_flags = (eapi is None or eapi_allows_dots_in_use_flags(eapi)),
exports_EBUILD_PHASE_FUNC = (eapi is None or eapi_exports_EBUILD_PHASE_FUNC(eapi)),
feature_flag_test = True,
feature_flag_targetroot = (eapi is not None and eapi_has_targetroot(eapi)),
hdepend = (eapi is not None and eapi_has_hdepend(eapi)),
iuse_defaults = (eapi is None or eapi_has_iuse_defaults(eapi)),
iuse_effective = (eapi is not None and eapi_has_iuse_effective(eapi)),
repo_deps = (eapi is None or eapi_has_repo_deps(eapi)),
required_use = (eapi is None or eapi_has_required_use(eapi)),
required_use_at_most_one_of = (eapi is None or eapi_has_required_use_at_most_one_of(eapi)),
slot_deps = (eapi is None or eapi_has_slot_deps(eapi)),
slot_operator = (eapi is None or eapi_has_slot_operator(eapi)),
src_uri_arrows = (eapi is None or eapi_has_src_uri_arrows(eapi)),
strong_blocks = (eapi is None or eapi_has_strong_blocks(eapi)),
use_deps = (eapi is None or eapi_has_use_deps(eapi)),
use_dep_defaults = (eapi is None or eapi_has_use_dep_defaults(eapi))
)
_eapi_attrs_cache[orig_eapi] = eapi_attrs
return eapi_attrs
开发者ID:Whissi,项目名称:portage,代码行数:38,代码来源:eapi.py
示例19: getFetchMap
def getFetchMap(self, mypkg, useflags=None, mytree=None):
"""
Get the SRC_URI metadata as a dict which maps each file name to a
set of alternative URIs.
@param mypkg: cpv for an ebuild
@type mypkg: String
@param useflags: a collection of enabled USE flags, for evaluation of
conditionals
@type useflags: set, or None to enable all conditionals
@param mytree: The canonical path of the tree in which the ebuild
is located, or None for automatic lookup
@type mypkg: String
@return: A dict which maps each file name to a set of alternative
URIs.
@rtype: dict
"""
try:
eapi, myuris = self.aux_get(mypkg,
["EAPI", "SRC_URI"], mytree=mytree)
except KeyError:
# Convert this to an InvalidDependString exception since callers
# already handle it.
raise portage.exception.InvalidDependString(
"getFetchMap(): aux_get() error reading "+mypkg+"; aborting.")
if not eapi_is_supported(eapi):
# Convert this to an InvalidDependString exception
# since callers already handle it.
raise portage.exception.InvalidDependString(
"getFetchMap(): '%s' has unsupported EAPI: '%s'" % \
(mypkg, eapi))
return _parse_uri_map(mypkg, {'EAPI':eapi,'SRC_URI':myuris},
use=useflags)
开发者ID:entoo,项目名称:portage-src,代码行数:36,代码来源:porttree.py
示例20: _start
def _start(self):
ebuild_path = self.ebuild_hash.location
with io.open(_unicode_encode(ebuild_path,
encoding=_encodings['fs'], errors='strict'),
mode='r', encoding=_encodings['repo.content'],
errors='replace') as f:
self._eapi, self._eapi_lineno = portage._parse_eapi_ebuild_head(f)
parsed_eapi = self._eapi
if parsed_eapi is None:
parsed_eapi = "0"
if not parsed_eapi:
# An empty EAPI setting is invalid.
self._eapi_invalid(None)
self._set_returncode((self.pid, 1 << 8))
self.wait()
return
self.eapi_supported = portage.eapi_is_supported(parsed_eapi)
if not self.eapi_supported:
self.metadata = {"EAPI": parsed_eapi}
self._set_returncode((self.pid, os.EX_OK << 8))
self.wait()
return
settings = self.settings
settings.setcpv(self.cpv)
settings.configdict['pkg']['EAPI'] = parsed_eapi
debug = settings.get("PORTAGE_DEBUG") == "1"
master_fd = None
slave_fd = None
fd_pipes = None
if self.fd_pipes is not None:
fd_pipes = self.fd_pipes.copy()
else:
fd_pipes = {}
null_input = open('/dev/null', 'rb')
fd_pipes.setdefault(0, null_input.fileno())
fd_pipes.setdefault(1, sys.__stdout__.fileno())
fd_pipes.setdefault(2, sys.__stderr__.fileno())
# flush any pending output
stdout_filenos = (sys.__stdout__.fileno(), sys.__stderr__.fileno())
for fd in fd_pipes.values():
if fd in stdout_filenos:
sys.__stdout__.flush()
sys.__stderr__.flush()
break
self._files = self._files_dict()
files = self._files
master_fd, slave_fd = os.pipe()
fcntl.fcntl(master_fd, fcntl.F_SETFL,
fcntl.fcntl(master_fd, fcntl.F_GETFL) | os.O_NONBLOCK)
fd_pipes[self._metadata_fd] = slave_fd
self._raw_metadata = []
files.ebuild = master_fd
self._reg_id = self.scheduler.register(files.ebuild,
self._registered_events, self._output_handler)
self._registered = True
retval = portage.doebuild(ebuild_path, "depend",
settings=settings, debug=debug,
mydbapi=self.portdb, tree="porttree",
fd_pipes=fd_pipes, returnpid=True)
os.close(slave_fd)
null_input.close()
if isinstance(retval, int):
# doebuild failed before spawning
self._unregister()
self._set_returncode((self.pid, retval << 8))
self.wait()
return
self.pid = retval[0]
portage.process.spawned_pids.remove(self.pid)
开发者ID:devurandom,项目名称:portage,代码行数:85,代码来源:EbuildMetadataPhase.py
注:本文中的portage.eapi_is_supported函数示例由纯净天空整理自Github/MSDocs等源码及文档管理平台,相关代码片段筛选自各路编程大神贡献的开源项目,源码版权归原作者所有,传播和使用请参考对应项目的License;未经允许,请勿转载。 |
请发表评论