tvl-depot/scripts/maintenance/gc-releases.pl

59 lines
1.5 KiB
Perl
Raw Normal View History

2011-08-27 18:59:32 +02:00
#! /var/run/current-system/sw/bin/perl -w -I. -I..
use strict;
2011-08-27 18:59:32 +02:00
use NixManifest;
2006-02-22 15:35:19 +01:00
use readcache;
2011-08-27 18:59:32 +02:00
use File::Basename;
# Read the manifests.
my %narFiles;
my %patches;
foreach my $manifest (@ARGV) {
print STDERR "loading $manifest\n";
if (readManifest($manifest, \%narFiles, \%patches, 1) < 3) {
# die "manifest `$manifest' is too old (i.e., for Nix <= 0.7)\n";
}
}
# Find the live archives.
my %usedFiles;
foreach my $narFile (keys %narFiles) {
foreach my $file (@{$narFiles{$narFile}}) {
$file->{url} =~ /\/([^\/]+)$/;
my $basename = $1;
die unless defined $basename;
# print $basename, "\n";
$usedFiles{$basename} = 1;
print STDERR "missing archive `$basename'\n"
2006-02-22 15:35:19 +01:00
unless defined $readcache::archives{$basename};
}
}
foreach my $patch (keys %patches) {
foreach my $file (@{$patches{$patch}}) {
$file->{url} =~ /\/([^\/]+)$/;
my $basename = $1;
die unless defined $basename;
# print $basename, "\n";
$usedFiles{$basename} = 1;
die "missing archive `$basename'"
2006-02-22 15:35:19 +01:00
unless defined $readcache::archives{$basename};
}
}
# Print out the dead archives.
2006-02-22 15:35:19 +01:00
foreach my $archive (keys %readcache::archives) {
next if $archive eq "." || $archive eq "..";
if (!defined $usedFiles{$archive}) {
2011-08-27 18:59:32 +02:00
my $file = $readcache::archives{$archive};
print "$file\n";
my $hashFile = dirname($file) . "/.hash." . basename($file);
print "$hashFile\n" if -e $hashFile;
}
}