コード例 #1
0
ファイル: repoman_zobcs.py プロジェクト: zorry/zobsc
	def check_repoman(self, cpv, repo):
		# We run repoman run_checks on the ebuild
		ebuild_version_tree = portage.versions.cpv_getversion(cpv)
		element = portage.versions.cpv_getkey(cpv).split('/')
		categories = element[0]
		package = element[1]
		pkgdir = self._myportdb.getRepositoryPath(repo) + "/" + categories + "/" + package
		full_path = pkgdir + "/" + package + "-" + ebuild_version_tree + ".ebuild"
		root = '/'
		trees = {
		root : {'porttree' : portage.portagetree(root, settings=self._mysettings)}
		}
		root_config = RootConfig(self._mysettings, trees[root], None)
		allvars = set(x for x in portage.auxdbkeys if not x.startswith("UNUSED_"))
		allvars.update(Package.metadata_keys)
		allvars = sorted(allvars)
		myaux = dict(zip(allvars, self._myportdb.aux_get(cpv, allvars, myrepo=repo)))
		pkg = Package(cpv=cpv, metadata=myaux, root_config=root_config, type_name='ebuild')
		fails = []
		try:
			# All ebuilds should have utf_8 encoding.
			f = codecs.open(_unicode_encode(full_path,
			encoding = _encodings['fs'], errors = 'strict'),
			mode = 'r', encoding = _encodings['repo.content'])
			try:
				for check_name, e in run_checks(f, pkg):
					fails.append(check_name + ": " + e)
			finally:
				f.close()
		except UnicodeDecodeError:
			# A file.UTF8 failure will have already been recorded above.
			pass
		# fails will have a list with repoman errors
		return fails
コード例 #2
0
ファイル: checkbump.py プロジェクト: rafaelmartins/checkbump
 def gentoo_version(self):
     if not self.error:
         portage = portagetree()
         versions = portage.dep_match(self.atom)
         if len(versions) == 0:
             raise Exception('package not found %r' % self.atom)
         last_atom = versions[-1]
         cp, pv, rev = pkgsplit(last_atom)
         return pv
コード例 #3
0
ファイル: find-keywordreq.py プロジェクト: vrosnet/gnome
def main():
	""" Main function """

	api = portage.portdbapi()
	api._aux_cache_keys.clear()
	api._aux_cache_keys.update(["EAPI", "KEYWORDS", "SLOT"])

	root = '/'
	trees = {
		root : {'porttree' : portage.portagetree(root)}
	}
	portdb = trees[root]['porttree'].dbapi
	#portdb._aux_cache_keys.clear()
	#portdb._aux_cache_keys.update(["EAPI", "KEYWORDS", "SLOT"])

	#pprint(api.porttrees)

	for atom in sys.argv:

		arches = {}
		keywords = {}
		best_revision = {}
		need_keyword = {}
		revisions = api.cp_list(atom, mytree=api.porttrees[0])
		rev_keywords = {}
		max_arch_list = []

		# Select best revision
		revisions.sort(package_sort)

		# Build maximum possible arches list
		for revision in revisions:
			# print revision

			aux_kw, slot = api.aux_get(revision, ['KEYWORDS', 'SLOT'])
			aux_kw = [kw for kw in aux_kw.replace('~', '').split() if kw and not kw.startswith('-') and kw not in ARCH_DEV and kw not in ARCH_EXP]

			# Build best set of keywords per SLOT
			for kw in aux_kw:
				if slot in keywords:
					if kw not in keywords[slot]:
						keywords[slot].append(kw)
				else:
					keywords[slot] = [kw]

			if not keywords or not slot in keywords:
				revisions.remove(revision)
			else:
				if revision.endswith("9999"):
					revisions.remove(revision)
					continue
				best_revision[slot] = revision
				keywords[slot] = ARCH_GNOME
				need_keyword[slot] = [kw for kw in keywords[slot] if kw not in aux_kw]

		# Show missing arches
		for slot in keywords:
			if need_keyword[slot]:
#				keycheck_incrementals = tuple(x for x in portage.const.INCREMENTALS if x != 'ACCEPT_KEYWORDS')
				# for package.use.mask support inside dep_check
#				dep_settings = portage.config(
#					config_incrementals = keycheck_incrementals,
#					local_config = False)
#				dep_settings.setcpv(revision)
#				dep_settings["ACCEPT_KEYWORDS"] = " ".join(keywords[slot] + need_keyword[slot])
#
#				for dep_type in ('DEPEND', 'RDEPEND', 'PDEPEND'):
#					aux_dep = api.aux_get(revision, [dep_type])[0]
#					print portage.dep_check(aux_dep, portdb, dep_settings, use='all', trees=trees, mode='minimum-visible')
#

				kw_print = ""
				for kw in ARCH_GNOME:
					kw_print += " "
					if kw in need_keyword[slot]:
						kw_print += kw
					else:
						kw_print += " " * len(kw)

				print "%-60s:" % best_revision[slot], kw_print
コード例 #4
0
import portage
import os
import re
import portage.xml.metadata
from xml.etree.ElementTree import ParseError
from urllib.parse import urlparse
from collections import namedtuple


# local_config=False tells this to ignore all changes in /etc/portage
SETTINGS = portage.config(local_config=False)

PORTTREE = portage.portagetree(settings=SETTINGS).dbapi


class VersionMaskedException(Exception):
    pass


# As far as I'm aware these are not formally defined anywhere, so we're making up the sets as we go
def arch_list():
    name = "Default"

    DEFAULT = ["alpha", "amd64", "arm", "hppa", "ia64", "ppc", "ppc64", "sparc", "x86"]

    if name == "FreeBSD":
        return frozenset([arch for arch in self.valid_arches() if arch.endswith('-fbsd')])

    if name == "Prefix":
        # Warning: This will fail if we ever include more archs with hyphens than fbsd
        return frozenset([arch for arch in self.valid_arches() if "-" in arch and not arch.endswith('-fbsd')])
コード例 #5
0
import os
import sys
import portage

if len(sys.argv) != 2 or not portage.isvalidatom(sys.argv[1]):
	sys.stderr.write("usage: %s <atom>\n" % os.path.basename(sys.argv[0]))
	sys.exit(1)

input_atom = portage.dep.Atom(sys.argv[1])
settings = portage.config(config_profile_path="",
	local_config=False)
settings["ACCEPT_KEYWORDS"] = "**"
settings.backup_changes("ACCEPT_KEYWORDS")
settings.lock()
porttree = portage.portagetree(settings=settings)
portdb = porttree.dbapi
trees = {"/" : {"porttree":porttree}}
dep_keys = ("DEPEND", "RDEPEND", "PDEPEND")

for cp in portdb.cp_all():
	for cpv in portdb.cp_list(cp):
		metadata = dict(zip(dep_keys,
			portdb.aux_get(cpv, dep_keys)))
		dep_str = " ".join(metadata[k] for k in dep_keys)
		success, atoms = portage.dep_check(dep_str,
			None, settings, use="all",
			trees=trees, myroot=settings["ROOT"])

		if not success:
			sys.stderr.write("%s %s\n" % (cpv, atoms))