forked from lix-project/lix
Merge pull request #9661 from shlevy/ifd-buildStore
Build IFD in the build store when using eval-store.
This commit is contained in:
commit
e23983db82
8
doc/manual/rl-next/ifd-eval-store.md
Normal file
8
doc/manual/rl-next/ifd-eval-store.md
Normal file
|
@ -0,0 +1,8 @@
|
||||||
|
---
|
||||||
|
synopsis: import-from-derivation builds the derivation in the build store
|
||||||
|
prs: 9661
|
||||||
|
---
|
||||||
|
|
||||||
|
When using `--eval-store`, `import`ing from a derivation will now result in the derivation being built on the build store, i.e. the store specified in the `store` Nix option.
|
||||||
|
|
||||||
|
Because the resulting Nix expression must be copied back to the eval store in order to be imported, this requires the eval store to trust the build store's signatures.
|
|
@ -84,14 +84,14 @@ StringMap EvalState::realiseContext(const NixStringContext & context)
|
||||||
/* Build/substitute the context. */
|
/* Build/substitute the context. */
|
||||||
std::vector<DerivedPath> buildReqs;
|
std::vector<DerivedPath> buildReqs;
|
||||||
for (auto & d : drvs) buildReqs.emplace_back(DerivedPath { d });
|
for (auto & d : drvs) buildReqs.emplace_back(DerivedPath { d });
|
||||||
store->buildPaths(buildReqs);
|
buildStore->buildPaths(buildReqs, bmNormal, store);
|
||||||
|
|
||||||
|
StorePathSet outputsToCopyAndAllow;
|
||||||
|
|
||||||
for (auto & drv : drvs) {
|
for (auto & drv : drvs) {
|
||||||
auto outputs = resolveDerivedPath(*store, drv);
|
auto outputs = resolveDerivedPath(*buildStore, drv, &*store);
|
||||||
for (auto & [outputName, outputPath] : outputs) {
|
for (auto & [outputName, outputPath] : outputs) {
|
||||||
/* Add the output of this derivations to the allowed
|
outputsToCopyAndAllow.insert(outputPath);
|
||||||
paths. */
|
|
||||||
allowPath(store->toRealPath(outputPath));
|
|
||||||
|
|
||||||
/* Get all the output paths corresponding to the placeholders we had */
|
/* Get all the output paths corresponding to the placeholders we had */
|
||||||
if (experimentalFeatureSettings.isEnabled(Xp::CaDerivations)) {
|
if (experimentalFeatureSettings.isEnabled(Xp::CaDerivations)) {
|
||||||
|
@ -101,12 +101,19 @@ StringMap EvalState::realiseContext(const NixStringContext & context)
|
||||||
.drvPath = drv.drvPath,
|
.drvPath = drv.drvPath,
|
||||||
.output = outputName,
|
.output = outputName,
|
||||||
}).render(),
|
}).render(),
|
||||||
store->printStorePath(outputPath)
|
buildStore->printStorePath(outputPath)
|
||||||
);
|
);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
if (store != buildStore) copyClosure(*buildStore, *store, outputsToCopyAndAllow);
|
||||||
|
for (auto & outputPath : outputsToCopyAndAllow) {
|
||||||
|
/* Add the output of this derivations to the allowed
|
||||||
|
paths. */
|
||||||
|
allowPath(store->toRealPath(outputPath));
|
||||||
|
}
|
||||||
|
|
||||||
return res;
|
return res;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
@ -40,3 +40,11 @@ if [[ ! -n "${NIX_TESTS_CA_BY_DEFAULT:-}" ]]; then
|
||||||
(! ls $NIX_STORE_DIR/*.drv)
|
(! ls $NIX_STORE_DIR/*.drv)
|
||||||
fi
|
fi
|
||||||
ls $eval_store/nix/store/*.drv
|
ls $eval_store/nix/store/*.drv
|
||||||
|
|
||||||
|
clearStore
|
||||||
|
rm -rf "$eval_store"
|
||||||
|
|
||||||
|
# Confirm that import-from-derivation builds on the build store
|
||||||
|
[[ $(nix eval --eval-store "$eval_store?require-sigs=false" --impure --raw --file ./ifd.nix) = hi ]]
|
||||||
|
ls $NIX_STORE_DIR/*dependencies-top/foobar
|
||||||
|
(! ls $eval_store/nix/store/*dependencies-top/foobar)
|
||||||
|
|
10
tests/functional/ifd.nix
Normal file
10
tests/functional/ifd.nix
Normal file
|
@ -0,0 +1,10 @@
|
||||||
|
with import ./config.nix;
|
||||||
|
import (
|
||||||
|
mkDerivation {
|
||||||
|
name = "foo";
|
||||||
|
bla = import ./dependencies.nix {};
|
||||||
|
buildCommand = "
|
||||||
|
echo \\\"hi\\\" > $out
|
||||||
|
";
|
||||||
|
}
|
||||||
|
)
|
|
@ -19,18 +19,7 @@ else
|
||||||
fi
|
fi
|
||||||
|
|
||||||
# Test import-from-derivation through the daemon.
|
# Test import-from-derivation through the daemon.
|
||||||
[[ $(nix eval --impure --raw --expr '
|
[[ $(nix eval --impure --raw --file ./ifd.nix) = hi ]]
|
||||||
with import ./config.nix;
|
|
||||||
import (
|
|
||||||
mkDerivation {
|
|
||||||
name = "foo";
|
|
||||||
bla = import ./dependencies.nix {};
|
|
||||||
buildCommand = "
|
|
||||||
echo \\\"hi\\\" > $out
|
|
||||||
";
|
|
||||||
}
|
|
||||||
)
|
|
||||||
') = hi ]]
|
|
||||||
|
|
||||||
storeCleared=1 NIX_REMOTE_=$NIX_REMOTE $SHELL ./user-envs.sh
|
storeCleared=1 NIX_REMOTE_=$NIX_REMOTE $SHELL ./user-envs.sh
|
||||||
|
|
||||||
|
|
Loading…
Reference in a new issue