about summary refs log tree commit diff
diff options
context:
space:
mode:
authorEelco Dolstra <eelco.dolstra@logicblox.com>2012-07-02T16·42-0400
committerEelco Dolstra <eelco.dolstra@logicblox.com>2012-07-02T16·42-0400
commit6ec7460af1103a23e4d331e0c8a56283350175c5 (patch)
treec10a34cceed9819fcf4ff5b749ceddaf771d5583
parent6b1e671ac6cc0376474dd8c1403582ae1db01576 (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.
-rw-r--r--scripts/download-from-binary-cache.pl.in15
-rwxr-xr-xscripts/nix-push.in6
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;