sub get_rpm_header { my ($header, $rpm) = @_; my $urpm = new URPM; my $id = $urpm->parse_rpm($rpm, keep_all_tags => 1); my $pkg = $urpm->{depslist}[$id] or print "ERROR get_rpm_header: could not parse $rpm\n" and return; $header->{NAME} = $pkg->name; $header->{EPOCH} = $pkg->epoch || ''; $header->{VERSION} = $pkg->version; $header->{RELEASE} = $pkg->release; $header->{GROUP} = $pkg->group; $header->{ARCH} = $pkg->arch; $header->{SUMMARY} = $pkg->summary; foreach my $t (['requires', 'REQUIRE', 'REQUIRENAME'], ['provides', 'PROVIDES', 'PROVIDES'], ['obsoletes', 'OBSOLETE', 'OBSOLETES']) { my ($func, $pref, $first) = @$t; foreach my $r ($pkg->$func){ my ($name, $a_flag, $version) = $r =~ /([^[]*)(?:\[(.*) (.*)\])?/; push @{$header->{$first}}, $name; my $d_flag = $flag{$a_flag}; push @{$header->{"${pref}FLAGS"}}, $d_flag; push @{$header->{"${pref}VERSION"}}, $version } } my ($i, %dir); foreach my $r ($pkg->files){ my ($dir, $name) = $r =~ m,(.*/)([^/]*),; push @{$header->{BASENAMES}}, $name; if (! defined $dir{$dir}) { $dir{$dir} = $i++; push @{$header->{DIRNAMES}}, $dir } push @{$header->{DIRINDEXES}}, $dir{$dir}; } $header->{FILEUSERNAME} = [ $pkg->files_owner ]; $header->{CHANGELOGTIME} = [ $pkg->changelog_time ]; $header->{CHANGELOGNAME} = [ $pkg->changelog_name ]; $header->{CHANGELOGTEXT} = [ $pkg->changelog_text ]; $header->{BUILDTIME} = $pkg->buildtime; $header->{SOURCERPM} = $pkg->sourcerpm; 1 }