writeReferencesToFile: docs and tests
This commit is contained in:
parent
cc60f81e69
commit
ed4523186e
|
@ -51,6 +51,32 @@ Many more commands wrap `writeTextFile` including `writeText`, `writeTextDir`, `
|
||||||
|
|
||||||
This can be used to put many derivations into the same directory structure. It works by creating a new derivation and adding symlinks to each of the paths listed. It expects two arguments, `name`, and `paths`. `name` is the name used in the Nix store path for the created derivation. `paths` is a list of paths that will be symlinked. These paths can be to Nix store derivations or any other subdirectory contained within.
|
This can be used to put many derivations into the same directory structure. It works by creating a new derivation and adding symlinks to each of the paths listed. It expects two arguments, `name`, and `paths`. `name` is the name used in the Nix store path for the created derivation. `paths` is a list of paths that will be symlinked. These paths can be to Nix store derivations or any other subdirectory contained within.
|
||||||
|
|
||||||
|
## `writeReferencesToFile` {#trivial-builder-writeReferencesToFile}
|
||||||
|
|
||||||
|
Writes the closure of transitive dependencies to a file.
|
||||||
|
|
||||||
|
This produces the equivalent of `nix-store -q --requisites`.
|
||||||
|
|
||||||
|
For example,
|
||||||
|
|
||||||
|
```nix
|
||||||
|
writeReferencesToFile (writeScriptBin "hi" ''${hello}/bin/hello'')
|
||||||
|
```
|
||||||
|
|
||||||
|
produces an output path `/nix/store/<hash>-runtime-deps` containing
|
||||||
|
|
||||||
|
```nix
|
||||||
|
/nix/store/<hash>-hello-2.10
|
||||||
|
/nix/store/<hash>-hi
|
||||||
|
/nix/store/<hash>-libidn2-2.3.0
|
||||||
|
/nix/store/<hash>-libunistring-0.9.10
|
||||||
|
/nix/store/<hash>-glibc-2.32-40
|
||||||
|
```
|
||||||
|
|
||||||
|
You can see that this includes `hi`, the original input path,
|
||||||
|
`hello`, which is a direct reference, but also
|
||||||
|
the other paths that are indirectly required to run `hello`.
|
||||||
|
|
||||||
## `writeDirectReferencesToFile` {#trivial-builder-writeDirectReferencesToFile}
|
## `writeDirectReferencesToFile` {#trivial-builder-writeDirectReferencesToFile}
|
||||||
|
|
||||||
Writes the set of references to the output file, that is, their immediate dependencies.
|
Writes the set of references to the output file, that is, their immediate dependencies.
|
||||||
|
|
|
@ -38,4 +38,20 @@ testDirectReferences 'writeText "hi" "hello"'
|
||||||
testDirectReferences 'writeText "hi" "hello ${hello}"'
|
testDirectReferences 'writeText "hi" "hello ${hello}"'
|
||||||
testDirectReferences 'writeText "hi" "hello ${hello} ${figlet}"'
|
testDirectReferences 'writeText "hi" "hello ${hello} ${figlet}"'
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
testClosure() {
|
||||||
|
expr="$1"
|
||||||
|
diff -U3 \
|
||||||
|
<(sort <$(nix-build --no-out-link --expr "with import ../../.. {}; writeReferencesToFile ($expr)")) \
|
||||||
|
<(nix-store -q --requisites $(nix-build --no-out-link --expr "with import ../../.. {}; ($expr)") | sort)
|
||||||
|
}
|
||||||
|
|
||||||
|
testClosure 'hello'
|
||||||
|
testClosure 'figlet'
|
||||||
|
testClosure 'writeText "hi" "hello"'
|
||||||
|
testClosure 'writeText "hi" "hello ${hello}"'
|
||||||
|
testClosure 'writeText "hi" "hello ${hello} ${figlet}"'
|
||||||
|
|
||||||
|
|
||||||
echo 'OK!'
|
echo 'OK!'
|
||||||
|
|
Loading…
Reference in New Issue