[yum-commits] Branch 'yum-3_2_X' - utils.py

skvidal at osuosl.org skvidal at osuosl.org
Wed Sep 16 17:14:08 UTC 2009


 utils.py |   65 +++++++++++++++++++++++++++++++++++++++++++++++++++++++++++----
 1 file changed, 61 insertions(+), 4 deletions(-)

New commits:
commit 6fd122d0fc69d626a57070279399b53806f91ef2
Author: Seth Vidal <skvidal at fedoraproject.org>
Date:   Wed Sep 16 12:42:19 2009 -0400

    add doUtilTransaction() method to YumUtilBase.
    
    This method handles a bunch of the exit cases we deal
    with coming out of doTransaction() so we don't have to write
    the same exception catching code over and over again. This will be tied into
    some yum-utils updates, too.

diff --git a/utils.py b/utils.py
index 5456c68..aebb959 100644
--- a/utils.py
+++ b/utils.py
@@ -18,11 +18,15 @@ import time
 
 import yum
 from cli import *
+from yum import Errors
 from yum import _
+from yum import logginglevels
 from optparse import OptionGroup
 
 import yum.plugins as plugins
 
+
+
 class YumUtilBase(YumBaseCli):
     def __init__(self,name,ver,usage):
         YumBaseCli.__init__(self)
@@ -46,7 +50,7 @@ class YumUtilBase(YumBaseCli):
         while True:
             try:
                 self.doLock()
-            except yum.Errors.LockError, e:
+            except Errors.LockError, e:
                 if "%s" %(e.msg,) != lockerr:
                     lockerr = "%s" %(e.msg,)
                     self.logger.critical(lockerr)
@@ -83,7 +87,7 @@ class YumUtilBase(YumBaseCli):
                 pc.enabled_plugins = self._parser._splitArg(opts.enableplugins)
             self.conf
 
-        except yum.Errors.ConfigError, e:
+        except Errors.ConfigError, e:
             self.logger.critical(_('Config Error: %s'), e)
             sys.exit(1)
         except ValueError, e:
@@ -108,10 +112,63 @@ class YumUtilBase(YumBaseCli):
             self._getRpmDB()
             self._getRepos(doSetup = True)
             self._getSacks()
-        except yum.Errors.YumBaseError, msg:
+        except Errors.YumBaseError, msg:
             self.logger.critical(str(msg))
             sys.exit(1)
-            
+    
+    def doUtilTransaction(self):
+        def exUserCancel():
+            self.logger.critical(_('\n\nExiting on user cancel'))
+            if unlock(): return 200
+            return 1
+
+        def exIOError(e):
+            if e.errno == 32:
+                self.logger.critical(_('\n\nExiting on Broken Pipe'))
+            else:
+                self.logger.critical(_('\n\n%s') % str(e))
+            if unlock(): return 200
+            return 1
+
+        def exPluginExit(e):
+            '''Called when a plugin raises PluginYumExit.
+
+            Log the plugin's exit message if one was supplied.
+            ''' # ' xemacs hack
+            exitmsg = str(e)
+            if exitmsg:
+                self.logger.warn('\n\n%s', exitmsg)
+            if unlock(): return 200
+            return 1
+
+        def exFatal(e):
+            self.logger.critical('\n\n%s', to_unicode(e.value))
+            if unlock(): return 200
+            return 1
+
+        def unlock():
+            try:
+                self.closeRpmDB()
+                self.doUnlock()
+            except Errors.LockError, e:
+                return 200
+            return 0
+
+        try:
+            return_code = self.doTransaction()
+        except plugins.PluginYumExit, e:
+            return exPluginExit(e)
+        except Errors.YumBaseError, e:
+            return exFatal(e)
+        except KeyboardInterrupt:
+            return exUserCancel()
+        except IOError, e:
+            return exIOError(e)
+
+        self.verbose_logger.log(logginglevels.INFO_2, _('Complete!'))
+        if unlock(): return 200
+        return return_code
+        
 def main():
     name = 'testutil'
     ver  = '0.1'


More information about the Yum-commits mailing list