class Chef::Provider::Package::Yum::RPMDependency
Simple implementation from rpm and ruby-rpm reference code
Attributes
flag[R]
name[R]
version[R]
Public Class Methods
new(*args)
click to toggle source
# File lib/chef/provider/package/yum/rpm_utils.rb, line 411 def initialize(*args) if args.size == 3 @name = args[0] @version = RPMVersion.new(args[1]) # Our requirement to other dependencies @flag = args[2] || :== elsif args.size == 5 @name = args[0] e = args[1].to_i v = args[2] r = args[3] @version = RPMVersion.new(e, v, r) @flag = args[4] || :== else raise ArgumentError, "Expecting either 'name, epoch-version-release, flag' or " \ "'name, epoch, version, release, flag'" end end
parse(string)
click to toggle source
Parses 2 forms:
“mtr >= 2:0.71-3.0” “mta”
# File lib/chef/provider/package/yum/rpm_utils.rb, line 435 def self.parse(string) if /^(\S+)\s+(>|>=|=|==|<=|<)\s+(\S+)$/.match(string) # rubocop:disable Performance/RedundantMatch name = $1 flag = if $2 == "=" :== else :"#{$2}" end version = $3 new(name, version, flag) else name = string new(name, nil, nil) end end
Public Instance Methods
satisfy?(y)
click to toggle source
Test if another RPMDependency
satisfies our requirements
# File lib/chef/provider/package/yum/rpm_utils.rb, line 453 def satisfy?(y) unless y.is_a?(RPMDependency) raise ArgumentError, "Expecting an RPMDependency object" end x = self # Easy! if x.name != y.name return false end # Partial compare # # eg: x.version 2.3 == y.version 2.3-1 sense = x.version.partial_compare(y.version) # Thanks to rpmdsCompare() rpmds.c if (sense < 0) && ((x.flag == :> || x.flag == :>=) || (y.flag == :<= || y.flag == :<)) return true elsif (sense > 0) && ((x.flag == :< || x.flag == :<=) || (y.flag == :>= || y.flag == :>)) return true elsif sense == 0 && ( ((x.flag == :== || x.flag == :<= || x.flag == :>=) && (y.flag == :== || y.flag == :<= || y.flag == :>=)) || (x.flag == :< && y.flag == :<) || (x.flag == :> && y.flag == :>) ) return true end false end