aboutsummaryrefslogtreecommitdiff
path: root/tests/structured-attrs-shell.nix
diff options
context:
space:
mode:
authorMaximilian Bosch <maximilian@mbosch.me>2021-05-02 17:24:14 +0200
committerMaximilian Bosch <maximilian@mbosch.me>2021-06-22 19:15:57 +0200
commit3b5429aec110a22f8fe0d92b72faf1921b8ede2d (patch)
treee3e5c646be65cb827fe7e23bd271289e289d53c8 /tests/structured-attrs-shell.nix
parent4b23bf797a26da2731df0eebf9f121a68cdbd4d6 (diff)
Source complete env in `nix-shell` with `__structuredAttrs = true;`
This is needed to push the adoption of structured attrs[1] forward. It's now checked if a `__json` exists in the environment-map of the derivation to be openend in a `nix-shell`. Derivations with structured attributes enabled also make use of a file named `.attrs.json` containing every environment variable represented as JSON which is useful for e.g. `exportReferencesGraph`[2]. To provide an environment similar to the build sandbox, `nix-shell` now adds a `.attrs.json` to `cwd` (which is mostly equal to the one in the build sandbox) and removes it using an exit hook when closing the shell. To avoid leaking internals of the build-process to the `nix-shell`, the entire logic to generate JSON and shell code for structured attrs was moved into the `ParsedDerivation` class. [1] https://nixos.mayflower.consulting/blog/2020/01/20/structured-attrs/ [2] https://nixos.org/manual/nix/unstable/expressions/advanced-attributes.html#advanced-attributes
Diffstat (limited to 'tests/structured-attrs-shell.nix')
-rw-r--r--tests/structured-attrs-shell.nix19
1 files changed, 19 insertions, 0 deletions
diff --git a/tests/structured-attrs-shell.nix b/tests/structured-attrs-shell.nix
new file mode 100644
index 000000000..0c01c2568
--- /dev/null
+++ b/tests/structured-attrs-shell.nix
@@ -0,0 +1,19 @@
+with import ./config.nix;
+let
+ dep = mkDerivation {
+ name = "dep";
+ buildCommand = ''
+ mkdir $out; echo bla > $out/bla
+ '';
+ };
+in
+mkDerivation {
+ name = "structured2";
+ __structuredAttrs = true;
+ outputs = [ "out" "dev" ];
+ my.list = [ "a" "b" "c" ];
+ exportReferencesGraph.refs = [ dep ];
+ buildCommand = ''
+ touch ''${outputs[out]}; touch ''${outputs[dev]}
+ '';
+}