aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--scripts/nix-pull.in23
1 files changed, 14 insertions, 9 deletions
diff --git a/scripts/nix-pull.in b/scripts/nix-pull.in
index 1fc5d863a..d7b0523d6 100644
--- a/scripts/nix-pull.in
+++ b/scripts/nix-pull.in
@@ -1,5 +1,7 @@
#! /usr/bin/perl -w
+use IPC::Open2;
+
my $tmpfile = "@localstatedir@/nix/pull.tmp";
my $conffile = "@sysconfdir@/nix/prebuilts.conf";
@@ -7,9 +9,7 @@ my @ids;
my @subs;
my @sucs;
-my $fixfile = "/tmp/nix-pull-tmp.fix";
-open FIX, ">$fixfile";
-print FIX "[";
+my $fullexpr = "[";
my $first = 1;
open CONFFILE, "<$conffile";
@@ -61,9 +61,9 @@ while (<CONFFILE>) {
", (\"id\", \"$id\")" .
"])";
- print FIX "," unless ($first);
+ if (!$first) { $fullexpr .= "," };
$first = 0;
- print FIX $fixexpr;
+ $fullexpr .= $fixexpr; # !!! O(n^2)?
push @ids, $id;
@@ -81,14 +81,16 @@ while (<CONFFILE>) {
}
-print FIX "]";
-close FIX;
+$fullexpr .= "]";
# Instantiate Nix expressions from the Fix expressions we created above.
print STDERR "running fix...\n";
-open NIDS, "fix $fixfile |" or die "cannot run fix";
+$pid = open2(\*READ, \*WRITE, "fix -") or die "cannot run fix";
+
+print WRITE $fullexpr;
+close WRITE;
my $i = 0;
-while (<NIDS>) {
+while (<READ>) {
chomp;
die unless /^([0-9a-z]{32})$/;
$nid = $1;
@@ -98,6 +100,9 @@ while (<NIDS>) {
push @subs, $nid;
}
+waitpid $pid, 0;
+$? == 0 or die "fix failed";
+
# Register all substitutes.
print STDERR "registering substitutes...\n";
system "nix --substitute @subs";