writeDirectReferencesToFile: init
This commit is contained in:
parent
80a3e0dc0e
commit
cc60f81e69
@ -50,3 +50,24 @@ Many more commands wrap `writeTextFile` including `writeText`, `writeTextDir`, `
|
|||||||
## `symlinkJoin` {#trivial-builder-symlinkJoin}
|
## `symlinkJoin` {#trivial-builder-symlinkJoin}
|
||||||
|
|
||||||
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.
|
||||||
|
|
||||||
|
## `writeDirectReferencesToFile` {#trivial-builder-writeDirectReferencesToFile}
|
||||||
|
|
||||||
|
Writes the set of references to the output file, that is, their immediate dependencies.
|
||||||
|
|
||||||
|
This produces the equivalent of `nix-store -q --references`.
|
||||||
|
|
||||||
|
For example,
|
||||||
|
|
||||||
|
```nix
|
||||||
|
writeDirectReferencesToFile (writeScriptBin "hi" ''${hello}/bin/hello'')
|
||||||
|
```
|
||||||
|
|
||||||
|
produces an output path `/nix/store/<hash>-runtime-references` containing
|
||||||
|
|
||||||
|
```nix
|
||||||
|
/nix/store/<hash>-hello-2.10
|
||||||
|
```
|
||||||
|
|
||||||
|
but none of `hello`'s dependencies, because those are not referenced directly
|
||||||
|
by `hi`'s output.
|
||||||
|
@ -438,6 +438,35 @@ rec {
|
|||||||
done < graph
|
done < graph
|
||||||
'';
|
'';
|
||||||
|
|
||||||
|
/*
|
||||||
|
Write the set of references to a file, that is, their immediate dependencies.
|
||||||
|
|
||||||
|
This produces the equivalent of `nix-store -q --references`.
|
||||||
|
*/
|
||||||
|
writeDirectReferencesToFile = path: runCommand "runtime-references"
|
||||||
|
{
|
||||||
|
exportReferencesGraph = ["graph" path];
|
||||||
|
inherit path;
|
||||||
|
}
|
||||||
|
''
|
||||||
|
touch ./references
|
||||||
|
while read p; do
|
||||||
|
read dummy
|
||||||
|
read nrRefs
|
||||||
|
if [[ $p == $path ]]; then
|
||||||
|
for ((i = 0; i < nrRefs; i++)); do
|
||||||
|
read ref;
|
||||||
|
echo $ref >>./references
|
||||||
|
done
|
||||||
|
else
|
||||||
|
for ((i = 0; i < nrRefs; i++)); do
|
||||||
|
read ref;
|
||||||
|
done
|
||||||
|
fi
|
||||||
|
done < graph
|
||||||
|
sort ./references >$out
|
||||||
|
'';
|
||||||
|
|
||||||
|
|
||||||
/* Print an error message if the file with the specified name and
|
/* Print an error message if the file with the specified name and
|
||||||
* hash doesn't exist in the Nix store. This function should only
|
* hash doesn't exist in the Nix store. This function should only
|
||||||
|
20
pkgs/build-support/trivial-builders/test.nix
Normal file
20
pkgs/build-support/trivial-builders/test.nix
Normal file
@ -0,0 +1,20 @@
|
|||||||
|
{ lib, nixosTest, path, writeText, hello, figlet, stdenvNoCC }:
|
||||||
|
|
||||||
|
nixosTest {
|
||||||
|
name = "nixpkgs-trivial-builders";
|
||||||
|
nodes.machine = { ... }: {
|
||||||
|
virtualisation.writableStore = true;
|
||||||
|
|
||||||
|
# Test runs without network, so we don't substitute and prepare our deps
|
||||||
|
nix.binaryCaches = lib.mkForce [];
|
||||||
|
environment.etc."pre-built-paths".source = writeText "pre-built-paths" (
|
||||||
|
builtins.toJSON [hello figlet stdenvNoCC]
|
||||||
|
);
|
||||||
|
};
|
||||||
|
testScript = ''
|
||||||
|
machine.succeed("""
|
||||||
|
cd ${lib.cleanSource path}
|
||||||
|
./pkgs/build-support/trivial-builders/test.sh 2>/dev/console
|
||||||
|
""")
|
||||||
|
'';
|
||||||
|
}
|
41
pkgs/build-support/trivial-builders/test.sh
Executable file
41
pkgs/build-support/trivial-builders/test.sh
Executable file
@ -0,0 +1,41 @@
|
|||||||
|
#!/usr/bin/env bash
|
||||||
|
|
||||||
|
# -------------------------------------------------------------------------- #
|
||||||
|
#
|
||||||
|
# trivial-builders test
|
||||||
|
#
|
||||||
|
# -------------------------------------------------------------------------- #
|
||||||
|
#
|
||||||
|
# This file can be run independently (quick):
|
||||||
|
#
|
||||||
|
# $ pkgs/build-support/trivial-builders/test.sh
|
||||||
|
#
|
||||||
|
# or in the build sandbox with a ~20s VM overhead
|
||||||
|
#
|
||||||
|
# $ nix-build -A tests.trivial-builders
|
||||||
|
#
|
||||||
|
# -------------------------------------------------------------------------- #
|
||||||
|
|
||||||
|
# strict bash
|
||||||
|
set -euo pipefail
|
||||||
|
|
||||||
|
# debug
|
||||||
|
# set -x
|
||||||
|
# PS4='+(${BASH_SOURCE}:${LINENO}): ${FUNCNAME[0]:+${FUNCNAME[0]}(): }'
|
||||||
|
|
||||||
|
cd "$(dirname ${BASH_SOURCE[0]})" # nixpkgs root
|
||||||
|
|
||||||
|
testDirectReferences() {
|
||||||
|
expr="$1"
|
||||||
|
diff -U3 \
|
||||||
|
<(sort <$(nix-build --no-out-link --expr "with import ../../.. {}; writeDirectReferencesToFile ($expr)")) \
|
||||||
|
<(nix-store -q --references $(nix-build --no-out-link --expr "with import ../../.. {}; ($expr)") | sort)
|
||||||
|
}
|
||||||
|
|
||||||
|
testDirectReferences 'hello'
|
||||||
|
testDirectReferences 'figlet'
|
||||||
|
testDirectReferences 'writeText "hi" "hello"'
|
||||||
|
testDirectReferences 'writeText "hi" "hello ${hello}"'
|
||||||
|
testDirectReferences 'writeText "hi" "hello ${hello} ${figlet}"'
|
||||||
|
|
||||||
|
echo 'OK!'
|
@ -50,5 +50,7 @@ with pkgs;
|
|||||||
|
|
||||||
cuda = callPackage ./cuda { };
|
cuda = callPackage ./cuda { };
|
||||||
|
|
||||||
|
trivial = callPackage ../build-support/trivial-builders/test.nix {};
|
||||||
|
|
||||||
writers = callPackage ../build-support/writers/test.nix {};
|
writers = callPackage ../build-support/writers/test.nix {};
|
||||||
}
|
}
|
||||||
|
Loading…
x
Reference in New Issue
Block a user