aboutsummaryrefslogtreecommitdiff
path: root/scripts/nix-install-package.in
diff options
context:
space:
mode:
authorEelco Dolstra <eelco.dolstra@logicblox.com>2012-07-30 16:11:02 -0400
committerEelco Dolstra <eelco.dolstra@logicblox.com>2012-07-30 16:11:02 -0400
commitab42bf1dab026d10b74e857a76feff475ae8a162 (patch)
treeb388d0eab751d998d88ac0194351ddd42eb33c53 /scripts/nix-install-package.in
parentd059bf48e4bd4d1f50593dbe60953de8b2d395c7 (diff)
nix-install-package: Support binary caches
The .nixpkg file format is extended to optionally include the URL of a binary cache, which will be used in preference to the manifest URL (which can be set to a non-existent value).
Diffstat (limited to 'scripts/nix-install-package.in')
-rwxr-xr-xscripts/nix-install-package.in29
1 files changed, 19 insertions, 10 deletions
diff --git a/scripts/nix-install-package.in b/scripts/nix-install-package.in
index 951c2918f..35d5f9d53 100755
--- a/scripts/nix-install-package.in
+++ b/scripts/nix-install-package.in
@@ -101,7 +101,7 @@ my $pathRE = "(?: \/ [\/A-Za-z0-9\+\-\.\_\?\=]* )";
# store path. We'll let nix-env do that.
$contents =~
- / ^ \s* (\S+) \s+ ($urlRE) \s+ ($nameRE) \s+ ($systemRE) \s+ ($pathRE) \s+ ($pathRE) /x
+ / ^ \s* (\S+) \s+ ($urlRE) \s+ ($nameRE) \s+ ($systemRE) \s+ ($pathRE) \s+ ($pathRE) ( \s+ ($urlRE) )? /x
or barf "invalid package contents";
my $version = $1;
my $manifestURL = $2;
@@ -109,6 +109,7 @@ my $drvName = $3;
my $system = $4;
my $drvPath = $5;
my $outPath = $6;
+my $binaryCacheURL = $8;
barf "invalid package version `$version'" unless $version eq "NIXPKG1";
@@ -122,17 +123,25 @@ if ($interactive) {
}
-# Store the manifest in the temporary directory so that we don't
-# pollute /nix/var/nix/manifests. This also requires that we don't
-# use the Nix daemon (because otherwise download-using-manifests won't
-# see our NIX_MANIFESTS_DIRS environment variable).
-$ENV{NIX_MANIFESTS_DIR} = $tmpDir;
-$ENV{NIX_REMOTE} = "";
+if (defined $binaryCacheURL) {
+ push @extraNixEnvArgs, "--option", "binary-caches", $binaryCacheURL;
-print "\nPulling manifests...\n";
-system("$Nix::Config::binDir/nix-pull", $manifestURL) == 0
- or barf "nix-pull failed: $?";
+} else {
+
+ # Store the manifest in the temporary directory so that we don't
+ # pollute /nix/var/nix/manifests. This also requires that we
+ # don't use the Nix daemon (because otherwise
+ # download-using-manifests won't see our NIX_MANIFESTS_DIRS
+ # environment variable).
+ $ENV{NIX_MANIFESTS_DIR} = $tmpDir;
+ $ENV{NIX_REMOTE} = "";
+
+ print "\nPulling manifests...\n";
+ system("$Nix::Config::binDir/nix-pull", $manifestURL) == 0
+ or barf "nix-pull failed: $?";
+
+}
print "\nInstalling package...\n";