Class: MiqRpmPackages
- Inherits:
-
Object
- Object
- MiqRpmPackages
- Defined in:
- lib/metadata/linux/MiqRpmPackages.rb
Overview
RPM Specification located at: jrpm.sourceforge.net/rpmspec/index.html
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) ⇒ MiqRpmPackages
constructor
A new instance of MiqRpmPackages.
Constructor Details
#initialize(fs, dbFile) ⇒ MiqRpmPackages
Returns a new instance of MiqRpmPackages.
68 69 70 71 72 |
# File 'lib/metadata/linux/MiqRpmPackages.rb', line 68 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
104 105 106 |
# File 'lib/metadata/linux/MiqRpmPackages.rb', line 104 def close @pkgDb.close end |
#each ⇒ Object
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 102 |
# File 'lib/metadata/linux/MiqRpmPackages.rb', line 74 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 |