--- builds_bin/update_repos 2007/11/05 03:01:24 1.21 +++ builds_bin/update_repos 2007/11/08 17:12:31 1.26 @@ -128,15 +128,22 @@ foreach my $smever ( sort { $a <=> $b } $archs = (); foreach my $pkg ( @pkgs ) { - next if $pkg->{done} || $pkg->{obsolete} || $pkg->{rpm}->is_source_package || ! $repos->{$pkg->{repo}} || rprop($pkg, 'stage'); + next if $pkg->{done} || $pkg->{obsolete} || $pkg->{rpm}->is_source_package || ! $repos->{$pkg->{repo}}; printline('bold black', 1, ' - ', $pkg->{rpm}->filename) if $opts{d}; my $orig = 0; # Find names of packages in same or higher repos my %names = names($pkg, @pkgs); + # Stage packages should never be most current + if ( rprop($pkg, 'stage') ) { + printline('dark blue', 1, ' - checking stage') if $opts{d}; + tagpkg($pkg, 'obsolete'); + next; + } + # Move packages from base/builds to correct area - if ( rprop($pkg, 'base') || rprop($pkg, 'builds') ) { + elsif ( rprop($pkg, 'base') || rprop($pkg, 'builds') ) { printline('dark blue', 1, ' - checking base/builds') if $opts{d}; my $repo = $names{$pkg->{name}} && $names{$pkg->{name}} > 1 ? $devel2 : $devel1; if ( $pkg->{nonbase} ) { @@ -182,7 +189,9 @@ foreach my $smever ( sort { $a <=> $b } tagpkg($cmp, 'inuse'); $pkg->{srpm}->{latest}++; } - tagpkg($cmp, 'inuse') if $pkg->{repo} eq $cmp->{repo} || rprop($cmp, 'base') || rprop($cmp, 'builds'); + if ( $pkg->{repo} eq $cmp->{repo} || rprop($cmp, 'base') || rprop($cmp, 'builds') || ( $cmp->{oldrepo} && $pkg->{repo} eq $cmp->{oldrepo} ) ) { + tagpkg($cmp, 'inuse') + } } next if $pkg->{srpm} && $pkg->{srpm}->{rpm} eq $pkg->{rpm}; @@ -239,7 +248,7 @@ foreach my $smever ( sort { $a <=> $b } printline('dark blue', 1, ' - checking source packages') if $opts{d}; if ( ! $pkg->{srpm} ) { printline('bold yellow on_red', 1, ' - ', $pkg->{rpm}->filename, ' (missing source ', $pkg->{rpm}->sourcerpm, ')'); - } elsif ( $pkg->{srpm}->{repo} ne $pkg->{repo} ) { + } elsif ( $pkg->{srpm}->{repo} ne $pkg->{repo} && ( ! $pkg->{srpm}->{oldrepo} || $pkg->{srpm}->{oldrepo} ne $pkg->{repo} ) ) { movepkg($pkg->{srpm}, $pkg->{repo}, 0); } unless ( $orig ) { @@ -248,12 +257,6 @@ foreach my $smever ( sort { $a <=> $b } } } } - printline('bold black', 1, ' - missing stage packages') if $opts{d}; - movepkg($_, $stage, 0) foreach grep { $_->{latest} && $_->{latest} == 1 } @pkgs; - - printline('bold black', 1, ' - obsolete packages') if $opts{d}; - movepkg($_, 'delete') foreach grep { ! rprop($_, 'base') && ! $_->{done} && ( $_->{obsolete} || ( $_->{rpm}->is_source_package && ! $_->{inuse} ) ) } @pkgs; - printline('bold black', 1, ' - arch count check') if $opts{d}; foreach my $r ( keys %$archs ) { foreach my $p ( keys %{$archs->{$r}} ) { @@ -267,6 +270,12 @@ foreach my $smever ( sort { $a <=> $b } } } } + + printline('bold black', 1, ' - missing stage packages') if $opts{d}; + movepkg($_, $stage, 0) foreach grep { $_->{latest} && $_->{latest} == 1 } @pkgs; + + printline('bold black', 1, ' - obsolete packages') if $opts{d}; + movepkg($_, 'delete') foreach grep { ! rprop($_, 'base') && ! $_->{done} && ( $_->{obsolete} || ( $_->{rpm}->is_source_package && ! $_->{inuse} ) ) } @pkgs; } printline('white', 0, "Finished processing.\n"); @@ -293,7 +302,7 @@ foreach my $smever ( sort { $a <=> $b } printline('white', 0, "Finished copying/moving.\n"); foreach my $repo ( sort keys %repochg ) { - next if ! $repos->{$repo} || $repos->{$repo}->{base} || $repos->{$repo}->{builds}; + next if ! $repos->{$repo} || $repos->{$repo}->{base} || $repos->{$repo}->{builds} || $repos->{$repo}->{stage}; foreach my $arch ( @archs ) { my $dir = $distrepo->{$rel}->{repo} . "$repo/$arch"; $dir = qx(readlink -f $dir); @@ -336,25 +345,25 @@ sub dest { my ($pkg, @repos) = @_; my @d = (); foreach my $repo ( @repos ) { - my $base = $distrepo->{$rel}->{repo}; + my $base = $distrepo->{$rel}->{repo} . $repo; $base = $distrepo->{$rel}->{stage} if $repos->{$repo}->{stage}; if ( $pkg->{arch} eq 'noarch' ) { - push @d, "$base$repo/i386/" . + push @d, "$base/i386/" . ( $repos->{$repo}->{os} ? $distrepo->{$rel}->{os} : 'RPMS/' ) . basename $pkg->{rpm}->filename; - push @d, "$base$repo/x86_64/" . + push @d, "$base/x86_64/" . ( $repos->{$repo}->{os} ? $distrepo->{$rel}->{os} : 'RPMS/' ) . basename $pkg->{rpm}->filename; } elsif ( $pkg->{arch} =~ m{^(i[356]86)$} ) { - push @d, "$base$repo/i386/" . + push @d, "$base/i386/" . ( $repos->{$repo}->{os} ? $distrepo->{$rel}->{os} : 'RPMS/' ) . basename $pkg->{rpm}->filename; } elsif ( $pkg->{arch} eq 'x86_64' ) { - push @d, "$base$repo/x86_64/" . + push @d, "$base/x86_64/" . ( $repos->{$repo}->{os} ? $distrepo->{$rel}->{os} : 'RPMS/' ) . basename $pkg->{rpm}->filename; } elsif ( $pkg->{arch} eq 'zsrc' ) { - push @d, "$base$repo/SRPMS/" . + push @d, "$base/SRPMS/" . basename $pkg->{rpm}->filename; } else { printline('bold yellow on_red', 1, ' - ', $pkg->{rpm}->filename, ' (bad arch: ', $pkg->{arch}, ')'); @@ -456,10 +465,6 @@ sub loadpkg { if ($@) { printline('bold yellow on_red', 1, "Corrupt package $_"); return; } eval { my $sig = $pkg->siggpg }; my $nosig = ! $@; - if ( $nosig && ! -f "$HOME/.rpmpass" ) { - printline('bold yellow on_red', 1, ' - ', $pkg->filename, ' (missing signature)'); - return; - } my ($srcname, $version, $release) = ($pkg->is_source_package ? basename $pkg->filename : $pkg->sourcerpm) =~ m{^([^/]*)-([^-]+)-([^-]+)\.\w+.rpm}; foreach my $repo ( keys %{$skippkg->{$rel}} ) { return if (dirname $pkg->filename) =~ m{/$repo/} && grep { $_ eq $srcname } @{$skippkg->{$rel}->{$repo}}; } @@ -471,7 +476,10 @@ sub loadpkg { } elsif ( (dirname $pkg->filename) =~ m{\d/(sme[^/]+)/} ) { $reponame = $1; } - + if ( $nosig && ( ! -f "$HOME/.rpmpass" || $reponame eq 'builds' ) ) { + printline('bold yellow on_red', 1, ' - ', $pkg->filename, ' (missing signature)'); + return; + } push @rpms, { base => $srcname, name => $pkg->name, repo => $reponame, @@ -483,7 +491,9 @@ sub loadpkg { nosig => $nosig, }; $sources{$srcname}++; - $latest{$pkg->name} = $rpms[$#rpms] if ! $pkg->is_source_package && ( ! $latest{$pkg->name} || $pkg gt $latest{$pkg->name}->{rpm} ); + if ( ! $pkg->is_source_package && ! $repos->{$reponame}->{stage} ) { + $latest{$pkg->name} = $rpms[$#rpms] if ! $latest{$pkg->name} || $pkg gt $latest{$pkg->name}->{rpm}; + } } sub loadbase { @@ -504,7 +514,7 @@ sub loadbase { return if grep { $_ eq $srcname } @{$skippkg->{$rel}->{$repo}}; $pkgrepo = $repo; return unless $pkg->is_source_package || $cmp; - return if ! $pkg->is_source_package && $pkg gt $cmp->{rpm} && rprop($cmp, 'base') && rprop($cmp, 'prio') > $repos->{$pkgrepo}->{prio}; + return if ! $pkg->is_source_package && $pkg ge $cmp->{rpm} && rprop($cmp, 'base') && rprop($cmp, 'prio') > $repos->{$pkgrepo}->{prio}; last; } }