mirror of
https://github.com/privatevoid-net/nix-super.git
synced 2024-11-25 15:26:17 +02:00
Merge pull request #10345 from edolstra/fix-chroot-flakes
Fix flake evaluation in chroot stores
This commit is contained in:
commit
290be6c906
4 changed files with 58 additions and 24 deletions
|
@ -10,6 +10,7 @@
|
||||||
#include "finally.hh"
|
#include "finally.hh"
|
||||||
#include "fetch-settings.hh"
|
#include "fetch-settings.hh"
|
||||||
#include "value-to-json.hh"
|
#include "value-to-json.hh"
|
||||||
|
#include "local-fs-store.hh"
|
||||||
|
|
||||||
namespace nix {
|
namespace nix {
|
||||||
|
|
||||||
|
@ -755,7 +756,17 @@ void callFlake(EvalState & state,
|
||||||
|
|
||||||
auto lockedNode = node.dynamic_pointer_cast<const LockedNode>();
|
auto lockedNode = node.dynamic_pointer_cast<const LockedNode>();
|
||||||
|
|
||||||
auto [storePath, subdir] = state.store->toStorePath(sourcePath.path.abs());
|
// FIXME: This is a hack to support chroot stores. Remove this
|
||||||
|
// once we can pass a sourcePath rather than a storePath to
|
||||||
|
// call-flake.nix.
|
||||||
|
auto path = sourcePath.path.abs();
|
||||||
|
if (auto store = state.store.dynamic_pointer_cast<LocalFSStore>()) {
|
||||||
|
auto realStoreDir = store->getRealStoreDir();
|
||||||
|
if (isInDir(path, realStoreDir))
|
||||||
|
path = store->storeDir + path.substr(realStoreDir.size());
|
||||||
|
}
|
||||||
|
|
||||||
|
auto [storePath, subdir] = state.store->toStorePath(path);
|
||||||
|
|
||||||
emitTreeAttrs(
|
emitTreeAttrs(
|
||||||
state,
|
state,
|
||||||
|
|
45
tests/functional/chroot-store.sh
Normal file
45
tests/functional/chroot-store.sh
Normal file
|
@ -0,0 +1,45 @@
|
||||||
|
source common.sh
|
||||||
|
|
||||||
|
echo example > $TEST_ROOT/example.txt
|
||||||
|
mkdir -p $TEST_ROOT/x
|
||||||
|
|
||||||
|
export NIX_STORE_DIR=/nix2/store
|
||||||
|
|
||||||
|
CORRECT_PATH=$(cd $TEST_ROOT && nix-store --store ./x --add example.txt)
|
||||||
|
|
||||||
|
[[ $CORRECT_PATH =~ ^/nix2/store/.*-example.txt$ ]]
|
||||||
|
|
||||||
|
PATH1=$(cd $TEST_ROOT && nix path-info --store ./x $CORRECT_PATH)
|
||||||
|
[ $CORRECT_PATH == $PATH1 ]
|
||||||
|
|
||||||
|
PATH2=$(nix path-info --store "$TEST_ROOT/x" $CORRECT_PATH)
|
||||||
|
[ $CORRECT_PATH == $PATH2 ]
|
||||||
|
|
||||||
|
PATH3=$(nix path-info --store "local?root=$TEST_ROOT/x" $CORRECT_PATH)
|
||||||
|
[ $CORRECT_PATH == $PATH3 ]
|
||||||
|
|
||||||
|
# Ensure store info trusted works with local store
|
||||||
|
nix --store $TEST_ROOT/x store info --json | jq -e '.trusted'
|
||||||
|
|
||||||
|
# Test building in a chroot store.
|
||||||
|
if canUseSandbox; then
|
||||||
|
|
||||||
|
flakeDir=$TEST_ROOT/flake
|
||||||
|
mkdir -p $flakeDir
|
||||||
|
|
||||||
|
cat > $flakeDir/flake.nix <<EOF
|
||||||
|
{
|
||||||
|
outputs = inputs: rec {
|
||||||
|
packages.$system.default = import ./simple.nix;
|
||||||
|
};
|
||||||
|
}
|
||||||
|
EOF
|
||||||
|
|
||||||
|
cp simple.nix shell.nix simple.builder.sh config.nix $flakeDir/
|
||||||
|
|
||||||
|
outPath=$(nix build --print-out-paths --no-link --sandbox-paths '/nix? /bin? /lib? /lib64? /usr?' --store $TEST_ROOT/x path:$flakeDir)
|
||||||
|
|
||||||
|
[[ $outPath =~ ^/nix2/store/.*-simple$ ]]
|
||||||
|
|
||||||
|
[[ $(cat $TEST_ROOT/x/nix/store/$(basename $outPath)/hello) = 'Hello World!' ]]
|
||||||
|
fi
|
|
@ -1,22 +0,0 @@
|
||||||
source common.sh
|
|
||||||
|
|
||||||
cd $TEST_ROOT
|
|
||||||
|
|
||||||
echo example > example.txt
|
|
||||||
mkdir -p ./x
|
|
||||||
|
|
||||||
NIX_STORE_DIR=$TEST_ROOT/x
|
|
||||||
|
|
||||||
CORRECT_PATH=$(nix-store --store ./x --add example.txt)
|
|
||||||
|
|
||||||
PATH1=$(nix path-info --store ./x $CORRECT_PATH)
|
|
||||||
[ $CORRECT_PATH == $PATH1 ]
|
|
||||||
|
|
||||||
PATH2=$(nix path-info --store "$PWD/x" $CORRECT_PATH)
|
|
||||||
[ $CORRECT_PATH == $PATH2 ]
|
|
||||||
|
|
||||||
PATH3=$(nix path-info --store "local?root=$PWD/x" $CORRECT_PATH)
|
|
||||||
[ $CORRECT_PATH == $PATH3 ]
|
|
||||||
|
|
||||||
# Ensure store info trusted works with local store
|
|
||||||
nix --store ./x store info --json | jq -e '.trusted'
|
|
|
@ -83,7 +83,7 @@ nix_tests = \
|
||||||
export.sh \
|
export.sh \
|
||||||
config.sh \
|
config.sh \
|
||||||
add.sh \
|
add.sh \
|
||||||
local-store.sh \
|
chroot-store.sh \
|
||||||
filter-source.sh \
|
filter-source.sh \
|
||||||
misc.sh \
|
misc.sh \
|
||||||
dump-db.sh \
|
dump-db.sh \
|
||||||
|
|
Loading…
Reference in a new issue