summaryrefslogtreecommitdiffstats
path: root/pym/_emerge/depgraph.py
diff options
context:
space:
mode:
authorZac Medico <zmedico@gentoo.org>2012-07-10 15:45:12 -0700
committerZac Medico <zmedico@gentoo.org>2012-07-10 15:45:12 -0700
commitc42591b5d0484459837da28482f70fad9ff13824 (patch)
tree1f44082790e1e7fb0e1e2340eed0a7ef18ef0770 /pym/_emerge/depgraph.py
parent8639e39d6c13306661261a3cb66c6827bcd2d26c (diff)
downloadportage-c42591b5d0484459837da28482f70fad9ff13824.tar.gz
portage-c42591b5d0484459837da28482f70fad9ff13824.tar.bz2
portage-c42591b5d0484459837da28482f70fad9ff13824.zip
emerge: add --complete-graph-if-new-use < y | n >
Trigger the --complete-graph behavior if USE or IUSE will change for an installed package. This option is enabled by default. This will fix bug #425558.
Diffstat (limited to 'pym/_emerge/depgraph.py')
-rw-r--r--pym/_emerge/depgraph.py26
1 files changed, 21 insertions, 5 deletions
diff --git a/pym/_emerge/depgraph.py b/pym/_emerge/depgraph.py
index f819aef3d..703720cf0 100644
--- a/pym/_emerge/depgraph.py
+++ b/pym/_emerge/depgraph.py
@@ -4643,6 +4643,8 @@ class depgraph(object):
"recurse" not in self._dynamic_config.myparams:
return 1
+ complete_if_new_use = self._dynamic_config.myparams.get(
+ "complete_if_new_use", "y") == "y"
complete_if_new_ver = self._dynamic_config.myparams.get(
"complete_if_new_ver", "y") == "y"
rebuild_if_new_slot_abi = self._dynamic_config.myparams.get(
@@ -4650,8 +4652,10 @@ class depgraph(object):
complete_if_new_slot = rebuild_if_new_slot_abi
if "complete" not in self._dynamic_config.myparams and \
- (complete_if_new_ver or complete_if_new_slot):
- # Enable complete mode if an installed package version will change.
+ (complete_if_new_use or
+ complete_if_new_ver or complete_if_new_slot):
+ # Enable complete mode if an installed package will change somehow.
+ use_change = False
version_change = False
for node in self._dynamic_config.digraph:
if not isinstance(node, Package) or \
@@ -4660,14 +4664,26 @@ class depgraph(object):
vardb = self._frozen_config.roots[
node.root].trees["vartree"].dbapi
- if complete_if_new_ver:
+ if complete_if_new_use or complete_if_new_ver:
inst_pkg = vardb.match_pkgs(node.slot_atom)
if inst_pkg and inst_pkg[0].cp == node.cp:
inst_pkg = inst_pkg[0]
- if inst_pkg < node or node < inst_pkg:
+ if complete_if_new_ver and \
+ (inst_pkg < node or node < inst_pkg):
version_change = True
break
+ # Intersect enabled USE with IUSE, in order to
+ # ignore forced USE from implicit IUSE flags, since
+ # they're probably irrelevant and they are sensitive
+ # to use.mask/force changes in the profile.
+ if complete_if_new_use and \
+ (node.iuse.all != inst_pkg.iuse.all or
+ node.use.enabled.intersection(node.iuse.all) !=
+ inst_pkg.use.enabled.intersection(inst_pkg.iuse.all)):
+ use_change = True
+ break
+
if complete_if_new_slot:
cp_list = vardb.match_pkgs(Atom(node.cp))
if (cp_list and cp_list[0].cp == node.cp and
@@ -4675,7 +4691,7 @@ class depgraph(object):
version_change = True
break
- if version_change:
+ if use_change or version_change:
self._dynamic_config.myparams["complete"] = True
if "complete" not in self._dynamic_config.myparams: