* Remove old generations in all directories under

/nix/var/nix/profiles, not just in that directory itself.  (NixOS
  puts profiles in /nix/var/nix/profiles/per-user.)
This commit is contained in:
Eelco Dolstra 2007-03-13 11:30:57 +00:00
parent 917e06bf63
commit eb2dd4815c
1 changed files with 15 additions and 6 deletions

View File

@ -21,22 +21,31 @@ for my $arg (@ARGV) {
# If `-d' was specified, remove all old generations of all profiles.
# Of course, this makes rollbacks to before this point in time
# impossible.
if ($removeOld) {
opendir DIR, $profilesDir or die;
sub removeOldGenerations;
sub removeOldGenerations {
my $dir = shift;
foreach my $name (sort (readdir DIR)) {
$name = $profilesDir . "/" . $name;
my $dh;
opendir $dh, $dir or die;
foreach my $name (sort (readdir $dh)) {
next if $name eq "." || $name eq "..";
$name = $dir . "/" . $name;
if (-l $name && (readlink($name) =~ /link/)) {
print STDERR "removing old generations of profile $name\n";
system("@bindir@/nix-env", "-p", $name, "--delete-generations", "old");
}
elsif (! -l $name && -d $name) {
removeOldGenerations $name;
}
}
closedir DIR or die;
closedir $dh or die;
}
removeOldGenerations $profilesDir if $removeOld;
# Run the actual garbage collector.
exec "@bindir@/nix-store", "--gc", @args;