From f7526febe4e60e3da61664a5fb58ff19a5882ded Mon Sep 17 00:00:00 2001 From: Eelco Dolstra Date: Wed, 9 Apr 2003 13:03:00 +0000 Subject: [PATCH] * A garbage collector for installed packages. nix-collect-garbage doesn't actually delete any packages, it just prints their descriptor hashes. So we can do nix info $(nix-collect-garbage) to print out the ids of the packages that would be deleted, and nix delpkg $(nix-collect-garbage) to actually delete them. --- scripts/Makefile.am | 2 +- scripts/nix-collect-garbage | 22 ++++++++++++++++++++++ 2 files changed, 23 insertions(+), 1 deletion(-) create mode 100755 scripts/nix-collect-garbage diff --git a/scripts/Makefile.am b/scripts/Makefile.am index 4e2eada86b..4140cdf5b3 100644 --- a/scripts/Makefile.am +++ b/scripts/Makefile.am @@ -1,4 +1,4 @@ -bin_SCRIPTS = nix-generate-regscript nix-switch +bin_SCRIPTS = nix-generate-regscript nix-switch nix-collect-garbage install-exec-local: $(INSTALL) -d $(sysconfdir)/profile.d diff --git a/scripts/nix-collect-garbage b/scripts/nix-collect-garbage new file mode 100755 index 0000000000..adaba5b7c6 --- /dev/null +++ b/scripts/nix-collect-garbage @@ -0,0 +1,22 @@ +#! /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 () { + chomp; + $alive{$_} = 1; +} +close HASHES; + +open HASHES, "nix listinst |"; +while () { + chomp; + if (!$alive{$_}) { + print "$_\n"; + } +} +close HASHES;