Fix logging during _ensuredir.
Some fixups for re-using dirs
This commit is contained in:
parent
6748133646
commit
dcf069a017
10
pungi
10
pungi
@ -22,15 +22,15 @@ import pykickstart.version
|
||||
|
||||
def main():
|
||||
|
||||
config = pypungi.config.Config()
|
||||
|
||||
(opts, args) = get_arguments(config)
|
||||
|
||||
# You must be this high to ride if you're going to do root tasks
|
||||
if os.geteuid () != 0 and (opts.do_all or opts.do_buildinstall):
|
||||
print >> sys.stderr, "You must run pungi as root"
|
||||
return 1
|
||||
|
||||
config = pypungi.config.Config()
|
||||
|
||||
(opts, args) = get_arguments(config)
|
||||
|
||||
# Set up the kickstart parser and pass in the kickstart file we were handed
|
||||
ksparser = pykickstart.parser.KickstartParser(pykickstart.version.makeVersion())
|
||||
ksparser.readKickstart(opts.config)
|
||||
@ -42,7 +42,7 @@ def main():
|
||||
if part.mountpoint == 'iso':
|
||||
config.set('default', 'cdsize', str(part.size))
|
||||
|
||||
config.set('default', 'force', opts.force)
|
||||
config.set('default', 'force', str(opts.force))
|
||||
|
||||
# Set up our directories
|
||||
if not os.path.exists(config.get('default', 'destdir')):
|
||||
|
@ -38,7 +38,7 @@ class PungiBase(object):
|
||||
|
||||
logdir = os.path.join(self.config.get('default', 'destdir'), 'logs')
|
||||
|
||||
_ensuredir(logdir, force=True) # Always allow logs to be written out
|
||||
_ensuredir(logdir, None, force=True) # Always allow logs to be written out
|
||||
|
||||
if self.config.get('default', 'flavor'):
|
||||
logfile = os.path.join(logdir, '%s.%s.log' % (self.config.get('default', 'flavor'),
|
||||
@ -69,7 +69,7 @@ def _doRunCommand(command, logger, rundir='/tmp', output=subprocess.PIPE, error=
|
||||
logger.error(err)
|
||||
raise OSError, "Got an error from %s: %s" % (command[0], err)
|
||||
|
||||
def _link(local, target, force=False):
|
||||
def _link(local, target, logger, force=False):
|
||||
"""Simple function to link or copy a package, removing target optionally."""
|
||||
|
||||
if os.path.exists(target) and force:
|
||||
@ -79,22 +79,32 @@ def _link(local, target, force=False):
|
||||
os.link(local, target)
|
||||
except OSError, e:
|
||||
if e.errno != 18: # EXDEV
|
||||
self.logger.error('Got an error linking from cache: %s' % e)
|
||||
logger.error('Got an error linking from cache: %s' % e)
|
||||
raise OSError, e
|
||||
|
||||
# Can't hardlink cross file systems
|
||||
shutil.copy2(local, target)
|
||||
|
||||
def _ensuredir(target, force=False, clean=False):
|
||||
def _ensuredir(target, logger, force=False, clean=False):
|
||||
"""Ensure that a directory exists, if it already exists, only continue
|
||||
if force is set."""
|
||||
|
||||
# We have to check existance of a logger, as setting the logger could
|
||||
# itself cause an issue.
|
||||
def whoops(func, path, exc_info):
|
||||
self.logger.error('Could not remove %s' % path)
|
||||
message = 'Could not remove %s' % path
|
||||
if logger:
|
||||
logger.error(message)
|
||||
else:
|
||||
sys.stderr(message)
|
||||
sys.exit(1)
|
||||
|
||||
if os.path.exists(target) and not os.path.isdir(target):
|
||||
self.logger.error('%s exists but is not a directory.' % target)
|
||||
message = '%s exists but is not a directory.' % target
|
||||
if logger:
|
||||
logger.error(message)
|
||||
else:
|
||||
sys.stderr(message)
|
||||
sys.exit(1)
|
||||
|
||||
if not os.path.isdir(target):
|
||||
@ -105,5 +115,9 @@ def _ensuredir(target, force=False, clean=False):
|
||||
elif force:
|
||||
return
|
||||
else:
|
||||
self.logger.error('Directory %s already exists. Use --force to overwrite.' % target)
|
||||
message = 'Directory %s already exists. Use --force to overwrite.' % target
|
||||
if logger:
|
||||
logger.error(message)
|
||||
else:
|
||||
sys.stderr(message)
|
||||
sys.exit(1)
|
@ -322,7 +322,7 @@ class Gather(pypungi.PungiBase):
|
||||
relpkgdir)
|
||||
|
||||
# Ensure the pkgdir exists, force if requested, and make sure we clean it out
|
||||
pypungi._ensuredir(pkgdir, force=self.config.getbool('default', 'force'), clean=True)
|
||||
pypungi._ensuredir(pkgdir, self.logger, force=self.config.getboolean('default', 'force'), clean=True)
|
||||
|
||||
probs = self.ayum.downloadPkgs(polist)
|
||||
|
||||
@ -342,7 +342,7 @@ class Gather(pypungi.PungiBase):
|
||||
|
||||
# Link downloaded package in (or link package from file repo)
|
||||
try:
|
||||
pypungi._link(local, target, force=True)
|
||||
pypungi._link(local, target, self.logger, force=True)
|
||||
continue
|
||||
except:
|
||||
self.logger.error("Unable to link %s from the yum cache." % po.name)
|
||||
|
@ -44,7 +44,7 @@ class Pungi(pypungi.PungiBase):
|
||||
self.topdir = os.path.join(self.archdir, 'os')
|
||||
self.isodir = os.path.join(self.archdir, self.config.get('default','isodir'))
|
||||
|
||||
pypungi._ensuredir(workdir, force=self.config.getbool('default', 'force'))
|
||||
pypungi._ensuredir(self.workdir, self.logger, force=True)
|
||||
|
||||
self.common_files = []
|
||||
self.infofile = os.path.join(self.config.get('default', 'destdir'),
|
||||
@ -173,7 +173,7 @@ class Pungi(pypungi.PungiBase):
|
||||
for pattern in self.config.get('default', 'relnotedirre').split():
|
||||
dirres.append(re.compile(pattern))
|
||||
|
||||
pypungi._ensuredir(docsdir, force=self.config.getbool('default', 'force'), clean=True)
|
||||
pypungi._ensuredir(docsdir, self.logger, force=self.config.getboolean('default', 'force'), clean=True)
|
||||
|
||||
# Expload the packages we list as relnote packages
|
||||
pkgs = os.listdir(os.path.join(self.topdir, self.config.get('default', 'product_path')))
|
||||
@ -204,7 +204,7 @@ class Pungi(pypungi.PungiBase):
|
||||
for regex in fileres:
|
||||
if regex.match(filename) and not os.path.exists(os.path.join(self.topdir, filename)):
|
||||
self.logger.info("Linking release note file %s" % filename)
|
||||
pypungi._link(os.path.join(dirpath, filename), os.path.join(self.topdir, filename))
|
||||
pypungi._link(os.path.join(dirpath, filename), os.path.join(self.topdir, filename), self.logger)
|
||||
self.common_files.append(filename)
|
||||
|
||||
# Walk the tree for our dirs
|
||||
@ -269,7 +269,8 @@ class Pungi(pypungi.PungiBase):
|
||||
# this is stolen from splittree.py in anaconda-runtime. Blame them if its ugly (:
|
||||
for i in range(timber.src_list[0], timber.src_list[-1] + 1):
|
||||
pypungi._ensuredir('%s-disc%d/SRPMS' % (timper.dist_dir, i),
|
||||
force=self.config.getbool('default', 'force'),
|
||||
self.logger,
|
||||
force=self.config.getboolean('default', 'force'),
|
||||
clean=True)
|
||||
timber.linkFiles(timber.dist_dir,
|
||||
"%s-disc%d" %(timber.dist_dir, i),
|
||||
@ -304,7 +305,8 @@ class Pungi(pypungi.PungiBase):
|
||||
|
||||
createrepo.append('--outputdir')
|
||||
if self.config.getint('default', 'discs') == 1:
|
||||
pypungi._ensuredir('%s-disc1', force=self.config.getbool('default', 'force'),
|
||||
pypungi._ensuredir('%s-disc1' % self.topdir, self.logger,
|
||||
force=self.config.getboolean('default', 'force'),
|
||||
clean=True) # rename this for single disc
|
||||
createrepo.append('%s-disc1' % self.topdir)
|
||||
|
||||
@ -346,7 +348,8 @@ cost=500
|
||||
anaruntime = '/usr/lib/anaconda-runtime/boot'
|
||||
discinfofile = os.path.join(self.topdir, '.discinfo') # we use this a fair amount
|
||||
|
||||
pypungi._ensuredir(self.isodir, force=self.config.getbool('default', 'force'),
|
||||
pypungi._ensuredir(self.isodir, self.logger,
|
||||
force=self.config.getboolean('default', 'force'),
|
||||
clean=True) # This is risky...
|
||||
|
||||
# setup the base command
|
||||
|
Loading…
Reference in New Issue
Block a user