diff options
author | Eelco Dolstra <eelco.dolstra@logicblox.com> | 2012-07-02T16·42-0400 |
---|---|---|
committer | Eelco Dolstra <eelco.dolstra@logicblox.com> | 2012-07-02T16·42-0400 |
commit | 6ec7460af1103a23e4d331e0c8a56283350175c5 (patch) | |
tree | c10a34cceed9819fcf4ff5b749ceddaf771d5583 /scripts/download-from-binary-cache.pl.in | |
parent | 6b1e671ac6cc0376474dd8c1403582ae1db01576 (diff) |
Binary caches: use a better key
Use the hash part of the store path as a key rather than a hash of the store path. This is enough to get the desired privacy property.
Diffstat (limited to 'scripts/download-from-binary-cache.pl.in')
-rw-r--r-- | scripts/download-from-binary-cache.pl.in | 15 |
1 files changed, 10 insertions, 5 deletions
diff --git a/scripts/download-from-binary-cache.pl.in b/scripts/download-from-binary-cache.pl.in index b930fd8d72c1..10b7c0175e3a 100644 --- a/scripts/download-from-binary-cache.pl.in +++ b/scripts/download-from-binary-cache.pl.in @@ -1,6 +1,7 @@ #! @perl@ -w @perlFlags@ use strict; +use File::Basename; use Nix::Config; use Nix::Store; @@ -12,9 +13,11 @@ sub getInfoFrom { my ($storePath, $pathHash, $binaryCacheUrl) = @_; my $infoUrl = "$binaryCacheUrl/$pathHash.narinfo"; #print STDERR "checking $infoUrl...\n"; - my $s = `$Nix::Config::curl --fail --silent --location ${infoUrl}`; + my $s = `$Nix::Config::curl --fail --silent --location $infoUrl`; if ($? != 0) { - #print STDERR "GOT CURL REPLY ", $? >> 8, "\n"; + my $status = $? >> 8; + print STDERR "could not download ‘$infoUrl’ (curl returned status ", $? >> 8, ")\n" + if $status != 22 && $status != 37; return undef; } my ($storePath2, $url, $compression, $fileHash, $fileSize, $narHash, $narSize, $deriver); @@ -51,7 +54,7 @@ sub getInfoFrom { sub getInfo { my ($storePath) = @_; - my $pathHash = hashString("sha256", 1, $storePath); + my $pathHash = substr(basename($storePath), 0, 32); cache: foreach my $binaryCacheUrl (@binaryCacheUrls) { my $info = getInfoFrom($storePath, $pathHash, $binaryCacheUrl); @@ -65,7 +68,7 @@ sub getInfo { sub downloadBinary { my ($storePath) = @_; - my $pathHash = hashString("sha256", 1, $storePath); + my $pathHash = substr(basename($storePath), 0, 32); cache: foreach my $binaryCacheUrl (@binaryCacheUrls) { my $info = getInfoFrom($storePath, $pathHash, $binaryCacheUrl); @@ -124,7 +127,9 @@ if ($ARGV[0] eq "--query") { elsif ($ARGV[0] eq "--substitute") { my $storePath = $ARGV[1] or die; - exit 1 unless downloadBinary($storePath); + if (!downloadBinary($storePath)) { + print STDERR "could not download ‘$storePath’ from any binary cache\n"; + } } else { |