Here is the updated patch.
1. The exception is now an instance of GroupInstallError (which inherits from 
InstallError) and contains the information about the string.
2. Upgrading via 'yum upgrade @sdoi' now doesn't fail, the exception is handled.
3. 'yum group install' now gives an error, while 'yum group upgrade' doesn't.

You were concerned about reinstalls, but the patch doesn't affect them in any 
way.

 cli.py          |  6 +++++-
 yum/Errors.py   |  3 +++
 yum/__init__.py | 39 +++++++++++++++------------------------
 3 files changed, 23 insertions(+), 25 deletions(-)

diff --git a/cli.py b/cli.py
index c8884ae..0afa994 100755
--- a/cli.py
+++ b/cli.py
@@ -964,6 +964,8 @@ class YumBaseCli(yum.YumBase, output.YumOutput):
                 else:
                     assert basecmd == 'install', basecmd
                     txmbrs = self.install(pattern=arg)
+            except yum.Errors.GroupInstallError, e:
+                self.verbose_logger.log(yum.logginglevels.INFO_2, e)
             except yum.Errors.InstallError:
                 self.verbose_logger.log(yum.logginglevels.INFO_2,
                                         _('No package %s%s%s available.'),
@@ -1922,6 +1924,7 @@ class YumBaseCli(yum.YumBase, output.YumOutput):
             for igrp in self.igroups.groups:
                 pkgs_used.extend(self._at_groupupgrade('@'  + igrp))
         
+        done = False
         for group_string in grouplist:
 
             grp_grp = True
@@ -1966,11 +1969,12 @@ class YumBaseCli(yum.YumBase, output.YumOutput):
             if not group_matched:
                 self.logger.error(_('Warning: group %s does not exist.'), 
group_string)
                 continue
+            done = True
             
         if not pkgs_used:
             if self.conf.group_command == 'objects':
                 self.logger.critical(_("Maybe run: yum groups mark install 
(see man yum)"))
-            return 0, [_('No packages in any requested group available to 
install or update')]
+            return not upgrade and not done, [_('No packages in any requested 
group available to install or update')]
         else:
             return 2, [P_('%d package to Install', '%d packages to Install', 
len(pkgs_used)) % len(pkgs_used)]
 
diff --git a/yum/Errors.py b/yum/Errors.py
index 70de539..2c2f022 100644
--- a/yum/Errors.py
+++ b/yum/Errors.py
@@ -105,6 +105,9 @@ class GroupsError(YumBaseError):
 class InstallError(YumBaseError):
     pass
 
+class GroupInstallError(InstallError):
+    pass
+
 class UpdateError(YumBaseError):
     pass
     
diff --git a/yum/__init__.py b/yum/__init__.py
index bbd20f3..9485d9e 100644
--- a/yum/__init__.py
+++ b/yum/__init__.py
@@ -4464,42 +4464,33 @@ much more problems).
             self.logger.warning(e)
             return tx_return
 
+        found = False
         if group_string and group_string[0] == '^':
             group_string = group_string[1:]
             # Actually dealing with "environment groups".
-            found = False
             for env_grp in comps.return_environments(group_string):
                 found = True
-                try:
-                    txmbrs = self.selectEnvironment(env_grp.environmentid,
-                                                    upgrade=upgrade)
-                    tx_return.extend(txmbrs)
-                except yum.Errors.GroupsError:
-                    assert False, "Checked in for loop."
-                    continue
-            if not found:
-                self.logger.error(_('Warning: Environment group %s does not 
exist.'),
-                                  group_string)
-            return tx_return
-
-        found = False
-        for group in comps.return_groups(group_string):
-            found = True
-            try:
+                txmbrs = self.selectEnvironment(env_grp.environmentid,
+                                                upgrade=upgrade)
+                tx_return.extend(txmbrs)
+        else:
+            for group in comps.return_groups(group_string):
+                found = True
                 txmbrs = self.selectGroup(group.groupid, upgrade=upgrade)
                 tx_return.extend(txmbrs)
-            except yum.Errors.GroupsError:
-                assert False, "Checked in for loop."
-                continue
         if not found:
-            self.logger.error(_('Warning: Package group %s does not exist.'),
-                              group_string)
-
+            raise yum.Errors.GroupInstallError, _('Group %s%s%s does not 
exist.') % (
+                                                  self.term.MODE['bold'], 
group_string,
+                                                  self.term.MODE['normal'])
         return tx_return
 
     def _at_groupupgrade(self, pattern):
         " Do group upgrade via. leading @ on the cmd line, for update."
-        return self._at_groupinstall(pattern, upgrade=True)
+        try:
+            return self._at_groupinstall(pattern, upgrade=True)
+        except yum.Errors.GroupInstallError, e:
+            self.logger.warning('Warning: %s', e)
+            return []
 
     def _at_groupremove(self, pattern):
         " Do groupremove via. leading @ on the cmd line, for remove."

_______________________________________________
Yum-devel mailing list
Yum-devel@lists.baseurl.org
http://lists.baseurl.org/mailman/listinfo/yum-devel
_______________________________________________
Yum-devel mailing list
Yum-devel@lists.baseurl.org
http://lists.baseurl.org/mailman/listinfo/yum-devel

Reply via email to