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

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'