forked from lix-project/lix
* Convenience option `nix-collect-garbage -d' (--delete-old): removes
old generations of *all* profiles in /nix/var/nix/profiles, then runs the garbage collector. Quick way to get rid of all old stuff. Of course, one cannot roll back to earlier points in time after this.
This commit is contained in:
parent
89ac8db74f
commit
2e210b2387
|
@ -1,2 +1,42 @@
|
|||
#! @shell@ -e
|
||||
exec @bindir@/nix-store --gc "$@"
|
||||
#! @perl@ -w
|
||||
|
||||
use strict;
|
||||
|
||||
my $profilesDir = "@localstatedir@/nix/profiles";
|
||||
|
||||
|
||||
# Process the command line arguments.
|
||||
my @args = ();
|
||||
my $removeOld = 0;
|
||||
|
||||
for my $arg (@ARGV) {
|
||||
if ($arg eq "--delete-old" || $arg eq "-d") {
|
||||
$removeOld = 1;
|
||||
} else {
|
||||
push @args, $arg;
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
# 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;
|
||||
|
||||
foreach my $name (sort (readdir DIR)) {
|
||||
$name = $profilesDir . "/" . $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";
|
||||
}
|
||||
}
|
||||
|
||||
closedir DIR or die;
|
||||
|
||||
}
|
||||
|
||||
|
||||
# Run the actual garbage collector.
|
||||
exec "@bindir@/nix-store", "--gc", @args;
|
||||
|
|
Loading…
Reference in a new issue