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

Collapse All | Expand All

(-)a/pym/gentoolkit/eshowkw/__init__.py (-4 / +1 lines)
Lines 72-78 def process_args(argv): Link Here
72
	parser.add_argument('-P', '--prefix', action='store_true', default=False,
72
	parser.add_argument('-P', '--prefix', action='store_true', default=False,
73
		help='Display prefix keywords in output.')
73
		help='Display prefix keywords in output.')
74
	parser.add_argument('-S', '--ignore-slot', action='store_true', default=False,
74
	parser.add_argument('-S', '--ignore-slot', action='store_true', default=False,
75
		help='Treat slots as irelevant during detection of redundant pacakges.')
75
		help='Treat slots as irelevant during detection of redundant packages.')
76
76
77
	return parser.parse_args(args=argv)
77
	return parser.parse_args(args=argv)
78
78
Lines 83-91 def main(argv, indirect = False): Link Here
83
	opts = process_args(argv)
83
	opts = process_args(argv)
84
	ignore_slots = opts.ignore_slot
84
	ignore_slots = opts.ignore_slot
85
	use_overlays = opts.overlays
85
	use_overlays = opts.overlays
86
	# user can do both --arch=a,b,c or --arch a b c
87
	if len(opts.arch) > 1:
88
		opts.arch = ','.join(opts.arch)
89
	highlight_arch = ''.join(opts.arch).split(',')
86
	highlight_arch = ''.join(opts.arch).split(',')
90
	bold = opts.bold
87
	bold = opts.bold
91
	order = opts.align
88
	order = opts.align
(-)a/pym/gentoolkit/eshowkw/keywords_content.py (-11 / +31 lines)
Lines 164-170 class keywords_content: Link Here
164
	def __packages_sort(package_content):
164
	def __packages_sort(package_content):
165
		"""
165
		"""
166
		Sort packages queried based on version and slot
166
		Sort packages queried based on version and slot
167
		%% pn , repo, slot, keywords
167
		%% pn , repo, slot, eapi, keywords
168
		"""
168
		"""
169
		from operator import itemgetter
169
		from operator import itemgetter
170
170
Lines 208-215 class keywords_content: Link Here
208
						# version is not allowed by portage or unset
208
						# version is not allowed by portage or unset
209
						continue
209
						continue
210
					# obtain related data from metadata and append to the pkg list
210
					# obtain related data from metadata and append to the pkg list
211
					keywords, slot = self.__getMetadata(pdb, mysplit[0]+'/'+pf, oroot)
211
					keywords, slot, eapi = self.__getMetadata(pdb, mysplit[0]+'/'+pf, oroot)
212
					mypkgs.append([mysplit[0]+'/'+pf, oroot, slot, keywords])
212
					mypkgs.append([mysplit[0]+'/'+pf, oroot, slot, eapi, keywords])
213
213
214
		self.__packages_sort(mypkgs)
214
		self.__packages_sort(mypkgs)
215
		return mypkgs
215
		return mypkgs
Lines 226-232 class keywords_content: Link Here
226
	def __getMetadata(pdb, package, repo):
226
	def __getMetadata(pdb, package, repo):
227
		"""Obtain all required metadata from portage auxdb"""
227
		"""Obtain all required metadata from portage auxdb"""
228
		try:
228
		try:
229
			metadata = pdb.aux_get(package, ['KEYWORDS', 'SLOT'], repo)
229
			metadata = pdb.aux_get(package, ['KEYWORDS', 'SLOT', 'EAPI'], repo)
230
		except KeyError:
230
		except KeyError:
231
			# portage prints out more verbose error for us if we were lucky
231
			# portage prints out more verbose error for us if we were lucky
232
			raise SystemExit('Failed to obtain metadata')
232
			raise SystemExit('Failed to obtain metadata')
Lines 303-326 class keywords_content: Link Here
303
		return tmp
303
		return tmp
304
304
305
	@staticmethod
305
	@staticmethod
306
	def __prepareContentResult(versions, keywords, redundant, slots, slot_length, repos, linesep):
306
	def __formatEapis(eapis, repos, repos_configs, length):
307
		"""Align eapis items properly"""
308
		# % are used as separators for further split so we wont loose spaces and coloring
309
		tmp = []
310
		for eapi, repo in zip(eapis, repos):
311
			tmp_eapi = eapi
312
			eapi = align_string(eapi, 'left', length)
313
			eapi = '%'.join(list(eapi))
314
			if repos_configs[repo].eapi_is_banned(tmp_eapi):
315
				eapi = colorize_string('red', eapi)
316
			elif repos_configs[repo].eapi_is_deprecated(tmp_eapi):
317
				eapi = colorize_string('yellow', eapi)
318
			else:
319
				eapi = colorize_string('green', eapi)
320
			tmp.append(eapi)
321
		return tmp
322
323
	@staticmethod
324
	def __prepareContentResult(versions, keywords, eapi, redundant, slots, slot_length, repos, linesep):
307
		"""Parse version fields into one list with proper separators"""
325
		"""Parse version fields into one list with proper separators"""
308
		content = []
326
		content = []
309
		oldslot = ''
327
		oldslot = ''
310
		fieldsep = '% %|% %'
328
		fieldsep = '% %|% %'
311
		normsep = '% %'
329
		normsep = '% %'
312
		for v, k, r, s, t in zip(versions, keywords, redundant, slots, repos):
330
		for v, k, e, r, s, t in zip(versions, keywords, eapi, redundant, slots, repos):
313
			if oldslot != s:
331
			if oldslot != s:
314
				oldslot = s
332
				oldslot = s
315
				content.append(linesep)
333
				content.append(linesep)
316
			else:
334
			else:
317
				s = '%'.join(list(''.rjust(slot_length)))
335
				s = '%'.join(list(''.rjust(slot_length)))
318
			content.append('%s%s%s%s%s%s%s%s%s' % (v, fieldsep, k, fieldsep, r, normsep, s, fieldsep, t))
336
			content.append('%s%s%s%s%s%s%s%s%s%s%s' % (v, fieldsep, k, fieldsep, e, normsep, r, normsep, s, fieldsep, t))
319
		return content
337
		return content
320
338
321
	def __init__(self, package, keywords_list, porttree, ignoreslots = False, content_align = 'bottom', usebold = False, toplist = 'archlist'):
339
	def __init__(self, package, keywords_list, porttree, ignoreslots = False, content_align = 'bottom', usebold = False, toplist = 'archlist'):
322
		"""Query all relevant data from portage databases."""
340
		"""Query all relevant data from portage databases."""
323
		packages, self.repositories, self.slots, self.keywords = self.__checkExist(porttree, package)
341
		packages, self.repositories, self.slots, self.eapi, self.keywords = self.__checkExist(porttree, package)
324
		# convert repositories from path to name
342
		# convert repositories from path to name
325
		self.repositories = [porttree.getRepositoryName(x) for x in self.repositories]
343
		self.repositories = [porttree.getRepositoryName(x) for x in self.repositories]
326
		self.slot_length = max([len(x) for x in self.slots])
344
		self.slot_length = max([len(x) for x in self.slots])
Lines 336-351 class keywords_content: Link Here
336
354
337
		ver = self.__formatVersions(self.versions, content_align, self.version_length)
355
		ver = self.__formatVersions(self.versions, content_align, self.version_length)
338
		kws = self.__formatKeywords(self.keywords, keywords_list, usebold, toplist)
356
		kws = self.__formatKeywords(self.keywords, keywords_list, usebold, toplist)
357
		repos_configs = porttree.repositories.prepos
358
		eap = self.__formatEapis(self.eapi, self.repositories, repos_configs, 1)
339
		red = self.__formatAdditional(self.redundant, 'purple', redundant_length)
359
		red = self.__formatAdditional(self.redundant, 'purple', redundant_length)
340
		slt = self.__formatAdditional(self.slots, 'bold', self.slot_length)
360
		slt = self.__formatAdditional(self.slots, 'bold', self.slot_length)
341
		rep = self.__formatAdditional(self.repositories, 'yellow', repositories_length)
361
		rep = self.__formatAdditional(self.repositories, 'yellow', repositories_length)
342
		# those + nubers are spaces in printout. keywords are multiplied also because of that
362
		# those + numbers are spaces in printout. keywords are multiplied also because of that
343
		linesep = '%s+%s+%s+%s' % (''.ljust(self.version_length+1, '-'),
363
		linesep = '%s+%s+%s+%s' % (''.ljust(self.version_length+1, '-'),
344
			''.ljust(self.keyword_length*2+1, '-'),
364
			''.ljust(self.keyword_length*2+1, '-'),
345
			''.ljust(redundant_length+self.slot_length+3, '-'),
365
			''.ljust(redundant_length+self.slot_length+1+4, '-'),
346
			''.ljust(repositories_length+1, '-')
366
			''.ljust(repositories_length+1, '-')
347
		)
367
		)
348
368
349
		self.content = self.__prepareContentResult(ver, kws, red, slt, self.slot_length, rep, linesep)
369
		self.content = self.__prepareContentResult(ver, kws, eap, red, slt, self.slot_length, rep, linesep)
350
		self.content_length = len(linesep)
370
		self.content_length = len(linesep)
351
		self.cp = port.cpv_getkey(packages[0])
371
		self.cp = port.cpv_getkey(packages[0])
(-)a/pym/gentoolkit/eshowkw/keywords_header.py (-2 / +1 lines)
Lines 12-18 from gentoolkit.eshowkw.display_pretty import align_string Link Here
12
class keywords_header:
12
class keywords_header:
13
	__IMPARCHS = [ 'arm', 'amd64', 'x86' ]
13
	__IMPARCHS = [ 'arm', 'amd64', 'x86' ]
14
	__UNSTABLE_ARCHS = [ 'arm64', 'm68k', 'mips', 's390', 'sh' ]
14
	__UNSTABLE_ARCHS = [ 'arm64', 'm68k', 'mips', 's390', 'sh' ]
15
	__ADDITIONAL_FIELDS = [ 'unused', 'slot' ]
15
	__ADDITIONAL_FIELDS = [ 'eapi', 'unused', 'slot' ]
16
	__EXTRA_FIELDS = [ 'repo' ]
16
	__EXTRA_FIELDS = [ 'repo' ]
17
17
18
	@staticmethod
18
	@staticmethod
19
- 

Return to bug 563202