diff options
author | Richard Hughes <richard@hughsie.com> | 2008-04-30 11:58:00 +0100 |
---|---|---|
committer | Richard Hughes <richard@hughsie.com> | 2008-04-30 11:58:00 +0100 |
commit | 657b9e30e64a1678410e1e219df3f0fc7a6fac9f (patch) | |
tree | 8216974151751ca7452646fabc1cc83e341e7caf | |
parent | 45cf0f898e7bdce6dd55ceda3eec452e4756e81a (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.py | 273 |
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 ''' |