Gentoo Websites Logo
Go to: Gentoo Home Documentation Forums Lists Bugs Planet Store Wiki Get Gentoo!
View | Details | Raw Unified | Return to bug 265747 | Differences between
and this patch

Collapse All | Expand All

(-)pym/portage/dbapi/porttree.py (-2 / +24 lines)
Lines 173-182 Link Here
173
173
174
		self._repo_info = {}
174
		self._repo_info = {}
175
		eclass_dbs = {porttree_root : self.eclassdb}
175
		eclass_dbs = {porttree_root : self.eclassdb}
176
		local_repo_configs = self.mysettings._local_repo_configs
177
		default_loc_repo_config = None
178
		if local_repo_configs is not None:
179
			default_loc_repo_config = local_repo_configs.get('DEFAULT')
176
		for path in self.porttrees:
180
		for path in self.porttrees:
177
			if path in self._repo_info:
181
			if path in self._repo_info:
178
				continue
182
				continue
179
183
184
			repo_name = self._repository_map.get(path)
180
			layout_filename = os.path.join(path, "metadata/layout.conf")
185
			layout_filename = os.path.join(path, "metadata/layout.conf")
181
			layout_file = KeyValuePairFileLoader(layout_filename, None, None)
186
			layout_file = KeyValuePairFileLoader(layout_filename, None, None)
182
			layout_data, layout_errors = layout_file.load()
187
			layout_data, layout_errors = layout_file.load()
Lines 200-205 Link Here
200
205
201
			porttrees.append(path)
206
			porttrees.append(path)
202
207
208
			if local_repo_configs is not None:
209
				loc_repo_conf = None
210
				if repo_name is not None:
211
					loc_repo_conf = local_repo_configs.get(repo_name)
212
				if loc_repo_conf is None:
213
					loc_repo_conf = default_loc_repo_config
214
				if loc_repo_conf is not None:
215
					for other_name in loc_repo_conf.eclass_overrides:
216
						other_path = self.treemap.get(other_name)
217
						if other_path is None:
218
							writemsg_level(("Unavailable repository '%s' " + \
219
								"referenced by eclass-overrides entry in " + \
220
								"'%s'\n") % (other_name,
221
								self.mysettings._local_repo_conf_path),
222
								level=logging.ERROR, noiselevel=-1)
223
							continue
224
						porttrees.append(other_path)
225
203
			eclass_db = None
226
			eclass_db = None
204
			for porttree in porttrees:
227
			for porttree in porttrees:
205
				tree_db = eclass_dbs.get(porttree)
228
				tree_db = eclass_dbs.get(porttree)
Lines 211-218 Link Here
211
				else:
234
				else:
212
					eclass_db.append(tree_db)
235
					eclass_db.append(tree_db)
213
236
214
			self._repo_info[path] = _repo_info(self._repository_map.get(path),
237
			self._repo_info[path] = _repo_info(repo_name, path, eclass_db)
215
				path, eclass_db)
216
238
217
		self.auxdbmodule = self.mysettings.load_best_module("portdbapi.auxdbmodule")
239
		self.auxdbmodule = self.mysettings.load_best_module("portdbapi.auxdbmodule")
218
		self.auxdb = {}
240
		self.auxdb = {}
(-)pym/portage/__init__.py (+45 lines)
Lines 987-992 Link Here
987
	regex = regex.replace("\\.\\*", ".*")
987
	regex = regex.replace("\\.\\*", ".*")
988
	return regex
988
	return regex
989
989
990
class _local_repo_config(object):
991
	__slots__ = ('eclass_overrides', 'name',)
992
	def __init__(self, name, repo_opts):
993
		self.name = name
994
		self.eclass_overrides = \
995
			tuple(repo_opts.get('eclass-overrides', '').split())
996
990
class config(object):
997
class config(object):
991
	"""
998
	"""
992
	This class encompasses the main portage configuration.  Data is pulled from
999
	This class encompasses the main portage configuration.  Data is pulled from
Lines 1180-1191 Link Here
1180
1187
1181
		self.user_profile_dir = None
1188
		self.user_profile_dir = None
1182
		self.local_config = local_config
1189
		self.local_config = local_config
1190
		self._local_repo_configs = None
1191
		self._local_repo_conf_path = None
1183
1192
1184
		if clone:
1193
		if clone:
1185
			self.incrementals = copy.deepcopy(clone.incrementals)
1194
			self.incrementals = copy.deepcopy(clone.incrementals)
1186
			self.profile_path = copy.deepcopy(clone.profile_path)
1195
			self.profile_path = copy.deepcopy(clone.profile_path)
1187
			self.user_profile_dir = copy.deepcopy(clone.user_profile_dir)
1196
			self.user_profile_dir = copy.deepcopy(clone.user_profile_dir)
1188
			self.local_config = copy.deepcopy(clone.local_config)
1197
			self.local_config = copy.deepcopy(clone.local_config)
1198
			self._local_repo_configs = \
1199
				copy.deepcopy(clone._local_repo_configs)
1200
			self._local_repo_conf_path = \
1201
				copy.deepcopy(clone._local_repo_conf_path)
1189
1202
1190
			self.module_priority = copy.deepcopy(clone.module_priority)
1203
			self.module_priority = copy.deepcopy(clone.module_priority)
1191
			self.modules         = copy.deepcopy(clone.modules)
1204
			self.modules         = copy.deepcopy(clone.modules)
Lines 1628-1633 Link Here
1628
						self._plicensedict[cp] = cp_dict
1641
						self._plicensedict[cp] = cp_dict
1629
					cp_dict[k] = self.expandLicenseTokens(v)
1642
					cp_dict[k] = self.expandLicenseTokens(v)
1630
1643
1644
				self._local_repo_configs = {}
1645
				self._local_repo_conf_path = \
1646
					os.path.join(abs_user_config, 'repos.conf')
1647
				from ConfigParser import SafeConfigParser, ParsingError
1648
				repo_conf_parser = SafeConfigParser()
1649
				try:
1650
					repo_conf_parser.readfp(
1651
						codecs.open(self._local_repo_conf_path,
1652
						mode='r', errors='replace'))
1653
				except EnvironmentError, e:
1654
					if e.errno != errno.ENOENT:
1655
						raise
1656
					del e
1657
				except ParsingError, e:
1658
					portage.util.writemsg_level(
1659
						"!!! Error parsing '%s': %s\n"  % \
1660
						(self._local_repo_conf_path, e),
1661
						level=logging.ERROR, noiselevel=-1)
1662
					del e
1663
				else:
1664
					repo_defaults = repo_conf_parser.defaults()
1665
					if repo_defaults:
1666
						self._local_repo_configs['DEFAULT'] = \
1667
							_local_repo_config('DEFAULT', repo_defaults)
1668
					for repo_name in repo_conf_parser.sections():
1669
						repo_opts = repo_defaults.copy()
1670
						for opt_name in repo_conf_parser.options(repo_name):
1671
							repo_opts[opt_name] = \
1672
								repo_conf_parser.get(repo_name, opt_name)
1673
						self._local_repo_configs[repo_name] = \
1674
							_local_repo_config(repo_name, repo_opts)
1675
1631
			#getting categories from an external file now
1676
			#getting categories from an external file now
1632
			categories = [grabfile(os.path.join(x, "categories")) for x in locations]
1677
			categories = [grabfile(os.path.join(x, "categories")) for x in locations]
1633
			self.categories = tuple(sorted(
1678
			self.categories = tuple(sorted(
(-)man/portage.5 (+22 lines)
Lines 54-59 Link Here
54
package.mask
54
package.mask
55
package.unmask
55
package.unmask
56
package.use
56
package.use
57
repos.conf
57
.fi
58
.fi
58
.TP
59
.TP
59
.BR /etc/portage/profile/
60
.BR /etc/portage/profile/
Lines 546-551 Link Here
546
# disable mysql support for QT
547
# disable mysql support for QT
547
x11\-libs/qt \-mysql
548
x11\-libs/qt \-mysql
548
.fi
549
.fi
550
.TP
551
.BR repos.conf
552
Specifies \fIsite\-specific\fR repository configuration information. Note that
553
configuration settings which are specified here do not apply to tools
554
such as \fBrepoman\fR(1) and \fBegencache\fR(1) since their operations
555
are inherently \fBnot\fR \fIsite\-specific\fR. Beware that use of
556
\fBeclass\-overrides\fR is generally not recommended and that it may trigger
557
performance issues under some circumstances (see \fBbug #124041\fR).
558
559
.I Example:
560
.nf
561
# make all repositories inherit eclasses from the java\-overlay and
562
# java\-experimental repositories, with eclasses from java\-experimental
563
# taking precedence over those from java\-overlay
564
[DEFAULT]
565
eclass\-overrides = java\-overlay java\-experimental
566
567
# disable all eclass overrides for ebuilds from the gentoo repository
568
[gentoo]
569
eclass\-overrides =
570
.fi
549
.RE
571
.RE
550
.TP
572
.TP
551
.BR /usr/portage/metadata/
573
.BR /usr/portage/metadata/

Return to bug 265747