pack: 'guix pack -R' wrapper correctly reports exit code.

Fixes <https://bugs.gnu.org/40816>.
Reported by Jan (janneke) Nieuwenhuizen <janneke@gnu.org>.

* gnu/packages/aux-files/run-in-namespace.c (main): In the 'default'
case, check 'WIFEXITED (status)' and exit with the corresponding code in
that case.  Exit with 255 in other cases.
* tests/guix-pack-relocatable.sh: Add test.
This commit is contained in:
Ludovic Courtès 2020-04-24 14:30:38 +02:00 committed by Ludovic Courtès
parent 193192ca77
commit 2520059bdb
No known key found for this signature in database
GPG key ID: 090B11993D9AEBB5
2 changed files with 13 additions and 3 deletions

View file

@ -1,5 +1,5 @@
/* GNU Guix --- Functional package management for GNU
Copyright (C) 2018, 2019 Ludovic Courtès <ludo@gnu.org>
Copyright (C) 2018, 2019, 2020 Ludovic Courtès <ludo@gnu.org>
This file is part of GNU Guix.
@ -343,7 +343,13 @@ Please refer to the 'guix pack' documentation for more information.\n");
chdir ("/"); /* avoid EBUSY */
rm_rf (new_root);
free (new_root);
exit (status);
if (WIFEXITED (status))
exit (WEXITSTATUS (status));
else
/* Abnormal termination cannot really be reproduced, so exit
with 255. */
exit (255);
}
}
}

View file

@ -1,5 +1,5 @@
# GNU Guix --- Functional package management for GNU
# Copyright © 2018, 2019 Ludovic Courtès <ludo@gnu.org>
# Copyright © 2018, 2019, 2020 Ludovic Courtès <ludo@gnu.org>
#
# This file is part of GNU Guix.
#
@ -72,6 +72,10 @@ then
# mounting an empty file system on top of it. That way, we exercise the
# wrapper code that creates the user namespace and bind-mounts the store.
unshare -mrf sh -c 'mount -t tmpfs none "$STORE_PARENT"; echo "$STORE_PARENT"/*; "$test_directory/Bin/sed" --version > "$test_directory/output"'
# Check whether the exit code is preserved.
if unshare -mrf sh -c 'mount -t tmpfs none "$STORE_PARENT"; echo "$STORE_PARENT"/*; "$test_directory/Bin/sed" --does-not-exist';
then false; else true; fi
else
# Run the relocatable 'sed' in the current namespaces. This is a weak
# test because we're going to access store items from the host store.