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()