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():
|
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
|
# 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):
|
if os.geteuid () != 0 and (opts.do_all or opts.do_buildinstall):
|
||||||
print >> sys.stderr, "You must run pungi as root"
|
print >> sys.stderr, "You must run pungi as root"
|
||||||
return 1
|
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
|
# Set up the kickstart parser and pass in the kickstart file we were handed
|
||||||
ksparser = pykickstart.parser.KickstartParser(pykickstart.version.makeVersion())
|
ksparser = pykickstart.parser.KickstartParser(pykickstart.version.makeVersion())
|
||||||
ksparser.readKickstart(opts.config)
|
ksparser.readKickstart(opts.config)
|
||||||
@ -42,7 +42,7 @@ def main():
|
|||||||
if part.mountpoint == 'iso':
|
if part.mountpoint == 'iso':
|
||||||
config.set('default', 'cdsize', str(part.size))
|
config.set('default', 'cdsize', str(part.size))
|
||||||
|
|
||||||
config.set('default', 'force', opts.force)
|
config.set('default', 'force', str(opts.force))
|
||||||
|
|
||||||
# Set up our directories
|
# Set up our directories
|
||||||
if not os.path.exists(config.get('default', 'destdir')):
|
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')
|
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'):
|
if self.config.get('default', 'flavor'):
|
||||||
logfile = os.path.join(logdir, '%s.%s.log' % (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)
|
logger.error(err)
|
||||||
raise OSError, "Got an error from %s: %s" % (command[0], 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."""
|
"""Simple function to link or copy a package, removing target optionally."""
|
||||||
|
|
||||||
if os.path.exists(target) and force:
|
if os.path.exists(target) and force:
|
||||||
@ -79,22 +79,32 @@ def _link(local, target, force=False):
|
|||||||
os.link(local, target)
|
os.link(local, target)
|
||||||
except OSError, e:
|
except OSError, e:
|
||||||
if e.errno != 18: # EXDEV
|
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
|
raise OSError, e
|
||||||
|
|
||||||
# Can't hardlink cross file systems
|
# Can't hardlink cross file systems
|
||||||
shutil.copy2(local, target)
|
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
|
"""Ensure that a directory exists, if it already exists, only continue
|
||||||
if force is set."""
|
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):
|
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)
|
sys.exit(1)
|
||||||
|
|
||||||
if os.path.exists(target) and not os.path.isdir(target):
|
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)
|
sys.exit(1)
|
||||||
|
|
||||||
if not os.path.isdir(target):
|
if not os.path.isdir(target):
|
||||||
@ -105,5 +115,9 @@ def _ensuredir(target, force=False, clean=False):
|
|||||||
elif force:
|
elif force:
|
||||||
return
|
return
|
||||||
else:
|
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)
|
sys.exit(1)
|
@ -322,7 +322,7 @@ class Gather(pypungi.PungiBase):
|
|||||||
relpkgdir)
|
relpkgdir)
|
||||||
|
|
||||||
# Ensure the pkgdir exists, force if requested, and make sure we clean it out
|
# 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)
|
probs = self.ayum.downloadPkgs(polist)
|
||||||
|
|
||||||
@ -342,7 +342,7 @@ class Gather(pypungi.PungiBase):
|
|||||||
|
|
||||||
# Link downloaded package in (or link package from file repo)
|
# Link downloaded package in (or link package from file repo)
|
||||||
try:
|
try:
|
||||||
pypungi._link(local, target, force=True)
|
pypungi._link(local, target, self.logger, force=True)
|
||||||
continue
|
continue
|
||||||
except:
|
except:
|
||||||
self.logger.error("Unable to link %s from the yum cache." % po.name)
|
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.topdir = os.path.join(self.archdir, 'os')
|
||||||
self.isodir = os.path.join(self.archdir, self.config.get('default','isodir'))
|
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.common_files = []
|
||||||
self.infofile = os.path.join(self.config.get('default', 'destdir'),
|
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():
|
for pattern in self.config.get('default', 'relnotedirre').split():
|
||||||
dirres.append(re.compile(pattern))
|
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
|
# Expload the packages we list as relnote packages
|
||||||
pkgs = os.listdir(os.path.join(self.topdir, self.config.get('default', 'product_path')))
|
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:
|
for regex in fileres:
|
||||||
if regex.match(filename) and not os.path.exists(os.path.join(self.topdir, filename)):
|
if regex.match(filename) and not os.path.exists(os.path.join(self.topdir, filename)):
|
||||||
self.logger.info("Linking release note file %s" % 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)
|
self.common_files.append(filename)
|
||||||
|
|
||||||
# Walk the tree for our dirs
|
# 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 (:
|
# 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):
|
for i in range(timber.src_list[0], timber.src_list[-1] + 1):
|
||||||
pypungi._ensuredir('%s-disc%d/SRPMS' % (timper.dist_dir, i),
|
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)
|
clean=True)
|
||||||
timber.linkFiles(timber.dist_dir,
|
timber.linkFiles(timber.dist_dir,
|
||||||
"%s-disc%d" %(timber.dist_dir, i),
|
"%s-disc%d" %(timber.dist_dir, i),
|
||||||
@ -304,7 +305,8 @@ class Pungi(pypungi.PungiBase):
|
|||||||
|
|
||||||
createrepo.append('--outputdir')
|
createrepo.append('--outputdir')
|
||||||
if self.config.getint('default', 'discs') == 1:
|
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
|
clean=True) # rename this for single disc
|
||||||
createrepo.append('%s-disc1' % self.topdir)
|
createrepo.append('%s-disc1' % self.topdir)
|
||||||
|
|
||||||
@ -346,7 +348,8 @@ cost=500
|
|||||||
anaruntime = '/usr/lib/anaconda-runtime/boot'
|
anaruntime = '/usr/lib/anaconda-runtime/boot'
|
||||||
discinfofile = os.path.join(self.topdir, '.discinfo') # we use this a fair amount
|
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...
|
clean=True) # This is risky...
|
||||||
|
|
||||||
# setup the base command
|
# setup the base command
|
||||||
|
Loading…
Reference in New Issue
Block a user