diff options
author | Eelco Dolstra <e.dolstra@tudelft.nl> | 2003-07-16 21:24:02 +0000 |
---|---|---|
committer | Eelco Dolstra <e.dolstra@tudelft.nl> | 2003-07-16 21:24:02 +0000 |
commit | 54664b6fb74e964d70530d13e25459751d0c63fb (patch) | |
tree | 9b305d680ebec562274d718feaedf8a51c3f4b75 /scripts/nix-push.in | |
parent | 335aa1c35d8835619b465df3f5629b435bac157d (diff) |
* The write() system call can write less than the requested
number of bytes, e.g., in case of a signal like SIGSTOP.
This caused `nix --dump' to fail sometimes.
Note that this bug went unnoticed because the call to `nix
--dump' is in a pipeline, and the shell ignores non-zero
exit codes from all but the last element in the pipeline.
Is there any way to check the result of the initial elements
in the pipeline? (In other words, is it at all possible to
write reliable shell scripts?)
Diffstat (limited to 'scripts/nix-push.in')
-rw-r--r-- | scripts/nix-push.in | 4 |
1 files changed, 4 insertions, 0 deletions
diff --git a/scripts/nix-push.in b/scripts/nix-push.in index fdb432303..bb25019e8 100644 --- a/scripts/nix-push.in +++ b/scripts/nix-push.in @@ -8,6 +8,8 @@ foreach my $id (@ARGV) { # Get all paths referenced by the normalisation of the given # fstate expression. + system "nix -ih $id"; + if ($?) { die "`nix -ih' failed"; } my @paths; open PATHS, "nix -qrh $id 2> /dev/null |" or die "nix -qrh"; while (<PATHS>) { @@ -51,6 +53,8 @@ foreach my $id (@ARGV) { die unless $nid =~ /^([0-9a-z]{32})$/; # Realise the Nix expression. + system "nix -ih $nid"; + if ($?) { die "`nix -ih' failed"; } my $npath = `nix -qph $nid 2> /dev/null`; $? and die "creating Nix archive"; chomp $npath; |