about summary refs log tree commit diff
path: root/scripts/maintenance
diff options
context:
space:
mode:
authorEelco Dolstra <e.dolstra@tudelft.nl>2006-02-22T14·13+0000
committerEelco Dolstra <e.dolstra@tudelft.nl>2006-02-22T14·13+0000
commit928cce592279615fbe7b29fc0f47bb2506297116 (patch)
tree301348011cd62eec0e5f2159e4c319c799fe9675 /scripts/maintenance
parentfcec32a2c56589da9224aa62daf94c6492250015 (diff)
* Directory for nix.cs.uu.nl manifest / cache maintenance scripts.
Diffstat (limited to 'scripts/maintenance')
-rw-r--r--scripts/maintenance/gc-commands2
-rwxr-xr-xscripts/maintenance/gc-releases.pl76
2 files changed, 78 insertions, 0 deletions
diff --git a/scripts/maintenance/gc-commands b/scripts/maintenance/gc-commands
new file mode 100644
index 000000000000..26459c738e8c
--- /dev/null
+++ b/scripts/maintenance/gc-commands
@@ -0,0 +1,2 @@
+./gc-releases.pl /data/webserver/dist/*/*/MANIFEST > dead
+cat dead | xargs mv --target-directory=/data/webserver/trash/
diff --git a/scripts/maintenance/gc-releases.pl b/scripts/maintenance/gc-releases.pl
new file mode 100755
index 000000000000..9c81a68e835b
--- /dev/null
+++ b/scripts/maintenance/gc-releases.pl
@@ -0,0 +1,76 @@
+#! /usr/bin/perl -w -I.
+
+use strict;
+use readmanifest;
+
+
+# Read the archive directories.
+my @archives = ();
+my %archives;
+
+sub readDir {
+    my $dir = shift;
+    opendir(DIR, "$dir") or die "cannot open `$dir': $!";
+    my @as = readdir DIR;
+    foreach my $archive (@as) {
+        push @archives, $archive;
+        $archives{$archive} = "$dir/$archive";
+    }
+    closedir DIR;
+}
+
+readDir "/data/webserver/dist/nix-cache";
+readDir "/data/webserver/dist/test";
+readDir "/data/webserver/dist/patches";
+
+print STDERR scalar @archives, "\n";
+
+
+# Read the manifests.
+my %narFiles;
+my %patches;
+my %successors;
+
+foreach my $manifest (@ARGV) {
+    print STDERR "loading $manifest\n";
+    if (readManifest($manifest, \%narFiles, \%patches, \%successors, 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"
+            unless defined $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'"
+            unless defined $archives{$basename};
+    }
+}
+
+
+# Print out the dead archives.
+foreach my $archive (@archives) {
+    next if $archive eq "." || $archive eq "..";
+    if (!defined $usedFiles{$archive}) {
+        print $archives{$archive}, "\n";
+    }
+}