--- builds_bin/update_repos 2010/11/21 22:12:14 1.61 +++ builds_bin/update_repos 2010/11/22 05:16:02 1.62 @@ -222,24 +222,47 @@ foreach my $ver ( sort { $a <=> $b } key } else { $cmp->{delete}++; } - } elsif ( $repos->{$cmp->{repo}}->{orig}) { + } elsif ( $repos->{$cmp->{repo}}->{orig} ) { $orig{$cmp->{nvra}}++; unless ( $repos->{$cmp->{repo}}->{base} ) { my $tag = sprintf '%s%s/%s-%s', $distrepo->{$ver}->{$cmp->{repo}}, $cmp->{name}, $cmp->{ver}, $cmp->{rel}; qx(touch $tag/PUSHED) if ! $opts{t} && -d $tag && ! -f "$tag/PUSHED"; } - } else { - if ( $cmp->{src} && $cmp->{delete} && $cmp->{oldrepo} && $reposrc{$cmp->{oldrepo}}) { + } elsif ( $cmp->{src} ) { + if ( $cmp->{delete} && $cmp->{oldrepo} && $reposrc{$cmp->{oldrepo}}) { $cmp->{repo} = $cmp->{oldrepo}; delete $cmp->{delete}; } - if ( $cmp->{src} && $reposrc{$cmp->{repo}} ) { + if ( $reposrc{$cmp->{repo}} ) { $reposrc{$cmp->{repo}}->{srpm} = $cmp; $srpm = $cmp if ! $srpm; - } elsif ( $seen{$cmp->{nvra}}->{repo} ne $cmp->{repo} ) { + } elsif ( $seen{$cmp->{nvra}}->{repo} ne $cmp->{repo} && ! $cmp->{done} ) { $cmp->{delete}++; } + } elsif ( $seen{$cmp->{nvra}}->{repo} ne $cmp->{repo} ) { + $cmp->{delete}++; + } + } elsif ( $cmp->{src} ) { + if ( $reposrc{$cmp->{repo}} && $reposrc{$cmp->{repo}}->{srpm} && $reposrc{$cmp->{repo}}->{srpm}->{oldrepo} ne $cmp->{repo} ) { + $acnt->{$cmp->{repo}}->{$cmp->{rpm}->as_nvre}->{src} = [ + grep { $_ ne $reposrc{$cmp->{repo}}->{srpm} } @{$acnt->{$cmp->{repo}}->{$cmp->{rpm}->as_nvre}->{src}} + ]; + + if ( @{$reposrc{$cmp->{repo}}->{srpm}->{repos}} == 1 ) { + $reposrc{$cmp->{repo}}->{srpm}->{repo} = $reposrc{$cmp->{repo}}->{srpm}->{oldrepo}; + delete $reposrc{$cmp->{repo}}->{srpm}->{oldrepo}; + delete $reposrc{$cmp->{repo}}->{srpm}->{delete}; + delete $reposrc{$cmp->{repo}}->{srpm}->{repos}; + delete $reposrc{$cmp->{repo}}->{srpm}->{done}; + $seen{$cmp->{nvra}} = $cmp if $seen{$cmp->{nvra}} eq $reposrc{$cmp->{repo}}->{srpm}; + } else { + warn "How did I get here??"; + } + } else { + $seen{$cmp->{nvra}} = $cmp if $seen{$cmp->{nvra}}->{repo} ne $cmp->{repo}; } + $srpm = $cmp if ! $srpm && $cmp->{src}; + $reposrc{$cmp->{repo}}->{srpm} = $cmp if $reposrc{$cmp->{repo}}; } } elsif ($repos->{$cmp->{repo}}->{stage} ) { $cmp->{delete}++; @@ -313,7 +336,7 @@ foreach my $ver ( sort { $a <=> $b } key $cmp->{latest}++ if ! $seen{$cmp->{nvra}} || $cmp->{src}; } $seen{$cmp->{nvra}} = $cmp unless $seen{$cmp->{nvra}}; - push @{$acnt->{$cmp->{repo}}->{$cmp->{rpm}->as_nvre}->{$cmp->{src} ? 'src' : $cmp->{rpm}->arch}}, $cmp; + push @{$acnt->{$cmp->{repo}}->{$cmp->{rpm}->as_nvre}->{$cmp->{src} ? 'src' : $cmp->{rpm}->arch}}, $cmp unless $cmp->{done}; } $cmp->{done}++; }