* [gentoo-commits] proj/portage:master commit in: pym/portage/package/ebuild/, pym/portage/package/ebuild/_config/
@ 2011-06-19 16:40 Arfrever Frehtes Taifersar Arahesis
0 siblings, 0 replies; 8+ messages in thread
From: Arfrever Frehtes Taifersar Arahesis @ 2011-06-19 16:40 UTC (permalink / raw
To: gentoo-commits
commit: 96ab7b436ceb3543f5158aab1fab48470c3f0b98
Author: Arfrever Frehtes Taifersar Arahesis <Arfrever <AT> Gentoo <DOT> Org>
AuthorDate: Sun Jun 19 16:37:56 2011 +0000
Commit: Arfrever Frehtes Taifersar Arahesis <arfrever <AT> gentoo <DOT> org>
CommitDate: Sun Jun 19 16:37:56 2011 +0000
URL: http://git.overlays.gentoo.org/gitweb/?p=proj/portage.git;a=commit;h=96ab7b43
Bug #370693: Support use.force, package.use.force, use.mask and
package.use.mask files in ${repository}/profiles.
---
pym/portage/package/ebuild/_config/UseManager.py | 156 ++++++++++++++--------
pym/portage/package/ebuild/config.py | 2 +-
2 files changed, 100 insertions(+), 58 deletions(-)
diff --git a/pym/portage/package/ebuild/_config/UseManager.py b/pym/portage/package/ebuild/_config/UseManager.py
index ae87b2f..d9ca940 100644
--- a/pym/portage/package/ebuild/_config/UseManager.py
+++ b/pym/portage/package/ebuild/_config/UseManager.py
@@ -1,10 +1,11 @@
-# Copyright 2010 Gentoo Foundation
+# Copyright 2010-2011 Gentoo Foundation
# Distributed under the terms of the GNU General Public License v2
__all__ = (
'UseManager',
)
+from _emerge.Package import Package
from portage import os
from portage.dep import ExtendedAtomDict, remove_slot, _get_useflag_re
from portage.localization import _
@@ -15,9 +16,16 @@ from portage.package.ebuild._config.helper import ordered_by_atom_specificity
class UseManager(object):
- def __init__(self, profiles, abs_user_config, user_config=True):
+ def __init__(self, repositories, profiles, abs_user_config, user_config=True):
# file variable
#--------------------------------
+ # repositories
+ #--------------------------------
+ # use.mask _repo_usemask_dict
+ # use.force _repo_useforce_dict
+ # package.use.mask _repo_pusemask_dict
+ # package.use.force _repo_puseforce_dict
+ #--------------------------------
# profiles
#--------------------------------
# use.mask _usemask_list
@@ -41,13 +49,62 @@ class UseManager(object):
#--------------------------------
# puse
- self._usemask_list = self._parse_profile_files_to_tuple("use.mask", profiles)
- self._useforce_list = self._parse_profile_files_to_tuple("use.force", profiles)
- self._pusemask_list = self._parse_profile_files_to_dict("package.use.mask", profiles)
- self._pkgprofileuse = self._parse_profile_files_to_dict("package.use", profiles, juststrings=True)
- self._puseforce_list = self._parse_profile_files_to_dict("package.use.force", profiles)
+ self._repo_usemask_dict = self._parse_repository_files_to_dict_of_tuples("use.mask", repositories)
+ self._repo_useforce_dict = self._parse_repository_files_to_dict_of_tuples("use.force", repositories)
+ self._repo_pusemask_dict = self._parse_repository_files_to_dict_of_dicts("package.use.mask", repositories)
+ self._repo_puseforce_dict = self._parse_repository_files_to_dict_of_dicts("package.use.force", repositories)
+
+ self._usemask_list = self._parse_profile_files_to_tuple_of_tuples("use.mask", profiles)
+ self._useforce_list = self._parse_profile_files_to_tuple_of_tuples("use.force", profiles)
+ self._pusemask_list = self._parse_profile_files_to_tuple_of_dicts("package.use.mask", profiles)
+ self._pkgprofileuse = self._parse_profile_files_to_tuple_of_dicts("package.use", profiles, juststrings=True)
+ self._puseforce_list = self._parse_profile_files_to_tuple_of_dicts("package.use.force", profiles)
self._pusedict = self._parse_user_files_to_extatomdict("package.use", abs_user_config, user_config)
+
+ def _parse_file_to_tuple(self, file_name):
+ ret = []
+ lines = grabfile(file_name, recursive=1)
+ eapi = read_corresponding_eapi_file(file_name)
+ useflag_re = _get_useflag_re(eapi)
+ for prefixed_useflag in lines:
+ if prefixed_useflag[:1] == "-":
+ useflag = prefixed_useflag[1:]
+ else:
+ useflag = prefixed_useflag
+ if useflag_re.match(useflag) is None:
+ writemsg(_("--- Invalid USE flag in '%s': '%s'\n") %
+ (file_name, prefixed_useflag), noiselevel=-1)
+ else:
+ ret.append(prefixed_useflag)
+ return tuple(ret)
+
+ def _parse_file_to_dict(self, file_name, juststrings=False):
+ ret = {}
+ location_dict = {}
+ file_dict = grabdict_package(file_name, recursive=1, verify_eapi=True)
+ eapi = read_corresponding_eapi_file(file_name)
+ useflag_re = _get_useflag_re(eapi)
+ for k, v in file_dict.items():
+ useflags = []
+ for prefixed_useflag in v:
+ if prefixed_useflag[:1] == "-":
+ useflag = prefixed_useflag[1:]
+ else:
+ useflag = prefixed_useflag
+ if useflag_re.match(useflag) is None:
+ writemsg(_("--- Invalid USE flag for '%s' in '%s': '%s'\n") %
+ (k, file_name, prefixed_useflag), noiselevel=-1)
+ else:
+ useflags.append(prefixed_useflag)
+ location_dict.setdefault(k, []).extend(useflags)
+ for k, v in location_dict.items():
+ if juststrings:
+ v = " ".join(v)
+ else:
+ v = tuple(v)
+ ret.setdefault(k.cp, {})[k] = v
+ return ret
def _parse_user_files_to_extatomdict(self, file_name, location, user_config):
ret = ExtendedAtomDict(dict)
@@ -59,57 +116,28 @@ class UseManager(object):
return ret
- def _parse_profile_files_to_tuple(self, file_name, locations):
- ret = []
- for profile in locations:
- profile_lines = []
- path = os.path.join(profile, file_name)
- lines = grabfile(path, recursive=1)
- eapi = read_corresponding_eapi_file(path)
- useflag_re = _get_useflag_re(eapi)
- for prefixed_useflag in lines:
- if prefixed_useflag[:1] == "-":
- useflag = prefixed_useflag[1:]
- else:
- useflag = prefixed_useflag
- if useflag_re.match(useflag) is None:
- writemsg(_("--- Invalid USE flag in '%s': '%s'\n") % \
- (path, prefixed_useflag), noiselevel=-1)
- else:
- profile_lines.append(prefixed_useflag)
- ret.append(tuple(profile_lines))
- return tuple(ret)
+ def _parse_repository_files_to_dict_of_tuples(self, file_name, repositories):
+ ret = {}
+ for repo in repositories.repos_with_profiles():
+ lines = []
+ for master in repo.masters:
+ lines.extend(self._parse_file_to_tuple(os.path.join(master.location, "profiles", file_name)))
+ lines.extend(self._parse_file_to_tuple(os.path.join(repo.location, "profiles", file_name)))
+ ret[repo.name] = tuple(lines)
+ return ret
- def _parse_profile_files_to_dict(self, file_name, locations, juststrings=False):
- ret = []
- for profile in locations:
- profile_dict = {}
- cpdict = {}
- path = os.path.join(profile, file_name)
- file_dict = grabdict_package(path, recursive=1, verify_eapi=True)
- eapi = read_corresponding_eapi_file(path)
- useflag_re = _get_useflag_re(eapi)
- for k, v in file_dict.items():
- useflags = []
- for prefixed_useflag in v:
- if prefixed_useflag[:1] == "-":
- useflag = prefixed_useflag[1:]
- else:
- useflag = prefixed_useflag
- if useflag_re.match(useflag) is None:
- writemsg(_("--- Invalid USE flag for '%s' in '%s': '%s'\n") % \
- (k, path, prefixed_useflag), noiselevel=-1)
- else:
- useflags.append(prefixed_useflag)
- profile_dict.setdefault(k, []).extend(useflags)
- for k, v in profile_dict.items():
- if juststrings:
- v = " ".join(v)
- else:
- v = tuple(v)
- cpdict.setdefault(k.cp, {})[k] = v
- ret.append(cpdict)
- return tuple(ret)
+ def _parse_repository_files_to_dict_of_dicts(self, file_name, repositories):
+ ret = {}
+ for repo in repositories.repos_with_profiles():
+ # TODO: Handle master repositories.
+ ret[repo.name] = self._parse_file_to_dict(os.path.join(repo.location, "profiles", file_name))
+ return ret
+
+ def _parse_profile_files_to_tuple_of_tuples(self, file_name, locations):
+ return tuple(self._parse_file_to_tuple(os.path.join(profile, file_name)) for profile in locations)
+
+ def _parse_profile_files_to_tuple_of_dicts(self, file_name, locations, juststrings=False):
+ return tuple(self._parse_file_to_dict(os.path.join(profile, file_name), juststrings) for profile in locations)
def getUseMask(self, pkg=None):
if pkg is None:
@@ -120,6 +148,13 @@ class UseManager(object):
if cp is None:
cp = cpv_getkey(remove_slot(pkg))
usemask = []
+ if hasattr(pkg, "repo") and pkg.repo != Package.UNKNOWN_REPO:
+ usemask.append(self._repo_usemask_dict[pkg.repo])
+ cpdict = self._repo_pusemask_dict[pkg.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])
@@ -139,6 +174,13 @@ class UseManager(object):
if cp is None:
cp = cpv_getkey(remove_slot(pkg))
useforce = []
+ if hasattr(pkg, "repo") and pkg.repo != Package.UNKNOWN_REPO:
+ useforce.append(self._repo_useforce_dict[pkg.repo])
+ cpdict = self._repo_puseforce_dict[pkg.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])
diff --git a/pym/portage/package/ebuild/config.py b/pym/portage/package/ebuild/config.py
index b45f3c1..466b701 100644
--- a/pym/portage/package/ebuild/config.py
+++ b/pym/portage/package/ebuild/config.py
@@ -513,7 +513,7 @@ class config(object):
local_config, global_accept_keywords=self.configdict["defaults"].get("ACCEPT_KEYWORDS", ""))
#Read all USE related files from profiles and optionally from user config.
- self._use_manager = UseManager(self.profiles, abs_user_config, user_config=local_config)
+ self._use_manager = UseManager(self.repositories, self.profiles, abs_user_config, user_config=local_config)
#Initialize all USE related variables we track ourselves.
self.usemask = self._use_manager.getUseMask()
self.useforce = self._use_manager.getUseForce()
^ permalink raw reply related [flat|nested] 8+ messages in thread
* [gentoo-commits] proj/portage:master commit in: pym/portage/package/ebuild/, pym/portage/package/ebuild/_config/
@ 2011-06-21 3:27 Zac Medico
0 siblings, 0 replies; 8+ messages in thread
From: Zac Medico @ 2011-06-21 3:27 UTC (permalink / raw
To: gentoo-commits
commit: 96ab3f8e703138bbbda0c50bb05998281207a4d4
Author: Zac Medico <zmedico <AT> gentoo <DOT> org>
AuthorDate: Tue Jun 21 03:27:38 2011 +0000
Commit: Zac Medico <zmedico <AT> gentoo <DOT> org>
CommitDate: Tue Jun 21 03:27:38 2011 +0000
URL: http://git.overlays.gentoo.org/gitweb/?p=proj/portage.git;a=commit;h=96ab3f8e
config: fix repo KeyErrors
---
pym/portage/package/ebuild/_config/UseManager.py | 18 ++++++++++++++++--
pym/portage/package/ebuild/config.py | 10 ++++++++--
2 files changed, 24 insertions(+), 4 deletions(-)
diff --git a/pym/portage/package/ebuild/_config/UseManager.py b/pym/portage/package/ebuild/_config/UseManager.py
index 67e9294..d7ef0f6 100644
--- a/pym/portage/package/ebuild/_config/UseManager.py
+++ b/pym/portage/package/ebuild/_config/UseManager.py
@@ -147,7 +147,14 @@ class UseManager(object):
cp = cpv_getkey(remove_slot(pkg))
usemask = []
if hasattr(pkg, "repo") and pkg.repo != Package.UNKNOWN_REPO:
- for repo in [repo.name for repo in self.repositories[pkg.repo].masters] + [pkg.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, {}))
cpdict = self._repo_pusemask_dict.get(repo, {}).get(cp)
if cpdict:
@@ -174,7 +181,14 @@ class UseManager(object):
cp = cpv_getkey(remove_slot(pkg))
useforce = []
if hasattr(pkg, "repo") and pkg.repo != Package.UNKNOWN_REPO:
- for repo in [repo.name for repo in self.repositories[pkg.repo].masters] + [pkg.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:
diff --git a/pym/portage/package/ebuild/config.py b/pym/portage/package/ebuild/config.py
index 6b7af51..c8ea1c8 100644
--- a/pym/portage/package/ebuild/config.py
+++ b/pym/portage/package/ebuild/config.py
@@ -1127,8 +1127,14 @@ class config(object):
repo_env = []
repo_env_empty = True
if repository and repository != Package.UNKNOWN_REPO:
- for repo in [repo.name for
- repo in self.repositories[repository].masters] + [repository]:
+ repos = []
+ try:
+ repos.extend(repo.name for repo in
+ self.repositories[repository].masters)
+ except KeyError:
+ pass
+ repos.append(repository)
+ for repo in repos:
d = self._repo_make_defaults.get(repo)
if d is None:
d = {}
^ permalink raw reply related [flat|nested] 8+ messages in thread
* [gentoo-commits] proj/portage:master commit in: pym/portage/package/ebuild/, pym/portage/package/ebuild/_config/
@ 2011-06-27 0:34 Zac Medico
0 siblings, 0 replies; 8+ messages in thread
From: Zac Medico @ 2011-06-27 0:34 UTC (permalink / raw
To: gentoo-commits
commit: 84f53ead91047d1389c80edeb7d9d1720e07e2a4
Author: Zac Medico <zmedico <AT> gentoo <DOT> org>
AuthorDate: Mon Jun 27 00:34:13 2011 +0000
Commit: Zac Medico <zmedico <AT> gentoo <DOT> org>
CommitDate: Mon Jun 27 00:34:13 2011 +0000
URL: http://git.overlays.gentoo.org/gitweb/?p=proj/portage.git;a=commit;h=84f53ead
config: disallow per-package/repo CONFIG_PROTECT
In order for reliable etc-update behavior, CONFIG_PROTECT needs to be
a global constant (see bug 370693, comment #8).
---
.../package/ebuild/_config/special_env_vars.py | 6 ++++++
pym/portage/package/ebuild/config.py | 4 ++++
2 files changed, 10 insertions(+), 0 deletions(-)
diff --git a/pym/portage/package/ebuild/_config/special_env_vars.py b/pym/portage/package/ebuild/_config/special_env_vars.py
index 0214c86..3da724d 100644
--- a/pym/portage/package/ebuild/_config/special_env_vars.py
+++ b/pym/portage/package/ebuild/_config/special_env_vars.py
@@ -165,6 +165,12 @@ environ_filter += [
environ_filter = frozenset(environ_filter)
+# Variables that are not allowed to have per-repo or per-package
+# settings.
+global_only_vars = frozenset([
+ "CONFIG_PROTECT",
+])
+
default_globals = {
'ACCEPT_LICENSE': '* -@EULA',
'ACCEPT_PROPERTIES': '*',
diff --git a/pym/portage/package/ebuild/config.py b/pym/portage/package/ebuild/config.py
index c8ea1c8..c467efe 100644
--- a/pym/portage/package/ebuild/config.py
+++ b/pym/portage/package/ebuild/config.py
@@ -130,6 +130,7 @@ class config(object):
_environ_filter = special_env_vars.environ_filter
_environ_whitelist = special_env_vars.environ_whitelist
_environ_whitelist_re = special_env_vars.environ_whitelist_re
+ _global_only_vars = special_env_vars.global_only_vars
def __init__(self, clone=None, mycpv=None, config_profile_path=None,
config_incrementals=None, config_root=None, target_root=None,
@@ -1142,6 +1143,8 @@ class config(object):
# make a copy, since we might modify it with
# package.use settings
d = d.copy()
+ for k in self._global_only_vars:
+ d.pop(k, None)
repo_env.append(d)
cpdict = self._use_manager._repo_puse_dict.get(repo, {}).get(cp)
if cpdict:
@@ -1206,6 +1209,7 @@ class config(object):
protected_pkg_keys = set(pkg_configdict)
protected_pkg_keys.discard('USE')
+ protected_pkg_keys.update(self._global_only_vars)
# If there are _any_ package.env settings for this package
# then it automatically triggers config.reset(), in order
^ permalink raw reply related [flat|nested] 8+ messages in thread
* [gentoo-commits] proj/portage:master commit in: pym/portage/package/ebuild/, pym/portage/package/ebuild/_config/
@ 2011-10-25 21:44 Zac Medico
0 siblings, 0 replies; 8+ messages in thread
From: Zac Medico @ 2011-10-25 21:44 UTC (permalink / raw
To: gentoo-commits
commit: e544ee13527a0568de2b556510280ed96fc1b3ff
Author: Brian Harring <ferringb <AT> chromium <DOT> org>
AuthorDate: Tue Oct 25 05:41:17 2011 +0000
Commit: Zac Medico <zmedico <AT> gentoo <DOT> org>
CommitDate: Tue Oct 25 21:36:43 2011 +0000
URL: http://git.overlays.gentoo.org/gitweb/?p=proj/portage.git;a=commit;h=e544ee13
add profile-formats portage-1 awareness and enforcement
Currently it just spits warnings for implicit portage-1 format usage;
down the line, this will be converted into an explicit error.
For repo's that configure themselves as portage-1 or pms explicitly, enforce
it.
---
.../package/ebuild/_config/KeywordsManager.py | 4 +-
.../package/ebuild/_config/LocationsManager.py | 4 +-
pym/portage/package/ebuild/_config/MaskManager.py | 34 ++++++---
pym/portage/package/ebuild/_config/UseManager.py | 14 ++--
pym/portage/package/ebuild/config.py | 76 +++++++++++---------
5 files changed, 78 insertions(+), 54 deletions(-)
diff --git a/pym/portage/package/ebuild/_config/KeywordsManager.py b/pym/portage/package/ebuild/_config/KeywordsManager.py
index c2b8343..704ddca 100644
--- a/pym/portage/package/ebuild/_config/KeywordsManager.py
+++ b/pym/portage/package/ebuild/_config/KeywordsManager.py
@@ -20,7 +20,7 @@ class KeywordsManager(object):
global_accept_keywords=""):
self._pkeywords_list = []
rawpkeywords = [grabdict_package(
- os.path.join(x, "package.keywords"), recursive=1,
+ os.path.join(x[0], "package.keywords"), recursive=x[1],
verify_eapi=True) \
for x in profiles]
for pkeyworddict in rawpkeywords:
@@ -35,7 +35,7 @@ class KeywordsManager(object):
self._p_accept_keywords = []
raw_p_accept_keywords = [grabdict_package(
- os.path.join(x, "package.accept_keywords"), recursive=1,
+ os.path.join(x[0], "package.accept_keywords"), recursive=x[1],
verify_eapi=True) \
for x in profiles]
for d in raw_p_accept_keywords:
diff --git a/pym/portage/package/ebuild/_config/LocationsManager.py b/pym/portage/package/ebuild/_config/LocationsManager.py
index a465935..92c838c 100644
--- a/pym/portage/package/ebuild/_config/LocationsManager.py
+++ b/pym/portage/package/ebuild/_config/LocationsManager.py
@@ -121,8 +121,8 @@ class LocationsManager(object):
if os.path.isdir(os.path.join(currentPath, x)))
if offenders:
writemsg((_("Profile '%(profile_path)s' in repository "
- "'%(repo_name)s' is using 'portage-1' profile format, but "
- "the repository is not configured for it. This will break "
+ "'%(repo_name)s' is implicitly using 'portage-1' profile format, but "
+ "the repository profiles are not marked as that format. This will break "
"in the future. Please either convert the following paths "
"to files, or add\nprofile-format = portage-1\nto the "
"repositories layout.conf. Files: '%(files)s'\n")
diff --git a/pym/portage/package/ebuild/_config/MaskManager.py b/pym/portage/package/ebuild/_config/MaskManager.py
index 08acf92..a2bfb19 100644
--- a/pym/portage/package/ebuild/_config/MaskManager.py
+++ b/pym/portage/package/ebuild/_config/MaskManager.py
@@ -33,22 +33,33 @@ class MaskManager(object):
# repo may be often referenced by others as the master.
pmask_cache = {}
- def grab_pmask(loc):
+ def grab_pmask(loc, repo_config):
if loc not in pmask_cache:
- pmask_cache[loc] = grabfile_package(
- os.path.join(loc, "profiles", "package.mask"),
- recursive=1, remember_source_file=True, verify_eapi=True)
+ path = os.path.join(loc, 'profiles', 'package.mask')
+ pmask_cache[loc] = grabfile_package(path,
+ recursive=repo_config.portage1_profiles,
+ remember_source_file=True, verify_eapi=True)
+ if repo_config.portage1_profiles_compat and os.path.isdir(path):
+ writemsg((_("Repository '%(repo_name)s' is implicitly using "
+ "'portage-1' profile format in its profiles/package.mask, but "
+ "the repository profiles are not marked as that format. This will break "
+ "in the future. Please either convert the following paths "
+ "to files, or add\nprofile-format = portage-1\nto the "
+ "repositories layout.conf.\n")
+ % dict(repo_name=repo.name)),
+ noiselevel=-1)
+
return pmask_cache[loc]
repo_pkgmasklines = []
for repo in repositories.repos_with_profiles():
lines = []
- repo_lines = grab_pmask(repo.location)
+ repo_lines = grab_pmask(repo.location, repo)
removals = frozenset(line[0][1:] for line in repo_lines
if line[0][:1] == "-")
matched_removals = set()
for master in repo.masters:
- master_lines = grab_pmask(master.location)
+ master_lines = grab_pmask(master.location, master)
for line in master_lines:
if line[0] in removals:
matched_removals.add(line[0])
@@ -91,6 +102,8 @@ class MaskManager(object):
repo_pkgunmasklines = []
for repo in repositories.repos_with_profiles():
+ if not repo.portage1_profiles:
+ continue
repo_lines = grabfile_package(os.path.join(repo.location, "profiles", "package.unmask"), \
recursive=1, remember_source_file=True, verify_eapi=True)
lines = stack_lists([repo_lines], incremental=1, \
@@ -102,11 +115,12 @@ class MaskManager(object):
#to allow profiles to override masks from their parent profiles.
profile_pkgmasklines = []
profile_pkgunmasklines = []
- for x in profiles:
+ for x, portage1_mode in profiles:
profile_pkgmasklines.append(grabfile_package(
- os.path.join(x, "package.mask"), recursive=1, remember_source_file=True, verify_eapi=True))
- profile_pkgunmasklines.append(grabfile_package(
- os.path.join(x, "package.unmask"), recursive=1, remember_source_file=True, verify_eapi=True))
+ os.path.join(x, "package.mask"), recursive=portage1_mode, remember_source_file=True, verify_eapi=True))
+ if portage1_mode:
+ profile_pkgunmasklines.append(grabfile_package(
+ os.path.join(x, "package.unmask"), recursive=1, remember_source_file=True, verify_eapi=True))
profile_pkgmasklines = stack_lists(profile_pkgmasklines, incremental=1, \
remember_source_file=True, warn_for_unmatched_removal=True,
strict_warn_for_unmatched_removal=strict_umatched_removal)
diff --git a/pym/portage/package/ebuild/_config/UseManager.py b/pym/portage/package/ebuild/_config/UseManager.py
index d7ef0f6..bf06bd7 100644
--- a/pym/portage/package/ebuild/_config/UseManager.py
+++ b/pym/portage/package/ebuild/_config/UseManager.py
@@ -65,9 +65,9 @@ class UseManager(object):
self.repositories = repositories
- def _parse_file_to_tuple(self, file_name):
+ def _parse_file_to_tuple(self, file_name, recursive=True):
ret = []
- lines = grabfile(file_name, recursive=1)
+ lines = grabfile(file_name, recursive=recursive)
eapi = read_corresponding_eapi_file(file_name)
useflag_re = _get_useflag_re(eapi)
for prefixed_useflag in lines:
@@ -82,10 +82,10 @@ class UseManager(object):
ret.append(prefixed_useflag)
return tuple(ret)
- def _parse_file_to_dict(self, file_name, juststrings=False):
+ def _parse_file_to_dict(self, file_name, juststrings=False, recursive=True):
ret = {}
location_dict = {}
- file_dict = grabdict_package(file_name, recursive=1, verify_eapi=True)
+ file_dict = grabdict_package(file_name, recursive=recursive, verify_eapi=True)
eapi = read_corresponding_eapi_file(file_name)
useflag_re = _get_useflag_re(eapi)
for k, v in file_dict.items():
@@ -132,10 +132,12 @@ class UseManager(object):
return ret
def _parse_profile_files_to_tuple_of_tuples(self, file_name, locations):
- return tuple(self._parse_file_to_tuple(os.path.join(profile, file_name)) for profile in locations)
+ return tuple(self._parse_file_to_tuple(os.path.join(profile[0], file_name), recursive=profile[1])
+ for profile in locations)
def _parse_profile_files_to_tuple_of_dicts(self, file_name, locations, juststrings=False):
- return tuple(self._parse_file_to_dict(os.path.join(profile, file_name), juststrings) for profile in locations)
+ return tuple(self._parse_file_to_dict(os.path.join(profile[0], file_name), juststrings, recursive=profile[1])
+ for profile in locations)
def getUseMask(self, pkg=None):
if pkg is None:
diff --git a/pym/portage/package/ebuild/config.py b/pym/portage/package/ebuild/config.py
index c4c5e66..cfbbad4 100644
--- a/pym/portage/package/ebuild/config.py
+++ b/pym/portage/package/ebuild/config.py
@@ -210,6 +210,7 @@ class config(object):
self.module_priority = clone.module_priority
self.profile_path = clone.profile_path
self.profiles = clone.profiles
+ self.profiles_complex = clone.profiles_complex
self.packages = clone.packages
self.repositories = clone.repositories
self._iuse_implicit_match = clone._iuse_implicit_match
@@ -276,13 +277,9 @@ class config(object):
locations_manager = LocationsManager(config_root=config_root,
config_profile_path=config_profile_path, eprefix=eprefix,
local_config=local_config, target_root=target_root)
- locations_manager.load_profiles([])
eprefix = locations_manager.eprefix
config_root = locations_manager.config_root
- self.profiles = locations_manager.profiles
- self.profile_path = locations_manager.profile_path
- self.user_profile_dir = locations_manager.user_profile_dir
abs_user_config = locations_manager.abs_user_config
make_conf = getconfig(
@@ -301,6 +298,13 @@ class config(object):
eroot = locations_manager.eroot
self.global_config_path = locations_manager.global_config_path
+ make_globals = getconfig(os.path.join(self.global_config_path, 'make.globals'))
+ if make_globals is None:
+ make_globals = {}
+
+ for k, v in self._default_globals.items():
+ make_globals.setdefault(k, v)
+
if config_incrementals is None:
self.incrementals = INCREMENTALS
else:
@@ -342,19 +346,6 @@ class config(object):
self.configlist.append({})
self.configdict["pkginternal"] = self.configlist[-1]
- self.packages_list = [grabfile_package(os.path.join(x, "packages"), verify_eapi=True) for x in self.profiles]
- self.packages = tuple(stack_lists(self.packages_list, incremental=1))
- del self.packages_list
- #self.packages = grab_stacked("packages", self.profiles, grabfile, incremental_lines=1)
-
- # revmaskdict
- self.prevmaskdict={}
- for x in self.packages:
- # Negative atoms are filtered by the above stack_lists() call.
- if not isinstance(x, Atom):
- x = Atom(x.lstrip('*'))
- self.prevmaskdict.setdefault(x.cp, []).append(x)
-
# The expand_map is used for variable substitution
# in getconfig() calls, and the getconfig() calls
# update expand_map with the value of each variable
@@ -404,23 +395,39 @@ class config(object):
self.configdict["env"] = LazyItemsDict(self.backupenv)
- for x in (self.global_config_path,):
- self.mygcfg = getconfig(os.path.join(x, "make.globals"),
- expand=expand_map)
- if self.mygcfg:
- break
-
- if self.mygcfg is None:
- self.mygcfg = {}
-
- for k, v in self._default_globals.items():
- self.mygcfg.setdefault(k, v)
-
- self.configlist.append(self.mygcfg)
+ self.configlist.append(make_globals)
self.configdict["globals"]=self.configlist[-1]
self.make_defaults_use = []
self.mygcfg = {}
+
+ known_repos = []
+ for confs in [make_globals, make_conf, self.configdict["env"]]:
+ known_repos.extend(confs.get("PORTDIR", '').split())
+ known_repos.extend(confs.get("PORTDIR_OVERLAY", '').split())
+ known_repos = set(known_repos)
+
+ locations_manager.load_profiles(known_repos)
+
+ self.profiles = locations_manager.profiles
+ self.profiles_complex = locations_manager.profiles_complex
+ self.profile_path = locations_manager.profile_path
+ self.user_profile_dir = locations_manager.user_profile_dir
+
+ self.packages_list = [grabfile_package(os.path.join(x, "packages"), verify_eapi=True) for x in self.profiles]
+ self.packages = tuple(stack_lists(self.packages_list, incremental=1))
+ del self.packages_list
+ #self.packages = grab_stacked("packages", self.profiles, grabfile, incremental_lines=1)
+
+ # revmaskdict
+ self.prevmaskdict={}
+ for x in self.packages:
+ # Negative atoms are filtered by the above stack_lists() call.
+ if not isinstance(x, Atom):
+ x = Atom(x.lstrip('*'))
+ self.prevmaskdict.setdefault(x.cp, []).append(x)
+
+
if self.profiles:
mygcfg_dlists = [getconfig(os.path.join(x, "make.defaults"),
expand=expand_map) for x in self.profiles]
@@ -550,11 +557,11 @@ class config(object):
self._repo_make_defaults[repo.name] = d
#Read package.keywords and package.accept_keywords.
- self._keywords_manager = KeywordsManager(self.profiles, abs_user_config, \
+ self._keywords_manager = KeywordsManager(self.profiles_complex, abs_user_config, \
local_config, global_accept_keywords=self.configdict["defaults"].get("ACCEPT_KEYWORDS", ""))
#Read all USE related files from profiles and optionally from user config.
- self._use_manager = UseManager(self.repositories, self.profiles, abs_user_config, user_config=local_config)
+ self._use_manager = UseManager(self.repositories, self.profiles_complex, abs_user_config, user_config=local_config)
#Initialize all USE related variables we track ourselves.
self.usemask = self._use_manager.getUseMask()
self.useforce = self._use_manager.getUseForce()
@@ -571,7 +578,7 @@ class config(object):
self.configdict["conf"].get("ACCEPT_LICENSE", ""))
#Read package.mask and package.unmask from profiles and optionally from user config
- self._mask_manager = MaskManager(self.repositories, self.profiles,
+ self._mask_manager = MaskManager(self.repositories, self.profiles_complex,
abs_user_config, user_config=local_config,
strict_umatched_removal=_unmatched_removal)
@@ -630,7 +637,8 @@ class config(object):
archlist = stack_lists(archlist, incremental=1)
self.configdict["conf"]["PORTAGE_ARCHLIST"] = " ".join(archlist)
- pkgprovidedlines = [grabfile(os.path.join(x, "package.provided"), recursive=1) for x in self.profiles]
+ pkgprovidedlines = [grabfile(os.path.join(loc, "package.provided"), recursive=recursive)
+ for loc, recursive in self.profiles_complex]
pkgprovidedlines = stack_lists(pkgprovidedlines, incremental=1)
has_invalid_data = False
for x in range(len(pkgprovidedlines)-1, -1, -1):
^ permalink raw reply related [flat|nested] 8+ messages in thread
* [gentoo-commits] proj/portage:master commit in: pym/portage/package/ebuild/, pym/portage/package/ebuild/_config/
@ 2011-10-25 21:44 Zac Medico
0 siblings, 0 replies; 8+ messages in thread
From: Zac Medico @ 2011-10-25 21:44 UTC (permalink / raw
To: gentoo-commits
commit: 9d4459dfea72717c0565b0cfe39fa3a87a57ad9d
Author: Brian Harring <ferringb <AT> chromium <DOT> org>
AuthorDate: Tue Oct 25 05:37:34 2011 +0000
Commit: Zac Medico <zmedico <AT> gentoo <DOT> org>
CommitDate: Tue Oct 25 21:36:42 2011 +0000
URL: http://git.overlays.gentoo.org/gitweb/?p=proj/portage.git;a=commit;h=9d4459df
Track profile format, and if compatibility mode is in use.
Warn if the profile is using portage-1 format, but isn't marked as such.
---
.../package/ebuild/_config/LocationsManager.py | 67 ++++++++++++++++---
pym/portage/package/ebuild/config.py | 1 +
2 files changed, 57 insertions(+), 11 deletions(-)
diff --git a/pym/portage/package/ebuild/_config/LocationsManager.py b/pym/portage/package/ebuild/_config/LocationsManager.py
index 4072ffc..a465935 100644
--- a/pym/portage/package/ebuild/_config/LocationsManager.py
+++ b/pym/portage/package/ebuild/_config/LocationsManager.py
@@ -13,8 +13,14 @@ from portage.exception import DirectoryNotFound, ParseError
from portage.localization import _
from portage.util import ensure_dirs, grabfile, \
normalize_path, shlex_split, writemsg
+from portage.repository.config import parse_layout_conf
+_PORTAGE1_DIRECTORIES = frozenset([
+ 'package.mask', 'package.provided',
+ 'package.use', 'package.use.mask', 'package.use.force',
+ 'use.mask', 'use.force'])
+
class LocationsManager(object):
def __init__(self, config_root=None, eprefix=None, config_profile_path=None, local_config=True, \
@@ -37,17 +43,23 @@ class LocationsManager(object):
self._check_var_directory("PORTAGE_CONFIGROOT", self.config_root)
self.abs_user_config = os.path.join(self.config_root, USER_CONFIG_PATH)
+ self.config_profile_path = config_profile_path
+
+ def load_profiles(self, known_repository_paths):
+ known_repos = [os.path.abspath(x) for x in set(known_repository_paths)]
+ # force a trailing '/' for ease of doing startswith checks
+ known_repos = [(x + '/', parse_layout_conf(x)[0]) for x in known_repos]
- if config_profile_path is None:
- config_profile_path = \
+ if self.config_profile_path is None:
+ self.config_profile_path = \
os.path.join(self.config_root, PROFILE_PATH)
- if os.path.isdir(config_profile_path):
- self.profile_path = config_profile_path
+ if os.path.isdir(self.config_profile_path):
+ self.profile_path = self.config_profile_path
else:
- config_profile_path = \
+ self.config_profile_path = \
os.path.join(self.abs_user_config, 'make.profile')
- if os.path.isdir(config_profile_path):
- self.profile_path = config_profile_path
+ if os.path.isdir(self.config_profile_path):
+ self.profile_path = self.config_profile_path
else:
self.profile_path = None
else:
@@ -55,14 +67,16 @@ class LocationsManager(object):
# here, in order to create an empty profile
# for checking dependencies of packages with
# empty KEYWORDS.
- self.profile_path = config_profile_path
+ self.profile_path = self.config_profile_path
# The symlink might not exist or might not be a symlink.
self.profiles = []
+ self.profiles_complex = []
if self.profile_path:
try:
- self._addProfile(os.path.realpath(self.profile_path))
+ self._addProfile(os.path.realpath(self.profile_path),
+ known_repos)
except ParseError as e:
writemsg(_("!!! Unable to parse profile: '%s'\n") % \
self.profile_path, noiselevel=-1)
@@ -75,9 +89,11 @@ class LocationsManager(object):
if os.path.exists(custom_prof):
self.user_profile_dir = custom_prof
self.profiles.append(custom_prof)
+ self.profiles_complex.append((custom_prof, True))
del custom_prof
self.profiles = tuple(self.profiles)
+ self.profiles_complex = tuple(self.profiles_complex)
def _check_var_directory(self, varname, var):
if not os.path.isdir(var):
@@ -86,7 +102,34 @@ class LocationsManager(object):
noiselevel=-1)
raise DirectoryNotFound(var)
- def _addProfile(self, currentPath):
+ def _addProfile(self, currentPath, known_repos):
+ current_abs_path = os.path.abspath(currentPath)
+ allow_directories = True
+ compat_mode = False
+ intersecting_repos = [x for x in known_repos if current_abs_path.startswith(x[0])]
+ if intersecting_repos:
+ # protect against nested repositories. Insane configuration, but the longest
+ # path will be the correct one.
+ repo_loc, layout_data = max(intersecting_repos, key=lambda x:len(x[0]))
+ allow_directories = any(x.startswith("portage-1")
+ for x in layout_data['profile-formats'])
+ compat_mode = layout_data['profile-formats'] == ('portage-1-compat',)
+
+ if compat_mode:
+ offenders = _PORTAGE1_DIRECTORIES.intersection(os.listdir(currentPath))
+ offenders = sorted(x for x in offenders
+ if os.path.isdir(os.path.join(currentPath, x)))
+ if offenders:
+ writemsg((_("Profile '%(profile_path)s' in repository "
+ "'%(repo_name)s' is using 'portage-1' profile format, but "
+ "the repository is not configured for it. This will break "
+ "in the future. Please either convert the following paths "
+ "to files, or add\nprofile-format = portage-1\nto the "
+ "repositories layout.conf. Files: '%(files)s'\n")
+ % dict(profile_path=currentPath, repo_name=repo_loc,
+ files=', '.join(offenders))),
+ noiselevel=-1)
+
parentsFile = os.path.join(currentPath, "parent")
eapi_file = os.path.join(currentPath, "eapi")
f = None
@@ -115,12 +158,14 @@ class LocationsManager(object):
parentPath = normalize_path(os.path.join(
currentPath, parentPath))
if os.path.exists(parentPath):
- self._addProfile(parentPath)
+ self._addProfile(parentPath, known_repos)
else:
raise ParseError(
_("Parent '%s' not found: '%s'") % \
(parentPath, parentsFile))
+
self.profiles.append(currentPath)
+ self.profiles_complex.append((currentPath, allow_directories))
def set_root_override(self, root_overwrite=None):
# Allow ROOT setting to come from make.conf if it's not overridden
diff --git a/pym/portage/package/ebuild/config.py b/pym/portage/package/ebuild/config.py
index d49ac60..c4c5e66 100644
--- a/pym/portage/package/ebuild/config.py
+++ b/pym/portage/package/ebuild/config.py
@@ -276,6 +276,7 @@ class config(object):
locations_manager = LocationsManager(config_root=config_root,
config_profile_path=config_profile_path, eprefix=eprefix,
local_config=local_config, target_root=target_root)
+ locations_manager.load_profiles([])
eprefix = locations_manager.eprefix
config_root = locations_manager.config_root
^ permalink raw reply related [flat|nested] 8+ messages in thread
* [gentoo-commits] proj/portage:master commit in: pym/portage/package/ebuild/, pym/portage/package/ebuild/_config/
@ 2011-10-27 18:32 Zac Medico
0 siblings, 0 replies; 8+ messages in thread
From: Zac Medico @ 2011-10-27 18:32 UTC (permalink / raw
To: gentoo-commits
commit: 310da49821ea455a88ac55e3901fb6f9fcb79e21
Author: Zac Medico <zmedico <AT> gentoo <DOT> org>
AuthorDate: Thu Oct 27 18:29:33 2011 +0000
Commit: Zac Medico <zmedico <AT> gentoo <DOT> org>
CommitDate: Thu Oct 27 18:29:33 2011 +0000
URL: http://git.overlays.gentoo.org/gitweb/?p=proj/portage.git;a=commit;h=310da498
LocationsManager.load_profiles: realpath repos
Since we already call realpath on make.profile, we also need to call
realpath on the repo paths that we compare its nodes to.
---
.../package/ebuild/_config/LocationsManager.py | 5 +++--
pym/portage/package/ebuild/config.py | 2 +-
2 files changed, 4 insertions(+), 3 deletions(-)
diff --git a/pym/portage/package/ebuild/_config/LocationsManager.py b/pym/portage/package/ebuild/_config/LocationsManager.py
index a4098ba..debabed 100644
--- a/pym/portage/package/ebuild/_config/LocationsManager.py
+++ b/pym/portage/package/ebuild/_config/LocationsManager.py
@@ -48,9 +48,10 @@ class LocationsManager(object):
self.config_profile_path = config_profile_path
def load_profiles(self, known_repository_paths):
- known_repos = [os.path.abspath(x) for x in set(known_repository_paths)]
+ known_repos = set(os.path.realpath(x) for x in known_repository_paths)
# force a trailing '/' for ease of doing startswith checks
- known_repos = [(x + '/', parse_layout_conf(x)[0]) for x in known_repos]
+ known_repos = tuple((x + '/', parse_layout_conf(x)[0])
+ for x in known_repos)
if self.config_profile_path is None:
self.config_profile_path = \
diff --git a/pym/portage/package/ebuild/config.py b/pym/portage/package/ebuild/config.py
index cfbbad4..34a326e 100644
--- a/pym/portage/package/ebuild/config.py
+++ b/pym/portage/package/ebuild/config.py
@@ -405,7 +405,7 @@ class config(object):
for confs in [make_globals, make_conf, self.configdict["env"]]:
known_repos.extend(confs.get("PORTDIR", '').split())
known_repos.extend(confs.get("PORTDIR_OVERLAY", '').split())
- known_repos = set(known_repos)
+ known_repos = frozenset(known_repos)
locations_manager.load_profiles(known_repos)
^ permalink raw reply related [flat|nested] 8+ messages in thread
* [gentoo-commits] proj/portage:master commit in: pym/portage/package/ebuild/, pym/portage/package/ebuild/_config/
@ 2011-10-27 20:49 Zac Medico
0 siblings, 0 replies; 8+ messages in thread
From: Zac Medico @ 2011-10-27 20:49 UTC (permalink / raw
To: gentoo-commits
commit: 10202ff80ebd212457db95d76ca1fbc79567bf8d
Author: Zac Medico <zmedico <AT> gentoo <DOT> org>
AuthorDate: Thu Oct 27 20:49:40 2011 +0000
Commit: Zac Medico <zmedico <AT> gentoo <DOT> org>
CommitDate: Thu Oct 27 20:49:40 2011 +0000
URL: http://git.overlays.gentoo.org/gitweb/?p=proj/portage.git;a=commit;h=10202ff8
LocationsManager: extensible _profile_node object
Use immutable object attrubutes instead of tuples, for extensibility.
---
.../package/ebuild/_config/KeywordsManager.py | 6 ++++--
.../package/ebuild/_config/LocationsManager.py | 17 +++++++++++++++--
pym/portage/package/ebuild/_config/MaskManager.py | 12 ++++++++----
pym/portage/package/ebuild/_config/UseManager.py | 8 ++++++--
pym/portage/package/ebuild/config.py | 6 ++++--
5 files changed, 37 insertions(+), 12 deletions(-)
diff --git a/pym/portage/package/ebuild/_config/KeywordsManager.py b/pym/portage/package/ebuild/_config/KeywordsManager.py
index 704ddca..2f9f7b3 100644
--- a/pym/portage/package/ebuild/_config/KeywordsManager.py
+++ b/pym/portage/package/ebuild/_config/KeywordsManager.py
@@ -20,7 +20,8 @@ class KeywordsManager(object):
global_accept_keywords=""):
self._pkeywords_list = []
rawpkeywords = [grabdict_package(
- os.path.join(x[0], "package.keywords"), recursive=x[1],
+ os.path.join(x.location, "package.keywords"),
+ recursive=x.portage1_directories,
verify_eapi=True) \
for x in profiles]
for pkeyworddict in rawpkeywords:
@@ -35,7 +36,8 @@ class KeywordsManager(object):
self._p_accept_keywords = []
raw_p_accept_keywords = [grabdict_package(
- os.path.join(x[0], "package.accept_keywords"), recursive=x[1],
+ os.path.join(x.location, "package.accept_keywords"),
+ recursive=x.portage1_directories,
verify_eapi=True) \
for x in profiles]
for d in raw_p_accept_keywords:
diff --git a/pym/portage/package/ebuild/_config/LocationsManager.py b/pym/portage/package/ebuild/_config/LocationsManager.py
index d793625..ec3f003 100644
--- a/pym/portage/package/ebuild/_config/LocationsManager.py
+++ b/pym/portage/package/ebuild/_config/LocationsManager.py
@@ -23,6 +23,18 @@ _PORTAGE1_DIRECTORIES = frozenset([
'package.use', 'package.use.mask', 'package.use.force',
'use.mask', 'use.force'])
+class _profile_node(object):
+
+ __slots__ = ('location', 'portage1_directories')
+
+ def __init__(self, location, portage1_directories):
+ object.__setattr__(self, 'location', location)
+ object.__setattr__(self, 'portage1_directories', portage1_directories)
+
+ def __setattr__(self, name, value):
+ raise AttributeError("_profile_node instances are immutable",
+ self.__class__, name, value)
+
class LocationsManager(object):
def __init__(self, config_root=None, eprefix=None, config_profile_path=None, local_config=True, \
@@ -92,7 +104,7 @@ class LocationsManager(object):
if os.path.exists(custom_prof):
self.user_profile_dir = custom_prof
self.profiles.append(custom_prof)
- self.profiles_complex.append((custom_prof, True))
+ self.profiles_complex.append(_profile_node(custom_prof, True))
del custom_prof
self.profiles = tuple(self.profiles)
@@ -177,7 +189,8 @@ class LocationsManager(object):
(parentPath, parentsFile))
self.profiles.append(currentPath)
- self.profiles_complex.append((currentPath, allow_directories))
+ self.profiles_complex.append(
+ _profile_node(currentPath, allow_directories))
def set_root_override(self, root_overwrite=None):
# Allow ROOT setting to come from make.conf if it's not overridden
diff --git a/pym/portage/package/ebuild/_config/MaskManager.py b/pym/portage/package/ebuild/_config/MaskManager.py
index a2bfb19..6b0f1c3 100644
--- a/pym/portage/package/ebuild/_config/MaskManager.py
+++ b/pym/portage/package/ebuild/_config/MaskManager.py
@@ -115,12 +115,16 @@ class MaskManager(object):
#to allow profiles to override masks from their parent profiles.
profile_pkgmasklines = []
profile_pkgunmasklines = []
- for x, portage1_mode in profiles:
+ for x in profiles:
profile_pkgmasklines.append(grabfile_package(
- os.path.join(x, "package.mask"), recursive=portage1_mode, remember_source_file=True, verify_eapi=True))
- if portage1_mode:
+ os.path.join(x.location, "package.mask"),
+ recursive=x.portage1_directories,
+ remember_source_file=True, verify_eapi=True))
+ if x.portage1_directories:
profile_pkgunmasklines.append(grabfile_package(
- os.path.join(x, "package.unmask"), recursive=1, remember_source_file=True, verify_eapi=True))
+ os.path.join(x.location, "package.unmask"),
+ recursive=x.portage1_directories,
+ remember_source_file=True, verify_eapi=True))
profile_pkgmasklines = stack_lists(profile_pkgmasklines, incremental=1, \
remember_source_file=True, warn_for_unmatched_removal=True,
strict_warn_for_unmatched_removal=strict_umatched_removal)
diff --git a/pym/portage/package/ebuild/_config/UseManager.py b/pym/portage/package/ebuild/_config/UseManager.py
index bf06bd7..0506af0 100644
--- a/pym/portage/package/ebuild/_config/UseManager.py
+++ b/pym/portage/package/ebuild/_config/UseManager.py
@@ -132,11 +132,15 @@ class UseManager(object):
return ret
def _parse_profile_files_to_tuple_of_tuples(self, file_name, locations):
- return tuple(self._parse_file_to_tuple(os.path.join(profile[0], file_name), recursive=profile[1])
+ return tuple(self._parse_file_to_tuple(
+ os.path.join(profile.location, file_name),
+ recursive=profile.portage1_directories)
for profile in locations)
def _parse_profile_files_to_tuple_of_dicts(self, file_name, locations, juststrings=False):
- return tuple(self._parse_file_to_dict(os.path.join(profile[0], file_name), juststrings, recursive=profile[1])
+ return tuple(self._parse_file_to_dict(
+ os.path.join(profile.location, file_name), juststrings,
+ recursive=profile.portage1_directories)
for profile in locations)
def getUseMask(self, pkg=None):
diff --git a/pym/portage/package/ebuild/config.py b/pym/portage/package/ebuild/config.py
index 34a326e..47ea7f8 100644
--- a/pym/portage/package/ebuild/config.py
+++ b/pym/portage/package/ebuild/config.py
@@ -637,8 +637,10 @@ class config(object):
archlist = stack_lists(archlist, incremental=1)
self.configdict["conf"]["PORTAGE_ARCHLIST"] = " ".join(archlist)
- pkgprovidedlines = [grabfile(os.path.join(loc, "package.provided"), recursive=recursive)
- for loc, recursive in self.profiles_complex]
+ pkgprovidedlines = [grabfile(
+ os.path.join(x.location, "package.provided"),
+ recursive=x.portage1_directories)
+ for x in self.profiles_complex]
pkgprovidedlines = stack_lists(pkgprovidedlines, incremental=1)
has_invalid_data = False
for x in range(len(pkgprovidedlines)-1, -1, -1):
^ permalink raw reply related [flat|nested] 8+ messages in thread
* [gentoo-commits] proj/portage:master commit in: pym/portage/package/ebuild/, pym/portage/package/ebuild/_config/
@ 2013-01-24 21:53 Zac Medico
0 siblings, 0 replies; 8+ messages in thread
From: Zac Medico @ 2013-01-24 21:53 UTC (permalink / raw
To: gentoo-commits
commit: 082d3ef7ff047e40873e03f0b068a2942dda3fc1
Author: Zac Medico <zmedico <AT> gentoo <DOT> org>
AuthorDate: Thu Jan 24 21:53:04 2013 +0000
Commit: Zac Medico <zmedico <AT> gentoo <DOT> org>
CommitDate: Thu Jan 24 21:53:04 2013 +0000
URL: http://git.overlays.gentoo.org/gitweb/?p=proj/portage.git;a=commit;h=082d3ef7
config: raise PermissionDenied more
This enables clear reporting of "Permission Denied" when appropriate,
instead of triggering nonsensical messages about invalid profiles or
repositories.
---
.../package/ebuild/_config/LocationsManager.py | 15 ++++++++-------
pym/portage/package/ebuild/config.py | 7 ++++---
2 files changed, 12 insertions(+), 10 deletions(-)
diff --git a/pym/portage/package/ebuild/_config/LocationsManager.py b/pym/portage/package/ebuild/_config/LocationsManager.py
index 8f88e49..95a7751 100644
--- a/pym/portage/package/ebuild/_config/LocationsManager.py
+++ b/pym/portage/package/ebuild/_config/LocationsManager.py
@@ -18,6 +18,7 @@ from portage.exception import DirectoryNotFound, ParseError
from portage.localization import _
from portage.util import ensure_dirs, grabfile, \
normalize_path, shlex_split, writemsg
+from portage.util._path import exists_raise_eaccess, isdir_raise_eaccess
from portage.repository.config import parse_layout_conf, \
_portage1_profiles_allow_directories
@@ -77,9 +78,9 @@ class LocationsManager(object):
self.config_root, 'etc', 'make.profile')
self.config_profile_path = \
os.path.join(self.config_root, PROFILE_PATH)
- if os.path.isdir(self.config_profile_path):
+ if isdir_raise_eaccess(self.config_profile_path):
self.profile_path = self.config_profile_path
- if os.path.isdir(deprecated_profile_path) and not \
+ if isdir_raise_eaccess(deprecated_profile_path) and not \
os.path.samefile(self.profile_path,
deprecated_profile_path):
# Don't warn if they refer to the same path, since
@@ -92,7 +93,7 @@ class LocationsManager(object):
noiselevel=-1)
else:
self.config_profile_path = deprecated_profile_path
- if os.path.isdir(self.config_profile_path):
+ if isdir_raise_eaccess(self.config_profile_path):
self.profile_path = self.config_profile_path
else:
self.profile_path = None
@@ -132,7 +133,7 @@ class LocationsManager(object):
self.profiles_complex = tuple(self.profiles_complex)
def _check_var_directory(self, varname, var):
- if not os.path.isdir(var):
+ if not isdir_raise_eaccess(var):
writemsg(_("!!! Error: %s='%s' is not a directory. "
"Please correct this.\n") % (varname, var),
noiselevel=-1)
@@ -192,7 +193,7 @@ class LocationsManager(object):
files=', '.join(offenders)))
parentsFile = os.path.join(currentPath, "parent")
- if os.path.exists(parentsFile):
+ if exists_raise_eaccess(parentsFile):
parents = grabfile(parentsFile)
if not parents:
raise ParseError(
@@ -214,7 +215,7 @@ class LocationsManager(object):
# of the current repo, so realpath it.
parentPath = os.path.realpath(parentPath)
- if os.path.exists(parentPath):
+ if exists_raise_eaccess(parentPath):
self._addProfile(parentPath, repositories, known_repos)
else:
raise ParseError(
@@ -305,7 +306,7 @@ class LocationsManager(object):
for ov in shlex_split(self.portdir_overlay):
ov = normalize_path(ov)
profiles_dir = os.path.join(ov, "profiles")
- if os.path.isdir(profiles_dir):
+ if isdir_raise_eaccess(profiles_dir):
self.overlay_profiles.append(profiles_dir)
self.profile_locations = [os.path.join(portdir, "profiles")] + self.overlay_profiles
diff --git a/pym/portage/package/ebuild/config.py b/pym/portage/package/ebuild/config.py
index 0ea0841..352b298 100644
--- a/pym/portage/package/ebuild/config.py
+++ b/pym/portage/package/ebuild/config.py
@@ -46,6 +46,7 @@ from portage.util import ensure_dirs, getconfig, grabdict, \
grabdict_package, grabfile, grabfile_package, LazyItemsDict, \
normalize_path, shlex_split, stack_dictlist, stack_dicts, stack_lists, \
writemsg, writemsg_level, _eapi_cache
+from portage.util._path import exists_raise_eaccess, isdir_raise_eaccess
from portage.versions import catpkgsplit, catsplit, cpv_getkey, _pkg_str
from portage.package.ebuild._config import special_env_vars
@@ -620,7 +621,7 @@ class config(object):
shell_quote_re = re.compile(r"[\s\\\"'$`]")
for ov in portdir_overlay:
ov = normalize_path(ov)
- if os.path.isdir(ov):
+ if isdir_raise_eaccess(ov):
if shell_quote_re.search(ov) is not None:
ov = portage._shell_quote(ov)
new_ov.append(ov)
@@ -1006,8 +1007,8 @@ class config(object):
noiselevel=-1)
profile_broken = not self.profile_path or \
- not os.path.exists(os.path.join(self.profile_path, "parent")) and \
- os.path.exists(os.path.join(self["PORTDIR"], "profiles"))
+ not exists_raise_eaccess(os.path.join(self.profile_path, "parent")) and \
+ exists_raise_eaccess(os.path.join(self["PORTDIR"], "profiles"))
if profile_broken:
abs_profile_path = None
^ permalink raw reply related [flat|nested] 8+ messages in thread
end of thread, other threads:[~2013-01-24 21:53 UTC | newest]
Thread overview: 8+ messages (download: mbox.gz follow: Atom feed
-- links below jump to the message on this page --
2011-06-27 0:34 [gentoo-commits] proj/portage:master commit in: pym/portage/package/ebuild/, pym/portage/package/ebuild/_config/ Zac Medico
-- strict thread matches above, loose matches on Subject: below --
2013-01-24 21:53 Zac Medico
2011-10-27 20:49 Zac Medico
2011-10-27 18:32 Zac Medico
2011-10-25 21:44 Zac Medico
2011-10-25 21:44 Zac Medico
2011-06-21 3:27 Zac Medico
2011-06-19 16:40 Arfrever Frehtes Taifersar Arahesis
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox