mirror of
https://github.com/NixOS/nix.git
synced 2024-11-22 06:42:28 +00:00
112ee89501
* A better substitute mechanism. Instead of generating a store expression for each store path for which we have a substitute, we can have a single store expression that builds a generic program that is invoked to build the desired store path, which is passed as an argument. This means that operations like `nix-pull' only produce O(1) files instead of O(N) files in the store when registering N substitutes. (It consumes O(N) database storage, of course, but that's not a performance problem). * Added a test for the substitute mechanism. * `nix-store --substitute' reads the substitutes from standard input, instead of from the command line. This prevents us from running into the kernel's limit on command line length.
26 lines
1.0 KiB
Bash
26 lines
1.0 KiB
Bash
# Instantiate.
|
|
storeExpr=$($TOP/src/nix-instantiate/nix-instantiate substitutes.nix)
|
|
echo "store expr is $storeExpr"
|
|
|
|
# Find the output path.
|
|
outPath=$($TOP/src/nix-store/nix-store -qvvvvv "$storeExpr")
|
|
echo "output path is $outPath"
|
|
|
|
# Instantiate the substitute program.
|
|
subExpr=$($TOP/src/nix-instantiate/nix-instantiate substituter.nix)
|
|
echo "store expr is $subExpr"
|
|
|
|
# Register a fake successor, and a substitute for it.
|
|
suc=$NIX_STORE_DIR/aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa-s.store
|
|
(echo $suc && echo $subExpr && echo "/substituter" && echo 3 && echo $outPath && echo Hallo && echo Wereld) | $TOP/src/nix-store/nix-store --substitute
|
|
$TOP/src/nix-store/nix-store --successor $storeExpr $suc
|
|
|
|
# Register a substitute for the output path.
|
|
(echo $outPath && echo $subExpr && echo "/substituter" && echo 3 && echo $outPath && echo Hallo && echo Wereld) | $TOP/src/nix-store/nix-store --substitute
|
|
|
|
|
|
$TOP/src/nix-store/nix-store -rvvvvv "$storeExpr"
|
|
|
|
text=$(cat "$outPath"/hello)
|
|
if test "$text" != "Hallo Wereld"; then exit 1; fi
|