--- builds_bin/update_repos 2007/06/03 04:13:57 1.11 +++ builds_bin/update_repos 2007/10/16 21:36:23 1.19 @@ -17,24 +17,26 @@ my $builds = '/builds/rpms'; my $stagedir = '/builds'; my $arch = `uname -i`; chomp $arch; +#$arch = 'x86_64'; my @repos = ( - "$releasedir/$smerel/smeos/$arch/CentOS/RPMS", - "$releasedir/$smerel/smeos/$arch/SME/RPMS", - "$releasedir/$smerel/smeos/$arch/RPMS", "$releasedir/$smerel/smeos/$arch/SME", + "$releasedir/$smerel/smeos/$arch/SME/RPMS", + "$releasedir/$smerel/smeos/$arch/CentOS/RPMS", "$releasedir/$smerel/smeupdates/$arch/RPMS", "$releasedir/$smerel/smeupdates-testing/$arch/RPMS", "$releasedir/$smerel/smeextras/$arch/RPMS", "$releasedir/$smerel/smeaddons/$arch/RPMS", + "$releasedir/$smerel/smecontribs/$arch/RPMS", "$releasedir/$smerel/smetest/$arch/RPMS", "$releasedir/$smerel/smedev/$arch/RPMS", "$builds/RPMS/$arch", "$builds/RPMS/i586", "$builds/RPMS/i686", "$builds/RPMS/noarch", - "$stagedir/RPMS", + "$stagedir/RPMS-$arch", ); +@repos = grep { ! m{/i[56]86$} } @repos if $arch eq 'x86_64'; my @srcrepos = ( "/mirrors/centos/$centosrel/fasttrack/SRPMS", @@ -43,7 +45,9 @@ my @srcrepos = ( "/mirrors/centos/$centosrel/extras/SRPMS", "/mirrors/rpmforge/dag/source", "/mirrors/atrpms/src/el$centosrel-$arch/atrpms/stable", + "/mirrors/atrpms/src/el$centosrel-$arch/atrpms/testing", "/mirrors/fedora/epel/$centosrel/SRPMS", + "/mirrors/fedora/epel/testing/$centosrel/SRPMS", "/mirrors/fedora/core/updates/$fedorarel/SRPMS", "/mirrors/fedora/core/$fedorarel/source/SRPMS", "/mirrors/fedora/extras/$fedorarel/SRPMS", @@ -58,6 +62,7 @@ my %sources; my %changed; my %copy; +print "\nReading repos...\n"; foreach my $repo ( @repos ) { my $r = $repo; if ( $repo =~ m{$stagedir/RPMS} ) { @@ -68,7 +73,14 @@ foreach my $repo ( @repos ) { $r = $1; } - if ( $r ne 'builds' ) { + if ( $r eq $stagedir ) { + opendir SRPMS, "$r/SRPMS-$arch" or next; + foreach my $srpm ( grep { /\.rpm$/ } readdir SRPMS ) { + $srpms{$r}{$srpm} = 0; + $sources{$srpm} = "$r/SRPMS-$arch"; + } + closedir SRPMS; + } elsif ( $r ne 'builds' ) { opendir SRPMS, "$r/SRPMS" or next; foreach my $srpm ( grep { /\.rpm$/ } readdir SRPMS ) { $srpms{$r}{$srpm} = 0; @@ -78,6 +90,7 @@ foreach my $repo ( @repos ) { } opendir RPMS, $repo or next; + print " - $repo\n"; foreach my $pkg ( reverse sort map { RPM2->open_package("$repo/$_", $rpm_flags); } grep { /\.rpm$/ } readdir RPMS ) { my $rpm = { name => $pkg->tag("NAME"), filename => join("-", map { $pkg->tag($_) } qw/name version release/) . "." . $pkg->tag("ARCH"), @@ -101,6 +114,7 @@ foreach my $repo ( @repos ) { closedir RPMS; } +print "\nReading source repos...\n"; foreach my $repo ( reverse @srcrepos ) { my %temp_repo = map { $_ => $repo } grep { /\.rpm$/ } readdir SRPMS if ( opendir SRPMS, $repo ); closedir SRPMS; @@ -108,12 +122,13 @@ foreach my $repo ( reverse @srcrepos ) { %sources = (%sources, %temp_repo); } +print "\nFinding latest packages...\n"; my @latest; -foreach my $rpm ( reverse grep { $_->{repo} =~ m{^$releasedir/$smerel/} && $_->{repo} !~ m{/smedev$} } @rpms ) { +foreach my $rpm ( reverse grep { $_->{repo} =~ m{^$releasedir/$smerel/} && $_->{repo} !~ m{/sme(addons|contribs|dev|extras)$} } @rpms ) { unless ( grep { $_->{name} eq $rpm->{name} && $_->{rpm} gt $rpm->{rpm} } @latest ) { push @latest, $rpm; unless ( grep { $_->{repo} eq $stagedir && $_->{filename} eq $rpm->{filename} } @rpms ) { - push @{$copy{"$stagedir/RPMS"}}, $rpm->{rpm}->filename; + push @{$copy{"$stagedir/RPMS-$arch"}}, $rpm->{rpm}->filename; push @rpms, { name => $rpm->{name}, filename => $rpm->{filename}, version => $rpm->{version}, @@ -130,6 +145,13 @@ foreach my $rpm ( grep { $_->{repo} eq $ $rpm->{repo} = 'deleted' unless grep { $_->{filename} eq $rpm->{filename} } @latest; } +foreach my $rpm ( reverse grep { $_->{repo} =~ m{^$releasedir/$smerel/} && $_->{repo} =~ m{/sme(addons|contribs|extras)$} } @rpms ) { + unless ( grep { $_->{name} eq $rpm->{name} && $_->{rpm} gt $rpm->{rpm} } @latest ) { + push @latest, $rpm; + } +} + +print "\nFinding development packages...\n"; my @devel; my %versions; foreach my $rpm ( grep { $_->{repo} eq 'builds' } @rpms ) { @@ -158,7 +180,7 @@ foreach my $rpm ( grep { $_->{repo} =~ m $rpm->{repo} = 'deleted' unless grep { $_->{filename} eq $rpm->{filename} } @devel; } -print "\n"; +print "\nFinding source packages...\n"; foreach my $rpm ( grep { $_->{repo} !~ m{^(builds|deleted)$} } @rpms ) { my $src; my $srpm = $rpm->{rpm}->tag("SOURCERPM"); @@ -176,9 +198,13 @@ foreach my $rpm ( grep { $_->{repo} !~ m my $repo = $rpm->{repo}; foreach my $source ( @sources ) { if ( $sources{$source} ) { - unless ( -f "$repo/SRPMS/$source" ) { - push @{$copy{"$repo/SRPMS"}}, "$sources{$source}/$source"; - $changed{$repo}++ unless $repo eq $stagedir; + if ($repo eq $stagedir) { + push @{$copy{"$repo/SRPMS-$arch"}}, "$sources{$source}/$source" unless -f "$repo/SRPMS-$arch/$source"; + } else { + unless ( -f "$repo/SRPMS/$source" ) { + push @{$copy{"$repo/SRPMS"}}, "$sources{$source}/$source"; + $changed{$repo}++; + } } $srpms{$repo}{$source}++; $found++; @@ -192,22 +218,27 @@ my @remove; foreach my $repo ( keys %srpms ) { foreach my $rpm ( keys %{$srpms{$repo}} ) { unless ( $srpms{$repo}{$rpm} ) { - push @remove, "$repo/SRPMS/$rpm"; - $changed{$repo}++ unless $repo eq $stagedir; + if ($repo eq $stagedir) { + push @remove, "$repo/SRPMS-$arch/$rpm"; + } else { + push @remove, "$repo/SRPMS/$rpm"; + $changed{$repo}++; + } } } } print "\n"; foreach my $repo ( sort keys %copy ) { - foreach my $rpm ( @{$copy{$repo}} ) { + foreach my $rpm ( keys %{{ map { $_ => 1 } @{$copy{$repo}} }} ) { print "copying $rpm to $repo/\n"; + mkdir "$repo" unless -d "$repo"; system(qw(cp --preserve=timestamps), $rpm, "$repo/"); } } print "\n"; -foreach my $rpm ( @remove, map { $_->{rpm}->filename } grep { $_->{repo} eq 'deleted' } @rpms ) { +foreach my $rpm ( keys %{{ map { $_ => 1 } (@remove, map { $_->{rpm}->filename } grep { $_->{repo} eq 'deleted' } @rpms) }} ) { print "removing $rpm\n"; unlink $rpm; } @@ -218,5 +249,7 @@ foreach my $repo ( sort keys %changed ) chomp $dir; print "rebuilding $dir...\n"; system(qw(createrepo), "$dir"); + system(qw(rm -rf), "$dir/.olddata") if -d "$dir/.olddata"; system(qw(repoview), "$dir"); + system(qw(rm -rf), "$dir/.repodata") if "$dir/.repodata"; }