summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorRichard Hughes <richard@hughsie.com>2008-04-30 11:58:00 +0100
committerRichard Hughes <richard@hughsie.com>2008-04-30 11:58:00 +0100
commit657b9e30e64a1678410e1e219df3f0fc7a6fac9f (patch)
tree8216974151751ca7452646fabc1cc83e341e7caf
parent45cf0f898e7bdce6dd55ceda3eec452e4756e81a (diff)
when we find a package by it's repo id, make sure we take into account the NEVRA _and_ the repo_id. Fixes rh#443976
-rw-r--r--backends/yum/helpers/yumBackend.py273
1 files changed, 141 insertions, 132 deletions
diff --git a/backends/yum/helpers/yumBackend.py b/backends/yum/helpers/yumBackend.py
index ea5ad7491..af2324fcd 100644
--- a/backends/yum/helpers/yumBackend.py
+++ b/backends/yum/helpers/yumBackend.py
@@ -32,8 +32,8 @@ from yum.rpmtrans import RPMBaseCallback
from yum.constants import *
from yum.update_md import UpdateMetadata
from yum.callbacks import *
-from yum.misc import prco_tuple_to_string, unique
-from yum.packages import YumLocalPackage
+from yum.misc import prco_tuple_to_string,unique
+from yum.packages import YumLocalPackage, parsePackages
from yum.packageSack import MetaSack
import rpmUtils
import exceptions
@@ -203,10 +203,10 @@ GUI_KEYS = re.compile(r'(qt)|(gtk)')
class GPGKeyNotImported(exceptions.Exception):
pass
-def sigquit(signum, frame):
- print >> sys.stderr, "Quit signal sent - exiting immediately"
+def sigquit(signum,frame):
+ print >> sys.stderr,"Quit signal sent - exiting immediately"
if yumbase:
- print >> sys.stderr, "unlocking backend"
+ print >> sys.stderr,"unlocking backend"
yumbase.closeRpmDB()
yumbase.doUnlock(YUM_PID_FILE)
sys.exit(1)
@@ -214,28 +214,28 @@ def sigquit(signum, frame):
class PackageKitYumBackend(PackageKitBaseBackend):
# Packages there require a reboot
- rebootpkgs = ("kernel", "kernel-smp", "kernel-xen-hypervisor", "kernel-PAE",
- "kernel-xen0", "kernel-xenU", "kernel-xen", "kernel-xen-guest",
- "glibc", "hal", "dbus", "xen")
+ rebootpkgs = ("kernel","kernel-smp","kernel-xen-hypervisor","kernel-PAE",
+ "kernel-xen0","kernel-xenU","kernel-xen","kernel-xen-guest",
+ "glibc","hal","dbus","xen")
def handle_repo_error(func):
- def wrapper(*args, **kwargs):
+ def wrapper(*args,**kwargs):
self = args[0]
try:
- func(*args, **kwargs)
+ func(*args,**kwargs)
except yum.Errors.RepoError,e:
self._refresh_yum_cache()
try:
- func(*args, **kwargs)
- except yum.Errors.RepoError, e:
+ func(*args,**kwargs)
+ except yum.Errors.RepoError,e:
self.error(ERROR_NO_CACHE,str(e))
return wrapper
def __init__(self,args,lock=True):
- signal.signal(signal.SIGQUIT, sigquit)
+ signal.signal(signal.SIGQUIT,sigquit)
PackageKitBaseBackend.__init__(self,args)
self.yumbase = PackageKitYumBase(self)
yumbase = self.yumbase
@@ -268,10 +268,10 @@ class PackageKitYumBackend(PackageKitBaseBackend):
summary = self._to_unicode(summary)
PackageKitBaseBackend.package(self,id,status,summary)
- def _to_unicode(self, txt, encoding='utf-8'):
- if isinstance(txt, basestring):
- if not isinstance(txt, unicode):
- txt = unicode(txt, encoding, errors='replace')
+ def _to_unicode(self,txt,encoding='utf-8'):
+ if isinstance(txt,basestring):
+ if not isinstance(txt,unicode):
+ txt = unicode(txt,encoding,errors='replace')
return txt
def doLock(self):
@@ -279,7 +279,7 @@ class PackageKitYumBackend(PackageKitBaseBackend):
retries = 0
while not self.isLocked():
try: # Try to lock yum
- self.yumbase.doLock( YUM_PID_FILE )
+ self.yumbase.doLock(YUM_PID_FILE)
PackageKitBaseBackend.doLock(self)
except:
time.sleep(2)
@@ -314,7 +314,7 @@ class PackageKitYumBackend(PackageKitBaseBackend):
@param filters: package types to search (all,installed,available)
@param key: key to seach for
'''
- res = self.yumbase.searchGenerator(searchlist, [key])
+ res = self.yumbase.searchGenerator(searchlist,[key])
fltlist = filters.split(';')
installed_nevra = [] # yum returns packages as available even when installed
pkg_list = [] # only do the second iteration on not installed pkgs
@@ -344,17 +344,17 @@ class PackageKitYumBackend(PackageKitBaseBackend):
def _do_extra_filtering(self,pkg,filterList):
''' do extra filtering (gui,devel etc) '''
for filter in filterList:
- if filter in (FILTER_INSTALLED, FILTER_NOT_INSTALLED):
- if not self._do_installed_filtering(filter, pkg):
+ if filter in (FILTER_INSTALLED,FILTER_NOT_INSTALLED):
+ if not self._do_installed_filtering(filter,pkg):
return False
- elif filter in (FILTER_GUI, FILTER_NOT_GUI):
- if not self._do_gui_filtering(filter, pkg):
+ elif filter in (FILTER_GUI,FILTER_NOT_GUI):
+ if not self._do_gui_filtering(filter,pkg):
return False
- elif filter in (FILTER_DEVELOPMENT, FILTER_NOT_DEVELOPMENT):
- if not self._do_devel_filtering(filter, pkg):
+ elif filter in (FILTER_DEVELOPMENT,FILTER_NOT_DEVELOPMENT):
+ if not self._do_devel_filtering(filter,pkg):
return False
- elif filter in (FILTER_FREE, FILTER_NOT_FREE):
- if not self._do_free_filtering(filter, pkg):
+ elif filter in (FILTER_FREE,FILTER_NOT_FREE):
+ if not self._do_free_filtering(filter,pkg):
return False
return True
@@ -417,7 +417,7 @@ class PackageKitYumBackend(PackageKitBaseBackend):
searchlist = ['name']
self.status(STATUS_QUERY)
self.yumbase.doConfigSetup(errorlevel=0,debuglevel=0)# Setup Yum Config
- self._do_search(searchlist, filters, key)
+ self._do_search(searchlist,filters,key)
def search_details(self,filters,key):
'''
@@ -427,16 +427,16 @@ class PackageKitYumBackend(PackageKitBaseBackend):
self.allow_cancel(True)
self.percentage(None)
- searchlist = ['name', 'summary', 'description', 'group']
+ searchlist = ['name','summary','description','group']
self.status(STATUS_QUERY)
- self._do_search(searchlist, filters, key)
+ self._do_search(searchlist,filters,key)
def _buildGroupDict(self):
pkgGroups= {}
cats = self.yumbase.comps.categories
for cat in cats:
- grps = map( lambda x: self.yumbase.comps.return_group( x ),
- filter( lambda x: self.yumbase.comps.has_group( x ), cat.groups ) )
+ grps = map(lambda x: self.yumbase.comps.return_group(x),
+ filter(lambda x: self.yumbase.comps.has_group(x),cat.groups))
grplist = []
for group in grps:
for pkg in group.mandatory_packages.keys():
@@ -477,7 +477,7 @@ class PackageKitYumBackend(PackageKitBaseBackend):
if groupMap.has_key(cg):
group = groupMap[cg] # use the pk group name, instead of yum 'category/group'
if group == key:
- if self._do_extra_filtering(pkg, fltlist):
+ if self._do_extra_filtering(pkg,fltlist):
package_list.append((pkg,INFO_INSTALLED))
installed_nevra.append(self._get_nevra(pkg))
@@ -492,7 +492,7 @@ class PackageKitYumBackend(PackageKitBaseBackend):
if groupMap.has_key(cg):
group = groupMap[cg]
if group == key:
- if self._do_extra_filtering(pkg, fltlist):
+ if self._do_extra_filtering(pkg,fltlist):
package_list.append((pkg,INFO_AVAILABLE))
except yum.Errors.GroupsError,e:
@@ -560,8 +560,8 @@ class PackageKitYumBackend(PackageKitBaseBackend):
matches = self.yumbase.rpmdb.searchFiles(key)
for pkg in matches:
if not found.has_key(str(pkg)):
- if self._do_extra_filtering(pkg, fltlist):
- self._show_package(pkg, INFO_INSTALLED)
+ if self._do_extra_filtering(pkg,fltlist):
+ self._show_package(pkg,INFO_INSTALLED)
found[str(pkg)] = 1
if not FILTER_INSTALLED in fltlist:
# Check available for file
@@ -569,12 +569,12 @@ class PackageKitYumBackend(PackageKitBaseBackend):
matches = self.yumbase.pkgSack.searchFiles(key)
for pkg in matches:
if not found.has_key(str(pkg)):
- if self._do_extra_filtering(pkg, fltlist):
- self._show_package(pkg, INFO_AVAILABLE)
+ if self._do_extra_filtering(pkg,fltlist):
+ self._show_package(pkg,INFO_AVAILABLE)
found[str(pkg)] = 1
@handle_repo_error
- def what_provides(self, filters, provides_type, search):
+ def what_provides(self,filters,provides_type,search):
'''
Implement the {backend}-what-provides functionality
'''
@@ -590,16 +590,16 @@ class PackageKitYumBackend(PackageKitBaseBackend):
matches = self.yumbase.rpmdb.searchProvides(search)
for pkg in matches:
if not found.has_key(str(pkg)):
- if self._do_extra_filtering(pkg, fltlist):
- self._show_package(pkg, INFO_INSTALLED)
+ if self._do_extra_filtering(pkg,fltlist):
+ self._show_package(pkg,INFO_INSTALLED)
found[str(pkg)] = 1
if not FILTER_INSTALLED in fltlist:
# Check available for file
matches = self.yumbase.pkgSack.searchProvides(search)
for pkg in matches:
if found.has_key(str(pkg)):
- if self._do_extra_filtering(pkg, fltlist):
- self._show_package(pkg, INFO_AVAILABLE)
+ if self._do_extra_filtering(pkg,fltlist):
+ self._show_package(pkg,INFO_AVAILABLE)
found[str(pkg)] = 1
def _getEVR(self,idver):
@@ -630,7 +630,7 @@ class PackageKitYumBackend(PackageKitBaseBackend):
e = v = r = a = None
# search the rpmdb for the nevra
pkgs = self.yumbase.rpmdb.searchNevra(name=n,epoch=e,ver=v,rel=r,arch=a)
- # if the package is found, then return it
+ # if the package is found, then return it (do not have to match the repo_id)
if len(pkgs) != 0:
return pkgs[0],True
# search the pkgSack for the nevra
@@ -638,13 +638,20 @@ class PackageKitYumBackend(PackageKitBaseBackend):
pkgs = self.yumbase.pkgSack.searchNevra(name=n,epoch=e,ver=v,rel=r,arch=a)
except yum.Errors.RepoError,e:
self.error(ERROR_REPO_NOT_AVAILABLE,str(e))
- # if the package is found, then return it
- if len(pkgs) != 0:
- return pkgs[0],False
- else:
+ # nothing found
+ if len(pkgs) == 0:
return None,False
-
- def _get_pkg_requirements(self,pkg,reqlist=[] ):
+ # one NEVRA in a single repo
+ if len(pkgs) == 1:
+ return pkgs[0],False
+ # we might have the same NEVRA in multiple repos, match by repo name
+ for pkg in pkgs:
+ if d == pkg.repoid:
+ return pkg,False
+ # repo id did not match
+ return None,False
+
+ def _get_pkg_requirements(self,pkg,reqlist=[]):
pkgs = self.yumbase.rpmdb.searchRequires(pkg.name)
reqlist.extend(pkgs)
if pkgs:
@@ -678,7 +685,7 @@ class PackageKitYumBackend(PackageKitBaseBackend):
def _is_inst(self,pkg):
return self.yumbase.rpmdb.installed(po=pkg)
- def _installable(self, pkg, ematch=False):
+ def _installable(self,pkg,ematch=False):
"""check if the package is reasonably installable, true/false"""
@@ -771,13 +778,13 @@ class PackageKitYumBackend(PackageKitBaseBackend):
for pkg in deps:
if pkg.name != name:
pkgver = self._get_package_ver(pkg)
- id = self.get_package_id(pkg.name, pkgver, pkg.arch, pkg.repoid)
+ id = self.get_package_id(pkg.name,pkgver,pkg.arch,pkg.repoid)
if self._is_inst(pkg) and FILTER_NOT_INSTALLED not in fltlist:
- self.package(id, INFO_INSTALLED, pkg.summary)
+ self.package(id,INFO_INSTALLED,pkg.summary)
else:
if self._installable(pkg) and FILTER_INSTALLED not in fltlist:
- self.package(id, INFO_AVAILABLE, pkg.summary)
+ self.package(id,INFO_AVAILABLE,pkg.summary)
def update_system(self):
'''
@@ -822,10 +829,10 @@ class PackageKitYumBackend(PackageKitBaseBackend):
for repo in self.yumbase.repos.listEnabled():
repo.metadata_expire = 0
- self.yumbase.repos.populateSack(which=[repo.id], mdtype='metadata', cacheonly=1)
+ self.yumbase.repos.populateSack(which=[repo.id],mdtype='metadata',cacheonly=1)
pct+=bump
self.percentage(pct)
- self.yumbase.repos.populateSack(which=[repo.id], mdtype='filelists', cacheonly=1)
+ self.yumbase.repos.populateSack(which=[repo.id],mdtype='filelists',cacheonly=1)
pct+=bump
self.percentage(pct)
@@ -835,13 +842,13 @@ class PackageKitYumBackend(PackageKitBaseBackend):
#we might have a rounding error
self.percentage(100)
- except yum.Errors.RepoError, e:
+ except yum.Errors.RepoError,e:
self.error(ERROR_REPO_CONFIGURATION_ERROR,str(e))
- except yum.Errors.YumBaseError, e:
+ except yum.Errors.YumBaseError,e:
self.error(ERROR_UNKNOWN,str(e))
@handle_repo_error
- def resolve(self, filters, name):
+ def resolve(self,filters,name):
'''
Implement the {backend}-resolve functionality
'''
@@ -872,7 +879,7 @@ class PackageKitYumBackend(PackageKitBaseBackend):
break
@handle_repo_error
- def install(self, packages):
+ def install(self,packages):
'''
Implement the {backend}-install functionality
This will only work with yum 3.2.4 or higher
@@ -899,7 +906,7 @@ class PackageKitYumBackend(PackageKitBaseBackend):
if newest.EVR > po.EVR:
self.message(MESSAGE_WARNING,"A newer version of %s is available online." % po.name)
- def install_file (self, inst_file):
+ def install_file (self,inst_file):
'''
Implement the {backend}-install_file functionality
Install the package containing the inst_file file
@@ -928,7 +935,7 @@ class PackageKitYumBackend(PackageKitBaseBackend):
except yum.Errors.InstallError,e:
self.error(ERROR_LOCAL_INSTALL_FAILED,str(e))
- except (yum.Errors.RepoError, yum.Errors.PackageSackError, IOError):
+ except (yum.Errors.RepoError,yum.Errors.PackageSackError,IOError):
# We might not be able to connect to the internet to get
# repository metadata, or the package might not exist.
# Try again, (temporarily) disabling repos first.
@@ -948,7 +955,7 @@ class PackageKitYumBackend(PackageKitBaseBackend):
self.error(ERROR_LOCAL_INSTALL_FAILED,str(e))
- def update(self, packages):
+ def update(self,packages):
'''
Implement the {backend}-install functionality
This will only work with yum 3.2.4 or higher
@@ -977,7 +984,7 @@ class PackageKitYumBackend(PackageKitBaseBackend):
pkg = txmbr.po
# check if package is in reboot list or flagged with reboot_suggested
# in the update metadata and is installed/updated etc
- notice = md.get_notice((pkg.name, pkg.version, pkg.release))
+ notice = md.get_notice((pkg.name,pkg.version,pkg.release))
if (pkg.name in self.rebootpkgs \
or (notice and notice.get_metadata().has_key('reboot_suggested') and notice['reboot_suggested']))\
and txmbr.ts_state in TS_INSTALL_STATES:
@@ -985,7 +992,7 @@ class PackageKitYumBackend(PackageKitBaseBackend):
break
def _format_msgs(self,msgs):
- if isinstance(msgs, basestring):
+ if isinstance(msgs,basestring):
msgs = msgs.split('\n')
return ";".join(msgs)
@@ -1013,11 +1020,11 @@ class PackageKitYumBackend(PackageKitBaseBackend):
callback = ProcessTransPackageKitCallback(self)
self.yumbase.processTransaction(callback=callback,
rpmDisplay=rpmDisplay)
- except yum.Errors.YumDownloadError, ye:
+ except yum.Errors.YumDownloadError,ye:
self.error(ERROR_PACKAGE_DOWNLOAD_FAILED,self._format_msgs(ye.value))
- except yum.Errors.YumGPGCheckError, ye:
+ except yum.Errors.YumGPGCheckError,ye:
self.error(ERROR_BAD_GPG_SIGNATURE,self._format_msgs(ye.value))
- except GPGKeyNotImported, e:
+ except GPGKeyNotImported,e:
keyData = self.yumbase.missingGPGKey
if not keyData:
self.error(ERROR_BAD_GPG_SIGNATURE,
@@ -1033,14 +1040,14 @@ class PackageKitYumBackend(PackageKitBaseBackend):
keyData['timestamp'],
'GPG')
self.error(ERROR_GPG_FAILURE,"GPG key %s required" % keyData['hexkeyid'])
- except yum.Errors.YumBaseError, ye:
+ except yum.Errors.YumBaseError,ye:
message = self._format_msgs(ye.value)
if message.find ("conflicts with file") != -1:
self.error(ERROR_FILE_CONFLICTS,message)
else:
self.error(ERROR_TRANSACTION_ERROR,message)
- def remove(self, allowdep, package):
+ def remove(self,allowdep,package):
'''
Implement the {backend}-remove functionality
Needed to be implemented in a sub class
@@ -1050,7 +1057,7 @@ class PackageKitYumBackend(PackageKitBaseBackend):
self.percentage(0)
self.status(STATUS_RUNNING)
- pkg,inst = self._findPackage( package)
+ pkg,inst = self._findPackage(package)
if pkg and inst:
try:
txmbr = self.yumbase.remove(name=pkg.name)
@@ -1066,7 +1073,7 @@ class PackageKitYumBackend(PackageKitBaseBackend):
else:
self.error(ERROR_PACKAGE_NOT_INSTALLED,"Package %s is not installed" % package)
- def get_description(self, package):
+ def get_description(self,package):
'''
Print a detailed description for a given package
'''
@@ -1083,15 +1090,15 @@ class PackageKitYumBackend(PackageKitBaseBackend):
def _show_description(self,pkg):
pkgver = self._get_package_ver(pkg)
- id = self.get_package_id(pkg.name, pkgver, pkg.arch, pkg.repo)
+ id = self.get_package_id(pkg.name,pkgver,pkg.arch,pkg.repo)
desc = pkg.description
desc = desc.replace('\n\n',';')
desc = desc.replace('\n',' ')
- self.description(id, pkg.license, "unknown", desc, pkg.url,
+ self.description(id,pkg.license,"unknown",desc,pkg.url,
pkg.size)
- def get_files(self, package):
+ def get_files(self,package):
self._check_init()
self.allow_cancel(True)
self.percentage(None)
@@ -1104,19 +1111,19 @@ class PackageKitYumBackend(PackageKitBaseBackend):
file_list = ";".join(files)
- self.files(package, file_list)
+ self.files(package,file_list)
else:
self.error(ERROR_PACKAGE_NOT_FOUND,'Package %s was not found' % package)
def _pkg_to_id(self,pkg):
pkgver = self._get_package_ver(pkg)
- id = self.get_package_id(pkg.name, pkgver, pkg.arch, pkg.repo)
+ id = self.get_package_id(pkg.name,pkgver,pkg.arch,pkg.repo)
return id
def _show_package(self,pkg,status):
''' Show info about package'''
id = self._pkg_to_id(pkg)
- self.package(id,status, pkg.summary)
+ self.package(id,status,pkg.summary)
def _get_status(self,notice):
ut = notice['type']
@@ -1129,7 +1136,7 @@ class PackageKitYumBackend(PackageKitBaseBackend):
else:
return INFO_UNKNOWN
- def _is_main_package(self, repo):
+ def _is_main_package(self,repo):
if repo.endswith('-debuginfo'):
return False
if repo.endswith('-devel'):
@@ -1138,7 +1145,7 @@ class PackageKitYumBackend(PackageKitBaseBackend):
return False
return True
- def _basename_filter(self, package_list):
+ def _basename_filter(self,package_list):
'''
Filter the list so that the number of packages are reduced.
This is done by only displaying gtk2 rather than gtk2-devel, gtk2-debuginfo, etc.
@@ -1181,7 +1188,7 @@ class PackageKitYumBackend(PackageKitBaseBackend):
base_list_already_got.append ((base,version))
return output_list
- def get_updates(self, filters):
+ def get_updates(self,filters):
'''
Implement the {backend}-get-updates functionality
@param filters: package types to show
@@ -1200,9 +1207,9 @@ class PackageKitYumBackend(PackageKitBaseBackend):
self.error(ERROR_REPO_NOT_AVAILABLE,str(e))
md = self.updateMetadata
for pkg in ygl.updates:
- if self._do_extra_filtering(pkg, fltlist):
+ if self._do_extra_filtering(pkg,fltlist):
# Get info about package in updates info
- notice = md.get_notice((pkg.name, pkg.version, pkg.release))
+ notice = md.get_notice((pkg.name,pkg.version,pkg.release))
if notice:
status = self._get_status(notice)
package_list.append((pkg,status))
@@ -1217,7 +1224,7 @@ class PackageKitYumBackend(PackageKitBaseBackend):
for (pkg,status) in package_list:
self._show_package(pkg,status)
- def repo_enable(self, repoid, enable):
+ def repo_enable(self,repoid,enable):
'''
Implement the {backend}-repo-enable functionality
'''
@@ -1235,7 +1242,7 @@ class PackageKitYumBackend(PackageKitBaseBackend):
except yum.Errors.RepoError,e:
self.error(ERROR_REPO_NOT_FOUND,str(e))
- def _is_development_repo(self, repo):
+ def _is_development_repo(self,repo):
if repo.endswith('-debuginfo'):
return True
if repo.endswith('-testing'):
@@ -1248,7 +1255,7 @@ class PackageKitYumBackend(PackageKitBaseBackend):
return True
return False
- def get_repo_list(self, filters):
+ def get_repo_list(self,filters):
'''
Implement the {backend}-get-repo-list functionality
'''
@@ -1263,10 +1270,10 @@ class PackageKitYumBackend(PackageKitBaseBackend):
self.repo_detail(repo.id,repo.name,'false')
def _get_obsoleted(self,name):
- obsoletes = self.yumbase.up.getObsoletesTuples( newest=1 )
- for ( obsoleting, installed ) in obsoletes:
+ obsoletes = self.yumbase.up.getObsoletesTuples(newest=1)
+ for (obsoleting,installed) in obsoletes:
if obsoleting[0] == name:
- pkg = self.yumbase.rpmdb.searchPkgTuple( installed )[0]
+ pkg = self.yumbase.rpmdb.searchPkgTuple(installed)[0]
return self._pkg_to_id(pkg)
return ""
@@ -1312,8 +1319,8 @@ class PackageKitYumBackend(PackageKitBaseBackend):
def _get_update_extras(self,pkg):
md = self.updateMetadata
- notice = md.get_notice((pkg.name, pkg.version, pkg.release))
- urls = {'bugzilla':[], 'cve' : [], 'vendor': []}
+ notice = md.get_notice((pkg.name,pkg.version,pkg.release))
+ urls = {'bugzilla':[],'cve' : [],'vendor': []}
if notice:
# Update Description
desc = notice['description']
@@ -1357,7 +1364,7 @@ class PackageKitYumBackend(PackageKitBaseBackend):
vendor_url = self._format_list(urls['vendor'])
self.update_detail(package,update,obsolete,vendor_url,bz_url,cve_url,reboot,desc)
- def repo_set_data(self, repoid, parameter, value):
+ def repo_set_data(self,repoid,parameter,value):
'''
Implement the {backend}-repo-set-data functionality
'''
@@ -1365,10 +1372,10 @@ class PackageKitYumBackend(PackageKitBaseBackend):
# Get the repo
repo = self.yumbase.repos.getRepo(repoid)
if repo:
- repo.cfg.set(repoid, parameter, value)
+ repo.cfg.set(repoid,parameter,value)
try:
- repo.cfg.write(file(repo.repofile, 'w'))
- except IOError, e:
+ repo.cfg.write(file(repo.repofile,'w'))
+ except IOError,e:
self.error(ERROR_CANNOT_WRITE_REPO_CONFIG,str(e))
else:
self.error(ERROR_REPO_NOT_FOUND,'repo %s not found' % repoid)
@@ -1381,8 +1388,8 @@ class PackageKitYumBackend(PackageKitBaseBackend):
pkg,inst = self._findPackage(package)
if pkg:
try:
- self.yumbase.getKeyForPackage(pkg, askcb = lambda x, y, z: True)
- except yum.Errors.YumBaseError, e:
+ self.yumbase.getKeyForPackage(pkg,askcb = lambda x,y,z: True)
+ except yum.Errors.YumBaseError,e:
self.error(ERROR_UNKNOWN,str(e))
except:
self.error(ERROR_GPG_FAILURE,"Error importing GPG Key for %s" % pkg)
@@ -1405,9 +1412,9 @@ class PackageKitYumBackend(PackageKitBaseBackend):
self.yumbase.repos.setCache(0)
try:
- self.yumbase.repos.populateSack(mdtype='metadata', cacheonly=1)
- self.yumbase.repos.populateSack(mdtype='filelists', cacheonly=1)
- self.yumbase.repos.populateSack(mdtype='otherdata', cacheonly=1)
+ self.yumbase.repos.populateSack(mdtype='metadata',cacheonly=1)
+ self.yumbase.repos.populateSack(mdtype='filelists',cacheonly=1)
+ self.yumbase.repos.populateSack(mdtype='otherdata',cacheonly=1)
except yum.Errors.RepoError,e:
self.error(ERROR_REPO_NOT_AVAILABLE,str(e))
@@ -1418,12 +1425,12 @@ class PackageKitYumBackend(PackageKitBaseBackend):
self.yumbase.doConfigSetup(errorlevel=0,debuglevel=0) # Setup Yum Config
self.yumbase.conf.throttle = "90%" # Set bandwidth throttle to 40%
self.dnlCallback = DownloadCallback(self,showNames=True) # Download callback
- self.yumbase.repos.setProgressBar( self.dnlCallback ) # Setup the download callback class
+ self.yumbase.repos.setProgressBar(self.dnlCallback) # Setup the download callback class
-class DownloadCallback( BaseMeter ):
+class DownloadCallback(BaseMeter):
""" Customized version of urlgrabber.progress.BaseMeter class """
def __init__(self,base,showNames = False):
- BaseMeter.__init__( self )
+ BaseMeter.__init__(self)
self.totSize = ""
self.base = base
self.showNames = showNames
@@ -1443,7 +1450,7 @@ class DownloadCallback( BaseMeter ):
def _getPackage(self,name):
if self.pkgs:
for pkg in self.pkgs:
- if isinstance(pkg, YumLocalPackage):
+ if isinstance(pkg,YumLocalPackage):
rpmfn = pkg.localPkg
else:
rpmfn = os.path.basename(pkg.remote_path) # get the rpm filename of the package
@@ -1451,34 +1458,34 @@ class DownloadCallback( BaseMeter ):
return pkg
return None
- def update( self, amount_read, now=None ):
- BaseMeter.update( self, amount_read, now )
+ def update(self,amount_read,now=None):
+ BaseMeter.update(self,amount_read,now)
- def _do_start( self, now=None ):
+ def _do_start(self,now=None):
name = self._getName()
self.updateProgress(name,0.0,"","")
if not self.size is None:
- self.totSize = format_number( self.size )
+ self.totSize = format_number(self.size)
- def _do_update( self, amount_read, now=None ):
- fread = format_number( amount_read )
+ def _do_update(self,amount_read,now=None):
+ fread = format_number(amount_read)
name = self._getName()
if self.size is None:
# Elapsed time
etime = self.re.elapsed_time()
- fetime = format_time( etime )
+ fetime = format_time(etime)
frac = 0.0
self.updateProgress(name,frac,fread,fetime)
else:
# Remaining time
rtime = self.re.remaining_time()
- frtime = format_time( rtime )
+ frtime = format_time(rtime)
frac = self.re.fraction_read()
self.updateProgress(name,frac,fread,frtime)
- def _do_end( self, amount_read, now=None ):
- total_time = format_time( self.re.elapsed_time() )
- total_size = format_number( amount_read )
+ def _do_end(self,amount_read,now=None):
+ total_time = format_time(self.re.elapsed_time())
+ total_size = format_number(amount_read)
name = self._getName()
self.updateProgress(name,1.0,total_size,total_time)
@@ -1486,7 +1493,7 @@ class DownloadCallback( BaseMeter ):
'''
Get the name of the package being downloaded
'''
- if self.text and type( self.text ) == type( "" ):
+ if self.text and type(self.text) == type(""):
name = self.text
else:
name = self.basename
@@ -1500,7 +1507,7 @@ class DownloadCallback( BaseMeter ):
@param fread: formated string containing BytesRead
@param ftime : formated string containing remaining or elapsed time
'''
- pct = int( frac*100 )
+ pct = int(frac*100)
if name != self.oldName: # If this a new package
if self.oldName:
self.base.sub_percentage(100)
@@ -1562,22 +1569,22 @@ class PackageKitCallback(RPMBaseCallback):
id = self.base.get_package_id(self.curpkg,'','','')
else:
pkgver = self.base._get_package_ver(self.curpkg)
- id = self.base.get_package_id(self.curpkg.name, pkgver, self.curpkg.arch, self.curpkg.repo)
- self.base.package(id,status, "")
+ id = self.base.get_package_id(self.curpkg.name,pkgver,self.curpkg.arch,self.curpkg.repo)
+ self.base.package(id,status,"")
- def event(self, package, action, te_current, te_total, ts_current, ts_total):
+ def event(self,package,action,te_current,te_total,ts_current,ts_total):
if str(package) != str(self.curpkg):
self.curpkg = package
self.base.status(self.state_actions[action])
self._showName(self.info_actions[action])
- pct = self._calcTotalPct(ts_current, ts_total)
+ pct = self._calcTotalPct(ts_current,ts_total)
self.base.percentage(pct)
val = (ts_current*100L)/ts_total
if val != self.pct:
self.pct = val
self.base.sub_percentage(val)
- def errorlog(self, msg):
+ def errorlog(self,msg):
# grrrrrrrr
pass
@@ -1610,7 +1617,7 @@ class DepSolveCallback(object):
# XXX takes a PackageKitBackend so we can call StatusChanged on it.
# That's kind of hurky.
- def __init__(self, backend):
+ def __init__(self,backend):
self.started = False
self.backend = backend
@@ -1620,10 +1627,10 @@ class DepSolveCallback(object):
self.backend.percentage(None)
# Be lazy and not define the others explicitly
- def _do_nothing(self, *args, **kwargs):
+ def _do_nothing(self,*args,**kwargs):
pass
- def __getattr__(self, x):
+ def __getattr__(self,x):
return self._do_nothing
class PackageKitYumBase(yum.YumBase):
@@ -1632,7 +1639,7 @@ class PackageKitYumBase(yum.YumBase):
and nab the gpg sig data
"""
- def __init__(self, backend):
+ def __init__(self,backend):
yum.YumBase.__init__(self)
self.missingGPGKey = None
self.dsCallback = DepSolveCallback(backend)
@@ -1642,22 +1649,24 @@ class PackageKitYumBase(yum.YumBase):
# This can be overloaded by a subclass.
for po in pkgs:
- result, errmsg = self.sigCheckPkg(po)
+ result,errmsg = self.sigCheckPkg(po)
if result == 0:
- # Verified ok, or verify not req'd
+ # verified ok, or verify not required
continue
elif result == 1:
- self.getKeyForPackage(po, fullaskcb=self._fullAskForGPGKeyImport)
+ # verify failed but installation of the correct GPG key might help
+ self.getKeyForPackage(po,fullaskcb=self._fullAskForGPGKeyImport)
else:
- raise yum.Errors.YumGPGCheckError, errmsg
+ # fatal GPG verification error
+ raise yum.Errors.YumGPGCheckError,errmsg
return 0
- def _fullAskForGPGKeyImport(self, data):
+ def _fullAskForGPGKeyImport(self,data):
self.missingGPGKey = data
raise GPGKeyNotImported()
- def _askForGPGKeyImport(self, po, userid, hexkeyid):
+ def _askForGPGKeyImport(self,po,userid,hexkeyid):
'''
Ask for GPGKeyImport
'''