public inbox for gentoo-commits@lists.gentoo.org
 help / color / mirror / Atom feed
* [gentoo-commits] proj/portage:master commit in: pym/portage/package/ebuild/_config/, pym/portage/repository/
@ 2011-06-19 19:42 Arfrever Frehtes Taifersar Arahesis
  0 siblings, 0 replies; 5+ messages in thread
From: Arfrever Frehtes Taifersar Arahesis @ 2011-06-19 19:42 UTC (permalink / raw
  To: gentoo-commits

commit:     9838a00a264c90faf8040e923096136a1c022247
Author:     Arfrever Frehtes Taifersar Arahesis <Arfrever <AT> Gentoo <DOT> Org>
AuthorDate: Sun Jun 19 19:40:32 2011 +0000
Commit:     Arfrever Frehtes Taifersar Arahesis <arfrever <AT> gentoo <DOT> org>
CommitDate: Sun Jun 19 19:40:32 2011 +0000
URL:        http://git.overlays.gentoo.org/gitweb/?p=proj/portage.git;a=commit;h=9838a00a

Bug #370693: Handle package.use.force and package.use.mask files from master
repositories.

---
 pym/portage/package/ebuild/_config/UseManager.py |   35 ++++++++++-----------
 pym/portage/repository/config.py                 |    3 ++
 2 files changed, 20 insertions(+), 18 deletions(-)

diff --git a/pym/portage/package/ebuild/_config/UseManager.py b/pym/portage/package/ebuild/_config/UseManager.py
index d9ca940..3905f4f 100644
--- a/pym/portage/package/ebuild/_config/UseManager.py
+++ b/pym/portage/package/ebuild/_config/UseManager.py
@@ -61,6 +61,8 @@ class UseManager(object):
 		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)
+
+		self.repositories = repositories
 	
 	def _parse_file_to_tuple(self, file_name):
 		ret = []
@@ -119,17 +121,12 @@ class UseManager(object):
 	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)
+			ret[repo.name] = self._parse_file_to_tuple(os.path.join(repo.location, "profiles", file_name))
 		return 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
 
@@ -149,12 +146,13 @@ class UseManager(object):
 			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 repo in [repo.name for repo in self.repositories[pkg.repo].masters] + [pkg.repo]:
+				usemask.append(self._repo_usemask_dict[repo])
+				cpdict = self._repo_pusemask_dict[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])
@@ -175,12 +173,13 @@ class UseManager(object):
 			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 repo in [repo.name for repo in self.repositories[pkg.repo].masters] + [pkg.repo]:
+				useforce.append(self._repo_useforce_dict[repo])
+				cpdict = self._repo_puseforce_dict[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/repository/config.py b/pym/portage/repository/config.py
index 35f5cdf..38ed6a1 100644
--- a/pym/portage/repository/config.py
+++ b/pym/portage/repository/config.py
@@ -486,6 +486,9 @@ class RepoConfigLoader(object):
 			return None
 		return self.treemap[repo_name]
 
+	def __getitem__(self, repo_name):
+		return self.prepos[repo_name]
+
 	def __iter__(self):
 		for repo_name in self.prepos_order:
 			yield self.prepos[repo_name]



^ permalink raw reply related	[flat|nested] 5+ messages in thread

* [gentoo-commits] proj/portage:master commit in: pym/portage/package/ebuild/_config/, pym/portage/repository/
@ 2011-10-27 19:03 Zac Medico
  0 siblings, 0 replies; 5+ messages in thread
From: Zac Medico @ 2011-10-27 19:03 UTC (permalink / raw
  To: gentoo-commits

commit:     2794e1abc8139fc4bf36c1c4e4103ffcd2dd2f97
Author:     Zac Medico <zmedico <AT> gentoo <DOT> org>
AuthorDate: Thu Oct 27 19:02:26 2011 +0000
Commit:     Zac Medico <zmedico <AT> gentoo <DOT> org>
CommitDate: Thu Oct 27 19:02:26 2011 +0000
URL:        http://git.overlays.gentoo.org/gitweb/?p=proj/portage.git;a=commit;h=2794e1ab

Fix profile-formats spelling in messages.

---
 .../package/ebuild/_config/LocationsManager.py     |    2 +-
 pym/portage/repository/config.py                   |    2 +-
 2 files changed, 2 insertions(+), 2 deletions(-)

diff --git a/pym/portage/package/ebuild/_config/LocationsManager.py b/pym/portage/package/ebuild/_config/LocationsManager.py
index 0ab0950..d793625 100644
--- a/pym/portage/package/ebuild/_config/LocationsManager.py
+++ b/pym/portage/package/ebuild/_config/LocationsManager.py
@@ -128,7 +128,7 @@ class LocationsManager(object):
 					"'%(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 "
+					"to files, or add\nprofile-formats = portage-1\nto the "
 					"repositories layout.conf.  Files: '%(files)s'\n")
 					% dict(profile_path=currentPath, repo_name=repo_loc,
 						files=', '.join(offenders))),

diff --git a/pym/portage/repository/config.py b/pym/portage/repository/config.py
index 9bffd70..f773ae0 100644
--- a/pym/portage/repository/config.py
+++ b/pym/portage/repository/config.py
@@ -678,7 +678,7 @@ def parse_layout_conf(repo_location, repo_name=None):
 		unknown = raw_formats.difference(['pms', 'portage-1'])
 		if unknown:
 			warnings.warn((_("Repository named '%(repo_name)s' has unsupported "
-				"profiles in use ('profile-format = %(unknown_fmts)s' setting in "
+				"profiles in use ('profile-formats = %(unknown_fmts)s' setting in "
 				"'%(layout_filename)s; please upgrade portage.") %
 				dict(repo_name=repo_name, layout_filename=layout_filename,
 				unknown_fmts=" ".join(unknown))),



^ permalink raw reply related	[flat|nested] 5+ messages in thread

* [gentoo-commits] proj/portage:master commit in: pym/portage/package/ebuild/_config/, pym/portage/repository/
@ 2012-05-11 23:39 Zac Medico
  0 siblings, 0 replies; 5+ messages in thread
From: Zac Medico @ 2012-05-11 23:39 UTC (permalink / raw
  To: gentoo-commits

commit:     22996b1d7c7214da8f0bff76d9f814a00f58fdce
Author:     Zac Medico <zmedico <AT> gentoo <DOT> org>
AuthorDate: Fri May 11 23:39:06 2012 +0000
Commit:     Zac Medico <zmedico <AT> gentoo <DOT> org>
CommitDate: Fri May 11 23:39:06 2012 +0000
URL:        http://git.overlays.gentoo.org/gitweb/?p=proj/portage.git;a=commit;h=22996b1d

Cleanup profile-formats code.

---
 .../package/ebuild/_config/LocationsManager.py     |    5 ++++-
 pym/portage/repository/config.py                   |    7 +++++--
 2 files changed, 9 insertions(+), 3 deletions(-)

diff --git a/pym/portage/package/ebuild/_config/LocationsManager.py b/pym/portage/package/ebuild/_config/LocationsManager.py
index 368c0dd..337edc4 100644
--- a/pym/portage/package/ebuild/_config/LocationsManager.py
+++ b/pym/portage/package/ebuild/_config/LocationsManager.py
@@ -28,6 +28,9 @@ _PORTAGE1_DIRECTORIES = frozenset([
 _profile_node = collections.namedtuple('_profile_node',
 	'location portage1_directories')
 
+_allow_directories = frozenset(
+	["portage-1-compat", "portage-1"])
+
 class LocationsManager(object):
 
 	def __init__(self, config_root=None, eprefix=None, config_profile_path=None, local_config=True, \
@@ -130,7 +133,7 @@ class LocationsManager(object):
 			# 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")
+			allow_directories = any(x in _allow_directories
 				for x in layout_data['profile-formats'])
 			compat_mode = layout_data['profile-formats'] == ('portage-1-compat',)
 

diff --git a/pym/portage/repository/config.py b/pym/portage/repository/config.py
index 71aefde..872c189 100644
--- a/pym/portage/repository/config.py
+++ b/pym/portage/repository/config.py
@@ -27,6 +27,9 @@ from portage import _unicode_encode
 from portage import _encodings
 from portage import manifest
 
+_valid_profile_formats = frozenset(
+	['pms', 'portage-1'])
+
 _repo_name_sub_re = re.compile(r'[^\w-]')
 
 def _gen_valid_repo(name):
@@ -754,7 +757,7 @@ def parse_layout_conf(repo_location, repo_name=None):
 			raw_formats = ('portage-1-compat',)
 	else:
 		raw_formats = set(raw_formats.split())
-		unknown = raw_formats.difference(['pms', 'portage-1'])
+		unknown = raw_formats.difference(_valid_profile_formats)
 		if unknown:
 			repo_name = _get_repo_name(repo_location, cached=repo_name)
 			warnings.warn((_("Repository named '%(repo_name)s' has unsupported "
@@ -764,7 +767,7 @@ def parse_layout_conf(repo_location, repo_name=None):
 				layout_filename=layout_filename,
 				unknown_fmts=" ".join(unknown))),
 				DeprecationWarning)
-		raw_formats = tuple(raw_formats.intersection(['pms', 'portage-1']))
+		raw_formats = tuple(raw_formats.intersection(_valid_profile_formats))
 	data['profile-formats'] = raw_formats
 
 	return data, layout_errors



^ permalink raw reply related	[flat|nested] 5+ messages in thread

* [gentoo-commits] proj/portage:master commit in: pym/portage/package/ebuild/_config/, pym/portage/repository/
@ 2012-05-16 20:47 Zac Medico
  0 siblings, 0 replies; 5+ messages in thread
From: Zac Medico @ 2012-05-16 20:47 UTC (permalink / raw
  To: gentoo-commits

commit:     f39ac7dc706544d1f36392c7def6da0b9b6bebcf
Author:     Zac Medico <zmedico <AT> gentoo <DOT> org>
AuthorDate: Wed May 16 20:47:26 2012 +0000
Commit:     Zac Medico <zmedico <AT> gentoo <DOT> org>
CommitDate: Wed May 16 20:47:26 2012 +0000
URL:        http://git.overlays.gentoo.org/gitweb/?p=proj/portage.git;a=commit;h=f39ac7dc

RepoConfig: cleanup portage1_profiles code

---
 .../package/ebuild/_config/LocationsManager.py     |    8 +++-----
 pym/portage/repository/config.py                   |    5 ++++-
 2 files changed, 7 insertions(+), 6 deletions(-)

diff --git a/pym/portage/package/ebuild/_config/LocationsManager.py b/pym/portage/package/ebuild/_config/LocationsManager.py
index 337edc4..1293c75 100644
--- a/pym/portage/package/ebuild/_config/LocationsManager.py
+++ b/pym/portage/package/ebuild/_config/LocationsManager.py
@@ -17,7 +17,8 @@ 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
+from portage.repository.config import parse_layout_conf, \
+	_portage1_profiles_allow_directories
 
 
 _PORTAGE1_DIRECTORIES = frozenset([
@@ -28,9 +29,6 @@ _PORTAGE1_DIRECTORIES = frozenset([
 _profile_node = collections.namedtuple('_profile_node',
 	'location portage1_directories')
 
-_allow_directories = frozenset(
-	["portage-1-compat", "portage-1"])
-
 class LocationsManager(object):
 
 	def __init__(self, config_root=None, eprefix=None, config_profile_path=None, local_config=True, \
@@ -133,7 +131,7 @@ class LocationsManager(object):
 			# 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 in _allow_directories
+			allow_directories = any(x in _portage1_profiles_allow_directories
 				for x in layout_data['profile-formats'])
 			compat_mode = layout_data['profile-formats'] == ('portage-1-compat',)
 

diff --git a/pym/portage/repository/config.py b/pym/portage/repository/config.py
index 872c189..cb5beca 100644
--- a/pym/portage/repository/config.py
+++ b/pym/portage/repository/config.py
@@ -30,6 +30,9 @@ from portage import manifest
 _valid_profile_formats = frozenset(
 	['pms', 'portage-1'])
 
+_portage1_profiles_allow_directories = frozenset(
+	["portage-1-compat", "portage-1"])
+
 _repo_name_sub_re = re.compile(r'[^\w-]')
 
 def _gen_valid_repo(name):
@@ -160,7 +163,7 @@ class RepoConfig(object):
 				'sign-commit', 'sign-manifest', 'thin-manifest', 'update-changelog'):
 				setattr(self, value.lower().replace("-", "_"), layout_data[value])
 
-			self.portage1_profiles = any(x.startswith("portage-1") \
+			self.portage1_profiles = any(x in _portage1_profiles_allow_directories
 				for x in layout_data['profile-formats'])
 			self.portage1_profiles_compat = layout_data['profile-formats'] == ('portage-1-compat',)
 



^ permalink raw reply related	[flat|nested] 5+ messages in thread

* [gentoo-commits] proj/portage:master commit in: pym/portage/package/ebuild/_config/, pym/portage/repository/
@ 2012-05-21  5:29 Zac Medico
  0 siblings, 0 replies; 5+ messages in thread
From: Zac Medico @ 2012-05-21  5:29 UTC (permalink / raw
  To: gentoo-commits

commit:     6dd44c1b5f13c3628bc2e093fdf4b1ade4028b63
Author:     Zac Medico <zmedico <AT> gentoo <DOT> org>
AuthorDate: Thu May 17 00:22:18 2012 +0000
Commit:     Zac Medico <zmedico <AT> gentoo <DOT> org>
CommitDate: Mon May 21 05:29:08 2012 +0000
URL:        http://git.overlays.gentoo.org/gitweb/?p=proj/portage.git;a=commit;h=6dd44c1b

Profile parent repo: references for bug #414961.

If "profile-formats = portage-2" is specified in metadata/layout.conf,
then paths such as 'gentoo:targets/desktop' or ':targets/desktop' in
profile parent files can be used to express paths relative to the root
'profiles' directory of a repository. When the repo name is omitted
before the colon, it refers to the current repository that the parent
file is inside of.

---
 .../package/ebuild/_config/LocationsManager.py     |   46 ++++++++++++++++++-
 pym/portage/repository/config.py                   |    4 +-
 2 files changed, 45 insertions(+), 5 deletions(-)

diff --git a/pym/portage/package/ebuild/_config/LocationsManager.py b/pym/portage/package/ebuild/_config/LocationsManager.py
index 1293c75..f7a1177 100644
--- a/pym/portage/package/ebuild/_config/LocationsManager.py
+++ b/pym/portage/package/ebuild/_config/LocationsManager.py
@@ -29,6 +29,9 @@ _PORTAGE1_DIRECTORIES = frozenset([
 _profile_node = collections.namedtuple('_profile_node',
 	'location portage1_directories')
 
+_allow_parent_colon = frozenset(
+	["portage-2"])
+
 class LocationsManager(object):
 
 	def __init__(self, config_root=None, eprefix=None, config_profile_path=None, local_config=True, \
@@ -94,7 +97,7 @@ class LocationsManager(object):
 		if self.profile_path:
 			try:
 				self._addProfile(os.path.realpath(self.profile_path),
-					known_repos)
+					repositories, known_repos)
 			except ParseError as e:
 				writemsg(_("!!! Unable to parse profile: '%s'\n") % \
 					self.profile_path, noiselevel=-1)
@@ -121,9 +124,10 @@ class LocationsManager(object):
 				noiselevel=-1)
 			raise DirectoryNotFound(var)
 
-	def _addProfile(self, currentPath, known_repos):
+	def _addProfile(self, currentPath, repositories, known_repos):
 		current_abs_path = os.path.abspath(currentPath)
 		allow_directories = True
+		allow_parent_colon = True
 		repo_loc = None
 		compat_mode = False
 		intersecting_repos = [x for x in known_repos if current_abs_path.startswith(x[0])]
@@ -134,6 +138,8 @@ class LocationsManager(object):
 			allow_directories = any(x in _portage1_profiles_allow_directories
 				for x in layout_data['profile-formats'])
 			compat_mode = layout_data['profile-formats'] == ('portage-1-compat',)
+			allow_parent_colon = any(x in _allow_parent_colon
+				for x in layout_data['profile-formats'])
 
 		if compat_mode:
 			offenders = _PORTAGE1_DIRECTORIES.intersection(os.listdir(currentPath))
@@ -175,6 +181,12 @@ class LocationsManager(object):
 					_("Empty parent file: '%s'") % parentsFile)
 			for parentPath in parents:
 				abs_parent = parentPath[:1] == os.sep
+				if not abs_parent and allow_parent_colon:
+					parentPath = self._expand_parent_colon(parentsFile,
+						parentPath, repo_loc, repositories)
+
+				# NOTE: This os.path.join() call is intended to ignore
+				# currentPath if parentPath is already absolute.
 				parentPath = normalize_path(os.path.join(
 					currentPath, parentPath))
 
@@ -185,7 +197,7 @@ class LocationsManager(object):
 					parentPath = os.path.realpath(parentPath)
 
 				if os.path.exists(parentPath):
-					self._addProfile(parentPath, known_repos)
+					self._addProfile(parentPath, repositories, known_repos)
 				else:
 					raise ParseError(
 						_("Parent '%s' not found: '%s'") %  \
@@ -195,6 +207,34 @@ class LocationsManager(object):
 		self.profiles_complex.append(
 			_profile_node(currentPath, allow_directories))
 
+	def _expand_parent_colon(self, parentsFile, parentPath,
+		repo_loc, repositories):
+		colon = parentPath.find(":")
+		if colon == -1:
+			return parentPath
+
+		if colon == 0:
+			if repo_loc is None:
+				raise ParseError(
+					_("Parent '%s' not found: '%s'") %  \
+					(parentPath, parentsFile))
+			else:
+				parentPath = normalize_path(os.path.join(
+					repo_loc, 'profiles', parentPath[colon+1:]))
+		else:
+			p_repo_name = parentPath[:colon]
+			try:
+				p_repo_loc = repositories.get_location_for_name(p_repo_name)
+			except KeyError:
+				raise ParseError(
+					_("Parent '%s' not found: '%s'") %  \
+					(parentPath, parentsFile))
+			else:
+				parentPath = normalize_path(os.path.join(
+					p_repo_loc, 'profiles', parentPath[colon+1:]))
+
+		return parentPath
+
 	def set_root_override(self, root_overwrite=None):
 		# Allow ROOT setting to come from make.conf if it's not overridden
 		# by the constructor argument (from the calling environment).

diff --git a/pym/portage/repository/config.py b/pym/portage/repository/config.py
index cb5beca..20f1919 100644
--- a/pym/portage/repository/config.py
+++ b/pym/portage/repository/config.py
@@ -28,10 +28,10 @@ from portage import _encodings
 from portage import manifest
 
 _valid_profile_formats = frozenset(
-	['pms', 'portage-1'])
+	['pms', 'portage-1', 'portage-2'])
 
 _portage1_profiles_allow_directories = frozenset(
-	["portage-1-compat", "portage-1"])
+	["portage-1-compat", "portage-1", 'portage-2'])
 
 _repo_name_sub_re = re.compile(r'[^\w-]')
 



^ permalink raw reply related	[flat|nested] 5+ messages in thread

end of thread, other threads:[~2012-05-21  5:29 UTC | newest]

Thread overview: 5+ messages (download: mbox.gz follow: Atom feed
-- links below jump to the message on this page --
2011-06-19 19:42 [gentoo-commits] proj/portage:master commit in: pym/portage/package/ebuild/_config/, pym/portage/repository/ Arfrever Frehtes Taifersar Arahesis
  -- strict thread matches above, loose matches on Subject: below --
2011-10-27 19:03 Zac Medico
2012-05-11 23:39 Zac Medico
2012-05-16 20:47 Zac Medico
2012-05-21  5:29 Zac Medico

This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox