本文整理汇总了Python中portage.util.stack_lists函数的典型用法代码示例。如果您正苦于以下问题:Python stack_lists函数的具体用法?Python stack_lists怎么用?Python stack_lists使用的例子?那么恭喜您, 这里精选的函数代码示例或许可以为您提供帮助。
在下文中一共展示了stack_lists函数的15个代码示例,这些例子默认根据受欢迎程度排序。您可以为喜欢或者感觉有用的代码点赞,您的评价将有助于系统推荐出更棒的Python代码示例。
示例1: getUseMask
def getUseMask(self, pkg=None, stable=None):
if pkg is None:
return frozenset(stack_lists(
self._usemask_list, incremental=True))
slot = None
cp = getattr(pkg, "cp", None)
if cp is None:
slot = dep_getslot(pkg)
repo = dep_getrepo(pkg)
pkg = _pkg_str(remove_slot(pkg), slot=slot, repo=repo)
cp = pkg.cp
if stable is None:
stable = self._isStable(pkg)
usemask = []
if hasattr(pkg, "repo") and pkg.repo != Package.UNKNOWN_REPO:
repos = []
try:
repos.extend(repo.name for repo in
self.repositories[pkg.repo].masters)
except KeyError:
pass
repos.append(pkg.repo)
for repo in repos:
usemask.append(self._repo_usemask_dict.get(repo, {}))
if stable:
usemask.append(self._repo_usestablemask_dict.get(repo, {}))
cpdict = self._repo_pusemask_dict.get(repo, {}).get(cp)
if cpdict:
pkg_usemask = ordered_by_atom_specificity(cpdict, pkg)
if pkg_usemask:
usemask.extend(pkg_usemask)
if stable:
cpdict = self._repo_pusestablemask_dict.get(repo, {}).get(cp)
if cpdict:
pkg_usemask = ordered_by_atom_specificity(cpdict, pkg)
if pkg_usemask:
usemask.extend(pkg_usemask)
for i, pusemask_dict in enumerate(self._pusemask_list):
if self._usemask_list[i]:
usemask.append(self._usemask_list[i])
if stable and self._usestablemask_list[i]:
usemask.append(self._usestablemask_list[i])
cpdict = pusemask_dict.get(cp)
if cpdict:
pkg_usemask = ordered_by_atom_specificity(cpdict, pkg)
if pkg_usemask:
usemask.extend(pkg_usemask)
if stable:
cpdict = self._pusestablemask_list[i].get(cp)
if cpdict:
pkg_usemask = ordered_by_atom_specificity(cpdict, pkg)
if pkg_usemask:
usemask.extend(pkg_usemask)
return frozenset(stack_lists(usemask, incremental=True))
示例2: __init__
def __init__(self, pmask_locations, abs_user_config, user_config=True):
self._punmaskdict = ExtendedAtomDict(list)
self._pmaskdict = ExtendedAtomDict(list)
pkgmasklines = []
pkgunmasklines = []
for x in pmask_locations:
pkgmasklines.append(grabfile_package(
os.path.join(x, "package.mask"), recursive=1))
pkgunmasklines.append(grabfile_package(
os.path.join(x, "package.unmask"), recursive=1))
if user_config:
pkgmasklines.append(grabfile_package(
os.path.join(abs_user_config, "package.mask"), recursive=1, allow_wildcard=True))
pkgunmasklines.append(grabfile_package(
os.path.join(abs_user_config, "package.unmask"), recursive=1, allow_wildcard=True))
pkgmasklines = stack_lists(pkgmasklines, incremental=1)
pkgunmasklines = stack_lists(pkgunmasklines, incremental=1)
for x in pkgmasklines:
self._pmaskdict.setdefault(x.cp, []).append(x)
for x in pkgunmasklines:
self._punmaskdict.setdefault(x.cp, []).append(x)
示例3: getUseForce
def getUseForce(self, pkg=None):
if pkg is None:
return frozenset(stack_lists(
self._useforce_list, incremental=True))
cp = getattr(pkg, "cp", None)
if cp is None:
cp = cpv_getkey(remove_slot(pkg))
useforce = []
if hasattr(pkg, "repo") and pkg.repo != Package.UNKNOWN_REPO:
repos = []
try:
repos.extend(repo.name for repo in
self.repositories[pkg.repo].masters)
except KeyError:
pass
repos.append(pkg.repo)
for repo in repos:
useforce.append(self._repo_useforce_dict.get(repo, {}))
cpdict = self._repo_puseforce_dict.get(repo, {}).get(cp)
if cpdict:
pkg_useforce = ordered_by_atom_specificity(cpdict, pkg)
if pkg_useforce:
useforce.extend(pkg_useforce)
for i, puseforce_dict in enumerate(self._puseforce_list):
if self._useforce_list[i]:
useforce.append(self._useforce_list[i])
cpdict = puseforce_dict.get(cp)
if cpdict:
pkg_useforce = ordered_by_atom_specificity(cpdict, pkg)
if pkg_useforce:
useforce.extend(pkg_useforce)
return frozenset(stack_lists(useforce, incremental=True))
示例4: __init__
def __init__(self, configpaths, valid_versions=None, repository_modules=False):
'''Module init
@param configpaths: ordered list of filepaths to load
'''
if repository_modules:
self.configpaths = [os.path.join(path, 'repository.yaml') for path in configpaths]
elif _not_installed:
self.configpaths = [os.path.realpath(os.path.join(os.path.dirname(
os.path.dirname(os.path.dirname(os.path.dirname(os.path.dirname(
os.path.dirname(__file__)))))), 'repoman/cnf/repository/repository.yaml'))]
else:
self.configpaths = [os.path.join(portage.const.EPREFIX or '/',
'usr/share/repoman/repository/repository.yaml')]
logging.debug("ModuleConfig; configpaths: %s", self.configpaths)
self.controller = Modules(path=MODULES_PATH, namepath="repoman.modules.scan")
logging.debug("ModuleConfig; module_names: %s", self.controller.module_names)
self._configs = None
self.enabled = []
self.pkgs_loop = []
self.ebuilds_loop = []
self.final_loop = []
self.modules_forced = ['ebuild', 'mtime']
self.load_configs(valid_versions=valid_versions)
for loop in ['pkgs', 'ebuilds', 'final']:
logging.debug("ModuleConfig; Processing loop %s", loop)
setattr(self, '%s_loop' % loop, self._determine_list(loop))
self.linechecks = stack_lists(c['linechecks_modules'].split() for c in self._configs)
示例5: load
def load(self):
self._setAtoms(x for x in stack_lists(
[grabfile_package(os.path.join(y.location, "packages"),
verify_eapi=True, eapi=y.eapi, eapi_default=None)
for y in self._profiles
if "profile-set" in y.profile_formats],
incremental=1) if x[:1] != "*")
示例6: getUseForce
def getUseForce(self, pkg=None):
if pkg is None:
return frozenset(stack_lists(
self._useforce_list, incremental=True))
cp = getattr(pkg, "cp", None)
if cp is None:
cp = cpv_getkey(remove_slot(pkg))
useforce = []
for i, puseforce_dict in enumerate(self._puseforce_list):
if self._useforce_list[i]:
useforce.append(self._useforce_list[i])
cpdict = puseforce_dict.get(cp)
if cpdict:
pkg_useforce = ordered_by_atom_specificity(cpdict, pkg)
if pkg_useforce:
useforce.extend(pkg_useforce)
return frozenset(stack_lists(useforce, incremental=True))
示例7: testStackLists
def testStackLists(self):
tests = [ ( [ ['a','b','c'], ['d','e','f'] ], ['a','c','b','e','d','f'], False ),
( [ ['a','x'], ['b','x'] ], ['a','x','b'], False ),
( [ ['a','b','c'], ['-*'] ], [], True ),
( [ ['a'], ['-a'] ], [], True ) ]
for test in tests:
result = stack_lists( test[0], test[2] )
self.assertEqual( set(result) , set(test[1]) )
示例8: testStackLists
def testStackLists(self):
tests = [
([["a", "b", "c"], ["d", "e", "f"]], ["a", "c", "b", "e", "d", "f"], False),
([["a", "x"], ["b", "x"]], ["a", "x", "b"], False),
([["a", "b", "c"], ["-*"]], [], True),
([["a"], ["-a"]], [], True),
]
for test in tests:
result = stack_lists(test[0], test[2])
self.assertEqual(result, test[1])
示例9: getKeywords
def getKeywords(self, cpv, slot, keywords, repo):
cp = cpv_getkey(cpv)
pkg = "".join((cpv, _slot_separator, slot))
if repo and repo != Package.UNKNOWN_REPO:
pkg = "".join((pkg, _repo_separator, repo))
keywords = [[x for x in keywords.split() if x != "-*"]]
for pkeywords_dict in self._pkeywords_list:
cpdict = pkeywords_dict.get(cp)
if cpdict:
pkg_keywords = ordered_by_atom_specificity(cpdict, pkg)
if pkg_keywords:
keywords.extend(pkg_keywords)
return stack_lists(keywords, incremental=True)
示例10: getKeywords
def getKeywords(self, cpv, slot, keywords, repo):
try:
cpv.slot
except AttributeError:
pkg = _pkg_str(cpv, slot=slot, repo=repo)
else:
pkg = cpv
cp = pkg.cp
keywords = [[x for x in keywords.split() if x != "-*"]]
for pkeywords_dict in self._pkeywords_list:
cpdict = pkeywords_dict.get(cp)
if cpdict:
pkg_keywords = ordered_by_atom_specificity(cpdict, pkg)
if pkg_keywords:
keywords.extend(pkg_keywords)
return stack_lists(keywords, incremental=True)
示例11: load
def load(self):
debug = self._debug
if debug:
writemsg_level("\nPackagesSystemSet: profile paths: %s\n" % \
(self._profile_paths,), level=logging.DEBUG, noiselevel=-1)
mylist = [grabfile_package(os.path.join(x, "packages")) for x in self._profile_paths]
if debug:
writemsg_level("\nPackagesSystemSet: raw packages: %s\n" % \
(mylist,), level=logging.DEBUG, noiselevel=-1)
mylist = stack_lists(mylist, incremental=1)
if debug:
writemsg_level("\nPackagesSystemSet: stacked packages: %s\n" % \
(mylist,), level=logging.DEBUG, noiselevel=-1)
self._setAtoms([x[1:] for x in mylist if x[0] == "*"])
示例12: _determine_list
def _determine_list(self, loop):
'''Determine the ordered list from the config data and
the moule_runsIn value in the module_spec
@returns: list of modules
'''
lists = [c['scan_modules'].split() for c in self._configs]
stacked = self.modules_forced + stack_lists(lists)
mlist = []
try:
for mod in stacked:
logging.debug("ModuleConfig; checking loop %s, module: %s, in: %s",
loop, mod, self.controller.get_spec(mod, 'module_runsIn'))
if loop in self.controller.get_spec(mod, 'module_runsIn'):
mlist.append(mod)
except InvalidModuleName:
logging.error("ModuleConfig; unknown module: %s, skipping", mod)
logging.debug("ModuleConfig; mlist: %s", mlist)
return mlist
示例13: load
def load(self):
debug = self._debug
if debug:
writemsg_level("\nPackagesSystemSet: profiles: %s\n" %
(self._profiles,), level=logging.DEBUG, noiselevel=-1)
mylist = [grabfile_package(os.path.join(x.location, "packages"),
verify_eapi=True, eapi=x.eapi, eapi_default=None)
for x in self._profiles]
if debug:
writemsg_level("\nPackagesSystemSet: raw packages: %s\n" % \
(mylist,), level=logging.DEBUG, noiselevel=-1)
mylist = stack_lists(mylist, incremental=1)
if debug:
writemsg_level("\nPackagesSystemSet: stacked packages: %s\n" % \
(mylist,), level=logging.DEBUG, noiselevel=-1)
self._setAtoms([x[1:] for x in mylist if x[0] == "*"])
示例14: __init__
#.........这里部分代码省略.........
"to nonexistent directory: '%s'") %
(repo_name, repo.location), level=logging.ERROR, noiselevel=-1)
# Ignore missing directory for 'gentoo' so that
# first sync with emerge-webrsync is possible.
if repo.name != 'gentoo':
del prepos[repo_name]
continue
# After removing support for PORTDIR_OVERLAY, the following check can be:
# if repo.missing_repo_name:
if repo.missing_repo_name and repo.name != repo_name:
writemsg_level("!!! %s\n" % _("Section '%s' in repos.conf refers to repository "
"without repository name set in '%s'") %
(repo_name, os.path.join(repo.location, REPO_NAME_LOC)), level=logging.ERROR, noiselevel=-1)
del prepos[repo_name]
continue
if repo.name != repo_name:
writemsg_level("!!! %s\n" % _("Section '%s' in repos.conf has name different "
"from repository name '%s' set inside repository") %
(repo_name, repo.name), level=logging.ERROR, noiselevel=-1)
del prepos[repo_name]
continue
location_map[repo.location] = repo_name
treemap[repo_name] = repo.location
# Add alias mappings, but never replace unaliased mappings.
for repo_name, repo in list(prepos.items()):
names = set()
names.add(repo_name)
if repo.aliases:
aliases = stack_lists([repo.aliases], incremental=True)
names.update(aliases)
for name in names:
if name in prepos and prepos[name].location is not None:
if name == repo_name:
# unaliased names already handled earlier
continue
writemsg_level(_("!!! Repository name or alias '%s', " + \
"defined for repository '%s', overrides " + \
"existing alias or repository.\n") % (name, repo_name), level=logging.WARNING, noiselevel=-1)
# Never replace an unaliased mapping with
# an aliased mapping.
continue
prepos[name] = repo
if repo.location is not None:
if repo.location not in location_map:
# Never replace an unaliased mapping with
# an aliased mapping.
location_map[repo.location] = name
treemap[name] = repo.location
main_repo = prepos['DEFAULT'].main_repo
if main_repo is None or main_repo not in prepos:
#setting main_repo if it was not set in repos.conf
main_repo = location_map.get(portdir)
if main_repo is not None:
prepos['DEFAULT'].main_repo = main_repo
else:
prepos['DEFAULT'].main_repo = None
if portdir and not portage._sync_mode:
writemsg(_("!!! main-repo not set in DEFAULT and PORTDIR is empty.\n"), noiselevel=-1)
示例15: __init__
def __init__(self, paths, settings):
"""Load config from files in paths"""
prepos = {}
location_map = {}
treemap = {}
ignored_map = {}
ignored_location_map = {}
portdir = settings.get('PORTDIR', '')
portdir_overlay = settings.get('PORTDIR_OVERLAY', '')
self._parse(paths, prepos, ignored_map, ignored_location_map)
# If PORTDIR_OVERLAY contains a repo with the same repo_name as
# PORTDIR, then PORTDIR is overridden.
portdir = self._add_overlays(portdir, portdir_overlay, prepos,
ignored_map, ignored_location_map)
if portdir and portdir.strip():
portdir = os.path.realpath(portdir)
ignored_repos = tuple((repo_name, tuple(paths)) \
for repo_name, paths in ignored_map.items())
self.missing_repo_names = frozenset(repo.location
for repo in prepos.values()
if repo.location is not None and repo.missing_repo_name)
#Parse layout.conf and read masters key.
for repo in prepos.values():
if not repo.location:
continue
layout_filename = os.path.join(repo.location, "metadata", "layout.conf")
layout_data, layout_errors = parse_layout_conf(repo.location, repo.name)
# layout.conf masters may be overridden here if we have a masters
# setting from the user's repos.conf
if repo.masters is None:
repo.masters = layout_data['masters']
if layout_data['aliases']:
aliases = repo.aliases
if aliases is None:
aliases = ()
# repos.conf aliases come after layout.conf aliases, giving
# them the ability to do incremental overrrides
repo.aliases = layout_data['aliases'] + tuple(aliases)
for value in ('allow-missing-manifest', 'cache-formats',
'create-manifest', 'disable-manifest', 'manifest-hashes',
'sign-manifest', 'thin-manifest', 'update-changelog'):
setattr(repo, value.lower().replace("-", "_"), layout_data[value])
repo.portage1_profiles = any(x.startswith("portage-1") \
for x in layout_data['profile-formats'])
repo.portage1_profiles_compat = layout_data['profile-formats'] == ('portage-1-compat',)
#Take aliases into account.
new_prepos = {}
for repo_name, repo in prepos.items():
names = set()
names.add(repo_name)
if repo.aliases:
aliases = stack_lists([repo.aliases], incremental=True)
names.update(aliases)
for name in names:
if name in new_prepos:
writemsg_level(_("!!! Repository name or alias '%s', " + \
"defined for repository '%s', overrides " + \
"existing alias or repository.\n") % (name, repo_name), level=logging.WARNING, noiselevel=-1)
new_prepos[name] = repo
prepos = new_prepos
for (name, r) in prepos.items():
if r.location is not None:
location_map[r.location] = name
treemap[name] = r.location
# filter duplicates from aliases, by only including
# items where repo.name == key
prepos_order = sorted(prepos.items(), key=lambda r:r[1].priority or 0)
prepos_order = [repo.name for (key, repo) in prepos_order
if repo.name == key and repo.location is not None]
if portdir in location_map:
portdir_repo = prepos[location_map[portdir]]
portdir_sync = settings.get('SYNC', '')
#if SYNC variable is set and not overwritten by repos.conf
if portdir_sync and not portdir_repo.sync:
portdir_repo.sync = portdir_sync
if prepos['DEFAULT'].main_repo is None or \
prepos['DEFAULT'].main_repo not in prepos:
#setting main_repo if it was not set in repos.conf
if portdir in location_map:
prepos['DEFAULT'].main_repo = location_map[portdir]
elif portdir in ignored_location_map:
#.........这里部分代码省略.........