#!/usr/bin/perl use strict; use warnings; use RPM2; use Data::Dumper; my $rpm_flags = RPM2->vsf_nodsa; my $build_dir = "/builds/RPMS"; my @repositories = qw( /mirrors/centos/4/updates/i386/RPMS/ /mirrors/centos/4/os/i386/CentOS/RPMS/ /mirrors/dag/redhat/el4/en/i386/dag/RPMS/ /mirrors/atrpms/el4-i386/atrpms/stable/ /mirrors/dries/redhat/el3/en/i386/RPMS.dries /mirrors/fedora/updates/3/i386/ /mirrors/fedora/3/i386/os/Fedora/RPMS/ /builds/rpms/RPMS/i686/ /builds/rpms/RPMS/i586/ /builds/rpms/RPMS/i386/ /builds/rpms/RPMS/noarch/ ); opendir RPMS, $build_dir or die "Couldn't opendir $build_dir"; my %rpms = map { my $x = RPM2->open_package("$build_dir/$_", $rpm_flags); $x->tag('NAME') => $x; } grep { /\.rpm$/ } readdir RPMS; closedir RPMS; my %repos; foreach my $repo (reverse @repositories) { my %temp_repo = map { $_ => $repo } grep { /\.rpm$/ } readdir RPMS if ( opendir RPMS, $repo ); closedir RPMS; %repos = (%repos, %temp_repo); } foreach my $rpm ( sort keys %rpms ) { my (@headers, $header); my $rpmfix = $rpm; $rpmfix =~ s@\+@\\+@g; @headers = (); foreach my $file ( grep { /^$rpmfix-[0-9].*\.rpm$/ } keys %repos ) { $header = RPM2->open_package("$repos{$file}/$file", $rpm_flags); if ($header ge $rpms{$rpm} || $header->filename =~ m#/centos.*/(os|updates)/#) { push @headers, $header; } } @headers = reverse sort { $a cmp $b } @headers; if (grep { $_->filename =~ m#/centos/[\d.]+/updates/# } @headers) { @headers = grep { $_->filename !~ m#/centos/[\d.]+/os/# } @headers; } if (grep { $_->filename =~ m#/centos/[\d.]+/(updates|os)/# || $_->filename =~ m#/dag/# } @headers) { @headers = grep { $_->filename !~ m#/fedora/# } @headers; @headers = grep { $_->filename !~ m#/atrpms/# } @headers; } if ($#headers < 0) { print "$rpm\n"; print " ***** can't find $rpm in any repository *****\n"; } elsif ( $headers[0]->filename !~ m#/centos/[\d.]+/(updates|os)/# || $headers[0] ne $rpms{$rpm} ) { if (grep { $_ ne $rpms{$rpm} } @headers) { print "$rpm\n"; foreach $header ( @headers) { my $path = $header->filename; $path =~ s@^(.*)/.*@$1@; print " " . ($header eq $rpms{$rpm} ? "** " : "-- ") . $header->as_nvre . " ($path)\n"; } } } }