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

Reply via email to