![pennae](/assets/img/avatar_default.png)
previously :a would override old bindings of a name with new values if the added set contained names that were already bound. in nix 2.6 this doesn't happen any more, which is potentially confusing. fixes #6041
66 lines
1.5 KiB
Bash
66 lines
1.5 KiB
Bash
source common.sh
|
|
|
|
replCmds="
|
|
simple = 1
|
|
simple = import ./simple.nix
|
|
:b simple
|
|
:log simple
|
|
"
|
|
|
|
replFailingCmds="
|
|
failing = import ./simple-failing.nix
|
|
:b failing
|
|
:log failing
|
|
"
|
|
|
|
replUndefinedVariable="
|
|
import ./undefined-variable.nix
|
|
"
|
|
|
|
testRepl () {
|
|
local nixArgs=("$@")
|
|
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"
|
|
# 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)"
|
|
echo "$replOutput"
|
|
echo "$replOutput" | grep -qs 'This should fail' \
|
|
|| fail "nix repl :log doesn't output logs for a failed derivation"
|
|
local replOutput="$(nix repl --show-trace "${nixArgs[@]}" <<< "$replUndefinedVariable" 2>&1)"
|
|
echo "$replOutput"
|
|
echo "$replOutput" | grep -qs "while evaluating the file" \
|
|
|| fail "nix repl --show-trace doesn't show the trace"
|
|
}
|
|
|
|
# Simple test, try building a drv
|
|
testRepl
|
|
# Same thing (kind-of), but with a remote store.
|
|
testRepl --store "$TEST_ROOT/store?real=$NIX_STORE_DIR"
|
|
|
|
testReplResponse () {
|
|
local response="$(nix repl <<< "$1")"
|
|
echo "$response" | grep -qs "$2" \
|
|
|| fail "repl command set:
|
|
|
|
$1
|
|
|
|
does not respond with:
|
|
|
|
$2
|
|
|
|
but with:
|
|
|
|
$response"
|
|
}
|
|
|
|
# :a uses the newest version of a symbol
|
|
testReplResponse '
|
|
:a { a = "1"; }
|
|
:a { a = "2"; }
|
|
"result: ${a}"
|
|
' "result: 2"
|