mock build
This commit is contained in:
117
locallibs/ruby-rpm-ffi/lib/rpm/db.rb
Normal file
117
locallibs/ruby-rpm-ffi/lib/rpm/db.rb
Normal file
@@ -0,0 +1,117 @@
|
||||
require 'fcntl'
|
||||
|
||||
module RPM
|
||||
class DB
|
||||
include Enumerable
|
||||
|
||||
# @visibility private
|
||||
# @param ts [Transaction] transaction object
|
||||
def initialize(ts, opts = {})
|
||||
opts[:writable] ||= false
|
||||
|
||||
@ts = ts
|
||||
RPM::C.rpmtsOpenDB(@ts.ptr, opts[:writable] ? Fcntl::O_RDWR | Fcntl::O_CREAT : Fcntl::O_RDONLY)
|
||||
end
|
||||
|
||||
# @return [RPM::MatchIterator] Creates an iterator for +tag+ and +val+
|
||||
def init_iterator(tag, val)
|
||||
@ts.init_iterator(tag, val)
|
||||
end
|
||||
|
||||
#
|
||||
# @yield [Package] Called for each match
|
||||
# @param [Number] key RPM tag key
|
||||
# @param [String] val Value to match
|
||||
# @example
|
||||
# RPM.transaction do |t|
|
||||
# t.each_match(RPM::TAG_ARCH, "x86_64") do |pkg|
|
||||
# puts pkg.name
|
||||
# end
|
||||
# end
|
||||
#
|
||||
def each_match(key, val, &block)
|
||||
@ts.each_match(key, val, &block)
|
||||
end
|
||||
|
||||
#
|
||||
# @yield [Package] Called for each package in the database
|
||||
# @example
|
||||
# db.each do |pkg|
|
||||
# puts pkg.name
|
||||
# end
|
||||
#
|
||||
def each(&block)
|
||||
@ts.each(&block)
|
||||
end
|
||||
|
||||
# @visibility private
|
||||
def ptr
|
||||
RPM::C.rpmtsGetRdb(@ts.ptr)
|
||||
end
|
||||
|
||||
def close
|
||||
RPM::C.rpmtsCloseDB(@ts.ptr)
|
||||
end
|
||||
|
||||
def closed?
|
||||
ptr.null?
|
||||
end
|
||||
|
||||
#
|
||||
# The package database is opened, but transactional processing
|
||||
# (@see RPM::DB#transaction) cannot be done for when +writable+ is false.
|
||||
# When +writable+ is +false+ then the generated object gets freezed.
|
||||
# @param [Boolean] writable Whether the database is writable. Default is +false+.
|
||||
# @param [String] root Root path for the database, default is empty.
|
||||
# @return [RPM::DB]
|
||||
#
|
||||
# @example
|
||||
# db = RPM::DB.open
|
||||
# db.each do |pkg|
|
||||
# puts pkg.name
|
||||
# end
|
||||
#
|
||||
def self.open(_writable = false, root = '/', &block)
|
||||
open_for_transaction(Transaction.new(root: root), writable: false, &block)
|
||||
end
|
||||
|
||||
# @visibility private
|
||||
def self.open_for_transaction(ts, opts = {})
|
||||
db = new(ts, opts)
|
||||
return db unless block_given?
|
||||
|
||||
begin
|
||||
yield db
|
||||
ensure
|
||||
db.close unless db.closed?
|
||||
end
|
||||
end
|
||||
|
||||
# @deprecated Not possible to get home value in
|
||||
# newer RPM versions
|
||||
def home
|
||||
raise NotImplementedError
|
||||
end
|
||||
|
||||
# @return [String] The root path of the database
|
||||
def root
|
||||
RPM::C.rpmtsRootDir(@ts.ptr)
|
||||
end
|
||||
|
||||
# @deprecated Use RPM::Transaction#each
|
||||
def self.each
|
||||
DB.open do |db|
|
||||
it = MatchIterator.from_ptr(RPM::C.rpmdbInitIterator(db.ptr, 0, nil, 0))
|
||||
if block_given?
|
||||
it.each do |pkg|
|
||||
yield pkg
|
||||
end
|
||||
end
|
||||
end
|
||||
end
|
||||
|
||||
# @return number of instances of +name+ in the
|
||||
# database
|
||||
def count_packages(name); end
|
||||
end
|
||||
end
|
||||
Reference in New Issue
Block a user