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.



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

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.



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

def flag
  @flag
end

#nameObject (readonly)

Returns the value of attribute name.



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

def name
  @name
end

#versionObject (readonly)

Returns the value of attribute version.



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

def version
  @version
end

Class Method Details

.parse(string) ⇒ Object

Parses 2 forms:

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



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

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)


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
494
# File 'lib/chef/provider/package/yum.rb', line 463

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