1
0
Fork 0
mirror of https://github.com/NixOS/nix synced 2025-07-07 06:01:48 +02:00

nix repl: make symlinks with the :bl command

Requested by ppepino on the Matrix:
https://matrix.to/#/!KqkRjyTEzAGRiZFBYT:nixos.org/$Tb32BS3rVE2BSULAX4sPm0h6CDewX2hClOTGzTC7gwM?via=nixos.org&via=matrix.org&via=nixos.dev

This adds a new command, :bl, which works like :b but also creates
a GC root symlink to the various derivation outputs.

ckie@cookiemonster ~/git/nix -> ./outputs/out/bin/nix repl
Welcome to Nix 2.6.0. Type :? for help.

nix-repl> :l <nixpkgs>
Added 16118 variables.

nix-repl> :b runCommand "hello" {} "echo hi > $out"

This derivation produced the following outputs:
  ./repl-result-out -> /nix/store/kidqq2acdpi05c4a9mlbg2baikmzik44-hello
[1 built, 0.0 MiB DL]
ckie@cookiemonster ~/git/nix -> cat ./repl-result-out
hi
This commit is contained in:
ckie 2022-04-18 20:21:47 +03:00
parent ee57f91413
commit 0e2b01b14e
No known key found for this signature in database
GPG key ID: 13E79449C0525215
4 changed files with 31 additions and 9 deletions

View file

@ -1,29 +1,37 @@
source common.sh
testDir="$PWD"
cd "$TEST_ROOT"
replCmds="
simple = 1
simple = import ./simple.nix
:b simple
simple = import $testDir/simple.nix
:bl simple
:log simple
"
replFailingCmds="
failing = import ./simple-failing.nix
failing = import $testDir/simple-failing.nix
:b failing
:log failing
"
replUndefinedVariable="
import ./undefined-variable.nix
import $testDir/undefined-variable.nix
"
testRepl () {
local nixArgs=("$@")
rm -rf repl-result-out || true # cleanup from other runs backed by a foreign nix store
local replOutput="$(nix repl "${nixArgs[@]}" <<< "$replCmds")"
echo "$replOutput"
local outPath=$(echo "$replOutput" |&
grep -o -E "$NIX_STORE_DIR/\w*-simple")
nix path-info "${nixArgs[@]}" "$outPath"
[ "$(realpath ./repl-result-out)" == "$outPath" ] || fail "nix repl :bl doesn't make a symlink"
# run it again without checking the output to ensure the previously created symlink gets overwritten
nix repl "${nixArgs[@]}" <<< "$replCmds" || fail "nix repl does not work twice with the same inputs"
# simple.nix prints a PATH during build
echo "$replOutput" | grep -qs 'PATH=' || fail "nix repl :log doesn't output logs"
local replOutput="$(nix repl "${nixArgs[@]}" <<< "$replFailingCmds" 2>&1)"