Delete manifests in "nix-channel --remove" or when a binary cache is available

This commit is contained in:
Eelco Dolstra 2012-09-13 11:35:46 -04:00
parent 6c4ac29917
commit b14717ab90
4 changed files with 47 additions and 35 deletions

View file

@ -9,7 +9,7 @@ use Fcntl ':flock';
use Nix::Config; use Nix::Config;
our @ISA = qw(Exporter); our @ISA = qw(Exporter);
our @EXPORT = qw(readManifest writeManifest updateManifestDB addPatch); our @EXPORT = qw(readManifest writeManifest updateManifestDB addPatch deleteOldManifests);
sub addNAR { sub addNAR {
@ -364,4 +364,22 @@ EOF
} }
# Delete all old manifests downloaded from a given URL.
sub deleteOldManifests {
my ($url, $curUrlFile) = @_;
for my $urlFile (glob "$Nix::Config::manifestDir/*.url") {
next if defined $curUrlFile && $urlFile eq $curUrlFile;
open URL, "<$urlFile" or die;
my $url2 = <URL>;
chomp $url2;
close URL;
next unless $url eq $url2;
my $base = $urlFile; $base =~ s/.url$//;
unlink "${base}.url";
unlink "${base}.nixmanifest";
}
}
return 1; return 1;

View file

@ -20,6 +20,7 @@ my $maxParallelRequests = int($Nix::Config::config{"binary-caches-parallel-conne
$maxParallelRequests = 1 if $maxParallelRequests < 1; $maxParallelRequests = 1 if $maxParallelRequests < 1;
my $debug = ($ENV{"NIX_DEBUG_SUBST"} // "") eq 1; my $debug = ($ENV{"NIX_DEBUG_SUBST"} // "") eq 1;
open(STDERR, ">>/dev/tty") if $debug;
my ($dbh, $queryCache, $insertNAR, $queryNAR, $insertNARExistence, $queryNARExistence); my ($dbh, $queryCache, $insertNAR, $queryNAR, $insertNARExistence, $queryNARExistence);

View file

@ -4,6 +4,7 @@ use strict;
use File::Basename; use File::Basename;
use File::Path qw(mkpath); use File::Path qw(mkpath);
use Nix::Config; use Nix::Config;
use Nix::Manifest;
my $manifestDir = $Nix::Config::manifestDir; my $manifestDir = $Nix::Config::manifestDir;
@ -65,6 +66,8 @@ sub addChannel {
sub removeChannel { sub removeChannel {
my ($name) = @_; my ($name) = @_;
readChannels; readChannels;
my $url = $channels{$name};
deleteOldManifests($url . "/MANIFEST", undef) if defined $url;
delete $channels{$name}; delete $channels{$name};
writeChannels; writeChannels;
@ -101,6 +104,7 @@ sub update {
my $extraAttrs = ""; my $extraAttrs = "";
if ($? == 0 && $binaryCacheURL ne "") { if ($? == 0 && $binaryCacheURL ne "") {
$extraAttrs .= "binaryCacheURL = \"$binaryCacheURL\"; "; $extraAttrs .= "binaryCacheURL = \"$binaryCacheURL\"; ";
deleteOldManifests($origUrl, undef);
} else { } else {
# No binary cache, so pull the channel manifest. # No binary cache, so pull the channel manifest.
mkdir $manifestDir, 0755 unless -e $manifestDir; mkdir $manifestDir, 0755 unless -e $manifestDir;

View file

@ -84,18 +84,7 @@ sub processURL {
symlink("$manifest", "$finalPath") symlink("$manifest", "$finalPath")
or die "cannot link `$finalPath to `$manifest'"; or die "cannot link `$finalPath to `$manifest'";
# Delete all old manifests downloaded from this URL. deleteOldManifests($origUrl, $urlFile);
for my $urlFile2 (glob "$manifestDir/*.url") {
next if $urlFile eq $urlFile2;
open URL, "<$urlFile2" or die;
my $url2 = <URL>;
chomp $url2;
close URL;
next unless $origUrl eq $url2;
my $base = $urlFile2; $base =~ s/.url$//;
unlink "${base}.url";
unlink "${base}.nixmanifest";
}
} }
while (@ARGV) { while (@ARGV) {