diff --git a/scripts/nix-pull.in b/scripts/nix-pull.in index 1fc5d863a2..d7b0523d6c 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 () { ", (\"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 () { } -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 () { +while () { chomp; die unless /^([0-9a-z]{32})$/; $nid = $1; @@ -98,6 +100,9 @@ while () { push @subs, $nid; } +waitpid $pid, 0; +$? == 0 or die "fix failed"; + # Register all substitutes. print STDERR "registering substitutes...\n"; system "nix --substitute @subs";