forked from lix-project/lix
![Eelco Dolstra](/assets/img/avatar_default.png)
Renamed `fstateRefs' to `fstateRequisites'. The semantics of this function is that it returns a list of all paths necessary to realise a given expression. For a derive expression, this is the union of requisites of the inputs; for a slice expression, it is the path of each element in the slice. Also included are the paths of the expressions themselves. Optionally, one can also include the requisites of successor expressions (to recycle intermediate results). * `nix-switch' now distinguishes between an expression and its normal form. Usually, only the normal form is registered as a root of the garbage collector. With the `--source-root' flag, it will also register the original expression as a root. * `nix-collect-garbage' now has a flag `--keep-successors' which causes successors not to be included in the list of garbage paths. * `nix-collect-garbage' now has a flag `--invert' which will print all paths that should *not* be garbage collected.
40 lines
893 B
Perl
Executable file
40 lines
893 B
Perl
Executable file
#! /usr/bin/perl -w
|
|
|
|
my $linkdir = "@localstatedir@/nix/links";
|
|
my $storedir = "@prefix@/store";
|
|
|
|
my %alive;
|
|
|
|
my $keepsuccessors = 0;
|
|
my $invert = 0;
|
|
|
|
foreach my $arg (@ARGV) {
|
|
if ($arg eq "--keep-successors") { $keepsuccessors = 1; }
|
|
if ($arg eq "--invert") { $invert = 1; }
|
|
else { die "unknown argument `$arg'" };
|
|
}
|
|
|
|
my $extraarg = "";
|
|
if ($keepsuccessors) { $extraarg = "--include-successors"; };
|
|
open HASHES, "nix --query --requisites $extraarg \$(cat $linkdir/*.id) |" or die "in `nix -qrh'";
|
|
while (<HASHES>) {
|
|
chomp;
|
|
$alive{$_} = 1;
|
|
if ($invert) { print "$_\n"; };
|
|
}
|
|
close HASHES;
|
|
|
|
exit 0 if ($invert);
|
|
|
|
opendir(DIR, $storedir) or die "cannot opendir $storedir: $!";
|
|
my @names = readdir(DIR);
|
|
closedir DIR;
|
|
|
|
foreach my $name (@names) {
|
|
next if ($name eq "." || $name eq "..");
|
|
$name = "$storedir/$name";
|
|
if (!$alive{$name}) {
|
|
print "$name\n";
|
|
}
|
|
}
|