From 7ca997263680025a7cf5386a44efcb0a9949315e Mon Sep 17 00:00:00 2001 From: Eelco Dolstra Date: Wed, 9 Dec 2009 19:36:54 +0000 Subject: [PATCH] * When doing a nix-pull, remove old manifests downloaded from the same URL. This prevents lots of old cruft accumulating in /nix/var/nix/manifests. --- scripts/nix-channel.in | 5 ----- scripts/nix-pull.in | 26 +++++++++++++++++++++++--- 2 files changed, 23 insertions(+), 8 deletions(-) diff --git a/scripts/nix-channel.in b/scripts/nix-channel.in index db5d35c6e..3688063cb 100644 --- a/scripts/nix-channel.in +++ b/scripts/nix-channel.in @@ -88,11 +88,6 @@ sub update { # source. if (-W "$stateDir/manifests") { - # Remove all the old manifests. - for my $manifest (glob "$stateDir/manifests/*.nixmanifest") { - unlink $manifest or die "cannot remove `$manifest': $!"; - } - # Pull cache manifests. foreach my $url (@channels) { #print "pulling cache manifest from `$url'\n"; diff --git a/scripts/nix-pull.in b/scripts/nix-pull.in index bb041f0a6..e2a0cc1fa 100644 --- a/scripts/nix-pull.in +++ b/scripts/nix-pull.in @@ -51,7 +51,7 @@ sub processURL { # First see if a bzipped manifest is available. if (system("@curl@ --fail --silent --head '$url'.bz2 > /dev/null") == 0) { - print "obtaining list of Nix archives at `$url.bz2'...\n"; + print "fetching list of Nix archives at `$url.bz2'...\n"; my $bzipped = downloadFile "$url.bz2"; $manifest = "$tmpDir/MANIFEST"; @@ -92,11 +92,31 @@ sub processURL { my $hash = `$binDir/nix-hash --flat '$manifest'` or die "cannot hash `$manifest'"; chomp $hash; + + my $urlFile = "$manifestDir/$baseName-$hash.url"; + open URL, ">$urlFile" or die "cannot create `$urlFile'"; + print URL "$url"; + close URL; my $finalPath = "$manifestDir/$baseName-$hash.nixmanifest"; - - system("@coreutils@/ln", "-sfn", "$manifest", "$finalPath") == 0 + + unlink $finalPath if -e $finalPath; + + symlink("$manifest", "$finalPath") or die "cannot link `$finalPath to `$manifest'"; + + # Delete all old manifests downloaded from this URL. + for my $urlFile2 (glob "$manifestDir/*.url") { + next if $urlFile eq $urlFile2; + open URL, "<$urlFile2" or die; + my $url2 = ; + chomp $url2; + close URL; + next unless $url eq $url2; + my $base = $urlFile2; $base =~ s/.url$//; + unlink "${base}.url"; + unlink "${base}.nixmanifest"; + } } while (@ARGV) {