nixpkgs/pkgs
deliciouslytyped a71e906e3a 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>
2021-06-18 01:39:59 +02:00
..
applications Merge master into staging-next 2021-06-17 18:04:42 +00:00
build-support trivial-builders: refactor writeTextFile to be overridable 2021-06-18 01:39:59 +02:00
common-updater
data Merge master into staging-next 2021-06-17 18:04:42 +00:00
desktops
development libqmi: 1.28.4 -> 1.28.6 2021-06-17 20:56:02 +00:00
games
misc vscode-extensions.golang.Go: 0.18.1 -> 0.25.1 2021-06-17 13:45:16 +09:00
os-specific Merge master into staging-next 2021-06-17 12:05:01 +00:00
pkgs-lib
servers Merge master into staging-next 2021-06-17 18:04:42 +00:00
shells
stdenv
test trivial-builders: refactor writeTextFile to be overridable 2021-06-18 01:39:59 +02:00
tools modemmanager: add freedesktop team to maintainers 2021-06-17 21:47:03 +00:00
top-level Merge master into staging-next 2021-06-17 18:04:42 +00:00