Follow redirects early to ensure consistency between the manifest and the tarball

Without this change, if the URL is a redirect that changes in between,
we can get a manifest that doesn't match the tarball.
This commit is contained in:
Eelco Dolstra 2012-04-14 21:04:22 +02:00
parent ca3d9f8b31
commit 1d0bafb74d
1 changed files with 8 additions and 0 deletions

View File

@ -88,6 +88,14 @@ sub update {
my $exprs = "";
foreach my $name (keys %channels) {
my $url = $channels{$name};
# Check if $url is a redirect. If so, follow it now to ensure
# consistency if the redirection is changed between
# downloading the manifest and the tarball.
my $headers = `$Nix::Config::curl --silent --head '$url'`;
die "$0: unable to check `$url'\n" if $? != 0;
$headers =~ s/\r//g;
$url = $1 if $headers =~ /^Location:\s*(.*)\s*$/m;
# Pull the channel manifest.
system("$Nix::Config::binDir/nix-pull", "--skip-wrong-store", "$url/MANIFEST") == 0