Merge pull request #1169 from dezgeg/fix-shell-shebang
Fix nix-shell shebang usage
This commit is contained in:
		
						commit
						ae1e4dfad2
					
				
					 5 changed files with 74 additions and 2 deletions
				
			
		|  | @ -117,7 +117,7 @@ int main(int argc, char ** argv) | ||||||
|                     inShebang = true; |                     inShebang = true; | ||||||
|                     for (int i = 2; i < argc - 1; ++i) |                     for (int i = 2; i < argc - 1; ++i) | ||||||
|                         savedArgs.push_back(argv[i]); |                         savedArgs.push_back(argv[i]); | ||||||
|                     std::vector<string> args; |                     args.clear(); | ||||||
|                     for (auto line : lines) { |                     for (auto line : lines) { | ||||||
|                         line = chomp(line); |                         line = chomp(line); | ||||||
|                         std::smatch match; |                         std::smatch match; | ||||||
|  | @ -276,6 +276,7 @@ int main(int argc, char ** argv) | ||||||
|                 if (n >= args.size()) { |                 if (n >= args.size()) { | ||||||
|                     throw UsageError(format("%1% requires an argument") % arg); |                     throw UsageError(format("%1% requires an argument") % arg); | ||||||
|                 } |                 } | ||||||
|  |                 interactive = false; | ||||||
|                 auto interpreter = args[n]; |                 auto interpreter = args[n]; | ||||||
|                 auto execArgs = ""; |                 auto execArgs = ""; | ||||||
| 
 | 
 | ||||||
|  |  | ||||||
|  | @ -11,7 +11,7 @@ nix_tests = \ | ||||||
|   multiple-outputs.sh import-derivation.sh fetchurl.sh optimise-store.sh \
 |   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 \
 |   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 \
 |   check-reqs.sh pass-as-file.sh tarball.sh restricted.sh \
 | ||||||
|   placeholders.sh |   placeholders.sh nix-shell.sh | ||||||
|   # parallel.sh |   # parallel.sh | ||||||
| 
 | 
 | ||||||
| install-tests += $(foreach x, $(nix_tests), tests/$(x)) | install-tests += $(foreach x, $(nix_tests), tests/$(x)) | ||||||
|  |  | ||||||
							
								
								
									
										21
									
								
								tests/nix-shell.sh
									
										
									
									
									
										Normal file
									
								
							
							
						
						
									
										21
									
								
								tests/nix-shell.sh
									
										
									
									
									
										Normal 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
									
								
							
							
						
						
									
										46
									
								
								tests/shell.nix
									
										
									
									
									
										Normal 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
									
								
							
							
						
						
									
										4
									
								
								tests/shell.shebang.sh
									
										
									
									
									
										Executable 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)" | ||||||
		Loading…
	
	Add table
		Add a link
		
	
		Reference in a new issue