summaryrefslogtreecommitdiffstats
path: root/pym/_emerge/resolver
diff options
context:
space:
mode:
authorDavid James <davidjames@google.com>2011-05-01 10:21:45 -0700
committerZac Medico <zmedico@gentoo.org>2011-05-01 10:21:45 -0700
commit470871eeafa89a05486d4eb6f3f7626c1f813e4d (patch)
treeaeb8eb32a862b2a0e271755372ba4c9994b50800 /pym/_emerge/resolver
parentdf15d8c67d6c9d821a5fada0063c04da9bb2bed6 (diff)
downloadportage-470871eeafa89a05486d4eb6f3f7626c1f813e4d.tar.gz
portage-470871eeafa89a05486d4eb6f3f7626c1f813e4d.tar.bz2
portage-470871eeafa89a05486d4eb6f3f7626c1f813e4d.zip
emerge: add --rebuild and --norebuild-atoms opts
Rebuild when build-time/run-time deps are upgraded. If pkgA has been updated, and pkgB depends on pkgA at both build-time and run-time, pkgB needs to be rebuilt. This feature ensures that all packages are consistent when dependencies that are used at both runtime and build time are changed. This feature only rebuilds packages one layer deep. That means that if you upgrade libcros, for example, packages that depend directly on libcros will be rebuilt and reinstalled, but indirect dependencies will not be rebuilt. BUG=chromium-os:14296 TEST=Test whether packages rebuilding a bunch of packages. Change-Id: Idbc0532b4b1de28fd9e5a0abe3b7dbe1a3abd2c8 Review URL: http://codereview.chromium.org/6905107
Diffstat (limited to 'pym/_emerge/resolver')
-rw-r--r--pym/_emerge/resolver/backtracking.py13
1 files changed, 12 insertions, 1 deletions
diff --git a/pym/_emerge/resolver/backtracking.py b/pym/_emerge/resolver/backtracking.py
index 1ffada96f..f00e6ca19 100644
--- a/pym/_emerge/resolver/backtracking.py
+++ b/pym/_emerge/resolver/backtracking.py
@@ -7,6 +7,7 @@ class BacktrackParameter(object):
__slots__ = (
"needed_unstable_keywords", "runtime_pkg_mask", "needed_use_config_changes", "needed_license_changes",
+ "rebuild_list", "reinstall_list"
)
def __init__(self):
@@ -14,6 +15,8 @@ class BacktrackParameter(object):
self.runtime_pkg_mask = {}
self.needed_use_config_changes = {}
self.needed_license_changes = {}
+ self.rebuild_list = set()
+ self.reinstall_list = set()
def __deepcopy__(self, memo=None):
if memo is None:
@@ -27,6 +30,8 @@ class BacktrackParameter(object):
result.runtime_pkg_mask = copy.copy(self.runtime_pkg_mask)
result.needed_use_config_changes = copy.copy(self.needed_use_config_changes)
result.needed_license_changes = copy.copy(self.needed_license_changes)
+ result.rebuild_list = copy.copy(self.rebuild_list)
+ result.reinstall_list = copy.copy(self.reinstall_list)
return result
@@ -34,7 +39,9 @@ class BacktrackParameter(object):
return self.needed_unstable_keywords == other.needed_unstable_keywords and \
self.runtime_pkg_mask == other.runtime_pkg_mask and \
self.needed_use_config_changes == other.needed_use_config_changes and \
- self.needed_license_changes == other.needed_license_changes
+ self.needed_license_changes == other.needed_license_changes and \
+ self.rebuild_list == other.rebuild_list and \
+ self.reinstall_list == other.reinstall_list
class _BacktrackNode:
@@ -137,6 +144,10 @@ class Backtracker(object):
elif change == "needed_use_config_changes":
for pkg, (new_use, new_changes) in data:
para.needed_use_config_changes[pkg] = (new_use, new_changes)
+ elif change == "rebuild_list":
+ para.rebuild_list.update(data)
+ elif change == "reinstall_list":
+ para.reinstall_list.update(data)
self._add(new_node, explore=explore)
self._current_node = new_node