- Raise a sane exception if a specified package or group can't
be found
- Ditto if we fail to build the transaction
- Better handle failure in selectPackage() etc. by closing the
rpmdb so the unmount succeeds
Signed-off-by: Mark McLoughlin <markmc(a)redhat.com>
Index: livecd/creator/livecd-creator
===================================================================
--- livecd.orig/creator/livecd-creator
+++ livecd/creator/livecd-creator
@@ -193,11 +193,9 @@ class LiveCDYum(yum.YumBase):
def selectPackage(self, pkg):
"""Select a given package. Can be specified with name.arch or
name*"""
try:
- mbrs = self.install(pattern = pkg)
- return len(mbrs)
- except yum.Errors.InstallError:
- print >> sys.stderr, "No package matching %s" %(pkg,)
- return 0
+ self.install(pattern = pkg)
+ except yum.Errors.InstallError, e:
+ raise InstallationError("Failed to find package '%s' : %s"
% (pkg, e))
def deselectPackage(self, pkg):
"""Deselect package. Can be specified as name.arch or
name*"""
@@ -217,7 +215,10 @@ class LiveCDYum(yum.YumBase):
print >> sys.stderr, "No such package %s to remove" %(pkg,)
def selectGroup(self, grp, include = pykickstart.parser.GROUP_DEFAULT):
- yum.YumBase.selectGroup(self, grp)
+ try:
+ yum.YumBase.selectGroup(self, grp)
+ except (yum.Errors.InstallError, yum.Errors.GroupsError), e:
+ raise InstallationError("Failed to find group '%s' : %s" %
(grp, e))
if include == pykickstart.parser.GROUP_REQUIRED:
map(lambda p: self.deselectPackage(p), grp.default_packages.keys())
elif include == pykickstart.parser.GROUP_ALL:
@@ -244,10 +245,7 @@ class LiveCDYum(yum.YumBase):
def runInstall(self):
(res, resmsg) = self.buildTransaction()
if res != 2:
- print "Unable to build transaction"
- for m in resmsg:
- print m
- sys.exit(1)
+ raise InstallationError("Failed to build transaction : %s" %
str.join("\n", resmsg))
dlpkgs = map(lambda x: x.po, filter(lambda txmbr: txmbr.ts_state in
("i", "u"), self.tsInfo.getMembers()))
self.downloadPkgs(dlpkgs)
@@ -439,11 +437,11 @@ class InstallationTarget:
def installPackages(self, packageList, excludePackageList, groupList = []):
"""install packages into target file system"""
- map(lambda pkg: self.ayum.selectPackage(pkg), packageList)
- map(lambda grp: self.ayum.selectGroup(grp[0], grp[1]), groupList)
- map(lambda pkg: self.ayum.deselectPackage(pkg), excludePackageList)
-
try:
+ map(lambda pkg: self.ayum.selectPackage(pkg), packageList)
+ map(lambda grp: self.ayum.selectGroup(grp[0], grp[1]), groupList)
+ map(lambda pkg: self.ayum.deselectPackage(pkg), excludePackageList)
+
self.ayum.runInstall()
finally:
self.ayum.closeRpmDB()
--
Show replies by date