def packagevercmp(a, b): """ Compare two package objects. @param a: package object from repo metadata @type a: repomd.packagexml._Package @param b: package object from repo metadata @type b: repomd.packagexml._Package """ # Not all "packages" have epoch set. If comparing between two packages, at # least one without an epoch specified, ignore epoch. if a.epoch is not None and b.epoch is not None: epochcmp = rpmvercmp(a.epoch, b.epoch) if epochcmp != 0: return epochcmp vercmp = rpmvercmp(a.version, b.version) if vercmp != 0: return vercmp relcmp = rpmvercmp(a.release, b.release) if relcmp != 0: return relcmp return 0
def __cmp__(self, other): if isinstance(other, tuple): other = self.__class__(*other) nameCmp = cmp(self.name, other.name) if nameCmp != 0: return nameCmp epochCmp = rpmvercmp(self.epoch, other.epoch) if epochCmp != 0: return epochCmp versionCmp = rpmvercmp(self.version, other.version) if versionCmp != 0: return versionCmp releaseCmp = rpmvercmp(self.release, other.release) if releaseCmp != 0: return releaseCmp archCmp = cmp(self.arch, other.arch) if archCmp != 0: return archCmp return 0
def _findUpdatableTroves(self, group): """ Query a group to find packages that need to be updated. @param group: package spec for the top level group to query @type group: (name, versionObj, flavorObj) @return list of nvf and src package object """ # ((name, version, flavor), srpm) troves = [] for name, version, flavor in \ self._conaryhelper.getSourceTroves(group).iterkeys(): name = name.split(':')[0] # skip special packages if self._fltrPkg(name): continue latestSrpm = self._getLatestSource(name) latestVer = util.srpmToConaryVersion(latestSrpm) curVer = str(version.trailingRevision().version) if rpmvercmp(latestVer, curVer) != 0: log.info('found potential updatable trove: %s' % ((name, version, flavor), )) log.debug('cny: %s, rpm: %s' % (curVer, latestVer)) # Add anything that has changed, version may have gone # backwards if epoch changes. troves.append(((name, version, flavor), latestSrpm)) log.info('found %s protentially updatable troves' % len(troves)) return troves
pkg = pkgs[idx+1] else: # This means that this package has no newer versions. log.info('no newer version of %s found' % binPkg.name) # Get the source that the package was built from for version # comparison since the source and binary can have different # versions. if pkg: src = self._pkgSource.binPkgMap[pkg] else: src = srcPkg # Raise an exception if the versions of the packages aren't # equal or the discovered package comes from a different source. if (rpmvercmp(src.epoch, srpm.epoch) != 0 or rpmvercmp(src.version, srpm.version) != 0 or # in the suse case we have to ignore release (not self._cfg.reuseOldRevisions and rpmvercmp(src.release, srpm.release) != 0) or # binary does not come from the same source as it used to src.name != srpm.name): log.warn('update removes package (%s) %s -> %s' % (binPkg.name, srcPkg.getNevra(), srpm.getNevra())) # allow some packages to be removed. if expectedRemovals and binPkg.name in expectedRemovals: log.info('package removal (%s) handled in configuration' % binPkg.name) continue
else: # This means that this package has no newer versions. log.info("no newer version of %s found" % binPkg.name) # Get the source that the package was built from for version # comparison since the source and binary can have different # versions. if pkg: src = self._pkgSource.binPkgMap[pkg] else: src = srcPkg # Raise an exception if the versions of the packages aren't # equal or the discovered package comes from a different source. if ( rpmvercmp(src.epoch, srpm.epoch) != 0 or rpmvercmp(src.version, srpm.version) != 0 or # in the suse case we have to ignore release (not self._cfg.reuseOldRevisions and rpmvercmp(src.release, srpm.release) != 0) or # binary does not come from the same source as it used to src.name != srpm.name ): log.warn("update removes package (%s) %s -> %s" % (binPkg.name, srcPkg.getNevra(), srpm.getNevra())) # allow some packages to be removed. if expectedRemovals and binPkg.name in expectedRemovals: log.info("package removal (%s) handled in configuration" % binPkg.name) continue
pkg = pkgs[idx + 1] else: # This means that this package has no newer versions. log.info('no newer version of %s found' % binPkg.name) # Get the source that the package was built from for version # comparison since the source and binary can have different # versions. if pkg: src = self._pkgSource.binPkgMap[pkg] else: src = srcPkg # Raise an exception if the versions of the packages aren't # equal or the discovered package comes from a different source. if (rpmvercmp(src.epoch, srpm.epoch) != 0 or rpmvercmp(src.version, srpm.version) != 0 or # in the suse case we have to ignore release (not self._cfg.reuseOldRevisions and rpmvercmp(src.release, srpm.release) != 0) or # binary does not come from the same source as it used to src.name != srpm.name): log.warn('update removes package (%s) %s -> %s' % (binPkg.name, srcPkg.getNevra(), srpm.getNevra())) # allow some packages to be removed. if expectedRemovals and binPkg.name in expectedRemovals: log.info( 'package removal (%s) handled in configuration' % binPkg.name) continue