aboutsummaryrefslogtreecommitdiff
path: root/tests/nix-shell.sh
AgeCommit message (Collapse)Author
2023-03-08Harden tests' bashJohn Ericson
Use `set -u` and `set -o pipefail` to catch accidental mistakes and failures more strongly. - `set -u` catches the use of undefined variables - `set -o pipefail` catches failures (like `set -e`) earlier in the pipeline. This makes the tests a bit more robust. It is nice to read code not worrying about these spurious success paths (via uncaught) errors undermining the tests. Indeed, I caught some bugs doing this. There are a few tests where we run a command that should fail, and then search its output to make sure the failure message is one that we expect. Before, since the `grep` was the last command in the pipeline the exit code of those failing programs was silently ignored. Now with `set -o pipefail` it won't be, and we have to do something so the expected failure doesn't accidentally fail the test. To do that we use `expect` and a new `expectStderr` to check for the exact failing exit code. See the comments on each for why. `grep -q` is replaced with `grepQuiet`, see the comments on that function for why. `grep -v` when we just want the exit code is replaced with `grepInverse, see the comments on that function for why. `grep -q -v` together is, surprise surprise, replaced with `grepQuietInverse`, which is both combined. Co-authored-by: Robert Hensing <roberth@users.noreply.github.com>
2022-06-22tests/nix-shell: more meaningful testcaseMaximilian Bosch
2022-06-13nix-shell: restore backwards-compat with old nixpkgsMaximilian Bosch
Basically an attempt to resume fixing #5543 for a breakage introduced earlier[1]. Basically, when evaluating an older `nixpkgs` with `nix-shell` the following error occurs: λ ma27 [~] → nix-shell -I nixpkgs=channel:nixos-18.03 -p nix error: anonymous function at /nix/store/zakqwc529rb6xcj8pwixjsxscvlx9fbi-source/pkgs/top-level/default.nix:20:1 called with unexpected argument 'inNixShell' at /nix/store/zakqwc529rb6xcj8pwixjsxscvlx9fbi-source/pkgs/top-level/impure.nix:82:1: 81| 82| import ./. (builtins.removeAttrs args [ "system" "platform" ] // { | ^ 83| inherit config overlays crossSystem; This is a problem because one of the main selling points of Nix is that you can evaluate any old Nix expression and still get the same result (which also means that it *still evaluates*). In fact we're deprecating, but not removing a lot of stuff for that reason such as unquoted URLs[2] or `builtins.toPath`. However this property was essentially thrown away here. The change is rather simple: check if `inNixShell` is specified in the formals of an auto-called function. This means that { inNixShell ? false }: builtins.trace inNixShell (with import <nixpkgs> { }; makeShell { name = "foo"; }) will show `trace: true` while args@{ ... }: builtins.trace args.inNixShell (with import <nixpkgs> { }; makeShell { name = "foo"; }) will throw the following error: error: attribute 'inNixShell' missing This is explicitly needed because the function in `pkgs/top-level/impure.nix` of e.g. NixOS 18.03 has an ellipsis[3], but passes the attribute-set on to another lambda with formals that doesn't have an ellipsis anymore (hence the error from above). This was perhaps a mistake, but we can't fix it anymore. This also means that there's AFAICS no proper way to check if the attr-set that's passed to the Nix code via `EvalState::autoCallFunction` is eventually passed to a lambda with formals where `inNixShell` is missing. However, this fix comes with a certain price. Essentially every `shell.nix` that assumes `inNixShell` to be passed to the formals even without explicitly specifying it would break with this[4]. However I think that this is ugly, but preferable: * Nix 2.3 was declared stable by NixOS up until recently (well, it still is as long as 21.11 is alive), so most people might not have even noticed that feature. * We're talking about a way shorter time-span with this change being in the wild, so the fallout should be smaller IMHO. [1] https://github.com/NixOS/nix/commit/9d612c393abc3a73590650d24bcfe2ee57792872 [2] https://github.com/NixOS/rfcs/pull/45#issuecomment-488232537 [3] https://github.com/NixOS/nixpkgs/blob/release-18.03/pkgs/top-level/impure.nix#L75 [4] See e.g. the second expression in this commit-message or the changes for `tests/ca/nix-shell.sh`.
2021-11-26Make `nix-shell` work when nixpkgs is content-addressedregnat
Fix #5259
2021-07-31nix-shell -p: pass --arg values as nixpkgs paramsldesgoui
2021-07-09nix print-dev-env: Add --json flagEelco Dolstra
2021-07-09nix develop: Add a test for bash functionsEelco Dolstra
2021-07-09Add test for #4992Eelco Dolstra
2021-07-09nix develop: Add a test for arraysEelco Dolstra
2021-06-11Make `nix develop` work with CA derivationsregnat
Fix #4823
2021-06-11Make `nix-shell` support content-addressed derivationsregnat
Resolve the derivation before trying to load its environment − essentially reproducing what the build loop does − so that we can effectively access our dependencies (and not just their placeholders). Fix #4821
2020-11-24Escape filename given to nix-shell in shebang modeLily Ballard
This prevents spaces or other metacharacters from causing nix-shell to execute the wrong path. Fixes #4229.
2020-11-09Add test case for incidentally fixed #4228Sebastian Ullrich
2020-11-09Make test case more preciseSebastian Ullrich
Co-authored-by: Théophane Hufschmitt <regnat@users.noreply.github.com>
2020-11-09nix develop: Preserve stdin with `-c`Sebastian Ullrich
2020-09-03Remove the --indirect flagEelco Dolstra
All GC roots are now indirect.
2020-07-03Hopefully fix macOS test failureEelco Dolstra
2020-07-02Add test for nix developEelco Dolstra
2019-10-27Add inNixShell = true to nix-shell auto-callRobert Hensing
This is an alternative to the IN_NIX_SHELL environment variable, allowing the expression to adapt itself to nix-shell without triggering those adaptations when used as a dependency of another shell. Closes #3147
2019-06-15Fix test failures when $TMPDIR changesEelco Dolstra
(cherry picked from commit c38c726eb5d447c7e9d894d57cd05ac46c173ddd)
2018-08-02Allows selectively adding environment variables to pure shells.Samuel Dionne-Riel
Includes documentation and test.
2018-04-09Hardcodes `nix-shell` instead of `/usr/bin/env nix-shell`...Samuel Dionne-Riel
... in the ruby shebang test.
2018-04-08Adds `nix-shell` test for special-cased ruby interpreter.Samuel Dionne-Riel
The test fakes the interpreter only to verify the arguments it would be given.
2018-03-16nix-shell: allow symlinks to .drvsLinus Heckemann
This makes persistent shell environments easier to use.
2017-11-24nix-shell/nix-build: Support .drv files againEelco Dolstra
Fixes #1663. Also handle '!<output-name>' (#1694).
2017-02-24Fix nix-shell testsEelco Dolstra
The nix-shell fix in 668fef2e4f1c7758e2a55e355b4826014d5b7ba9 revealed that we had some --pure tests that incorrectly depended on PATH from config.nix's mkDerivation being overwritten by the caller's PATH. http://hydra.nixos.org/build/49242478
2017-01-03nix-shell: In #! mode, pass the last argumentEelco Dolstra
"i < argc - 1" should be "i < argc".
2017-01-03tests: Add simple tests for nix-shellTuomas Tynkkynen
nix-shell -A, -p and -i are lightly tested.