Fix and extend nix-shell baseDir test

This commit is contained in:
Robert Hensing 2024-07-07 00:22:21 +02:00
parent d5854f33e2
commit f5b59fbc64
6 changed files with 20 additions and 2 deletions

View File

@ -202,7 +202,7 @@ Bindings * MixEvalArgs::getAutoArgs(EvalState & state)
auto v = state.allocValue(); auto v = state.allocValue();
std::visit(overloaded { std::visit(overloaded {
[&](const AutoArgExpr & arg) { [&](const AutoArgExpr & arg) {
state.mkThunk_(*v, state.parseExprFromString(arg.expr, state.rootPath("."))); state.mkThunk_(*v, state.parseExprFromString(arg.expr, true ? state.rootPath(absPath(getCommandBaseDir())) : state.rootPath(".")));
}, },
[&](const AutoArgString & arg) { [&](const AutoArgString & arg) {
v->mkString(arg.s); v->mkString(arg.s);

View File

@ -29,6 +29,7 @@ struct Completions final : AddCompletions
*/ */
class RootArgs : virtual public Args class RootArgs : virtual public Args
{ {
protected:
/** /**
* @brief The command's "working directory", but only set when top level. * @brief The command's "working directory", but only set when top level.
* *

View File

@ -183,6 +183,9 @@ static void main_nix_build(int argc, char * * argv)
struct MyArgs : LegacyArgs, MixEvalArgs struct MyArgs : LegacyArgs, MixEvalArgs
{ {
using LegacyArgs::LegacyArgs; using LegacyArgs::LegacyArgs;
void setBaseDir(Path baseDir) {
commandBaseDir = baseDir;
}
}; };
MyArgs myArgs(myName, [&](Strings::iterator & arg, const Strings::iterator & end) { MyArgs myArgs(myName, [&](Strings::iterator & arg, const Strings::iterator & end) {
@ -290,6 +293,9 @@ static void main_nix_build(int argc, char * * argv)
state->repair = myArgs.repair; state->repair = myArgs.repair;
if (myArgs.repair) buildMode = bmRepair; if (myArgs.repair) buildMode = bmRepair;
if (inShebang) {
myArgs.setBaseDir(absPath(dirOf(script)));
}
auto autoArgs = myArgs.getAutoArgs(*state); auto autoArgs = myArgs.getAutoArgs(*state);
auto autoArgsWithInNixShell = autoArgs; auto autoArgsWithInNixShell = autoArgs;

View File

@ -72,8 +72,9 @@ chmod a+rx $TEST_ROOT/shell.shebang.expr
! $TEST_ROOT/shell.shebang.expr bar ! $TEST_ROOT/shell.shebang.expr bar
cp shell.nix config.nix $TEST_ROOT cp shell.nix config.nix $TEST_ROOT
# Should succeed # Should succeed
echo "cwd: $PWD"
output=$($TEST_ROOT/shell.shebang.expr bar) output=$($TEST_ROOT/shell.shebang.expr bar)
[ "$output" = '-e load(ARGV.shift) -- '"$TEST_ROOT"'/shell.shebang.expr bar' ] [ "$output" = foo ]
# Test nix-shell shebang mode again with metacharacters in the filename. # Test nix-shell shebang mode again with metacharacters in the filename.
# First word of filename is chosen to not match any file in the test root. # First word of filename is chosen to not match any file in the test root.

View File

@ -43,6 +43,7 @@ let pkgs = rec {
ASCII_PERCENT = "%"; ASCII_PERCENT = "%";
ASCII_AT = "@"; ASCII_AT = "@";
TEST_inNixShell = if inNixShell then "true" else "false"; TEST_inNixShell = if inNixShell then "true" else "false";
FOO = fooContents;
inherit stdenv; inherit stdenv;
outputs = ["dev" "out"]; outputs = ["dev" "out"];
} // { } // {

View File

@ -0,0 +1,9 @@
#! @ENV_PROG@ nix-shell
#! nix-shell "{ script, path, ... }: assert path == ./shell.nix; script { }"
#! nix-shell --no-substitute
#! nix-shell --expr
#! nix-shell --arg script "import ./shell.nix"
#! nix-shell --arg path "./shell.nix"
#! nix-shell -A shellDrv
#! nix-shell -i bash
echo "$FOO"