Beispiel #1
0
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
Beispiel #2
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
Beispiel #3
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
Beispiel #4
0
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
Beispiel #5
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
Beispiel #6
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
Beispiel #7
0
                        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
Beispiel #8
0
                    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
Beispiel #9
0
                        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