summaryrefslogtreecommitdiffstats
path: root/pym/_emerge/depgraph.py
diff options
context:
space:
mode:
authorZac Medico <zmedico@gentoo.org>2009-07-12 05:26:39 +0000
committerZac Medico <zmedico@gentoo.org>2009-07-12 05:26:39 +0000
commitea3dc67f52872d1000b125dedd4660f83cdc0fe1 (patch)
treeedd54b507058c9bef3c6a93c24b46972ef3782cc /pym/_emerge/depgraph.py
parent0fdf87d248c6db3483de733ccf4315d757009102 (diff)
downloadportage-ea3dc67f52872d1000b125dedd4660f83cdc0fe1.tar.gz
portage-ea3dc67f52872d1000b125dedd4660f83cdc0fe1.tar.bz2
portage-ea3dc67f52872d1000b125dedd4660f83cdc0fe1.zip
Move the backtracking code from action_build() to a new backtrack_depgraph()
function. svn path=/main/trunk/; revision=13818
Diffstat (limited to 'pym/_emerge/depgraph.py')
-rw-r--r--pym/_emerge/depgraph.py32
1 files changed, 32 insertions, 0 deletions
diff --git a/pym/_emerge/depgraph.py b/pym/_emerge/depgraph.py
index 11b4b4963..8297a360e 100644
--- a/pym/_emerge/depgraph.py
+++ b/pym/_emerge/depgraph.py
@@ -30,6 +30,7 @@ from _emerge.BlockerCache import BlockerCache
from _emerge.BlockerDepPriority import BlockerDepPriority
from _emerge.changelog import calc_changelog
from _emerge.countdown import countdown
+from _emerge.create_depgraph_params import create_depgraph_params
from _emerge.create_world_atom import create_world_atom
from _emerge.Dependency import Dependency
from _emerge.DependencyArg import DependencyArg
@@ -4887,6 +4888,37 @@ def insert_category_into_atom(atom, category):
ret = None
return ret
+def backtrack_depgraph(settings, trees, myopts, myparams,
+ myaction, myfiles, spinner):
+ """
+ Raises PackageSetNotFound if myfiles contains a missing package set.
+ """
+ runtime_pkg_mask = None
+ allow_backtracking = True
+ backtracked = False
+ frozen_config = _frozen_depgraph_config(settings, trees,
+ myopts, spinner)
+ while True:
+ mydepgraph = depgraph(settings, trees, myopts, myparams, spinner,
+ frozen_config=frozen_config,
+ allow_backtracking=allow_backtracking,
+ runtime_pkg_mask=runtime_pkg_mask)
+ success, favorites = mydepgraph.select_files(myfiles)
+ if not success:
+ if mydepgraph.need_restart():
+ runtime_pkg_mask = mydepgraph.get_runtime_pkg_mask()
+ backtracked = True
+ elif backtracked and allow_backtracking:
+ # Backtracking failed, so disable it and do
+ # a plain dep calculation + error message.
+ allow_backtracking = False
+ runtime_pkg_mask = None
+ else:
+ break
+ else:
+ break
+ return (success, mydepgraph, favorites)
+
def resume_depgraph(settings, trees, mtimedb, myopts, myparams, spinner):
"""
Construct a depgraph for the given resume list. This will raise