More or less this function allow you to switch easily from perl-RPM
to perl-URPM.
Just replace then in the code:
tie %header, "RPM::Header", $rpm
by
get_rpm_header(\%header, $rpm)
-=-=-=-=-=-=-
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;
1
}
--
Warly