HEX
Server: Apache
System: Linux dinesh8189 5.15.98-grsec-sharedvalley-2.lc.el8.x86_64 #1 SMP Thu Mar 9 09:07:30 -03 2023 x86_64
User: cgmgerenciamento1 (814285)
PHP: 8.1.26
Disabled: apache_child_terminate,dl,escapeshellarg,escapeshellcmd,exec,link,mail,openlog,passthru,pcntl_alarm,pcntl_exec,pcntl_fork,pcntl_get_last_error,pcntl_getpriority,pcntl_setpriority,pcntl_signal,pcntl_signal_dispatch,pcntl_sigprocmask,pcntl_sigtimedwait,pcntl_sigwaitinfo,pcntl_strerror,pcntl_wait,pcntl_waitpid,pcntl_wexitstatus,pcntl_wifexited,pcntl_wifsignaled,pcntl_wifstopped,pcntl_wstopsig,pcntl_wtermsig,php_check_syntax,php_strip_whitespace,popen,proc_close,proc_open,shell_exec,symlink,system
Upload Files
File: //opt/puppetlabs/puppet/lib/ruby/vendor_ruby/puppet/util/package/version/rpm.rb
# frozen_string_literal: true
require 'puppet/util/rpm_compare'

module Puppet::Util::Package::Version
  class Rpm < Numeric
    # provides Rpm parsing and comparison
    extend Puppet::Util::RpmCompare
    include Puppet::Util::RpmCompare
    include Comparable

    class ValidationFailure < ArgumentError; end

    attr_reader :epoch, :version, :release, :arch

    def self.parse(ver)
      raise ValidationFailure unless ver.is_a?(String)
      version = rpm_parse_evr(ver)
      new(version[:epoch], version[:version], version[:release], version[:arch]).freeze
    end

    def to_s
      version_found = ''
      version_found += "#{@epoch}:"   if @epoch
      version_found += @version
      version_found += "-#{@release}" if @release
      version_found
    end
    alias inspect to_s

    def eql?(other)
      other.is_a?(self.class) &&
        @epoch.eql?(other.epoch) &&
        @version.eql?(other.version) &&
        @release.eql?(other.release) &&
        @arch.eql?(other.arch)
    end
    alias == eql?

    def <=>(other)
      raise ArgumentError, _("Cannot compare, as %{other} is not a Rpm Version") % { other: other } unless other.is_a?(self.class)

      rpm_compareEVR(self.to_s, other.to_s)
    end

    private

    # overwrite rpm_compareEVR to treat no epoch as zero epoch
    # in order to compare version correctly
    #
    # returns 1 if a is newer than b,
    #         0 if they are identical
    #        -1 if a is older than b
    def rpm_compareEVR(a, b)
      a_hash = rpm_parse_evr(a)
      b_hash = rpm_parse_evr(b)

      a_hash[:epoch] ||= '0'
      b_hash[:epoch] ||= '0'

      rc = compare_values(a_hash[:epoch], b_hash[:epoch])
      return rc unless rc == 0

      super(a, b)
    end

    def initialize(epoch, version, release, arch)
      @epoch   = epoch
      @version = version
      @release = release
      @arch    = arch
    end
  end
end