logo       


Choosing A Webhost:
A web hosting service is a type of Internet hosting service that allows individuals and organizations to provide their own website accessible via the World Wide Web. Web hosts are companies that provide space on a server they own for use by their clients as well as providing Internet connectivity, typically in a data center. Web hosts can also provide data center space and connectivity to the Internet for servers they do not own to be located in their data center, called colocation. more...

verbose command option: msg#00003

Subject: verbose command option
This is a multi-part message in MIME format.
Hi list:

How about a verbose option "-v"? On the one hand it is very useful for the impatient user that needs some sort of immediate feedback. on the other hand it could be useful for other applications that might need to analyze pungis output (like revisor). The idea is to have the option off by defect and when the user specifies "-v" at the command line, all the logging information is showed. With the output I did a very simple progress bar and every thing seem to work correctly (the progress bar example is not attached, it works but its not pretty :).
The verbose option contains the logging patch I posted earlier.


The diffs are attached.



--- gather.py-original  2007-05-03 18:35:02.000000000 +0200
+++ gather.py-JG        2007-05-04 17:25:21.000000000 +0200
@@ -16,6 +16,9 @@
 import os
 import shutil
 import sys
+import logging
+
+log = logging.getLogger("pungi")
 
 class Gather(yum.YumBase):
     def __init__(self, config, pkglist):
@@ -46,7 +49,6 @@
         #self.doSackSetup(arches)
         self.doSackSetup(archlist=arches) # work around temp break in yum api
         self.doSackFilelistPopulate()
-        self.logger = yum.logging.getLogger("yum.verbose.pungi")
         self.pkglist = pkglist
         self.polist = []
         self.srpmlist = []
@@ -56,15 +58,8 @@
         self.compsobj.add(self.config.get('default', 'comps'))
 
     def doLoggingSetup(self, debuglevel, errorlevel):
-        """Setup the logging facility."""
-
-
-        logdir = os.path.join(self.config.get('default', 'destdir'), 'logs')
-        if not os.path.exists(logdir):
-            os.makedirs(logdir)
-        logfile = os.path.join(logdir, '%s.%s.log' % 
(self.config.get('default', 'flavor'),
-                                                      
self.config.get('default', 'arch')))
-        yum.logging.basicConfig(level=yum.logging.DEBUG, filename=logfile)
+        # We want to use our own logger.
+        pass
 
     def doFileLogSetup(self, uid, logfile):
         # This function overrides a yum function, allowing pungi to control
@@ -76,8 +71,7 @@
            transaction info"""
 
 
-        if not self.config.has_option('default', 'quiet'):
-            self.logger.info('Checking deps of %s.%s' % (po.name, po.arch))
+        log.info('Checking deps of %s.%s' % (po.name, po.arch))
 
         reqs = po.requires
         provs = po.provides
@@ -93,13 +87,12 @@
 
             deps = self.whatProvides(r, f, v).returnPackages()
             if deps is None:
-                self.logger.warning("Unresolvable dependency %s in %s.%s" % 
(r, po.name, po.arch))
+                log.warning("Unresolvable dependency %s in %s.%s" % (r, 
po.name, po.arch))
                 continue
 
             for dep in deps:
                 self.tsInfo.addInstall(dep)
-                if not self.config.has_option('default', 'quiet'):
-                    self.logger.info('Added %s.%s for %s.%s' % (dep.name, 
dep.arch, po.name, po.arch))
+                log.info('Added %s.%s for %s.%s' % (dep.name, dep.arch, 
po.name, po.arch))
            
             self.resolved_deps[req] = None
 
@@ -124,7 +117,7 @@
 
         # Check if we have the group
         if not self.compsobj.has_group(group):
-            self.logger.error("Group %s not found in comps!" % group)
+            log.error("Group %s not found in comps!" % group)
             return packages
 
         # Get the group object to work with
@@ -175,22 +168,18 @@
         for line in self.pkglist:
             line = line.strip()
             if line.startswith('#'):
-                if not self.config.has_option('default', 'quiet'):
-                    self.logger.info('Skipping comment: %s' % line)
+                log.info('Skipping comment: %s' % line)
                 continue
             if line.startswith('@'):
-                if not self.config.has_option('default', 'quiet'):
-                    self.logger.info('Adding group: %s' % line)
+                log.info('Adding group: %s' % line)
                 grouplist.append(line.strip('@'))
                 continue
             if line.startswith('-'):
-                if not self.config.has_option('default', 'quiet'):
-                    self.logger.info('Adding exclude: %s' % line)
+                log.info('Adding exclude: %s' % line)
                 excludelist.append(line.strip('-'))
                 continue
             else:
-                if not self.config.has_option('default', 'quiet'):
-                    self.logger.info('Adding package: %s' % line)
+                log.info('Adding package: %s' % line)
                 addlist.append(line)
 
         # First remove the excludes
@@ -219,12 +208,10 @@
         mysack = yum.packageSack.ListPackageSack(matches)
         for match in mysack.returnNewestByNameArch():
             self.tsInfo.addInstall(match)
-            if not self.config.has_option('default', 'quiet'):
-                self.logger.info('Found %s.%s' % (match.name, match.arch))
+            log.info('Found %s.%s' % (match.name, match.arch))
 
         for pkg in unmatched:
-            if not pkg in matchdict.keys():
-                self.logger.warn('Could not find a match for %s' % pkg)
+            log.warn('Could not find a match for %s' % pkg)
 
         if len(self.tsInfo) == 0:
             raise yum.Errors.MiscError, 'No packages found to download.'
@@ -262,7 +249,7 @@
             for pkg in self.polist:
                 downloads.append('%s.%s' % (pkg.name, pkg.arch))
                 downloads.sort()
-            self.logger.info("Download list: %s" % downloads)
+            log.info("Download list: %s" % downloads)
 
         # Package location within destdir, name subject to change/config
         pkgdir = os.path.join(self.config.get('default', 'destdir'), 
self.config.get('default', 'version'), 
@@ -282,8 +269,7 @@
             if (os.path.exists(local) and
                 str(os.path.getsize(local)) == pkg.packagesize):
 
-                if not self.config.has_option('default', 'quiet'):
-                    self.logger.info("%s already exists and appears to be 
complete" % local)
+                log.info("%s already exists and appears to be complete" % 
local)
                 target = os.path.join(pkgdir, os.path.basename(remote))
                 if os.path.exists(target):
                     os.remove(target) # avoid traceback after interrupted 
download
@@ -292,8 +278,7 @@
 
             # Disable cache otherwise things won't download
             repo.cache = 0
-            if not self.config.has_option('default', 'quiet'):
-                self.logger.info('Downloading %s' % os.path.basename(remote))
+            log.info('Downloading %s' % os.path.basename(remote))
             pkg.localpath = local # Hack: to set the localpath to what we want.
 
             # do a little dance for file:// repos...
@@ -348,19 +333,16 @@
             local = os.path.join(self.config.get('default', 'cachedir'), local)
             if os.path.exists(local) and str(os.path.getsize(local)) == 
pkg.packagesize:
 
-                if not self.config.has_option('default', 'quiet'):
-                    self.logger.info("%s already exists and appears to be 
complete" % local)
+                log.info("%s already exists and appears to be complete" % 
local)
                 if os.path.exists(os.path.join(pkgdir, 
os.path.basename(remote))) and str(os.path.getsize(os.path.join(pkgdir, 
os.path.basename(remote)))) == pkg.packagesize:
-                    if not self.config.has_option('default', 'quiet'):
-                        self.logger.info("%s already exists in tree and 
appears to be complete" % local)
+                    log.info("%s already exists in tree and appears to be 
complete" % local)
                 else:
                     os.link(local, os.path.join(pkgdir, 
os.path.basename(remote)))
                 continue
 
             # Disable cache otherwise things won't download
             repo.cache = 0
-            if not self.config.has_option('default', 'quiet'):
-                self.logger.info('Downloading %s' % os.path.basename(remote))
+            log.info('Downloading %s' % os.path.basename(remote))
             pkg.localpath = local # Hack: to set the localpath to what we want.
 
             # do a little dance for file:// repos...
--- pungi.py-original   2007-05-03 18:34:48.000000000 +0200
+++ pungi.py-JG 2007-05-04 17:33:30.000000000 +0200
@@ -21,12 +21,16 @@
 import shutil
 import re
 
-log = logging.getLogger("pypungi.pungi")
+log = logging.getLogger("pungi")
 
 class Pungi:
     def __init__(self, config):
         self.config = config
         self.prodpath = 'Fedora' # Probably should be defined elsewhere
+        #self.config.set('default', 'destdir', os.path.join(int(time()),
+        #        self.config.get('default','destdir')))
+        #import pdb
+        #pdb.set_trace()
         self.destdir = self.config.get('default', 'destdir')
         self.archdir = os.path.join(self.destdir,
                                    self.config.get('default', 'version'),
--- pungi-original      2007-05-03 18:34:32.000000000 +0200
+++ pungi-JG    2007-05-04 17:36:38.000000000 +0200
@@ -16,6 +16,7 @@
 import pypungi.gather
 import pypungi.pungi
 import yum
+import logging
 
 from ConfigParser import SafeConfigParser
 
@@ -79,6 +80,19 @@
 
     destdir = config.get('default', 'destdir')
 
+    if not config.has_option('default', 'quiet'):quiet=False
+    else:quiet=True
+    config.set('default','quiet',str(quiet))
+    
+    config.set('default','verbose',str(opts.verbose))
+    
+    # initialize logging. 
+    initLogger(config.get('default', 'destdir'),
+               '%s.%s.log' % (config.get('default', 'flavor'), 
config.get('default', 'arch')),
+               quiet=quiet,
+               useVerboseMode= opts.verbose)
+    log = logging.getLogger("pungi")
+
     if not os.path.exists(destdir):
         try:
             os.makedirs(destdir)
@@ -157,6 +171,8 @@
           help="Flag to enable processing the SplitTree stage")
         parser.add_option("-I", action="store_true", default=False, 
dest="do_createiso",
           help="Flag to enable processing the CreateISO stage")
+        parser.add_option("-v", action="store_true", default=False, 
dest="verbose",
+          help="Flag to enable verbose mode")
 
 
         (opts, args) = parser.parse_args()
@@ -180,4 +195,31 @@
         manifestfile.close()
         return pkglist
 
+    def initLogger(path, filename, quiet=True, useVerboseMode=False):
+        """Initialize the log stuff so other files can use it.
+    
+        path - Is the directory where the log will be located
+        filename - Is the log files name
+        useLogFile - Whether to log to the file or not
+        useVerboseMode - Whether to output stuff to pungis stdout
+        """
+        logger = logging.getLogger("pungi")
+        if not quiet:
+            logdir = os.path.join(path , 'logs')
+            if not os.path.exists(logdir):
+                os.makedirs(logdir)
+            logfile = os.path.join(logdir, filename)
+    
+            fileHandler = logging.FileHandler(logfile)
+            fileHandler.setLevel(logging.DEBUG)
+            logger.addHandler(fileHandler) 
+        
+        if useVerboseMode:
+            stdoutHandler = logging.StreamHandler(sys.stdout)
+            stdoutHandler.setLevel(logging.INFO)
+            logger.addHandler(stdoutHandler)
+        
+        logger.setLevel(logging.DEBUG)
+        if quiet and not useVerboseMode:logger.disabled=1
+
     main()

Ruby Jobs
Java Jobs
Jobs in California
more...
what
job title, keywords
where
city, state, zip
jobs by job search
<Prev in Thread] Current Thread [Next in Thread>
Google Custom Search

Recently Viewed:
db.firebase.por...    text.xml.xalan....    qnx.openqnx.dev...    user-groups.zar...    internationaliz...    kde.devel.konve...    finance.e-gold....    emacs.latex.pre...    gis.therion/200...    web.webmin.gene...    yellowdog.gener...    vserver/2003-08...    redhat.release....    sysutils.tivoli...    xfree86.expert/...    mail.becky.user...    hardware.netapp...    netbsd.ports.xe...    python.distutil...    boot-loaders.gr...    culture.interne...    java.springfram...    activedir/2006-...   
Home | blog view | USPTO Patent Archive | advertise | OSDir is an inevitable website. super tiny logo

Free Magazines

Cisco News
Receive a free quarterly e-newsletter with exclusive articles on how Cisco IT uses its own products and solutions to enable the business.
subscribe

Systems Management News, the newspaper for IT systems administration and data center managers! Each issue of Systems Management News is chock-full of news and analysis to help you understand what's happening in your field.
subscribe

The Enterprise Newsweekly eWeek is the essential technology information source for builders of e-business.
subscribe

Oracle Magazine Oracle Magazine contains technology strategy articles, sample code, tips, Oracle and partner news, how to articles for developers and DBAs, and more. Oracle (NASDAQ: ORCL) is the world's largest enterprise software company.
subscribe

Total Telecom Total Telecom is "The Economist of the communications industry".
subscribe