about summary refs log tree commit diff
diff options
context:
space:
mode:
-rwxr-xr-xscripts/nix-channel.in4
-rw-r--r--scripts/nix-prefetch-url.in4
-rw-r--r--scripts/nix-pull.in9
3 files changed, 11 insertions, 6 deletions
diff --git a/scripts/nix-channel.in b/scripts/nix-channel.in
index 1733afceb384..3c99f454c6f8 100755
--- a/scripts/nix-channel.in
+++ b/scripts/nix-channel.in
@@ -53,6 +53,10 @@ sub addChannel {
 sub update {
     readChannels;
 
+    # Get rid of all the old substitutes.
+    system "@bindir@/nix-store --clear-substitutes";
+    die "cannot clear substitutes" if ($? != 0);
+
     # Pull cache manifests.
     foreach my $url (@channels) {
         print "pulling cache manifest from `$url'\n";
diff --git a/scripts/nix-prefetch-url.in b/scripts/nix-prefetch-url.in
index 32f40b5ae6ca..9a67ca1417f2 100644
--- a/scripts/nix-prefetch-url.in
+++ b/scripts/nix-prefetch-url.in
@@ -49,7 +49,9 @@ finalPath=$(@bindir@/nix-store -qnB --force-realise $storeExpr)
     
 if ! test -n "$QUIET"; then echo "path is $finalPath" >&2; fi
 
-rm -rf $tmpPath1 $tmpPath2 || true
+if test -n "$tmpPath1" -o -n "$tmpPath2"; then
+    rm -rf $tmpPath1 $tmpPath2 || true
+fi
 
 echo $hash
 
diff --git a/scripts/nix-pull.in b/scripts/nix-pull.in
index a06ee7e57520..d2c38d0ca12e 100644
--- a/scripts/nix-pull.in
+++ b/scripts/nix-pull.in
@@ -48,10 +48,10 @@ my $nixExpr =
     "(import @datadir@/nix/corepkgs/nix-pull) " .
     "{system = \"@system@\";}";
 
-print STDERR "instantiating store expression...\n";
-my $storeExpr = `echo '$nixExpr' | @bindir@/nix-instantiate -`
+print STDERR "building downloader...\n";
+my $substProgram = `echo '$nixExpr' | @bindir@/nix-store -qnf \$(@bindir@/nix-instantiate -)`
     or die "cannot instantiate Nix expression";
-chomp $storeExpr;
+chomp $substProgram;
 
 
 # Register all substitutes.
@@ -66,8 +66,7 @@ foreach my $storePath (keys %narFiles) {
     my $narFileList = $narFiles{$storePath};
     foreach my $narFile (@{$narFileList}) {
         print WRITE "$storePath\n";
-        print WRITE "$storeExpr\n";
-        print WRITE "/fetch\n";
+        print WRITE "$substProgram/fetch\n";
         print WRITE "2\n";
         print WRITE "$narFile->{url}\n";
         print WRITE "$narFile->{hash}\n";