Update timestamps in headers of modified files.
[portage.git] / pym / portage / tests / resolver / ResolverPlayground.py
index f05bdf184f5a58ae052b380e1ea0a6e071f7af5f..c3540c939df929e4b97e7feee415e5ef9700d891 100644 (file)
@@ -1,4 +1,4 @@
-# Copyright 2010 Gentoo Foundation
+# Copyright 2010-2011 Gentoo Foundation
 # Distributed under the terms of the GNU General Public License v2
 
 from itertools import permutations
@@ -12,7 +12,9 @@ from portage.dbapi.porttree import portagetree
 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
@@ -30,7 +32,7 @@ class ResolverPlayground(object):
        """
 
        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):
@@ -139,6 +141,8 @@ class ResolverPlayground(object):
                        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
@@ -149,12 +153,10 @@ class ResolverPlayground(object):
                        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:
@@ -295,12 +297,12 @@ class ResolverPlayground(object):
 
                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
@@ -372,9 +374,16 @@ class ResolverPlayground(object):
                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'),
                }
 
@@ -409,7 +418,6 @@ class ResolverPlayground(object):
        def run(self, atoms, options={}, action=None):
                options = options.copy()
                options["--pretend"] = True
-               options["--quiet"] = True
                if self.debug:
                        options["--debug"] = True
 
@@ -424,13 +432,14 @@ class ResolverPlayground(object):
                        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:
@@ -572,17 +581,11 @@ class ResolverPlaygroundResult(object):
                        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