diff options
author | David James <davidjames@google.com> | 2011-05-01 10:21:45 -0700 |
---|---|---|
committer | Zac Medico <zmedico@gentoo.org> | 2011-05-01 10:21:45 -0700 |
commit | 470871eeafa89a05486d4eb6f3f7626c1f813e4d (patch) | |
tree | aeb8eb32a862b2a0e271755372ba4c9994b50800 /pym/_emerge/resolver | |
parent | df15d8c67d6c9d821a5fada0063c04da9bb2bed6 (diff) | |
download | portage-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.py | 13 |
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 |