-# Copyright 2010 Gentoo Foundation
+# Copyright 2010-2011 Gentoo Foundation
# Distributed under the terms of the GNU General Public License v2
from itertools import permutations
from portage.dbapi.bintree import binarytree
from portage.dep import Atom, _repo_separator
from portage.package.ebuild.config import config
+from portage.package.ebuild.digestgen import digestgen
from portage._sets import load_default_config
+from portage._sets.base import InternalPackageSet
from portage.versions import catsplit
import _emerge
"""
config_files = frozenset(("package.use", "package.mask", "package.keywords", \
- "package.unmask", "package.properties", "package.license"))
+ "package.unmask", "package.properties", "package.license", "use.mask", "use.force"))
def __init__(self, ebuilds={}, installed={}, profile={}, repo_configs={}, \
user_config={}, sets={}, world=[], debug=False):
f.close()
def _create_ebuild_manifests(self, ebuilds):
+ tmpsettings = config(clone=self.settings)
+ tmpsettings['PORTAGE_QUIET'] = '1'
for cpv in ebuilds:
a = Atom("=" + cpv, allow_repo=True)
repo = a.repo
ebuild_dir = os.path.join(repo_dir, a.cp)
ebuild_path = os.path.join(ebuild_dir, a.cpv.split("/")[1] + ".ebuild")
- portage.util.noiselimit = -1
- tmpsettings = config(clone=self.settings)
portdb = self.trees[self.root]["porttree"].dbapi
- portage.doebuild(ebuild_path, "digest", self.root, tmpsettings,
- tree="porttree", mydbapi=portdb)
- portage.util.noiselimit = 0
+ tmpsettings['O'] = ebuild_dir
+ if not digestgen(mysettings=tmpsettings, myportdb=portdb):
+ raise AssertionError('digest creation failed for %s' % ebuild_path)
def _create_installed(self, installed):
for cpv in installed:
repos_conf_file = os.path.join(user_config_dir, "repos.conf")
f = open(repos_conf_file, "w")
- priority = 1
+ priority = 0
for repo in sorted(self.repo_dirs.keys()):
f.write("[%s]\n" % repo)
f.write("LOCATION=%s\n" % self.repo_dirs[repo])
if repo == "test_repo":
- f.write("PRIORITY=%s\n" % 1000)
+ f.write("PRIORITY=%s\n" % -1000)
else:
f.write("PRIORITY=%s\n" % priority)
priority += 1
f.close()
def _load_config(self):
+ portdir_overlay = []
+ for repo_name in sorted(self.repo_dirs):
+ path = self.repo_dirs[repo_name]
+ if path != self.portdir:
+ portdir_overlay.append(path)
+
env = {
"ACCEPT_KEYWORDS": "x86",
"PORTDIR": self.portdir,
+ "PORTDIR_OVERLAY": " ".join(portdir_overlay),
'PORTAGE_TMPDIR' : os.path.join(self.eroot, 'var/tmp'),
}
def run(self, atoms, options={}, action=None):
options = options.copy()
options["--pretend"] = True
- options["--quiet"] = True
if self.debug:
options["--debug"] = True
if options.get("--depclean"):
rval, cleanlist, ordered, req_pkg_count = \
calc_depclean(self.settings, self.trees, None,
- options, "depclean", atoms, None)
+ options, "depclean", InternalPackageSet(initial_atoms=atoms, allow_wildcard=True), None)
result = ResolverPlaygroundDepcleanResult( \
atoms, rval, cleanlist, ordered, req_pkg_count)
else:
params = create_depgraph_params(options, action)
success, depgraph, favorites = backtrack_depgraph(
self.settings, self.trees, options, params, action, atoms, None)
+ depgraph._show_merge_list()
depgraph.display_problems()
result = ResolverPlaygroundResult(atoms, success, depgraph, favorites)
finally:
self.slot_collision_solutions = []
handler = self.depgraph._dynamic_config._slot_conflict_handler
- for solution in handler.solutions:
- s = {}
- for pkg in solution:
- changes = {}
- for flag, state in solution[pkg].items():
- if state == "enabled":
- changes[flag] = True
- else:
- changes[flag] = False
- s[pkg.cpv] = changes
- self.slot_collision_solutions.append(s)
+ for change in handler.changes:
+ new_change = {}
+ for pkg in change:
+ new_change[pkg.cpv] = change[pkg]
+ self.slot_collision_solutions.append(new_change)
if self.depgraph._dynamic_config._circular_dependency_handler is not None:
handler = self.depgraph._dynamic_config._circular_dependency_handler