Lines 1083-1088
Link Here
|
1083 |
self.pkg_node_map = {} |
1083 |
self.pkg_node_map = {} |
1084 |
# Maps slot atom to digraph node for all nodes added to the graph. |
1084 |
# Maps slot atom to digraph node for all nodes added to the graph. |
1085 |
self._slot_node_map = {} |
1085 |
self._slot_node_map = {} |
|
|
1086 |
# Maps nodes to the reasons they were selected for reinstallation. |
1087 |
self._reinstall_nodes = {} |
1086 |
self.mydbapi = {} |
1088 |
self.mydbapi = {} |
1087 |
self._mydbapi_keys = ["SLOT", "DEPEND", "RDEPEND", "PDEPEND", |
1089 |
self._mydbapi_keys = ["SLOT", "DEPEND", "RDEPEND", "PDEPEND", |
1088 |
"USE", "IUSE", "PROVIDE", "RESTRICT"] |
1090 |
"USE", "IUSE", "PROVIDE", "RESTRICT"] |
Lines 1204-1221
Link Here
|
1204 |
|
1206 |
|
1205 |
def _reinstall_for_flags(self, forced_flags, |
1207 |
def _reinstall_for_flags(self, forced_flags, |
1206 |
orig_use, orig_iuse, cur_use, cur_iuse): |
1208 |
orig_use, orig_iuse, cur_use, cur_iuse): |
|
|
1209 |
"""Return a set of flags that trigger reinstallation, or None if there |
1210 |
are no such flags.""" |
1207 |
if "--newuse" in self.myopts: |
1211 |
if "--newuse" in self.myopts: |
1208 |
if orig_iuse.symmetric_difference( |
1212 |
flags = orig_iuse.symmetric_difference( |
1209 |
cur_iuse).difference(forced_flags): |
1213 |
cur_iuse).difference(forced_flags) |
1210 |
return True |
1214 |
if flags: |
1211 |
elif orig_iuse.intersection(orig_use) != \ |
1215 |
return flags |
1212 |
cur_iuse.intersection(cur_use): |
1216 |
flags = orig_iuse.intersection(orig_use).symmetric_difference( |
1213 |
return True |
1217 |
cur_iuse.intersection(cur_use)) |
|
|
1218 |
if flags: |
1219 |
return flags |
1214 |
elif "changed-use" == self.myopts.get("--reinstall"): |
1220 |
elif "changed-use" == self.myopts.get("--reinstall"): |
1215 |
if orig_iuse.intersection(orig_use) != \ |
1221 |
flags = orig_iuse.intersection(orig_use).symmetric_difference( |
1216 |
cur_iuse.intersection(cur_use): |
1222 |
cur_iuse.intersection(cur_use)) |
1217 |
return True |
1223 |
if flags: |
1218 |
return False |
1224 |
return flags |
|
|
1225 |
return None |
1219 |
|
1226 |
|
1220 |
def create(self, mybigkey, myparent=None, addme=1, myuse=None, |
1227 |
def create(self, mybigkey, myparent=None, addme=1, myuse=None, |
1221 |
priority=DepPriority(), rev_dep=False, arg=None): |
1228 |
priority=DepPriority(), rev_dep=False, arg=None): |
Lines 1286-1291
Link Here
|
1286 |
return 0 |
1293 |
return 0 |
1287 |
del e |
1294 |
del e |
1288 |
|
1295 |
|
|
|
1296 |
reinstall_for_flags = None |
1289 |
merging=1 |
1297 |
merging=1 |
1290 |
if mytype == "installed": |
1298 |
if mytype == "installed": |
1291 |
merging = 0 |
1299 |
merging = 0 |
Lines 1299-1304
Link Here
|
1299 |
If the package has new iuse flags or different use flags then if |
1307 |
If the package has new iuse flags or different use flags then if |
1300 |
--newuse is specified, we need to merge the package. """ |
1308 |
--newuse is specified, we need to merge the package. """ |
1301 |
if merging == 0 and \ |
1309 |
if merging == 0 and \ |
|
|
1310 |
myroot == self.target_root and \ |
1302 |
("--newuse" in self.myopts or |
1311 |
("--newuse" in self.myopts or |
1303 |
"--reinstall" in self.myopts) and \ |
1312 |
"--reinstall" in self.myopts) and \ |
1304 |
vardbapi.cpv_exists(mykey): |
1313 |
vardbapi.cpv_exists(mykey): |
Lines 1310-1317
Link Here
|
1310 |
iuses = set(filter_iuse_defaults(metadata["IUSE"].split())) |
1319 |
iuses = set(filter_iuse_defaults(metadata["IUSE"].split())) |
1311 |
old_iuse = set(filter_iuse_defaults( |
1320 |
old_iuse = set(filter_iuse_defaults( |
1312 |
vardbapi.aux_get(mykey, ["IUSE"])[0].split())) |
1321 |
vardbapi.aux_get(mykey, ["IUSE"])[0].split())) |
1313 |
if self._reinstall_for_flags( |
1322 |
reinstall_for_flags = self._reinstall_for_flags( |
1314 |
forced_flags, old_use, old_iuse, myuse, iuses): |
1323 |
forced_flags, old_use, old_iuse, myuse, iuses) |
|
|
1324 |
if reinstall_for_flags: |
1315 |
merging = 1 |
1325 |
merging = 1 |
1316 |
|
1326 |
|
1317 |
if addme and merging == 1: |
1327 |
if addme and merging == 1: |
Lines 1379-1384
Link Here
|
1379 |
self._slot_node_map[myroot][slot_atom] = jbigkey |
1389 |
self._slot_node_map[myroot][slot_atom] = jbigkey |
1380 |
self.pkg_node_map[myroot][mykey] = jbigkey |
1390 |
self.pkg_node_map[myroot][mykey] = jbigkey |
1381 |
self.useFlags[myroot][mykey] = myuse |
1391 |
self.useFlags[myroot][mykey] = myuse |
|
|
1392 |
if reinstall_for_flags: |
1393 |
self._reinstall_nodes[jbigkey] = reinstall_for_flags |
1382 |
|
1394 |
|
1383 |
if rev_dep and myparent: |
1395 |
if rev_dep and myparent: |
1384 |
self.digraph.addnode(myparent, jbigkey, |
1396 |
self.digraph.addnode(myparent, jbigkey, |
Lines 2874-2880
Link Here
|
2874 |
use_expand_hidden = \ |
2886 |
use_expand_hidden = \ |
2875 |
pkgsettings["USE_EXPAND_HIDDEN"].lower().split() |
2887 |
pkgsettings["USE_EXPAND_HIDDEN"].lower().split() |
2876 |
|
2888 |
|
2877 |
def map_to_use_expand(myvals, forcedFlags=False): |
2889 |
def map_to_use_expand(myvals, forcedFlags=False, |
|
|
2890 |
removeHidden=True): |
2878 |
ret = {} |
2891 |
ret = {} |
2879 |
forced = {} |
2892 |
forced = {} |
2880 |
for exp in use_expand: |
2893 |
for exp in use_expand: |
Lines 2889-2901
Link Here
|
2889 |
ret["USE"] = myvals |
2902 |
ret["USE"] = myvals |
2890 |
forced["USE"] = [val for val in myvals \ |
2903 |
forced["USE"] = [val for val in myvals \ |
2891 |
if val in forced_flags] |
2904 |
if val in forced_flags] |
2892 |
for exp in use_expand_hidden: |
2905 |
if removeHidden: |
2893 |
if exp in ret: |
2906 |
for exp in use_expand_hidden: |
2894 |
del ret[exp] |
2907 |
ret.pop(exp, None) |
2895 |
if forcedFlags: |
2908 |
if forcedFlags: |
2896 |
return ret, forced |
2909 |
return ret, forced |
2897 |
return ret |
2910 |
return ret |
2898 |
|
2911 |
|
|
|
2912 |
# Prevent USE_EXPAND_HIDDEN flags from being hidden if they |
2913 |
# are the only thing that triggered reinstallation. |
2914 |
reinst_flags_map = None |
2915 |
reinstall_for_flags = self._reinstall_nodes.get(pkg_node) |
2916 |
if reinstall_for_flags: |
2917 |
reinst_flags_map = map_to_use_expand( |
2918 |
list(reinstall_for_flags), removeHidden=False) |
2919 |
if reinst_flags_map["USE"]: |
2920 |
reinst_flags_map = None |
2921 |
else: |
2922 |
for k in reinst_flags_map.keys(): |
2923 |
if not reinst_flags_map[k]: |
2924 |
del reinst_flags_map[k] |
2925 |
if reinst_flags_map and \ |
2926 |
not set(reinst_flags_map).difference( |
2927 |
use_expand_hidden): |
2928 |
use_expand_hidden = set(use_expand_hidden).difference( |
2929 |
reinst_flags_map) |
2930 |
|
2899 |
cur_iuse_map, iuse_forced = \ |
2931 |
cur_iuse_map, iuse_forced = \ |
2900 |
map_to_use_expand(cur_iuse, forcedFlags=True) |
2932 |
map_to_use_expand(cur_iuse, forcedFlags=True) |
2901 |
cur_use_map = map_to_use_expand(cur_use) |
2933 |
cur_use_map = map_to_use_expand(cur_use) |