~ruther/guix-local

82e64fc14eec9f01f5fee12782046496ebed9c72 — Ludovic Courtès 10 years ago 6493fd0
environment: Correctly handle abnormal exits.

Fixes <http://bugs.gnu.org/21958>.

* guix/scripts/environment.scm (status->exit-code): New procedure.
(exit/status, primitive-exit/status): Use it.
* tests/guix-environment-container.sh: Add test.
2 files changed, 16 insertions(+), 2 deletions(-)

M guix/scripts/environment.scm
M tests/guix-environment-container.sh
M guix/scripts/environment.scm => guix/scripts/environment.scm +9 -2
@@ 317,8 317,15 @@ requisite store items i.e. the union closure of all the inputs."
                                      (map input->requisites inputs))))
    (return (delete-duplicates (concatenate reqs)))))

(define exit/status (compose exit status:exit-val))
(define primitive-exit/status (compose primitive-exit status:exit-val))
(define (status->exit-code status)
  "Compute the exit code made from STATUS, a value as returned by 'waitpid',
and suitable for 'exit'."
  ;; See <bits/waitstatus.h>.
  (or (status:exit-val status)
      (logior #x80 (status:term-sig status))))

(define exit/status (compose exit status->exit-code))
(define primitive-exit/status (compose primitive-exit status->exit-code))

(define (launch-environment command inputs paths pure?)
  "Run COMMAND in a new environment containing INPUTS, using the native search

M tests/guix-environment-container.sh => tests/guix-environment-container.sh +7 -0
@@ 81,3 81,10 @@ grep $(guix build guile-bootstrap) $tmpdir/mounts
grep -e "$NIX_STORE_DIR/.*-bash" $tmpdir/mounts # bootstrap bash

rm $tmpdir/mounts

if guix environment --bootstrap --container \
	--ad-hoc bootstrap-binaries -- kill -SEGV 2
then false;
else
    test $? -gt 127
fi