forked from lix-project/lix
Add inNixShell = true to nix-shell auto-call
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
This commit is contained in:
parent
2f96a89646
commit
9d612c393a
|
@ -245,7 +245,21 @@ static void _main(int argc, char * * argv)
|
||||||
auto state = std::make_unique<EvalState>(myArgs.searchPath, store);
|
auto state = std::make_unique<EvalState>(myArgs.searchPath, store);
|
||||||
state->repair = repair;
|
state->repair = repair;
|
||||||
|
|
||||||
Bindings & autoArgs = *myArgs.getAutoArgs(*state);
|
Bindings & autoArgs = *[&](){
|
||||||
|
Bindings *userAutoArgs = myArgs.getAutoArgs(*state);
|
||||||
|
if (runEnv) {
|
||||||
|
Bindings * res = state->allocBindings(userAutoArgs->size() + 1);
|
||||||
|
Value * tru = state->allocValue();
|
||||||
|
mkBool(*tru, true);
|
||||||
|
res->push_back(Attr(state->symbols.create("inNixShell"), tru));
|
||||||
|
for (auto & i : *userAutoArgs) {
|
||||||
|
res->push_back(i);
|
||||||
|
}
|
||||||
|
res->sort();
|
||||||
|
return res;
|
||||||
|
}
|
||||||
|
else return userAutoArgs;
|
||||||
|
}();
|
||||||
|
|
||||||
if (packages) {
|
if (packages) {
|
||||||
std::ostringstream joined;
|
std::ostringstream joined;
|
||||||
|
|
|
@ -7,9 +7,9 @@ export IMPURE_VAR=foo
|
||||||
export SELECTED_IMPURE_VAR=baz
|
export SELECTED_IMPURE_VAR=baz
|
||||||
export NIX_BUILD_SHELL=$SHELL
|
export NIX_BUILD_SHELL=$SHELL
|
||||||
output=$(nix-shell --pure shell.nix -A shellDrv --run \
|
output=$(nix-shell --pure shell.nix -A shellDrv --run \
|
||||||
'echo "$IMPURE_VAR - $VAR_FROM_STDENV_SETUP - $VAR_FROM_NIX"')
|
'echo "$IMPURE_VAR - $VAR_FROM_STDENV_SETUP - $VAR_FROM_NIX - $TEST_inNixShell"')
|
||||||
|
|
||||||
[ "$output" = " - foo - bar" ]
|
[ "$output" = " - foo - bar - true" ]
|
||||||
|
|
||||||
# Test --keep
|
# Test --keep
|
||||||
output=$(nix-shell --pure --keep SELECTED_IMPURE_VAR shell.nix -A shellDrv --run \
|
output=$(nix-shell --pure --keep SELECTED_IMPURE_VAR shell.nix -A shellDrv --run \
|
||||||
|
@ -19,10 +19,10 @@ output=$(nix-shell --pure --keep SELECTED_IMPURE_VAR shell.nix -A shellDrv --run
|
||||||
|
|
||||||
# Test nix-shell on a .drv
|
# Test nix-shell on a .drv
|
||||||
[[ $(nix-shell --pure $(nix-instantiate shell.nix -A shellDrv) --run \
|
[[ $(nix-shell --pure $(nix-instantiate shell.nix -A shellDrv) --run \
|
||||||
'echo "$IMPURE_VAR - $VAR_FROM_STDENV_SETUP - $VAR_FROM_NIX"') = " - foo - bar" ]]
|
'echo "$IMPURE_VAR - $VAR_FROM_STDENV_SETUP - $VAR_FROM_NIX - $TEST_inNixShell"') = " - foo - bar - false" ]]
|
||||||
|
|
||||||
[[ $(nix-shell --pure $(nix-instantiate shell.nix -A shellDrv) --run \
|
[[ $(nix-shell --pure $(nix-instantiate shell.nix -A shellDrv) --run \
|
||||||
'echo "$IMPURE_VAR - $VAR_FROM_STDENV_SETUP - $VAR_FROM_NIX"') = " - foo - bar" ]]
|
'echo "$IMPURE_VAR - $VAR_FROM_STDENV_SETUP - $VAR_FROM_NIX - $TEST_inNixShell"') = " - foo - bar - false" ]]
|
||||||
|
|
||||||
# Test nix-shell on a .drv symlink
|
# Test nix-shell on a .drv symlink
|
||||||
|
|
||||||
|
|
|
@ -1,4 +1,4 @@
|
||||||
{ }:
|
{ inNixShell ? false }:
|
||||||
|
|
||||||
with import ./config.nix;
|
with import ./config.nix;
|
||||||
|
|
||||||
|
@ -22,6 +22,7 @@ let pkgs = rec {
|
||||||
name = "shellDrv";
|
name = "shellDrv";
|
||||||
builder = "/does/not/exist";
|
builder = "/does/not/exist";
|
||||||
VAR_FROM_NIX = "bar";
|
VAR_FROM_NIX = "bar";
|
||||||
|
TEST_inNixShell = if inNixShell then "true" else "false";
|
||||||
inherit stdenv;
|
inherit stdenv;
|
||||||
};
|
};
|
||||||
|
|
||||||
|
|
Loading…
Reference in a new issue