require File.join(File.dirname(__FILE__), "namespace")
class RPMFile::Tag
attr_accessor :tag
attr_accessor :type
attr_accessor :offset
attr_accessor :count
attr_accessor :value
# This data can be found mostly in rpmtag.h
TAG = {
61 => :headerimage,
62 => :headersignatures,
63 => :headerimmutable,
64 => :headerregions,
100 => :headeri18ntable,
256 => :sig_base,
257 => :sigsize,
258 => :siglemd5_1,
259 => :sigpgp,
260 => :siglemd5_2,
261 => :sigmd5,
262 => :siggpg,
263 => :sigpgp5,
264 => :badsha1_1,
265 => :badsha1_2,
266 => :pubkeys,
267 => :dsaheader,
268 => :rsaheader,
269 => :sha1header,
270 => :longsigsize,
271 => :longarchivesize,
1000 => :name,
1001 => :version,
1002 => :release,
1003 => :epoch,
1004 => :summary,
1005 => :description,
1006 => :buildtime,
1007 => :buildhost,
1008 => :installtime,
1009 => :size,
1010 => :distribution,
1011 => :vendor,
1012 => :gif,
1013 => :xpm,
1014 => :license,
1015 => :packager,
1016 => :group,
1017 => :changelog,
1018 => :source,
1019 => :patch,
1020 => :url,
1021 => :os,
1022 => :arch,
1023 => :prein,
1024 => :postin,
1025 => :preun,
1026 => :postun,
1027 => :oldfilenames,
1028 => :filesizes,
1029 => :filestates,
1030 => :filemodes,
1031 => :fileuids,
1032 => :filegids,
1033 => :filerdevs,
1034 => :filemtimes,
1035 => :filedigests,
1036 => :filelinktos,
1037 => :fileflags,
1038 => :root,
1039 => :fileusername,
1040 => :filegroupname,
1041 => :exclude,
1042 => :exclusive,
1043 => :icon,
1044 => :sourcerpm,
1045 => :fileverifyflags,
1046 => :archivesize,
1047 => :providename,
1048 => :requireflags,
1049 => :requirename,
1050 => :requireversion,
1051 => :nosource,
1052 => :nopatch,
1053 => :conflictflags,
1054 => :conflictname,
1055 => :conflictversion,
1056 => :defaultprefix,
1057 => :buildroot,
1058 => :installprefix,
1059 => :excludearch,
1060 => :excludeos,
1061 => :exclusivearch,
1062 => :exclusiveos,
1063 => :autoreqprov,
1064 => :rpmversion,
1065 => :triggerscripts,
1066 => :triggername,
1067 => :triggerversion,
1068 => :triggerflags,
1069 => :triggerindex,
1079 => :verifyscript,
1080 => :changelogtime,
1081 => :changelogname,
1082 => :changelogtext,
1083 => :brokenmd5,
1084 => :prereq,
1085 => :preinprog,
1086 => :postinprog,
1087 => :preunprog,
1088 => :postunprog,
1089 => :buildarchs,
1090 => :obsoletename,
1091 => :verifyscriptprog,
1092 => :triggerscriptprog,
1093 => :docdir,
1094 => :cookie,
1095 => :filedevices,
1096 => :fileinodes,
1097 => :filelangs,
1098 => :prefixes,
1099 => :instprefixes,
1100 => :triggerin,
1101 => :triggerun,
1102 => :triggerpostun,
1103 => :autoreq,
1104 => :autoprov,
1105 => :capability,
1106 => :sourcepackage,
1107 => :oldorigfilenames,
1108 => :buildprereq,
1109 => :buildrequires,
1110 => :buildconflicts,
1111 => :buildmacros,
1112 => :provideflags,
1113 => :provideversion,
1114 => :obsoleteflags,
1115 => :obsoleteversion,
1116 => :dirindexes,
1117 => :basenames,
1118 => :dirnames,
1119 => :origdirindexes,
1120 => :origbasenames,
1121 => :origdirnames,
1122 => :optflags,
1123 => :disturl,
1124 => :payloadformat,
1125 => :payloadcompressor,
1126 => :payloadflags,
1127 => :installcolor,
1128 => :installtid,
1129 => :removetid,
1130 => :sha1rhn,
1131 => :rhnplatform,
1132 => :platform,
1133 => :patchesname,
1134 => :patchesflags,
1135 => :patchesversion,
1136 => :cachectime,
1137 => :cachepkgpath,
1138 => :cachepkgsize,
1139 => :cachepkgmtime,
1140 => :filecolors,
1141 => :fileclass,
1142 => :classdict,
1143 => :filedependsx,
1144 => :filedependsn,
1145 => :dependsdict,
1146 => :sourcepkgid,
1147 => :filecontexts,
1148 => :fscontexts,
1149 => :recontexts,
1150 => :policies,
1151 => :pretrans,
1152 => :posttrans,
1153 => :pretransprog,
1154 => :posttransprog,
1155 => :disttag,
1156 => :suggestsname,
1157 => :suggestsversion,
1158 => :suggestsflags,
1159 => :enhancesname,
1160 => :enhancesversion,
1161 => :enhancesflags,
1162 => :priority,
1163 => :cvsid,
1164 => :blinkpkgid,
1165 => :blinkhdrid,
1166 => :blinknevra,
1167 => :flinkpkgid,
1168 => :flinkhdrid,
1169 => :flinknevra,
1170 => :packageorigin,
1171 => :triggerprein,
1172 => :buildsuggests,
1173 => :buildenhances,
1174 => :scriptstates,
1175 => :scriptmetrics,
1176 => :buildcpuclock,
1177 => :filedigestalgos,
1178 => :variants,
1179 => :xmajor,
1180 => :xminor,
1181 => :repotag,
1182 => :keywords,
1183 => :buildplatforms,
1184 => :packagecolor,
1185 => :packageprefcolor,
1186 => :xattrsdict,
1187 => :filexattrsx,
1188 => :depattrsdict,
1189 => :conflictattrsx,
1190 => :obsoleteattrsx,
1191 => :provideattrsx,
1192 => :requireattrsx,
1193 => :buildprovides,
1194 => :buildobsoletes,
1195 => :dbinstance,
1196 => :nvra,
5000 => :filenames,
5001 => :fileprovide,
5002 => :filerequire,
5003 => :fsnames,
5004 => :fssizes,
5005 => :triggerconds,
5006 => :triggertype,
5007 => :origfilenames,
5008 => :longfilesizes,
5009 => :longsize,
5010 => :filecaps,
5011 => :filedigestalgo,
5012 => :bugurl,
5013 => :evr,
5014 => :nvr,
5015 => :nevr,
5016 => :nevra,
5017 => :headercolor,
5018 => :verbose,
5019 => :epochnum,
}
# See 'rpmTagType' enum in rpmtag.h
TYPE = {
0 => :null,
1 => :char,
2 => :int8,
3 => :int16,
4 => :int32,
5 => :int64,
6 => :string,
7 => :binary,
8 => :string_array,
9 => :i18nstring,
}
def initialize(tag_id, type, offset, count, data)
@tag = tag_id
@type = type
@offset = offset
@count = count
@data = data
end # def initialize
def tag
TAG[@tag] or @tag
end # def tag
def tag_as_int
@tag
end
def type
TYPE[@type] or @type
end # def type
def value
if !@value
# TODO(sissel): Handle @count of string_array, int32, etc?
case type
when :string
# string at offset up to first null
@value = @data[@offset .. -1][/^[^\0]+/]
when :i18nstring
# string at offset up to first null
@value = @data[@offset .. -1][/^[^\0]+/]
when :string_array
@value = @data[@offset .. -1].split("\0")[0 ... @count]
when :binary
@value = @data[@offset, @count]
when :int32
@value = @data[@offset, 4 * count].unpack("N" * count)
when :int16
@value = @data[@offset, 2 * count].unpack("n" * count)
end # case type
end # if !@value
return @value
end # def value
end # class RPMFile::Tag