Hi all:
Added some new elements to my previous patch
(
https://www.redhat.com/archives/fedora-buildsys-list/2007-June/msg00028.html)
hope this is what pungi is looking for.
Any comments greatly appreciated.
Regards.
PS: Just wanted to repost the patch so it isn't forgotten :)
--
Joel Andres Granados
diff -ru --exclude=.hg --new-file pungi/pungi pungi_l/pungi
--- pungi/pungi 2007-07-11 14:53:29.000000000 +0200
+++ pungi_l/pungi 2007-07-11 17:24:41.000000000 +0200
@@ -83,6 +83,15 @@
destdir = config.get('default', 'destdir')
+ if config.has_option('default', 'quiet'):logF=False
+ else:logF=True
+ config.set('default','quiet',str(not logF))
+
+ # change logging defaults.
+ logPath = os.path.join(config.get('default', 'destdir'),
+ 'logs/%s.%s.log' % (config.get('default', 'flavor'),
config.get('default', 'arch')))
+ logger.changeDefaults(logPath=logPath, logF=logF)
+
if not os.path.exists(destdir):
try:
os.makedirs(destdir)
diff -ru --exclude=.hg --new-file pungi/pypungi/gather.py pungi_l/pypungi/gather.py
--- pungi/pypungi/gather.py 2007-07-11 14:53:29.000000000 +0200
+++ pungi_l/pypungi/gather.py 2007-07-11 17:45:25.000000000 +0200
@@ -49,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 = []
@@ -59,19 +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)
- if self.config.get('default', 'flavor'):
- logfile = os.path.join(logdir, '%s.%s.log' %
(self.config.get('default', 'flavor'),
-
self.config.get('default', 'arch')))
- else:
- logfile = os.path.join(logdir, '%s.log' %
(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
@@ -99,8 +87,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
@@ -116,15 +103,14 @@
deps = self.whatProvides(r, f, v).returnPackages()
if not deps:
- self.logger.warn("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
depsack = yum.packageSack.ListPackageSack(deps)
for dep in depsack.returnNewestByNameArch():
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
@@ -149,7 +135,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
@@ -200,22 +186,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
@@ -244,12 +226,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.'
@@ -287,7 +267,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'),
@@ -306,8 +286,7 @@
local = os.path.join(self.config.get('default', 'cachedir'),
local)
if os.path.exists(local) and self.verifyCachePkg(pkg, local):
- 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
@@ -316,8 +295,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...
@@ -371,20 +349,16 @@
local = os.path.basename(remote)
local = os.path.join(self.config.get('default', 'cachedir'),
local)
if os.path.exists(local) and self.verifyCachePkg(pkg, local):
-
- 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
self.verifyCachePkg(pkg, os.path.join(pkgdir, os.path.basename(remote))):
- 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...
diff -ru --exclude=.hg --new-file pungi/pypungi/__init__.py pungi_l/pypungi/__init__.py
--- pungi/pypungi/__init__.py 2007-07-11 14:53:29.000000000 +0200
+++ pungi_l/pypungi/__init__.py 2007-07-11 17:23:30.000000000 +0200
@@ -0,0 +1,23 @@
+#!/usr/bin/python -tt
+# This program is free software; you can redistribute it and/or modify
+# it under the terms of the GNU General Public License as published by
+# the Free Software Foundation; version 2 of the License.
+#
+# This program is distributed in the hope that it will be useful,
+# but WITHOUT ANY WARRANTY; without even the implied warranty of
+# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+# GNU Library General Public License for more details.
+#
+# You should have received a copy of the GNU General Public License
+# along with this program; if not, write to the Free Software
+# Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.
+#
+
+# After importing any modules from pypungi two elements are added to the
+# __builtin__ variable: log and Pungilog object.
+# log : used as a logging object (log.debug("message")
+# Pungilog object: used to change the behavior of log.
+
+from logger import Logger
+
+Logger()#Pungi log object
diff -ru --exclude=.hg --new-file pungi/pypungi/logger.py pungi_l/pypungi/logger.py
--- pungi/pypungi/logger.py 1970-01-01 01:00:00.000000000 +0100
+++ pungi_l/pypungi/logger.py 2007-07-11 17:24:31.000000000 +0200
@@ -0,0 +1,69 @@
+#!/usr/bin/python -tt
+# This program is free software; you can redistribute it and/or modify
+# it under the terms of the GNU General Public License as published by
+# the Free Software Foundation; version 2 of the License.
+#
+# This program is distributed in the hope that it will be useful,
+# but WITHOUT ANY WARRANTY; without even the implied warranty of
+# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+# GNU Library General Public License for more details.
+#
+# You should have received a copy of the GNU General Public License
+# along with this program; if not, write to the Free Software
+# Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.
+#
+
+import logging
+import os.path
+import os
+import __builtin__
+
+class Logger:
+ """Class to manage the pungi log
+
+ Once the pypungi module is imported the class is initialized with default values.
+ The user can use it just by typing log.####("message"). This will
automatically
+ log stuff to the default file.
+ If the user wants to change the defaults he must call the
pypungi.pungiLogO.chengeDefaults.
+ """
+ __logPath="/srv/pungi/pungi.log"
+ __logF=True
+ __level=logging.DEBUG
+
+ def __init__(self,logPath=__logPath, logF=__logF, level=__level):
+ """ Initialize the logger.
+
+ logPath - is the path to the file.
+ logF - Log to file.
+ level - the level of debuging
+ """
+
+ self.createLogger(logPath, logF, level)
+ #Add the log as log
+ __builtin__.log = self.log
+ #Add the ogject as logger
+ __builtin__.logger = self
+
+ def changeDefaults(self, logPath=__logPath, logF=__logF, level=__level):
+ # remove all trace from previous filehandler.
+ self.log.removeHandler(self.fileHandler)
+ if logPath !=self.__logPath : os.remove(self.__logPath)
+ self.createLogger(logPath, logF, level)
+
+ __builtin__.log = self.log
+
+ def createLogger(self, logPath=__logPath, logF=__logF, level=__level):
+ self.log = logging.getLogger("pungi")
+ if logF:
+ if not os.path.exists(os.path.split(logPath)[0]):
+ os.makedirs(os.path.split(logPath)[0])
+ self.fileHandler = logging.FileHandler(logPath)
+ self.fileHandler.setLevel(level)
+
+ formatter = logging.Formatter('%(name)s-%(levelno)s-%(funcName)s :
%(message)s')
+ self.fileHandler.setFormatter(formatter)
+
+ self.log.addHandler(self.fileHandler)
+ self.log.setLevel(logging.DEBUG)
+ else:
+ self.log.disabled=1
diff -ru --exclude=.hg --new-file pungi/pypungi/pungi.py pungi_l/pypungi/pungi.py
--- pungi/pypungi/pungi.py 2007-07-11 14:53:29.000000000 +0200
+++ pungi_l/pypungi/pungi.py 2007-07-11 17:43:44.000000000 +0200
@@ -13,7 +13,6 @@
# Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.
import subprocess
-import logging
import os
import sys
sys.path.append('/usr/lib/anaconda-runtime')
@@ -21,8 +20,6 @@
import shutil
import re
-log = logging.getLogger("pypungi.pungi")
-
class Pungi:
def __init__(self, config):
self.config = config