diff options
Diffstat (limited to 'modules/mirror_cleaner/files/orphans_cleaner.pl')
| -rwxr-xr-x | modules/mirror_cleaner/files/orphans_cleaner.pl | 41 |
1 files changed, 22 insertions, 19 deletions
diff --git a/modules/mirror_cleaner/files/orphans_cleaner.pl b/modules/mirror_cleaner/files/orphans_cleaner.pl index ff4f12e5..73e08912 100755 --- a/modules/mirror_cleaner/files/orphans_cleaner.pl +++ b/modules/mirror_cleaner/files/orphans_cleaner.pl @@ -10,7 +10,7 @@ use File::Basename; use File::Copy; use File::Path qw(make_path); -my @arches = ('i586','x86_64'); +my @arches = ('i586','x86_64', 'aarch64'); my @sections = ('core','nonfree','tainted'); my @medias = ('backports', 'backports_testing', 'release', 'updates', 'updates_testing'); my $move_delay = 60*60*24*14; @@ -23,21 +23,22 @@ my %hash ; my ($filename, $srpm, $dest_rpm); -my ($source_hdlist, $binary_hdlist, $rpm_path); +my ($source_hdlist, $binary_hdlist, $rpm_path, $srpm_path); foreach my $a ( @arches ) { foreach my $s ( @sections ) { foreach my $m ( @medias ) { $rpm_path = "$path/$a/media/$s/$m"; + $srpm_path = "$path/SRPMS/$s/$m"; $binary_hdlist = "$rpm_path/media_info/hdlist.cz"; - $source_hdlist = "$path/SRPMS/$s/$m/media_info/hdlist.cz"; + $source_hdlist = "$srpm_path/media_info/hdlist.cz"; - next if not -f $source_hdlist; - next if not -f $binary_hdlist; + next if not -f $source_hdlist; + next if not -f $binary_hdlist; - next if stat($source_hdlist)->size() <= 64; - next if stat($binary_hdlist)->size() <= 64; + next if stat($source_hdlist)->size() <= 64; + next if stat($binary_hdlist)->size() <= 64; open(my $hdfh, "zcat '$binary_hdlist' 2>/dev/null |") or die "Can't open $_"; while (my $hdr = stream2header($hdfh)) { @@ -54,19 +55,21 @@ foreach my $a ( @arches ) { } close($hdfh); - foreach my $v ( values %hash ) + foreach my $s ( keys %hash ) { - foreach my $rpm ( @{$v} ) { - $rpm = "$rpm_path/$rpm"; - # sometimes, packages are removed without hdlist to be updated - next if not -f "$rpm"; - if (time() > $move_delay + stat("$rpm")->ctime()) { - ( $dest_rpm = $rpm ) =~ s/$path/$dest_path/; - my $dir = dirname $dest_rpm; - make_path $dir if not -d $dir; - move($rpm, $dest_rpm) - } - } + # Be safe, maybe hdlists were not in sync + next if -f "$srpm_path/$s"; + foreach my $rpm ( @{$hash{$s}} ) { + $rpm = "$rpm_path/$rpm"; + # sometimes, packages are removed without hdlist to be updated + next if not -f "$rpm"; + if (time() > $move_delay + stat("$rpm")->ctime()) { + ( $dest_rpm = $rpm ) =~ s/$path/$dest_path/; + my $dir = dirname $dest_rpm; + make_path $dir if not -d $dir; + move($rpm, $dest_rpm) + } + } } } } |
