Class: MiqRpmPackages::Bdb
- Inherits:
-
MiqRpmPackages
- Object
- MiqRpmPackages
- MiqRpmPackages::Bdb
- Defined in:
- lib/metadata/linux/MiqRpmPackages/Bdb.rb
Constant Summary collapse
- RPM_INT32_TYPE =
The data types we support.
4- RPM_STRING_TYPE =
6- RPM_STRING_ARRAY_TYPE =
8- RPM_I18NSTRING_TYPE =
9- NAME =
The things we care about.
1000- VERSION =
1001- RELEASE =
1002- SUMMARY =
1004- DESCRIPTION =
1005- BUILDTIME =
1006- INSTALLTIME =
1008- VENDOR =
1011- GROUP =
1016- URL =
1020- ARCH =
1022- REQUIRES =
1049- TAGIDS =
{ 1000 => "name", 1001 => "version", 1002 => "release", 1004 => "summary", 1005 => "description", 1006 => "buildtime", 1008 => "installtime", 1011 => "vendor", 1016 => "category", # group 1020 => "url", 1022 => "arch", 1049 => "depends", # requires }
- RPML_HEADER =
Nubbers on disk are in network byte order.
BinaryStruct.new([ 'N', 'num_index', "N", 'num_data' ])
- RPML_HEADER_LEN =
RPML_HEADER.size
- ENTRY_INFO =
BinaryStruct.new([ 'N', 'tag', 'N', 'ttype', 'N', 'offset', 'N', 'count' ])
- ENTRY_INFO_LEN =
ENTRY_INFO.size
Instance Method Summary collapse
-
#close ⇒ Object
def each.
- #each ⇒ Object
-
#initialize(fs, dbFile) ⇒ Bdb
constructor
A new instance of Bdb.
Methods inherited from MiqRpmPackages
Constructor Details
#initialize(fs, dbFile) ⇒ Bdb
Returns a new instance of Bdb.
67 68 69 70 71 |
# File 'lib/metadata/linux/MiqRpmPackages/Bdb.rb', line 67 def initialize(fs, dbFile) @pkgDb = MiqBerkeleyDB::MiqBdb.new(dbFile, fs) # Pre-read all pages into the bdb cache, as we will be processing all of them anyway. @pkgDb.readAllPages end |
Instance Method Details
#close ⇒ Object
def each
103 104 105 |
# File 'lib/metadata/linux/MiqRpmPackages/Bdb.rb', line 103 def close @pkgDb.close end |
#each ⇒ Object
73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 |
# File 'lib/metadata/linux/MiqRpmPackages/Bdb.rb', line 73 def each @pkgDb.each_value do |v| next if v.length <= RPML_HEADER_LEN hdr = RPML_HEADER.decode(v) offset = RPML_HEADER_LEN + (ENTRY_INFO_LEN * hdr['num_index']) if v.length != offset + hdr['num_data'] $log.debug "record length = #{v.length}" $log.debug "num_index = #{hdr['num_index']}" $log.debug "num_data = #{hdr['num_data']}" $log.error "Invalid or corrupt RPM database record" next end data = v[offset, hdr['num_data']] pkg = {} eis = ENTRY_INFO.decode(v[RPML_HEADER_LEN..-1], hdr['num_index']) eis.each do |ei| tag = TAGIDS[ei['tag']] next if tag.nil? pkg[tag] = getVal(data, ei) pkg[tag] = convert(tag, pkg[tag]) end pkg['installed'] = true unless pkg.empty? yield(MiqHashStruct.new(pkg)) end end |