Merge pull request #1169 from dezgeg/fix-shell-shebang

Fix nix-shell shebang usage
This commit is contained in:
Eelco Dolstra 2017-01-03 10:08:15 +01:00 committed by GitHub
commit ae1e4dfad2
5 changed files with 74 additions and 2 deletions

View file

@ -117,7 +117,7 @@ int main(int argc, char ** argv)
inShebang = true;
for (int i = 2; i < argc - 1; ++i)
savedArgs.push_back(argv[i]);
std::vector<string> args;
args.clear();
for (auto line : lines) {
line = chomp(line);
std::smatch match;
@ -276,6 +276,7 @@ int main(int argc, char ** argv)
if (n >= args.size()) {
throw UsageError(format("%1% requires an argument") % arg);
}
interactive = false;
auto interpreter = args[n];
auto execArgs = "";

View file

@ -11,7 +11,7 @@ nix_tests = \
multiple-outputs.sh import-derivation.sh fetchurl.sh optimise-store.sh \
binary-cache.sh nix-profile.sh repair.sh dump-db.sh case-hack.sh \
check-reqs.sh pass-as-file.sh tarball.sh restricted.sh \
placeholders.sh
placeholders.sh nix-shell.sh
# parallel.sh
install-tests += $(foreach x, $(nix_tests), tests/$(x))

21
tests/nix-shell.sh Normal file
View file

@ -0,0 +1,21 @@
source common.sh
clearStore
# Test nix-shell -A
export IMPURE_VAR=foo
output=$(nix-shell --pure shell.nix -A shellDrv --run \
'echo "$IMPURE_VAR - $VAR_FROM_STDENV_SETUP - $VAR_FROM_NIX"')
[ "$output" = " - foo - bar" ]
# Test nix-shell -p
output=$(NIX_PATH=nixpkgs=shell.nix nix-shell --pure -p foo bar --run 'echo "$(foo) $(bar)"')
[ "$output" = "foo bar" ]
# Test nix-shell shebang mode
sed -e "s|@ENV_PROG@|$(type -p env)|" shell.shebang.sh > $TEST_ROOT/shell.shebang.sh
chmod a+rx $TEST_ROOT/shell.shebang.sh
output=$($TEST_ROOT/shell.shebang.sh)
[ "$output" = "foo bar" ]

46
tests/shell.nix Normal file
View file

@ -0,0 +1,46 @@
{ }:
with import ./config.nix;
rec {
setupSh = builtins.toFile "setup" ''
export VAR_FROM_STDENV_SETUP=foo
for pkg in $buildInputs; do
export PATH=$PATH:$pkg/bin
done
'';
stdenv = mkDerivation {
name = "stdenv";
buildCommand = ''
mkdir -p $out
ln -s ${setupSh} $out/setup
'';
};
shellDrv = mkDerivation {
name = "shellDrv";
builder = "/does/not/exist";
VAR_FROM_NIX = "bar";
inherit stdenv;
};
# Used by nix-shell -p
runCommand = name: args: buildCommand: mkDerivation (args // {
inherit name buildCommand stdenv;
});
foo = runCommand "foo" {} ''
mkdir -p $out/bin
echo 'echo foo' > $out/bin/foo
chmod a+rx $out/bin/foo
'';
bar = runCommand "bar" {} ''
mkdir -p $out/bin
echo 'echo bar' > $out/bin/bar
chmod a+rx $out/bin/bar
'';
bash = shell;
}

4
tests/shell.shebang.sh Executable file
View file

@ -0,0 +1,4 @@
#! @ENV_PROG@ nix-shell
#! nix-shell -I nixpkgs=shell.nix --option use-binary-caches false
#! nix-shell --pure -i bash -p foo bar
echo "$(foo) $(bar)"