aboutsummaryrefslogtreecommitdiff
path: root/perl/lib/Nix/CopyClosure.pm
diff options
context:
space:
mode:
Diffstat (limited to 'perl/lib/Nix/CopyClosure.pm')
-rw-r--r--perl/lib/Nix/CopyClosure.pm9
1 files changed, 8 insertions, 1 deletions
diff --git a/perl/lib/Nix/CopyClosure.pm b/perl/lib/Nix/CopyClosure.pm
index 79c6dfccc..931057e9f 100644
--- a/perl/lib/Nix/CopyClosure.pm
+++ b/perl/lib/Nix/CopyClosure.pm
@@ -6,7 +6,8 @@ use Nix::Store;
sub copyTo {
- my ($sshHost, $sshOpts, $storePaths, $compressor, $decompressor, $includeOutputs, $dryRun, $sign, $progressViewer) = @_;
+ my ($sshHost, $sshOpts, $storePaths, $compressor, $decompressor,
+ $includeOutputs, $dryRun, $sign, $progressViewer, $useSubstitutes) = @_;
$compressor = "$compressor |" if $compressor ne "";
$decompressor = "$decompressor |" if $decompressor ne "";
@@ -16,6 +17,12 @@ sub copyTo {
my @closure = reverse(topoSortPaths(computeFSClosure(0, $includeOutputs,
map { followLinksToStorePath $_ } @{$storePaths})));
+ # Optionally use substitutes on the remote host.
+ if (!$dryRun && $useSubstitutes) {
+ system "ssh $sshHost @{$sshOpts} nix-store -r --ignore-unknown @closure";
+ # Ignore exit status because this is just an optimisation.
+ }
+
# Ask the remote host which paths are invalid. Because of limits
# to the command line length, do this in chunks. Eventually,
# we'll want to use ‘--from-stdin’, but we can't rely on the