Blame SOURCES/BZ-1267234-groupinstall-fail-on-non-existent.patch

5e9bef
commit 7e7f374c1ac6984fc50726dd649c4f4c2f56266c
5e9bef
Author: Valentina Mukhamedzhanova <vmukhame@redhat.com>
5e9bef
Date:   Wed Jan 29 12:08:30 2014 -0500
5e9bef
5e9bef
     Make 'yum install @group' give an error when trying to install a
5e9bef
    non-existent group.
5e9bef
5e9bef
diff --git a/cli.py b/cli.py
5e9bef
index c8884ae..eed63a2 100755
5e9bef
--- a/cli.py
5e9bef
+++ b/cli.py
5e9bef
@@ -964,6 +964,8 @@ class YumBaseCli(yum.YumBase, output.YumOutput):
5e9bef
                 else:
5e9bef
                     assert basecmd == 'install', basecmd
5e9bef
                     txmbrs = self.install(pattern=arg)
5e9bef
+            except yum.Errors.GroupInstallError, e:
5e9bef
+                self.verbose_logger.log(yum.logginglevels.INFO_2, e)
5e9bef
             except yum.Errors.InstallError:
5e9bef
                 self.verbose_logger.log(yum.logginglevels.INFO_2,
5e9bef
                                         _('No package %s%s%s available.'),
5e9bef
@@ -1922,6 +1924,7 @@ class YumBaseCli(yum.YumBase, output.YumOutput):
5e9bef
             for igrp in self.igroups.groups:
5e9bef
                 pkgs_used.extend(self._at_groupupgrade('@'  + igrp))
5e9bef
         
5e9bef
+        done = False
5e9bef
         for group_string in grouplist:
5e9bef
 
5e9bef
             grp_grp = True
5e9bef
@@ -1966,11 +1969,19 @@ class YumBaseCli(yum.YumBase, output.YumOutput):
5e9bef
             if not group_matched:
5e9bef
                 self.logger.error(_('Warning: group %s does not exist.'), group_string)
5e9bef
                 continue
5e9bef
+            done = True
5e9bef
             
5e9bef
         if not pkgs_used:
5e9bef
             if self.conf.group_command == 'objects':
5e9bef
                 self.logger.critical(_("Maybe run: yum groups mark install (see man yum)"))
5e9bef
-            return 0, [_('No packages in any requested group available to install or update')]
5e9bef
+            exit_status = 1
5e9bef
+            if upgrade:
5e9bef
+                # upgrades don't fail
5e9bef
+                exit_status = 0
5e9bef
+            if done:
5e9bef
+                # at least one group_string was a valid group
5e9bef
+                exit_status = 0
5e9bef
+            return exit_status, [_('No packages in any requested group available to install or update')]
5e9bef
         else:
5e9bef
             return 2, [P_('%d package to Install', '%d packages to Install', len(pkgs_used)) % len(pkgs_used)]
5e9bef
 
5e9bef
diff --git a/yum/Errors.py b/yum/Errors.py
5e9bef
index 70de539..2c2f022 100644
5e9bef
--- a/yum/Errors.py
5e9bef
+++ b/yum/Errors.py
5e9bef
@@ -105,6 +105,9 @@ class GroupsError(YumBaseError):
5e9bef
 class InstallError(YumBaseError):
5e9bef
     pass
5e9bef
 
5e9bef
+class GroupInstallError(InstallError):
5e9bef
+    pass
5e9bef
+
5e9bef
 class UpdateError(YumBaseError):
5e9bef
     pass
5e9bef
     
5e9bef
diff --git a/yum/__init__.py b/yum/__init__.py
5e9bef
index bbd20f3..b40c7e4 100644
5e9bef
--- a/yum/__init__.py
5e9bef
+++ b/yum/__init__.py
5e9bef
@@ -1158,8 +1158,7 @@ class YumBase(depsolve.Depsolve):
5e9bef
         if hasattr(self, 'term'):
5e9bef
             hibeg, hiend = self.term.MODE['bold'], self.term.MODE['normal']
5e9bef
 
5e9bef
-        func(_("The program %s%s%s is found in the yum-utils package.") %
5e9bef
-             (hibeg, prog, hiend))
5e9bef
+        func(_("The program %s is found in the yum-utils package.") % self._try_bold(prog))
5e9bef
 
5e9bef
     def buildTransaction(self, unfinished_transactions_check=True):
5e9bef
         """Go through the packages in the transaction set, find them
5e9bef
@@ -4451,6 +4450,12 @@ much more problems).
5e9bef
             if node == slow:
5e9bef
                 return None
5e9bef
 
5e9bef
+    def _try_bold(self, string_):
5e9bef
+        """Attempt to make the string look bold in terminal."""
5e9bef
+        if hasattr(self, 'term'):
5e9bef
+            return '%s%s%s' % (self.term.MODE['bold'], string_, self.term.MODE['normal'])
5e9bef
+        return string_
5e9bef
+
5e9bef
     def _at_groupinstall(self, pattern, upgrade=False):
5e9bef
         " Do groupinstall via. leading @ on the cmd line, for install."
5e9bef
         assert pattern[0] == '@'
5e9bef
@@ -4464,42 +4469,31 @@ much more problems).
5e9bef
             self.logger.warning(e)
5e9bef
             return tx_return
5e9bef
 
5e9bef
+        found = False
5e9bef
         if group_string and group_string[0] == '^':
5e9bef
             group_string = group_string[1:]
5e9bef
             # Actually dealing with "environment groups".
5e9bef
-            found = False
5e9bef
             for env_grp in comps.return_environments(group_string):
5e9bef
                 found = True
5e9bef
-                try:
5e9bef
-                    txmbrs = self.selectEnvironment(env_grp.environmentid,
5e9bef
-                                                    upgrade=upgrade)
5e9bef
-                    tx_return.extend(txmbrs)
5e9bef
-                except yum.Errors.GroupsError:
5e9bef
-                    assert False, "Checked in for loop."
5e9bef
-                    continue
5e9bef
-            if not found:
5e9bef
-                self.logger.error(_('Warning: Environment group %s does not exist.'),
5e9bef
-                                  group_string)
5e9bef
-            return tx_return
5e9bef
-
5e9bef
-        found = False
5e9bef
-        for group in comps.return_groups(group_string):
5e9bef
-            found = True
5e9bef
-            try:
5e9bef
+                txmbrs = self.selectEnvironment(env_grp.environmentid,
5e9bef
+                                                upgrade=upgrade)
5e9bef
+                tx_return.extend(txmbrs)
5e9bef
+        else:
5e9bef
+            for group in comps.return_groups(group_string):
5e9bef
+                found = True
5e9bef
                 txmbrs = self.selectGroup(group.groupid, upgrade=upgrade)
5e9bef
                 tx_return.extend(txmbrs)
5e9bef
-            except yum.Errors.GroupsError:
5e9bef
-                assert False, "Checked in for loop."
5e9bef
-                continue
5e9bef
         if not found:
5e9bef
-            self.logger.error(_('Warning: Package group %s does not exist.'),
5e9bef
-                              group_string)
5e9bef
-
5e9bef
+            raise Errors.GroupInstallError, _('Group %s does not exist.') % self._try_bold(group_string)
5e9bef
         return tx_return
5e9bef
 
5e9bef
     def _at_groupupgrade(self, pattern):
5e9bef
         " Do group upgrade via. leading @ on the cmd line, for update."
5e9bef
-        return self._at_groupinstall(pattern, upgrade=True)
5e9bef
+        try:
5e9bef
+            return self._at_groupinstall(pattern, upgrade=True)
5e9bef
+        except Errors.GroupInstallError, e:
5e9bef
+            self.logger.warning(_('Warning: %s'), e)
5e9bef
+            return []
5e9bef
 
5e9bef
     def _at_groupremove(self, pattern):
5e9bef
         " Do groupremove via. leading @ on the cmd line, for remove."