--- builds_bin/update_repos 2007/07/04 19:31:23 1.16 +++ builds_bin/update_repos 2007/10/16 21:36:23 1.19 @@ -17,12 +17,12 @@ 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", @@ -34,8 +34,9 @@ my @repos = ( "$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", @@ -46,6 +47,7 @@ my @srcrepos = ( "/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", @@ -60,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} ) { @@ -70,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; @@ -80,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"), @@ -103,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; @@ -110,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{/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}, @@ -138,6 +151,7 @@ foreach my $rpm ( reverse grep { $_->{re } } +print "\nFinding development packages...\n"; my @devel; my %versions; foreach my $rpm ( grep { $_->{repo} eq 'builds' } @rpms ) { @@ -166,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"); @@ -184,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++; @@ -200,8 +218,12 @@ 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}++; + } } } } @@ -210,6 +232,7 @@ print "\n"; foreach my $repo ( sort keys %copy ) { 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/"); } } @@ -226,7 +249,7 @@ foreach my $repo ( sort keys %changed ) chomp $dir; print "rebuilding $dir...\n"; system(qw(createrepo), "$dir"); - system(qw(rm -rf), "$dir/.olddata"); + system(qw(rm -rf), "$dir/.olddata") if -d "$dir/.olddata"; system(qw(repoview), "$dir"); - system(qw(rm -rf), "$dir/.repodata"); + system(qw(rm -rf), "$dir/.repodata") if "$dir/.repodata"; }