[yum-cvs] yum/yum Errors.py,1.4,1.5 __init__.py,1.145,1.146
Seth Vidal
skvidal at login.linux.duke.edu
Mon Nov 7 08:24:00 UTC 2005
Update of /home/groups/yum/cvs/yum/yum
In directory login:/tmp/cvs-serv20366/yum
Modified Files:
Errors.py __init__.py
Log Message:
- fix YumBase.install() method - still room for more work, though
- make YumBase.selectGroup() and deselectGroup() work more correctly
- implement a YumBase.doGenericSetup() method to simplify testing/setup
Index: Errors.py
===================================================================
RCS file: /home/groups/yum/cvs/yum/yum/Errors.py,v
retrieving revision 1.4
retrieving revision 1.5
diff -u -r1.4 -r1.5
--- Errors.py 1 Sep 2004 05:11:11 -0000 1.4
+++ Errors.py 7 Nov 2005 08:23:57 -0000 1.5
@@ -55,3 +55,8 @@
YumBaseError.__init__(self)
self.args = args
+class InstallError(YumBaseError):
+ def __init__(self, args=None):
+ YumBaseError.__init__(self)
+ self.args = args
+
Index: __init__.py
===================================================================
RCS file: /home/groups/yum/cvs/yum/yum/__init__.py,v
retrieving revision 1.145
retrieving revision 1.146
diff -u -r1.145 -r1.146
--- __init__.py 7 Nov 2005 06:55:19 -0000 1.145
+++ __init__.py 7 Nov 2005 08:23:57 -0000 1.146
@@ -77,6 +77,16 @@
def filelog(self, value, msg):
print msg
+ def doGenericSetup(self):
+ """do a default setup for all the normal/necessary yum components,
+ really just a shorthand for testing"""
+
+ self.doConfigSetup()
+ self.doTsSetup()
+ self.doRpmDBSetup()
+ self.doRepoSetup()
+ self.doSackSetup()
+
def doConfigSetup(self, fn='/etc/yum.conf', root='/'):
"""basic stub function for doing configuration setup"""
@@ -1264,14 +1274,13 @@
pkgs = thisgroup.mandatory_packages.keys() + thisgroup.default_packages.keys()
for pkg in pkgs:
+ self.log(5, 'Adding package %s from group %s' % (pkg, thisgroup.groupid))
try:
- p = self.pkgSack.returnNewestByName(pkg)
- except repomd.mdErrors.PackageSackError:
- self.log(4, "no such package %s from group %s" %(pkg, thisgroup))
- continue
- thispkg = p[0]
- txmbr = self.tsInfo.addInstall(thispkg)
- txmbr.group.append(thisgroup.grpid)
+ txmbr = self.install(name = pkg)
+ except Errors.InstallError, e:
+ self.log(3, 'No package named %s available to be installed' % pkg)
+ else:
+ txmbr.groups.append(thisgroup.groupid)
def deselectGroup(self, grpid):
"""de-mark all the packages in the group for install"""
@@ -1287,21 +1296,21 @@
for pkg in thisgroup.packages:
try:
p = self.pkgSack.returnNewestByName(pkg)
- except repomd.mdErrors.PackageSackError:
+ except mdErrors.PackageSackError:
self.log(4, "no such package %s from group %s" %(pkg, thisgroup))
continue
thispkg = p[0]
- txmbrs = self.tsInfo.getMembers(pkgtuple = thispkg.pkgtup)
+ txmbrs = self.tsInfo.getMembers(pkgtup = thispkg.pkgtup)
for txmbr in txmbrs:
try:
- txmbr.group.remove(grpid)
+ txmbr.groups.remove(grpid)
except ValueError:
self.log(4, "package %s was not marked in group %s" % (thispkg, grpid))
continue
# if there aren't any other groups mentioned then remove the pkg
- if len(txmbr.group) == 0:
+ if len(txmbr.groups) == 0:
self.tsInfo.remove(thispkg.pkgtup)
@@ -1482,14 +1491,12 @@
def install(self, po=None, **kwargs):
"""try to mark for install the item specified. Uses provided package
object, if available. If not it uses the kwargs and gets the best
- package from the keyword options provided"""
+ package from the keyword options provided
+ returns the txmbr of the item it installed.
+
+ Note: This function will only ever install a single item at a time"""
- results = []
- if po:
- txmbr = self.tsInfo.addInstall(po)
- results.append(txmbr)
-
- else:
+ if po is None:
if not hasattr(self, 'pkgSack'):
self.doRepoSetup()
self.doSackSetup()
@@ -1501,19 +1508,35 @@
except KeyError: pass
try: arch = kwargs['arch']
except KeyError: pass
+
+ # get them as ver, version and rel, release - if someone
+ # specifies one of each then that's kinda silly.
try: version = kwargs['version']
except KeyError: pass
+ try: version = kwargs['ver']
+ except KeyError: pass
try: release = kwargs['release']
except KeyError: pass
+ try: release = kwargs['rel']
+ except KeyError: pass
pkgs = self.pkgSack.searchNevra(name=name, epoch=epoch, arch=arch,
ver=version, rel=release)
if pkgs:
po = self.bestPackageFromList(pkgs)
- txmbr = self.tsInfo.addInstall(po)
- results.append(txmbr)
+
+ if po is None:
+ raise Errors.InstallError, 'No package available to install'
- return results
+
+ txmbrs = self.tsInfo.getMembers(pkgtup=po.pkgtup)
+ if txmbrs:
+ self.log(4, 'Package: %s - already in transaction set' % po)
+ return txmbrs[0]
+ else:
+ txmbr = self.tsInfo.addInstall(po)
+ return txmbr
+
def update(self, input):
"""try to find and mark for update the input
More information about the Yum-cvs-commits
mailing list