--- builds_bin/update_repos 2007/12/11 00:04:40 1.30 +++ builds_bin/update_repos 2007/12/11 06:24:14 1.31 @@ -14,7 +14,7 @@ umask 002; $| = 1; my %opts; -getopts( 'otr:', \%opts ); +getopts( 'osqtr:', \%opts ); $opts{r} ||= ''; my $rpm_flags = RPM2->vsf_nosha1header | RPM2->vsf_nomd5header | RPM2->vsf_nodsaheader | RPM2->vsf_norsaheader; @@ -76,10 +76,6 @@ my $baserepo = { '~Ssmeos/~A/SME/~O' => '/mirrors/centos/~C/updates/~A/RPMS/' => 'centos', '/mirrors/centos/~C/os/~A/CentOS/~O' => 'centos', '/mirrors/centos/~C/extras/~A/RPMS/' => 'centos', - '/mirrors/centos-qa/CentOS/~C/fasttrack/~A/RPMS/' => 'centos', - '/mirrors/centos-qa/CentOS/~C/updates/~A/RPMS/' => 'centos', - '/mirrors/centos-qa/CentOS/~C/os/~A/CentOS/~O' => 'centos', - '/mirrors/centos-qa/CentOS/~C/extras/~A/RPMS/' => 'centos', '/mirrors/fedora/epel/~C/~A/' => 'epel', '/mirrors/fedora/epel/testing/~C/~A/' => 'epel', '/mirrors/fedora/extras/~F/~A/' => 'fedora-extras', @@ -93,6 +89,13 @@ my $baserepo = { '~Ssmeos/~A/SME/~O' => '/mirrors/fedora/core/updates/~F/~A/' => 'fedora', }; +if ( $opts{q} ) { + $baserepo->{'/mirrors/centos-qa/CentOS/~C/fasttrack/~A/RPMS/'} = 'centos'; + $baserepo->{'/mirrors/centos-qa/CentOS/~C/updates/~A/RPMS/'} = 'centos'; + $baserepo->{'/mirrors/centos-qa/CentOS/~C/os/~A/CentOS/~O'} = 'centos'; + $baserepo->{'/mirrors/centos-qa/CentOS/~C/extras/~A/RPMS/'} = 'centos'; +} + my $skippkg = { '7' => { 'centos' => { map { $_ => 1 } ( 'horde', 'imp-h3', 'ingo-h3', 'turba-h3', 'vim' ) }, 'epel' => { map { $_ => 1 } ( 'perl-Razor-Agent' ) }, 'rpmforge' => { map { $_ => 1 } ( 'perl-Test-Inline' ) }, @@ -154,27 +157,25 @@ foreach my $smever ( sort { $a <=> $b } foreach my $pkg ( sort { $b->{rpm} cmp $a->{rpm} } @{$rpms->{$base}->{rpms}} ) { next if $pkg->{done}; - if ( $rpms->{$base}->{vers}->{$pkg->{svr}} ) { - foreach my $tmp ( @{$rpms->{$base}->{vers}->{$pkg->{svr}}} ) { + my $tmp = $pkg->{svr}; + SRC: { + $rpms->{$base}->{vers}->{$tmp} && last SRC; + ($tmp = $pkg->{svr}) =~ s{\.el\d\.at$}{} && $rpms->{$base}->{vers}->{$tmp} && last SRC; + ($tmp = $pkg->{svr}) =~ s{\.el\d\.at$}{} && $rpms->{$base}->{vers}->{$tmp} && last SRC; + ($tmp = $pkg->{svr}) =~ s{\.el\d(\.rf)$}{$1} && $rpms->{$base}->{vers}->{$tmp} && last SRC; + ($tmp = $pkg->{svr}) =~ s{(\d+)\.\d+\.el\d(\.rf)$}{$1$2} && $rpms->{$base}->{vers}->{$tmp} && last SRC; + ($tmp = $pkg->{svr}) =~ s{\.el\d\.rf$}{.dag} && $rpms->{$base}->{vers}->{$tmp} && last SRC; + ($tmp = $pkg->{svr}) =~ s{(\d+)\.\d+\.el\d\.rf$}{$1.dag} && $rpms->{$base}->{vers}->{$tmp} && last SRC; + ($tmp = $pkg->{svr}) =~ s{\.el\d$}{} && $rpms->{$base}->{vers}->{$tmp} && last SRC; + ($tmp = $pkg->{svr}) =~ s{(-\d+)\.\d+\.el\d$}{$1} && $rpms->{$base}->{vers}->{$tmp} && last SRC; + ($tmp = $pkg->{svr}) =~ s{\.centos\d$}{} && $rpms->{$base}->{vers}->{$tmp} && last SRC; + ($tmp = $pkg->{svr}) =~ s{\.el\d\.sme$}{} && $rpms->{$base}->{vers}->{$tmp} && last SRC; + } + if ( $rpms->{$base}->{vers}->{$tmp} ) { + foreach $tmp ( @{$rpms->{$base}->{vers}->{$tmp}} ) { $tmp->{svr} = $pkg->{svr}; - push @{$rpms->{$base}->{rpms}}, $tmp; - } - } else { - my $tmp = $pkg->{svr}; - ($tmp = $pkg->{svr}) =~ s{\.el\d\.at$}{} && $rpms->{$base}->{vers}->{$tmp} && last; - ($tmp = $pkg->{svr}) =~ s{\.el\d(\.rf)$}{$1} && $rpms->{$base}->{vers}->{$tmp} && last; - ($tmp = $pkg->{svr}) =~ s{(\d+)\.\d+\.el\d(\.rf)$}{$1$2} && $rpms->{$base}->{vers}->{$tmp} && last; - ($tmp = $pkg->{svr}) =~ s{\.el\d\.rf$}{.dag} && $rpms->{$base}->{vers}->{$tmp} && last; - ($tmp = $pkg->{svr}) =~ s{(\d+)\.\d+\.el\d\.rf$}{$1.dag} && $rpms->{$base}->{vers}->{$tmp} && last; - ($tmp = $pkg->{svr}) =~ s{\.el\d$}{} && $rpms->{$base}->{vers}->{$tmp} && last; - ($tmp = $pkg->{svr}) =~ s{(-\d+)\.\d+\.el\d$}{$1} && $rpms->{$base}->{vers}->{$tmp} && last; - ($tmp = $pkg->{svr}) =~ s{\.centos\d$}{} && $rpms->{$base}->{vers}->{$tmp} && last; - ($tmp = $pkg->{svr}) =~ s{\.el\d\.sme$}{} && $rpms->{$base}->{vers}->{$tmp} && last; - if ( $rpms->{$base}->{vers}->{$tmp} ) { - foreach $tmp ( @{$rpms->{$base}->{vers}->{$tmp}} ) { - $tmp->{svr} = $pkg->{svr}; - push @{$rpms->{$base}->{rpms}}, $tmp; - } + push @{$rpms->{$base}->{rpms}}, $tmp unless $tmp->{added}; + $tmp->{added}++; } } @@ -182,23 +183,23 @@ foreach my $smever ( sort { $a <=> $b } my %pkgs = (); my %reposrc = (); my $srpm = undef; - foreach my $cmp ( sort { $repos->{$b->{repo}}->{prio} <=> $repos->{$a->{repo}}->{prio} || $a->{src} <=> $b->{src} } @{$rpms->{$base}->{rpms}} ) { + foreach my $cmp ( sort { $a->{src} <=> $b->{src} || $repos->{$b->{repo}}->{prio} <=> $repos->{$a->{repo}}->{prio} } @{$rpms->{$base}->{rpms}} ) { next unless $cmp->{svr} eq $pkg->{svr}; if ( ! $track{repo} || $repos->{$cmp->{repo}}->{prio} > $repos->{$track{repo}}->{prio} ) { - $track{repo} = $cmp->{repo}; - $track{svr} = $cmp->{svr}; - } - if ( $cmp->{svr} eq $track{svr} ) { if ( $cmp->{src} ) { - $srpm = $cmp unless $srpm; - if ( $reposrc{$cmp->{repo}} ) { - $reposrc{$cmp->{repo}}->{srpm} = $cmp; - $cmp->{latest}++ if $reposrc{$cmp->{repo}}->{latest}; - } elsif ( ! $repos->{$cmp->{repo}}->{base} ) { + if ( ! $track{repo} ) { $cmp->{delete}++; + $cmp->{done}++; + next; } - } elsif ( $seen{$cmp->{nvra}} ) { + } else { + $track{repo} = $cmp->{repo}; + $track{svr} = $cmp->{svr}; + } + } + if ( $cmp->{svr} eq $track{svr} ) { + if ( $seen{$cmp->{nvra}} ) { if ( $track{repo} ne $cmp->{repo} ) { if ($repos->{$cmp->{repo}}->{stage} ) { if ( $seen{$cmp->{nvra}}->{latest} ) { @@ -208,6 +209,8 @@ foreach my $smever ( sort { $a <=> $b } } } elsif ( $repos->{$cmp->{repo}}->{orig}) { $orig{$cmp->{nvra}}++; + } elsif ( $cmp->{src} && $reposrc{$cmp->{repo}} ) { + $reposrc{$cmp->{repo}}->{srpm} = $cmp; } elsif ( $seen{$cmp->{nvra}}->{repo} ne $cmp->{repo} ) { $cmp->{delete}++; } @@ -215,6 +218,7 @@ foreach my $smever ( sort { $a <=> $b } } elsif ($repos->{$cmp->{repo}}->{stage} ) { $cmp->{delete}++; } else { + $srpm = $cmp if ! $srpm && $cmp->{src}; my $dest = $repos->{$track{repo}}->{prio} > $repos->{$devel2}->{prio} ? $track{repo} : $devel2; $dest = pkgdest($cmp, $devel1, $dest, $rpms->{$base}->{rpms}); $dest = $devel1 if verrel($cmp, $dest, \%counts); @@ -222,12 +226,17 @@ foreach my $smever ( sort { $a <=> $b } push @{$cmp->{repos}}, $dest; if ( $repos->{$cmp->{repo}}->{orig} ) { $orig{$cmp->{nvra}}++; + } elsif ( $cmp->{src} && $reposrc{$cmp->{repo}} ) { + $reposrc{$cmp->{repo}}->{srpm} = $cmp; } else { $cmp->{delete}++; } $cmp->{oldrepo} = $cmp->{repo} unless $cmp->{oldrepo}; $cmp->{repo} = $dest; } + if ( $cmp->{src} && $reposrc{$cmp->{repo}} ) { + $reposrc{$cmp->{repo}}->{srpm} = $cmp; + } } } else { if ( $track{repo} eq $cmp->{repo} ) { @@ -240,10 +249,10 @@ foreach my $smever ( sort { $a <=> $b } $cmp->{delete}++; } } - $reposrc{$cmp->{repo}} = $cmp unless $reposrc{$cmp->{repo}} || $cmp->{delete} || $repos->{$cmp->{repo}}->{base}; unless ( $repos->{$cmp->{repo}}->{orig} || ( $cmp->{delete} && ! $cmp->{repos} ) ) { $pkgs{$cmp->{nvra}}++; $latest{$cmp->{base}} = $cmp->{svr} if $repos->{$cmp->{repo}}->{inc} && ! $latest{$cmp->{base}}; + $reposrc{$cmp->{repo}} = $cmp unless $reposrc{$cmp->{repo}} || $cmp->{src} || $repos->{$cmp->{repo}}->{stage}; unless ( $seen{$cmp->{nvra}} ) { $seen{$cmp->{nvra}} = $cmp; $cmp->{latest}++ if $latest{$cmp->{base}} && $cmp->{svr} eq $latest{$cmp->{base}} && $repos->{$cmp->{repo}}->{inc}; @@ -253,21 +262,18 @@ foreach my $smever ( sort { $a <=> $b } $cmp->{done}++; } if ( $srpm ) { - foreach my $r ( keys %reposrc ) { - next if $repos->{$r}->{orig}; + foreach my $r ( sort { $repos->{$b}->{prio} <=> $repos->{$a}->{prio} } keys %reposrc ) { unless ( $reposrc{$r}->{srpm} ) { - push @{$srpm->{repos}}, $r; - $pkgs{$srpm->{nvra}}++; - $orig{$srpm->{nvra}}++ if $repos->{$srpm->{repo}}->{orig}; + unshift @{$srpm->{repos}}, $r; $srpm->{oldrepo} = $srpm->{repo} unless $srpm->{oldrepo}; $srpm->{repo} = $r; $reposrc{$r}->{srpm} = $srpm; } } - } elsif ( scalar keys %pkgs ) { - print "\n * missing source (", $pkg->{svr}, ")\n"; + } elsif ( scalar keys %pkgs && $opts{s} ) { + print "\n * missing source (", $pkg->{repo}, ", ", $pkg->{svr}, ")\n"; } - print "\n * missing originals (", $pkg->{svr}, ")\n" if $opts{o} && scalar keys %orig != scalar keys %pkgs; + print "\n * missing originals (", $pkg->{repo}, ", ", $pkg->{svr}, ")\n" if $opts{o} && scalar keys %orig != scalar keys %pkgs; } foreach my $r ( keys %$acnt ) { @@ -299,7 +305,7 @@ foreach my $smever ( sort { $a <=> $b } my $src = $pkg->{rpm}->filename; if ( $pkg->{nosig} ) { - print "sign package (", basename($pkg->{rpm}->filename), ")\n"; + print "sign package (", $pkg->{repo}, ", ", basename($pkg->{rpm}->filename), ")\n"; unless ( $opts{t} ) { qx(cat $HOME/.rpmpass | setsid rpm --addsign $src >& /dev/null); if ($?) { @@ -344,7 +350,7 @@ foreach my $smever ( sort { $a <=> $b } qx(rm -f $src) if exists $pkg->{delete} && ! $opts{t}; } elsif ( $pkg->{delete} ) { print "delete from ", $pkg->{repo}, " (", basename($pkg->{rpm}->filename), ")\n"; - qx(rm -f $src); + qx(rm -f $src) unless $opts{t}; $repochg{$pkg->{repo}}++ unless $repos->{$pkg->{repo}}->{base} || $repos->{$pkg->{repo}}->{stage}; } } @@ -382,6 +388,7 @@ sub verrel { my $repo = shift; my $counts = shift; + return 0 if $pkg->{src}; $counts->{$repo}->{$pkg->{ver}}->{$pkg->{rel}}++; return 1 if $repos->{$repo}->{ver} && scalar keys %{$counts->{$repo}} > $repos->{$repo}->{ver}; return 1 if $repos->{$repo}->{rel} && scalar keys %{$counts->{$repo}->{$pkg->{ver}}} > $repos->{$repo}->{rel}; @@ -395,7 +402,8 @@ sub pkgdest { my $pkgs = shift; foreach my $cmp ( @$pkgs ) { - next if $cmp->{src} || $cmp->{name} ne $pkg->{name} || $repos->{$cmp->{repo}}->{prio} <= $repos->{$dest}->{prio}; + next if $cmp->{src} || $repos->{$cmp->{repo}}->{prio} <= $repos->{$dest}->{prio}; + next if $pkg->{name} ne ( $pkg->{src} ? $cmp->{base} : $cmp->{name} ); if ( $repos->{$cmp->{repo}}->{prio} > $repos->{$hirepo}->{prio} ) { $dest = $hirepo; last;