[PATCH] Improve filtering of non-available groups (#469438)

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

 



We show groups that don't have any of their mandatory packages available
which is less than ideal as, eg, xfce-desktop gets shown just because
gdm is on the dvd.  So make our filtering a little bit stronger.

And make sure that text mode is using the same filtering
---
 iw/GroupSelector.py     |   23 +++--------------------
 textw/grpselect_text.py |    2 ++
 yuminstall.py           |   29 +++++++++++++++++++++++++++++
 3 files changed, 34 insertions(+), 20 deletions(-)

diff --git a/iw/GroupSelector.py b/iw/GroupSelector.py
index 18df2ee..a8df9fa 100644
--- a/iw/GroupSelector.py
+++ b/iw/GroupSelector.py
@@ -120,28 +120,11 @@ def _selectPackage(ayum, group, pkg):
     else:
         map(lambda x: x.groups.append(grpid), txmbrs)
 
-def _groupHasPackages(grp, ayum):
-    # this checks to see if the given group has any packages available
-    # (ie, already installed or in the sack of available packages)
-    # so that we don't show empty groups
-    for p in grp.packages:
-        try:
-            pkgs = ayum.pkgSack.returnNewestByName(p)
-            return True
-        except yum.Errors.PackageSackError:
-            pass
-        try:
-            pkgs = ayum.rpmdb.returnNewestByName(p)
-            return True
-        except (IndexError, yum.Errors.PackageSackError):
-            pass
-    return False
-
 def _catHasGroupWithPackages(cat, ayum):
     grps = map(lambda x: ayum.comps.return_group(x),
                    filter(lambda x: ayum.comps.has_group(x), cat.groups))
     for g in grps:
-        if _groupHasPackages(g, ayum):
+        if ayum._groupHasPackages(g):
             return True
     return False
 
@@ -373,7 +356,7 @@ class GroupSelector:
                    filter(lambda x: self.ayum.comps.has_group(x), groups))
         grps.sort(ui_comps_sort)
         for grp in grps:
-            if not _groupHasPackages(grp, self.ayum):
+            if not self.ayum._groupHasPackages(grp):
                 continue
             s = "<span size=\"large\" weight=\"bold\">%s</span>" % xmltrans(grp.name, grp.translated_name)
 
@@ -488,7 +471,7 @@ class GroupSelector:
         # conceivably should be handled by yum
         grps = {}
         for g in self.ayum.comps.groups:
-            if g.user_visible and _groupHasPackages(g, self.ayum):
+            if g.user_visible and self.ayum._groupHasPackages(g):
                 grps[g.groupid] = g
 
         for cat in self.ayum.comps.categories:
diff --git a/textw/grpselect_text.py b/textw/grpselect_text.py
index ff4a402..fe98e37 100644
--- a/textw/grpselect_text.py
+++ b/textw/grpselect_text.py
@@ -75,6 +75,8 @@ class GroupSelectionWindow:
         # FIXME: this is very yum backend specific...
         groups = filter(lambda x: x.user_visible,
                         anaconda.backend.ayum.comps.groups)
+        groups = filter(lambda x: anaconda.backend.ayum.._groupHasPackages(x),
+                        groups)
         groups.sort(ui_comps_sort)
         ct = CheckboxTree(height = 6, scroll = (len(groups) > 6))
         for grp in groups:
diff --git a/yuminstall.py b/yuminstall.py
index 3cf5f95..8a56fcb 100644
--- a/yuminstall.py
+++ b/yuminstall.py
@@ -901,6 +901,35 @@ class AnacondaYum(YumSorter):
             return True
         return False
 
+    def _pkgExists(self, pkg):
+        """Whether or not a given package exists in our universe."""
+        try:
+            pkgs = self.pkgSack.returnNewestByName(pkg)
+            return True
+        except yum.Errors.PackageSackError:
+            pass
+        try:
+            pkgs = self.rpmdb.returnNewestByName(pkg)
+            return True
+        except (IndexError, yum.Errors.PackageSackError):
+            pass
+        return False
+
+    def _groupHasPackages(self, grp):
+        # this checks to see if the given group has any packages available
+        # (ie, already installed or in the sack of available packages)
+        # so that we don't show empty groups.  also, if there are mandatory
+        # packages and we have none of them, don't show
+        for pkg in grp.mandatory_packages.keys():
+            if self._pkgExists(pkg):
+                return True
+        if len(grp.mandatory_packages) > 0:
+            return False
+        for pkg in grp.default_packages.keys() + grp.optional_packages.keys():
+            if self._pkgExists(pkg):
+                return True
+        return False
+
 class YumBackend(AnacondaBackend):
     def __init__ (self, anaconda):
         AnacondaBackend.__init__(self, anaconda)
-- 
1.6.0.3

_______________________________________________
Anaconda-devel-list mailing list
Anaconda-devel-list@xxxxxxxxxx
https://www.redhat.com/mailman/listinfo/anaconda-devel-list

[Index of Archives]     [Kickstart]     [Fedora Users]     [Fedora Legacy List]     [Fedora Maintainers]     [Fedora Desktop]     [Fedora SELinux]     [Big List of Linux Books]     [Yosemite News]     [Yosemite Photos]     [KDE Users]     [Fedora Tools]
  Powered by Linux