about summary refs log tree commit diff
path: root/scripts/nix-copy-closure.in
diff options
context:
space:
mode:
authorEelco Dolstra <e.dolstra@tudelft.nl>2009-03-28T21·10+0000
committerEelco Dolstra <e.dolstra@tudelft.nl>2009-03-28T21·10+0000
commit47706e3924cf592a4e0085eb2e45f0e84b67f933 (patch)
treea8774f45ed36fa8798f81470ed8ce07736e91253 /scripts/nix-copy-closure.in
parent6e946c8e72e0fd2baa58cab484a34debd2ae906d (diff)
* nix-copy-closure: compute the closure in one call to nix-store,
  which is much faster.

Diffstat (limited to 'scripts/nix-copy-closure.in')
-rw-r--r--scripts/nix-copy-closure.in34
1 files changed, 9 insertions, 25 deletions
diff --git a/scripts/nix-copy-closure.in b/scripts/nix-copy-closure.in
index 688bec72824d..4f31953b922a 100644
--- a/scripts/nix-copy-closure.in
+++ b/scripts/nix-copy-closure.in
@@ -55,30 +55,18 @@ while (@ARGV) {
 if ($toMode) { # Copy TO the remote machine.
 
     my @allStorePaths;
-    my %storePathsSeen;
 
-    foreach my $storePath (@storePaths) {
-        # $arg might be a symlink to the store, so resolve it.
-        my $storePath2 = (`$binDir/nix-store --query --resolve '$storePath'`
-            or die "cannot resolve `$storePath'");
-        chomp $storePath2;
-
-        # Get the closure of this path.
-        my $pid = open(READ,
-            "$binDir/nix-store --query --requisites '$storePath2'|") or die;
+    # Get the closure of this path.
+    my $pid = open(READ, "$binDir/nix-store --query --requisites @storePaths|") or die;
     
-        while (<READ>) {
-            chomp;
-            die "bad: $_" unless /^\//;
-            if (!defined $storePathsSeen{$_}) {
-                push @allStorePaths, $_;
-                $storePathsSeen{$_} = 1;
-            }
-        }
-
-        close READ or die "nix-store failed: $?";
+    while (<READ>) {
+        chomp;
+        die "bad: $_" unless /^\//;
+        push @allStorePaths, $_;
     }
 
+    close READ or die "nix-store failed: $?";
+
 
     # Ask the remote host which paths are invalid.
     open(READ, "ssh @sshOpts $sshHost nix-store --check-validity --print-invalid @allStorePaths|");
@@ -111,15 +99,11 @@ else { # Copy FROM the remote machine.
         "ssh @sshOpts $sshHost nix-store --query --requisites @storePaths|") or die;
     
     my @allStorePaths;
-    my %storePathsSeen;
 
     while (<READ>) {
         chomp;
         die "bad: $_" unless /^\//;
-        if (!defined $storePathsSeen{$_}) {
-            push @allStorePaths, $_;
-            $storePathsSeen{$_} = 1;
-        }
+        push @allStorePaths, $_;
     }
 
     close READ or die "nix-store on remote machine `$sshHost' failed: $?";