about summary refs log tree commit diff
diff options
context:
space:
mode:
-rwxr-xr-xscripts/nix-collect-garbage22
-rwxr-xr-xscripts/nix-collect-garbage.in25
2 files changed, 25 insertions, 22 deletions
diff --git a/scripts/nix-collect-garbage b/scripts/nix-collect-garbage
deleted file mode 100755
index adaba5b7c65b..000000000000
--- a/scripts/nix-collect-garbage
+++ /dev/null
@@ -1,22 +0,0 @@
-#! /usr/bin/perl -w
-
-my $prefix = $ENV{"NIX"} || "/nix"; # !!! use prefix
-my $linkdir = "$prefix/var/nix/links";
-
-my %alive;
-
-open HASHES, "nix closure \$(cat $linkdir/*.hash) |";
-while (<HASHES>) {
-	chomp;
-	$alive{$_} = 1;
-}
-close HASHES;
-
-open HASHES, "nix listinst |";
-while (<HASHES>) {
-	chomp;
-	if (!$alive{$_}) {
-	    print "$_\n";
-	}
-}
-close HASHES;
diff --git a/scripts/nix-collect-garbage.in b/scripts/nix-collect-garbage.in
new file mode 100755
index 000000000000..1506416b23a5
--- /dev/null
+++ b/scripts/nix-collect-garbage.in
@@ -0,0 +1,25 @@
+#! /usr/bin/perl -w
+
+my $linkdir = "@localstatedir@/nix/links";
+my $storedir = "@prefix@/store";
+
+my %alive;
+
+open HASHES, "nix -qrh \$(cat $linkdir/*.hash) |" or die "in `nix -qrh'";
+while (<HASHES>) {
+	chomp;
+	$alive{$_} = 1;
+}
+close HASHES;
+
+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";
+    }
+}