summaryrefslogtreecommitdiff
path: root/portato/backend/portage/system.py
diff options
context:
space:
mode:
Diffstat (limited to '')
-rw-r--r--portato/backend/portage/system.py18
1 files changed, 11 insertions, 7 deletions
diff --git a/portato/backend/portage/system.py b/portato/backend/portage/system.py
index a1ac90c..e2a00cb 100644
--- a/portato/backend/portage/system.py
+++ b/portato/backend/portage/system.py
@@ -370,9 +370,9 @@ class PortageSystem (SystemInterface):
# append system packages
packages.extend(unique_array([p.get_cp() for p in self.find_all_system_packages()]))
- states = [(["RDEPEND","PDEPEND"],True)]#, (["DEPEND"], False)]
+ states = [(["RDEPEND"], True)]
if self.with_bdeps():
- states[1] = (["DEPEND"], True)
+ states.append((["DEPEND"], True))
checked = []
updating = []
@@ -413,15 +413,19 @@ class PortageSystem (SystemInterface):
new_iuse = set(p.get_iuse_flags(installed = False)) # IUSE in the ebuild
old_iuse = set(p.get_iuse_flags(installed = True)) # IUSE in the vardb
+
+ # add forced flags, as they might trigger a rebuild
+ new_iuse_f = set(p.get_iuse_flags(installed = False, removeForced = False))
+ old_iuse_f = set(p.get_iuse_flags(installed = True, removeForced = False))
- if new_iuse.symmetric_difference(old_iuse): # difference between new_iuse and old_iuse
+ if new_iuse.symmetric_difference(old_iuse): # difference between IUSE (w/o forced)
tempDeep = True
if not appended:
updating.append((p,p))
appended = True
- else:
- if new_iuse.intersection(p.get_actual_use_flags()).symmetric_difference(p.get_installed_use_flags()):
+ else: # check for difference between the _set_ useflags (w/ forced)
+ if new_iuse_f.intersection(p.get_actual_use_flags()).symmetric_difference(old_iuse_f.intersection(p.get_installed_use_flags())):
tempDeep = True
if not appended:
updating.append((p,p))
@@ -429,7 +433,7 @@ class PortageSystem (SystemInterface):
if deep or tempDeep:
if (appended or prev_appended) and len(states) < 2:
- real_states = states + [("DEPEND", False)]
+ real_states = states + [("PDEPEND", True), ("DEPEND", False)]
else:
real_states = states
for state in real_states:
@@ -442,7 +446,7 @@ class PortageSystem (SystemInterface):
else:
for pkg in bm:
if not pkg: continue
- check(pkg, state[1], appended)
+ check(pkg, state[1], appended) # XXX: should be 'or'ed with prev_appended?
for p in self.get_new_packages(packages):
if not p: continue # if a masked package is installed we have "None" here