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 | |
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')
-rw-r--r-- | scripts/download-from-binary-cache.pl.in | 15 | ||||
-rwxr-xr-x | scripts/nix-push.in | 6 |
2 files changed, 13 insertions, 8 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 { diff --git a/scripts/nix-push.in b/scripts/nix-push.in index c388429ec2ef..51106657bb0c 100755 --- a/scripts/nix-push.in +++ b/scripts/nix-push.in @@ -218,12 +218,12 @@ for (my $n = 0; $n < scalar @storePaths; $n++) { } } - my $infoName = hashString("sha256", 1, $storePath); + my $pathHash = substr(basename($storePath), 0, 32); if ($localCopy) { - my $dst = "$localArchivesDir/$infoName.narinfo"; + my $dst = "$localArchivesDir/$pathHash.narinfo"; if ($force || ! -f $dst) { - my $tmp = "$localArchivesDir/.tmp.$$.$infoName"; + my $tmp = "$localArchivesDir/.tmp.$$.$pathHash.narinfo"; open INFO, ">$tmp" or die; print INFO "$info" or die; close INFO or die; |