summary refs log tree commit diff
path: root/scripts/download-using-manifests.pl.in
diff options
context:
space:
mode:
authorEelco Dolstra <e.dolstra@tudelft.nl>2010-12-13 08:39:10 +0000
committerEelco Dolstra <e.dolstra@tudelft.nl>2010-12-13 08:39:10 +0000
commit542fc6906297fcb72cbcb01d688c2f27819e0cf7 (patch)
treed94975f3c6473bd6059bc25862080a759ccb9013 /scripts/download-using-manifests.pl.in
parent4d5777681309947041ecc297074f4ce537547553 (diff)
downloadguix-542fc6906297fcb72cbcb01d688c2f27819e0cf7.tar.gz
* When doing a query (e.g. `nix-store -r --dry-run'), don't make a lot
  of expensive calls to `nix-store --check-validity'.

Diffstat (limited to 'scripts/download-using-manifests.pl.in')
-rw-r--r--scripts/download-using-manifests.pl.in16
1 files changed, 12 insertions, 4 deletions
diff --git a/scripts/download-using-manifests.pl.in b/scripts/download-using-manifests.pl.in
index 47ff09e609..29321bff94 100644
--- a/scripts/download-using-manifests.pl.in
+++ b/scripts/download-using-manifests.pl.in
@@ -12,6 +12,10 @@ STDOUT->autoflush(1);
 my $manifestDir = ($ENV{"NIX_MANIFESTS_DIR"} or "@localstatedir@/nix/manifests");
 my $logFile = "@localstatedir@/log/nix/downloads";
 
+# For queries, skip expensive calls to nix-hash etc.  We're just
+# estimating the expected download size.
+my $fast = 1;
+
 
 # Load all manifests.
 my %narFiles;
@@ -33,7 +37,11 @@ for my $manifest (glob "$manifestDir/*.nixmanifest") {
 
 sub isValidPath {
     my $p = shift;
-    return system("$binDir/nix-store --check-validity '$p' 2> /dev/null") == 0;
+    if ($fast) {
+        return -e $p;
+    } else {
+        return system("$binDir/nix-store --check-validity '$p' 2> /dev/null") == 0;
+    }
 }
 
 
@@ -51,7 +59,6 @@ sub parseHash {
 # given path.
 sub computeSmallestDownload {
     my $targetPath = shift;
-    my $fast = shift;
     
     # Build a graph of all store paths that might contribute to the
     # construction of $targetPath, and the special node "start".  The
@@ -207,7 +214,7 @@ if ($ARGV[0] eq "--query") {
             print scalar @references, "\n";
             print "$_\n" foreach @references;
 
-            my @path = computeSmallestDownload $storePath, 1;
+            my @path = computeSmallestDownload $storePath;
             
             my $downloadSize = 0;
             while (scalar @path > 0) {
@@ -241,6 +248,7 @@ elsif ($ARGV[0] ne "--substitute") {
 
 die unless scalar @ARGV == 2;
 my $targetPath = $ARGV[1];
+$fast = 0;
 
 
 # Create a temporary directory.
@@ -273,7 +281,7 @@ foreach my $localPath (@{$localPathList}) {
 
 
 # Compute the shortest path.
-my @path = computeSmallestDownload $targetPath, 0;
+my @path = computeSmallestDownload $targetPath;
 die "don't know how to produce $targetPath\n" if scalar @path == 0;