diff options
author | deliciouslytyped <47436522+deliciouslytyped@users.noreply.github.com> | 2021-06-14 15:06:23 +0200 |
---|---|---|
committer | sterni <sternenseemann@systemli.org> | 2021-06-18 01:39:59 +0200 |
commit | a71e906e3a0bec9c5fece94262e96de83e58c1f3 (patch) | |
tree | 0e8dd8f98769a0d32ca3704cb9983acc389d255d /pkgs/test/default.nix | |
parent | 204eb98e85679f3da6190048730434c3e62bfb90 (diff) | |
download | nixpkgs-a71e906e3a0bec9c5fece94262e96de83e58c1f3.tar nixpkgs-a71e906e3a0bec9c5fece94262e96de83e58c1f3.tar.gz nixpkgs-a71e906e3a0bec9c5fece94262e96de83e58c1f3.tar.bz2 nixpkgs-a71e906e3a0bec9c5fece94262e96de83e58c1f3.tar.lz nixpkgs-a71e906e3a0bec9c5fece94262e96de83e58c1f3.tar.xz nixpkgs-a71e906e3a0bec9c5fece94262e96de83e58c1f3.tar.zst nixpkgs-a71e906e3a0bec9c5fece94262e96de83e58c1f3.zip |
trivial-builders: refactor writeTextFile to be overridable
This fixes #126344, specifically with the goal of enabling overriding the checkPhase argument. See `design notes` at the end for details. This allows among other things, enabling bash extension for the `checkPhase`. Previously using such bash extensions was prohibited by the `writeShellScript` code because there was no way to enable the extension in the checker. As an example: ```nix (writeShellScript "foo" '' shopt -s extglob echo @(foo|bar) '').overrideAttrs (old: { checkPhase = '' # use subshell to preserve outer environment ( export BASHOPTS shopt -s extglob ${old.checkPhase} ) ''; }) ``` This commit also adds tests for this feature to `pkgs/tests/default.nix`, under `trivial-overriding`. The test code is located at `pkgs/build-support/trivial-builders/test-overriding.nix`. Design notes: ------------- Per discussion with @sternenseemann, the original approach of just wrapping `writeTextFile` in `makeOverridable` had the issue that combined with `callPackage` in the following form, would shadow the `.override` attribute of the `writeTextFile`: ```nix with import <nixpkgs>; callPackage ({writeShellScript}: writeShellScript "foo" "echo foo") ``` A better approach can be seen in this commit, where `checkPhase` is moved from an argument of `writeTextFile`, which is substituted into `buildCommand`, into an `mkDerivation` argument, which is substituted from the environment and `eval`-ed. (see the source) This way we can simple use `.overideAttrs` as usual, and this also makes `checkPhase` a bit more conformant to `mkDerivation` naming, with respect to phases generally being overridable attrs. Co-authored-by: sterni <sternenseemann@systemli.org> Co-authored-by: Naïm Favier <n@monade.li>
Diffstat (limited to 'pkgs/test/default.nix')
-rw-r--r-- | pkgs/test/default.nix | 1 |
1 files changed, 1 insertions, 0 deletions
diff --git a/pkgs/test/default.nix b/pkgs/test/default.nix index 8c9e7b6f281..ebf732839ce 100644 --- a/pkgs/test/default.nix +++ b/pkgs/test/default.nix @@ -52,6 +52,7 @@ with pkgs; cuda = callPackage ./cuda { }; trivial = callPackage ../build-support/trivial-builders/test.nix {}; + trivial-overriding = callPackage ../build-support/trivial-builders/test-overriding.nix {}; writers = callPackage ../build-support/writers/test.nix {}; } |