You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
89 lines
2.1 KiB
89 lines
2.1 KiB
|
|
require 'rpm/c'
|
|
require 'rpm/package'
|
|
require 'rpm/file'
|
|
require 'rpm/db'
|
|
require 'rpm/problem'
|
|
require 'rpm/transaction'
|
|
require 'rpm/match_iterator'
|
|
require 'rpm/version'
|
|
require 'rpm/dependency'
|
|
require 'rpm/utils'
|
|
|
|
module RPM
|
|
TAG = RPM::C::Tag
|
|
LOG = RPM::C::Log
|
|
SENSE = RPM::C::Sense
|
|
FILE = RPM::C::FileAttrs
|
|
FILE_STATE = RPM::C::FileState
|
|
TRANS_FLAG = RPM::C::TransFlags
|
|
PROB_FILTER = RPM::C::ProbFilter
|
|
MIRE = RPM::C::RegexpMode
|
|
|
|
# Creates a new transaction and pass it
|
|
# to the given block
|
|
#
|
|
# @param [String] root dir, default '/'
|
|
#
|
|
# @example
|
|
# RPM.transaction do |ts|
|
|
# ...
|
|
# end
|
|
#
|
|
def self.transaction(root = '/')
|
|
ts = Transaction.new
|
|
ts.root_dir = root
|
|
yield ts
|
|
ensure
|
|
ts.ptr.free
|
|
end
|
|
|
|
# @param [String] name Name of the macro
|
|
# @return [String] value of macro +name+
|
|
def self.[](name)
|
|
if C::rpm_version_code >= ((4 << 16) + (14 << 8) + (0 << 0))
|
|
obuf = ::FFI::MemoryPointer.new(:pointer, 1)
|
|
sbuf = FFI::MemoryPointer.from_string("%{#{name}}")
|
|
ret = RPM::C.rpmExpandMacros(nil, sbuf, obuf, 0)
|
|
raise if ret < 0
|
|
|
|
val = obuf.read_pointer
|
|
val.nil? ? nil : val.read_string
|
|
else
|
|
buffer = ::FFI::MemoryPointer.new(:pointer, 1024)
|
|
buffer.write_string("%{#{name}}")
|
|
ret = RPM::C.expandMacros(nil, nil, buffer, 1024)
|
|
raise if ret < 0
|
|
|
|
buffer.read_string
|
|
end
|
|
end
|
|
|
|
# Setup a macro
|
|
# @param [String] name Name of the macro
|
|
# @param [String] value Value of the macro or +nil+ to delete it
|
|
def self.[]=(name, value)
|
|
if value.nil?
|
|
if C::rpm_version_code >= ((4 << 16) + (14 << 8) + (0 << 0))
|
|
RPM::C.rpmPopMacro(nil, name.to_s)
|
|
else
|
|
RPM::C.delMacro(nil, name.to_s)
|
|
end
|
|
else
|
|
if C::rpm_version_code >= ((4 << 16) + (14 << 8) + (0 << 0))
|
|
RPM::C.rpmPushMacro(nil, name.to_s, '', value.to_s, RPM::C::RMIL_DEFAULT)
|
|
else
|
|
RPM::C.addMacro(nil, name.to_s, '', value.to_s, RPM::C::RMIL_DEFAULT)
|
|
end
|
|
end
|
|
end
|
|
end
|
|
|
|
RPM::C.rpmReadConfigFiles(nil, nil)
|
|
RPM::C.rpmInitMacros(nil, RPM::C.MACROFILES)
|
|
|
|
# TODO
|
|
# set verbosity
|
|
|
|
require 'rpm/compat'
|