Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(1463)

Side by Side Diff: pym/_emerge/resolver/backtracking.py

Issue 6905107: Rebuild when build-time/run-time deps are upgraded. (Closed) Base URL: git://git.overlays.gentoo.org/proj/portage.git@master
Patch Set: Address review feedback, add tests. Created 9 years, 7 months ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View unified diff | Download patch
« no previous file with comments | « pym/_emerge/main.py ('k') | pym/portage/dbapi/bintree.py » ('j') | no next file with comments »
Toggle Intra-line Diffs ('i') | Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
OLDNEW
1 # Copyright 2010 Gentoo Foundation 1 # Copyright 2010 Gentoo Foundation
2 # Distributed under the terms of the GNU General Public License v2 2 # Distributed under the terms of the GNU General Public License v2
3 3
4 import copy 4 import copy
5 5
6 class BacktrackParameter(object): 6 class BacktrackParameter(object):
7 7
8 __slots__ = ( 8 __slots__ = (
9 "needed_unstable_keywords", "runtime_pkg_mask", "needed_use_conf ig_changes", "needed_license_changes", 9 "needed_unstable_keywords", "runtime_pkg_mask", "needed_use_conf ig_changes", "needed_license_changes",
10 "rebuild_list", "reinstall_list"
10 ) 11 )
11 12
12 def __init__(self): 13 def __init__(self):
13 self.needed_unstable_keywords = set() 14 self.needed_unstable_keywords = set()
14 self.runtime_pkg_mask = {} 15 self.runtime_pkg_mask = {}
15 self.needed_use_config_changes = {} 16 self.needed_use_config_changes = {}
16 self.needed_license_changes = {} 17 self.needed_license_changes = {}
18 self.rebuild_list = set()
19 self.reinstall_list = set()
17 20
18 def __deepcopy__(self, memo=None): 21 def __deepcopy__(self, memo=None):
19 if memo is None: 22 if memo is None:
20 memo = {} 23 memo = {}
21 result = BacktrackParameter() 24 result = BacktrackParameter()
22 memo[id(self)] = result 25 memo[id(self)] = result
23 26
24 #Shallow copies are enough here, as we only need to ensure that nobody adds stuff 27 #Shallow copies are enough here, as we only need to ensure that nobody adds stuff
25 #to our sets and dicts. The existing content is immutable. 28 #to our sets and dicts. The existing content is immutable.
26 result.needed_unstable_keywords = copy.copy(self.needed_unstable _keywords) 29 result.needed_unstable_keywords = copy.copy(self.needed_unstable _keywords)
27 result.runtime_pkg_mask = copy.copy(self.runtime_pkg_mask) 30 result.runtime_pkg_mask = copy.copy(self.runtime_pkg_mask)
28 result.needed_use_config_changes = copy.copy(self.needed_use_con fig_changes) 31 result.needed_use_config_changes = copy.copy(self.needed_use_con fig_changes)
29 result.needed_license_changes = copy.copy(self.needed_license_ch anges) 32 result.needed_license_changes = copy.copy(self.needed_license_ch anges)
33 result.rebuild_list = copy.copy(self.rebuild_list)
34 result.reinstall_list = copy.copy(self.reinstall_list)
30 35
31 return result 36 return result
32 37
33 def __eq__(self, other): 38 def __eq__(self, other):
34 return self.needed_unstable_keywords == other.needed_unstable_ke ywords and \ 39 return self.needed_unstable_keywords == other.needed_unstable_ke ywords and \
35 self.runtime_pkg_mask == other.runtime_pkg_mask and \ 40 self.runtime_pkg_mask == other.runtime_pkg_mask and \
36 self.needed_use_config_changes == other.needed_use_confi g_changes and \ 41 self.needed_use_config_changes == other.needed_use_confi g_changes and \
37 » » » self.needed_license_changes == other.needed_license_chan ges 42 » » » self.needed_license_changes == other.needed_license_chan ges and \
43 » » » self.rebuild_list == other.rebuild_list and \
44 » » » self.reinstall_list == other.reinstall_list
38 45
39 46
40 class _BacktrackNode: 47 class _BacktrackNode:
41 48
42 __slots__ = ( 49 __slots__ = (
43 "parameter", "depth", "mask_steps", "terminal", 50 "parameter", "depth", "mask_steps", "terminal",
44 ) 51 )
45 52
46 def __init__(self, parameter=BacktrackParameter(), depth=0, mask_steps=0 , terminal=True): 53 def __init__(self, parameter=BacktrackParameter(), depth=0, mask_steps=0 , terminal=True):
47 self.parameter = parameter 54 self.parameter = parameter
(...skipping 82 matching lines...) Expand 10 before | Expand all | Expand 10 after
130 137
131 for change, data in changes.items(): 138 for change, data in changes.items():
132 if change == "needed_unstable_keywords": 139 if change == "needed_unstable_keywords":
133 para.needed_unstable_keywords.update(data) 140 para.needed_unstable_keywords.update(data)
134 elif change == "needed_license_changes": 141 elif change == "needed_license_changes":
135 for pkg, missing_licenses in data: 142 for pkg, missing_licenses in data:
136 para.needed_license_changes.setdefault(p kg, set()).update(missing_licenses) 143 para.needed_license_changes.setdefault(p kg, set()).update(missing_licenses)
137 elif change == "needed_use_config_changes": 144 elif change == "needed_use_config_changes":
138 for pkg, (new_use, new_changes) in data: 145 for pkg, (new_use, new_changes) in data:
139 para.needed_use_config_changes[pkg] = (n ew_use, new_changes) 146 para.needed_use_config_changes[pkg] = (n ew_use, new_changes)
147 elif change == "rebuild_list":
148 para.rebuild_list.update(data)
149 elif change == "reinstall_list":
150 para.reinstall_list.update(data)
140 151
141 self._add(new_node, explore=explore) 152 self._add(new_node, explore=explore)
142 self._current_node = new_node 153 self._current_node = new_node
143 154
144 155
145 def feedback(self, infos): 156 def feedback(self, infos):
146 """ 157 """
147 Takes information from the depgraph and computes new backtrack p arameters to try. 158 Takes information from the depgraph and computes new backtrack p arameters to try.
148 """ 159 """
149 assert self._current_node is not None, "call feedback() only aft er get() was called" 160 assert self._current_node is not None, "call feedback() only aft er get() was called"
(...skipping 22 matching lines...) Expand all
172 Like, get() but returns the backtrack parameter that has as many config changes as possible, 183 Like, get() but returns the backtrack parameter that has as many config changes as possible,
173 but has no masks. This makes --autounmask effective, but prevent s confusing error messages 184 but has no masks. This makes --autounmask effective, but prevent s confusing error messages
174 with "masked by backtracking". 185 with "masked by backtracking".
175 """ 186 """
176 best_node = self._root 187 best_node = self._root
177 for node in self._nodes: 188 for node in self._nodes:
178 if node.terminal and node.depth > best_node.depth: 189 if node.terminal and node.depth > best_node.depth:
179 best_node = node 190 best_node = node
180 191
181 return copy.deepcopy(best_node.parameter) 192 return copy.deepcopy(best_node.parameter)
OLDNEW
« no previous file with comments | « pym/_emerge/main.py ('k') | pym/portage/dbapi/bintree.py » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698