Class: Chef::Provider::Package::Yum::RPMDependency

Inherits:
Object
  • Object
show all
Defined in:
lib/chef/provider/package/yum.rb

Overview

Simple implementation from rpm and ruby-rpm reference code

Direct Known Subclasses

RPMProvide, RPMRequire

Instance Attribute Summary collapse

Class Method Summary collapse

Instance Method Summary collapse

Constructor Details

#initialize(*args) ⇒ RPMDependency

Returns a new instance of RPMDependency.



420
421
422
423
424
425
426
427
428
429
430
431
432
433
434
435
436
437
# File 'lib/chef/provider/package/yum.rb', line 420

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

Instance Attribute Details

#flagObject (readonly)

Returns the value of attribute flag.



438
439
440
# File 'lib/chef/provider/package/yum.rb', line 438

def flag
  @flag
end

#nameObject (readonly)

Returns the value of attribute name.



438
439
440
# File 'lib/chef/provider/package/yum.rb', line 438

def name
  @name
end

#versionObject (readonly)

Returns the value of attribute version.



438
439
440
# File 'lib/chef/provider/package/yum.rb', line 438

def version
  @version
end

Class Method Details

.parse(string) ⇒ Object

Parses 2 forms:

“mtr >= 2:0.71-3.0” “mta”



444
445
446
447
448
449
450
451
452
453
454
455
456
457
458
459
# File 'lib/chef/provider/package/yum.rb', line 444

def self.parse(string)
  if string =~ %r{^(\S+)\s+(>|>=|=|==|<=|<)\s+(\S+)$}
    name = $1
    if $2 == "="
      flag = :==
    else
      flag = :"#{$2}"
    end
    version = $3

    return self.new(name, version, flag)
  else
    name = string
    return self.new(name, nil, nil)
  end
end

Instance Method Details

#satisfy?(y) ⇒ Boolean

Test if another RPMDependency satisfies our requirements

Returns:

  • (Boolean)


462
463
464
465
466
467
468
469
470
471
472
473
474
475
476
477
478
479
480
481
482
483
484
485
486
487
488
489
490
491
492
493
# File 'lib/chef/provider/package/yum.rb', line 462

def satisfy?(y)
  unless y.kind_of?(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 and (x.flag == :> || x.flag == :>=) || (y.flag == :<= || y.flag == :<)
    return true
  elsif sense > 0 and (x.flag == :< || x.flag == :<=) || (y.flag == :>= || y.flag == :>)
    return true
  elsif sense == 0 and (
    ((x.flag == :== or x.flag == :<= or x.flag == :>=) and (y.flag == :== or y.flag == :<= or y.flag == :>=)) or
    (x.flag == :< and y.flag == :<) or
    (x.flag == :> and y.flag == :>)
  )
    return true
  end

  return false
end