Sha256: a880273f8981cf7ce4caf983bb78ece2ae7b2cc612cfc2a6888ad083e77614d6

Contents?: true

Size: 992 Bytes

Versions: 8

Compression:

Stored size: 992 Bytes

Contents

# frozen_string_literal: true

module Puppet::Util::Package
  def versioncmp(version_a, version_b, ignore_trailing_zeroes = false)
    vre = /[-.]|\d+|[^-.\d]+/

    if ignore_trailing_zeroes
      version_a = normalize(version_a)
      version_b = normalize(version_b)
    end

    ax = version_a.scan(vre)
    bx = version_b.scan(vre)

    while (ax.length > 0 && bx.length > 0)
      a = ax.shift
      b = bx.shift

      next      if a == b
      return -1 if a == '-'
      return 1  if b == '-'
      return -1 if a == '.'
      return 1  if b == '.'

      if a =~ /^\d+$/ && b =~ /^\d+$/
        return a.to_s.upcase <=> b.to_s.upcase if a =~ /^0/ || b =~ /^0/

        return a.to_i <=> b.to_i
      end
      return a.upcase <=> b.upcase
    end
    version_a <=> version_b
  end
  module_function :versioncmp

  def self.normalize(version)
    version = version.split('-')
    version.first.sub!(/([\.0]+)$/, '')

    version.join('-')
  end
  private_class_method :normalize
end

Version data entries

8 entries across 8 versions & 1 rubygems

Version Path
puppet-8.5.1 lib/puppet/util/package.rb
puppet-8.5.1-x86-mingw32 lib/puppet/util/package.rb
puppet-8.5.1-x64-mingw32 lib/puppet/util/package.rb
puppet-8.5.1-universal-darwin lib/puppet/util/package.rb
puppet-8.5.0 lib/puppet/util/package.rb
puppet-8.5.0-x86-mingw32 lib/puppet/util/package.rb
puppet-8.5.0-x64-mingw32 lib/puppet/util/package.rb
puppet-8.5.0-universal-darwin lib/puppet/util/package.rb